diff --git a/rsconcept/frontend/src/app/ApplicationLayout.tsx b/rsconcept/frontend/src/app/ApplicationLayout.tsx
index 1576f056..58eeadaa 100644
--- a/rsconcept/frontend/src/app/ApplicationLayout.tsx
+++ b/rsconcept/frontend/src/app/ApplicationLayout.tsx
@@ -11,6 +11,7 @@ import { GlobalDialogs } from './GlobalDialogs';
import { GlobalLoader } from './GlobalLoader';
import { ToasterThemed } from './GlobalToaster';
import { GlobalTooltips } from './GlobalTooltips';
+import { MutationErrors } from './MutationErrors';
import { Navigation } from './Navigation';
function ApplicationLayout() {
@@ -48,6 +49,7 @@ function ApplicationLayout() {
>
Ошибки отсутствуют
; } else if (typeof error === 'string') { return{error}
; } else if (error instanceof ZodError) { return ( -Ошибка валидации данных
Error: {error.name}
@@ -96,7 +96,7 @@ export function InfoError({ error }: InfoErrorProps) { 'select-text' )} > -Пожалуйста сделайте скриншот и отправьте вместе с описанием ситуации на почту portal@acconcept.ru
Для продолжения работы перезагрузите страницу
diff --git a/rsconcept/frontend/src/features/auth/backend/api.ts b/rsconcept/frontend/src/features/auth/backend/api.ts index 09600fa2..0d9a15d7 100644 --- a/rsconcept/frontend/src/features/auth/backend/api.ts +++ b/rsconcept/frontend/src/features/auth/backend/api.ts @@ -1,7 +1,7 @@ import { queryOptions } from '@tanstack/react-query'; import { axiosGet, axiosPatch, axiosPost } from '@/backend/apiTransport'; -import { DELAYS } from '@/backend/configuration'; +import { DELAYS, KEYS } from '@/backend/configuration'; import { infoMsg } from '@/utils/labels'; import { @@ -17,7 +17,7 @@ import { * Authentication API. */ export const authApi = { - baseKey: 'auth', + baseKey: KEYS.auth, getAuthQueryOptions: () => { return queryOptions({ diff --git a/rsconcept/frontend/src/features/auth/backend/useChangePassword.tsx b/rsconcept/frontend/src/features/auth/backend/useChangePassword.tsx index 0262d421..79ba9e9c 100644 --- a/rsconcept/frontend/src/features/auth/backend/useChangePassword.tsx +++ b/rsconcept/frontend/src/features/auth/backend/useChangePassword.tsx @@ -1,12 +1,14 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { KEYS } from '@/backend/configuration'; + import { authApi } from './api'; import { IChangePasswordDTO } from './types'; export const useChangePassword = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: ['change-password'], + mutationKey: [KEYS.auth, 'change-password'], mutationFn: authApi.changePassword, onSettled: () => client.invalidateQueries({ queryKey: [authApi.baseKey] }) }); diff --git a/rsconcept/frontend/src/features/auth/backend/useLogin.tsx b/rsconcept/frontend/src/features/auth/backend/useLogin.tsx index 2c57716c..1cdca0e5 100644 --- a/rsconcept/frontend/src/features/auth/backend/useLogin.tsx +++ b/rsconcept/frontend/src/features/auth/backend/useLogin.tsx @@ -1,12 +1,14 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { KEYS } from '@/backend/configuration'; + import { authApi } from './api'; import { IUserLoginDTO } from './types'; export const useLogin = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: ['login'], + mutationKey: [KEYS.auth, 'login'], mutationFn: authApi.login, onSettled: () => client.invalidateQueries({ queryKey: [authApi.baseKey] }), onSuccess: () => client.resetQueries() diff --git a/rsconcept/frontend/src/features/auth/backend/useLogout.tsx b/rsconcept/frontend/src/features/auth/backend/useLogout.tsx index 6326cc46..53a1ce45 100644 --- a/rsconcept/frontend/src/features/auth/backend/useLogout.tsx +++ b/rsconcept/frontend/src/features/auth/backend/useLogout.tsx @@ -1,11 +1,13 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { KEYS } from '@/backend/configuration'; + import { authApi } from './api'; export const useLogout = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: ['logout'], + mutationKey: [KEYS.auth, 'logout'], mutationFn: authApi.logout, onSuccess: () => client.resetQueries() }); diff --git a/rsconcept/frontend/src/features/auth/backend/useRequestPasswordReset.tsx b/rsconcept/frontend/src/features/auth/backend/useRequestPasswordReset.tsx index d945b88d..ae82976c 100644 --- a/rsconcept/frontend/src/features/auth/backend/useRequestPasswordReset.tsx +++ b/rsconcept/frontend/src/features/auth/backend/useRequestPasswordReset.tsx @@ -1,11 +1,13 @@ import { useMutation } from '@tanstack/react-query'; +import { KEYS } from '@/backend/configuration'; + import { authApi } from './api'; import { IRequestPasswordDTO } from './types'; export const useRequestPasswordReset = () => { const mutation = useMutation({ - mutationKey: ['request-password-reset'], + mutationKey: [KEYS.auth, 'request-password-reset'], mutationFn: authApi.requestPasswordReset }); return { diff --git a/rsconcept/frontend/src/features/auth/backend/useResetPassword.tsx b/rsconcept/frontend/src/features/auth/backend/useResetPassword.tsx index 4e0779cb..6485e4af 100644 --- a/rsconcept/frontend/src/features/auth/backend/useResetPassword.tsx +++ b/rsconcept/frontend/src/features/auth/backend/useResetPassword.tsx @@ -1,15 +1,17 @@ import { useMutation } from '@tanstack/react-query'; +import { KEYS } from '@/backend/configuration'; + import { authApi } from './api'; import { IPasswordTokenDTO, IResetPasswordDTO } from './types'; export const useResetPassword = () => { const validateMutation = useMutation({ - mutationKey: ['validate-token'], + mutationKey: [KEYS.auth, 'validate-token'], mutationFn: authApi.validatePasswordToken }); const resetMutation = useMutation({ - mutationKey: ['reset-password'], + mutationKey: [KEYS.auth, 'reset-password'], mutationFn: authApi.resetPassword }); return { diff --git a/rsconcept/frontend/src/features/library/backend/useCloneItem.tsx b/rsconcept/frontend/src/features/library/backend/useCloneItem.tsx index 40368589..c259c96a 100644 --- a/rsconcept/frontend/src/features/library/backend/useCloneItem.tsx +++ b/rsconcept/frontend/src/features/library/backend/useCloneItem.tsx @@ -1,12 +1,14 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { KEYS } from '@/backend/configuration'; + import { libraryApi } from './api'; import { ICloneLibraryItemDTO } from './types'; export const useCloneItem = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: [libraryApi.baseKey, 'clone-item'], + mutationKey: [KEYS.global_mutation, libraryApi.baseKey, 'clone-item'], mutationFn: libraryApi.cloneItem, onSuccess: () => client.invalidateQueries({ queryKey: [libraryApi.baseKey] }) }); diff --git a/rsconcept/frontend/src/features/library/backend/useCreateItem.tsx b/rsconcept/frontend/src/features/library/backend/useCreateItem.tsx index 2e048870..44df4a75 100644 --- a/rsconcept/frontend/src/features/library/backend/useCreateItem.tsx +++ b/rsconcept/frontend/src/features/library/backend/useCreateItem.tsx @@ -1,12 +1,14 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { KEYS } from '@/backend/configuration'; + import { libraryApi } from './api'; import { ICreateLibraryItemDTO } from './types'; export const useCreateItem = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: [libraryApi.baseKey, 'create-item'], + mutationKey: [KEYS.global_mutation, libraryApi.baseKey, 'create-item'], mutationFn: libraryApi.createItem, onSuccess: () => client.invalidateQueries({ queryKey: [libraryApi.baseKey] }) }); diff --git a/rsconcept/frontend/src/features/library/backend/useDeleteItem.tsx b/rsconcept/frontend/src/features/library/backend/useDeleteItem.tsx index 8437349c..6288836b 100644 --- a/rsconcept/frontend/src/features/library/backend/useDeleteItem.tsx +++ b/rsconcept/frontend/src/features/library/backend/useDeleteItem.tsx @@ -8,7 +8,7 @@ import { libraryApi } from './api'; export const useDeleteItem = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: [libraryApi.baseKey, 'delete-item'], + mutationKey: [KEYS.global_mutation, libraryApi.baseKey, 'delete-item'], mutationFn: libraryApi.deleteItem, onSuccess: (_, variables) => { client.invalidateQueries({ queryKey: libraryApi.libraryListKey }).catch(console.error); diff --git a/rsconcept/frontend/src/features/library/backend/useMutatingLibrary.tsx b/rsconcept/frontend/src/features/library/backend/useMutatingLibrary.tsx index 44989b66..fa7a211e 100644 --- a/rsconcept/frontend/src/features/library/backend/useMutatingLibrary.tsx +++ b/rsconcept/frontend/src/features/library/backend/useMutatingLibrary.tsx @@ -3,8 +3,8 @@ import { useIsMutating } from '@tanstack/react-query'; import { KEYS } from '@/backend/configuration'; export const useMutatingLibrary = () => { - const countMutations = useIsMutating({ mutationKey: [KEYS.library] }); - const countOss = useIsMutating({ mutationKey: [KEYS.oss] }); - const countRSForm = useIsMutating({ mutationKey: [KEYS.rsform] }); + const countMutations = useIsMutating({ mutationKey: [KEYS.global_mutation, KEYS.library] }); + const countOss = useIsMutating({ mutationKey: [KEYS.global_mutation, KEYS.oss] }); + const countRSForm = useIsMutating({ mutationKey: [KEYS.global_mutation, KEYS.rsform] }); return countMutations + countOss + countRSForm !== 0; }; diff --git a/rsconcept/frontend/src/features/library/backend/useSetAccessPolicy.tsx b/rsconcept/frontend/src/features/library/backend/useSetAccessPolicy.tsx index 89e98107..1201fed2 100644 --- a/rsconcept/frontend/src/features/library/backend/useSetAccessPolicy.tsx +++ b/rsconcept/frontend/src/features/library/backend/useSetAccessPolicy.tsx @@ -11,7 +11,7 @@ import { AccessPolicy, ILibraryItem } from './types'; export const useSetAccessPolicy = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: [libraryApi.baseKey, 'set-location'], + mutationKey: [KEYS.global_mutation, libraryApi.baseKey, 'set-location'], mutationFn: libraryApi.setAccessPolicy, onSuccess: (_, variables) => { const ossKey = KEYS.composite.ossItem({ itemID: variables.itemID }); diff --git a/rsconcept/frontend/src/features/library/backend/useSetEditors.tsx b/rsconcept/frontend/src/features/library/backend/useSetEditors.tsx index cf2434d0..3fa03ca7 100644 --- a/rsconcept/frontend/src/features/library/backend/useSetEditors.tsx +++ b/rsconcept/frontend/src/features/library/backend/useSetEditors.tsx @@ -10,7 +10,7 @@ import { libraryApi } from './api'; export const useSetEditors = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: [libraryApi.baseKey, 'set-location'], + mutationKey: [KEYS.global_mutation, libraryApi.baseKey, 'set-location'], mutationFn: libraryApi.setEditors, onSuccess: (_, variables) => { const ossKey = KEYS.composite.ossItem({ itemID: variables.itemID }); diff --git a/rsconcept/frontend/src/features/library/backend/useSetLocation.tsx b/rsconcept/frontend/src/features/library/backend/useSetLocation.tsx index 10196b5a..afcbc8ba 100644 --- a/rsconcept/frontend/src/features/library/backend/useSetLocation.tsx +++ b/rsconcept/frontend/src/features/library/backend/useSetLocation.tsx @@ -11,7 +11,7 @@ import { ILibraryItem } from './types'; export const useSetLocation = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: [libraryApi.baseKey, 'set-location'], + mutationKey: [KEYS.global_mutation, libraryApi.baseKey, 'set-location'], mutationFn: libraryApi.setLocation, onSuccess: (_, variables) => { const ossKey = KEYS.composite.ossItem({ itemID: variables.itemID }); diff --git a/rsconcept/frontend/src/features/library/backend/useSetOwner.tsx b/rsconcept/frontend/src/features/library/backend/useSetOwner.tsx index 8e0f5e34..a74bf663 100644 --- a/rsconcept/frontend/src/features/library/backend/useSetOwner.tsx +++ b/rsconcept/frontend/src/features/library/backend/useSetOwner.tsx @@ -11,7 +11,7 @@ import { ILibraryItem } from './types'; export const useSetOwner = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: [libraryApi.baseKey, 'set-owner'], + mutationKey: [KEYS.global_mutation, libraryApi.baseKey, 'set-owner'], mutationFn: libraryApi.setOwner, onSuccess: (_, variables) => { const ossKey = KEYS.composite.ossItem({ itemID: variables.itemID }); diff --git a/rsconcept/frontend/src/features/library/backend/useUpdateItem.tsx b/rsconcept/frontend/src/features/library/backend/useUpdateItem.tsx index e9081063..5bee0ed3 100644 --- a/rsconcept/frontend/src/features/library/backend/useUpdateItem.tsx +++ b/rsconcept/frontend/src/features/library/backend/useUpdateItem.tsx @@ -11,7 +11,7 @@ import { ILibraryItem, IUpdateLibraryItemDTO, LibraryItemType } from './types'; export const useUpdateItem = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: [libraryApi.baseKey, 'update-item'], + mutationKey: [KEYS.global_mutation, libraryApi.baseKey, 'update-item'], mutationFn: libraryApi.updateItem, onSuccess: (data: ILibraryItem) => { const itemKey = diff --git a/rsconcept/frontend/src/features/library/backend/useVersionCreate.tsx b/rsconcept/frontend/src/features/library/backend/useVersionCreate.tsx index d887dd83..92415380 100644 --- a/rsconcept/frontend/src/features/library/backend/useVersionCreate.tsx +++ b/rsconcept/frontend/src/features/library/backend/useVersionCreate.tsx @@ -10,7 +10,7 @@ export const useVersionCreate = () => { const client = useQueryClient(); const { updateTimestamp } = useUpdateTimestamp(); const mutation = useMutation({ - mutationKey: [libraryApi.baseKey, 'create-version'], + mutationKey: [KEYS.global_mutation, libraryApi.baseKey, 'create-version'], mutationFn: libraryApi.versionCreate, onSuccess: data => { client.setQueryData(KEYS.composite.rsItem({ itemID: data.schema.id }), data.schema); diff --git a/rsconcept/frontend/src/features/library/backend/useVersionDelete.tsx b/rsconcept/frontend/src/features/library/backend/useVersionDelete.tsx index 3fbdbb16..7e8dcb7a 100644 --- a/rsconcept/frontend/src/features/library/backend/useVersionDelete.tsx +++ b/rsconcept/frontend/src/features/library/backend/useVersionDelete.tsx @@ -9,7 +9,7 @@ import { libraryApi } from './api'; export const useVersionDelete = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: [libraryApi.baseKey, 'delete-version'], + mutationKey: [KEYS.global_mutation, libraryApi.baseKey, 'delete-version'], mutationFn: libraryApi.versionDelete, onSuccess: (_, variables) => { client.setQueryData(KEYS.composite.rsItem({ itemID: variables.itemID }), (prev: IRSFormDTO | undefined) => diff --git a/rsconcept/frontend/src/features/library/backend/useVersionRestore.tsx b/rsconcept/frontend/src/features/library/backend/useVersionRestore.tsx index 2a0888e0..b07824ad 100644 --- a/rsconcept/frontend/src/features/library/backend/useVersionRestore.tsx +++ b/rsconcept/frontend/src/features/library/backend/useVersionRestore.tsx @@ -7,7 +7,7 @@ import { libraryApi } from './api'; export const useVersionRestore = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: [libraryApi.baseKey, 'restore-version'], + mutationKey: [KEYS.global_mutation, libraryApi.baseKey, 'restore-version'], mutationFn: libraryApi.versionRestore, onSuccess: data => { client.setQueryData(KEYS.composite.rsItem({ itemID: data.id }), data); diff --git a/rsconcept/frontend/src/features/library/backend/useVersionUpdate.tsx b/rsconcept/frontend/src/features/library/backend/useVersionUpdate.tsx index ae8a7301..5cb4d276 100644 --- a/rsconcept/frontend/src/features/library/backend/useVersionUpdate.tsx +++ b/rsconcept/frontend/src/features/library/backend/useVersionUpdate.tsx @@ -10,7 +10,7 @@ import { IVersionUpdateDTO } from './types'; export const useVersionUpdate = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: [libraryApi.baseKey, 'update-version'], + mutationKey: [KEYS.global_mutation, libraryApi.baseKey, 'update-version'], mutationFn: libraryApi.versionUpdate, onSuccess: (data, variables) => { client.setQueryData(KEYS.composite.rsItem({ itemID: variables.itemID }), (prev: IRSFormDTO | undefined) => diff --git a/rsconcept/frontend/src/features/oss/backend/useInputCreate.tsx b/rsconcept/frontend/src/features/oss/backend/useInputCreate.tsx index 0cb73664..e20af714 100644 --- a/rsconcept/frontend/src/features/oss/backend/useInputCreate.tsx +++ b/rsconcept/frontend/src/features/oss/backend/useInputCreate.tsx @@ -8,7 +8,7 @@ import { ITargetOperation } from './types'; export const useInputCreate = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: [ossApi.baseKey, 'input-create'], + mutationKey: [KEYS.global_mutation, ossApi.baseKey, 'input-create'], mutationFn: ossApi.inputCreate, onSuccess: data => { client.setQueryData(ossApi.getOssQueryOptions({ itemID: data.oss.id }).queryKey, data.oss); diff --git a/rsconcept/frontend/src/features/oss/backend/useInputUpdate.tsx b/rsconcept/frontend/src/features/oss/backend/useInputUpdate.tsx index 3250f176..27262b6d 100644 --- a/rsconcept/frontend/src/features/oss/backend/useInputUpdate.tsx +++ b/rsconcept/frontend/src/features/oss/backend/useInputUpdate.tsx @@ -8,7 +8,7 @@ import { IInputUpdateDTO } from './types'; export const useInputUpdate = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: [ossApi.baseKey, 'input-update'], + mutationKey: [KEYS.global_mutation, ossApi.baseKey, 'input-update'], mutationFn: ossApi.inputUpdate, onSuccess: data => { client.setQueryData(ossApi.getOssQueryOptions({ itemID: data.id }).queryKey, data); diff --git a/rsconcept/frontend/src/features/oss/backend/useMutatingOss.tsx b/rsconcept/frontend/src/features/oss/backend/useMutatingOss.tsx index f34a5686..61595ecc 100644 --- a/rsconcept/frontend/src/features/oss/backend/useMutatingOss.tsx +++ b/rsconcept/frontend/src/features/oss/backend/useMutatingOss.tsx @@ -3,7 +3,7 @@ import { useIsMutating } from '@tanstack/react-query'; import { KEYS } from '@/backend/configuration'; export const useMutatingOss = () => { - const countLibrary = useIsMutating({ mutationKey: [KEYS.library] }); - const countOss = useIsMutating({ mutationKey: [KEYS.oss] }); + const countLibrary = useIsMutating({ mutationKey: [KEYS.global_mutation, KEYS.library] }); + const countOss = useIsMutating({ mutationKey: [KEYS.global_mutation, KEYS.oss] }); return countLibrary + countOss !== 0; }; diff --git a/rsconcept/frontend/src/features/oss/backend/useOperationCreate.tsx b/rsconcept/frontend/src/features/oss/backend/useOperationCreate.tsx index 6d4f4ce7..9f77ab7d 100644 --- a/rsconcept/frontend/src/features/oss/backend/useOperationCreate.tsx +++ b/rsconcept/frontend/src/features/oss/backend/useOperationCreate.tsx @@ -2,6 +2,8 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { useUpdateTimestamp } from '@/features/library'; +import { KEYS } from '@/backend/configuration'; + import { ossApi } from './api'; import { IOperationCreateDTO } from './types'; @@ -9,7 +11,7 @@ export const useOperationCreate = () => { const client = useQueryClient(); const { updateTimestamp } = useUpdateTimestamp(); const mutation = useMutation({ - mutationKey: [ossApi.baseKey, 'operation-create'], + mutationKey: [KEYS.global_mutation, ossApi.baseKey, 'operation-create'], mutationFn: ossApi.operationCreate, onSuccess: response => { client.setQueryData(ossApi.getOssQueryOptions({ itemID: response.oss.id }).queryKey, response.oss); diff --git a/rsconcept/frontend/src/features/oss/backend/useOperationDelete.tsx b/rsconcept/frontend/src/features/oss/backend/useOperationDelete.tsx index 2b386593..57f5a859 100644 --- a/rsconcept/frontend/src/features/oss/backend/useOperationDelete.tsx +++ b/rsconcept/frontend/src/features/oss/backend/useOperationDelete.tsx @@ -8,7 +8,7 @@ import { IOperationDeleteDTO } from './types'; export const useOperationDelete = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: [ossApi.baseKey, 'operation-delete'], + mutationKey: [KEYS.global_mutation, ossApi.baseKey, 'operation-delete'], mutationFn: ossApi.operationDelete, onSuccess: data => { client.setQueryData(ossApi.getOssQueryOptions({ itemID: data.id }).queryKey, data); diff --git a/rsconcept/frontend/src/features/oss/backend/useOperationExecute.tsx b/rsconcept/frontend/src/features/oss/backend/useOperationExecute.tsx index eed40874..6f5d21b2 100644 --- a/rsconcept/frontend/src/features/oss/backend/useOperationExecute.tsx +++ b/rsconcept/frontend/src/features/oss/backend/useOperationExecute.tsx @@ -8,7 +8,7 @@ import { ITargetOperation } from './types'; export const useOperationExecute = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: [ossApi.baseKey, 'operation-execute'], + mutationKey: [KEYS.global_mutation, ossApi.baseKey, 'operation-execute'], mutationFn: ossApi.operationExecute, onSuccess: data => { client.setQueryData(ossApi.getOssQueryOptions({ itemID: data.id }).queryKey, data); diff --git a/rsconcept/frontend/src/features/oss/backend/useOperationUpdate.tsx b/rsconcept/frontend/src/features/oss/backend/useOperationUpdate.tsx index e2d3eb89..b78e4669 100644 --- a/rsconcept/frontend/src/features/oss/backend/useOperationUpdate.tsx +++ b/rsconcept/frontend/src/features/oss/backend/useOperationUpdate.tsx @@ -10,7 +10,7 @@ import { IOperationUpdateDTO } from './types'; export const useOperationUpdate = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: [ossApi.baseKey, 'operation-update'], + mutationKey: [KEYS.global_mutation, ossApi.baseKey, 'operation-update'], mutationFn: ossApi.operationUpdate, onSuccess: (data, variables) => { client.setQueryData(KEYS.composite.ossItem({ itemID: data.id }), data); diff --git a/rsconcept/frontend/src/features/oss/backend/useRelocateConstituents.tsx b/rsconcept/frontend/src/features/oss/backend/useRelocateConstituents.tsx index 960f5997..4a446a0e 100644 --- a/rsconcept/frontend/src/features/oss/backend/useRelocateConstituents.tsx +++ b/rsconcept/frontend/src/features/oss/backend/useRelocateConstituents.tsx @@ -8,7 +8,7 @@ import { ICstRelocateDTO } from './types'; export const useRelocateConstituents = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: [ossApi.baseKey, 'relocate-constituents'], + mutationKey: [KEYS.global_mutation, ossApi.baseKey, 'relocate-constituents'], mutationFn: ossApi.relocateConstituents, onSuccess: data => { client.setQueryData(ossApi.getOssQueryOptions({ itemID: data.id }).queryKey, data); diff --git a/rsconcept/frontend/src/features/oss/backend/useUpdatePositions.tsx b/rsconcept/frontend/src/features/oss/backend/useUpdatePositions.tsx index 8d6613e6..18bbbd77 100644 --- a/rsconcept/frontend/src/features/oss/backend/useUpdatePositions.tsx +++ b/rsconcept/frontend/src/features/oss/backend/useUpdatePositions.tsx @@ -2,13 +2,15 @@ import { useMutation } from '@tanstack/react-query'; import { useUpdateTimestamp } from '@/features/library'; +import { KEYS } from '@/backend/configuration'; + import { ossApi } from './api'; import { IOperationPosition } from './types'; export const useUpdatePositions = () => { const { updateTimestamp } = useUpdateTimestamp(); const mutation = useMutation({ - mutationKey: [ossApi.baseKey, 'update-positions'], + mutationKey: [KEYS.global_mutation, ossApi.baseKey, 'update-positions'], mutationFn: ossApi.updatePositions, onSuccess: (_, variables) => updateTimestamp(variables.itemID) }); diff --git a/rsconcept/frontend/src/features/rsform/backend/useCheckConstituenta.tsx b/rsconcept/frontend/src/features/rsform/backend/useCheckConstituenta.tsx index 8b24266e..18d8da0b 100644 --- a/rsconcept/frontend/src/features/rsform/backend/useCheckConstituenta.tsx +++ b/rsconcept/frontend/src/features/rsform/backend/useCheckConstituenta.tsx @@ -1,11 +1,13 @@ import { useMutation } from '@tanstack/react-query'; +import { KEYS } from '@/backend/configuration'; + import { rsformsApi } from './api'; import { ICheckConstituentaDTO } from './types'; export const useCheckConstituenta = () => { const mutation = useMutation({ - mutationKey: ['actions', 'check-constituenta'], + mutationKey: [KEYS.global_mutation, 'actions', 'check-constituenta'], mutationFn: rsformsApi.checkConstituenta }); return { diff --git a/rsconcept/frontend/src/features/rsform/backend/useCstCreate.tsx b/rsconcept/frontend/src/features/rsform/backend/useCstCreate.tsx index 2994c90f..e6304987 100644 --- a/rsconcept/frontend/src/features/rsform/backend/useCstCreate.tsx +++ b/rsconcept/frontend/src/features/rsform/backend/useCstCreate.tsx @@ -11,7 +11,7 @@ export const useCstCreate = () => { const client = useQueryClient(); const { updateTimestamp } = useUpdateTimestamp(); const mutation = useMutation({ - mutationKey: [rsformsApi.baseKey, 'create-cst'], + mutationKey: [KEYS.global_mutation, rsformsApi.baseKey, 'create-cst'], mutationFn: rsformsApi.cstCreate, onSuccess: data => { client.setQueryData(rsformsApi.getRSFormQueryOptions({ itemID: data.schema.id }).queryKey, data.schema); diff --git a/rsconcept/frontend/src/features/rsform/backend/useCstDelete.tsx b/rsconcept/frontend/src/features/rsform/backend/useCstDelete.tsx index fc4e4857..8e086598 100644 --- a/rsconcept/frontend/src/features/rsform/backend/useCstDelete.tsx +++ b/rsconcept/frontend/src/features/rsform/backend/useCstDelete.tsx @@ -11,7 +11,7 @@ export const useCstDelete = () => { const client = useQueryClient(); const { updateTimestamp } = useUpdateTimestamp(); const mutation = useMutation({ - mutationKey: [rsformsApi.baseKey, 'delete-multiple-cst'], + mutationKey: [KEYS.global_mutation, rsformsApi.baseKey, 'delete-multiple-cst'], mutationFn: rsformsApi.cstDelete, onSuccess: data => { client.setQueryData(rsformsApi.getRSFormQueryOptions({ itemID: data.id }).queryKey, data); diff --git a/rsconcept/frontend/src/features/rsform/backend/useCstMove.tsx b/rsconcept/frontend/src/features/rsform/backend/useCstMove.tsx index f2bc4aff..85d54f5f 100644 --- a/rsconcept/frontend/src/features/rsform/backend/useCstMove.tsx +++ b/rsconcept/frontend/src/features/rsform/backend/useCstMove.tsx @@ -2,6 +2,8 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { useUpdateTimestamp } from '@/features/library'; +import { KEYS } from '@/backend/configuration'; + import { rsformsApi } from './api'; import { ICstMoveDTO } from './types'; @@ -9,7 +11,7 @@ export const useCstMove = () => { const client = useQueryClient(); const { updateTimestamp } = useUpdateTimestamp(); const mutation = useMutation({ - mutationKey: [rsformsApi.baseKey, 'move-cst'], + mutationKey: [KEYS.global_mutation, rsformsApi.baseKey, 'move-cst'], mutationFn: rsformsApi.cstMove, onSuccess: data => { client.setQueryData(rsformsApi.getRSFormQueryOptions({ itemID: data.id }).queryKey, data); diff --git a/rsconcept/frontend/src/features/rsform/backend/useCstRename.tsx b/rsconcept/frontend/src/features/rsform/backend/useCstRename.tsx index d0630beb..3fcf5ffe 100644 --- a/rsconcept/frontend/src/features/rsform/backend/useCstRename.tsx +++ b/rsconcept/frontend/src/features/rsform/backend/useCstRename.tsx @@ -11,7 +11,7 @@ export const useCstRename = () => { const client = useQueryClient(); const { updateTimestamp } = useUpdateTimestamp(); const mutation = useMutation({ - mutationKey: [rsformsApi.baseKey, 'rename-cst'], + mutationKey: [KEYS.global_mutation, rsformsApi.baseKey, 'rename-cst'], mutationFn: rsformsApi.cstRename, onSuccess: data => { client.setQueryData(rsformsApi.getRSFormQueryOptions({ itemID: data.schema.id }).queryKey, data.schema); diff --git a/rsconcept/frontend/src/features/rsform/backend/useCstSubstitute.tsx b/rsconcept/frontend/src/features/rsform/backend/useCstSubstitute.tsx index d15b1bf8..8034dcde 100644 --- a/rsconcept/frontend/src/features/rsform/backend/useCstSubstitute.tsx +++ b/rsconcept/frontend/src/features/rsform/backend/useCstSubstitute.tsx @@ -11,7 +11,7 @@ export const useCstSubstitute = () => { const client = useQueryClient(); const { updateTimestamp } = useUpdateTimestamp(); const mutation = useMutation({ - mutationKey: [rsformsApi.baseKey, 'substitute-cst'], + mutationKey: [KEYS.global_mutation, rsformsApi.baseKey, 'substitute-cst'], mutationFn: rsformsApi.cstSubstitute, onSuccess: data => { client.setQueryData(rsformsApi.getRSFormQueryOptions({ itemID: data.id }).queryKey, data); diff --git a/rsconcept/frontend/src/features/rsform/backend/useCstUpdate.tsx b/rsconcept/frontend/src/features/rsform/backend/useCstUpdate.tsx index a6b8d16c..845e8d3c 100644 --- a/rsconcept/frontend/src/features/rsform/backend/useCstUpdate.tsx +++ b/rsconcept/frontend/src/features/rsform/backend/useCstUpdate.tsx @@ -11,7 +11,7 @@ export const useCstUpdate = () => { const client = useQueryClient(); const { updateTimestamp } = useUpdateTimestamp(); const mutation = useMutation({ - mutationKey: [rsformsApi.baseKey, 'update-cst'], + mutationKey: [KEYS.global_mutation, rsformsApi.baseKey, 'update-cst'], mutationFn: rsformsApi.cstUpdate, onSuccess: (_, variables) => { updateTimestamp(variables.itemID); diff --git a/rsconcept/frontend/src/features/rsform/backend/useDownloadRSForm.tsx b/rsconcept/frontend/src/features/rsform/backend/useDownloadRSForm.tsx index 45cdeb2e..0a3c903c 100644 --- a/rsconcept/frontend/src/features/rsform/backend/useDownloadRSForm.tsx +++ b/rsconcept/frontend/src/features/rsform/backend/useDownloadRSForm.tsx @@ -1,10 +1,12 @@ import { useMutation } from '@tanstack/react-query'; +import { KEYS } from '@/backend/configuration'; + import { rsformsApi } from './api'; export const useDownloadRSForm = () => { const mutation = useMutation({ - mutationKey: [rsformsApi.baseKey, 'download'], + mutationKey: [KEYS.global_mutation, rsformsApi.baseKey, 'download'], mutationFn: rsformsApi.download }); return { diff --git a/rsconcept/frontend/src/features/rsform/backend/useInlineSynthesis.tsx b/rsconcept/frontend/src/features/rsform/backend/useInlineSynthesis.tsx index 91bbfea7..0317618f 100644 --- a/rsconcept/frontend/src/features/rsform/backend/useInlineSynthesis.tsx +++ b/rsconcept/frontend/src/features/rsform/backend/useInlineSynthesis.tsx @@ -11,7 +11,7 @@ export const useInlineSynthesis = () => { const client = useQueryClient(); const { updateTimestamp } = useUpdateTimestamp(); const mutation = useMutation({ - mutationKey: [rsformsApi.baseKey, 'inline-synthesis'], + mutationKey: [KEYS.global_mutation, rsformsApi.baseKey, 'inline-synthesis'], mutationFn: rsformsApi.inlineSynthesis, onSuccess: data => { client.setQueryData(rsformsApi.getRSFormQueryOptions({ itemID: data.id }).queryKey, data); diff --git a/rsconcept/frontend/src/features/rsform/backend/useMutatingRSForm.tsx b/rsconcept/frontend/src/features/rsform/backend/useMutatingRSForm.tsx index 577e250c..1842c700 100644 --- a/rsconcept/frontend/src/features/rsform/backend/useMutatingRSForm.tsx +++ b/rsconcept/frontend/src/features/rsform/backend/useMutatingRSForm.tsx @@ -3,7 +3,7 @@ import { useIsMutating } from '@tanstack/react-query'; import { KEYS } from '@/backend/configuration'; export const useMutatingRSForm = () => { - const countLibrary = useIsMutating({ mutationKey: [KEYS.library] }); - const countRsform = useIsMutating({ mutationKey: [KEYS.rsform] }); + const countLibrary = useIsMutating({ mutationKey: [KEYS.global_mutation, KEYS.library] }); + const countRsform = useIsMutating({ mutationKey: [KEYS.global_mutation, KEYS.rsform] }); return countLibrary + countRsform !== 0; }; diff --git a/rsconcept/frontend/src/features/rsform/backend/useProduceStructure.tsx b/rsconcept/frontend/src/features/rsform/backend/useProduceStructure.tsx index f1f67c1d..a8bbb079 100644 --- a/rsconcept/frontend/src/features/rsform/backend/useProduceStructure.tsx +++ b/rsconcept/frontend/src/features/rsform/backend/useProduceStructure.tsx @@ -11,7 +11,7 @@ export const useProduceStructure = () => { const client = useQueryClient(); const { updateTimestamp } = useUpdateTimestamp(); const mutation = useMutation({ - mutationKey: [rsformsApi.baseKey, 'produce-structure'], + mutationKey: [KEYS.global_mutation, rsformsApi.baseKey, 'produce-structure'], mutationFn: rsformsApi.produceStructure, onSuccess: data => { client.setQueryData(rsformsApi.getRSFormQueryOptions({ itemID: data.schema.id }).queryKey, data.schema); diff --git a/rsconcept/frontend/src/features/rsform/backend/useResetAliases.tsx b/rsconcept/frontend/src/features/rsform/backend/useResetAliases.tsx index aa5bb2a5..ea955ddd 100644 --- a/rsconcept/frontend/src/features/rsform/backend/useResetAliases.tsx +++ b/rsconcept/frontend/src/features/rsform/backend/useResetAliases.tsx @@ -10,7 +10,7 @@ export const useResetAliases = () => { const client = useQueryClient(); const { updateTimestamp } = useUpdateTimestamp(); const mutation = useMutation({ - mutationKey: [rsformsApi.baseKey, 'reset-aliases'], + mutationKey: [KEYS.global_mutation, rsformsApi.baseKey, 'reset-aliases'], mutationFn: rsformsApi.resetAliases, onSuccess: data => { client.setQueryData(rsformsApi.getRSFormQueryOptions({ itemID: data.id }).queryKey, data); diff --git a/rsconcept/frontend/src/features/rsform/backend/useRestoreOrder.tsx b/rsconcept/frontend/src/features/rsform/backend/useRestoreOrder.tsx index ee5bba0b..966b9db3 100644 --- a/rsconcept/frontend/src/features/rsform/backend/useRestoreOrder.tsx +++ b/rsconcept/frontend/src/features/rsform/backend/useRestoreOrder.tsx @@ -2,13 +2,15 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { useUpdateTimestamp } from '@/features/library'; +import { KEYS } from '@/backend/configuration'; + import { rsformsApi } from './api'; export const useRestoreOrder = () => { const client = useQueryClient(); const { updateTimestamp } = useUpdateTimestamp(); const mutation = useMutation({ - mutationKey: [rsformsApi.baseKey, 'restore-order'], + mutationKey: [KEYS.global_mutation, rsformsApi.baseKey, 'restore-order'], mutationFn: rsformsApi.restoreOrder, onSuccess: data => { client.setQueryData(rsformsApi.getRSFormQueryOptions({ itemID: data.id }).queryKey, data); diff --git a/rsconcept/frontend/src/features/rsform/backend/useUploadTRS.tsx b/rsconcept/frontend/src/features/rsform/backend/useUploadTRS.tsx index 88824d2b..525b55f4 100644 --- a/rsconcept/frontend/src/features/rsform/backend/useUploadTRS.tsx +++ b/rsconcept/frontend/src/features/rsform/backend/useUploadTRS.tsx @@ -10,7 +10,7 @@ import { IRSFormUploadDTO } from './types'; export const useUploadTRS = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: [rsformsApi.baseKey, 'load-trs'], + mutationKey: [KEYS.global_mutation, rsformsApi.baseKey, 'load-trs'], mutationFn: rsformsApi.upload, onSuccess: data => { client.setQueryData(KEYS.composite.rsItem({ itemID: data.id }), data); diff --git a/rsconcept/frontend/src/features/users/backend/api.ts b/rsconcept/frontend/src/features/users/backend/api.ts index cbc7f009..6f79a9c8 100644 --- a/rsconcept/frontend/src/features/users/backend/api.ts +++ b/rsconcept/frontend/src/features/users/backend/api.ts @@ -10,6 +10,7 @@ import { IUpdateProfileDTO, IUserSignupDTO } from './types'; export const usersApi = { baseKey: KEYS.users, + getUsersQueryOptions: () => queryOptions({ queryKey: [usersApi.baseKey, 'list'], diff --git a/rsconcept/frontend/src/features/users/backend/useSignup.tsx b/rsconcept/frontend/src/features/users/backend/useSignup.tsx index c45ec21d..f090ecb4 100644 --- a/rsconcept/frontend/src/features/users/backend/useSignup.tsx +++ b/rsconcept/frontend/src/features/users/backend/useSignup.tsx @@ -1,12 +1,14 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { KEYS } from '@/backend/configuration'; + import { usersApi } from './api'; import { IUserSignupDTO } from './types'; export const useSignup = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: ['signup'], + mutationKey: [KEYS.users, 'signup'], mutationFn: usersApi.signup, onSuccess: () => client.invalidateQueries({ queryKey: usersApi.getUsersQueryOptions().queryKey }) }); diff --git a/rsconcept/frontend/src/features/users/backend/useUpdateProfile.tsx b/rsconcept/frontend/src/features/users/backend/useUpdateProfile.tsx index b95496af..b4b10ee0 100644 --- a/rsconcept/frontend/src/features/users/backend/useUpdateProfile.tsx +++ b/rsconcept/frontend/src/features/users/backend/useUpdateProfile.tsx @@ -1,12 +1,14 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { KEYS } from '@/backend/configuration'; + import { usersApi } from './api'; import { IUpdateProfileDTO } from './types'; export const useUpdateProfile = () => { const client = useQueryClient(); const mutation = useMutation({ - mutationKey: ['update-profile'], + mutationKey: [KEYS.users, 'update-profile'], mutationFn: usersApi.updateProfile, onSuccess: data => { client.setQueryData(usersApi.getProfileQueryOptions().queryKey, data); diff --git a/rsconcept/frontend/src/hooks/useEscapeKey.ts b/rsconcept/frontend/src/hooks/useEscapeKey.ts index caed371e..e22c4a65 100644 --- a/rsconcept/frontend/src/hooks/useEscapeKey.ts +++ b/rsconcept/frontend/src/hooks/useEscapeKey.ts @@ -2,7 +2,7 @@ import { useCallback, useEffect } from 'react'; -function useEscapeKey(handleClose: () => void) { +function useEscapeKey(handleClose: () => void, isEnabled: boolean = true) { const handleEscKey = useCallback( (event: KeyboardEvent) => { if (event.key === 'Escape') { @@ -13,11 +13,13 @@ function useEscapeKey(handleClose: () => void) { ); useEffect(() => { - document.addEventListener('keyup', handleEscKey, false); - return () => { - document.removeEventListener('keyup', handleEscKey, false); - }; - }, [handleEscKey]); + if (isEnabled) { + document.addEventListener('keyup', handleEscKey, false); + return () => { + document.removeEventListener('keyup', handleEscKey, false); + }; + } + }, [handleEscKey, isEnabled]); } export default useEscapeKey;