diff --git a/rsconcept/frontend/src/backend/oss/useOSS.tsx b/rsconcept/frontend/src/backend/oss/useOSS.tsx index 4458e82e..b00e8d2f 100644 --- a/rsconcept/frontend/src/backend/oss/useOSS.tsx +++ b/rsconcept/frontend/src/backend/oss/useOSS.tsx @@ -1,8 +1,7 @@ -import { useQuery, useQueryClient, useSuspenseQuery } from '@tanstack/react-query'; +import { useQuery, useSuspenseQuery } from '@tanstack/react-query'; import { useLibrary, useLibrarySuspense } from '@/backend/library/useLibrary'; import { LibraryItemID } from '@/models/library'; -import { IOperationSchema, IOperationSchemaData } from '@/models/oss'; import { OssLoader } from '@/models/OssLoader'; import { ossApi } from './api'; @@ -25,23 +24,3 @@ export function useOssSuspense({ itemID }: { itemID: LibraryItemID }) { const schema = new OssLoader(data!, libraryItems).produceOSS(); return { schema }; } - -export function useOssUpdate({ itemID }: { itemID?: LibraryItemID }) { - const { items: libraryItems } = useLibrary(); - const client = useQueryClient(); - const queryKey = [ossApi.getOssQueryOptions({ itemID }).queryKey]; - return { - update: (data: IOperationSchemaData) => - client.setQueryData(queryKey, new OssLoader(data, libraryItems).produceOSS()), - partialUpdate: (data: Partial) => - client.setQueryData(queryKey, (prev: IOperationSchema) => (prev ? { ...prev, ...data } : prev)) - }; -} - -export function useOssInvalidate({ itemID }: { itemID?: LibraryItemID }) { - const client = useQueryClient(); - const queryKey = [ossApi.getOssQueryOptions({ itemID }).queryKey]; - return { - invalidate: () => client.invalidateQueries({ queryKey }) - }; -} diff --git a/rsconcept/frontend/src/backend/rsform/useCheckConstituenta.tsx b/rsconcept/frontend/src/backend/rsform/useCheckConstituenta.tsx index f9cf7d9d..18117d77 100644 --- a/rsconcept/frontend/src/backend/rsform/useCheckConstituenta.tsx +++ b/rsconcept/frontend/src/backend/rsform/useCheckConstituenta.tsx @@ -20,7 +20,6 @@ export const useCheckConstituenta = () => { onSuccess?: DataCallback ) => mutation.mutate(data, { onSuccess }), isPending: mutation.isPending, - error: mutation.error, - reset: mutation.reset + error: mutation.error }; }; diff --git a/rsconcept/frontend/src/hooks/useRSParse.ts b/rsconcept/frontend/src/hooks/useRSParse.ts deleted file mode 100644 index 734db902..00000000 --- a/rsconcept/frontend/src/hooks/useRSParse.ts +++ /dev/null @@ -1,32 +0,0 @@ -'use client'; - -import { useCallback, useState } from 'react'; - -import { DataCallback } from '@/backend/apiTransport'; -import { ICheckConstituentaDTO } from '@/backend/rsform/api'; -import { useCheckConstituenta } from '@/backend/rsform/useCheckConstituenta'; -import { IConstituenta, type IRSForm } from '@/models/rsform'; -import { IExpressionParse } from '@/models/rslang'; - -function useRSParse({ schema }: { schema?: IRSForm }) { - const [parseData, setParseData] = useState(undefined); - - const resetParse = useCallback(() => setParseData(undefined), []); - const { checkConstituenta: checkInternal, isPending, error, reset } = useCheckConstituenta(); - - function checkConstituenta(expression: string, activeCst: IConstituenta, onSuccess?: DataCallback) { - const data: ICheckConstituentaDTO = { - definition_formal: expression, - alias: activeCst.alias, - cst_type: activeCst.cst_type - }; - checkInternal({ itemID: schema!.id, data }, parse => { - setParseData(parse); - onSuccess?.(parse); - }); - } - - return { parseData, checkConstituenta, resetParse, error, reset, isPending }; -} - -export default useRSParse; diff --git a/rsconcept/frontend/src/pages/OssPage/OssEditContext.tsx b/rsconcept/frontend/src/pages/OssPage/OssEditContext.tsx index 49f3c343..7134fb16 100644 --- a/rsconcept/frontend/src/pages/OssPage/OssEditContext.tsx +++ b/rsconcept/frontend/src/pages/OssPage/OssEditContext.tsx @@ -1,6 +1,6 @@ 'use client'; -import { createContext, useCallback, useContext, useEffect, useState } from 'react'; +import { createContext, useContext, useEffect, useState } from 'react'; import { toast } from 'react-toastify'; import { useConceptNavigation } from '@/app/Navigation/NavigationContext'; @@ -130,16 +130,13 @@ export const OssEditState = ({ itemID, children }: React.PropsWithChildren { - const node = schema.operationByID.get(target); - if (!node?.result) { - return; - } - router.push(urls.schema_props({ id: node.result, tab: RSTabID.CST_LIST })); - }, - [router, schema] - ); + function navigateOperationSchema(target: OperationID) { + const node = schema.operationByID.get(target); + if (!node?.result) { + return; + } + router.push(urls.schema_props({ id: node.result, tab: RSTabID.CST_LIST })); + } function deleteSchema() { if (!schema || !window.confirm(prompts.deleteOSS)) { diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorRSExpression/EditorRSExpression.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorRSExpression/EditorRSExpression.tsx index 33d326f6..a3004f94 100644 --- a/rsconcept/frontend/src/pages/RSFormPage/EditorRSExpression/EditorRSExpression.tsx +++ b/rsconcept/frontend/src/pages/RSFormPage/EditorRSExpression/EditorRSExpression.tsx @@ -4,6 +4,9 @@ import { ReactCodeMirrorRef } from '@uiw/react-codemirror'; import { useEffect, useRef, useState } from 'react'; import { toast } from 'react-toastify'; +import { DataCallback } from '@/backend/apiTransport'; +import { ICheckConstituentaDTO } from '@/backend/rsform/api'; +import { useCheckConstituenta } from '@/backend/rsform/useCheckConstituenta'; import { useIsProcessingRSForm } from '@/backend/rsform/useIsProcessingRSForm'; import BadgeHelp from '@/components/info/BadgeHelp'; import { CProps } from '@/components/props'; @@ -11,7 +14,6 @@ import RSInput from '@/components/RSInput'; import { parser as rslangParser } from '@/components/RSInput/rslang/parserAST'; import { RSTextWrapper } from '@/components/RSInput/textEditing'; import Overlay from '@/components/ui/Overlay'; -import useRSParse from '@/hooks/useRSParse'; import { HelpTopic } from '@/models/miscellaneous'; import { ConstituentaID, IConstituenta } from '@/models/rsform'; import { getDefinitionPrefix } from '@/models/rsformAPI'; @@ -60,17 +62,31 @@ function EditorRSExpression({ const controller = useRSEdit(); const [isModified, setIsModified] = useState(false); - const parser = useRSParse({ schema: controller.schema }); const rsInput = useRef(null); + const [parseData, setParseData] = useState(undefined); const isProcessing = useIsProcessingRSForm(); const showControls = usePreferencesStore(state => state.showExpressionControls); const showAST = useDialogsStore(state => state.showShowAST); + const { checkConstituenta: checkInternal, isPending } = useCheckConstituenta(); + + function checkConstituenta(expression: string, activeCst: IConstituenta, onSuccess?: DataCallback) { + const data: ICheckConstituentaDTO = { + definition_formal: expression, + alias: activeCst.alias, + cst_type: activeCst.cst_type + }; + checkInternal({ itemID: controller.schema.id, data }, parse => { + setParseData(parse); + onSuccess?.(parse); + }); + } + useEffect(() => { setIsModified(false); - parser.resetParse(); - }, [activeCst, parser, toggleReset]); + setParseData(undefined); + }, [activeCst, toggleReset]); function handleChange(newValue: string) { onChangeExpression(newValue); @@ -78,7 +94,7 @@ function EditorRSExpression({ } function handleCheckExpression(callback?: (parse: IExpressionParse) => void) { - parser.checkConstituenta(value, activeCst, parse => { + checkConstituenta(value, activeCst, parse => { onChangeLocalParse(parse); if (parse.errors.length > 0) { onShowError(parse.errors[0], parse.prefixLen); @@ -152,10 +168,10 @@ function EditorRSExpression({ className='w-fit pl-[8.5rem] xs:pl-[2rem] flex gap-1' > handleCheckExpression()} /> @@ -181,10 +197,10 @@ function EditorRSExpression({ /> 0} - data={parser.parseData} + isOpen={!!parseData && parseData.errors.length > 0} + data={parseData} disabled={disabled} - onShowError={error => onShowError(error, parser.parseData?.prefixLen ?? 0)} + onShowError={error => onShowError(error, parseData?.prefixLen ?? 0)} /> ); diff --git a/rsconcept/frontend/src/pages/RSFormPage/MenuRSTabs.tsx b/rsconcept/frontend/src/pages/RSFormPage/MenuRSTabs.tsx index 59d53e18..79957638 100644 --- a/rsconcept/frontend/src/pages/RSFormPage/MenuRSTabs.tsx +++ b/rsconcept/frontend/src/pages/RSFormPage/MenuRSTabs.tsx @@ -381,7 +381,6 @@ function MenuRSTabs() { ) : null} - router.push(urls.schema(itemID, version), newTab); {controller.isArchive && user ? (