import { useEffect, useLayoutEffect, useState } from 'react'; import { TabList, TabPanel, Tabs } from 'react-tabs'; import BackendError from '../../components/BackendError'; import ConceptTab from '../../components/Common/ConceptTab'; import { Loader } from '../../components/Common/Loader'; import { useRSForm } from '../../context/RSFormContext'; import useLocalStorage from '../../hooks/useLocalStorage'; import { type IConstituenta } from '../../utils/models'; import ConstituentEditor from './ConstituentEditor'; import ConstituentsTable from './ConstituentsTable'; import RSFormCard from './RSFormCard'; import RSFormStats from './RSFormStats'; import RSTabsMenu from './RSTabsMenu'; export enum RSTabsList { CARD = 0, CST_LIST = 1, CST_EDIT = 2 } function RSTabs() { const { setActiveID, activeID, error, schema, loading } = useRSForm(); const [tabIndex, setTabIndex] = useLocalStorage('rsform_edit_tab', RSTabsList.CARD); const [init, setInit] = useState(false); const onEditCst = (cst: IConstituenta) => { console.log(`Set active cst: ${cst.alias}`); setActiveID(cst.id); setTabIndex(RSTabsList.CST_EDIT) }; const onSelectTab = (index: number) => { setTabIndex(index); }; useLayoutEffect(() => { if (schema) { const url = new URL(window.location.href); const activeQuery = url.searchParams.get('active'); const activeCst = schema?.items?.find((cst) => cst.id === Number(activeQuery)); setActiveID(activeCst?.id); setInit(true); } }, [setActiveID, schema, setInit]); useEffect(() => { const url = new URL(window.location.href); const tabQuery = url.searchParams.get('tab'); setTabIndex(Number(tabQuery) || RSTabsList.CARD); }, [setTabIndex]); useEffect(() => { if (init) { const url = new URL(window.location.href); const currentActive = url.searchParams.get('active'); const currentTab = url.searchParams.get('tab'); const saveHistory = tabIndex === RSTabsList.CST_EDIT && currentActive !== String(activeID); if (currentTab !== String(tabIndex)) { url.searchParams.set('tab', String(tabIndex)); } if (activeID) { if (currentActive !== String(activeID)) { url.searchParams.set('active', String(activeID)); } } else { url.searchParams.delete('active'); } if (saveHistory) { window.history.pushState(null, '', url.toString()); } else { window.history.replaceState(null, '', url.toString()); } } }, [tabIndex, activeID, init]); return (