import { useDeferredValue, useMemo, useState } from "react"; import { useQuery } from "@tanstack/react-query"; import { Link } from "react-router-dom"; import { listOperations } from "../../entities/operation/api"; import { PageSection } from "../../shared/ui/page-section"; export function OperationListPage() { const [searchTerm, setSearchTerm] = useState(""); const deferredSearchTerm = useDeferredValue(searchTerm); const operationsQuery = useQuery({ queryKey: ["operations"], queryFn: listOperations, }); const filteredItems = useMemo(() => { const items = operationsQuery.data?.items ?? []; const normalizedSearchTerm = deferredSearchTerm.trim().toLowerCase(); if (!normalizedSearchTerm) { return items; } return items.filter((item) => `${item.name} ${item.display_name} ${item.protocol} ${item.status}` .toLowerCase() .includes(normalizedSearchTerm), ); }, [deferredSearchTerm, operationsQuery.data?.items]); return (
New operation } > {operationsQuery.isLoading ?

Loading operations...

: null} {operationsQuery.data ? (
{filteredItems.map((item) => (
{item.protocol} {item.status}

{item.display_name}

{item.name}

Draft
{item.current_draft_version}
Published
{item.latest_published_version ?? "none"}
Updated
{new Date(item.updated_at).toLocaleString()}
))}
) : null}
); }