import Typography from "@material-ui/core/Typography"; import * as React from "react"; 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 CountryList from "@saleor/components/CountryList"; 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 { Tab, TabContainer } from "@saleor/components/Tab"; import i18n from "../../../i18n"; import { maybe } from "../../../misc"; import { ListProps, TabListActions, UserError } from "../../../types"; import { VoucherDiscountValueType, VoucherType } from "../../../types/globalTypes"; import { VoucherDetails_voucher } from "../../types/VoucherDetails"; import DiscountCategories from "../DiscountCategories"; import DiscountCollections from "../DiscountCollections"; import DiscountProducts from "../DiscountProducts"; import VoucherInfo from "../VoucherInfo"; import VoucherOptions from "../VoucherOptions"; import VoucherSummary from "../VoucherSummary"; export enum VoucherDetailsPageTab { categories = "categories", collections = "collections", products = "products" } export function voucherDetailsPageTab(tab: string): VoucherDetailsPageTab { return tab === VoucherDetailsPageTab.products ? VoucherDetailsPageTab.products : tab === VoucherDetailsPageTab.collections ? VoucherDetailsPageTab.collections : VoucherDetailsPageTab.categories; } export interface FormData { applyOncePerOrder: boolean; code: string; discountType: VoucherDiscountValueType; endDate: string; minAmountSpent: number; name: string; startDate: string; type: VoucherType; usageLimit: number; value: number; } export interface VoucherDetailsPageProps extends Pick>, TabListActions< "categoryListToolbar" | "collectionListToolbar" | "productListToolbar" > { activeTab: VoucherDetailsPageTab; defaultCurrency: string; errors: UserError[]; saveButtonBarState: ConfirmButtonTransitionState; voucher: VoucherDetails_voucher; onBack: () => void; onCategoryAssign: () => void; onCategoryUnassign: (id: string) => void; onCategoryClick: (id: string) => () => void; onCollectionAssign: () => void; onCollectionUnassign: (id: string) => void; onCollectionClick: (id: string) => () => void; onCountryAssign: () => void; onCountryUnassign: (code: string) => void; onProductAssign: () => void; onProductUnassign: (id: string) => void; onProductClick: (id: string) => () => void; onRemove: () => void; onSubmit: (data: FormData) => void; onTabClick: (index: VoucherDetailsPageTab) => void; } const CategoriesTab = Tab(VoucherDetailsPageTab.categories); const CollectionsTab = Tab(VoucherDetailsPageTab.collections); const ProductsTab = Tab(VoucherDetailsPageTab.products); const VoucherDetailsPage: React.StatelessComponent = ({ activeTab, defaultCurrency, disabled, errors, pageInfo, saveButtonBarState, voucher, onBack, onCategoryAssign, onCategoryClick, onCategoryUnassign, onCountryAssign, onCountryUnassign, onCollectionAssign, onCollectionClick, onCollectionUnassign, onNextPage, onPreviousPage, onProductAssign, onProductClick, onProductUnassign, onTabClick, onRemove, onSubmit, toggle, toggleAll, selected, isChecked, categoryListToolbar, collectionListToolbar, productListToolbar }) => { const initialForm: FormData = { applyOncePerOrder: maybe(() => voucher.applyOncePerOrder, false), code: maybe(() => voucher.code, ""), discountType: maybe( () => voucher.discountValueType, VoucherDiscountValueType.FIXED ), endDate: maybe(() => voucher.endDate, ""), minAmountSpent: maybe(() => voucher.minAmountSpent.amount, 0), name: maybe(() => voucher.name, ""), startDate: maybe(() => voucher.startDate, ""), type: maybe(() => voucher.type, VoucherType.VALUE), usageLimit: maybe(() => voucher.usageLimit || 0, 0), value: maybe(() => voucher.discountValue, 0) }; return (
{({ change, data, errors: formErrors, hasChanged, submit }) => ( {i18n.t("Vouchers")} voucher.name)} />
{data.type === VoucherType.CATEGORY || data.type === VoucherType.COLLECTION || data.type === VoucherType.PRODUCT ? ( <> {i18n.t("Categories ({{ number }})", { number: maybe( () => voucher.categories.totalCount.toString(), "…" ) })} {i18n.t("Collections ({{ number }})", { number: maybe( () => voucher.collections.totalCount.toString(), "…" ) })} {i18n.t("Products ({{ number }})", { number: maybe( () => voucher.products.totalCount.toString(), "…" ) })} {activeTab === VoucherDetailsPageTab.categories ? ( ) : activeTab === VoucherDetailsPageTab.collections ? ( ) : ( )} ) : data.type === VoucherType.SHIPPING ? ( voucher.countries)} disabled={disabled} emptyText={i18n.t("Voucher applies to all countries")} title={ <> {i18n.t("Countries assigned to {{ voucherName }}", { voucherName: maybe(() => voucher.name) })} {i18n.t("Vouchers limited to these countries")} } onCountryAssign={onCountryAssign} onCountryUnassign={onCountryUnassign} /> ) : null}
)}
); }; VoucherDetailsPage.displayName = "VoucherDetailsPage"; export default VoucherDetailsPage;