import React from "react"; import { 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 { sectionNames } from "@saleor/intl"; import { CountryFragment } from "../../../taxes/types/CountryFragment"; import { UserError } from "../../../types"; import ShippingZoneCountriesAssignDialog from "../ShippingZoneCountriesAssignDialog"; import ShippingZoneInfo from "../ShippingZoneInfo"; export interface FormData { countries: string[]; default: boolean; name: string; } export interface ShippingZoneCreatePageProps { countries: CountryFragment[]; disabled: boolean; errors: UserError[]; saveButtonBarState: ConfirmButtonTransitionState; onBack: () => void; onSubmit: (data: FormData) => void; } const ShippingZoneCreatePage: React.FC = ({ countries, disabled, errors, onBack, onSubmit, saveButtonBarState }) => { const intl = useIntl(); const [isModalOpened, setModalStatus] = React.useState(false); const toggleModal = () => setModalStatus(!isModalOpened); const initialForm: FormData = { countries: [], default: false, name: "" }; return (
{({ change, data, hasChanged, submit }) => ( <> {intl.formatMessage(sectionNames.shipping)}
countries.find(country => country.code === selectedCountry) )} disabled={disabled} emptyText={ data.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={toggleModal} onCountryUnassign={countryCode => change({ target: { name: "countries", value: data.countries.filter( country => country !== countryCode ) } } as any) } title={intl.formatMessage({ defaultMessage: "Countries" })} />
{ change({ target: { name: "countries", value: formData.restOfTheWorld ? [] : formData.countries } } as any); toggleModal(); }} confirmButtonState="default" countries={countries} initial={data.countries} isDefault={data.default} onClose={toggleModal} /> )} ); }; ShippingZoneCreatePage.displayName = "ShippingZoneCreatePage"; export default ShippingZoneCreatePage;