UNPKG

@undermuz/react-json-form

Version:
67 lines (66 loc) 1.77 kB
// src/utils/useTabs.ts import { useState } from "react"; import { arrayMoveImmutable } from "./arrayMove.mjs"; var useTabs = (props) => { const { value, defValue, onChange, onTabRemove } = props; const [tab, setTab] = useState(() => { if (value.length > 0) return value[0].id; return 1; }); const addTab = () => { let maxId = Math.max(...value.map((item) => item.id)); if (isNaN(maxId) || !isFinite(maxId) || maxId < 0) { maxId = 0; } const def_value = { ...defValue, id: maxId + 1 }; const newList = [...value, def_value]; onChange(newList); setTab(newList[newList.length - 1].id); }; const removeTab = (tab_id) => { if (!window.confirm("\u0412\u044B \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C?")) { return; } const new_value = value.filter((tab2) => tab2.id !== tab_id); onChange(new_value); onTabRemove(tab_id); if (tab === tab_id) { if (new_value[0]) { setTab(new_value[0].id); } else { setTab(1); } } }; const sortTabs = (event) => { const { active, over } = event; if (active && over && active.id !== over.id) { if (over.id === "trash") { removeTab(active.id); return; } const oldIndex = value.findIndex( (_i) => _i.id === active.id ); const newIndex = value.findIndex( (_i) => _i.id === over.id ); onChange(arrayMoveImmutable(value, oldIndex, newIndex)); } }; return { tab, setTab, addTab, removeTab, sortTabs }; }; var useTabs_default = useTabs; export { useTabs_default as default };