import {Trans, useTranslation} from "react-i18next"; import {useEffect, useMemo, useState} from "react"; import {useStore} from "../store/store.ts"; import {PadSearchQuery, PadSearchResult} from "../utils/PadSearch.ts"; import {useDebounce} from "../utils/useDebounce.ts"; import {determineSorting} from "../utils/sorting.ts"; import * as Dialog from "@radix-ui/react-dialog"; import {IconButton} from "../components/IconButton.tsx"; import {ChevronLeft, ChevronRight, Eye, Trash2} from "lucide-react"; import {SearchField} from "../components/SearchField.tsx"; export const PadPage = ()=>{ const settingsSocket = useStore(state=>state.settingsSocket) const [searchParams, setSearchParams] = useState({ offset: 0, limit: 12, pattern: '', sortBy: 'padName', ascending: true }) const {t} = useTranslation() const [searchTerm, setSearchTerm] = useState('') const pads = useStore(state=>state.pads) const [currentPage, setCurrentPage] = useState(0) const [deleteDialog, setDeleteDialog] = useState(false) const [padToDelete, setPadToDelete] = useState('') const pages = useMemo(()=>{ if(!pads){ return 0; } return Math.ceil(pads!.total / searchParams.limit) },[pads, searchParams.limit]) useDebounce(()=>{ setSearchParams({ ...searchParams, pattern: searchTerm }) }, 500, [searchTerm]) useEffect(() => { if(!settingsSocket){ return } settingsSocket.emit('padLoad', searchParams) }, [settingsSocket, searchParams]); useEffect(() => { if(!settingsSocket){ return } settingsSocket.on('results:padLoad', (data: PadSearchResult)=>{ useStore.getState().setPads(data); }) settingsSocket.on('results:deletePad', (padID: string)=>{ const newPads = useStore.getState().pads?.results?.filter((pad)=>{ return pad.padName !== padID }) useStore.getState().setPads({ total: useStore.getState().pads!.total-1, results: newPads }) }) }, [settingsSocket, pads]); const deletePad = (padID: string)=>{ settingsSocket?.emit('deletePad', padID) } return
{t("ep_admin_pads:ep_adminpads2_confirm", { padID: padToDelete, })}

setSearchTerm(v.target.value)} placeholder={t('ep_admin_pads:ep_adminpads2_search-heading')}/> { pads?.results?.map((pad)=>{ return }) }
{ setSearchParams({ ...searchParams, sortBy: 'padName', ascending: !searchParams.ascending }) }}> { setSearchParams({ ...searchParams, sortBy: 'lastEdited', ascending: !searchParams.ascending }) }}> { setSearchParams({ ...searchParams, sortBy: 'userCount', ascending: !searchParams.ascending }) }}> { setSearchParams({ ...searchParams, sortBy: 'revisionNumber', ascending: !searchParams.ascending }) }}>Revision number
{pad.padName} {pad.userCount} {new Date(pad.lastEdited).toLocaleString()} {pad.revisionNumber}
} title={} onClick={()=>{ setPadToDelete(pad.padName) setDeleteDialog(true) }}/> } title="view" onClick={()=>window.open(`/p/${pad.padName}`, '_blank')}/>
{currentPage+1} out of {pages}
}