diff --git a/rsconcept/frontend/src/app/ApplicationLayout.tsx b/rsconcept/frontend/src/app/ApplicationLayout.tsx index ea527ea1..dc506950 100644 --- a/rsconcept/frontend/src/app/ApplicationLayout.tsx +++ b/rsconcept/frontend/src/app/ApplicationLayout.tsx @@ -5,7 +5,7 @@ import ConceptToaster from '@/app/ConceptToaster'; import Footer from '@/app/Footer'; import Navigation from '@/app/Navigation'; import Loader from '@/components/ui/Loader'; -import { NavigationState } from '@/context/NavigationContext'; +import { NavigationState } from '@/app/Navigation/NavigationContext'; import { useAppLayoutStore, useMainHeight, useViewportHeight } from '@/stores/appLayout'; import { globals } from '@/utils/constants'; diff --git a/rsconcept/frontend/src/app/GlobalDialogs.tsx b/rsconcept/frontend/src/app/GlobalDialogs.tsx index a20ce7db..25560b80 100644 --- a/rsconcept/frontend/src/app/GlobalDialogs.tsx +++ b/rsconcept/frontend/src/app/GlobalDialogs.tsx @@ -1,7 +1,7 @@ 'use client'; import DlgChangeInputSchema from '@/dialogs/DlgChangeInputSchema'; -import DlgChangeLocation from '@/dialogs/DlgChangeLocation'; +import DlgChangeLocation from '@/pages/OssPage/DlgChangeLocation'; import DlgCloneLibraryItem from '@/dialogs/DlgCloneLibraryItem'; import DlgCreateCst from '@/dialogs/DlgCreateCst'; import DlgCreateOperation from '@/dialogs/DlgCreateOperation'; diff --git a/rsconcept/frontend/src/context/GlobalOssContext.tsx b/rsconcept/frontend/src/app/GlobalOssContext.tsx similarity index 51% rename from rsconcept/frontend/src/context/GlobalOssContext.tsx rename to rsconcept/frontend/src/app/GlobalOssContext.tsx index fd803c88..30a40e87 100644 --- a/rsconcept/frontend/src/context/GlobalOssContext.tsx +++ b/rsconcept/frontend/src/app/GlobalOssContext.tsx @@ -2,24 +2,22 @@ import { createContext, useCallback, useContext, useState } from 'react'; +import { useOss, useOssInvalidate, useOssUpdate } from '@/backend/oss/useOSS'; import { ErrorData } from '@/components/info/InfoError'; -import useOssDetails from '@/hooks/useOssDetails'; import { LibraryItemID } from '@/models/library'; import { IOperationSchema, IOperationSchemaData } from '@/models/oss'; import { contextOutsideScope } from '@/utils/labels'; interface IGlobalOssContext { schema: IOperationSchema | undefined; - setID: (id: string | undefined) => void; + setID: (id: LibraryItemID | undefined) => void; setData: (data: IOperationSchemaData) => void; loading: boolean; loadingError: ErrorData; - isValid: boolean; - invalidate: () => void; + invalidate: () => Promise; invalidateItem: (target: LibraryItemID) => void; partialUpdate: (data: Partial) => void; - reload: (callback?: () => void) => void; } const GlobalOssContext = createContext(null); @@ -32,58 +30,18 @@ export const useGlobalOss = (): IGlobalOssContext => { }; export const GlobalOssState = ({ children }: React.PropsWithChildren) => { - const [isValid, setIsValid] = useState(true); - const [ossID, setIdInternal] = useState(undefined); - const { - schema: schema, // prettier: split lines - error: loadingError, - setSchema: setDataInternal, - loading: loading, - reload: reloadInternal, - partialUpdate - } = useOssDetails({ target: ossID }); - - const reload = useCallback( - (callback?: () => void) => { - reloadInternal(undefined, () => { - setIsValid(true); - callback?.(); - }); - }, - [reloadInternal] - ); - - const setData = useCallback( - (data: IOperationSchemaData) => { - setDataInternal(data); - setIsValid(true); - }, - [setDataInternal] - ); - - const setID = useCallback( - (id: string | undefined) => { - setIdInternal(prev => { - if (prev === id && !isValid) { - reload(); - } - return id; - }); - }, - [setIdInternal, isValid, reload] - ); - - const invalidate = useCallback(() => { - setIsValid(false); - }, []); + const [ossID, setID] = useState(undefined); + const { schema: schema, error: loadingError, isLoading: loading } = useOss({ itemID: ossID }); + const { update, partialUpdate } = useOssUpdate({ itemID: ossID }); + const { invalidate } = useOssInvalidate({ itemID: ossID }); const invalidateItem = useCallback( (target: LibraryItemID) => { if (schema?.schemas.includes(target)) { - setIsValid(false); + invalidate().catch(console.error); } }, - [schema] + [invalidate, schema] ); return ( @@ -91,12 +49,10 @@ export const GlobalOssState = ({ children }: React.PropsWithChildren) => { value={{ schema, setID, - setData, + setData: update, loading, loadingError, - reload, partialUpdate, - isValid, invalidateItem, invalidate }} diff --git a/rsconcept/frontend/src/app/GlobalProviders.tsx b/rsconcept/frontend/src/app/GlobalProviders.tsx index 2dd21953..9785495a 100644 --- a/rsconcept/frontend/src/app/GlobalProviders.tsx +++ b/rsconcept/frontend/src/app/GlobalProviders.tsx @@ -6,8 +6,7 @@ import { ErrorBoundary } from 'react-error-boundary'; import { IntlProvider } from 'react-intl'; import { queryClient } from '@/backend/queryClient'; -import { GlobalOssState } from '@/context/GlobalOssContext'; -import { LibraryState } from '@/context/LibraryContext'; +import { GlobalOssState } from '@/app/GlobalOssContext'; import ErrorFallback from './ErrorFallback'; @@ -32,14 +31,12 @@ function GlobalProviders({ children }: React.PropsWithChildren) { > - {children} - ); diff --git a/rsconcept/frontend/src/app/Navigation/Navigation.tsx b/rsconcept/frontend/src/app/Navigation/Navigation.tsx index 571e7a87..b39f15e6 100644 --- a/rsconcept/frontend/src/app/Navigation/Navigation.tsx +++ b/rsconcept/frontend/src/app/Navigation/Navigation.tsx @@ -2,7 +2,7 @@ import clsx from 'clsx'; import { IconLibrary2, IconManuals, IconNewItem2 } from '@/components/Icons'; import { CProps } from '@/components/props'; -import { useConceptNavigation } from '@/context/NavigationContext'; +import { useConceptNavigation } from '@/app/Navigation/NavigationContext'; import useWindowSize from '@/hooks/useWindowSize'; import { useAppLayoutStore } from '@/stores/appLayout'; import { PARAMETER } from '@/utils/constants'; @@ -27,7 +27,7 @@ function Navigation() { return (