fix(island): 🐛 transpilation cause Suspense
to broke promise as children
This commit is contained in:
parent
f24143964f
commit
c6eb438314
|
@ -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,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
|
|
@ -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>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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}</>
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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' }
|
||||||
|
|
|
@ -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 où vous pouvez
|
Venez découvrir un tout nouvelle univers où 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>
|
||||||
|
|
|
@ -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 }
|
||||||
}
|
}
|
||||||
|
|
|
@ -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'
|
||||||
|
|
Loading…
Reference in a new issue