import DialogContentText from "@material-ui/core/DialogContentText"; import React from "react"; import { FormattedMessage, useIntl } from "react-intl"; import ActionDialog from "@saleor/components/ActionDialog"; import { WindowTitle } from "@saleor/components/WindowTitle"; import useNavigator from "@saleor/hooks/useNavigator"; import useNotifier from "@saleor/hooks/useNotifier"; import useShop from "@saleor/hooks/useShop"; import useUser from "@saleor/hooks/useUser"; import { commonMessages } from "@saleor/intl"; import { getMutationState, maybe } from "../../misc"; import StaffDetailsPage from "../components/StaffDetailsPage/StaffDetailsPage"; import { TypedStaffAvatarDeleteMutation, TypedStaffAvatarUpdateMutation, TypedStaffMemberDeleteMutation, TypedStaffMemberUpdateMutation } from "../mutations"; import { TypedStaffMemberDetailsQuery } from "../queries"; 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"; interface OrderListProps { id: string; params: StaffMemberDetailsUrlQueryParams; } export const StaffDetails: React.StatelessComponent = ({ id, params }) => { const navigate = useNavigator(); const notify = useNotifier(); const user = useUser(); const intl = useIntl(); const shop = useShop(); return ( {({ data, loading }) => { const handleStaffMemberUpdate = (data: StaffMemberUpdate) => { if (!maybe(() => data.staffUpdate.errors.length !== 0)) { notify({ text: intl.formatMessage(commonMessages.savedChanges) }); } }; const handleStaffMemberDelete = (data: StaffMemberDelete) => { if (!maybe(() => data.staffDelete.errors.length !== 0)) { notify({ text: intl.formatMessage(commonMessages.savedChanges) }); navigate(staffListUrl()); } }; const handleStaffMemberAvatarUpdate = (data: StaffAvatarUpdate) => { if (!maybe(() => data.userAvatarUpdate.errors.length !== 0)) { notify({ text: intl.formatMessage(commonMessages.savedChanges) }); } }; const handleStaffMemberAvatarDelete = (data: StaffAvatarDelete) => { if (!maybe(() => data.userAvatarDelete.errors.length !== 0)) { notify({ text: intl.formatMessage(commonMessages.savedChanges) }); navigate(staffMemberDetailsUrl(id)); } }; return ( {(updateStaffMember, updateResult) => ( {(deleteStaffMember, deleteResult) => ( {updateStaffAvatar => ( {(deleteStaffAvatar, deleteAvatarResult) => { const formTransitionState = getMutationState( updateResult.called, updateResult.loading, maybe(() => updateResult.data.staffUpdate.errors) ); const deleteTransitionState = getMutationState( deleteResult.called, deleteResult.loading, maybe(() => deleteResult.data.staffDelete.errors) ); const deleteAvatarTransitionState = getMutationState( deleteAvatarResult.called, deleteAvatarResult.loading, maybe( () => deleteAvatarResult.data.userAvatarDelete.errors ) ); const isUserSameAsViewer = maybe( () => user.user.id === data.user.id, true ); return ( <> data.user.email)} /> navigate(staffListUrl())} onDelete={() => navigate( staffMemberDetailsUrl(id, { action: "remove" }) ) } onSubmit={variables => updateStaffMember({ variables: { id, input: { email: variables.email, firstName: variables.firstName, isActive: variables.isActive, lastName: variables.lastName, permissions: variables.permissions } } }) } onImageUpload={file => updateStaffAvatar({ variables: { image: file } }) } onImageDelete={() => navigate( staffMemberDetailsUrl(id, { action: "remove-avatar" }) ) } permissions={maybe(() => shop.permissions)} staffMember={maybe(() => data.user)} saveButtonBarState={formTransitionState} /> navigate(staffMemberDetailsUrl(id)) } onConfirm={deleteStaffMember} > data.user.email, "...") }} /> navigate(staffMemberDetailsUrl(id)) } onConfirm={deleteStaffAvatar} > {maybe(() => data.user.email, "...")} ) }} /> ); }} )} )} )} ); }} ); }; export default StaffDetails;