Law/app/web/admin/hooks/useTablesState.js
2026-02-26 18:55:02 +03:00

56 lines
1.4 KiB
JavaScript

import { createTableState } from "../shared/state.js";
function createInitialTablesState() {
return {
kanban: createTableState(),
requests: createTableState(),
invoices: createTableState(),
quotes: createTableState(),
topics: createTableState(),
statuses: createTableState(),
formFields: createTableState(),
topicRequiredFields: createTableState(),
topicDataTemplates: createTableState(),
statusTransitions: createTableState(),
users: createTableState(),
userTopics: createTableState(),
availableTables: createTableState(),
};
}
export function useTablesState() {
const { useCallback, useEffect, useRef, useState } = React;
const [tables, setTables] = useState(createInitialTablesState);
const [tableCatalog, setTableCatalog] = useState([]);
const [referenceRowsMap, setReferenceRowsMap] = useState({});
const tablesRef = useRef(tables);
useEffect(() => {
tablesRef.current = tables;
}, [tables]);
const setTableState = useCallback((tableKey, next) => {
setTables((prev) => ({ ...prev, [tableKey]: next }));
}, []);
const resetTablesState = useCallback(() => {
setTables(createInitialTablesState());
setTableCatalog([]);
setReferenceRowsMap({});
}, []);
return {
tables,
setTables,
tablesRef,
setTableState,
resetTablesState,
tableCatalog,
setTableCatalog,
referenceRowsMap,
setReferenceRowsMap,
};
}
export default useTablesState;