import { useEffect, useState } from "react"; import { get } from "../../api/client"; import type { Project } from "../../api/types"; import type { ItemFilters } from "../../hooks/useItems"; interface ItemsToolbarProps { filters: ItemFilters; onFilterChange: (partial: Partial) => void; layout: "horizontal" | "vertical"; onLayoutChange: (layout: "horizontal" | "vertical") => void; onExport: () => void; onImport: () => void; onCreate: () => void; isEditor: boolean; } export function ItemsToolbar({ filters, onFilterChange, layout, onLayoutChange, onExport, onImport, onCreate, isEditor, }: ItemsToolbarProps) { const [projects, setProjects] = useState([]); useEffect(() => { get("/api/projects") .then(setProjects) .catch(() => {}); }, []); const scopeBtn = (scope: ItemFilters["searchScope"], label: string) => ( ); return (
{/* Search */} onFilterChange({ search: e.target.value })} style={{ flex: 1, minWidth: 200, padding: "var(--d-input-py) var(--d-input-px)", backgroundColor: "var(--ctp-surface0)", border: "1px solid var(--ctp-surface1)", borderRadius: "0.4rem", color: "var(--ctp-text)", fontSize: "var(--d-input-font)", }} /> {/* Search scope */}
{scopeBtn("all", "All")} {scopeBtn("part_number", "PN")} {scopeBtn("description", "Desc")}
{/* Type filter */} {/* Project filter */} {/* Layout toggle */} {/* Export */} {/* Import (editor only) */} {isEditor && ( )} {/* Create (editor only) */} {isEditor && ( )}
); } const selectStyle: React.CSSProperties = { padding: "var(--d-input-py) var(--d-input-px)", backgroundColor: "var(--ctp-surface0)", border: "1px solid var(--ctp-surface1)", borderRadius: "0.4rem", color: "var(--ctp-text)", fontSize: "var(--d-input-font)", }; const toolBtnStyle: React.CSSProperties = { padding: "var(--d-input-py) var(--d-input-px)", backgroundColor: "var(--ctp-surface1)", border: "none", borderRadius: "0.4rem", color: "var(--ctp-text)", fontSize: "var(--d-input-font)", cursor: "pointer", };