Update local library timestamps on changes

This commit is contained in:
IRBorisov 2023-11-23 18:23:26 +03:00
parent 2d63c78866
commit c5e49bf85a
2 changed files with 36 additions and 21 deletions

View File

@ -22,6 +22,9 @@ interface ILibraryContext {
createItem: (data: IRSFormCreateData, callback?: DataCallback<ILibraryItem>) => void
cloneItem: (target: number, data: IRSFormCreateData, callback: DataCallback<IRSFormData>) => void
destroyItem: (target: number, callback?: () => void) => void
localUpdateItem: (data: ILibraryItem) => void
localUpdateTimestamp: (target: number) => void
}
const LibraryContext = createContext<ILibraryContext | null>(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<ILibraryItem>) => {
setError(undefined);
@ -174,7 +191,8 @@ export const LibraryState = ({ children }: LibraryStateProps) => {
return (
<LibraryContext.Provider value={{
items, templates, loading, processing, error, setError,
applyFilter, createItem, cloneItem, destroyItem, retrieveTemplate
applyFilter, createItem, cloneItem, destroyItem, retrieveTemplate,
localUpdateItem, localUpdateTimestamp
}}>
{ children }
</LibraryContext.Provider>

View File

@ -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<Blob>) => {
@ -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<IConstituentaMeta>) => {
@ -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<IConstituentaMeta>) => {
@ -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 (
<RSFormContext.Provider value={{