mirror of
https://github.com/IRBorisov/ConceptPortal.git
synced 2025-06-26 13:00:39 +03:00
R: Invalidate OSS on RSForm change. Minor UI fixes
Some checks are pending
Frontend CI / build (22.x) (push) Waiting to run
Some checks are pending
Frontend CI / build (22.x) (push) Waiting to run
This commit is contained in:
parent
35883458f3
commit
88c9b646eb
|
@ -11,7 +11,7 @@ function ApplicationLayout() {
|
||||||
const { viewportHeight, mainHeight, showScroll } = useConceptOptions();
|
const { viewportHeight, mainHeight, showScroll } = useConceptOptions();
|
||||||
return (
|
return (
|
||||||
<NavigationState>
|
<NavigationState>
|
||||||
<div className='min-w-[20rem] clr-app antialiased'>
|
<div className='min-w-[20rem] clr-app antialiased h-full'>
|
||||||
<ConceptToaster
|
<ConceptToaster
|
||||||
className='mt-[4rem] text-sm' // prettier: split lines
|
className='mt-[4rem] text-sm' // prettier: split lines
|
||||||
autoClose={3000}
|
autoClose={3000}
|
||||||
|
@ -29,7 +29,7 @@ function ApplicationLayout() {
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<main
|
<main
|
||||||
className='w-full cc-scroll-y'
|
className='w-full h-full cc-scroll-y'
|
||||||
style={{ overflowY: showScroll ? 'scroll' : 'auto', minHeight: mainHeight }}
|
style={{ overflowY: showScroll ? 'scroll' : 'auto', minHeight: mainHeight }}
|
||||||
>
|
>
|
||||||
<Outlet />
|
<Outlet />
|
||||||
|
|
|
@ -6,6 +6,7 @@ import { pdfjs } from 'react-pdf';
|
||||||
|
|
||||||
import { AuthState } from '@/context/AuthContext';
|
import { AuthState } from '@/context/AuthContext';
|
||||||
import { OptionsState } from '@/context/ConceptOptionsContext';
|
import { OptionsState } from '@/context/ConceptOptionsContext';
|
||||||
|
import { GlobalOssState } from '@/context/GlobalOssContext';
|
||||||
import { LibraryState } from '@/context/LibraryContext';
|
import { LibraryState } from '@/context/LibraryContext';
|
||||||
import { UsersState } from '@/context/UsersContext';
|
import { UsersState } from '@/context/UsersContext';
|
||||||
|
|
||||||
|
@ -37,9 +38,11 @@ function GlobalProviders({ children }: { children: React.ReactNode }) {
|
||||||
<UsersState>
|
<UsersState>
|
||||||
<AuthState>
|
<AuthState>
|
||||||
<LibraryState>
|
<LibraryState>
|
||||||
|
<GlobalOssState>
|
||||||
|
|
||||||
{children}
|
{children}
|
||||||
|
|
||||||
|
</GlobalOssState>
|
||||||
</LibraryState>
|
</LibraryState>
|
||||||
</AuthState>
|
</AuthState>
|
||||||
</UsersState>
|
</UsersState>
|
||||||
|
|
|
@ -62,7 +62,7 @@ function TooltipOperation({ node, anchor }: TooltipOperationProps) {
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Tooltip layer='z-modalTooltip' anchorSelect={anchor} className='max-w-[35rem] max-h-[40rem] dense my-3'>
|
<Tooltip layer='z-modalTooltip' anchorSelect={anchor} className='max-w-[35rem] max-h-[40rem] dense'>
|
||||||
<h2>{node.data.operation.alias}</h2>
|
<h2>{node.data.operation.alias}</h2>
|
||||||
<p>
|
<p>
|
||||||
<b>Тип:</b> {labelOperationType(node.data.operation.operation_type)}
|
<b>Тип:</b> {labelOperationType(node.data.operation.operation_type)}
|
||||||
|
|
111
rsconcept/frontend/src/context/GlobalOssContext.tsx
Normal file
111
rsconcept/frontend/src/context/GlobalOssContext.tsx
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
'use client';
|
||||||
|
|
||||||
|
import { createContext, useCallback, useContext, useState } from 'react';
|
||||||
|
|
||||||
|
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';
|
||||||
|
|
||||||
|
import { useLibrary } from './LibraryContext';
|
||||||
|
|
||||||
|
interface IGlobalOssContext {
|
||||||
|
schema: IOperationSchema | undefined;
|
||||||
|
setID: (id: string | undefined) => void;
|
||||||
|
setData: (data: IOperationSchemaData) => void;
|
||||||
|
loading: boolean;
|
||||||
|
loadingError: ErrorData;
|
||||||
|
isValid: boolean;
|
||||||
|
|
||||||
|
invalidate: () => void;
|
||||||
|
invalidateItem: (target: LibraryItemID) => void;
|
||||||
|
reload: (callback?: () => void) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
const GlobalOssContext = createContext<IGlobalOssContext | null>(null);
|
||||||
|
export const useGlobalOss = (): IGlobalOssContext => {
|
||||||
|
const context = useContext(GlobalOssContext);
|
||||||
|
if (context === null) {
|
||||||
|
throw new Error(contextOutsideScope('useGlobalOss', 'GlobalOssState'));
|
||||||
|
}
|
||||||
|
return context;
|
||||||
|
};
|
||||||
|
|
||||||
|
interface GlobalOssStateProps {
|
||||||
|
children: React.ReactNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const GlobalOssState = ({ children }: GlobalOssStateProps) => {
|
||||||
|
const library = useLibrary();
|
||||||
|
const [isValid, setIsValid] = useState(false);
|
||||||
|
const [ossID, setIdInternal] = useState<string | undefined>(undefined);
|
||||||
|
const {
|
||||||
|
schema: schema, // prettier: split lines
|
||||||
|
error: loadingError,
|
||||||
|
setSchema: setDataInternal,
|
||||||
|
loading: loading,
|
||||||
|
reload: reloadInternal
|
||||||
|
} = useOssDetails({ target: ossID, items: library.items });
|
||||||
|
|
||||||
|
const reload = useCallback(
|
||||||
|
(callback?: () => void) => {
|
||||||
|
reloadInternal(undefined, () => {
|
||||||
|
setIsValid(true);
|
||||||
|
if (callback) 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 invalidateItem = useCallback(
|
||||||
|
(target: LibraryItemID) => {
|
||||||
|
if (schema?.schemas.includes(target)) {
|
||||||
|
setIsValid(false);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
[schema]
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<GlobalOssContext.Provider
|
||||||
|
value={{
|
||||||
|
schema,
|
||||||
|
setID,
|
||||||
|
setData,
|
||||||
|
loading,
|
||||||
|
loadingError,
|
||||||
|
reload,
|
||||||
|
isValid,
|
||||||
|
invalidateItem,
|
||||||
|
invalidate
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</GlobalOssContext.Provider>
|
||||||
|
);
|
||||||
|
};
|
|
@ -13,13 +13,11 @@ import {
|
||||||
} from '@/backend/library';
|
} from '@/backend/library';
|
||||||
import { getRSFormDetails, postRSFormFromFile } from '@/backend/rsforms';
|
import { getRSFormDetails, postRSFormFromFile } from '@/backend/rsforms';
|
||||||
import { ErrorData } from '@/components/info/InfoError';
|
import { ErrorData } from '@/components/info/InfoError';
|
||||||
import useOssDetails from '@/hooks/useOssDetails';
|
|
||||||
import { FolderTree } from '@/models/FolderTree';
|
import { FolderTree } from '@/models/FolderTree';
|
||||||
import { ILibraryItem, LibraryItemID, LocationHead } from '@/models/library';
|
import { ILibraryItem, LibraryItemID, LocationHead } from '@/models/library';
|
||||||
import { ILibraryCreateData } from '@/models/library';
|
import { ILibraryCreateData } from '@/models/library';
|
||||||
import { matchLibraryItem, matchLibraryItemLocation } from '@/models/libraryAPI';
|
import { matchLibraryItem, matchLibraryItemLocation } from '@/models/libraryAPI';
|
||||||
import { ILibraryFilter } from '@/models/miscellaneous';
|
import { ILibraryFilter } from '@/models/miscellaneous';
|
||||||
import { IOperationSchema, IOperationSchemaData } from '@/models/oss';
|
|
||||||
import { IRSForm, IRSFormCloneData, IRSFormData } from '@/models/rsform';
|
import { IRSForm, IRSFormCloneData, IRSFormData } from '@/models/rsform';
|
||||||
import { RSFormLoader } from '@/models/RSFormLoader';
|
import { RSFormLoader } from '@/models/RSFormLoader';
|
||||||
import { contextOutsideScope } from '@/utils/labels';
|
import { contextOutsideScope } from '@/utils/labels';
|
||||||
|
@ -36,17 +34,10 @@ interface ILibraryContext {
|
||||||
loadingError: ErrorData;
|
loadingError: ErrorData;
|
||||||
setLoadingError: (error: ErrorData) => void;
|
setLoadingError: (error: ErrorData) => void;
|
||||||
|
|
||||||
globalOSS: IOperationSchema | undefined;
|
|
||||||
setGlobalID: (id: string | undefined) => void;
|
|
||||||
setGlobalOSS: (data: IOperationSchemaData) => void;
|
|
||||||
ossLoading: boolean;
|
|
||||||
ossError: ErrorData;
|
|
||||||
|
|
||||||
processing: boolean;
|
processing: boolean;
|
||||||
processingError: ErrorData;
|
processingError: ErrorData;
|
||||||
setProcessingError: (error: ErrorData) => void;
|
setProcessingError: (error: ErrorData) => void;
|
||||||
|
|
||||||
reloadOSS: (callback?: () => void) => void;
|
|
||||||
reloadItems: (callback?: () => void) => void;
|
reloadItems: (callback?: () => void) => void;
|
||||||
|
|
||||||
applyFilter: (params: ILibraryFilter) => ILibraryItem[];
|
applyFilter: (params: ILibraryFilter) => ILibraryItem[];
|
||||||
|
@ -84,22 +75,6 @@ export const LibraryState = ({ children }: LibraryStateProps) => {
|
||||||
const [processingError, setProcessingError] = useState<ErrorData>(undefined);
|
const [processingError, setProcessingError] = useState<ErrorData>(undefined);
|
||||||
const [cachedTemplates, setCachedTemplates] = useState<IRSForm[]>([]);
|
const [cachedTemplates, setCachedTemplates] = useState<IRSForm[]>([]);
|
||||||
|
|
||||||
const [ossID, setGlobalID] = useState<string | undefined>(undefined);
|
|
||||||
const {
|
|
||||||
schema: globalOSS, // prettier: split lines
|
|
||||||
error: ossError,
|
|
||||||
setSchema: setGlobalOSS,
|
|
||||||
loading: ossLoading,
|
|
||||||
reload: reloadOssInternal
|
|
||||||
} = useOssDetails({ target: ossID, items: items });
|
|
||||||
|
|
||||||
const reloadOSS = useCallback(
|
|
||||||
(callback?: () => void) => {
|
|
||||||
reloadOssInternal(setProcessing, callback);
|
|
||||||
},
|
|
||||||
[reloadOssInternal]
|
|
||||||
);
|
|
||||||
|
|
||||||
const folders = useMemo(() => {
|
const folders = useMemo(() => {
|
||||||
const result = new FolderTree();
|
const result = new FolderTree();
|
||||||
result.addPath(LocationHead.USER, 0);
|
result.addPath(LocationHead.USER, 0);
|
||||||
|
@ -280,17 +255,11 @@ export const LibraryState = ({ children }: LibraryStateProps) => {
|
||||||
1
|
1
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (globalOSS?.schemas.includes(target)) {
|
if (callback) callback();
|
||||||
reloadOSS(() => {
|
|
||||||
if (callback) callback();
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
if (callback) callback();
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[reloadItems, reloadOSS, user, globalOSS]
|
[reloadItems, user]
|
||||||
);
|
);
|
||||||
|
|
||||||
const cloneItem = useCallback(
|
const cloneItem = useCallback(
|
||||||
|
@ -326,20 +295,12 @@ export const LibraryState = ({ children }: LibraryStateProps) => {
|
||||||
loading,
|
loading,
|
||||||
loadingError,
|
loadingError,
|
||||||
setLoadingError,
|
setLoadingError,
|
||||||
|
reloadItems,
|
||||||
|
|
||||||
processing,
|
processing,
|
||||||
processingError,
|
processingError,
|
||||||
setProcessingError,
|
setProcessingError,
|
||||||
|
|
||||||
globalOSS,
|
|
||||||
setGlobalID,
|
|
||||||
setGlobalOSS,
|
|
||||||
ossLoading,
|
|
||||||
ossError,
|
|
||||||
reloadOSS,
|
|
||||||
|
|
||||||
reloadItems,
|
|
||||||
|
|
||||||
applyFilter,
|
applyFilter,
|
||||||
createItem,
|
createItem,
|
||||||
cloneItem,
|
cloneItem,
|
||||||
|
|
|
@ -39,6 +39,7 @@ import { UserID } from '@/models/user';
|
||||||
import { contextOutsideScope } from '@/utils/labels';
|
import { contextOutsideScope } from '@/utils/labels';
|
||||||
|
|
||||||
import { useAuth } from './AuthContext';
|
import { useAuth } from './AuthContext';
|
||||||
|
import { useGlobalOss } from './GlobalOssContext';
|
||||||
import { useLibrary } from './LibraryContext';
|
import { useLibrary } from './LibraryContext';
|
||||||
|
|
||||||
interface IOssContext {
|
interface IOssContext {
|
||||||
|
@ -46,7 +47,7 @@ interface IOssContext {
|
||||||
itemID: string;
|
itemID: string;
|
||||||
|
|
||||||
loading: boolean;
|
loading: boolean;
|
||||||
errorLoading: ErrorData;
|
loadingError: ErrorData;
|
||||||
processing: boolean;
|
processing: boolean;
|
||||||
processingError: ErrorData;
|
processingError: ErrorData;
|
||||||
|
|
||||||
|
@ -87,7 +88,8 @@ interface OssStateProps {
|
||||||
|
|
||||||
export const OssState = ({ itemID, children }: OssStateProps) => {
|
export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
const library = useLibrary();
|
const library = useLibrary();
|
||||||
const schema = library.globalOSS;
|
const oss = useGlobalOss();
|
||||||
|
const model = oss.schema;
|
||||||
const { user } = useAuth();
|
const { user } = useAuth();
|
||||||
const [processing, setProcessing] = useState(false);
|
const [processing, setProcessing] = useState(false);
|
||||||
const [processingError, setProcessingError] = useState<ErrorData>(undefined);
|
const [processingError, setProcessingError] = useState<ErrorData>(undefined);
|
||||||
|
@ -95,25 +97,23 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
const [toggleTracking, setToggleTracking] = useState(false);
|
const [toggleTracking, setToggleTracking] = useState(false);
|
||||||
|
|
||||||
const isOwned = useMemo(() => {
|
const isOwned = useMemo(() => {
|
||||||
return user?.id === schema?.owner || false;
|
return user?.id === model?.owner || false;
|
||||||
}, [user, schema?.owner]);
|
}, [user, model?.owner]);
|
||||||
|
|
||||||
const isSubscribed = useMemo(() => {
|
const isSubscribed = useMemo(() => {
|
||||||
if (!user || !schema || !user.id) {
|
if (!user || !model || !user.id) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return schema.subscribers.includes(user.id);
|
return model.subscribers.includes(user.id);
|
||||||
}, [user, schema, toggleTracking]);
|
}, [user, model, toggleTracking]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (schema?.id !== Number(itemID)) {
|
oss.setID(itemID);
|
||||||
library.setGlobalID(itemID);
|
}, [itemID, oss.setID]);
|
||||||
}
|
|
||||||
}, [itemID, schema, library]);
|
|
||||||
|
|
||||||
const update = useCallback(
|
const update = useCallback(
|
||||||
(data: ILibraryUpdateData, callback?: DataCallback<ILibraryItem>) => {
|
(data: ILibraryUpdateData, callback?: DataCallback<ILibraryItem>) => {
|
||||||
if (!schema) {
|
if (!model) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setProcessingError(undefined);
|
setProcessingError(undefined);
|
||||||
|
@ -123,19 +123,19 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
setLoading: setProcessing,
|
setLoading: setProcessing,
|
||||||
onError: setProcessingError,
|
onError: setProcessingError,
|
||||||
onSuccess: newData => {
|
onSuccess: newData => {
|
||||||
const fullData: IOperationSchemaData = Object.assign(schema, newData);
|
const fullData: IOperationSchemaData = Object.assign(model, newData);
|
||||||
library.setGlobalOSS(fullData);
|
oss.setData(fullData);
|
||||||
library.localUpdateItem(newData);
|
library.localUpdateItem(newData);
|
||||||
if (callback) callback(newData);
|
if (callback) callback(newData);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, schema, library]
|
[itemID, model, library.localUpdateItem, oss.setData]
|
||||||
);
|
);
|
||||||
|
|
||||||
const subscribe = useCallback(
|
const subscribe = useCallback(
|
||||||
(callback?: () => void) => {
|
(callback?: () => void) => {
|
||||||
if (!schema || !user) {
|
if (!model || !user) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setProcessingError(undefined);
|
setProcessingError(undefined);
|
||||||
|
@ -144,23 +144,23 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
setLoading: setProcessing,
|
setLoading: setProcessing,
|
||||||
onError: setProcessingError,
|
onError: setProcessingError,
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
if (user.id && !schema.subscribers.includes(user.id)) {
|
if (user.id && !model.subscribers.includes(user.id)) {
|
||||||
schema.subscribers.push(user.id);
|
model.subscribers.push(user.id);
|
||||||
}
|
}
|
||||||
if (!user.subscriptions.includes(schema.id)) {
|
if (!user.subscriptions.includes(model.id)) {
|
||||||
user.subscriptions.push(schema.id);
|
user.subscriptions.push(model.id);
|
||||||
}
|
}
|
||||||
setToggleTracking(prev => !prev);
|
setToggleTracking(prev => !prev);
|
||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, user, schema]
|
[itemID, user, model]
|
||||||
);
|
);
|
||||||
|
|
||||||
const unsubscribe = useCallback(
|
const unsubscribe = useCallback(
|
||||||
(callback?: () => void) => {
|
(callback?: () => void) => {
|
||||||
if (!schema || !user) {
|
if (!model || !user) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setProcessingError(undefined);
|
setProcessingError(undefined);
|
||||||
|
@ -169,23 +169,23 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
setLoading: setProcessing,
|
setLoading: setProcessing,
|
||||||
onError: setProcessingError,
|
onError: setProcessingError,
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
if (user.id && schema.subscribers.includes(user.id)) {
|
if (user.id && model.subscribers.includes(user.id)) {
|
||||||
schema.subscribers.splice(schema.subscribers.indexOf(user.id), 1);
|
model.subscribers.splice(model.subscribers.indexOf(user.id), 1);
|
||||||
}
|
}
|
||||||
if (user.subscriptions.includes(schema.id)) {
|
if (user.subscriptions.includes(model.id)) {
|
||||||
user.subscriptions.splice(user.subscriptions.indexOf(schema.id), 1);
|
user.subscriptions.splice(user.subscriptions.indexOf(model.id), 1);
|
||||||
}
|
}
|
||||||
setToggleTracking(prev => !prev);
|
setToggleTracking(prev => !prev);
|
||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, schema, user]
|
[itemID, model, user]
|
||||||
);
|
);
|
||||||
|
|
||||||
const setOwner = useCallback(
|
const setOwner = useCallback(
|
||||||
(newOwner: UserID, callback?: () => void) => {
|
(newOwner: UserID, callback?: () => void) => {
|
||||||
if (!schema) {
|
if (!model) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setProcessingError(undefined);
|
setProcessingError(undefined);
|
||||||
|
@ -197,18 +197,18 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
setLoading: setProcessing,
|
setLoading: setProcessing,
|
||||||
onError: setProcessingError,
|
onError: setProcessingError,
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
schema.owner = newOwner;
|
model.owner = newOwner;
|
||||||
library.localUpdateItem(schema);
|
library.localUpdateItem(model);
|
||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, schema, library]
|
[itemID, model, library.localUpdateItem]
|
||||||
);
|
);
|
||||||
|
|
||||||
const setAccessPolicy = useCallback(
|
const setAccessPolicy = useCallback(
|
||||||
(newPolicy: AccessPolicy, callback?: () => void) => {
|
(newPolicy: AccessPolicy, callback?: () => void) => {
|
||||||
if (!schema) {
|
if (!model) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setProcessingError(undefined);
|
setProcessingError(undefined);
|
||||||
|
@ -220,18 +220,18 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
setLoading: setProcessing,
|
setLoading: setProcessing,
|
||||||
onError: setProcessingError,
|
onError: setProcessingError,
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
schema.access_policy = newPolicy;
|
model.access_policy = newPolicy;
|
||||||
library.localUpdateItem(schema);
|
library.localUpdateItem(model);
|
||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, schema, library]
|
[itemID, model, library.localUpdateItem]
|
||||||
);
|
);
|
||||||
|
|
||||||
const setLocation = useCallback(
|
const setLocation = useCallback(
|
||||||
(newLocation: string, callback?: () => void) => {
|
(newLocation: string, callback?: () => void) => {
|
||||||
if (!schema) {
|
if (!model) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setProcessingError(undefined);
|
setProcessingError(undefined);
|
||||||
|
@ -243,18 +243,18 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
setLoading: setProcessing,
|
setLoading: setProcessing,
|
||||||
onError: setProcessingError,
|
onError: setProcessingError,
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
schema.location = newLocation;
|
model.location = newLocation;
|
||||||
library.localUpdateItem(schema);
|
library.localUpdateItem(model);
|
||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, schema, library]
|
[itemID, model, library.localUpdateItem]
|
||||||
);
|
);
|
||||||
|
|
||||||
const setEditors = useCallback(
|
const setEditors = useCallback(
|
||||||
(newEditors: UserID[], callback?: () => void) => {
|
(newEditors: UserID[], callback?: () => void) => {
|
||||||
if (!schema) {
|
if (!model) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setProcessingError(undefined);
|
setProcessingError(undefined);
|
||||||
|
@ -266,12 +266,12 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
setLoading: setProcessing,
|
setLoading: setProcessing,
|
||||||
onError: setProcessingError,
|
onError: setProcessingError,
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
schema.editors = newEditors;
|
model.editors = newEditors;
|
||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, schema]
|
[itemID, model]
|
||||||
);
|
);
|
||||||
|
|
||||||
const savePositions = useCallback(
|
const savePositions = useCallback(
|
||||||
|
@ -288,7 +288,7 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, library]
|
[itemID, library.localUpdateTimestamp]
|
||||||
);
|
);
|
||||||
|
|
||||||
const createOperation = useCallback(
|
const createOperation = useCallback(
|
||||||
|
@ -300,13 +300,13 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
setLoading: setProcessing,
|
setLoading: setProcessing,
|
||||||
onError: setProcessingError,
|
onError: setProcessingError,
|
||||||
onSuccess: newData => {
|
onSuccess: newData => {
|
||||||
library.setGlobalOSS(newData.oss);
|
oss.setData(newData.oss);
|
||||||
library.localUpdateTimestamp(newData.oss.id);
|
library.localUpdateTimestamp(newData.oss.id);
|
||||||
if (callback) callback(newData.new_operation);
|
if (callback) callback(newData.new_operation);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, library]
|
[itemID, library.localUpdateTimestamp, oss.setData]
|
||||||
);
|
);
|
||||||
|
|
||||||
const deleteOperation = useCallback(
|
const deleteOperation = useCallback(
|
||||||
|
@ -318,13 +318,13 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
setLoading: setProcessing,
|
setLoading: setProcessing,
|
||||||
onError: setProcessingError,
|
onError: setProcessingError,
|
||||||
onSuccess: newData => {
|
onSuccess: newData => {
|
||||||
library.setGlobalOSS(newData);
|
oss.setData(newData);
|
||||||
library.localUpdateTimestamp(newData.id);
|
library.localUpdateTimestamp(newData.id);
|
||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, library]
|
[itemID, library.localUpdateTimestamp, oss.setData]
|
||||||
);
|
);
|
||||||
|
|
||||||
const createInput = useCallback(
|
const createInput = useCallback(
|
||||||
|
@ -336,19 +336,19 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
setLoading: setProcessing,
|
setLoading: setProcessing,
|
||||||
onError: setProcessingError,
|
onError: setProcessingError,
|
||||||
onSuccess: newData => {
|
onSuccess: newData => {
|
||||||
library.setGlobalOSS(newData.oss);
|
oss.setData(newData.oss);
|
||||||
library.reloadItems(() => {
|
library.reloadItems(() => {
|
||||||
if (callback) callback(newData.new_schema);
|
if (callback) callback(newData.new_schema);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, library]
|
[itemID, library.reloadItems, oss.setData]
|
||||||
);
|
);
|
||||||
|
|
||||||
const setInput = useCallback(
|
const setInput = useCallback(
|
||||||
(data: IOperationSetInputData, callback?: () => void) => {
|
(data: IOperationSetInputData, callback?: () => void) => {
|
||||||
if (!schema) {
|
if (!model) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setProcessingError(undefined);
|
setProcessingError(undefined);
|
||||||
|
@ -358,18 +358,18 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
setLoading: setProcessing,
|
setLoading: setProcessing,
|
||||||
onError: setProcessingError,
|
onError: setProcessingError,
|
||||||
onSuccess: newData => {
|
onSuccess: newData => {
|
||||||
library.setGlobalOSS(newData);
|
oss.setData(newData);
|
||||||
library.localUpdateTimestamp(newData.id);
|
library.localUpdateTimestamp(newData.id);
|
||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, schema, library]
|
[itemID, model, library.localUpdateTimestamp, oss.setData]
|
||||||
);
|
);
|
||||||
|
|
||||||
const updateOperation = useCallback(
|
const updateOperation = useCallback(
|
||||||
(data: IOperationUpdateData, callback?: () => void) => {
|
(data: IOperationUpdateData, callback?: () => void) => {
|
||||||
if (!schema) {
|
if (!model) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setProcessingError(undefined);
|
setProcessingError(undefined);
|
||||||
|
@ -379,19 +379,19 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
setLoading: setProcessing,
|
setLoading: setProcessing,
|
||||||
onError: setProcessingError,
|
onError: setProcessingError,
|
||||||
onSuccess: newData => {
|
onSuccess: newData => {
|
||||||
library.setGlobalOSS(newData);
|
oss.setData(newData);
|
||||||
library.reloadItems(() => {
|
library.reloadItems(() => {
|
||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, schema, library]
|
[itemID, model, library.reloadItems, oss.setData]
|
||||||
);
|
);
|
||||||
|
|
||||||
const executeOperation = useCallback(
|
const executeOperation = useCallback(
|
||||||
(data: ITargetOperation, callback?: () => void) => {
|
(data: ITargetOperation, callback?: () => void) => {
|
||||||
if (!schema) {
|
if (!model) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setProcessingError(undefined);
|
setProcessingError(undefined);
|
||||||
|
@ -401,23 +401,23 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
setLoading: setProcessing,
|
setLoading: setProcessing,
|
||||||
onError: setProcessingError,
|
onError: setProcessingError,
|
||||||
onSuccess: newData => {
|
onSuccess: newData => {
|
||||||
library.setGlobalOSS(newData);
|
oss.setData(newData);
|
||||||
library.reloadItems(() => {
|
library.reloadItems(() => {
|
||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, schema, library]
|
[itemID, model, library.reloadItems, oss.setData]
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<OssContext.Provider
|
<OssContext.Provider
|
||||||
value={{
|
value={{
|
||||||
schema,
|
schema: model,
|
||||||
itemID,
|
itemID,
|
||||||
loading: library.ossLoading,
|
loading: oss.loading,
|
||||||
errorLoading: library.ossError,
|
loadingError: oss.loadingError,
|
||||||
processing,
|
processing,
|
||||||
processingError,
|
processingError,
|
||||||
isOwned,
|
isOwned,
|
||||||
|
|
|
@ -53,6 +53,7 @@ import { UserID } from '@/models/user';
|
||||||
import { contextOutsideScope } from '@/utils/labels';
|
import { contextOutsideScope } from '@/utils/labels';
|
||||||
|
|
||||||
import { useAuth } from './AuthContext';
|
import { useAuth } from './AuthContext';
|
||||||
|
import { useGlobalOss } from './GlobalOssContext';
|
||||||
import { useLibrary } from './LibraryContext';
|
import { useLibrary } from './LibraryContext';
|
||||||
|
|
||||||
interface IRSFormContext {
|
interface IRSFormContext {
|
||||||
|
@ -116,6 +117,7 @@ interface RSFormStateProps {
|
||||||
|
|
||||||
export const RSFormState = ({ itemID, versionID, children }: RSFormStateProps) => {
|
export const RSFormState = ({ itemID, versionID, children }: RSFormStateProps) => {
|
||||||
const library = useLibrary();
|
const library = useLibrary();
|
||||||
|
const oss = useGlobalOss();
|
||||||
const { user } = useAuth();
|
const { user } = useAuth();
|
||||||
const {
|
const {
|
||||||
schema, // prettier: split lines
|
schema, // prettier: split lines
|
||||||
|
@ -159,15 +161,12 @@ export const RSFormState = ({ itemID, versionID, children }: RSFormStateProps) =
|
||||||
onSuccess: newData => {
|
onSuccess: newData => {
|
||||||
setSchema(Object.assign(schema, newData));
|
setSchema(Object.assign(schema, newData));
|
||||||
library.localUpdateItem(newData);
|
library.localUpdateItem(newData);
|
||||||
if (library.globalOSS?.schemas.includes(newData.id)) {
|
oss.invalidateItem(newData.id);
|
||||||
library.reloadOSS(() => {
|
if (callback) callback(newData);
|
||||||
if (callback) callback(newData);
|
|
||||||
});
|
|
||||||
} else if (callback) callback(newData);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, setSchema, schema, library]
|
[itemID, setSchema, schema, library.localUpdateItem, oss.invalidateItem]
|
||||||
);
|
);
|
||||||
|
|
||||||
const upload = useCallback(
|
const upload = useCallback(
|
||||||
|
@ -188,7 +187,7 @@ export const RSFormState = ({ itemID, versionID, children }: RSFormStateProps) =
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, setSchema, schema, library]
|
[itemID, setSchema, schema, library.localUpdateItem]
|
||||||
);
|
);
|
||||||
|
|
||||||
const subscribe = useCallback(
|
const subscribe = useCallback(
|
||||||
|
@ -261,7 +260,7 @@ export const RSFormState = ({ itemID, versionID, children }: RSFormStateProps) =
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, schema, library]
|
[itemID, schema, library.localUpdateItem]
|
||||||
);
|
);
|
||||||
|
|
||||||
const setAccessPolicy = useCallback(
|
const setAccessPolicy = useCallback(
|
||||||
|
@ -284,7 +283,7 @@ export const RSFormState = ({ itemID, versionID, children }: RSFormStateProps) =
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, schema, library]
|
[itemID, schema, library.localUpdateItem]
|
||||||
);
|
);
|
||||||
|
|
||||||
const setLocation = useCallback(
|
const setLocation = useCallback(
|
||||||
|
@ -306,7 +305,7 @@ export const RSFormState = ({ itemID, versionID, children }: RSFormStateProps) =
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, schema, library]
|
[itemID, schema, library.reloadItems]
|
||||||
);
|
);
|
||||||
|
|
||||||
const setEditors = useCallback(
|
const setEditors = useCallback(
|
||||||
|
@ -344,13 +343,12 @@ export const RSFormState = ({ itemID, versionID, children }: RSFormStateProps) =
|
||||||
onSuccess: newData => {
|
onSuccess: newData => {
|
||||||
setSchema(newData);
|
setSchema(newData);
|
||||||
library.localUpdateTimestamp(newData.id);
|
library.localUpdateTimestamp(newData.id);
|
||||||
|
oss.invalidateItem(newData.id);
|
||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
|
|
||||||
// TODO: deal with OSS cache invalidation
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, schema, library, user, setSchema]
|
[itemID, schema, user, setSchema, library.localUpdateTimestamp, oss.invalidateItem]
|
||||||
);
|
);
|
||||||
|
|
||||||
const restoreOrder = useCallback(
|
const restoreOrder = useCallback(
|
||||||
|
@ -370,7 +368,7 @@ export const RSFormState = ({ itemID, versionID, children }: RSFormStateProps) =
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, schema, library, user, setSchema]
|
[itemID, schema, user, setSchema, library.localUpdateTimestamp]
|
||||||
);
|
);
|
||||||
|
|
||||||
const produceStructure = useCallback(
|
const produceStructure = useCallback(
|
||||||
|
@ -384,11 +382,12 @@ export const RSFormState = ({ itemID, versionID, children }: RSFormStateProps) =
|
||||||
onSuccess: newData => {
|
onSuccess: newData => {
|
||||||
setSchema(newData.schema);
|
setSchema(newData.schema);
|
||||||
library.localUpdateTimestamp(newData.schema.id);
|
library.localUpdateTimestamp(newData.schema.id);
|
||||||
|
oss.invalidateItem(newData.schema.id);
|
||||||
if (callback) callback(newData.cst_list);
|
if (callback) callback(newData.cst_list);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[setSchema, library, itemID]
|
[setSchema, itemID, library.localUpdateTimestamp, oss.invalidateItem]
|
||||||
);
|
);
|
||||||
|
|
||||||
const download = useCallback(
|
const download = useCallback(
|
||||||
|
@ -415,13 +414,12 @@ export const RSFormState = ({ itemID, versionID, children }: RSFormStateProps) =
|
||||||
onSuccess: newData => {
|
onSuccess: newData => {
|
||||||
setSchema(newData.schema);
|
setSchema(newData.schema);
|
||||||
library.localUpdateTimestamp(newData.schema.id);
|
library.localUpdateTimestamp(newData.schema.id);
|
||||||
|
oss.invalidateItem(newData.schema.id);
|
||||||
if (callback) callback(newData.new_cst);
|
if (callback) callback(newData.new_cst);
|
||||||
|
|
||||||
// TODO: deal with OSS cache invalidation
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, library, setSchema]
|
[itemID, setSchema, library.localUpdateTimestamp, oss.invalidateItem]
|
||||||
);
|
);
|
||||||
|
|
||||||
const cstDelete = useCallback(
|
const cstDelete = useCallback(
|
||||||
|
@ -435,13 +433,12 @@ export const RSFormState = ({ itemID, versionID, children }: RSFormStateProps) =
|
||||||
onSuccess: newData => {
|
onSuccess: newData => {
|
||||||
setSchema(newData);
|
setSchema(newData);
|
||||||
library.localUpdateTimestamp(newData.id);
|
library.localUpdateTimestamp(newData.id);
|
||||||
|
oss.invalidateItem(newData.id);
|
||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
|
|
||||||
// TODO: deal with OSS cache invalidation
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, library, setSchema]
|
[itemID, setSchema, library.localUpdateTimestamp, oss.invalidateItem]
|
||||||
);
|
);
|
||||||
|
|
||||||
const cstUpdate = useCallback(
|
const cstUpdate = useCallback(
|
||||||
|
@ -455,13 +452,12 @@ export const RSFormState = ({ itemID, versionID, children }: RSFormStateProps) =
|
||||||
onSuccess: newData =>
|
onSuccess: newData =>
|
||||||
reload(setProcessing, () => {
|
reload(setProcessing, () => {
|
||||||
library.localUpdateTimestamp(Number(itemID));
|
library.localUpdateTimestamp(Number(itemID));
|
||||||
|
oss.invalidateItem(Number(itemID));
|
||||||
if (callback) callback(newData);
|
if (callback) callback(newData);
|
||||||
|
|
||||||
// TODO: deal with OSS cache invalidation
|
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, library, reload]
|
[itemID, reload, library.localUpdateTimestamp, oss.invalidateItem]
|
||||||
);
|
);
|
||||||
|
|
||||||
const cstRename = useCallback(
|
const cstRename = useCallback(
|
||||||
|
@ -475,15 +471,12 @@ export const RSFormState = ({ itemID, versionID, children }: RSFormStateProps) =
|
||||||
onSuccess: newData => {
|
onSuccess: newData => {
|
||||||
setSchema(newData.schema);
|
setSchema(newData.schema);
|
||||||
library.localUpdateTimestamp(newData.schema.id);
|
library.localUpdateTimestamp(newData.schema.id);
|
||||||
if (library.globalOSS?.schemas.includes(newData.schema.id)) {
|
oss.invalidateItem(newData.schema.id);
|
||||||
library.reloadOSS(() => {
|
if (callback) callback(newData.new_cst);
|
||||||
if (callback) callback(newData.new_cst);
|
|
||||||
});
|
|
||||||
} else if (callback) callback(newData.new_cst);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[setSchema, library, itemID]
|
[setSchema, itemID, library.localUpdateTimestamp, oss.invalidateItem]
|
||||||
);
|
);
|
||||||
|
|
||||||
const cstSubstitute = useCallback(
|
const cstSubstitute = useCallback(
|
||||||
|
@ -497,15 +490,12 @@ export const RSFormState = ({ itemID, versionID, children }: RSFormStateProps) =
|
||||||
onSuccess: newData => {
|
onSuccess: newData => {
|
||||||
setSchema(newData);
|
setSchema(newData);
|
||||||
library.localUpdateTimestamp(newData.id);
|
library.localUpdateTimestamp(newData.id);
|
||||||
if (library.globalOSS?.schemas.includes(newData.id)) {
|
oss.invalidateItem(newData.id);
|
||||||
library.reloadOSS(() => {
|
if (callback) callback();
|
||||||
if (callback) callback();
|
|
||||||
});
|
|
||||||
} else if (callback) callback();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[setSchema, library, itemID]
|
[setSchema, itemID, library.localUpdateTimestamp, oss.invalidateItem]
|
||||||
);
|
);
|
||||||
|
|
||||||
const cstMoveTo = useCallback(
|
const cstMoveTo = useCallback(
|
||||||
|
@ -523,7 +513,7 @@ export const RSFormState = ({ itemID, versionID, children }: RSFormStateProps) =
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, library, setSchema]
|
[itemID, setSchema, library.localUpdateTimestamp]
|
||||||
);
|
);
|
||||||
|
|
||||||
const versionCreate = useCallback(
|
const versionCreate = useCallback(
|
||||||
|
@ -541,7 +531,7 @@ export const RSFormState = ({ itemID, versionID, children }: RSFormStateProps) =
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, library, setSchema]
|
[itemID, setSchema, library.localUpdateTimestamp]
|
||||||
);
|
);
|
||||||
|
|
||||||
const findPredecessor = useCallback((data: ITargetCst, callback: (reference: IConstituentaReference) => void) => {
|
const findPredecessor = useCallback((data: ITargetCst, callback: (reference: IConstituentaReference) => void) => {
|
||||||
|
@ -612,7 +602,7 @@ export const RSFormState = ({ itemID, versionID, children }: RSFormStateProps) =
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[setSchema, library]
|
[setSchema, library.localUpdateItem]
|
||||||
);
|
);
|
||||||
|
|
||||||
const inlineSynthesis = useCallback(
|
const inlineSynthesis = useCallback(
|
||||||
|
@ -625,14 +615,13 @@ export const RSFormState = ({ itemID, versionID, children }: RSFormStateProps) =
|
||||||
onError: setProcessingError,
|
onError: setProcessingError,
|
||||||
onSuccess: newData => {
|
onSuccess: newData => {
|
||||||
setSchema(newData);
|
setSchema(newData);
|
||||||
library.localUpdateTimestamp(Number(itemID));
|
library.localUpdateTimestamp(newData.id);
|
||||||
|
oss.invalidateItem(newData.id);
|
||||||
if (callback) callback(newData);
|
if (callback) callback(newData);
|
||||||
|
|
||||||
// TODO: deal with OSS cache invalidation
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[library, itemID, setSchema]
|
[itemID, setSchema, library.localUpdateTimestamp, oss.invalidateItem]
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -36,7 +36,7 @@ function OssTabs() {
|
||||||
const activeTab = query.get('tab') ? (Number(query.get('tab')) as OssTabID) : OssTabID.GRAPH;
|
const activeTab = query.get('tab') ? (Number(query.get('tab')) as OssTabID) : OssTabID.GRAPH;
|
||||||
|
|
||||||
const { calculateHeight, setNoFooter } = useConceptOptions();
|
const { calculateHeight, setNoFooter } = useConceptOptions();
|
||||||
const { schema, loading, errorLoading } = useOSS();
|
const { schema, loading, loadingError: errorLoading } = useOSS();
|
||||||
const { destroyItem } = useLibrary();
|
const { destroyItem } = useLibrary();
|
||||||
|
|
||||||
const [isModified, setIsModified] = useState(false);
|
const [isModified, setIsModified] = useState(false);
|
||||||
|
@ -100,7 +100,7 @@ function OssTabs() {
|
||||||
});
|
});
|
||||||
}, [schema, destroyItem, router]);
|
}, [schema, destroyItem, router]);
|
||||||
|
|
||||||
const panelHeight = useMemo(() => calculateHeight('1.75rem + 4px'), [calculateHeight]);
|
const panelHeight = useMemo(() => calculateHeight('1.625rem + 2px'), [calculateHeight]);
|
||||||
|
|
||||||
const cardPanel = useMemo(
|
const cardPanel = useMemo(
|
||||||
() => (
|
() => (
|
||||||
|
|
|
@ -14,6 +14,7 @@ import TabLabel from '@/components/ui/TabLabel';
|
||||||
import TextURL from '@/components/ui/TextURL';
|
import TextURL from '@/components/ui/TextURL';
|
||||||
import AnimateFade from '@/components/wrap/AnimateFade';
|
import AnimateFade from '@/components/wrap/AnimateFade';
|
||||||
import { useConceptOptions } from '@/context/ConceptOptionsContext';
|
import { useConceptOptions } from '@/context/ConceptOptionsContext';
|
||||||
|
import { useGlobalOss } from '@/context/GlobalOssContext';
|
||||||
import { useLibrary } from '@/context/LibraryContext';
|
import { useLibrary } from '@/context/LibraryContext';
|
||||||
import { useBlockNavigation, useConceptNavigation } from '@/context/NavigationContext';
|
import { useBlockNavigation, useConceptNavigation } from '@/context/NavigationContext';
|
||||||
import { useRSForm } from '@/context/RSFormContext';
|
import { useRSForm } from '@/context/RSFormContext';
|
||||||
|
@ -47,6 +48,7 @@ function RSTabs() {
|
||||||
const { setNoFooter, calculateHeight } = useConceptOptions();
|
const { setNoFooter, calculateHeight } = useConceptOptions();
|
||||||
const { schema, loading, errorLoading, isArchive, itemID } = useRSForm();
|
const { schema, loading, errorLoading, isArchive, itemID } = useRSForm();
|
||||||
const library = useLibrary();
|
const library = useLibrary();
|
||||||
|
const oss = useGlobalOss();
|
||||||
|
|
||||||
const [isModified, setIsModified] = useState(false);
|
const [isModified, setIsModified] = useState(false);
|
||||||
useBlockNavigation(isModified);
|
useBlockNavigation(isModified);
|
||||||
|
@ -177,18 +179,19 @@ function RSTabs() {
|
||||||
if (!schema || !window.confirm(prompts.deleteLibraryItem)) {
|
if (!schema || !window.confirm(prompts.deleteLibraryItem)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const backToOSS = library.globalOSS?.schemas.includes(schema.id);
|
const backToOSS = oss.schema?.schemas.includes(schema.id);
|
||||||
library.destroyItem(schema.id, () => {
|
library.destroyItem(schema.id, () => {
|
||||||
toast.success(information.itemDestroyed);
|
toast.success(information.itemDestroyed);
|
||||||
if (backToOSS) {
|
if (backToOSS) {
|
||||||
router.push(urls.oss(library.globalOSS!.id, OssTabID.GRAPH));
|
oss.invalidate();
|
||||||
|
router.push(urls.oss(oss.schema!.id, OssTabID.GRAPH));
|
||||||
} else {
|
} else {
|
||||||
router.push(urls.library);
|
router.push(urls.library);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}, [schema, library, router]);
|
}, [schema, library, oss, router]);
|
||||||
|
|
||||||
const panelHeight = useMemo(() => calculateHeight('1.75rem + 4px'), [calculateHeight]);
|
const panelHeight = useMemo(() => calculateHeight('1.625rem + 2px'), [calculateHeight]);
|
||||||
|
|
||||||
const cardPanel = useMemo(
|
const cardPanel = useMemo(
|
||||||
() => (
|
() => (
|
||||||
|
|
Loading…
Reference in New Issue
Block a user