From c5e49bf85a61c6566b28de6eb6ee0de8d8c07ff1 Mon Sep 17 00:00:00 2001 From: IRBorisov <8611739+IRBorisov@users.noreply.github.com> Date: Thu, 23 Nov 2023 18:23:26 +0300 Subject: [PATCH] Update local library timestamps on changes --- .../frontend/src/context/LibraryContext.tsx | 20 +++++++++- .../frontend/src/context/RSFormContext.tsx | 37 +++++++++---------- 2 files changed, 36 insertions(+), 21 deletions(-) diff --git a/rsconcept/frontend/src/context/LibraryContext.tsx b/rsconcept/frontend/src/context/LibraryContext.tsx index 8a2b719b..2fd63290 100644 --- a/rsconcept/frontend/src/context/LibraryContext.tsx +++ b/rsconcept/frontend/src/context/LibraryContext.tsx @@ -22,6 +22,9 @@ interface ILibraryContext { createItem: (data: IRSFormCreateData, callback?: DataCallback) => void cloneItem: (target: number, data: IRSFormCreateData, callback: DataCallback) => void destroyItem: (target: number, callback?: () => void) => void + + localUpdateItem: (data: ILibraryItem) => void + localUpdateTimestamp: (target: number) => void } const LibraryContext = createContext(null) @@ -118,6 +121,20 @@ export const LibraryState = ({ children }: LibraryStateProps) => { reload(); }, [reload, user]); + const localUpdateItem = useCallback( + (data: ILibraryItem) => { + const libraryItem = items.find(item => item.id === data.id); + if (libraryItem) Object.assign(libraryItem, data); + }, [items]); + + const localUpdateTimestamp = useCallback( + (target: number) => { + const libraryItem = items.find(item => item.id === target); + if (libraryItem) { + libraryItem.time_update = Date(); + } + }, [items]); + const createItem = useCallback( (data: IRSFormCreateData, callback?: DataCallback) => { setError(undefined); @@ -174,7 +191,8 @@ export const LibraryState = ({ children }: LibraryStateProps) => { return ( { children } diff --git a/rsconcept/frontend/src/context/RSFormContext.tsx b/rsconcept/frontend/src/context/RSFormContext.tsx index 8842af08..988ec358 100644 --- a/rsconcept/frontend/src/context/RSFormContext.tsx +++ b/rsconcept/frontend/src/context/RSFormContext.tsx @@ -118,10 +118,7 @@ export const RSFormState = ({ schemaID, children }: RSFormStateProps) => { onError: error => setError(error), onSuccess: newData => { setSchema(Object.assign(schema, newData)); - const libraryItem = library.items.find(item => item.id === newData.id); - if (libraryItem) { - Object.assign(libraryItem, newData); - } + library.localUpdateItem(newData); if (callback) callback(newData); } }); @@ -140,10 +137,7 @@ export const RSFormState = ({ schemaID, children }: RSFormStateProps) => { onError: error => setError(error), onSuccess: newData => { setSchema(newData); - const libraryItem = library.items.find(item => item.id === newData.id); - if (libraryItem) { - Object.assign(libraryItem, newData); - } + library.localUpdateItem(newData); if (callback) callback(); } }); @@ -161,12 +155,9 @@ export const RSFormState = ({ schemaID, children }: RSFormStateProps) => { onError: error => setError(error), onSuccess: newData => { setSchema(Object.assign(schema, newData)); - const libraryItem = library.items.find(item => item.id === newData.id); - if (libraryItem) { - libraryItem.owner = user.id - } - if (!user.subscriptions.includes(schema.id)) { - user.subscriptions.push(schema.id); + library.localUpdateItem(newData); + if (!user.subscriptions.includes(newData.id)) { + user.subscriptions.push(newData.id); } if (callback) callback(newData); } @@ -231,10 +222,11 @@ export const RSFormState = ({ schemaID, children }: RSFormStateProps) => { onError: error => setError(error), onSuccess: newData => { setSchema(Object.assign(schema, newData)); + library.localUpdateTimestamp(newData.id); if (callback) callback(); } }); - }, [schemaID, setError, schema, user, setSchema]); + }, [schemaID, setError, schema, library, user, setSchema]); const download = useCallback( (callback: DataCallback) => { @@ -257,10 +249,11 @@ export const RSFormState = ({ schemaID, children }: RSFormStateProps) => { onError: error => setError(error), onSuccess: newData => { setSchema(newData.schema); + library.localUpdateTimestamp(newData.schema.id); if (callback) callback(newData.new_cst); } }); - }, [schemaID, setError, setSchema]); + }, [schemaID, setError, library, setSchema]); const cstDelete = useCallback( (data: IConstituentaList, callback?: () => void) => { @@ -272,10 +265,11 @@ export const RSFormState = ({ schemaID, children }: RSFormStateProps) => { onError: error => setError(error), onSuccess: newData => { setSchema(newData); + library.localUpdateTimestamp(newData.id); if (callback) callback(); } }); - }, [schemaID, setError, setSchema]); + }, [schemaID, setError, library, setSchema]); const cstUpdate = useCallback( (data: ICstUpdateData, callback?: DataCallback) => { @@ -286,10 +280,11 @@ export const RSFormState = ({ schemaID, children }: RSFormStateProps) => { setLoading: setProcessing, onError: error => setError(error), onSuccess: newData => reload(setProcessing, () => { + library.localUpdateTimestamp(Number(schemaID)); if (callback) callback(newData); }) }); - }, [setError, reload]); + }, [setError, schemaID, library, reload]); const cstRename = useCallback( (data: ICstRenameData, callback?: DataCallback) => { @@ -301,10 +296,11 @@ export const RSFormState = ({ schemaID, children }: RSFormStateProps) => { onError: error => setError(error), onSuccess: newData => { setSchema(newData.schema); + library.localUpdateTimestamp(newData.schema.id); if (callback) callback(newData.new_cst); } }); - }, [setError, setSchema, schemaID]); + }, [setError, setSchema, library, schemaID]); const cstMoveTo = useCallback( (data: ICstMovetoData, callback?: () => void) => { @@ -316,10 +312,11 @@ export const RSFormState = ({ schemaID, children }: RSFormStateProps) => { onError: error => setError(error), onSuccess: newData => { setSchema(newData); + library.localUpdateTimestamp(Number(schemaID)); if (callback) callback(); } }); - }, [schemaID, setError, setSchema]); + }, [schemaID, setError, library, setSchema]); return (