diff --git a/src/Utils/request/api.tsx b/src/Utils/request/api.tsx index 4b96be5cba7..c1ee0c6c5a7 100644 --- a/src/Utils/request/api.tsx +++ b/src/Utils/request/api.tsx @@ -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 { @@ -604,66 +603,6 @@ const routes = { }, }, - // Questionnaire Routes - questionnaire: { - list: { - path: "/api/v1/questionnaire/", - method: "GET", - TRes: Type>(), - }, - - detail: { - path: "/api/v1/questionnaire/{id}/", - method: "GET", - TRes: Type(), - }, - - create: { - path: "/api/v1/questionnaire/", - method: "POST", - TRes: Type(), - TBody: Type>(), - }, - - update: { - path: "/api/v1/questionnaire/{id}/", - method: "PUT", - TRes: Type(), - TBody: Type(), - }, - - partialUpdate: { - path: "/api/v1/questionnaire/{id}/", - method: "PATCH", - TRes: Type(), - TBody: Type>(), - }, - - delete: { - path: "/api/v1/questionnaire/{id}/", - method: "DELETE", - TRes: Type>(), - }, - - submit: { - path: "/api/v1/questionnaire/{id}/submit/", - method: "POST", - TRes: Type>(), - 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", diff --git a/src/components/Questionnaire/QuestionnaireForm.tsx b/src/components/Questionnaire/QuestionnaireForm.tsx index bb11c82ee77..278d12dcdf6 100644 --- a/src/components/Questionnaire/QuestionnaireForm.tsx +++ b/src/components/Questionnaire/QuestionnaireForm.tsx @@ -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"; @@ -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], }); diff --git a/src/components/Questionnaire/QuestionnaireSearch.tsx b/src/components/Questionnaire/QuestionnaireSearch.tsx index 23dd5965f46..fd92931c7b8 100644 --- a/src/components/Questionnaire/QuestionnaireSearch.tsx +++ b/src/components/Questionnaire/QuestionnaireSearch.tsx @@ -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; @@ -38,7 +38,7 @@ export function QuestionnaireSearch({ const { data: questionnaires, isLoading } = useQuery({ queryKey: ["questionnaires", "list", search, subjectType], - queryFn: query(routes.questionnaire.list, { + queryFn: query(questionnaireApi.list, { queryParams: { title: search, ...conditionalAttribute(!!subjectType, { diff --git a/src/components/Questionnaire/index.tsx b/src/components/Questionnaire/index.tsx index 288bd644623..3e3386f8cc7 100644 --- a/src/components/Questionnaire/index.tsx +++ b/src/components/Questionnaire/index.tsx @@ -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 ; diff --git a/src/components/Questionnaire/show.tsx b/src/components/Questionnaire/show.tsx index 1b266c51058..814b65b457a 100644 --- a/src/components/Questionnaire/show.tsx +++ b/src/components/Questionnaire/show.tsx @@ -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"; @@ -66,7 +66,7 @@ export function QuestionnaireShow({ id }: QuestionnaireShowProps) { data: questionnaire, loading, error, - } = useQuery(routes.questionnaire.detail, { + } = useQuery(questionnaireApi.detail, { pathParams: { id }, }); diff --git a/src/types/questionnaire/questionnaireApi.ts b/src/types/questionnaire/questionnaireApi.ts new file mode 100644 index 00000000000..f7e7e8467ae --- /dev/null +++ b/src/types/questionnaire/questionnaireApi.ts @@ -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>(), + }, + + detail: { + path: "/api/v1/questionnaire/{id}/", + method: HttpMethod.GET, + TRes: Type(), + }, + + create: { + path: "/api/v1/questionnaire/", + method: HttpMethod.POST, + TRes: Type(), + TBody: Type>(), + }, + + update: { + path: "/api/v1/questionnaire/{id}/", + method: HttpMethod.PUT, + TRes: Type(), + TBody: Type(), + }, + + partialUpdate: { + path: "/api/v1/questionnaire/{id}/", + method: HttpMethod.PATCH, + TRes: Type(), + TBody: Type>(), + }, + + delete: { + path: "/api/v1/questionnaire/{id}/", + method: HttpMethod.DELETE, + TRes: Type>(), + }, + + submit: { + path: "/api/v1/questionnaire/{id}/submit/", + method: HttpMethod.POST, + TRes: Type>(), + 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>(), + }, + setOrganizations: { + path: "/api/v1/questionnaire/{id}/set_organizations/", + method: HttpMethod.POST, + TRes: Type>(), + TBody: {} as { organization: string[] }, + }, +};