saleor-dashboard/src/customers/components/CustomerDetailsPage/CustomerDetailsPage.tsx

125 lines
3.8 KiB
TypeScript
Raw Normal View History

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";
import { AccountErrorFragment } from "@saleor/fragments/types/AccountErrorFragment";
import { SubmitPromise } from "@saleor/hooks/useForm";
import { sectionNames } from "@saleor/intl";
import React from "react";
import { useIntl } from "react-intl";
2019-06-19 14:40:52 +00:00
import { getUserName, maybe } from "../../../misc";
import { CustomerDetails_user } from "../../types/CustomerDetails";
2019-11-12 12:21:37 +00:00
import CustomerAddresses from "../CustomerAddresses";
import CustomerDetails from "../CustomerDetails";
import CustomerInfo from "../CustomerInfo";
import CustomerOrders from "../CustomerOrders";
import CustomerStats from "../CustomerStats";
2019-06-19 14:40:52 +00:00
export interface CustomerDetailsPageFormData {
firstName: string;
lastName: string;
email: string;
isActive: boolean;
note: string;
}
export interface CustomerDetailsPageProps {
customer: CustomerDetails_user;
disabled: boolean;
2020-03-11 09:55:14 +00:00
errors: AccountErrorFragment[];
2019-06-19 14:40:52 +00:00
saveButtonBar: ConfirmButtonTransitionState;
onBack: () => void;
onSubmit: (data: CustomerDetailsPageFormData) => SubmitPromise;
2019-06-19 14:40:52 +00:00
onViewAllOrdersClick: () => void;
onRowClick: (id: string) => void;
onAddressManageClick: () => void;
onDelete: () => void;
}
const CustomerDetailsPage: React.FC<CustomerDetailsPageProps> = ({
2019-06-19 14:40:52 +00:00
customer,
disabled,
errors,
saveButtonBar,
onBack,
onSubmit,
onViewAllOrdersClick,
onRowClick,
onAddressManageClick,
onDelete
}: CustomerDetailsPageProps) => {
const intl = useIntl();
return (
<Form
initial={{
email: maybe(() => customer.email, ""),
firstName: maybe(() => customer.firstName, ""),
isActive: maybe(() => customer.isActive, false),
lastName: maybe(() => customer.lastName, ""),
note: maybe(() => customer.note, "")
}}
onSubmit={onSubmit}
confirmLeave
>
2020-02-24 14:14:48 +00:00
{({ change, data, hasChanged, submit }) => (
<Container>
<AppHeader onBack={onBack}>
{intl.formatMessage(sectionNames.customers)}
</AppHeader>
<PageHeader title={getUserName(customer, true)} />
<Grid>
<div>
<CustomerDetails
customer={customer}
data={data}
disabled={disabled}
2020-02-24 14:14:48 +00:00
errors={errors}
onChange={change}
2019-11-12 12:21:37 +00:00
/>
<CardSpacer />
<CustomerInfo
data={data}
disabled={disabled}
2020-02-24 14:14:48 +00:00
errors={errors}
2019-11-12 12:21:37 +00:00
onChange={change}
/>
<CardSpacer />
<CustomerOrders
orders={maybe(() =>
customer.orders.edges.map(edge => edge.node)
)}
onViewAllOrdersClick={onViewAllOrdersClick}
onRowClick={onRowClick}
/>
</div>
<div>
<CustomerAddresses
customer={customer}
disabled={disabled}
onAddressManageClick={onAddressManageClick}
/>
<CardSpacer />
<CustomerStats customer={customer} />
</div>
</Grid>
<SaveButtonBar
disabled={disabled || !hasChanged}
state={saveButtonBar}
onSave={submit}
onCancel={onBack}
onDelete={onDelete}
/>
</Container>
)}
</Form>
);
};
2019-06-19 14:40:52 +00:00
CustomerDetailsPage.displayName = "CustomerDetailsPage";
export default CustomerDetailsPage;