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;
};