import { useComputed, useSignal } from '@preact/signals' import Fuse from 'fuse.js' import { useEffect } from 'preact/hooks' import { ShowMore } from './Paginate' import { ComboBox } from './ComboBox' type User = { uid: string gecos: string } const FILTERS = { utenti: { icon: 'person', label: 'Utenti', }, macchinisti: { icon: 'construction', label: 'Macchinisti', }, rappstud: { icon: 'account_balance', label: 'Rappresentanti', }, } 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()) }) // reverse the order of the users users.reverse() } const MACCHINISTI = ['delucreziis', 'minnocci', 'baldino', 'manicastri', 'llombardo', 'serdyuk'] const RAPPSTUD = [ 'smannella', 'lotti', 'rotolo', 'saccani', 'carbone', 'mburatti', 'ppuddu', 'marinari', 'evsilvestri', 'tateo', 'graccione', 'dilella', 'rocca', 'odetti', 'borso', 'numero', ] export const UtentiPage = () => { const $utentiData = useSignal([]) const $filter = useSignal('utenti') const $filteredData = useComputed(() => $filter.value === 'macchinisti' ? $utentiData.value.filter(user => MACCHINISTI.includes(user.uid)) : $filter.value === 'rappstud' ? $utentiData.value.filter(user => RAPPSTUD.includes(user.uid)) : $utentiData.value ) const $fuse = useComputed( () => new Fuse($filteredData.value, { keys: ['gecos', 'uid'], }) ) const $searchText = useSignal('') const $searchResults = useComputed(() => $searchText.value.trim().length > 0 ? $fuse.value?.search($searchText.value).map(result => result.item) ?? [] : $filteredData.value ) useEffect(() => { fetch('https://poisson.phc.dm.unipi.it/users.json') .then(response => response.json()) .then(data => { applyPatches(data) $utentiData.value = data $fuse.value.setCollection(data) }) }, []) return ( <>
{$searchResults.value ? ( {poissonUser => (
{RAPPSTUD.includes(poissonUser.uid) ? 'account_balance' : MACCHINISTI.includes(poissonUser.uid) ? 'construction' : 'person'}
{poissonUser.gecos}
)}
) : ( <>Nessun risultato )}
) }