forked from phc/website
1
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
website/src/client/UtentiPage.tsx

55 lines
1.7 KiB
TypeScript

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<User[]>([])
useEffect(() => {
fetch('https://poisson.phc.dm.unipi.it/users.json')
.then(response => response.json())
.then(data => {
applyPatches(data)
utentiSignal.value = data
})
}, [])
return (
<>
<div class="search">
<input type="text" placeholder="Cerca un utente Poisson..." />
<span class="material-symbols-outlined">search</span>
</div>
<div class="search-results">
{utentiSignal.value.map(user => (
<div class="search-result">
<div class="icon">
<span class="material-symbols-outlined">person</span>
</div>
<div class="text">{user.gecos}</div>
<div class="right">
<a href={`https://poisson.phc.dm.unipi.it/~${user.uid}`}>
<span class="material-symbols-outlined">globe</span>
</a>
</div>
</div>
))}
</div>
</>
)
}