import { useState } from "react"; import { Row, Col, AutoComplete, Button, Input, Popover, Toast, } from "@douyinfe/semi-ui"; import { IconPlus, IconSearch, IconCheckboxTick, IconDeleteStroked, } from "@douyinfe/semi-icons"; import { defaultBlue, tableThemes, Action, ObjectType, State, } from "../data/constants"; import useUndoRedo from "../hooks/useUndoRedo"; import useAreas from "../hooks/useAreas"; import useSaveState from "../hooks/useSaveState"; import NoElements from "./NoElements"; export default function AreasOverview() { const { setSaveState } = useSaveState(); const { areas, addArea, deleteArea, updateArea } = useAreas(); const { setUndoStack, setRedoStack } = useUndoRedo(); const [editField, setEditField] = useState({}); const [searchText, setSearchText] = useState(""); const [filteredResult, setFilteredResult] = useState( areas.map((t) => t.name) ); const handleStringSearch = (value) => { setFilteredResult( areas.map((t) => t.name).filter((i) => i.includes(value)) ); }; return (
} placeholder="Search..." emptyContent={
No areas found
} onSearch={(v) => handleStringSearch(v)} onChange={(v) => setSearchText(v)} onSelect={(v) => { const { id } = areas.find((t) => t.name === v); document .getElementById(`scroll_area_${id}`) .scrollIntoView({ behavior: "smooth" }); }} className="w-full" />
{areas.length <= 0 ? ( ) : (
{areas.map((a, i) => ( updateArea(a.id, { name: value })} onFocus={(e) => setEditField({ name: e.target.value })} onBlur={(e) => { if (e.target.value === editField.name) return; setUndoStack((prev) => [ ...prev, { action: Action.EDIT, element: ObjectType.AREA, aid: i, undo: editField, redo: { name: e.target.value }, message: `Edit area name to ${e.target.value}`, }, ]); setRedoStack([]); }} />
Theme

{tableThemes .slice(0, Math.ceil(tableThemes.length / 2)) .map((c) => ( ))}
{tableThemes .slice(Math.ceil(tableThemes.length / 2)) .map((c) => ( ))}
} trigger="click" position="bottomLeft" showArrow >
)}
); }