From 71255d4cc168966d57e40cfc19d59f11c2514c33 Mon Sep 17 00:00:00 2001 From: Ashesh <3626859+Ashesh3@users.noreply.github.com> Date: Fri, 26 Apr 2024 13:23:10 +0530 Subject: [PATCH 1/4] Fix facility page live monitor button (#7707) --- src/Components/Facility/FacilityHome.tsx | 31 ++++++++++++------------ 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/Components/Facility/FacilityHome.tsx b/src/Components/Facility/FacilityHome.tsx index fa712e0df59..09c5c1889dc 100644 --- a/src/Components/Facility/FacilityHome.tsx +++ b/src/Components/Facility/FacilityHome.tsx @@ -411,7 +411,9 @@ export const FacilityHome = (props: any) => { Central Nursing Station - + {CameraFeedPermittedUserTypes.includes(authUser.user_type) && ( + + )} { const LiveMonitoringButton = () => { const facilityId = useSlug("facility"); const [location, setLocation] = useState(); - const authUser = useAuthUser(); return ( - {CameraFeedPermittedUserTypes.includes(authUser.user_type) && ( - - - - Live Monitoring - - - )} + + + + Live Monitoring + + Date: Fri, 26 Apr 2024 13:23:41 +0530 Subject: [PATCH 2/4] fix spacing of phone number fields in user filters (#7702) --- src/Components/Users/UserFilter.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Users/UserFilter.tsx b/src/Components/Users/UserFilter.tsx index 4a070ee7cde..d5c16d22571 100644 --- a/src/Components/Users/UserFilter.tsx +++ b/src/Components/Users/UserFilter.tsx @@ -148,7 +148,7 @@ export default function UserFilter(props: any) { {...field("district")} state={filterState.state} /> -
+
Date: Fri, 26 Apr 2024 17:28:06 +0530 Subject: [PATCH 3/4] Enhancements to Doctor Connect Slideover (#7709) * Enhancements to Doctor Connect Slideover * improve no users design * remove unnecessary sorting * fixes #7713 * fix cypress test * Revert "fixes #7713" This reverts commit 9d2b4d7ba29df66acf0751b5c358197a47542fdf. * hide teleicu nurse * update heading * fix doctor connect hide button issue --- cypress/e2e/users_spec/user_manage.cy.ts | 4 +- .../Facility/DoctorVideoSlideover.tsx | 219 +++++++++--------- src/Components/Patient/ManagePatients.tsx | 9 +- 3 files changed, 113 insertions(+), 119 deletions(-) diff --git a/cypress/e2e/users_spec/user_manage.cy.ts b/cypress/e2e/users_spec/user_manage.cy.ts index af3b9149b2f..0ff66fba27a 100644 --- a/cypress/e2e/users_spec/user_manage.cy.ts +++ b/cypress/e2e/users_spec/user_manage.cy.ts @@ -33,7 +33,7 @@ describe("Manage User", () => { cy.awaitUrl("/users"); }); - it("linking skills for a users and verify its reflection in profile", () => { + it("linking skills for users and verify its reflection in profile", () => { // select the district user and select one skill link and verify its profile reflection userPage.typeInSearchInput(usernameforworkinghour); userPage.checkUsernameText(usernameforworkinghour); @@ -49,7 +49,7 @@ describe("Manage User", () => { manageUserPage.navigateToProfile(); userCreationPage.verifyElementContainsText( "username-profile-details", - usernameforworkinghour + usernameforworkinghour, ); manageUserPage.assertSkillInAlreadyLinkedSkills(linkedskill); }); diff --git a/src/Components/Facility/DoctorVideoSlideover.tsx b/src/Components/Facility/DoctorVideoSlideover.tsx index 5fde98364da..e5888bebf2e 100644 --- a/src/Components/Facility/DoctorVideoSlideover.tsx +++ b/src/Components/Facility/DoctorVideoSlideover.tsx @@ -1,79 +1,57 @@ -import React, { useEffect, useState } from "react"; +import React, { useState } from "react"; import SlideOver from "../../CAREUI/interactive/SlideOver"; import { UserAssignedModel } from "../Users/models"; import { SkillObjectModel } from "../Users/models"; import CareIcon, { IconName } from "../../CAREUI/icons/CareIcon"; -import { relativeTime } from "../../Utils/utils"; +import { classNames, relativeTime } from "../../Utils/utils"; import useAuthUser from "../../Common/hooks/useAuthUser"; import { triggerGoal } from "../../Integrations/Plausible"; import { Warn } from "../../Utils/Notifications"; import Switch from "../../CAREUI/interactive/Switch"; import useQuery from "../../Utils/request/useQuery"; import routes from "../../Redux/api"; +import Loading from "../Common/Loading"; -enum FilterTypes { - ALL = "All", - DOCTOR = "Doctor", - NURSE = "Nurse", - TELEICU = "TeleICU Hub", -} +const UserGroups = { + ALL: "All", + DOCTOR: "Doctor", + NURSE: "Nurse", + TELEICU: "TeleICU Doctors", +}; -interface DoctorDetails { - users: UserAssignedModel[]; - type: FilterTypes.DOCTOR | FilterTypes.NURSE | FilterTypes.TELEICU; -} +type UserGroup = keyof typeof UserGroups; + +type UserAnnotatedWithGroup = UserAssignedModel & { group?: UserGroup }; const isHomeUser = (user: UserAssignedModel, facilityId: string) => user.home_facility_object?.id === facilityId; - export default function DoctorVideoSlideover(props: { show: boolean; facilityId: string; setShow: (show: boolean) => void; }) { const { show, facilityId, setShow } = props; - const [filteredDoctors, setFilteredDoctors] = useState([]); - const [filter, setFilter] = useState(FilterTypes.ALL); + const [filter, setFilter] = useState("ALL"); - const { data: users, loading } = useQuery(routes.getFacilityUsers, { + const { data } = useQuery(routes.getFacilityUsers, { prefetch: show, pathParams: { facility_id: facilityId }, query: { limit: 50 }, }); - useEffect(() => { - const filterDoctors = (users: UserAssignedModel[]) => { - const filteredusers = users - .filter((user: UserAssignedModel) => { - return user.alt_phone_number || user.video_connect_link; - }) - .sort((a: UserAssignedModel, b: UserAssignedModel) => { - const aIsHomeUser = isHomeUser(a, facilityId); - const bIsHomeUser = isHomeUser(b, facilityId); - return aIsHomeUser === bIsHomeUser ? 0 : aIsHomeUser ? -1 : 1; - }); - const Doctors = filteredusers.filter((user: UserAssignedModel) => { - return user.user_type === "Doctor" && isHomeUser(user, facilityId); - }); - const Nurses = filteredusers.filter((user: UserAssignedModel) => { - return user.user_type === "Nurse" && isHomeUser(user, facilityId); - }); - const TeleICU = filteredusers.filter((user: UserAssignedModel) => { - return ( - (user.user_type === "Doctor" || user.user_type === "Nurse") && - !isHomeUser(user, facilityId) - ); - }); - setFilteredDoctors([ - { users: Doctors, type: FilterTypes.DOCTOR }, - { users: Nurses, type: FilterTypes.NURSE }, - { users: TeleICU, type: FilterTypes.TELEICU }, - ]); - }; - if (users?.results && !loading) { - filterDoctors(users?.results); + const getUserGroup = (user: UserAssignedModel) => { + if (isHomeUser(user, facilityId)) { + if (user.user_type === "Doctor") return "DOCTOR"; + if (user.user_type === "Nurse") return "NURSE"; } - }, [facilityId, filter, loading, users?.results]); + + if (user.user_type === "Doctor") return "TELEICU"; + }; + + const annotatedUsers: UserAnnotatedWithGroup[] | undefined = data?.results + .filter((user) => user.alt_phone_number || user.video_connect_link) + .map((user) => ({ ...user, group: getUserGroup(user) })) + .filter((user) => !!user.group) as UserAnnotatedWithGroup[]; return (
({ ...acc, [type]: type }), - {}, - ) as Record - } + tabs={UserGroups} selected={filter} onChange={(tab) => setFilter(tab)} size="md" />
- {filteredDoctors.map((doctor) => { - return ( - (filter === FilterTypes.ALL || filter === doctor.type) && ( -
-

{doctor.type}

- {doctor.users.map((user, i) => { - return ( -
-
    - -
-
- ); - })} -
- ) - ); - })} + + {!annotatedUsers ? ( + + ) : filter === "ALL" ? ( +
+ + + + + +
+ ) : ( +
+ +
+ )}
); } +const UserGroupList = (props: { + users: UserAnnotatedWithGroup[]; + group: UserGroup; + showGroupHeading?: boolean; +}) => { + const users = props.users.filter((user) => user.group === props.group); + + return ( +
+ {props.showGroupHeading && ( +
+ + {UserGroups[props.group]} + +
+
+ )} + + {!users.length && ( + + No users in this category + + )} + + {!!users.length && ( +
    + {users.map((user) => ( +
  • + +
  • + ))} +
+ )} +
+ ); +}; + type MSLaunchURI = ( uri: string, successCB?: null | (() => void), noHandlerCB?: null | (() => void), ) => void; -function UserListItem(props: { user: UserAssignedModel; facilityId: string }) { - const user = props.user; - const facilityId = props.facilityId; +function UserListItem({ user }: { user: UserAnnotatedWithGroup }) { const icon: IconName = user.user_type === "Doctor" ? "l-user-md" : "l-user-nurse"; @@ -207,17 +217,13 @@ function UserListItem(props: { user: UserAssignedModel; facilityId: string }) { } return ( -
  • @@ -232,16 +238,11 @@ function UserListItem(props: { user: UserAssignedModel; facilityId: string }) { }
  • +
    ); } diff --git a/src/Components/Patient/ManagePatients.tsx b/src/Components/Patient/ManagePatients.tsx index 51baa4d1a28..35a5bbfea02 100644 --- a/src/Components/Patient/ManagePatients.tsx +++ b/src/Components/Patient/ManagePatients.tsx @@ -105,7 +105,6 @@ export const PatientManager = () => { const [diagnoses, setDiagnoses] = useState([]); const [showDialog, setShowDialog] = useState<"create" | "list-discharged">(); const [showDoctors, setShowDoctors] = useState(false); - const [showDoctorConnect, setShowDoctorConnect] = useState(false); const [phone_number, setPhoneNumber] = useState(""); const [phoneNumberError, setPhoneNumberError] = useState(""); const [emergency_phone_number, setEmergencyPhoneNumber] = useState(""); @@ -248,12 +247,6 @@ export const PatientManager = () => { qParams.diagnoses_differential, ]); - useEffect(() => { - if (params.facility) { - setShowDoctorConnect(true); - } - }, [qParams.facility]); - const date_range_fields = [ [params.created_date_before, params.created_date_after], [params.modified_date_before, params.modified_date_after], @@ -785,7 +778,7 @@ export const PatientManager = () => { }} isTab2Active={!!tabValue} /> - {showDoctorConnect && ( + {!!params.facility && ( { From 4959fc6be4049c978f34a2d6d01a7c719cbe5fd2 Mon Sep 17 00:00:00 2001 From: Rithvik Nishad Date: Fri, 26 Apr 2024 17:32:48 +0530 Subject: [PATCH 4/4] Correct spelling for comment on PR close on stale (#7717) * fixes #7713 * Update .github/workflows/stale.yml * update all messages * fix spelling mistake --- .github/workflows/stale.yml | 4 ++-- src/Components/Facility/DoctorVideoSlideover.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 0e4c9005787..8964b0c8e57 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -13,9 +13,9 @@ jobs: repo-token: ${{ secrets.GITHUB_TOKEN }} stale-issue-label: "stale" stale-pr-label: "stale" - stale-issue-message: "Hi, @gigincg, @nihal467, @khavinshankar, @mathew-alex, @aparnacoronasafe, This issue has been automatically marked as stale because it has not had any recent activity." + stale-issue-message: "Hi, @coronasafe/care-frontend-maintainers, This issue has been automatically marked as stale because it has not had any recent activity." stale-pr-message: "Hi, This pr has been automatically marked as stale because it has not had any recent activity. It will be automatically closed if no further activity occurs for 7 more days. Thank you for your contributions." - close-pr-message: "Hi, @gigincg, @nihal467, @khavinshankar, @mathew-alex, This pr has been automatically closed because it has not had any recent activity. Thank you for your contributions. Feel free to repopen the pr." + close-pr-message: "Hi, @coronasafe/care-frontend-maintainers, This PR has been automatically closed due to inactivity. Thank you for your contributions. Feel free to re-open the PR." exempt-issue-labels: "blocked,waiting for related PR,waiting for back end,help wanted,work-in-progress,In Progress,wishlist,EPIC" exempt-pr-labels: "tested,needs testing,need Review,waiting for related PR,waiting for back end,help wanted,blocked,work-in-progress,In Progress" days-before-issue-stale: 14 diff --git a/src/Components/Facility/DoctorVideoSlideover.tsx b/src/Components/Facility/DoctorVideoSlideover.tsx index e5888bebf2e..d2591bf3600 100644 --- a/src/Components/Facility/DoctorVideoSlideover.tsx +++ b/src/Components/Facility/DoctorVideoSlideover.tsx @@ -16,7 +16,7 @@ const UserGroups = { ALL: "All", DOCTOR: "Doctor", NURSE: "Nurse", - TELEICU: "TeleICU Doctors", + TELEICU: "TeleICU Doctor", }; type UserGroup = keyof typeof UserGroups;