import { IconHelp, IconSearch } from "@tabler/icons-react"; import { useQueryClient } from "@tanstack/react-query"; import { useState } from "react"; import Alert from "react-bootstrap/Alert"; import { deleteStream, toggleStream } from "src/api/backend"; import { Button, HasPermission, LoadingPage } from "src/components"; import { useStreams } from "src/hooks"; import { T } from "src/locale"; import { showDeleteConfirmModal, showHelpModal, showStreamModal } from "src/modals"; import { MANAGE, STREAMS } from "src/modules/Permissions"; import { showObjectSuccess } from "src/notifications"; import Table from "./Table"; export default function TableWrapper() { const queryClient = useQueryClient(); const [search, setSearch] = useState(""); const [_deleteId, _setDeleteIdd] = useState(0); const { isFetching, isLoading, isError, error, data } = useStreams(["owner", "certificate"]); if (isLoading) { return ; } if (isError) { return {error?.message || "Unknown error"}; } const handleDelete = async (id: number) => { await deleteStream(id); showObjectSuccess("stream", "deleted"); }; const handleDisableToggle = async (id: number, enabled: boolean) => { await toggleStream(id, enabled); queryClient.invalidateQueries({ queryKey: ["streams"] }); queryClient.invalidateQueries({ queryKey: ["stream", id] }); showObjectSuccess("stream", enabled ? "enabled" : "disabled"); }; let filtered = null; if (search && data) { filtered = data?.filter((item) => { return ( `${item.incomingPort}`.includes(search) || `${item.forwardingPort}`.includes(search) || item.forwardingHost.includes(search) ); }); } else if (search !== "") { // this can happen if someone deletes the last item while searching setSearch(""); } return (

{data?.length ? (
setSearch(e.target.value.toLowerCase().trim())} />
) : null} {data?.length ? ( ) : null}
showStreamModal(id)} onDelete={(id: number) => showDeleteConfirmModal({ title: , onConfirm: () => handleDelete(id), invalidations: [["streams"], ["stream", id]], children: , }) } onDisableToggle={handleDisableToggle} onNew={() => showStreamModal("new")} /> ); }