mirror of
https://github.com/IRBorisov/ConceptPortal.git
synced 2025-06-26 04:50:36 +03:00
B: Add timeout for cache invalidation after schema delete
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
515f398fda
commit
b9c96f8c76
|
@ -53,8 +53,11 @@ export function axiosGet<ResponseData>({ endpoint, options }: IAxiosGetRequest)
|
||||||
.get<ResponseData>(endpoint, options)
|
.get<ResponseData>(endpoint, options)
|
||||||
.then(response => response.data)
|
.then(response => response.data)
|
||||||
.catch((error: Error | AxiosError) => {
|
.catch((error: Error | AxiosError) => {
|
||||||
toast.error(extractErrorMessage(error));
|
if (error.name !== 'CanceledError') {
|
||||||
console.error(error);
|
// Note: Ignore cancellation errors
|
||||||
|
toast.error(extractErrorMessage(error));
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
throw error;
|
throw error;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,8 @@ import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||||
|
|
||||||
import { ossApi } from '@/backend/oss/api';
|
import { ossApi } from '@/backend/oss/api';
|
||||||
import { rsformsApi } from '@/backend/rsform/api';
|
import { rsformsApi } from '@/backend/rsform/api';
|
||||||
import { ILibraryItem, LibraryItemID } from '@/models/library';
|
import { LibraryItemID } from '@/models/library';
|
||||||
|
import { PARAMETER } from '@/utils/constants';
|
||||||
|
|
||||||
import { libraryApi } from './api';
|
import { libraryApi } from './api';
|
||||||
|
|
||||||
|
@ -12,13 +13,15 @@ export const useDeleteItem = () => {
|
||||||
mutationKey: [libraryApi.baseKey, 'delete-item'],
|
mutationKey: [libraryApi.baseKey, 'delete-item'],
|
||||||
mutationFn: libraryApi.deleteItem,
|
mutationFn: libraryApi.deleteItem,
|
||||||
onSuccess: (_, variables) => {
|
onSuccess: (_, variables) => {
|
||||||
client.setQueryData(libraryApi.libraryListKey, (prev: ILibraryItem[] | undefined) =>
|
client.invalidateQueries({ queryKey: libraryApi.libraryListKey }).catch(console.error);
|
||||||
prev?.filter(item => item.id !== variables)
|
setTimeout(
|
||||||
|
() =>
|
||||||
|
void Promise.allSettled([
|
||||||
|
client.invalidateQueries({ queryKey: [ossApi.baseKey] }),
|
||||||
|
client.invalidateQueries({ queryKey: rsformsApi.getRSFormQueryOptions({ itemID: variables }).queryKey })
|
||||||
|
]).catch(console.error),
|
||||||
|
PARAMETER.navigationDuration
|
||||||
);
|
);
|
||||||
return Promise.allSettled([
|
|
||||||
client.invalidateQueries({ queryKey: [ossApi.baseKey] }),
|
|
||||||
client.invalidateQueries({ queryKey: rsformsApi.getRSFormQueryOptions({ itemID: variables }).queryKey })
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -19,6 +19,7 @@ import { IOperationPosition, IOperationSchema, OperationID, OperationType } from
|
||||||
import { UserRole } from '@/models/user';
|
import { UserRole } from '@/models/user';
|
||||||
import { RSTabID } from '@/pages/RSFormPage/RSEditContext';
|
import { RSTabID } from '@/pages/RSFormPage/RSEditContext';
|
||||||
import { useDialogsStore } from '@/stores/dialogs';
|
import { useDialogsStore } from '@/stores/dialogs';
|
||||||
|
import { useLibrarySearchStore } from '@/stores/librarySearch';
|
||||||
import { usePreferencesStore } from '@/stores/preferences';
|
import { usePreferencesStore } from '@/stores/preferences';
|
||||||
import { useRoleStore } from '@/stores/role';
|
import { useRoleStore } from '@/stores/role';
|
||||||
import { PARAMETER } from '@/utils/constants';
|
import { PARAMETER } from '@/utils/constants';
|
||||||
|
@ -81,6 +82,8 @@ export const OssEditState = ({ itemID, children }: React.PropsWithChildren<OssEd
|
||||||
|
|
||||||
const role = useRoleStore(state => state.role);
|
const role = useRoleStore(state => state.role);
|
||||||
const adjustRole = useRoleStore(state => state.adjustRole);
|
const adjustRole = useRoleStore(state => state.adjustRole);
|
||||||
|
const setSearchLocation = useLibrarySearchStore(state => state.setLocation);
|
||||||
|
const searchLocation = useLibrarySearchStore(state => state.location);
|
||||||
|
|
||||||
const { user } = useAuthSuspense();
|
const { user } = useAuthSuspense();
|
||||||
const { schema } = useOssSuspense({ itemID: itemID });
|
const { schema } = useOssSuspense({ itemID: itemID });
|
||||||
|
@ -139,7 +142,12 @@ export const OssEditState = ({ itemID, children }: React.PropsWithChildren<OssEd
|
||||||
if (!window.confirm(prompts.deleteOSS)) {
|
if (!window.confirm(prompts.deleteOSS)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
deleteItem(schema.id, () => router.push(urls.library));
|
deleteItem(schema.id, () => {
|
||||||
|
if (searchLocation === schema.location) {
|
||||||
|
setSearchLocation('');
|
||||||
|
}
|
||||||
|
router.push(urls.library);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function promptCreateOperation({ defaultX, defaultY, inputs, positions, callback }: ICreateOperationPrompt) {
|
function promptCreateOperation({ defaultX, defaultY, inputs, positions, callback }: ICreateOperationPrompt) {
|
||||||
|
|
|
@ -16,6 +16,7 @@ import { ConstituentaID, CstType, IConstituenta, IRSForm } from '@/models/rsform
|
||||||
import { generateAlias } from '@/models/rsformAPI';
|
import { generateAlias } from '@/models/rsformAPI';
|
||||||
import { UserRole } from '@/models/user';
|
import { UserRole } from '@/models/user';
|
||||||
import { useDialogsStore } from '@/stores/dialogs';
|
import { useDialogsStore } from '@/stores/dialogs';
|
||||||
|
import { useLibrarySearchStore } from '@/stores/librarySearch';
|
||||||
import { useModificationStore } from '@/stores/modification';
|
import { useModificationStore } from '@/stores/modification';
|
||||||
import { usePreferencesStore } from '@/stores/preferences';
|
import { usePreferencesStore } from '@/stores/preferences';
|
||||||
import { useRoleStore } from '@/stores/role';
|
import { useRoleStore } from '@/stores/role';
|
||||||
|
@ -91,6 +92,8 @@ export const RSEditState = ({
|
||||||
const adminMode = usePreferencesStore(state => state.adminMode);
|
const adminMode = usePreferencesStore(state => state.adminMode);
|
||||||
const role = useRoleStore(state => state.role);
|
const role = useRoleStore(state => state.role);
|
||||||
const adjustRole = useRoleStore(state => state.adjustRole);
|
const adjustRole = useRoleStore(state => state.adjustRole);
|
||||||
|
const setSearchLocation = useLibrarySearchStore(state => state.setLocation);
|
||||||
|
const searchLocation = useLibrarySearchStore(state => state.location);
|
||||||
|
|
||||||
const { user } = useAuthSuspense();
|
const { user } = useAuthSuspense();
|
||||||
const { schema } = useRSFormSuspense({ itemID: itemID, version: activeVersion });
|
const { schema } = useRSFormSuspense({ itemID: itemID, version: activeVersion });
|
||||||
|
@ -175,6 +178,9 @@ export const RSEditState = ({
|
||||||
if (ossID) {
|
if (ossID) {
|
||||||
router.push(urls.oss(ossID, OssTabID.GRAPH));
|
router.push(urls.oss(ossID, OssTabID.GRAPH));
|
||||||
} else {
|
} else {
|
||||||
|
if (searchLocation === schema.location) {
|
||||||
|
setSearchLocation('');
|
||||||
|
}
|
||||||
router.push(urls.library);
|
router.push(urls.library);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -11,6 +11,7 @@ export const PARAMETER = {
|
||||||
refreshTimeout: 100, // milliseconds delay for post-refresh actions
|
refreshTimeout: 100, // milliseconds delay for post-refresh actions
|
||||||
minimalTimeout: 10, // milliseconds delay for fast updates
|
minimalTimeout: 10, // milliseconds delay for fast updates
|
||||||
zoomDuration: 500, // milliseconds animation duration
|
zoomDuration: 500, // milliseconds animation duration
|
||||||
|
navigationDuration: 300, // milliseconds navigation duration
|
||||||
|
|
||||||
ossImageWidth: 1280, // pixels - size of OSS image
|
ossImageWidth: 1280, // pixels - size of OSS image
|
||||||
ossImageHeight: 960, // pixels - size of OSS image
|
ossImageHeight: 960, // pixels - size of OSS image
|
||||||
|
|
Loading…
Reference in New Issue
Block a user