Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | 142x 142x 142x 142x 142x 142x | import { useIsMutating, useQuery, useQueryClient } from '@tanstack/react-query';
import { type Quota } from '@amalia/amalia-lang/tokens/types';
import {
type QuotaPlanAssignments,
type QuotaTeamAssignments,
type QuotaUserAssignments,
type SearchQuotaAssignmentsRequest,
} from '@amalia/assignments/quotas/types';
import { useMutation } from '@amalia/ext/react-query';
import { assert } from '@amalia/ext/typescript';
import { QuotasAssignmentsApiClient } from './api-client/quotas-assignments.api-client';
import { quotaAssignmentsMutationKeys, quotaAssignmentsQueryKeys } from './queries.keys';
export const useQuotaAssignments = <
TQuotaAssignments extends QuotaPlanAssignments | QuotaTeamAssignments | QuotaUserAssignments,
>(
quotaId?: Quota['id'],
{ startDate, endDate, planIds }: Partial<SearchQuotaAssignmentsRequest> = {},
) =>
useQuery({
enabled: !!quotaId && !!startDate && !!endDate,
queryKey: quotaAssignmentsQueryKeys.ofVariable.list(quotaId!, startDate!, endDate!, planIds),
queryFn: () => {
assert(
!!quotaId && !!startDate && !!endDate,
'Query should be disabled if quotaId or startDate or endDate is not provided',
);
return QuotasAssignmentsApiClient.getQuotaAssignments<TQuotaAssignments>(quotaId, {
startDate,
endDate,
planIds,
});
},
});
export const useUpsertQuotaAssignment = () => {
const queryClient = useQueryClient();
return useMutation({
mutationKey: quotaAssignmentsMutationKeys.upsertOne(),
mutationFn: QuotasAssignmentsApiClient.upsertQuotaAssignment,
onSuccess: async (_, upsertQuotaRequest) => {
await Promise.all(
[
upsertQuotaRequest.userId &&
queryClient.invalidateQueries({
queryKey: quotaAssignmentsQueryKeys.ofUser.all(upsertQuotaRequest.userId),
}),
queryClient.invalidateQueries({
queryKey: quotaAssignmentsQueryKeys.ofVariable.all(upsertQuotaRequest.variableId),
}),
].filter(Boolean),
);
},
});
};
export const useUpsertQuotasAssignments = () => {
const queryClient = useQueryClient();
return useMutation({
mutationKey: quotaAssignmentsMutationKeys.upsertMany(),
mutationFn: QuotasAssignmentsApiClient.upsertQuotasAssignments,
onSuccess: async (_, upsertQuotasRequest) => {
await Promise.all(
upsertQuotasRequest.quotas.map((upsertQuotaRequest) =>
Promise.all(
[
upsertQuotaRequest.userId &&
queryClient.invalidateQueries({
queryKey: quotaAssignmentsQueryKeys.ofUser.all(upsertQuotaRequest.userId),
}),
queryClient.invalidateQueries({
queryKey: quotaAssignmentsQueryKeys.ofVariable.all(upsertQuotaRequest.variableId),
}),
].filter(Boolean),
),
),
);
},
});
};
export const useIsUpsertAssignmentLoading = () =>
useIsMutating({ mutationKey: quotaAssignmentsMutationKeys.upsertOne() }) +
useIsMutating({ mutationKey: quotaAssignmentsMutationKeys.upsertMany() }) >
0;
export const useDeleteQuotaAssignments = () =>
useMutation({
mutationKey: quotaAssignmentsMutationKeys.deleteMany(),
mutationFn: QuotasAssignmentsApiClient.deleteQuotaAssignments,
meta: {
invalidateQueries: [quotaAssignmentsQueryKeys.all()],
},
});
export const useDeleteQuotaAssignment = () =>
useMutation({
mutationKey: quotaAssignmentsMutationKeys.deleteOne(),
mutationFn: QuotasAssignmentsApiClient.deleteQuotaAssignment,
meta: {
invalidateQueries: [quotaAssignmentsQueryKeys.all()],
},
});
|