From 52d05ebe6a0474f3583e49025c5f8ce4bab7b75e Mon Sep 17 00:00:00 2001 From: Shivank Kacker Date: Thu, 3 Oct 2024 00:43:29 +0530 Subject: [PATCH 1/7] Updated README to include info on translations (#8690) --- README.md | 4 ++++ src/Locale/TRANSLATION_CONTRIBUTION.md | 22 +++------------------- 2 files changed, 7 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index fd5328150f2..73ce06815d1 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,10 @@ Authenticate to staging API with any of the following credentials - Once the code review is done, the PR will be marked with a "Needs Testing" label where it'll be queued for QA testing. - Once tested, the PR would be marked with a "Tested" label and would be queued for merge. +### Translations + +All strings must be encased in i18n translations. New translation strings must be specified in `src`->`Locale`->`en`. Do not add translations for languages other than english through pull requests. Other language translations can be contributed through [Crowdin](https://crowdin.com/project/ohccarefe) + ### Testing To ensure the quality of our pull requests, we use a variety of tools: diff --git a/src/Locale/TRANSLATION_CONTRIBUTION.md b/src/Locale/TRANSLATION_CONTRIBUTION.md index c262215c643..f3150ae8fc0 100644 --- a/src/Locale/TRANSLATION_CONTRIBUTION.md +++ b/src/Locale/TRANSLATION_CONTRIBUTION.md @@ -1,29 +1,13 @@ -# Contributing Translation +# Contributing Translations -### For adding a new language - -
+## Adding a new language - Open the Terminal and `cd` to `care_fe/src/Locale` - Run the command `node update_locale.js ` Eg: `node update_locale.js ml` for Malayalam -- The command will create a directory with default locale files and you can start translating them. +- The command will create a directory with default locale files. - After it's done, add the new language to `care_fe/src/Locale/config.ts` file. -### For improving the existing language - -
- -- Open the Terminal and `cd` to `care_fe/src/Locale` -- Run the command `node update_locale.js ` - Eg: `node update_locale.js ml` for Malayalam -- The command will update the new keys which are yet to be translated. -- You can now start translating or improving it. - ## Note -⚠ - If you are adding a new word, then please add it to the Default Locale (EN) first and then proceed with your language. - -⚠ - After translating, have a look at its appearance. It may be overflowing or cause some UI breaks. Try to adjust the words such that it fits the UI. - ⚠ - Try to separate the translation files for each module like `Facility`, `Patient` and more. Don't dump all the keys in one JSON file. From ed31b71f9474d150e99024337d70025b2c311298 Mon Sep 17 00:00:00 2001 From: Aditya Jindal Date: Thu, 3 Oct 2024 01:11:12 +0530 Subject: [PATCH 2/7] Improve success bed notification for bed creation api (#8632) --- src/Components/Facility/AddBedForm.tsx | 3 ++- src/Locale/en/Bed.json | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Components/Facility/AddBedForm.tsx b/src/Components/Facility/AddBedForm.tsx index 0a612fa776b..047549bd652 100644 --- a/src/Components/Facility/AddBedForm.tsx +++ b/src/Components/Facility/AddBedForm.tsx @@ -127,7 +127,8 @@ export const AddBedForm = ({ facilityId, locationId, bedId }: Props) => { const { res } = await request(routes.createFacilityBed, { body: { ...data, facility: facilityId, location: locationId }, }); - res?.ok && onSuccess("Bed(s) created successfully"); + res?.ok && + onSuccess(t("bed_created_notification", { count: numberOfBeds })); } }; diff --git a/src/Locale/en/Bed.json b/src/Locale/en/Bed.json index 269658be774..327a4533353 100644 --- a/src/Locale/en/Bed.json +++ b/src/Locale/en/Bed.json @@ -9,5 +9,7 @@ "bed_type": "Bed Type", "make_multiple_beds_label": "Do you want to make multiple beds?", "number_of_beds": "Number of beds", - "number_of_beds_out_of_range_error": "Number of beds cannot be greater than 100" + "number_of_beds_out_of_range_error": "Number of beds cannot be greater than 100", + "bed_created_notification_one": "{{count}} Bed created successfully", + "bed_created_notification_other": "{{count}} Beds created successfully" } From cf8f87b34530b97b8977bbe2dc5dc1cbd42f9f1f Mon Sep 17 00:00:00 2001 From: Shivank Kacker Date: Thu, 3 Oct 2024 08:16:45 +0530 Subject: [PATCH 3/7] Enable features from backend feature flags (#8512) --- .example.env | 1 - care.config.ts | 4 -- src/App.tsx | 11 ++-- src/Components/Facility/models.tsx | 2 + src/Components/Patient/DailyRounds.tsx | 1 + src/Components/Scribe/Scribe.tsx | 13 ++++- src/Components/Users/models.tsx | 2 + src/Integrations/index.tsx | 4 +- src/Utils/featureFlags.tsx | 78 ++++++++++++++++++++++++++ 9 files changed, 102 insertions(+), 14 deletions(-) create mode 100644 src/Utils/featureFlags.tsx diff --git a/.example.env b/.example.env index dd4a8865878..127db15e710 100644 --- a/.example.env +++ b/.example.env @@ -69,7 +69,6 @@ REACT_STILL_WATCHING_PROMPT_DURATION= # Feature flags REACT_ENABLE_HCX=true REACT_ENABLE_ABDM=true -REACT_ENABLE_SCRIBE=true REACT_WARTIME_SHIFTING=true # JWT token refresh interval (in milliseconds) (default: 5 minutes) diff --git a/care.config.ts b/care.config.ts index 4341a03dd48..e3effeca1b0 100644 --- a/care.config.ts +++ b/care.config.ts @@ -103,10 +103,6 @@ const careConfig = { abdm: { enabled: (env.REACT_ENABLE_ABDM ?? "true") === "true", }, - - scribe: { - enabled: env.REACT_ENABLE_SCRIBE === "true", - }, } as const; export default careConfig; diff --git a/src/App.tsx b/src/App.tsx index 2e7f185f80b..6c6d5255b4d 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,10 +1,11 @@ import { Suspense } from "react"; import Routers from "./Routers"; import ThemedFavicon from "./CAREUI/misc/ThemedFavicon"; -import Intergrations from "./Integrations"; +import Integrations from "./Integrations"; import Loading from "./Components/Common/Loading"; import HistoryAPIProvider from "./Providers/HistoryAPIProvider"; import AuthUserProvider from "./Providers/AuthUserProvider"; +import { FeatureFlagsProvider } from "./Utils/featureFlags"; const App = () => { return ( @@ -12,12 +13,14 @@ const App = () => { }> - + + + {/* Integrations */} - - + + ); diff --git a/src/Components/Facility/models.tsx b/src/Components/Facility/models.tsx index 97d81674658..56c70f2ac94 100644 --- a/src/Components/Facility/models.tsx +++ b/src/Components/Facility/models.tsx @@ -7,6 +7,7 @@ import { PATIENT_NOTES_THREADS, UserRole, } from "../../Common/constants"; +import { FeatureFlag } from "../../Utils/featureFlags"; import { ConsultationDiagnosis, CreateDiagnosis } from "../Diagnosis/types"; import { AssignedToObjectModel, @@ -80,6 +81,7 @@ export interface FacilityModel { local_body?: number; ward?: number; pincode?: string; + facility_flags?: FeatureFlag[]; latitude?: string; longitude?: string; kasp_empanelled?: boolean; diff --git a/src/Components/Patient/DailyRounds.tsx b/src/Components/Patient/DailyRounds.tsx index c0cd7fe803c..ef1281fb62b 100644 --- a/src/Components/Patient/DailyRounds.tsx +++ b/src/Components/Patient/DailyRounds.tsx @@ -542,6 +542,7 @@ export const DailyRounds = (props: any) => { >
{ setDiagnosisSuggestions([]); diff --git a/src/Components/Scribe/Scribe.tsx b/src/Components/Scribe/Scribe.tsx index d952ff7b1b2..384bf519a04 100644 --- a/src/Components/Scribe/Scribe.tsx +++ b/src/Components/Scribe/Scribe.tsx @@ -7,8 +7,8 @@ import * as Notify from "../../Utils/Notifications"; import request from "../../Utils/request/request"; import { UserModel } from "../Users/models"; import useSegmentedRecording from "../../Utils/useSegmentedRecorder"; -import careConfig from "@careConfig"; import uploadFile from "../../Utils/request/uploadFile"; +import { useFeatureFlags } from "../../Utils/featureFlags"; interface FieldOption { id: string | number; @@ -52,6 +52,7 @@ export type ScribeModel = { }; interface ScribeProps { + facilityId: string; form: ScribeForm; existingData?: { [key: string]: any }; onFormUpdate: (fields: any) => void; @@ -62,7 +63,11 @@ const SCRIBE_FILE_TYPES = { SCRIBE: 1, }; -export const Scribe: React.FC = ({ form, onFormUpdate }) => { +export const Scribe: React.FC = ({ + form, + onFormUpdate, + facilityId, +}) => { const [open, setOpen] = useState(false); const [_progress, setProgress] = useState(0); const [stage, setStage] = useState("start"); @@ -80,6 +85,8 @@ export const Scribe: React.FC = ({ form, onFormUpdate }) => { const stageRef = useRef(stage); const [fields, setFields] = useState([]); + const featureFlags = useFeatureFlags(facilityId); + useEffect(() => { const loadFields = async () => { const fields = await form.fields(); @@ -544,7 +551,7 @@ export const Scribe: React.FC = ({ form, onFormUpdate }) => { } } - if (!careConfig.scribe.enabled) return null; + if (!featureFlags.includes("SCRIBE_ENABLED")) return null; return ( diff --git a/src/Components/Users/models.tsx b/src/Components/Users/models.tsx index 1bbe494b9ed..790826022b5 100644 --- a/src/Components/Users/models.tsx +++ b/src/Components/Users/models.tsx @@ -1,4 +1,5 @@ import { GENDER_TYPES, UserRole } from "../../Common/constants"; +import { FeatureFlag } from "../../Utils/featureFlags"; import { DistrictModel, LocalBodyModel, StateModel } from "../Facility/models"; interface HomeFacilityObjectModel { @@ -44,6 +45,7 @@ export type UserModel = UserBareMinimum & { doctor_experience_commenced_on?: string; doctor_medical_council_registration?: string; weekly_working_hours?: string | null; + user_flags?: FeatureFlag[]; }; export type UserBaseModel = { diff --git a/src/Integrations/index.tsx b/src/Integrations/index.tsx index aeb0399a452..9b2b1e156fd 100644 --- a/src/Integrations/index.tsx +++ b/src/Integrations/index.tsx @@ -1,6 +1,6 @@ import Sentry from "./Sentry"; import Plausible from "./Plausible"; -const Intergrations = { Sentry, Plausible }; +const Integrations = { Sentry, Plausible }; -export default Intergrations; +export default Integrations; diff --git a/src/Utils/featureFlags.tsx b/src/Utils/featureFlags.tsx new file mode 100644 index 00000000000..739d49e821a --- /dev/null +++ b/src/Utils/featureFlags.tsx @@ -0,0 +1,78 @@ +import { createContext, useContext, useState, useEffect } from "react"; +import useQuery from "./request/useQuery"; +import routes from "../Redux/api"; +import useAuthUser from "../Common/hooks/useAuthUser"; +import { FacilityModel } from "../Components/Facility/models"; + +export type FeatureFlag = "SCRIBE_ENABLED"; // "HCX_ENABLED" | "ABDM_ENABLED" | + +export interface FeatureFlagsResponse { + user_flags: FeatureFlag[]; + facility_flags: { + facility: string; + features: FeatureFlag[]; + }[]; +} + +const defaultFlags: FeatureFlag[] = []; + +const FeatureFlagsContext = createContext({ + user_flags: defaultFlags, + facility_flags: [], +}); + +export const FeatureFlagsProvider = (props: { children: React.ReactNode }) => { + const [featureFlags, setFeatureFlags] = useState({ + user_flags: defaultFlags, + facility_flags: [], + }); + + const user = useAuthUser(); + + useEffect(() => { + if (user.user_flags) { + setFeatureFlags((ff) => ({ + ...ff, + user_flags: [...defaultFlags, ...(user.user_flags || [])], + })); + } + }, [user]); + + return ( + + {props.children} + + ); +}; + +export const useFeatureFlags = (facility?: FacilityModel | string) => { + const [facilityObject, setFacilityObject] = useState< + FacilityModel | undefined + >(typeof facility === "string" ? undefined : facility); + + const context = useContext(FeatureFlagsContext); + if (context === undefined) { + throw new Error( + "useFeatureFlags must be used within a FeatureFlagsProvider", + ); + } + + const facilityQuery = useQuery(routes.getPermittedFacility, { + pathParams: { + id: typeof facility === "string" ? facility : "", + }, + prefetch: false, + silent: true, + onResponse: (res) => { + setFacilityObject(res.data); + }, + }); + + const facilityFlags = facilityObject?.facility_flags || []; + + useEffect(() => { + facilityQuery.refetch(); + }, [facility]); + + return [...context.user_flags, ...facilityFlags]; +}; From 4a9f52f74146498e9668d39c0a6de9bbd0bcdd0e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 16:27:43 +0530 Subject: [PATCH 4/7] Bump @sentry/browser from 8.29.0 to 8.33.0 (#8696) --- package-lock.json | 194 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 98 insertions(+), 98 deletions(-) diff --git a/package-lock.json b/package-lock.json index 051c12bd2b4..5bb1a8b35e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "@headlessui/react": "^2.1.2", "@pnotify/core": "^5.2.0", "@pnotify/mobile": "^5.2.0", - "@sentry/browser": "^8.29.0", + "@sentry/browser": "^8.33.0", "@yudiel/react-qr-scanner": "^2.0.0-beta.3", "axios": "^1.7.7", "bowser": "^2.11.0", @@ -3765,178 +3765,178 @@ ] }, "node_modules/@sentry-internal/browser-utils": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.29.0.tgz", - "integrity": "sha512-6HpyQkaqPvK6Lnigjlarq/LDYgXT2OBNf24RK7z0ipJSxSIpmtelfzHbnwWYnypNDXfTDdPm97fZEenQHryYJA==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.33.0.tgz", + "integrity": "sha512-zwjmD+XI3pgxxiqKGLXYDGSd+zfO7az9zzbLn1le8Vv9cRL2lZyMLcwiwEaTpwz3B0pPONeDZMT8+bzMGRs8zw==", "dependencies": { - "@sentry/core": "8.29.0", - "@sentry/types": "8.29.0", - "@sentry/utils": "8.29.0" + "@sentry/core": "8.33.0", + "@sentry/types": "8.33.0", + "@sentry/utils": "8.33.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/browser-utils/node_modules/@sentry/core": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.29.0.tgz", - "integrity": "sha512-scMbZaJ0Ov8NPgWn86EdjhyTLrhvRVbTxjg0imJAvhIvRbblH3xyqye/17Qnk2fOp8TNDOl7TBZHi0NCFQ5HUw==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.33.0.tgz", + "integrity": "sha512-618PQGHQLBVCpAq1s+e/rpIUaLUnj19IPUgn97rUGXLLna8ETIAoyQoG70wz4q9niw4Z4GlS5kZNrael2O3+2w==", "dependencies": { - "@sentry/types": "8.29.0", - "@sentry/utils": "8.29.0" + "@sentry/types": "8.33.0", + "@sentry/utils": "8.33.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/browser-utils/node_modules/@sentry/types": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.29.0.tgz", - "integrity": "sha512-j4gX3ctzgD4xVWllXAhm6M+kHFEvrFoUPFq60X/pgkjsWCocGuhtNfB0rW43ICG8hCnlz8IYl7O7b8V8qY7SPg==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.33.0.tgz", + "integrity": "sha512-V/A+72ZdnfGtXeXIpz1kUo3LRdq3WKEYYFUR2RKpCdPh9yeOrHq6u/rmzTWx49+om0yhZN+JhVoxDzt75UoFRg==", "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/browser-utils/node_modules/@sentry/utils": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.29.0.tgz", - "integrity": "sha512-nb93/m3SjQChQJFqJj3oNW3Rz/12yrT7jypTCire3c2hpYWG2uR5n8VY9UUMTA6HLNvdom6tckK7p3bXGXlF0w==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.33.0.tgz", + "integrity": "sha512-TdwtGdevJij2wq2x/hDUr+x5TXt47ZhWxZ8zluai/lnIDTUB3Xs/L9yHtj1J+H9hr8obkMASE9IanUrWXzrP6Q==", "dependencies": { - "@sentry/types": "8.29.0" + "@sentry/types": "8.33.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/feedback": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.29.0.tgz", - "integrity": "sha512-yAL5YMEFk4XaeVRUGEguydahRzaQrNPAaWRv6k+XRzCv9CGBhxb14KXQc9X/penlauMFcDfgelCPKcTqcf6wDw==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.33.0.tgz", + "integrity": "sha512-KSW/aiNgmJc8PDl2NsM+ONvGure4tPaluj7O1Nw+947Dh8W6CJnQ9srB7xPyoYYWyQW8Hyl1vzxY9W0J+fjlhA==", "dependencies": { - "@sentry/core": "8.29.0", - "@sentry/types": "8.29.0", - "@sentry/utils": "8.29.0" + "@sentry/core": "8.33.0", + "@sentry/types": "8.33.0", + "@sentry/utils": "8.33.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/feedback/node_modules/@sentry/core": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.29.0.tgz", - "integrity": "sha512-scMbZaJ0Ov8NPgWn86EdjhyTLrhvRVbTxjg0imJAvhIvRbblH3xyqye/17Qnk2fOp8TNDOl7TBZHi0NCFQ5HUw==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.33.0.tgz", + "integrity": "sha512-618PQGHQLBVCpAq1s+e/rpIUaLUnj19IPUgn97rUGXLLna8ETIAoyQoG70wz4q9niw4Z4GlS5kZNrael2O3+2w==", "dependencies": { - "@sentry/types": "8.29.0", - "@sentry/utils": "8.29.0" + "@sentry/types": "8.33.0", + "@sentry/utils": "8.33.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/feedback/node_modules/@sentry/types": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.29.0.tgz", - "integrity": "sha512-j4gX3ctzgD4xVWllXAhm6M+kHFEvrFoUPFq60X/pgkjsWCocGuhtNfB0rW43ICG8hCnlz8IYl7O7b8V8qY7SPg==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.33.0.tgz", + "integrity": "sha512-V/A+72ZdnfGtXeXIpz1kUo3LRdq3WKEYYFUR2RKpCdPh9yeOrHq6u/rmzTWx49+om0yhZN+JhVoxDzt75UoFRg==", "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/feedback/node_modules/@sentry/utils": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.29.0.tgz", - "integrity": "sha512-nb93/m3SjQChQJFqJj3oNW3Rz/12yrT7jypTCire3c2hpYWG2uR5n8VY9UUMTA6HLNvdom6tckK7p3bXGXlF0w==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.33.0.tgz", + "integrity": "sha512-TdwtGdevJij2wq2x/hDUr+x5TXt47ZhWxZ8zluai/lnIDTUB3Xs/L9yHtj1J+H9hr8obkMASE9IanUrWXzrP6Q==", "dependencies": { - "@sentry/types": "8.29.0" + "@sentry/types": "8.33.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/replay": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.29.0.tgz", - "integrity": "sha512-Xgv/eYucsm7GaGKms2ClQ02NpD07MxjoTjp1/vYZm0H4Q08dVphVZrQp7hL1oX/VD9mb5SFyyKuuIRqIu7S8RA==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.33.0.tgz", + "integrity": "sha512-GFBaDA4yhlEf3wTXOVXnJVG/diuKxeqZuXcuhsAwJb+YcFR0NhgsRn3wIGuYOZZF8GBXzx9PFnb9yIuFgx5Nbw==", "dependencies": { - "@sentry-internal/browser-utils": "8.29.0", - "@sentry/core": "8.29.0", - "@sentry/types": "8.29.0", - "@sentry/utils": "8.29.0" + "@sentry-internal/browser-utils": "8.33.0", + "@sentry/core": "8.33.0", + "@sentry/types": "8.33.0", + "@sentry/utils": "8.33.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/replay-canvas": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.29.0.tgz", - "integrity": "sha512-W2YbZRvp2lYC50V51fNLcnoIiK1Km4vSc+v6SL7c//lv2qpyumoUAAIDKY+14s8Lgt1RsR6rfZhfheD4O/6WSQ==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.33.0.tgz", + "integrity": "sha512-9fEhMP+gQYQrtn/SQd1Vd7U7emTSGBpLKc5h5f0iV0yDmjYAhNVbq4RgPTYAgnBEcdVo3qgboL6UIz9Dv+dYRQ==", "dependencies": { - "@sentry-internal/replay": "8.29.0", - "@sentry/core": "8.29.0", - "@sentry/types": "8.29.0", - "@sentry/utils": "8.29.0" + "@sentry-internal/replay": "8.33.0", + "@sentry/core": "8.33.0", + "@sentry/types": "8.33.0", + "@sentry/utils": "8.33.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/replay-canvas/node_modules/@sentry/core": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.29.0.tgz", - "integrity": "sha512-scMbZaJ0Ov8NPgWn86EdjhyTLrhvRVbTxjg0imJAvhIvRbblH3xyqye/17Qnk2fOp8TNDOl7TBZHi0NCFQ5HUw==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.33.0.tgz", + "integrity": "sha512-618PQGHQLBVCpAq1s+e/rpIUaLUnj19IPUgn97rUGXLLna8ETIAoyQoG70wz4q9niw4Z4GlS5kZNrael2O3+2w==", "dependencies": { - "@sentry/types": "8.29.0", - "@sentry/utils": "8.29.0" + "@sentry/types": "8.33.0", + "@sentry/utils": "8.33.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/replay-canvas/node_modules/@sentry/types": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.29.0.tgz", - "integrity": "sha512-j4gX3ctzgD4xVWllXAhm6M+kHFEvrFoUPFq60X/pgkjsWCocGuhtNfB0rW43ICG8hCnlz8IYl7O7b8V8qY7SPg==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.33.0.tgz", + "integrity": "sha512-V/A+72ZdnfGtXeXIpz1kUo3LRdq3WKEYYFUR2RKpCdPh9yeOrHq6u/rmzTWx49+om0yhZN+JhVoxDzt75UoFRg==", "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/replay-canvas/node_modules/@sentry/utils": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.29.0.tgz", - "integrity": "sha512-nb93/m3SjQChQJFqJj3oNW3Rz/12yrT7jypTCire3c2hpYWG2uR5n8VY9UUMTA6HLNvdom6tckK7p3bXGXlF0w==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.33.0.tgz", + "integrity": "sha512-TdwtGdevJij2wq2x/hDUr+x5TXt47ZhWxZ8zluai/lnIDTUB3Xs/L9yHtj1J+H9hr8obkMASE9IanUrWXzrP6Q==", "dependencies": { - "@sentry/types": "8.29.0" + "@sentry/types": "8.33.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/replay/node_modules/@sentry/core": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.29.0.tgz", - "integrity": "sha512-scMbZaJ0Ov8NPgWn86EdjhyTLrhvRVbTxjg0imJAvhIvRbblH3xyqye/17Qnk2fOp8TNDOl7TBZHi0NCFQ5HUw==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.33.0.tgz", + "integrity": "sha512-618PQGHQLBVCpAq1s+e/rpIUaLUnj19IPUgn97rUGXLLna8ETIAoyQoG70wz4q9niw4Z4GlS5kZNrael2O3+2w==", "dependencies": { - "@sentry/types": "8.29.0", - "@sentry/utils": "8.29.0" + "@sentry/types": "8.33.0", + "@sentry/utils": "8.33.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/replay/node_modules/@sentry/types": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.29.0.tgz", - "integrity": "sha512-j4gX3ctzgD4xVWllXAhm6M+kHFEvrFoUPFq60X/pgkjsWCocGuhtNfB0rW43ICG8hCnlz8IYl7O7b8V8qY7SPg==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.33.0.tgz", + "integrity": "sha512-V/A+72ZdnfGtXeXIpz1kUo3LRdq3WKEYYFUR2RKpCdPh9yeOrHq6u/rmzTWx49+om0yhZN+JhVoxDzt75UoFRg==", "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/replay/node_modules/@sentry/utils": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.29.0.tgz", - "integrity": "sha512-nb93/m3SjQChQJFqJj3oNW3Rz/12yrT7jypTCire3c2hpYWG2uR5n8VY9UUMTA6HLNvdom6tckK7p3bXGXlF0w==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.33.0.tgz", + "integrity": "sha512-TdwtGdevJij2wq2x/hDUr+x5TXt47ZhWxZ8zluai/lnIDTUB3Xs/L9yHtj1J+H9hr8obkMASE9IanUrWXzrP6Q==", "dependencies": { - "@sentry/types": "8.29.0" + "@sentry/types": "8.33.0" }, "engines": { "node": ">=14.18" @@ -3957,48 +3957,48 @@ } }, "node_modules/@sentry/browser": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.29.0.tgz", - "integrity": "sha512-aKTy4H/3RI0q9LIeepesjWGlGNeh4HGFfwQjzHME8gcWCQ5LSlzYX4U+hu2yp7r1Jfd9MUTFfOuuLih2HGLGsQ==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.33.0.tgz", + "integrity": "sha512-qu/g20ZskywEU8BWc4Fts1kXFFBtw1vS+XvPq7Ta9zCeRG5dlXhhYDVQ4/v4nAL/cs0o6aLCq73m109CFF0Kig==", "dependencies": { - "@sentry-internal/browser-utils": "8.29.0", - "@sentry-internal/feedback": "8.29.0", - "@sentry-internal/replay": "8.29.0", - "@sentry-internal/replay-canvas": "8.29.0", - "@sentry/core": "8.29.0", - "@sentry/types": "8.29.0", - "@sentry/utils": "8.29.0" + "@sentry-internal/browser-utils": "8.33.0", + "@sentry-internal/feedback": "8.33.0", + "@sentry-internal/replay": "8.33.0", + "@sentry-internal/replay-canvas": "8.33.0", + "@sentry/core": "8.33.0", + "@sentry/types": "8.33.0", + "@sentry/utils": "8.33.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry/browser/node_modules/@sentry/core": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.29.0.tgz", - "integrity": "sha512-scMbZaJ0Ov8NPgWn86EdjhyTLrhvRVbTxjg0imJAvhIvRbblH3xyqye/17Qnk2fOp8TNDOl7TBZHi0NCFQ5HUw==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.33.0.tgz", + "integrity": "sha512-618PQGHQLBVCpAq1s+e/rpIUaLUnj19IPUgn97rUGXLLna8ETIAoyQoG70wz4q9niw4Z4GlS5kZNrael2O3+2w==", "dependencies": { - "@sentry/types": "8.29.0", - "@sentry/utils": "8.29.0" + "@sentry/types": "8.33.0", + "@sentry/utils": "8.33.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry/browser/node_modules/@sentry/types": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.29.0.tgz", - "integrity": "sha512-j4gX3ctzgD4xVWllXAhm6M+kHFEvrFoUPFq60X/pgkjsWCocGuhtNfB0rW43ICG8hCnlz8IYl7O7b8V8qY7SPg==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.33.0.tgz", + "integrity": "sha512-V/A+72ZdnfGtXeXIpz1kUo3LRdq3WKEYYFUR2RKpCdPh9yeOrHq6u/rmzTWx49+om0yhZN+JhVoxDzt75UoFRg==", "engines": { "node": ">=14.18" } }, "node_modules/@sentry/browser/node_modules/@sentry/utils": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.29.0.tgz", - "integrity": "sha512-nb93/m3SjQChQJFqJj3oNW3Rz/12yrT7jypTCire3c2hpYWG2uR5n8VY9UUMTA6HLNvdom6tckK7p3bXGXlF0w==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.33.0.tgz", + "integrity": "sha512-TdwtGdevJij2wq2x/hDUr+x5TXt47ZhWxZ8zluai/lnIDTUB3Xs/L9yHtj1J+H9hr8obkMASE9IanUrWXzrP6Q==", "dependencies": { - "@sentry/types": "8.29.0" + "@sentry/types": "8.33.0" }, "engines": { "node": ">=14.18" diff --git a/package.json b/package.json index 62cdc8a0fb9..8eead0e45a3 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "@headlessui/react": "^2.1.2", "@pnotify/core": "^5.2.0", "@pnotify/mobile": "^5.2.0", - "@sentry/browser": "^8.29.0", + "@sentry/browser": "^8.33.0", "@yudiel/react-qr-scanner": "^2.0.0-beta.3", "axios": "^1.7.7", "bowser": "^2.11.0", From cd4cc9fe29dde9f2479a3945e7434654fd7f3a60 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:29:00 +0530 Subject: [PATCH 5/7] Bump echarts from 5.5.0 to 5.5.1 (#8524) --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5bb1a8b35e7..678e9fd9256 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "browserslist-useragent-regexp": "^4.1.3", "cross-env": "^7.0.3", "dayjs": "^1.11.11", - "echarts": "^5.5.0", + "echarts": "^5.5.1", "echarts-for-react": "^3.0.2", "events": "^3.3.0", "hi-profiles": "^1.0.6", @@ -7273,12 +7273,12 @@ } }, "node_modules/echarts": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.5.0.tgz", - "integrity": "sha512-rNYnNCzqDAPCr4m/fqyUFv7fD9qIsd50S6GDFgO1DxZhncCsNsG7IfUlAlvZe5oSEQxtsjnHiUuppzccry93Xw==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.5.1.tgz", + "integrity": "sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==", "dependencies": { "tslib": "2.3.0", - "zrender": "5.5.0" + "zrender": "5.6.0" } }, "node_modules/echarts-for-react": { @@ -19217,9 +19217,9 @@ } }, "node_modules/zrender": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.5.0.tgz", - "integrity": "sha512-O3MilSi/9mwoovx77m6ROZM7sXShR/O/JIanvzTwjN3FORfLSr81PsUGd7jlaYOeds9d8tw82oP44+3YucVo+w==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.6.0.tgz", + "integrity": "sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==", "dependencies": { "tslib": "2.3.0" } diff --git a/package.json b/package.json index 8eead0e45a3..51bbbde6c70 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "browserslist-useragent-regexp": "^4.1.3", "cross-env": "^7.0.3", "dayjs": "^1.11.11", - "echarts": "^5.5.0", + "echarts": "^5.5.1", "echarts-for-react": "^3.0.2", "events": "^3.3.0", "hi-profiles": "^1.0.6", From e44e245a4bf38d4b186070af49f227a093104bf0 Mon Sep 17 00:00:00 2001 From: Aditya Jindal Date: Thu, 3 Oct 2024 17:42:18 +0530 Subject: [PATCH 6/7] Fix: Qualification field for nurse user type (#8694) Co-authored-by: Mohammed Nihal <57055998+nihal467@users.noreply.github.com> --- cypress/e2e/users_spec/UsersCreation.cy.ts | 4 +- cypress/e2e/users_spec/UsersProfile.cy.ts | 4 +- cypress/pageobject/Users/UserProfilePage.ts | 4 +- src/Components/Users/ManageUsers.tsx | 40 +++++++++++++++---- src/Components/Users/UserAdd.tsx | 38 +++++++++++------- src/Components/Users/UserProfile.tsx | 44 ++++++++++++++------- src/Components/Users/models.tsx | 4 +- src/Locale/en/Common.json | 7 ++-- 8 files changed, 97 insertions(+), 48 deletions(-) diff --git a/cypress/e2e/users_spec/UsersCreation.cy.ts b/cypress/e2e/users_spec/UsersCreation.cy.ts index e24fdeca9e2..e245dd271ac 100644 --- a/cypress/e2e/users_spec/UsersCreation.cy.ts +++ b/cypress/e2e/users_spec/UsersCreation.cy.ts @@ -149,7 +149,7 @@ describe("User Creation", () => { userCreationPage.setInputDate("date_of_birth", "date-input", "25081999"); userCreationPage.selectDropdownOption("user_type", "Doctor"); userCreationPage.typeIntoElementById("c_password", "Test@123"); - userCreationPage.typeIntoElementById("doctor_qualification", "MBBS"); + userCreationPage.typeIntoElementById("qualification", "MBBS"); userCreationPage.typeIntoElementById("doctor_experience_commenced_on", "2"); userCreationPage.typeIntoElementById( "doctor_medical_council_registration", @@ -172,7 +172,7 @@ describe("User Creation", () => { "home_facility", "Dummy Shifting Center", ); - userCreationPage.verifyElementContainsText("doctor-qualification", "MBBS"); + userCreationPage.verifyElementContainsText("qualification", "MBBS"); userCreationPage.verifyElementContainsText("doctor-experience", "2"); userCreationPage.verifyElementContainsText( "medical-council-registration", diff --git a/cypress/e2e/users_spec/UsersProfile.cy.ts b/cypress/e2e/users_spec/UsersProfile.cy.ts index 2672cccad7e..63fd71f5793 100644 --- a/cypress/e2e/users_spec/UsersProfile.cy.ts +++ b/cypress/e2e/users_spec/UsersProfile.cy.ts @@ -12,7 +12,7 @@ describe("Manage User Profile", () => { const email = "test@example.com"; const phone = "+918899887788"; const workinghours = "8"; - const doctorQualification = "MBBS"; + const qualification = "MBBS"; const doctorYoE = "10"; const medicalCouncilRegistration = "1234567890"; @@ -40,7 +40,7 @@ describe("Manage User Profile", () => { userProfilePage.typePhone(phone); userProfilePage.typeWhatsApp(phone); userProfilePage.typeWorkingHours(workinghours); - userProfilePage.typeDoctorQualification(doctorQualification); + userProfilePage.typeQualification(qualification); userProfilePage.typeDoctorYoE(doctorYoE); userProfilePage.typeMedicalCouncilRegistration(medicalCouncilRegistration); diff --git a/cypress/pageobject/Users/UserProfilePage.ts b/cypress/pageobject/Users/UserProfilePage.ts index c3de5035dc7..20fd1911c49 100644 --- a/cypress/pageobject/Users/UserProfilePage.ts +++ b/cypress/pageobject/Users/UserProfilePage.ts @@ -42,8 +42,8 @@ export default class UserProfilePage { cy.get("#weekly_working_hours").click().clear().type(workinghours); } - typeDoctorQualification = (doctorQualification: string) => { - cy.get("#doctor_qualification").click().clear().type(doctorQualification); + typeQualification = (qualification: string) => { + cy.get("#qualification").click().clear().type(qualification); }; typeDoctorYoE = (doctorYoE: string) => { diff --git a/src/Components/Users/ManageUsers.tsx b/src/Components/Users/ManageUsers.tsx index a3cb3063577..88069ca5e29 100644 --- a/src/Components/Users/ManageUsers.tsx +++ b/src/Components/Users/ManageUsers.tsx @@ -188,7 +188,6 @@ export default function ManageUsers() { }; let userList: any[] = []; - userListData?.results && userListData.results.length && (userList = userListData.results.map((user: any, idx) => { @@ -283,15 +282,17 @@ export default function ManageUsers() { <>
- {user.doctor_qualification ? ( + {user.qualification ? ( - {user.doctor_qualification} + {user.qualification} ) : ( - Unknown + + {t("unknown")} + )}
@@ -307,7 +308,9 @@ export default function ManageUsers() { years ) : ( - Unknown + + {t("unknown")} + )}
@@ -321,7 +324,9 @@ export default function ManageUsers() { {user.doctor_medical_council_registration} ) : ( - Unknown + + {t("unknown")} + )} @@ -335,11 +340,30 @@ export default function ManageUsers() { )} +
+ {user.user_type === "Nurse" && ( +
+ + {user.qualification ? ( + + {user.qualification} + + ) : ( + + {t("unknown")} + + )} + +
+ )} {user.created_by && (
diff --git a/src/Components/Users/UserAdd.tsx b/src/Components/Users/UserAdd.tsx index 9ee1e722ee1..73c7fb63c26 100644 --- a/src/Components/Users/UserAdd.tsx +++ b/src/Components/Users/UserAdd.tsx @@ -44,7 +44,6 @@ import CheckBoxFormField from "../Form/FormFields/CheckBoxFormField"; import { useTranslation } from "react-i18next"; const Loading = lazy(() => import("../Common/Loading")); - interface UserProps { userId?: number; } @@ -72,7 +71,7 @@ type UserForm = { state: number; district: number; local_body: number; - doctor_qualification: string | undefined; + qualification: string | undefined; doctor_experience_commenced_on: string | undefined; doctor_medical_council_registration: string | undefined; }; @@ -95,7 +94,7 @@ const initForm: UserForm = { state: 0, district: 0, local_body: 0, - doctor_qualification: undefined, + qualification: undefined, doctor_experience_commenced_on: undefined, doctor_medical_council_registration: undefined, }; @@ -372,7 +371,16 @@ export const UserAdd = (props: UserProps) => { invalidForm = true; } return; - case "doctor_qualification": + case "qualification": + if ( + (state.form.user_type === "Doctor" || + state.form.user_type === "Nurse") && + !state.form[field] + ) { + errors[field] = t("field_required"); + invalidForm = true; + } + return; case "doctor_medical_council_registration": if (state.form.user_type === "Doctor" && !state.form[field]) { errors[field] = t("field_required"); @@ -553,9 +561,9 @@ export const UserAdd = (props: UserProps) => { : state.form.alt_phone_number, ) ?? "", date_of_birth: dateQueryString(state.form.date_of_birth), - doctor_qualification: - state.form.user_type === "Doctor" - ? state.form.doctor_qualification + qualification: + state.form.user_type === "Doctor" || state.form.user_type == "Nurse" + ? state.form.qualification : undefined, doctor_experience_commenced_on: state.form.user_type === "Doctor" @@ -650,15 +658,17 @@ export const UserAdd = (props: UserProps) => { optionValue={(o) => o.id} /> + {(state.form.user_type === "Doctor" || + state.form.user_type === "Nurse") && ( + + )} {state.form.user_type === "Doctor" && ( <> - - { if (!result || !result.res || !result.data) return; + const formData: EditForm = { firstName: result.data.first_name, lastName: result.data.last_name, @@ -159,7 +160,7 @@ export default function UserProfile() { phoneNumber: result.data.phone_number?.toString() || "", altPhoneNumber: result.data.alt_phone_number?.toString() || "", user_type: result.data.user_type, - doctor_qualification: result.data.doctor_qualification, + qualification: result.data.qualification, doctor_experience_commenced_on: dayjs().diff( dayjs(result.data.doctor_experience_commenced_on), "years", @@ -277,7 +278,16 @@ export default function UserProfile() { invalidForm = true; } return; - case "doctor_qualification": + case "qualification": + if ( + (states.form.user_type === "Doctor" || + states.form.user_type === "Nurse") && + !states.form[field] + ) { + errors[field] = t("field_required"); + invalidForm = true; + } + return; case "doctor_medical_council_registration": if (states.form.user_type === "Doctor" && !states.form[field]) { errors[field] = t("field_required"); @@ -344,9 +354,10 @@ export default function UserProfile() { alt_phone_number: parsePhoneNumber(states.form.altPhoneNumber) ?? "", gender: states.form.gender, date_of_birth: dateQueryString(states.form.date_of_birth), - doctor_qualification: - states.form.user_type === "Doctor" - ? states.form.doctor_qualification + qualification: + states.form.user_type === "Doctor" || + states.form.user_type === "Nurse" + ? states.form.qualification : undefined, doctor_experience_commenced_on: states.form.user_type === "Doctor" @@ -727,15 +738,18 @@ export default function UserProfile() { required type="email" /> + {(states.form.user_type === "Doctor" || + states.form.user_type === "Nurse") && ( + + )} {states.form.user_type === "Doctor" && ( <> - Date: Thu, 3 Oct 2024 18:04:53 +0530 Subject: [PATCH 7/7] Bump react-i18next from 13.5.0 to 15.0.2 (#8537) --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 678e9fd9256..5665fe00f1a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,7 +40,7 @@ "react-dnd-scrolling": "^1.3.8", "react-dom": "18.3.1", "react-google-recaptcha": "^3.1.0", - "react-i18next": "^13.0.1", + "react-i18next": "^15.0.2", "react-infinite-scroll-component": "^6.1.0", "react-markdown": "^8.0.7", "react-pdf": "^9.1.0", @@ -1869,9 +1869,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", - "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -14344,11 +14344,11 @@ } }, "node_modules/react-i18next": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-13.5.0.tgz", - "integrity": "sha512-CFJ5NDGJ2MUyBohEHxljOq/39NQ972rh1ajnadG9BjTk+UXbHLq4z5DKEbEQBDoIhUmmbuS/fIMJKo6VOax1HA==", + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.0.2.tgz", + "integrity": "sha512-z0W3/RES9Idv3MmJUcf0mDNeeMOUXe+xoL0kPfQPbDoZHmni/XsIoq5zgT2MCFUiau283GuBUK578uD/mkAbLQ==", "dependencies": { - "@babel/runtime": "^7.22.5", + "@babel/runtime": "^7.25.0", "html-parse-stringify": "^3.0.1" }, "peerDependencies": { diff --git a/package.json b/package.json index 51bbbde6c70..e0b415a9523 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "react-dnd-scrolling": "^1.3.8", "react-dom": "18.3.1", "react-google-recaptcha": "^3.1.0", - "react-i18next": "^13.0.1", + "react-i18next": "^15.0.2", "react-infinite-scroll-component": "^6.1.0", "react-markdown": "^8.0.7", "react-pdf": "^9.1.0",