fix(island): 🐛 transpilation cause Suspense to broke promise as children

This commit is contained in:
Julien Oculi 2024-07-16 16:34:43 +02:00
parent f24143964f
commit c6eb438314
21 changed files with 457 additions and 456 deletions

View file

@ -13,8 +13,7 @@ export function AutoGrid(
<div
class='components__auto_grid'
style={{
gridTemplateColumns:
`repeat(auto-fit, minmax(${columnWidth}, 1fr));`,
gridTemplateColumns: `repeat(auto-fit, minmax(${columnWidth}, 1fr));`,
...style,
}}
>

View file

@ -69,9 +69,7 @@ export function BlogPost(
<div class='components__blog_post__infos'>
<span>{`Visibilité : ${options.visibility}`}</span>
<span>
{`Date de délivrance : ${
new Date(options.dueDate).toLocaleString()
}`}
{`Date de délivrance : ${new Date(options.dueDate).toLocaleString()}`}
</span>
</div>
<div class='components__blog_post__description'>
@ -90,9 +88,7 @@ export function BlogPost(
function NewsTags({ tags }: Pick<BlogProps, 'tags'>) {
return (
<div class='components__blog_block__tags'>
{tags
? tags.map((tag) => <span>{tag}</span>)
: <span>Aucun tag</span>}
{tags ? tags.map((tag) => <span>{tag}</span>) : <span>Aucun tag</span>}
</div>
)
}

View file

@ -54,9 +54,8 @@ export default function CardList<ApiResponse, RefType = null>(
loader={placeholder({ ref: index === 0 ? ref : undefined })}
fallback={fallback}
signal={ac.signal}
>
{updateFromList(list, index)}
</Suspense>
value={updateFromList(list, index)}
/>
))
return <>{placeholders}</>
}

View file

@ -18,13 +18,14 @@ function RenderError(
export type Fallback = ({ error }: { error: Error }) => JSX.Element
export default function Suspense(
{ loader, fallback, signal, children }: {
export type SuspenseProps = {
loader: JSX.Element
children: Promise<JSX.Element>
fallback?: Fallback
signal?: AbortSignal
},
} & ({ children: Promise<JSX.Element> } | { value: Promise<JSX.Element> })
export default function Suspense(
{ loader, fallback, signal, ...props }: SuspenseProps,
) {
const displayed = useSignal(loader)
let loaded = false
@ -38,7 +39,9 @@ export default function Suspense(
}
})
children
//Prevent transpilation error due to children expected to not be a promise
const inner = 'value' in props ? props.value : props.children
inner
.then((element) => {
if (signal?.aborted) return
displayed.value = element

View file

@ -2,7 +2,12 @@ import { db } from ':src/db/mod.ts'
import type { SessionHandlers } from ':src/session/mod.ts'
import { respondApi } from ':src/utils.ts'
import { getRelyingParty } from ':src/webauthn/mod.ts'
import { Credential, Passkey, Ref, User } from '@cohabit/resources-manager/models'
import {
Credential,
Passkey,
Ref,
User,
} from '@cohabit/resources-manager/models'
import {
generateAuthenticationOptions,
verifyAuthenticationResponse,

View file

@ -12,7 +12,12 @@ import type {
//TODO improve workspace imports
import { db } from ':src/db/mod.ts'
import { getRelyingParty } from ':src/webauthn/mod.ts'
import { Credential, Passkey, Ref, User } from '@cohabit/resources-manager/models'
import {
Credential,
Passkey,
Ref,
User,
} from '@cohabit/resources-manager/models'
import { encodeBase64 } from '@std/encoding'
type Params = { step: 'start' | 'finish' }

View file

@ -29,9 +29,8 @@ export default function Home() {
<section>
<h2>Nos machines</h2>
<p>
Vous avez besoin d'aide pour concrétiser votre projet ? Le
Fablab vous accompagnes dans vos projets, grâce à son parc
de machine...
Vous avez besoin d'aide pour concrétiser votre projet ? Le Fablab vous
accompagnes dans vos projets, grâce à son parc de machine...
</p>
<AutoGrid columnWidth='15rem' style={{ alignItems: 'center' }}>
<>
@ -63,29 +62,26 @@ export default function Home() {
<section>
<h2>Présentation</h2>
<p>
Coh@bit est un fablab de l'université de Bordeaux ouvert à
tous les publics depuis 2016. Du collégien à
l'enseignant-chercheur, l'équipe du fablab accompagne les
adhérents dans la réalisation de leurs projets de
fabrication autour du numérique.
Coh@bit est un fablab de l'université de Bordeaux ouvert à tous les
publics depuis 2016. Du collégien à l'enseignant-chercheur, l'équipe
du fablab accompagne les adhérents dans la réalisation de leurs
projets de fabrication autour du numérique.
</p>
<p>
Venez découvrir un tout nouvelle univers vous pouvez
concrétiser vos projet, découvrir des personnes avec les
même affinités que vous, cultiver votre savoir et savoir
faire, dans l'entraide et le partage.
Venez découvrir un tout nouvelle univers vous pouvez concrétiser
vos projet, découvrir des personnes avec les même affinités que vous,
cultiver votre savoir et savoir faire, dans l'entraide et le partage.
</p>
<p>
Créer par Frédéric Bos (Directeur de l'IUT de Bordeaux) en
2014, Coh@bit (Creative Open House at Bordeaux Institut of
Technology) est une association réunissant deux entités : le
Fablab et le Technoshop.
Créer par Frédéric Bos (Directeur de l'IUT de Bordeaux) en 2014,
Coh@bit (Creative Open House at Bordeaux Institut of Technology) est
une association réunissant deux entités : le Fablab et le Technoshop.
</p>
<p>
Ouvert à tous les publics depuis 2016, allant de
l'enseignant-chercheur au collégien, l'équipe du fablab
accompagne les adhérents dans la réalisation de leurs
projets de fabrication numérique.
l'enseignant-chercheur au collégien, l'équipe du fablab accompagne les
adhérents dans la réalisation de leurs projets de fabrication
numérique.
</p>
<CohabitInfoTable />
</section>

View file

@ -75,9 +75,7 @@ async function getAuthorAndParseContent(
`git/commits/${file.last_commit_sha}?stat=false&verification=false&files=false`,
baseEndpoint,
)
const infos = await fetch(commitUrl).then((response) =>
response.json()
) as {
const infos = await fetch(commitUrl).then((response) => response.json()) as {
created: string
author: { login: string }
}

View file

@ -5,8 +5,8 @@ import type { MailAddress } from '@cohabit/resources-manager/types'
// Import Datas
import { exists } from '$std/fs/exists.ts'
import { ensureDir } from '$std/fs/mod.ts'
import groups from ":src/db/mock/groups.json" with { type: 'json' }
import users from ":src/db/mock/users.json" with { type: 'json' }
import groups from ':src/db/mock/groups.json' with { type: 'json' }
import users from ':src/db/mock/users.json' with { type: 'json' }
await ensureDir('./cache')
const dbPath = './cache/db.sqlite'