Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions front/src/app/equipo/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { Metadata } from "next";
import { EquipoPod } from "@/pods/equipo";

export const metadata: Metadata = {
title: "Equipo - InfoEmbalses",
};

const EquipoPage = () => {
return (
<div className="container mx-auto max-w-3xl px-4 py-8">
<div className="flex flex-col items-center gap-6">
<img src="/images/logo.svg" alt="InfoEmbalses logo" className="w-64" />
<p className="text-xl font-semibold">InfoEmbalses Versión Beta</p>
<h1 className="text-3xl font-bold">Equipo de desarrollo</h1>
<EquipoPod />
</div>
</div>
);
};

export default EquipoPage;
20 changes: 14 additions & 6 deletions front/src/layouts/footer.component.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,20 @@ export const FooterComponent: FC = () => {
<footer className="bg-base-100">
<div className="border-accent flex flex-col items-center gap-2 border-t-2 p-3">
<div className="flex flex-col items-center gap-2 pb-2.5">
<Link
href="/embalse-provincia"
className="link-accessible text-[15px] leading-none font-normal"
>
Embalses por provincias
</Link>
<div className="flex flex-wrap justify-center gap-x-3 gap-y-1">
<Link
href="/embalse-provincia"
className="link-accessible text-[15px] leading-none font-normal"
>
Embalses por provincias
</Link>
<Link
href="/equipo"
className="link-accessible text-[15px] leading-none font-normal"
>
Equipo
</Link>
</div>

<div className="flex flex-wrap justify-center gap-x-3 gap-y-1">
<Link
Expand Down
10 changes: 10 additions & 0 deletions front/src/pods/equipo/api/equipo.api-model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import type { Media } from "@content-island/api-client";

export interface Developer {
id: string;
language: "es";
lastUpdate: string;
fullname: string;
picture: Media;
linkedin: string;
}
20 changes: 20 additions & 0 deletions front/src/pods/equipo/api/equipo.api.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import "server-only";
import { unstable_cache } from "next/cache";
import type { Developer } from "./equipo.api-model";
import { contentIslandClient } from "@/lib";

export const getDeveloperListCached = unstable_cache(
async (): Promise<Developer[]> => {
try {
return await contentIslandClient.getContentList<Developer>({
contentType: "developer",
language: "es",
});
} catch (error) {
console.warn("Warning: developer list not available");
return [];
}
},
["developer-list"],
{ revalidate: 60 }
);
2 changes: 2 additions & 0 deletions front/src/pods/equipo/api/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from "./equipo.api";
export type { Developer } from "./equipo.api-model";
28 changes: 28 additions & 0 deletions front/src/pods/equipo/equipo.component.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import type { Developer } from "./api";

interface Props {
developers: Developer[];
}

export const EquipoComponent: React.FC<Props> = ({ developers }) => {
return (
<div className="flex flex-wrap justify-center gap-8">
{developers.map((dev) => (
<a
key={dev.id}
href={dev.linkedin}
target="_blank"
rel="noopener noreferrer"
className="flex flex-col items-center gap-2"
>
<img
src={dev.picture.url}
alt={dev.fullname}
className="h-24 w-24 rounded-full border-2 border-accent object-cover"
/>
<span className="text-sm font-medium">{dev.fullname}</span>
</a>
))}
</div>
);
};
7 changes: 7 additions & 0 deletions front/src/pods/equipo/equipo.pod.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { getDeveloperListCached } from "./api";
import { EquipoComponent } from "./equipo.component";

export const EquipoPod: React.FC = async () => {
const developers = await getDeveloperListCached();
return <EquipoComponent developers={developers} />;
};
1 change: 1 addition & 0 deletions front/src/pods/equipo/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { EquipoPod } from "./equipo.pod";