From a0183bb7a6ff96b407654322646a2254418afde0 Mon Sep 17 00:00:00 2001 From: Abhimanyu Rajeesh <63541653+abhimanyurajeesh@users.noreply.github.com> Date: Fri, 17 Jan 2025 15:58:36 +0530 Subject: [PATCH 1/6] Refactor questionnaire response and migrated to TanStack's query (#9995) --- public/locale/en.json | 1 + .../QuestionnaireResponseView.tsx | 16 ++++++++-------- .../Questionnaire/QuestionnaireEditor.tsx | 15 +++++++++------ .../Questionnaire/QuestionnaireForm.tsx | 15 +++++++++------ src/components/Questionnaire/index.tsx | 10 +++++++--- src/hooks/useQuestionnaireOptions.ts | 2 +- 6 files changed, 35 insertions(+), 24 deletions(-) diff --git a/public/locale/en.json b/public/locale/en.json index f7dfa3bb5b7..10486c83b99 100644 --- a/public/locale/en.json +++ b/public/locale/en.json @@ -976,6 +976,7 @@ "error_fetching_slots_data": "Error while fetching slots data", "error_fetching_user_data": "Error while fetching user data", "error_fetching_user_details": "Error while fetching user details: ", + "error_loading_questionnaire_response": "Error loading questionnaire response", "error_sending_otp": "Error while sending OTP, Please try again later", "error_updating_encounter": "Error to Updating Encounter", "error_verifying_otp": "Error while verifying OTP, Please request a new OTP", diff --git a/src/components/Facility/ConsultationDetails/QuestionnaireResponseView.tsx b/src/components/Facility/ConsultationDetails/QuestionnaireResponseView.tsx index 679b8c21b24..73cf60a63fe 100644 --- a/src/components/Facility/ConsultationDetails/QuestionnaireResponseView.tsx +++ b/src/components/Facility/ConsultationDetails/QuestionnaireResponseView.tsx @@ -1,3 +1,4 @@ +import { useQuery } from "@tanstack/react-query"; import { useTranslation } from "react-i18next"; import CareIcon from "@/CAREUI/icons/CareIcon"; @@ -9,28 +10,27 @@ import { Skeleton } from "@/components/ui/skeleton"; import Page from "@/components/Common/Page"; import routes from "@/Utils/request/api"; -import useQuery from "@/Utils/request/useQuery"; +import query from "@/Utils/request/query"; import { formatDateTime } from "@/Utils/utils"; import { QuestionnaireResponse as Response } from "@/types/questionnaire/form"; import { Question } from "@/types/questionnaire/question"; export default function QuestionnaireResponseView({ responseId, - patientId, }: { responseId: string; patientId: string; }) { const { t } = useTranslation(); - const { data: formResponse, loading } = useQuery( - routes.getQuestionnaireResponse, - { + const { data: formResponse, isLoading } = useQuery({ + queryKey: ["getQuestionnaireResponse", patientId, responseId], + queryFn: query(routes.getQuestionnaireResponse, { pathParams: { patientId, responseId }, - }, - ); + }), + }); - if (loading) { + if (isLoading) { return (
diff --git a/src/components/Questionnaire/QuestionnaireEditor.tsx b/src/components/Questionnaire/QuestionnaireEditor.tsx index 5e49cca2579..28a1cbb0049 100644 --- a/src/components/Questionnaire/QuestionnaireEditor.tsx +++ b/src/components/Questionnaire/QuestionnaireEditor.tsx @@ -1,5 +1,5 @@ import { DragDropContext, Draggable, Droppable } from "@hello-pangea/dnd"; -import { useMutation } from "@tanstack/react-query"; +import { useMutation, useQuery } from "@tanstack/react-query"; import { useNavigate } from "raviger"; import { useEffect, useState } from "react"; import { toast } from "sonner"; @@ -29,7 +29,7 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Textarea } from "@/components/ui/textarea"; import mutate from "@/Utils/request/mutate"; -import useQuery from "@/Utils/request/useQuery"; +import query from "@/Utils/request/query"; import { AnswerOption, EnableWhen, @@ -60,10 +60,13 @@ export default function QuestionnaireEditor({ id }: QuestionnaireEditorProps) { const { data: initialQuestionnaire, - loading, + isLoading, error, - } = useQuery(questionnaireApi.detail, { - pathParams: { id }, + } = useQuery({ + queryKey: ["questionnaireDetail", id], + queryFn: query(questionnaireApi.detail, { + pathParams: { id }, + }), }); const { mutate: updateQuestionnaire, isPending } = useMutation({ @@ -87,7 +90,7 @@ export default function QuestionnaireEditor({ id }: QuestionnaireEditorProps) { } }, [initialQuestionnaire]); - if (loading) return ; + if (isLoading) return ; if (error) { return ( diff --git a/src/components/Questionnaire/QuestionnaireForm.tsx b/src/components/Questionnaire/QuestionnaireForm.tsx index a3408990e37..a5b89383b8e 100644 --- a/src/components/Questionnaire/QuestionnaireForm.tsx +++ b/src/components/Questionnaire/QuestionnaireForm.tsx @@ -1,4 +1,4 @@ -import { useMutation } from "@tanstack/react-query"; +import { useMutation, useQuery } from "@tanstack/react-query"; import { t } from "i18next"; import { useNavigationPrompt } from "raviger"; import { useEffect, useState } from "react"; @@ -16,7 +16,7 @@ import Loading from "@/components/Common/Loading"; import { PLUGIN_Component } from "@/PluginEngine"; import routes from "@/Utils/request/api"; import mutate from "@/Utils/request/mutate"; -import useQuery from "@/Utils/request/useQuery"; +import query from "@/Utils/request/query"; import { DetailedValidationError, QuestionValidationError, @@ -74,11 +74,14 @@ export function QuestionnaireForm({ const { data: questionnaireData, - loading: isQuestionnaireLoading, + isLoading: isQuestionnaireLoading, error: questionnaireError, - } = useQuery(questionnaireApi.detail, { - pathParams: { id: questionnaireSlug ?? "" }, - prefetch: !!questionnaireSlug && !FIXED_QUESTIONNAIRES[questionnaireSlug], + } = useQuery({ + queryKey: ["questionnaireDetail", questionnaireSlug], + queryFn: query(questionnaireApi.detail, { + pathParams: { id: questionnaireSlug ?? "" }, + }), + enabled: !!questionnaireSlug && !FIXED_QUESTIONNAIRES[questionnaireSlug], }); const { mutate: submitBatch, isPending } = useMutation({ diff --git a/src/components/Questionnaire/index.tsx b/src/components/Questionnaire/index.tsx index 8a1f0dea4f5..a1843a4ccda 100644 --- a/src/components/Questionnaire/index.tsx +++ b/src/components/Questionnaire/index.tsx @@ -1,9 +1,10 @@ +import { useQuery } from "@tanstack/react-query"; import { useNavigate } from "raviger"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; -import useQuery from "@/Utils/request/useQuery"; +import query from "@/Utils/request/query"; import { QuestionnaireDetail } from "@/types/questionnaire/questionnaire"; import questionnaireApi from "@/types/questionnaire/questionnaireApi"; @@ -11,9 +12,12 @@ import Loading from "../Common/Loading"; export function QuestionnaireList() { const navigate = useNavigate(); - const { data: response, loading } = useQuery(questionnaireApi.list); + const { data: response, isLoading } = useQuery({ + queryKey: ["questionnaires"], + queryFn: query(questionnaireApi.list), + }); - if (loading) { + if (isLoading) { return ; } diff --git a/src/hooks/useQuestionnaireOptions.ts b/src/hooks/useQuestionnaireOptions.ts index 73a0724865e..1b0852109bb 100644 --- a/src/hooks/useQuestionnaireOptions.ts +++ b/src/hooks/useQuestionnaireOptions.ts @@ -17,7 +17,7 @@ const DEFAULT_OPTIONS: EditQuestionnaireOption[] = [ export default function useQuestionnaireOptions(slug: string) { const { data } = useQuery({ - queryKey: ["questionnaire", slug] as const, + queryKey: ["questionnaires", slug] as const, queryFn: query(questionnaireApi.list, { queryParams: { tag_slug: slug, From d5c106f5ef31528444513b3cd3e928d3e22406a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Jan 2025 15:59:38 +0530 Subject: [PATCH 2/6] Bump cypress from 13.17.0 to 14.0.0 (#10028) Bumps [cypress](https://github.com/cypress-io/cypress) from 13.17.0 to 14.0.0. - [Release notes](https://github.com/cypress-io/cypress/releases) - [Changelog](https://github.com/cypress-io/cypress/blob/develop/CHANGELOG.md) - [Commits](https://github.com/cypress-io/cypress/compare/v13.17.0...v14.0.0) --- updated-dependencies: - dependency-name: cypress dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 10 +++++----- package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9f3fc288d33..2f03acbcaef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -51,7 +51,7 @@ "clsx": "^2.1.1", "cmdk": "^1.0.4", "cross-env": "^7.0.3", - "cypress": "^13.17.0", + "cypress": "^14.0.0", "date-fns": "^3.6.0", "dayjs": "^1.11.13", "echarts": "^5.5.1", @@ -8687,9 +8687,9 @@ "license": "MIT" }, "node_modules/cypress": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.17.0.tgz", - "integrity": "sha512-5xWkaPurwkIljojFidhw8lFScyxhtiFHl/i/3zov+1Z5CmY4t9tjIdvSXfu82Y3w7wt0uR9KkucbhkVvJZLQSA==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-14.0.0.tgz", + "integrity": "sha512-kEGqQr23so5IpKeg/dp6GVi7RlHx1NmW66o2a2Q4wk9gRaAblLZQSiZJuDI8UMC4LlG5OJ7Q6joAiqTrfRNbTw==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -8741,7 +8741,7 @@ "cypress": "bin/cypress" }, "engines": { - "node": "^16.0.0 || ^18.0.0 || >=20.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" } }, "node_modules/cypress-localstorage-commands": { diff --git a/package.json b/package.json index 80a70336867..96b8f0675f8 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "clsx": "^2.1.1", "cmdk": "^1.0.4", "cross-env": "^7.0.3", - "cypress": "^13.17.0", + "cypress": "^14.0.0", "date-fns": "^3.6.0", "dayjs": "^1.11.13", "echarts": "^5.5.1", From c5c52b6698c93001d8e0fd0e0151f8cb47b1d40c Mon Sep 17 00:00:00 2001 From: Kamishetty Rishith <119791436+Rishith25@users.noreply.github.com> Date: Fri, 17 Jan 2025 16:16:34 +0530 Subject: [PATCH 3/6] Improve Care crash page redirection (#10025) --- src/components/ErrorPages/DefaultErrorPage.tsx | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/components/ErrorPages/DefaultErrorPage.tsx b/src/components/ErrorPages/DefaultErrorPage.tsx index bb0efed1580..f7074726236 100644 --- a/src/components/ErrorPages/DefaultErrorPage.tsx +++ b/src/components/ErrorPages/DefaultErrorPage.tsx @@ -2,6 +2,8 @@ import { useEffect } from "react"; import { useTranslation } from "react-i18next"; import { toast } from "sonner"; +import useAppHistory from "@/hooks/useAppHistory"; + import { Button } from "../ui/button"; type ErrorType = "PAGE_NOT_FOUND" | "PAGE_LOAD_ERROR" | "CUSTOM_ERROR"; @@ -18,6 +20,7 @@ export default function ErrorPage({ ...props }: ErrorPageProps) { const { t } = useTranslation(); + const { goBack } = useAppHistory(); useEffect(() => { toast.dismiss(); @@ -56,10 +59,11 @@ export default function ErrorPage({

diff --git a/src/pluginTypes.ts b/src/pluginTypes.ts index 59d1d6f314d..36d2bbb0467 100644 --- a/src/pluginTypes.ts +++ b/src/pluginTypes.ts @@ -10,6 +10,7 @@ import { Patient } from "@/types/emr/newPatient"; import { AppRoutes } from "./Routers/AppRouter"; import { QuestionnaireFormState } from "./components/Questionnaire/QuestionnaireForm"; import { pluginMap } from "./pluginMap"; +import { FacilityData } from "./types/facility/facility"; export type DoctorConnectButtonComponentType = React.FC<{ user: UserAssignedModel; @@ -30,6 +31,11 @@ export type PatientInfoCardActionsComponentType = React.FC<{ className?: string; }>; +export type FacilityHomeActionsComponentType = React.FC<{ + facility: FacilityData; + className?: string; +}>; + export type PatientRegistrationFormComponentType = React.FC<{ form: UseFormReturn; // eslint-disable-line @typescript-eslint/no-explicit-any patientId?: string; @@ -41,6 +47,7 @@ export type SupportedPluginComponents = { Scribe: ScribeComponentType; PatientHomeActions: PatientHomeActionsComponentType; PatientInfoCardActions: PatientInfoCardActionsComponentType; + FacilityHomeActions: FacilityHomeActionsComponentType; PatientRegistrationForm: PatientRegistrationFormComponentType; };