feat(route): use new member card list

This commit is contained in:
Julien Oculi 2024-07-11 11:29:53 +02:00
parent 708dfe1b71
commit 5749ef8e62
3 changed files with 49 additions and 45 deletions

View file

@ -3,10 +3,10 @@ import { AutoGrid } from ':components/AutoGrid.tsx'
import { CohabitInfoTable } from ':components/CohabitInfoTable.tsx' import { CohabitInfoTable } from ':components/CohabitInfoTable.tsx'
import { Heros } from ':components/Heros.tsx' import { Heros } from ':components/Heros.tsx'
import { MachineCard, machineMock } from ':components/MachineCard.tsx' import { MachineCard, machineMock } from ':components/MachineCard.tsx'
import { MemberCard, memberMock } from ':components/MemberCard.tsx'
import { ProjectCard, projectMock } from ':components/ProjectCard.tsx' import { ProjectCard, projectMock } from ':components/ProjectCard.tsx'
import { SponsorCards } from ':components/SponsorCards.tsx' import { SponsorCards } from ':components/SponsorCards.tsx'
import BlogCardList from ':islands/BlogCardList.tsx' import BlogCardList from ':islands/BlogCardList.tsx'
import MemberCardList from ':islands/MemberCardList.tsx'
export default function Home() { export default function Home() {
return ( return (
@ -18,10 +18,12 @@ export default function Home() {
<section id='first-section'> <section id='first-section'>
<h2>Nos actus</h2> <h2>Nos actus</h2>
<AutoGrid columnWidth='15rem' style={{ alignItems: 'center' }}> <AutoGrid columnWidth='15rem' style={{ alignItems: 'center' }}>
<> <BlogCardList
<BlogCardList limit={4} usePlaceholder={true} useObserver={true} /> limit={4}
usePlaceholder={true}
useObserver={true}
/>
<a href='/blog' class='cta'>Voir plus</a> <a href='/blog' class='cta'>Voir plus</a>
</>
</AutoGrid> </AutoGrid>
</section> </section>
<section> <section>
@ -50,10 +52,12 @@ export default function Home() {
<section> <section>
<h2>Nos membres</h2> <h2>Nos membres</h2>
<AutoGrid columnWidth='15rem' style={{ alignItems: 'center' }}> <AutoGrid columnWidth='15rem' style={{ alignItems: 'center' }}>
<> <MemberCardList
{memberMock.slice(0, 4).map(MemberCard)} limit={4}
usePlaceholder={true}
useObserver={true}
/>
<a href='/membres' class='cta'>Nous découvrir</a> <a href='/membres' class='cta'>Nous découvrir</a>
</>
</AutoGrid> </AutoGrid>
</section> </section>
<section> <section>

View file

@ -1,31 +1,19 @@
import { PageProps } from '$fresh/server.ts' import { PageProps } from '$fresh/server.ts'
import { Markdown } from ':components/Markdown.tsx' import { Markdown } from ':components/Markdown.tsx'
import { MemberCard, memberMock } from ':components/MemberCard.tsx' import { MemberCard } from ':components/MemberCard.tsx'
import { db } from ':src/db/mod.ts'
import { fetchCarnet, userToMemberCardProps } from ':src/members/mod.ts'
const db = [ export default async function Member(_: Request, { params, url }: PageProps) {
'julien.oculi', const uuid = params.id as ReturnType<Crypto['randomUUID']>
] const user = await db.ressource.user.get({ uuid }).catch(() => undefined)
async function getCarnet(user: string): Promise<string> { if (!user) {
try {
const response = await fetch(
`https://git.cohabit.fr/${user}/.carnet/raw/branch/main/index.md`,
)
return response.text()
} catch (error) {
return 'Carnet introuvable\n```js\nString(error)\n```'
}
}
export default async function Member(_: Request, { params }: PageProps) {
const id = Number(params.id)
const Member = memberMock.at(id)
if (!Member) {
return <h3>Membre inconnu, peut être serez vous le prochain</h3> return <h3>Membre inconnu, peut être serez vous le prochain</h3>
} }
const carnet = await getCarnet(db.at(id)!) const memberCardProps = await userToMemberCardProps(user)
const carnet = await fetchCarnet(user.login)
return ( return (
<div <div
@ -38,17 +26,27 @@ export default async function Member(_: Request, { params }: PageProps) {
> >
<style>{'.markdown-body { max-width: 80dvw; }'}</style> <style>{'.markdown-body { max-width: 80dvw; }'}</style>
<div> <div>
{MemberCard(Member)} {MemberCard(memberCardProps)}
<br /> <br />
<a <a
href={`/membres/${id}/portfolio/index.html`} href={`https://${
user.login.replace('.', '-')
}.portfolio.${url.hostname}`}
class='cta' class='cta'
target='_blank' target='_blank'
> >
Portfolio Portfolio
</a> </a>
</div> </div>
<Markdown>{carnet}</Markdown> <Markdown
options={{
baseUrl:
`https://git.cohabit.fr/${user.login}/.carnet/raw/branch/main/index.md`,
allowMath: true,
}}
>
{carnet}
</Markdown>
</div> </div>
) )
} }

View file

@ -1,5 +1,5 @@
import { AutoGrid } from ':components/AutoGrid.tsx' import { AutoGrid } from ':components/AutoGrid.tsx'
import { MemberCard, memberMock } from ':components/MemberCard.tsx' import MemberCardList from ':islands/MemberCardList.tsx'
export default function Membres() { export default function Membres() {
return ( return (
@ -8,32 +8,34 @@ export default function Membres() {
<section> <section>
<h2>Permanents</h2> <h2>Permanents</h2>
<AutoGrid columnWidth='15rem'> <AutoGrid columnWidth='15rem'>
{memberMock.slice(0, 5).map(MemberCard)} <MemberCardList
filters={[['group', 'user.admin']]}
usePlaceholder={true}
useObserver={true}
/>
</AutoGrid> </AutoGrid>
</section> </section>
<section> <section>
<h2>Bénévoles</h2> <h2>Bénévoles</h2>
<AutoGrid columnWidth='15rem'> <AutoGrid columnWidth='15rem'>
{memberMock.slice(5, 10).map(MemberCard)} <MemberCardList
filters={[['group', 'user.member']]}
usePlaceholder={true}
useObserver={true}
/>
</AutoGrid> </AutoGrid>
</section> </section>
<section> <section>
<h2>Service civique</h2> <h2>Service civique</h2>
<AutoGrid columnWidth='15rem'> {/* <AutoGrid columnWidth='15rem'></AutoGrid> */}
{memberMock.slice(10, 15).map(MemberCard)}
</AutoGrid>
</section> </section>
<section> <section>
<h2>Stage</h2> <h2>Stage</h2>
<AutoGrid columnWidth='15rem'> {/* <AutoGrid columnWidth='15rem'></AutoGrid> */}
{memberMock.slice(15, 20).map(MemberCard)}
</AutoGrid>
</section> </section>
<section> <section>
<h2>Étudiants</h2> <h2>Étudiants</h2>
<AutoGrid columnWidth='15rem'> {/* <AutoGrid columnWidth='15rem'></AutoGrid> */}
{memberMock.slice(0, 5).map(MemberCard)}
</AutoGrid>
</section> </section>
</> </>
) )