Skip to content

Commit

Permalink
Refactor ManageQuestionnaireOrganizationsSheet and organizationApi types
Browse files Browse the repository at this point in the history
- Simplified the mutation function in ManageQuestionnaireOrganizationsSheet for setting organizations by removing redundant parameters.
- Updated the handleSave function to correctly format the payload for the setOrganizations mutation.
- Enhanced the hasChanges logic to improve clarity and accuracy in detecting changes in selected organizations.
- Refactored organizationApi type definitions to use Type<> for response and request bodies, improving type safety and consistency across API calls.
  • Loading branch information
bodhish committed Jan 2, 2025
1 parent 77c8a9b commit b0548c9
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,9 @@ export default function ManageQuestionnaireOrganizationsSheet({
});

const { mutate: setOrganizations, isPending: isUpdating } = useMutation({
mutationFn: (organizations: string[]) =>
mutate(questionnaireApi.setOrganizations, {
pathParams: { id: questionnaireId },
body: { organizations: organizations },
})({ organizations: organizations }),
mutationFn: mutate(questionnaireApi.setOrganizations, {
pathParams: { id: questionnaireId },
}),
onSuccess: () => {
queryClient.invalidateQueries({
queryKey: ["questionnaire", questionnaireId, "organizations"],
Expand All @@ -93,16 +91,18 @@ export default function ManageQuestionnaireOrganizationsSheet({
};

const handleSave = () => {
setOrganizations(selectedIds);
setOrganizations({ organizations: selectedIds });
};

const selectedOrganizations = organizations?.results.filter((org) =>
selectedIds.includes(org.id),
);

const hasChanges =
JSON.stringify(organizations?.results.map((org) => org.id).sort()) !==
JSON.stringify(selectedIds.sort());
const hasChanges = !organizations?.results
? false
: new Set(organizations.results.map((org) => org.id)).size !==
new Set(selectedIds).size ||
!organizations.results.every((org) => selectedIds.includes(org.id));

return (
<Sheet open={open} onOpenChange={setOpen}>
Expand Down
18 changes: 9 additions & 9 deletions src/types/organization/organizationApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,39 +8,39 @@ export default {
listMine: {
path: "/api/v1/organization/mine/",
method: HttpMethod.GET,
TRes: {} as PaginatedResponse<Organization>,
TRes: Type<PaginatedResponse<Organization>>(),
},
list: {
path: "/api/v1/organization/",
method: HttpMethod.GET,
TRes: {} as PaginatedResponse<Organization>,
TRes: Type<PaginatedResponse<Organization>>(),
},
get: {
path: "/api/v1/organization/{id}/",
method: HttpMethod.GET,
TRes: {} as Organization,
TRes: Type<Organization>(),
},
listUsers: {
path: "/api/v1/organization/{id}/users/",
method: HttpMethod.GET,
TRes: {} as PaginatedResponse<OrganizationUserRole>,
TRes: Type<PaginatedResponse<OrganizationUserRole>>(),
},
assignUser: {
path: "/api/v1/organization/{id}/users/",
method: HttpMethod.POST,
TRes: {} as OrganizationUserRole,
TBody: {} as { user: string; role: string },
TRes: Type<OrganizationUserRole>(),
TBody: Type<{ user: string; role: string }>(),
},
updateUserRole: {
path: "/api/v1/organization/{id}/users/{userRoleId}/",
method: HttpMethod.PUT,
TRes: {} as OrganizationUserRole,
TBody: {} as { user: string; role: string },
TRes: Type<OrganizationUserRole>(),
TBody: Type<{ user: string; role: string }>(),
},
removeUserRole: {
path: "/api/v1/organization/{id}/users/{userRoleId}/",
method: HttpMethod.DELETE,
TRes: {} as Record<string, never>,
TRes: Type<void>(),
},
listPatients: {
path: "/api/v1/patient/",
Expand Down

0 comments on commit b0548c9

Please sign in to comment.