Skip to content

Commit

Permalink
Refactor questionnaire API routes and update components to use new st…
Browse files Browse the repository at this point in the history
…ructure

- Moved questionnaire routes from the api.tsx file to a new questionnaireApi module for better organization and maintainability.
- Updated components (QuestionnaireList, QuestionnaireForm, QuestionnaireSearch, and QuestionnaireShow) to utilize the new questionnaireApi for API calls, ensuring consistency across the application.
- Removed deprecated questionnaire routes from the previous API structure.
  • Loading branch information
bodhish committed Jan 2, 2025
1 parent a58274f commit edca4ef
Show file tree
Hide file tree
Showing 6 changed files with 83 additions and 68 deletions.
61 changes: 0 additions & 61 deletions src/Utils/request/api.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ import {
} from "@/types/questionnaire/batch";
import { Code } from "@/types/questionnaire/code";
import { Diagnosis } from "@/types/questionnaire/diagnosis";
import type { QuestionnaireDetail } from "@/types/questionnaire/questionnaire";
import type { QuestionnaireResponse } from "@/types/questionnaire/questionnaireResponse";
import { Symptom } from "@/types/questionnaire/symptom";
import {
Expand Down Expand Up @@ -604,66 +603,6 @@ const routes = {
},
},

// Questionnaire Routes
questionnaire: {
list: {
path: "/api/v1/questionnaire/",
method: "GET",
TRes: Type<PaginatedResponse<QuestionnaireDetail>>(),
},

detail: {
path: "/api/v1/questionnaire/{id}/",
method: "GET",
TRes: Type<QuestionnaireDetail>(),
},

create: {
path: "/api/v1/questionnaire/",
method: "POST",
TRes: Type<QuestionnaireDetail>(),
TBody: Type<Partial<QuestionnaireDetail>>(),
},

update: {
path: "/api/v1/questionnaire/{id}/",
method: "PUT",
TRes: Type<QuestionnaireDetail>(),
TBody: Type<QuestionnaireDetail>(),
},

partialUpdate: {
path: "/api/v1/questionnaire/{id}/",
method: "PATCH",
TRes: Type<QuestionnaireDetail>(),
TBody: Type<Partial<QuestionnaireDetail>>(),
},

delete: {
path: "/api/v1/questionnaire/{id}/",
method: "DELETE",
TRes: Type<Record<string, never>>(),
},

submit: {
path: "/api/v1/questionnaire/{id}/submit/",
method: "POST",
TRes: Type<Record<string, never>>(),
TBody: Type<{
resource_id: string;
encounter?: string;
patient: string;
responses: Array<{
question_id: string;
value: string | number | boolean;
note?: string;
bodysite?: string;
method?: string;
}>;
}>(),
},
},

