mirror of
https://github.com/TronoSfera/Law.git
synced 2026-05-18 18:13:46 +03:00
56 lines
1.4 KiB
JavaScript
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;
|