feat(route): ✨ display profile page instead of "carnet" in member page
This commit is contained in:
parent
6fb46b2411
commit
f24143964f
27
routes/carnet/[id].tsx
Normal file
27
routes/carnet/[id].tsx
Normal file
|
@ -0,0 +1,27 @@
|
|||
import { PageProps } from '$fresh/server.ts'
|
||||
import { Markdown } from ':components/Markdown.tsx'
|
||||
import { db } from ':src/db/mod.ts'
|
||||
import { fetchCarnet } from ':src/members/mod.ts'
|
||||
|
||||
export default async function Member(_: Request, { params }: PageProps) {
|
||||
const uuid = params.id as ReturnType<Crypto['randomUUID']>
|
||||
const user = await db.resource.user.get({ uuid }).catch(() => undefined)
|
||||
|
||||
if (!user) {
|
||||
return <h3>Membre inconnu, peut être serez vous le prochain</h3>
|
||||
}
|
||||
|
||||
const carnet = await fetchCarnet(user.login)
|
||||
|
||||
return (
|
||||
<Markdown
|
||||
options={{
|
||||
baseUrl:
|
||||
`https://git.cohabit.fr/${user.login}/.carnet/raw/branch/main/index.md`,
|
||||
allowMath: true,
|
||||
}}
|
||||
>
|
||||
{carnet}
|
||||
</Markdown>
|
||||
)
|
||||
}
|
|
@ -2,7 +2,7 @@ import { PageProps } from '$fresh/server.ts'
|
|||
import { Markdown } from ':components/Markdown.tsx'
|
||||
import { MemberCard } from ':components/MemberCard.tsx'
|
||||
import { db } from ':src/db/mod.ts'
|
||||
import { fetchCarnet, userToMemberCardProps } from ':src/members/mod.ts'
|
||||
import { fetchProfile, userToMemberCardProps } from ':src/members/mod.ts'
|
||||
|
||||
export default async function Member(_: Request, { params, url }: PageProps) {
|
||||
const uuid = params.id as ReturnType<Crypto['randomUUID']>
|
||||
|
@ -13,7 +13,7 @@ export default async function Member(_: Request, { params, url }: PageProps) {
|
|||
}
|
||||
|
||||
const memberCardProps = await userToMemberCardProps(user)
|
||||
const carnet = await fetchCarnet(user.login)
|
||||
const carnet = await fetchProfile(user.login)
|
||||
|
||||
return (
|
||||
<div
|
||||
|
@ -37,6 +37,13 @@ export default async function Member(_: Request, { params, url }: PageProps) {
|
|||
>
|
||||
Portfolio
|
||||
</a>
|
||||
<br />
|
||||
<a
|
||||
href={`/carnet/${uuid}`}
|
||||
class='cta'
|
||||
>
|
||||
Carnet de bord
|
||||
</a>
|
||||
</div>
|
||||
<Markdown
|
||||
options={{
|
||||
|
|
|
@ -16,7 +16,9 @@ export default function Profil({ state }: SessionPageProps) {
|
|||
</section>
|
||||
<div>
|
||||
<PassKeyRegister />
|
||||
<Button label='Disconnect' variant='primary'>Disconnect</Button>
|
||||
<Button label='Disconnect' variant='primary'>
|
||||
Disconnect
|
||||
</Button>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
|
|
|
@ -3,6 +3,22 @@ import { db } from ':src/db/mod.ts'
|
|||
import { Db } from '@cohabit/resources-manager/db'
|
||||
import { Ref, User } from '@cohabit/resources-manager/models'
|
||||
|
||||
export async function fetchProfile(login: string): Promise<string> {
|
||||
try {
|
||||
const response = await fetch(
|
||||
`https://git.cohabit.fr/${login}/.profile/raw/branch/main/README.md`,
|
||||
)
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`[${response.status}] "${response.statusText}"`)
|
||||
}
|
||||
|
||||
return response.text()
|
||||
} catch (error) {
|
||||
return `# Profil introuvable\n\`\`\`js\n${String(error)}\n\`\`\``
|
||||
}
|
||||
}
|
||||
|
||||
export async function fetchCarnet(login: string): Promise<string> {
|
||||
try {
|
||||
const response = await fetch(
|
||||
|
@ -38,7 +54,7 @@ export async function userToMemberCardProps(user: User) {
|
|||
export function dbToMemberCardProps(
|
||||
db: Db,
|
||||
): AsyncIterableIterator<MemberCardProps> {
|
||||
const memberList = db.ressource.user
|
||||
const memberList = db.resource.user
|
||||
.list()
|
||||
.map(userToMemberCardProps)
|
||||
|
||||
|
|
Loading…
Reference in a new issue