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 | 105x 11x 11x 4x 7x 7x 105x 54x 54x 4x 4x 4x 2x 2x 2x 46x 2x 2x 2x 1x | import { useMutation, useQueryClient } from "@tanstack/react-query"; import { API } from "aws-amplify"; import { StateCode } from "shared-types"; import { UserRole } from "shared-types/events/legacy-user"; import { OneMacUserProfile } from "./useGetUserProfile"; export type RoleStatus = "active" | "denied" | "pending" | "revoked"; export type RoleRequest = { email: string; state: StateCode | "N/A"; role: UserRole; eventType: string; requestRoleChange: boolean; // is this a role change request? (used in state signup and profile page) grantAccess?: RoleStatus; // active, denied, revoked, or pending if undefined (used in user management page) group?: string; // used for systemadmins upgrading defaultcmsuser to cmsroleapprover division?: string; // used for systemadmins upgrading defaultcmsuser to cmsroleapprover }; export const submitRoleRequests = async (request: RoleRequest): Promise<{ message: string }> => { try { const roleRequest = await API.post("os", "/submitRoleRequests", { body: request, }); return roleRequest; } catch (error) { console.error(error); throw new Error("Failed to submit role request"); } }; export const useSubmitRoleRequests = () => { const queryClient = useQueryClient(); return useMutation< { message: string }, Error, RoleRequest, { previousProfile?: OneMacUserProfile } >({ mutationFn: submitRoleRequests, onMutate: async (newRequest) => { await queryClient.cancelQueries({ queryKey: ["profile"] }); const previousProfile = queryClient.getQueryData<OneMacUserProfile>(["profile"]); if (!previousProfile) return; const { email, state, role, grantAccess, eventType } = newRequest; const id = `${email}_${state}_${role}`; const oldStateAccess = previousProfile.stateAccess ?? []; const updatedStateAccess = oldStateAccess.some((stateAccess) => stateAccess.id === id) ? oldStateAccess.map((stateAccess) => stateAccess.id === id ? { ...stateAccess, status: grantAccess ?? "pending", eventType, } : stateAccess, ) : [ ...oldStateAccess, { id, email, role, territory: state, status: grantAccess ?? "pending", eventType, doneByEmail: email, doneByName: "Updating...", }, ]; queryClient.setQueryData<OneMacUserProfile>(["profile"], { ...previousProfile, stateAccess: updatedStateAccess, }); return { previousProfile }; }, onError: (_error, _variables, context) => { if (context?.previousProfile) { queryClient.setQueryData(["profile"], context.previousProfile); } }, }); }; |