From 7c1c7933e35318e57df7aeffa6930d64ead16a37 Mon Sep 17 00:00:00 2001 From: Dawid Date: Fri, 25 Nov 2022 10:35:53 +0100 Subject: [PATCH] Fix account settings page when logged in with external auth (#2478) * Fix account settings page when logged in with external auth * Update staff details page types * refactor: staff member page utils --- .../StaffDetailsPage/StaffDetailsPage.tsx | 13 +++++++---- .../StaffProperties/StaffProperties.tsx | 3 ++- src/staff/utils.ts | 22 ++++++++++++++++++- src/staff/views/StaffDetails.tsx | 7 +++--- 4 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/staff/components/StaffDetailsPage/StaffDetailsPage.tsx b/src/staff/components/StaffDetailsPage/StaffDetailsPage.tsx index d6ac515a7..a6a861ea9 100644 --- a/src/staff/components/StaffDetailsPage/StaffDetailsPage.tsx +++ b/src/staff/components/StaffDetailsPage/StaffDetailsPage.tsx @@ -13,6 +13,7 @@ import { SearchPermissionGroupsQuery, StaffErrorFragment, StaffMemberDetailsFragment, + UserFragment, } from "@saleor/graphql"; import { SubmitPromise } from "@saleor/hooks/useForm"; import useLocale from "@saleor/hooks/useLocale"; @@ -23,6 +24,7 @@ import { ConfirmButtonTransitionState } from "@saleor/macaw-ui"; import { getUserName } from "@saleor/misc"; import UserStatus from "@saleor/staff/components/UserStatus"; import { staffListUrl } from "@saleor/staff/urls"; +import { getMemberPermissionGroups, isMemberActive } from "@saleor/staff/utils"; import { FetchMoreProps, RelayToFlat, SearchPageProps } from "@saleor/types"; import createMultiAutocompleteSelectHandler from "@saleor/utils/handlers/multiAutocompleteSelectChangeHandler"; import React from "react"; @@ -51,7 +53,7 @@ export interface StaffDetailsPageProps extends SearchPageProps { disabled: boolean; fetchMorePermissionGroups: FetchMoreProps; saveButtonBarState: ConfirmButtonTransitionState; - staffMember: StaffMemberDetailsFragment; + staffMember: StaffMemberDetailsFragment | UserFragment; errors: StaffErrorFragment[]; onChangePassword: () => void; onDelete: () => void; @@ -85,11 +87,14 @@ const StaffDetailsPage: React.FC = ({ const { locale, setLocale } = useLocale(); + const isActive = isMemberActive(staffMember); + const permissionGroups = getMemberPermissionGroups(staffMember); + const [ permissionGroupsDisplayValues, setPermissionGroupsDisplayValues, ] = useStateFromProps( - (staffMember?.permissionGroups || []).map(group => ({ + permissionGroups.map(group => ({ disabled: !group.userCanManage, label: group.name, value: group.id, @@ -99,9 +104,9 @@ const StaffDetailsPage: React.FC = ({ const initialForm: StaffDetailsFormData = { email: staffMember?.email || "", firstName: staffMember?.firstName || "", - isActive: !!staffMember?.isActive, + isActive, lastName: staffMember?.lastName || "", - permissionGroups: staffMember?.permissionGroups.map(pg => pg.id) || [], + permissionGroups: permissionGroups.map(pg => pg.id), }; return ( diff --git a/src/staff/components/StaffProperties/StaffProperties.tsx b/src/staff/components/StaffProperties/StaffProperties.tsx index f014b4f60..df3a4e3e3 100644 --- a/src/staff/components/StaffProperties/StaffProperties.tsx +++ b/src/staff/components/StaffProperties/StaffProperties.tsx @@ -4,6 +4,7 @@ import CardTitle from "@saleor/components/CardTitle"; import { StaffErrorFragment, StaffMemberDetailsFragment, + UserFragment, } from "@saleor/graphql"; import { commonMessages } from "@saleor/intl"; import { makeStyles } from "@saleor/macaw-ui"; @@ -105,7 +106,7 @@ interface StaffPropertiesProps { }; errors: StaffErrorFragment[]; disabled: boolean; - staffMember: StaffMemberDetailsFragment; + staffMember: StaffMemberDetailsFragment | UserFragment; onChange: (event: React.ChangeEvent) => void; onImageDelete: () => void; onImageUpload: (file: File) => void; diff --git a/src/staff/utils.ts b/src/staff/utils.ts index ca737253e..70ff6ac4d 100644 --- a/src/staff/utils.ts +++ b/src/staff/utils.ts @@ -1,4 +1,4 @@ -import { StaffMemberDetailsFragment } from "@saleor/graphql"; +import { StaffMemberDetailsFragment, UserFragment } from "@saleor/graphql"; import difference from "lodash/difference"; import { StaffDetailsFormData } from "./components/StaffDetailsPage"; @@ -18,3 +18,23 @@ export const groupsDiff = ( removeGroups: difference(oldGroups, newGroups), }; }; + +export const isMemberActive = ( + staffMember: StaffMemberDetailsFragment | UserFragment, +) => { + if (staffMember && "isActive" in staffMember) { + return staffMember.isActive; + } + + return false; +}; + +export const getMemberPermissionGroups = ( + staffMember: StaffMemberDetailsFragment | UserFragment, +) => { + if (staffMember && "permissionGroups" in staffMember) { + return staffMember.permissionGroups; + } + + return []; +}; diff --git a/src/staff/views/StaffDetails.tsx b/src/staff/views/StaffDetails.tsx index b3697c8f0..83428a00a 100644 --- a/src/staff/views/StaffDetails.tsx +++ b/src/staff/views/StaffDetails.tsx @@ -55,12 +55,15 @@ export const StaffDetails: React.FC = ({ id, params }) => { }), ); + const isUserSameAsViewer = user.user?.id === id; + const { data, loading, refetch } = useStaffMemberDetailsQuery({ displayLoader: true, variables: { id }, + skip: isUserSameAsViewer, }); - const staffMember = data?.user; + const staffMember = isUserSameAsViewer ? user.user : data?.user; const [changePassword, changePasswordOpts] = useChangeStaffPasswordMutation({ onCompleted: data => { @@ -159,8 +162,6 @@ export const StaffDetails: React.FC = ({ id, params }) => { }), ); - const isUserSameAsViewer = user.user?.id === data?.user?.id; - return ( <>