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 <div
class='components__auto_grid' class='components__auto_grid'
style={{ style={{
gridTemplateColumns: gridTemplateColumns: `repeat(auto-fit, minmax(${columnWidth}, 1fr));`,
`repeat(auto-fit, minmax(${columnWidth}, 1fr));`,
...style, ...style,
}} }}
> >

View file

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

View file

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

View file

@ -18,13 +18,14 @@ function RenderError(
export type Fallback = ({ error }: { error: Error }) => JSX.Element export type Fallback = ({ error }: { error: Error }) => JSX.Element
export default function Suspense( export type SuspenseProps = {
{ loader, fallback, signal, children }: {
loader: JSX.Element loader: JSX.Element
children: Promise<JSX.Element>
fallback?: Fallback fallback?: Fallback
signal?: AbortSignal signal?: AbortSignal
}, } & ({ children: Promise<JSX.Element> } | { value: Promise<JSX.Element> })
export default function Suspense(
{ loader, fallback, signal, ...props }: SuspenseProps,
) { ) {
const displayed = useSignal(loader) const displayed = useSignal(loader)
let loaded = false 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) => { .then((element) => {
if (signal?.aborted) return if (signal?.aborted) return
displayed.value = element 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 type { SessionHandlers } from ':src/session/mod.ts'
import { respondApi } from ':src/utils.ts' import { respondApi } from ':src/utils.ts'
import { getRelyingParty } from ':src/webauthn/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 { import {
generateAuthenticationOptions, generateAuthenticationOptions,
verifyAuthenticationResponse, verifyAuthenticationResponse,

View file

@ -12,7 +12,12 @@ import type {
//TODO improve workspace imports //TODO improve workspace imports
import { db } from ':src/db/mod.ts' import { db } from ':src/db/mod.ts'
import { getRelyingParty } from ':src/webauthn/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' import { encodeBase64 } from '@std/encoding'
type Params = { step: 'start' | 'finish' } type Params = { step: 'start' | 'finish' }

View file

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

View file

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

View file

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