void;
onReset: () => void;
- onToggleList: () => void;
}
function ToolbarConstituenta({
activeCst,
disabled,
modified,
- showList,
onSubmit,
- onReset,
- onToggleList
+ onReset
}: ToolbarConstituentaProps) {
const controller = useRSEdit();
+ const showList = usePreferencesStore(state => state.showCstSideList);
+ const toggleList = usePreferencesStore(state => state.toggleShowCstSideList);
+
return (
:
}
- onClick={onToggleList}
+ onClick={toggleList}
/>
{controller.isContentEditable ? (
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorRSExpression/EditorRSExpression.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorRSExpression/EditorRSExpression.tsx
index 7f1f8a21..3f5de518 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorRSExpression/EditorRSExpression.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorRSExpression/EditorRSExpression.tsx
@@ -13,14 +13,13 @@ import Overlay from '@/components/ui/Overlay';
import { useRSForm } from '@/context/RSFormContext';
import DlgShowAST from '@/dialogs/DlgShowAST';
import useCheckConstituenta from '@/hooks/useCheckConstituenta';
-import useLocalStorage from '@/hooks/useLocalStorage';
import { HelpTopic } from '@/models/miscellaneous';
import { ConstituentaID, IConstituenta } from '@/models/rsform';
import { getDefinitionPrefix } from '@/models/rsformAPI';
import { IExpressionParse, IRSErrorDescription, SyntaxTree } from '@/models/rslang';
import { TokenID } from '@/models/rslang';
+import { usePreferencesStore } from '@/stores/preferences';
import { transformAST } from '@/utils/codemirror';
-import { storage } from '@/utils/constants';
import { errors, labelTypification } from '@/utils/labels';
import ParsingResult from './ParsingResult';
@@ -64,10 +63,10 @@ function EditorRSExpression({
const { resetParse } = parser;
const rsInput = useRef
(null);
+ const showControls = usePreferencesStore(state => state.showExpressionControls);
const [syntaxTree, setSyntaxTree] = useState([]);
const [expression, setExpression] = useState('');
const [showAST, setShowAST] = useState(false);
- const [showControls, setShowControls] = useLocalStorage(storage.rseditShowControls, true);
useEffect(() => {
setIsModified(false);
@@ -154,13 +153,7 @@ function EditorRSExpression({
setShowAST(false)} />
) : null}
- setShowControls(prev => !prev)}
- showTypeGraph={onShowTypeGraph}
- />
+
void;
showAST: (event: CProps.EventMouse) => void;
showTypeGraph: (event: CProps.EventMouse) => void;
}
-function ToolbarRSExpression({
- disabled,
- showControls,
- showTypeGraph,
- toggleControls,
- showAST
-}: ToolbarRSExpressionProps) {
+function ToolbarRSExpression({ disabled, showTypeGraph, showAST }: ToolbarRSExpressionProps) {
const model = useRSForm();
+ const showControls = usePreferencesStore(state => state.showExpressionControls);
+ const toggleControls = usePreferencesStore(state => state.toggleShowExpressionControls);
return (
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/EditorLibraryItem.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/EditorLibraryItem.tsx
index ee371e55..43916f0c 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/EditorLibraryItem.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/EditorLibraryItem.tsx
@@ -18,12 +18,12 @@ import Overlay from '@/components/ui/Overlay';
import Tooltip from '@/components/ui/Tooltip';
import ValueIcon from '@/components/ui/ValueIcon';
import { useAccessMode } from '@/context/AccessModeContext';
-import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { useConceptNavigation } from '@/context/NavigationContext';
import { useUsers } from '@/context/UsersContext';
import useDropdown from '@/hooks/useDropdown';
import { ILibraryItemData, ILibraryItemEditor } from '@/models/library';
import { UserID, UserLevel } from '@/models/user';
+import { useLibrarySearchStore } from '@/stores/librarySearch';
import { prefixes } from '@/utils/constants';
import { prompts } from '@/utils/labels';
@@ -38,7 +38,7 @@ function EditorLibraryItem({ item, isModified, controller }: EditorLibraryItemPr
const { accessLevel } = useAccessMode();
const intl = useIntl();
const router = useConceptNavigation();
- const { setLocation, setFolderMode } = useConceptOptions();
+ const setLocation = useLibrarySearchStore(state => state.setLocation);
const ownerSelector = useDropdown();
const onSelectUser = useCallback(
@@ -61,10 +61,9 @@ function EditorLibraryItem({ item, isModified, controller }: EditorLibraryItemPr
return;
}
setLocation(item.location);
- setFolderMode(true);
router.push(urls.library, event.ctrlKey || event.metaKey);
},
- [setLocation, setFolderMode, item, router]
+ [setLocation, item, router]
);
if (!item) {
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/TGFlow.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/TGFlow.tsx
index 9fd40af8..9fd2a7af 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/TGFlow.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/TGFlow.tsx
@@ -25,13 +25,12 @@ import { CProps } from '@/components/props';
import ToolbarGraphSelection from '@/components/select/ToolbarGraphSelection';
import Overlay from '@/components/ui/Overlay';
import DlgGraphParams from '@/dialogs/DlgGraphParams';
-import useLocalStorage from '@/hooks/useLocalStorage';
-import { GraphColoring, GraphFilterParams } from '@/models/miscellaneous';
import { ConstituentaID, CstType, IConstituenta } from '@/models/rsform';
import { isBasicConcept } from '@/models/rsformAPI';
import { useMainHeight } from '@/stores/appLayout';
+import { useTermGraphStore } from '@/stores/termGraph';
import { APP_COLORS, colorBgGraphNode } from '@/styling/color';
-import { PARAMETER, storage } from '@/utils/constants';
+import { PARAMETER } from '@/utils/constants';
import { errors } from '@/utils/labels';
import { useRSEdit } from '../RSEditContext';
@@ -62,29 +61,14 @@ function TGFlow({ onOpenEdit }: TGFlowProps) {
const { addSelectedNodes } = store.getState();
const [showParamsDialog, setShowParamsDialog] = useState(false);
- const [filterParams, setFilterParams] = useLocalStorage(storage.rsgraphFilter, {
- noHermits: true,
- noTemplates: false,
- noTransitive: true,
- noText: false,
- foldDerived: false,
- focusShowInputs: true,
- focusShowOutputs: true,
-
- allowBase: true,
- allowStruct: true,
- allowTerm: true,
- allowAxiom: true,
- allowFunction: true,
- allowPredicate: true,
- allowConstant: true,
- allowTheorem: true
- });
- const [coloring, setColoring] = useLocalStorage(storage.rsgraphColoring, 'type');
+ const filter = useTermGraphStore(state => state.filter);
+ const setFilter = useTermGraphStore(state => state.setFilter);
+ const coloring = useTermGraphStore(state => state.coloring);
+ const setColoring = useTermGraphStore(state => state.setColoring);
const [focusCst, setFocusCst] = useState(undefined);
- const filteredGraph = useGraphFilter(controller.schema, filterParams, focusCst);
+ const filteredGraph = useGraphFilter(controller.schema, filter, focusCst);
const [hidden, setHidden] = useState([]);
const [isDragging, setIsDragging] = useState(false);
@@ -139,7 +123,7 @@ function TGFlow({ onOpenEdit }: TGFlowProps) {
data: {
fill: focusCst === cst ? APP_COLORS.bgPurple : colorBgGraphNode(cst, coloring),
label: cst.alias,
- description: !filterParams.noText ? cst.term_resolved : ''
+ description: !filter.noText ? cst.term_resolved : ''
}
});
}
@@ -167,24 +151,15 @@ function TGFlow({ onOpenEdit }: TGFlowProps) {
});
});
- applyLayout(newNodes, newEdges, !filterParams.noText);
+ applyLayout(newNodes, newEdges, !filter.noText);
setNodes(newNodes);
setEdges(newEdges);
- }, [
- controller.schema,
- filteredGraph,
- setNodes,
- setEdges,
- filterParams.noText,
- controller.selected,
- focusCst,
- coloring
- ]);
+ }, [controller.schema, filteredGraph, setNodes, setEdges, filter.noText, controller.selected, focusCst, coloring]);
useEffect(() => {
setNeedReset(true);
- }, [controller.schema, filterParams.noText, focusCst, coloring, flow.viewportInitialized]);
+ }, [controller.schema, filter.noText, focusCst, coloring, flow.viewportInitialized]);
useEffect(() => {
if (!controller.schema || !needReset || !flow.viewportInitialized) {
@@ -198,7 +173,7 @@ function TGFlow({ onOpenEdit }: TGFlowProps) {
setTimeout(() => {
flow.fitView({ duration: PARAMETER.zoomDuration });
}, PARAMETER.minimalTimeout);
- }, [toggleResetView, flow, focusCst, filterParams]);
+ }, [toggleResetView, flow, focusCst, filter]);
function handleSetSelected(newSelection: number[]) {
controller.setSelected(newSelection);
@@ -220,10 +195,6 @@ function TGFlow({ onOpenEdit }: TGFlowProps) {
controller.promptDeleteCst();
}
- function handleChangeParams(params: GraphFilterParams) {
- setFilterParams(params);
- }
-
function handleSaveImage() {
if (!controller.schema) {
return;
@@ -283,10 +254,10 @@ function TGFlow({ onOpenEdit }: TGFlowProps) {
}
function handleFoldDerived() {
- setFilterParams(prev => ({
- ...prev,
- foldDerived: !prev.foldDerived
- }));
+ setFilter({
+ ...filter,
+ foldDerived: !filter.foldDerived
+ });
setTimeout(() => {
setToggleResetView(prev => !prev);
}, PARAMETER.graphRefreshDelay);
@@ -325,17 +296,13 @@ function TGFlow({ onOpenEdit }: TGFlowProps) {
return (
<>
{showParamsDialog ? (
- setShowParamsDialog(false)}
- initial={filterParams}
- onConfirm={handleChangeParams}
- />
+ setShowParamsDialog(false)} initial={filter} onConfirm={setFilter} />
) : null}
setShowParamsDialog(true)}
onCreate={handleCreateCst}
onDelete={handleDeleteCst}
@@ -343,10 +310,10 @@ function TGFlow({ onOpenEdit }: TGFlowProps) {
onSaveImage={handleSaveImage}
toggleFoldDerived={handleFoldDerived}
toggleNoText={() =>
- setFilterParams(prev => ({
- ...prev,
- noText: !prev.noText
- }))
+ setFilter({
+ ...filter,
+ noText: !filter.noText
+ })
}
/>
{!focusCst ? (
@@ -367,19 +334,19 @@ function TGFlow({ onOpenEdit }: TGFlowProps) {
handleSetFocus(undefined)}
- showInputs={filterParams.focusShowInputs}
- showOutputs={filterParams.focusShowOutputs}
+ showInputs={filter.focusShowInputs}
+ showOutputs={filter.focusShowOutputs}
toggleShowInputs={() =>
- setFilterParams(prev => ({
- ...prev,
- focusShowInputs: !prev.focusShowInputs
- }))
+ setFilter({
+ ...filter,
+ focusShowInputs: !filter.focusShowInputs
+ })
}
toggleShowOutputs={() =>
- setFilterParams(prev => ({
- ...prev,
- focusShowOutputs: !prev.focusShowOutputs
- }))
+ setFilter({
+ ...filter,
+ focusShowOutputs: !filter.focusShowOutputs
+ })
}
/>
) : null}
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/ViewHidden.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/ViewHidden.tsx
index d64f1fb6..78d9fe19 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/ViewHidden.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/ViewHidden.tsx
@@ -7,13 +7,13 @@ import { CProps } from '@/components/props';
import MiniButton from '@/components/ui/MiniButton';
import Overlay from '@/components/ui/Overlay';
import { useConceptOptions } from '@/context/ConceptOptionsContext';
-import useLocalStorage from '@/hooks/useLocalStorage';
import useWindowSize from '@/hooks/useWindowSize';
import { GraphColoring } from '@/models/miscellaneous';
import { ConstituentaID, IRSForm } from '@/models/rsform';
import { useFitHeight } from '@/stores/appLayout';
+import { useTermGraphStore } from '@/stores/termGraph';
import { APP_COLORS, colorBgGraphNode } from '@/styling/color';
-import { globals, PARAMETER, prefixes, storage } from '@/utils/constants';
+import { globals, PARAMETER, prefixes } from '@/utils/constants';
interface ViewHiddenProps {
items: ConstituentaID[];
@@ -29,7 +29,9 @@ interface ViewHiddenProps {
function ViewHidden({ items, selected, toggleSelection, setFocus, schema, coloringScheme, onEdit }: ViewHiddenProps) {
const windowSize = useWindowSize();
const localSelected = items.filter(id => selected.includes(id));
- const [isFolded, setIsFolded] = useLocalStorage(storage.rsgraphFoldHidden, false);
+
+ const isFolded = useTermGraphStore(state => state.foldHidden);
+ const toggleFolded = useTermGraphStore(state => state.toggleFoldHidden);
const { setHoverCst } = useConceptOptions();
const hiddenHeight = useFitHeight(windowSize.isSmall ? '10.4rem + 2px' : '12.5rem + 2px');
@@ -52,7 +54,7 @@ function ViewHidden({ items, selected, toggleSelection, setFocus, schema, colori
noHover
title={!isFolded ? 'Свернуть' : 'Развернуть'}
icon={!isFolded ? : }
- onClick={() => setIsFolded(prev => !prev)}
+ onClick={toggleFolded}
/>
@@ -87,7 +89,6 @@ function ViewHidden({ items, selected, toggleSelection, setFocus, schema, colori
>
{items.map(cstID => {
const cst = schema.cstByID.get(cstID)!;
- const adjustedColoring = coloringScheme === 'none' ? 'status' : coloringScheme;
const id = `${prefixes.cst_hidden_list}${cst.alias}`;
return (