batchRequest: {
path: "/api/v1/batch_requests/",
method: "POST",
Expand Down
3 changes: 2 additions & 1 deletion src/components/Questionnaire/QuestionnaireForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import {
import type { QuestionnaireResponse } from "@/types/questionnaire/form";
import type { Question } from "@/types/questionnaire/question";
import { QuestionnaireDetail } from "@/types/questionnaire/questionnaire";
import questionnaireApi from "@/types/questionnaire/questionnaireApi";

import { QuestionRenderer } from "./QuestionRenderer";
import { QuestionnaireSearch } from "./QuestionnaireSearch";
Expand Down Expand Up @@ -70,7 +71,7 @@ export function QuestionnaireForm({
data: questionnaireData,
loading: isQuestionnaireLoading,
error: questionnaireError,
} = useQuery(routes.questionnaire.detail, {
} = useQuery(questionnaireApi.detail, {
pathParams: { id: questionnaireSlug ?? "" },
prefetch: !!questionnaireSlug && !FIXED_QUESTIONNAIRES[questionnaireSlug],
});
Expand Down
4 changes: 2 additions & 2 deletions src/components/Questionnaire/QuestionnaireSearch.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ import {
} from "@/components/ui/popover";
import { Skeleton } from "@/components/ui/skeleton";

import routes from "@/Utils/request/api";
import query from "@/Utils/request/query";
import { conditionalAttribute } from "@/Utils/utils";
import type { QuestionnaireDetail } from "@/types/questionnaire/questionnaire";
import questionnaireApi from "@/types/questionnaire/questionnaireApi";

interface QuestionnaireSearchProps {
onSelect: (questionnaire: QuestionnaireDetail) => void;
Expand All @@ -38,7 +38,7 @@ export function QuestionnaireSearch({
const { data: questionnaires, isLoading } =
useQuery<QuestionnaireListResponse>({
queryKey: ["questionnaires", "list", search, subjectType],
queryFn: query(routes.questionnaire.list, {
queryFn: query(questionnaireApi.list, {
queryParams: {
title: search,
...conditionalAttribute(!!subjectType, {
Expand Down
4 changes: 2 additions & 2 deletions src/components/Questionnaire/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@ import { useNavigate } from "raviger";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";

import routes from "@/Utils/request/api";
import useQuery from "@/Utils/request/useQuery";
import { QuestionnaireDetail } from "@/types/questionnaire/questionnaire";
import questionnaireApi from "@/types/questionnaire/questionnaireApi";

import Loading from "../Common/Loading";

export function QuestionnaireList() {
const navigate = useNavigate();
const { data: response, loading } = useQuery(routes.questionnaire.list);
const { data: response, loading } = useQuery(questionnaireApi.list);

if (loading) {
return <Loading />;
Expand Down
4 changes: 2 additions & 2 deletions src/components/Questionnaire/show.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ import { Button } from "@/components/ui/button";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";

import routes from "@/Utils/request/api";
import useQuery from "@/Utils/request/useQuery";
import type { Question } from "@/types/questionnaire/question";
import questionnaireApi from "@/types/questionnaire/questionnaireApi";

import Loading from "../Common/Loading";
import { QuestionnaireForm } from "./QuestionnaireForm";
Expand Down Expand Up @@ -66,7 +66,7 @@ export function QuestionnaireShow({ id }: QuestionnaireShowProps) {
data: questionnaire,
loading,
error,
} = useQuery(routes.questionnaire.detail, {
} = useQuery(questionnaireApi.detail, {
pathParams: { id },
});

Expand Down
75 changes: 75 additions & 0 deletions src/types/questionnaire/questionnaireApi.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import { HttpMethod, Type } from "@/Utils/request/api";
import { PaginatedResponse } from "@/Utils/request/types";

import { Organization } from "../organization/organization";
import { QuestionnaireDetail } from "./questionnaire";

export default {
list: {
path: "/api/v1/questionnaire/",
method: HttpMethod.GET,
TRes: Type<PaginatedResponse<QuestionnaireDetail>>(),
},

detail: {
path: "/api/v1/questionnaire/{id}/",
method: HttpMethod.GET,
TRes: Type<QuestionnaireDetail>(),
},

create: {
path: "/api/v1/questionnaire/",
method: HttpMethod.POST,
TRes: Type<QuestionnaireDetail>(),
TBody: Type<Partial<QuestionnaireDetail>>(),
},

update: {
path: "/api/v1/questionnaire/{id}/",
method: HttpMethod.PUT,
TRes: Type<QuestionnaireDetail>(),
TBody: Type<QuestionnaireDetail>(),
},

partialUpdate: {
path: "/api/v1/questionnaire/{id}/",
method: HttpMethod.PATCH,
TRes: Type<QuestionnaireDetail>(),
TBody: Type<Partial<QuestionnaireDetail>>(),
},

delete: {
path: "/api/v1/questionnaire/{id}/",
method: HttpMethod.DELETE,
TRes: Type<Record<string, never>>(),
},

submit: {
path: "/api/v1/questionnaire/{id}/submit/",
method: HttpMethod.POST,
TRes: Type<Record<string, never>>(),
TBody: Type<{
resource_id: string;
encounter?: string;
patient: string;
responses: Array<{
question_id: string;
value: string | number | boolean;
note?: string;
bodysite?: string;
method?: string;
}>;
}>(),
},
getOrganizations: {
path: "/api/v1/questionnaire/{id}/get_organizations/",
method: HttpMethod.GET,
TRes: Type<PaginatedResponse<Organization>>(),
},
setOrganizations: {
path: "/api/v1/questionnaire/{id}/set_organizations/",
method: HttpMethod.POST,
TRes: Type<PaginatedResponse<Organization>>(),
TBody: {} as { organization: string[] },
},
};

0 comments on commit edca4ef

Please sign in to comment.