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
This commit is contained in:
parent
51dc1f5276
commit
7c1c7933e3
4 changed files with 36 additions and 9 deletions
|
@ -13,6 +13,7 @@ import {
|
||||||
SearchPermissionGroupsQuery,
|
SearchPermissionGroupsQuery,
|
||||||
StaffErrorFragment,
|
StaffErrorFragment,
|
||||||
StaffMemberDetailsFragment,
|
StaffMemberDetailsFragment,
|
||||||
|
UserFragment,
|
||||||
} from "@saleor/graphql";
|
} from "@saleor/graphql";
|
||||||
import { SubmitPromise } from "@saleor/hooks/useForm";
|
import { SubmitPromise } from "@saleor/hooks/useForm";
|
||||||
import useLocale from "@saleor/hooks/useLocale";
|
import useLocale from "@saleor/hooks/useLocale";
|
||||||
|
@ -23,6 +24,7 @@ import { ConfirmButtonTransitionState } from "@saleor/macaw-ui";
|
||||||
import { getUserName } from "@saleor/misc";
|
import { getUserName } from "@saleor/misc";
|
||||||
import UserStatus from "@saleor/staff/components/UserStatus";
|
import UserStatus from "@saleor/staff/components/UserStatus";
|
||||||
import { staffListUrl } from "@saleor/staff/urls";
|
import { staffListUrl } from "@saleor/staff/urls";
|
||||||
|
import { getMemberPermissionGroups, isMemberActive } from "@saleor/staff/utils";
|
||||||
import { FetchMoreProps, RelayToFlat, SearchPageProps } from "@saleor/types";
|
import { FetchMoreProps, RelayToFlat, SearchPageProps } from "@saleor/types";
|
||||||
import createMultiAutocompleteSelectHandler from "@saleor/utils/handlers/multiAutocompleteSelectChangeHandler";
|
import createMultiAutocompleteSelectHandler from "@saleor/utils/handlers/multiAutocompleteSelectChangeHandler";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
@ -51,7 +53,7 @@ export interface StaffDetailsPageProps extends SearchPageProps {
|
||||||
disabled: boolean;
|
disabled: boolean;
|
||||||
fetchMorePermissionGroups: FetchMoreProps;
|
fetchMorePermissionGroups: FetchMoreProps;
|
||||||
saveButtonBarState: ConfirmButtonTransitionState;
|
saveButtonBarState: ConfirmButtonTransitionState;
|
||||||
staffMember: StaffMemberDetailsFragment;
|
staffMember: StaffMemberDetailsFragment | UserFragment;
|
||||||
errors: StaffErrorFragment[];
|
errors: StaffErrorFragment[];
|
||||||
onChangePassword: () => void;
|
onChangePassword: () => void;
|
||||||
onDelete: () => void;
|
onDelete: () => void;
|
||||||
|
@ -85,11 +87,14 @@ const StaffDetailsPage: React.FC<StaffDetailsPageProps> = ({
|
||||||
|
|
||||||
const { locale, setLocale } = useLocale();
|
const { locale, setLocale } = useLocale();
|
||||||
|
|
||||||
|
const isActive = isMemberActive(staffMember);
|
||||||
|
const permissionGroups = getMemberPermissionGroups(staffMember);
|
||||||
|
|
||||||
const [
|
const [
|
||||||
permissionGroupsDisplayValues,
|
permissionGroupsDisplayValues,
|
||||||
setPermissionGroupsDisplayValues,
|
setPermissionGroupsDisplayValues,
|
||||||
] = useStateFromProps<MultiAutocompleteChoiceType[]>(
|
] = useStateFromProps<MultiAutocompleteChoiceType[]>(
|
||||||
(staffMember?.permissionGroups || []).map(group => ({
|
permissionGroups.map(group => ({
|
||||||
disabled: !group.userCanManage,
|
disabled: !group.userCanManage,
|
||||||
label: group.name,
|
label: group.name,
|
||||||
value: group.id,
|
value: group.id,
|
||||||
|
@ -99,9 +104,9 @@ const StaffDetailsPage: React.FC<StaffDetailsPageProps> = ({
|
||||||
const initialForm: StaffDetailsFormData = {
|
const initialForm: StaffDetailsFormData = {
|
||||||
email: staffMember?.email || "",
|
email: staffMember?.email || "",
|
||||||
firstName: staffMember?.firstName || "",
|
firstName: staffMember?.firstName || "",
|
||||||
isActive: !!staffMember?.isActive,
|
isActive,
|
||||||
lastName: staffMember?.lastName || "",
|
lastName: staffMember?.lastName || "",
|
||||||
permissionGroups: staffMember?.permissionGroups.map(pg => pg.id) || [],
|
permissionGroups: permissionGroups.map(pg => pg.id),
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -4,6 +4,7 @@ import CardTitle from "@saleor/components/CardTitle";
|
||||||
import {
|
import {
|
||||||
StaffErrorFragment,
|
StaffErrorFragment,
|
||||||
StaffMemberDetailsFragment,
|
StaffMemberDetailsFragment,
|
||||||
|
UserFragment,
|
||||||
} from "@saleor/graphql";
|
} from "@saleor/graphql";
|
||||||
import { commonMessages } from "@saleor/intl";
|
import { commonMessages } from "@saleor/intl";
|
||||||
import { makeStyles } from "@saleor/macaw-ui";
|
import { makeStyles } from "@saleor/macaw-ui";
|
||||||
|
@ -105,7 +106,7 @@ interface StaffPropertiesProps {
|
||||||
};
|
};
|
||||||
errors: StaffErrorFragment[];
|
errors: StaffErrorFragment[];
|
||||||
disabled: boolean;
|
disabled: boolean;
|
||||||
staffMember: StaffMemberDetailsFragment;
|
staffMember: StaffMemberDetailsFragment | UserFragment;
|
||||||
onChange: (event: React.ChangeEvent<any>) => void;
|
onChange: (event: React.ChangeEvent<any>) => void;
|
||||||
onImageDelete: () => void;
|
onImageDelete: () => void;
|
||||||
onImageUpload: (file: File) => void;
|
onImageUpload: (file: File) => void;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { StaffMemberDetailsFragment } from "@saleor/graphql";
|
import { StaffMemberDetailsFragment, UserFragment } from "@saleor/graphql";
|
||||||
import difference from "lodash/difference";
|
import difference from "lodash/difference";
|
||||||
|
|
||||||
import { StaffDetailsFormData } from "./components/StaffDetailsPage";
|
import { StaffDetailsFormData } from "./components/StaffDetailsPage";
|
||||||
|
@ -18,3 +18,23 @@ export const groupsDiff = (
|
||||||
removeGroups: difference(oldGroups, newGroups),
|
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 [];
|
||||||
|
};
|
||||||
|
|
|
@ -55,12 +55,15 @@ export const StaffDetails: React.FC<OrderListProps> = ({ id, params }) => {
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const isUserSameAsViewer = user.user?.id === id;
|
||||||
|
|
||||||
const { data, loading, refetch } = useStaffMemberDetailsQuery({
|
const { data, loading, refetch } = useStaffMemberDetailsQuery({
|
||||||
displayLoader: true,
|
displayLoader: true,
|
||||||
variables: { id },
|
variables: { id },
|
||||||
|
skip: isUserSameAsViewer,
|
||||||
});
|
});
|
||||||
|
|
||||||
const staffMember = data?.user;
|
const staffMember = isUserSameAsViewer ? user.user : data?.user;
|
||||||
|
|
||||||
const [changePassword, changePasswordOpts] = useChangeStaffPasswordMutation({
|
const [changePassword, changePasswordOpts] = useChangeStaffPasswordMutation({
|
||||||
onCompleted: data => {
|
onCompleted: data => {
|
||||||
|
@ -159,8 +162,6 @@ export const StaffDetails: React.FC<OrderListProps> = ({ id, params }) => {
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
const isUserSameAsViewer = user.user?.id === data?.user?.id;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<WindowTitle title={getStringOrPlaceholder(staffMember?.email)} />
|
<WindowTitle title={getStringOrPlaceholder(staffMember?.email)} />
|
||||||
|
|
Loading…
Reference in a new issue