diff --git a/package.json b/package.json index fddf38f..9cf48e0 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "@fontsource/source-code-pro": "^5.0.16", "@fontsource/source-sans-pro": "^5.0.8", "@fontsource/space-mono": "^5.0.20", + "@preact/signals": "^1.3.0", "astro": "^4.4.6", "better-sqlite3": "^9.4.3", "drizzle-orm": "^0.29.4", diff --git a/src/client/UtentiPage.tsx b/src/client/UtentiPage.tsx new file mode 100644 index 0000000..6ca4cf8 --- /dev/null +++ b/src/client/UtentiPage.tsx @@ -0,0 +1,54 @@ +import { useSignal } from '@preact/signals' +import { useEffect } from 'preact/hooks' + +type User = { + uid: string + gecos: string +} + +function applyPatches(users: User[]) { + users.forEach(user => { + // strip ",+" from the end of the gecos field + user.gecos = user.gecos.replace(/,+$/, '') + + // capitalize the first letter of each word + user.gecos = user.gecos.replace(/\b\w/g, c => c.toUpperCase()) + }) +} + +export const UtentiPage = () => { + const utentiSignal = useSignal([]) + + useEffect(() => { + fetch('https://poisson.phc.dm.unipi.it/users.json') + .then(response => response.json()) + .then(data => { + applyPatches(data) + utentiSignal.value = data + }) + }, []) + + return ( + <> + +
+ {utentiSignal.value.map(user => ( +
+
+ person +
+
{user.gecos}
+ +
+ ))} +
+ + ) +} diff --git a/src/components/Header.astro b/src/components/Header.astro index 5cb984a..bd2effd 100644 --- a/src/components/Header.astro +++ b/src/components/Header.astro @@ -3,7 +3,7 @@ phc logo