import DialogContentText from "@material-ui/core/DialogContentText"; import ActionDialog from "@saleor/components/ActionDialog"; import NotFoundPage from "@saleor/components/NotFoundPage"; import { WindowTitle } from "@saleor/components/WindowTitle"; import { DEFAULT_INITIAL_SEARCH_DATA } from "@saleor/config"; import useNavigator from "@saleor/hooks/useNavigator"; import useNotifier from "@saleor/hooks/useNotifier"; import useUser from "@saleor/hooks/useUser"; import { commonMessages } from "@saleor/intl"; import { getStringOrPlaceholder, maybe } from "@saleor/misc"; import usePermissionGroupSearch from "@saleor/searches/usePermissionGroupSearch"; import React from "react"; import { FormattedMessage, useIntl } from "react-intl"; import StaffDetailsPage from "../components/StaffDetailsPage/StaffDetailsPage"; import StaffPasswordResetDialog from "../components/StaffPasswordResetDialog"; import { TypedStaffAvatarDeleteMutation, TypedStaffAvatarUpdateMutation, TypedStaffMemberDeleteMutation, TypedStaffMemberUpdateMutation, useChangeStaffPassword } from "../mutations"; import { TypedStaffMemberDetailsQuery } from "../queries"; import { ChangeStaffPassword } from "../types/ChangeStaffPassword"; import { StaffAvatarDelete } from "../types/StaffAvatarDelete"; import { StaffAvatarUpdate } from "../types/StaffAvatarUpdate"; import { StaffMemberDelete } from "../types/StaffMemberDelete"; import { StaffMemberUpdate } from "../types/StaffMemberUpdate"; import { staffListUrl, staffMemberDetailsUrl, StaffMemberDetailsUrlQueryParams } from "../urls"; import { groupsDiff } from "../utils"; interface OrderListProps { id: string; params: StaffMemberDetailsUrlQueryParams; } export const StaffDetails: React.FC = ({ id, params }) => { const navigate = useNavigator(); const notify = useNotifier(); const user = useUser(); const intl = useIntl(); const closeModal = () => navigate( staffMemberDetailsUrl(id, { ...params, action: undefined }) ); const handleChangePassword = (data: ChangeStaffPassword) => { if (data.passwordChange.errors.length === 0) { notify({ status: "success", text: intl.formatMessage(commonMessages.savedChanges) }); closeModal(); } }; const [changePassword, changePasswordOpts] = useChangeStaffPassword({ onCompleted: handleChangePassword }); const handleBack = () => navigate(staffListUrl()); const { loadMore: loadMorePermissionGroups, search: searchPermissionGroups, result: searchPermissionGroupsOpts } = usePermissionGroupSearch({ variables: DEFAULT_INITIAL_SEARCH_DATA }); return ( {({ data, loading }) => { const staffMember = data?.user; if (staffMember === null) { return ; } const handleStaffMemberUpdate = (data: StaffMemberUpdate) => { if (!maybe(() => data.staffUpdate.errors.length !== 0)) { notify({ status: "success", text: intl.formatMessage(commonMessages.savedChanges) }); } }; const handleStaffMemberDelete = (data: StaffMemberDelete) => { if (!maybe(() => data.staffDelete.errors.length !== 0)) { notify({ status: "success", text: intl.formatMessage(commonMessages.savedChanges) }); navigate(staffListUrl()); } }; const handleStaffMemberAvatarUpdate = (data: StaffAvatarUpdate) => { if (!maybe(() => data.userAvatarUpdate.errors.length !== 0)) { notify({ status: "success", text: intl.formatMessage(commonMessages.savedChanges) }); } }; const handleStaffMemberAvatarDelete = (data: StaffAvatarDelete) => { if (!maybe(() => data.userAvatarDelete.errors.length !== 0)) { notify({ status: "success", text: intl.formatMessage(commonMessages.savedChanges) }); navigate(staffMemberDetailsUrl(id)); } }; return ( {(updateStaffMember, updateResult) => ( {(deleteStaffMember, deleteResult) => ( {updateStaffAvatar => ( {(deleteStaffAvatar, deleteAvatarResult) => { const isUserSameAsViewer = user.user?.id === data?.user?.id; return ( <> navigate( staffMemberDetailsUrl(id, { action: "change-password" }) ) } onDelete={() => navigate( staffMemberDetailsUrl(id, { action: "remove" }) ) } onSubmit={variables => { updateStaffMember({ variables: { id, input: { email: variables.email, firstName: variables.firstName, isActive: variables.isActive, lastName: variables.lastName, ...groupsDiff(data?.user, variables) } } }); }} onImageUpload={file => updateStaffAvatar({ variables: { image: file } }) } onImageDelete={() => navigate( staffMemberDetailsUrl(id, { action: "remove-avatar" }) ) } availablePermissionGroups={searchPermissionGroupsOpts.data?.search.edges.map( edge => edge.node )} staffMember={staffMember} saveButtonBarState={updateResult.status} fetchMorePermissionGroups={{ hasMore: searchPermissionGroupsOpts.data?.search .pageInfo.hasNextPage, loading: searchPermissionGroupsOpts.loading, onFetchMore: loadMorePermissionGroups }} onSearchChange={searchPermissionGroups} /> {getStringOrPlaceholder( data?.user?.email )} ) }} /> changePassword({ variables: data }) } /> ); }} )} )} )} ); }} ); }; export default StaffDetails;