import { validateSalePrice } from "@saleor/channels/utils"; import CardSpacer from "@saleor/components/CardSpacer"; import ChannelsAvailabilityCard from "@saleor/components/ChannelsAvailabilityCard"; import Container from "@saleor/components/Container"; import Form from "@saleor/components/Form"; import Grid from "@saleor/components/Grid"; import Metadata, { MetadataFormData } from "@saleor/components/Metadata"; import PageHeader from "@saleor/components/PageHeader"; import Savebar from "@saleor/components/Savebar"; import { createSaleChannelsChangeHandler } from "@saleor/discounts/handlers"; import { SALE_CREATE_FORM_ID } from "@saleor/discounts/views/SaleCreate/consts"; import { DiscountErrorFragment } from "@saleor/fragments/types/DiscountErrorFragment"; import { SubmitPromise } from "@saleor/hooks/useForm"; import { sectionNames } from "@saleor/intl"; import { ConfirmButtonTransitionState } from "@saleor/macaw-ui"; import { Backlink } from "@saleor/macaw-ui"; import useMetadataChangeTrigger from "@saleor/utils/metadata/useMetadataChangeTrigger"; import React from "react"; import { useIntl } from "react-intl"; import { PermissionEnum, SaleType as SaleTypeEnum } from "../../../types/globalTypes"; import DiscountDates from "../DiscountDates"; import { ChannelSaleFormData } from "../SaleDetailsPage"; import SaleInfo from "../SaleInfo"; import SaleType from "../SaleType"; import SaleValue from "../SaleValue"; export interface FormData extends MetadataFormData { channelListings: ChannelSaleFormData[]; endDate: string; endTime: string; hasEndDate: boolean; name: string; startDate: string; startTime: string; type: SaleTypeEnum; value: string; } export interface SaleCreatePageProps { allChannelsCount: number; channelListings: ChannelSaleFormData[]; disabled: boolean; errors: DiscountErrorFragment[]; saveButtonBarState: ConfirmButtonTransitionState; onBack: () => void; onChannelsChange: (data: ChannelSaleFormData[]) => void; openChannelsModal: () => void; onSubmit: (data: FormData) => SubmitPromise; } const SaleCreatePage: React.FC = ({ allChannelsCount, channelListings = [], disabled, errors, onChannelsChange, onSubmit, openChannelsModal, saveButtonBarState, onBack }) => { const intl = useIntl(); const { makeChangeHandler: makeMetadataChangeHandler } = useMetadataChangeTrigger(); const initialForm: FormData = { channelListings, endDate: "", endTime: "", hasEndDate: false, name: "", startDate: "", startTime: "", type: SaleTypeEnum.FIXED, value: "", metadata: [], privateMetadata: [] }; return (
{({ change, data, hasChanged, submit, triggerChange }) => { const handleChannelChange = createSaleChannelsChangeHandler( data.channelListings, onChannelsChange, triggerChange, data.type ); const formDisabled = data.channelListings?.some(channel => validateSalePrice(data, channel) ); const changeMetadata = makeMetadataChangeHandler(change); return ( {intl.formatMessage(sectionNames.sales)}
({ id: channel.id, name: channel.name }))} disabled={disabled} openModal={openChannelsModal} />
); }}
); }; SaleCreatePage.displayName = "SaleCreatePage"; export default SaleCreatePage;