2019-08-09 10:26:22 +00:00
|
|
|
import React from "react";
|
2019-08-26 21:43:29 +00:00
|
|
|
import { useIntl } from "react-intl";
|
2019-06-19 14:40:52 +00:00
|
|
|
|
2019-09-26 13:16:36 +00:00
|
|
|
import AccountPermissions from "@saleor/components/AccountPermissions";
|
2019-09-26 13:25:26 +00:00
|
|
|
import AccountStatus from "@saleor/components/AccountStatus";
|
2019-06-19 14:40:52 +00:00
|
|
|
import AppHeader from "@saleor/components/AppHeader";
|
|
|
|
import CardSpacer from "@saleor/components/CardSpacer";
|
|
|
|
import { ConfirmButtonTransitionState } from "@saleor/components/ConfirmButton";
|
|
|
|
import Container from "@saleor/components/Container";
|
|
|
|
import Form from "@saleor/components/Form";
|
|
|
|
import Grid from "@saleor/components/Grid";
|
|
|
|
import PageHeader from "@saleor/components/PageHeader";
|
|
|
|
import SaveButtonBar from "@saleor/components/SaveButtonBar";
|
2019-09-26 13:16:36 +00:00
|
|
|
import { ShopInfo_shop_permissions } from "@saleor/components/Shop/types/ShopInfo";
|
2019-08-26 21:43:29 +00:00
|
|
|
import { sectionNames } from "@saleor/intl";
|
2019-06-19 14:40:52 +00:00
|
|
|
import { getUserName, maybe } from "../../../misc";
|
|
|
|
import { PermissionEnum } from "../../../types/globalTypes";
|
2019-09-26 13:16:36 +00:00
|
|
|
import { StaffMemberDetails_user } from "../../types/StaffMemberDetails";
|
2019-06-19 14:40:52 +00:00
|
|
|
import StaffProperties from "../StaffProperties/StaffProperties";
|
|
|
|
|
|
|
|
interface FormData {
|
|
|
|
hasFullAccess: boolean;
|
|
|
|
isActive: boolean;
|
|
|
|
permissions: PermissionEnum[];
|
|
|
|
firstName: string;
|
|
|
|
lastName: string;
|
|
|
|
email: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface StaffDetailsPageProps {
|
|
|
|
canEditAvatar: boolean;
|
|
|
|
canEditStatus: boolean;
|
|
|
|
canRemove: boolean;
|
|
|
|
disabled: boolean;
|
2019-09-26 13:16:36 +00:00
|
|
|
permissions: ShopInfo_shop_permissions[];
|
2019-06-19 14:40:52 +00:00
|
|
|
saveButtonBarState: ConfirmButtonTransitionState;
|
|
|
|
staffMember: StaffMemberDetails_user;
|
|
|
|
onBack: () => void;
|
|
|
|
onDelete: () => void;
|
|
|
|
onImageDelete: () => void;
|
|
|
|
onSubmit: (data: FormData) => void;
|
|
|
|
onImageUpload(file: File);
|
|
|
|
}
|
|
|
|
|
|
|
|
const StaffDetailsPage: React.StatelessComponent<StaffDetailsPageProps> = ({
|
|
|
|
canEditAvatar,
|
|
|
|
canEditStatus,
|
|
|
|
canRemove,
|
|
|
|
disabled,
|
|
|
|
permissions,
|
|
|
|
saveButtonBarState,
|
|
|
|
staffMember,
|
|
|
|
onBack,
|
|
|
|
onDelete,
|
|
|
|
onImageDelete,
|
|
|
|
onImageUpload,
|
|
|
|
onSubmit
|
|
|
|
}: StaffDetailsPageProps) => {
|
2019-08-26 21:43:29 +00:00
|
|
|
const intl = useIntl();
|
|
|
|
|
2019-06-19 14:40:52 +00:00
|
|
|
const initialForm: FormData = {
|
2019-08-09 11:14:35 +00:00
|
|
|
email: maybe(() => staffMember.email, ""),
|
|
|
|
firstName: maybe(() => staffMember.firstName, ""),
|
2019-06-19 14:40:52 +00:00
|
|
|
hasFullAccess: maybe(
|
|
|
|
() =>
|
|
|
|
permissions.filter(
|
|
|
|
perm =>
|
|
|
|
maybe(() => staffMember.permissions, []).filter(
|
|
|
|
userPerm => userPerm.code === perm.code
|
|
|
|
).length === 0
|
|
|
|
).length === 0,
|
|
|
|
false
|
|
|
|
),
|
|
|
|
isActive: maybe(() => staffMember.isActive, false),
|
2019-08-09 11:14:35 +00:00
|
|
|
lastName: maybe(() => staffMember.lastName, ""),
|
2019-06-19 14:40:52 +00:00
|
|
|
permissions: maybe(() => staffMember.permissions, []).map(perm => perm.code)
|
|
|
|
};
|
|
|
|
return (
|
|
|
|
<Form initial={initialForm} onSubmit={onSubmit} confirmLeave>
|
|
|
|
{({ data, change, hasChanged, submit }) => (
|
|
|
|
<Container>
|
2019-08-26 21:43:29 +00:00
|
|
|
<AppHeader onBack={onBack}>
|
|
|
|
{intl.formatMessage(sectionNames.staff)}
|
|
|
|
</AppHeader>
|
2019-06-19 14:40:52 +00:00
|
|
|
<PageHeader title={getUserName(staffMember)} />
|
|
|
|
<Grid>
|
|
|
|
<div>
|
|
|
|
<StaffProperties
|
|
|
|
data={data}
|
|
|
|
disabled={disabled}
|
|
|
|
canEditAvatar={canEditAvatar}
|
|
|
|
staffMember={staffMember}
|
|
|
|
onChange={change}
|
|
|
|
onImageUpload={onImageUpload}
|
|
|
|
onImageDelete={onImageDelete}
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
{canEditStatus && (
|
|
|
|
<div>
|
2019-09-26 13:16:36 +00:00
|
|
|
<AccountPermissions
|
2019-06-19 14:40:52 +00:00
|
|
|
data={data}
|
|
|
|
disabled={disabled}
|
|
|
|
permissions={permissions}
|
|
|
|
onChange={change}
|
|
|
|
/>
|
|
|
|
<CardSpacer />
|
2019-09-26 13:25:26 +00:00
|
|
|
<AccountStatus
|
2019-06-19 14:40:52 +00:00
|
|
|
data={data}
|
|
|
|
disabled={disabled}
|
2019-10-04 10:57:40 +00:00
|
|
|
label={intl.formatMessage({
|
|
|
|
defaultMessage: "User is active",
|
|
|
|
description: "checkbox label"
|
|
|
|
})}
|
2019-06-19 14:40:52 +00:00
|
|
|
onChange={change}
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
)}
|
|
|
|
</Grid>
|
|
|
|
<SaveButtonBar
|
|
|
|
disabled={disabled || !hasChanged}
|
|
|
|
state={saveButtonBarState}
|
|
|
|
onCancel={onBack}
|
|
|
|
onSave={submit}
|
|
|
|
onDelete={canRemove ? onDelete : undefined}
|
|
|
|
/>
|
|
|
|
</Container>
|
|
|
|
)}
|
|
|
|
</Form>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
StaffDetailsPage.displayName = "StaffDetailsPage";
|
|
|
|
export default StaffDetailsPage;
|