import React from "react"; import { FormattedMessage, useIntl } from "react-intl"; 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 { maybe } from "../../../misc"; import { UserError } from "../../../types"; import { ShippingMethodTypeEnum } from "../../../types/globalTypes"; import { ShippingZoneDetailsFragment } from "../../types/ShippingZoneDetailsFragment"; import ShippingZoneInfo from "../ShippingZoneInfo"; import ShippingZoneRates from "../ShippingZoneRates"; export interface FormData { name: string; } export interface ShippingZoneDetailsPageProps { disabled: boolean; errors: UserError[]; saveButtonBarState: ConfirmButtonTransitionState; shippingZone: ShippingZoneDetailsFragment; onBack: () => void; onCountryAdd: () => void; onCountryRemove: (code: string) => void; onDelete: () => void; onPriceRateAdd: () => void; onPriceRateEdit: (id: string) => void; onRateRemove: (rateId: string) => void; onSubmit: (data: FormData) => void; onWeightRateAdd: () => void; onWeightRateEdit: (id: string) => void; } const ShippingZoneDetailsPage: React.StatelessComponent< ShippingZoneDetailsPageProps > = ({ disabled, errors, onBack, onCountryAdd, onCountryRemove, onDelete, onPriceRateAdd, onPriceRateEdit, onRateRemove, onSubmit, onWeightRateAdd, onWeightRateEdit, saveButtonBarState, shippingZone }) => { const intl = useIntl(); const initialForm: FormData = { name: maybe(() => shippingZone.name, "") }; return (
{({ change, data, errors: formErrors, hasChanged, submit }) => ( shippingZone.name)} />
shippingZone.countries)} disabled={disabled} emptyText={maybe( () => shippingZone.default ? intl.formatMessage({ defaultMessage: "This is default shipping zone, which means that it covers all of the countries which are not assigned to other shipping zones" }) : intl.formatMessage({ defaultMessage: "Currently, there are no countries assigned to this shipping zone" }), "..." )} onCountryAssign={onCountryAdd} onCountryUnassign={onCountryRemove} title={intl.formatMessage({ defaultMessage: "Countries" })} /> shippingZone.shippingMethods.filter( method => method.type === ShippingMethodTypeEnum.PRICE ) )} variant="price" /> shippingZone.shippingMethods.filter( method => method.type === ShippingMethodTypeEnum.WEIGHT ) )} variant="weight" />
)}
); }; ShippingZoneDetailsPage.displayName = "ShippingZoneDetailsPage"; export default ShippingZoneDetailsPage;