260322:1648 Correct Coresspondence / Doing RFA / Correct CI
This commit is contained in:
@@ -36,11 +36,7 @@ describe('use-correspondence hooks', () => {
|
||||
it('should generate correct cache keys', () => {
|
||||
expect(correspondenceKeys.all).toEqual(['correspondences']);
|
||||
expect(correspondenceKeys.lists()).toEqual(['correspondences', 'list']);
|
||||
expect(correspondenceKeys.list({ projectId: 1 })).toEqual([
|
||||
'correspondences',
|
||||
'list',
|
||||
{ projectId: 1 },
|
||||
]);
|
||||
expect(correspondenceKeys.list({ projectId: 1 })).toEqual(['correspondences', 'list', { projectId: 1 }]);
|
||||
expect(correspondenceKeys.details()).toEqual(['correspondences', 'detail']);
|
||||
expect(correspondenceKeys.detail(1)).toEqual(['correspondences', 'detail', 1]);
|
||||
});
|
||||
@@ -123,7 +119,7 @@ describe('use-correspondence hooks', () => {
|
||||
projectId: 1,
|
||||
typeId: 1,
|
||||
originatorId: 1,
|
||||
recipients: []
|
||||
recipients: [],
|
||||
});
|
||||
});
|
||||
|
||||
@@ -132,7 +128,7 @@ describe('use-correspondence hooks', () => {
|
||||
projectId: 1,
|
||||
typeId: 1,
|
||||
originatorId: 1,
|
||||
recipients: []
|
||||
recipients: [],
|
||||
});
|
||||
expect(toast.success).toHaveBeenCalledWith('Correspondence created successfully');
|
||||
});
|
||||
@@ -154,7 +150,7 @@ describe('use-correspondence hooks', () => {
|
||||
projectId: 1,
|
||||
typeId: 1,
|
||||
originatorId: 1,
|
||||
recipients: []
|
||||
recipients: [],
|
||||
});
|
||||
} catch {
|
||||
// Expected to throw
|
||||
|
||||
@@ -1,12 +1,7 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
import { renderHook, waitFor, act } from '@testing-library/react';
|
||||
import { createTestQueryClient } from '@/lib/test-utils';
|
||||
import {
|
||||
useDrawings,
|
||||
useDrawing,
|
||||
useCreateDrawing,
|
||||
drawingKeys,
|
||||
} from '../use-drawing';
|
||||
import { useDrawings, useDrawing, useCreateDrawing, drawingKeys } from '../use-drawing';
|
||||
import { contractDrawingService } from '@/lib/services/contract-drawing.service';
|
||||
import { shopDrawingService } from '@/lib/services/shop-drawing.service';
|
||||
import { toast } from 'sonner';
|
||||
|
||||
@@ -1,13 +1,7 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
import { renderHook, waitFor, act } from '@testing-library/react';
|
||||
import { createTestQueryClient } from '@/lib/test-utils';
|
||||
import {
|
||||
useProjects,
|
||||
useCreateProject,
|
||||
useUpdateProject,
|
||||
useDeleteProject,
|
||||
projectKeys,
|
||||
} from '../use-projects';
|
||||
import { useProjects, useCreateProject, useUpdateProject, useDeleteProject, projectKeys } from '../use-projects';
|
||||
import { projectService } from '@/lib/services/project.service';
|
||||
import { toast } from 'sonner';
|
||||
|
||||
@@ -30,11 +24,7 @@ describe('use-projects hooks', () => {
|
||||
describe('projectKeys', () => {
|
||||
it('should generate correct cache keys', () => {
|
||||
expect(projectKeys.all).toEqual(['projects']);
|
||||
expect(projectKeys.list({ search: 'test' })).toEqual([
|
||||
'projects',
|
||||
'list',
|
||||
{ search: 'test' },
|
||||
]);
|
||||
expect(projectKeys.list({ search: 'test' })).toEqual(['projects', 'list', { search: 'test' }]);
|
||||
expect(projectKeys.detail(1)).toEqual(['projects', 'detail', 1]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,14 +1,7 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
import { renderHook, waitFor, act } from '@testing-library/react';
|
||||
import { createTestQueryClient } from '@/lib/test-utils';
|
||||
import {
|
||||
useRFAs,
|
||||
useRFA,
|
||||
useCreateRFA,
|
||||
useUpdateRFA,
|
||||
useProcessRFA,
|
||||
rfaKeys,
|
||||
} from '../use-rfa';
|
||||
import { useRFAs, useRFA, useCreateRFA, useUpdateRFA, useProcessRFA, rfaKeys } from '../use-rfa';
|
||||
import { rfaService } from '@/lib/services/rfa.service';
|
||||
import { toast } from 'sonner';
|
||||
|
||||
@@ -111,7 +104,7 @@ describe('use-rfa hooks', () => {
|
||||
projectId: 1,
|
||||
subject: 'Test RFA',
|
||||
rfaTypeId: 1,
|
||||
toOrganizationId: 1
|
||||
toOrganizationId: 1,
|
||||
});
|
||||
});
|
||||
|
||||
@@ -135,7 +128,7 @@ describe('use-rfa hooks', () => {
|
||||
projectId: 1,
|
||||
subject: '',
|
||||
rfaTypeId: 1,
|
||||
toOrganizationId: 1
|
||||
toOrganizationId: 1,
|
||||
});
|
||||
} catch {
|
||||
// Expected
|
||||
|
||||
@@ -1,14 +1,7 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
import { renderHook, waitFor, act } from '@testing-library/react';
|
||||
import { createTestQueryClient } from '@/lib/test-utils';
|
||||
import {
|
||||
useUsers,
|
||||
useRoles,
|
||||
useCreateUser,
|
||||
useUpdateUser,
|
||||
useDeleteUser,
|
||||
userKeys,
|
||||
} from '../use-users';
|
||||
import { useUsers, useRoles, useCreateUser, useUpdateUser, useDeleteUser, userKeys } from '../use-users';
|
||||
import { userService } from '@/lib/services/user.service';
|
||||
import { toast } from 'sonner';
|
||||
|
||||
@@ -32,11 +25,7 @@ describe('use-users hooks', () => {
|
||||
describe('userKeys', () => {
|
||||
it('should generate correct cache keys', () => {
|
||||
expect(userKeys.all).toEqual(['users']);
|
||||
expect(userKeys.list({ search: 'john' })).toEqual([
|
||||
'users',
|
||||
'list',
|
||||
{ search: 'john' },
|
||||
]);
|
||||
expect(userKeys.list({ search: 'john' })).toEqual(['users', 'list', { search: 'john' }]);
|
||||
expect(userKeys.detail(1)).toEqual(['users', 'detail', 1]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -128,4 +128,3 @@ export function useProcessWorkflow() {
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -2,9 +2,21 @@ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import { contractDrawingService } from '@/lib/services/contract-drawing.service';
|
||||
import { shopDrawingService } from '@/lib/services/shop-drawing.service';
|
||||
import { asBuiltDrawingService } from '@/lib/services/asbuilt-drawing.service';
|
||||
import { SearchContractDrawingDto, CreateContractDrawingDto, UpdateContractDrawingDto } from '@/types/dto/drawing/contract-drawing.dto';
|
||||
import { SearchShopDrawingDto, CreateShopDrawingDto, CreateShopDrawingRevisionDto } from '@/types/dto/drawing/shop-drawing.dto';
|
||||
import { SearchAsBuiltDrawingDto, CreateAsBuiltDrawingDto, CreateAsBuiltDrawingRevisionDto } from '@/types/dto/drawing/asbuilt-drawing.dto';
|
||||
import {
|
||||
SearchContractDrawingDto,
|
||||
CreateContractDrawingDto,
|
||||
UpdateContractDrawingDto,
|
||||
} from '@/types/dto/drawing/contract-drawing.dto';
|
||||
import {
|
||||
SearchShopDrawingDto,
|
||||
CreateShopDrawingDto,
|
||||
CreateShopDrawingRevisionDto,
|
||||
} from '@/types/dto/drawing/shop-drawing.dto';
|
||||
import {
|
||||
SearchAsBuiltDrawingDto,
|
||||
CreateAsBuiltDrawingDto,
|
||||
CreateAsBuiltDrawingRevisionDto,
|
||||
} from '@/types/dto/drawing/asbuilt-drawing.dto';
|
||||
import { toast } from 'sonner';
|
||||
import { ContractDrawing, ShopDrawing, AsBuiltDrawing } from '@/types/drawing';
|
||||
|
||||
@@ -23,8 +35,7 @@ export const drawingKeys = {
|
||||
// --- Queries ---
|
||||
|
||||
export function useDrawings(type: DrawingType, params: DrawingSearchParams) {
|
||||
const shouldEnable =
|
||||
'projectUuid' in params ? Boolean(params.projectUuid) : true;
|
||||
const shouldEnable = 'projectUuid' in params ? Boolean(params.projectUuid) : true;
|
||||
|
||||
return useQuery({
|
||||
queryKey: drawingKeys.list(type, params),
|
||||
@@ -147,7 +158,13 @@ export function useUpdateContractDrawing() {
|
||||
export function useUploadRevision(type: DrawingType) {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: async ({ uuid, data }: { uuid: string; data: CreateShopDrawingRevisionDto | CreateAsBuiltDrawingRevisionDto }) => {
|
||||
mutationFn: async ({
|
||||
uuid,
|
||||
data,
|
||||
}: {
|
||||
uuid: string;
|
||||
data: CreateShopDrawingRevisionDto | CreateAsBuiltDrawingRevisionDto;
|
||||
}) => {
|
||||
if (type === 'SHOP') {
|
||||
return shopDrawingService.createRevision(uuid, data as CreateShopDrawingRevisionDto);
|
||||
} else {
|
||||
|
||||
@@ -25,7 +25,7 @@ export function useMarkNotificationRead() {
|
||||
queryClient.invalidateQueries({ queryKey: notificationKeys.unread() });
|
||||
},
|
||||
onError: () => {
|
||||
toast.error("Failed to mark notification as read");
|
||||
}
|
||||
toast.error('Failed to mark notification as read');
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
@@ -75,7 +75,8 @@ export const useCancelNumbering = () => {
|
||||
export const useBulkImportNumbering = () => {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: (data: FormData | { documentNumber: string; projectId: number; sequenceNumber: number }[]) => documentNumberingService.bulkImport(data),
|
||||
mutationFn: (data: FormData | { documentNumber: string; projectId: number; sequenceNumber: number }[]) =>
|
||||
documentNumberingService.bulkImport(data),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: numberingKeys.all });
|
||||
},
|
||||
|
||||
@@ -22,14 +22,14 @@ export function useCreateProject() {
|
||||
return useMutation({
|
||||
mutationFn: (data: CreateProjectDto) => projectService.create(data),
|
||||
onSuccess: () => {
|
||||
toast.success("Project created successfully");
|
||||
toast.success('Project created successfully');
|
||||
queryClient.invalidateQueries({ queryKey: projectKeys.all });
|
||||
},
|
||||
onError: (error: unknown) => {
|
||||
toast.error("Failed to create project", {
|
||||
description: getApiErrorMessage(error, "Unknown error")
|
||||
toast.error('Failed to create project', {
|
||||
description: getApiErrorMessage(error, 'Unknown error'),
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
@@ -38,14 +38,14 @@ export function useUpdateProject() {
|
||||
return useMutation({
|
||||
mutationFn: ({ uuid, data }: { uuid: string; data: UpdateProjectDto }) => projectService.update(uuid, data),
|
||||
onSuccess: () => {
|
||||
toast.success("Project updated successfully");
|
||||
toast.success('Project updated successfully');
|
||||
queryClient.invalidateQueries({ queryKey: projectKeys.all });
|
||||
},
|
||||
onError: (error: unknown) => {
|
||||
toast.error("Failed to update project", {
|
||||
description: getApiErrorMessage(error, "Unknown error")
|
||||
toast.error('Failed to update project', {
|
||||
description: getApiErrorMessage(error, 'Unknown error'),
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
@@ -54,13 +54,13 @@ export function useDeleteProject() {
|
||||
return useMutation({
|
||||
mutationFn: (uuid: string) => projectService.delete(uuid),
|
||||
onSuccess: () => {
|
||||
toast.success("Project deleted successfully");
|
||||
toast.success('Project deleted successfully');
|
||||
queryClient.invalidateQueries({ queryKey: projectKeys.all });
|
||||
},
|
||||
onError: (error: unknown) => {
|
||||
toast.error("Failed to delete project", {
|
||||
description: getApiErrorMessage(error, "Unknown error")
|
||||
toast.error('Failed to delete project', {
|
||||
description: getApiErrorMessage(error, 'Unknown error'),
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
@@ -2,7 +2,10 @@ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import { masterDataService } from '@/lib/services/master-data.service';
|
||||
import type { CreateDisciplineDto } from '@/types/dto/master/discipline.dto';
|
||||
import type { CreateRfaTypeDto, UpdateRfaTypeDto } from '@/types/dto/master/rfa-type.dto';
|
||||
import type { CreateCorrespondenceTypeDto, UpdateCorrespondenceTypeDto } from '@/types/dto/master/correspondence-type.dto';
|
||||
import type {
|
||||
CreateCorrespondenceTypeDto,
|
||||
UpdateCorrespondenceTypeDto,
|
||||
} from '@/types/dto/master/correspondence-type.dto';
|
||||
|
||||
export const referenceDataKeys = {
|
||||
all: ['reference-data'] as const,
|
||||
@@ -98,7 +101,8 @@ export const useCreateCorrespondenceType = () => {
|
||||
export const useUpdateCorrespondenceType = () => {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: ({ id, data }: { id: number; data: UpdateCorrespondenceTypeDto }) => masterDataService.updateCorrespondenceType(id, data),
|
||||
mutationFn: ({ id, data }: { id: number; data: UpdateCorrespondenceTypeDto }) =>
|
||||
masterDataService.updateCorrespondenceType(id, data),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['reference-data', 'correspondenceTypes'] });
|
||||
},
|
||||
|
||||
@@ -55,8 +55,7 @@ export function useUpdateRFA() {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: ({ uuid, data }: { uuid: string; data: UpdateRfaDto }) =>
|
||||
rfaService.update(uuid, data),
|
||||
mutationFn: ({ uuid, data }: { uuid: string; data: UpdateRfaDto }) => rfaService.update(uuid, data),
|
||||
onSuccess: (_, { uuid }) => {
|
||||
toast.success('RFA updated successfully');
|
||||
queryClient.invalidateQueries({ queryKey: rfaKeys.detail(uuid) });
|
||||
@@ -74,8 +73,7 @@ export function useProcessRFA() {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: ({ uuid, data }: { uuid: string; data: WorkflowActionDto }) =>
|
||||
rfaService.processWorkflow(uuid, data),
|
||||
mutationFn: ({ uuid, data }: { uuid: string; data: WorkflowActionDto }) => rfaService.processWorkflow(uuid, data),
|
||||
onSuccess: (_, { uuid }) => {
|
||||
toast.success('Workflow status updated successfully');
|
||||
queryClient.invalidateQueries({ queryKey: rfaKeys.detail(uuid) });
|
||||
|
||||
+15
-15
@@ -29,14 +29,14 @@ export function useCreateUser() {
|
||||
return useMutation({
|
||||
mutationFn: (data: CreateUserDto) => userService.create(data),
|
||||
onSuccess: () => {
|
||||
toast.success("User created successfully");
|
||||
toast.success('User created successfully');
|
||||
queryClient.invalidateQueries({ queryKey: userKeys.all });
|
||||
},
|
||||
onError: (error: unknown) => {
|
||||
toast.error("Failed to create user", {
|
||||
description: getApiErrorMessage(error, "Unknown error")
|
||||
});
|
||||
}
|
||||
toast.error('Failed to create user', {
|
||||
description: getApiErrorMessage(error, 'Unknown error'),
|
||||
});
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
@@ -45,14 +45,14 @@ export function useUpdateUser() {
|
||||
return useMutation({
|
||||
mutationFn: ({ uuid, data }: { uuid: string; data: UpdateUserDto }) => userService.update(uuid, data),
|
||||
onSuccess: () => {
|
||||
toast.success("User updated successfully");
|
||||
toast.success('User updated successfully');
|
||||
queryClient.invalidateQueries({ queryKey: userKeys.all });
|
||||
},
|
||||
onError: (error: unknown) => {
|
||||
toast.error("Failed to update user", {
|
||||
description: getApiErrorMessage(error, "Unknown error")
|
||||
});
|
||||
}
|
||||
toast.error('Failed to update user', {
|
||||
description: getApiErrorMessage(error, 'Unknown error'),
|
||||
});
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
@@ -61,13 +61,13 @@ export function useDeleteUser() {
|
||||
return useMutation({
|
||||
mutationFn: (uuid: string) => userService.delete(uuid),
|
||||
onSuccess: () => {
|
||||
toast.success("User deleted successfully");
|
||||
toast.success('User deleted successfully');
|
||||
queryClient.invalidateQueries({ queryKey: userKeys.all });
|
||||
},
|
||||
onError: (error: unknown) => {
|
||||
toast.error("Failed to delete user", {
|
||||
description: getApiErrorMessage(error, "Unknown error")
|
||||
});
|
||||
}
|
||||
toast.error('Failed to delete user', {
|
||||
description: getApiErrorMessage(error, 'Unknown error'),
|
||||
});
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user