R: Move OSS to global library context
This commit is contained in:
parent
342a1837ed
commit
4899860a05
|
@ -13,11 +13,13 @@ 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';
|
||||||
|
@ -34,6 +36,12 @@ 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;
|
||||||
|
@ -75,6 +83,14 @@ 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
|
||||||
|
} = useOssDetails({ target: ossID });
|
||||||
|
|
||||||
const folders = useMemo(() => {
|
const folders = useMemo(() => {
|
||||||
const result = new FolderTree();
|
const result = new FolderTree();
|
||||||
result.addPath(LocationHead.USER, 0);
|
result.addPath(LocationHead.USER, 0);
|
||||||
|
@ -300,6 +316,12 @@ export const LibraryState = ({ children }: LibraryStateProps) => {
|
||||||
processingError,
|
processingError,
|
||||||
setProcessingError,
|
setProcessingError,
|
||||||
|
|
||||||
|
globalOSS,
|
||||||
|
setGlobalID,
|
||||||
|
setGlobalOSS,
|
||||||
|
ossLoading,
|
||||||
|
ossError,
|
||||||
|
|
||||||
reloadItems,
|
reloadItems,
|
||||||
|
|
||||||
applyFilter,
|
applyFilter,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { createContext, useCallback, useContext, useMemo, useState } from 'react';
|
import { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';
|
||||||
|
|
||||||
import { DataCallback } from '@/backend/apiTransport';
|
import { DataCallback } from '@/backend/apiTransport';
|
||||||
import {
|
import {
|
||||||
|
@ -14,10 +14,16 @@ import {
|
||||||
} from '@/backend/library';
|
} from '@/backend/library';
|
||||||
import { patchDeleteOperation, patchUpdatePositions, postCreateOperation } from '@/backend/oss';
|
import { patchDeleteOperation, patchUpdatePositions, postCreateOperation } from '@/backend/oss';
|
||||||
import { type ErrorData } from '@/components/info/InfoError';
|
import { type ErrorData } from '@/components/info/InfoError';
|
||||||
import useOssDetails from '@/hooks/useOssDetails';
|
|
||||||
import { AccessPolicy, ILibraryItem } from '@/models/library';
|
import { AccessPolicy, ILibraryItem } from '@/models/library';
|
||||||
import { ILibraryUpdateData } from '@/models/library';
|
import { ILibraryUpdateData } from '@/models/library';
|
||||||
import { IOperation, IOperationCreateData, IOperationSchema, IPositionsData, ITargetOperation } from '@/models/oss';
|
import {
|
||||||
|
IOperation,
|
||||||
|
IOperationCreateData,
|
||||||
|
IOperationSchema,
|
||||||
|
IOperationSchemaData,
|
||||||
|
IPositionsData,
|
||||||
|
ITargetOperation
|
||||||
|
} from '@/models/oss';
|
||||||
import { UserID } from '@/models/user';
|
import { UserID } from '@/models/user';
|
||||||
import { contextOutsideScope } from '@/utils/labels';
|
import { contextOutsideScope } from '@/utils/labels';
|
||||||
|
|
||||||
|
@ -66,13 +72,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 { user } = useAuth();
|
const { user } = useAuth();
|
||||||
const {
|
|
||||||
schema, // prettier: split lines
|
|
||||||
error: errorLoading,
|
|
||||||
setSchema,
|
|
||||||
loading
|
|
||||||
} = useOssDetails({ target: itemID });
|
|
||||||
const [processing, setProcessing] = useState(false);
|
const [processing, setProcessing] = useState(false);
|
||||||
const [processingError, setProcessingError] = useState<ErrorData>(undefined);
|
const [processingError, setProcessingError] = useState<ErrorData>(undefined);
|
||||||
|
|
||||||
|
@ -90,6 +91,12 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [user, schema, toggleTracking]);
|
}, [user, schema, toggleTracking]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (schema?.id !== Number(itemID)) {
|
||||||
|
library.setGlobalID(itemID);
|
||||||
|
}
|
||||||
|
}, [itemID, schema, library]);
|
||||||
|
|
||||||
const update = useCallback(
|
const update = useCallback(
|
||||||
(data: ILibraryUpdateData, callback?: DataCallback<ILibraryItem>) => {
|
(data: ILibraryUpdateData, callback?: DataCallback<ILibraryItem>) => {
|
||||||
if (!schema) {
|
if (!schema) {
|
||||||
|
@ -102,13 +109,14 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
setLoading: setProcessing,
|
setLoading: setProcessing,
|
||||||
onError: setProcessingError,
|
onError: setProcessingError,
|
||||||
onSuccess: newData => {
|
onSuccess: newData => {
|
||||||
setSchema(Object.assign(schema, newData));
|
const fullData: IOperationSchemaData = Object.assign(schema, newData);
|
||||||
|
library.setGlobalOSS(fullData);
|
||||||
library.localUpdateItem(newData);
|
library.localUpdateItem(newData);
|
||||||
if (callback) callback(newData);
|
if (callback) callback(newData);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, setSchema, schema, library]
|
[itemID, schema, library]
|
||||||
);
|
);
|
||||||
|
|
||||||
const subscribe = useCallback(
|
const subscribe = useCallback(
|
||||||
|
@ -133,7 +141,7 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, schema, user]
|
[itemID, user, schema]
|
||||||
);
|
);
|
||||||
|
|
||||||
const unsubscribe = useCallback(
|
const unsubscribe = useCallback(
|
||||||
|
@ -278,13 +286,13 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
setLoading: setProcessing,
|
setLoading: setProcessing,
|
||||||
onError: setProcessingError,
|
onError: setProcessingError,
|
||||||
onSuccess: newData => {
|
onSuccess: newData => {
|
||||||
setSchema(newData.oss);
|
library.setGlobalOSS(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, setSchema]
|
[itemID, library]
|
||||||
);
|
);
|
||||||
|
|
||||||
const deleteOperation = useCallback(
|
const deleteOperation = useCallback(
|
||||||
|
@ -296,13 +304,13 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
setLoading: setProcessing,
|
setLoading: setProcessing,
|
||||||
onError: setProcessingError,
|
onError: setProcessingError,
|
||||||
onSuccess: newData => {
|
onSuccess: newData => {
|
||||||
setSchema(newData);
|
library.setGlobalOSS(newData);
|
||||||
library.localUpdateTimestamp(newData.id);
|
library.localUpdateTimestamp(newData.id);
|
||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[itemID, library, setSchema]
|
[itemID, library]
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -310,8 +318,8 @@ export const OssState = ({ itemID, children }: OssStateProps) => {
|
||||||
value={{
|
value={{
|
||||||
schema,
|
schema,
|
||||||
itemID,
|
itemID,
|
||||||
loading,
|
loading: library.ossLoading,
|
||||||
errorLoading,
|
errorLoading: library.ossError,
|
||||||
processing,
|
processing,
|
||||||
processingError,
|
processingError,
|
||||||
isOwned,
|
isOwned,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user