import { ChannelSaleData } from "@saleor/channels/utils"; import AppHeader from "@saleor/components/AppHeader"; import CardSpacer from "@saleor/components/CardSpacer"; import ChannelsAvailabilityCard from "@saleor/components/ChannelsAvailabilityCard"; 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 { createSaleChannelsChangeHandler } from "@saleor/discounts/handlers"; import { DiscountErrorFragment } from "@saleor/fragments/types/DiscountErrorFragment"; import { sectionNames } from "@saleor/intl"; import { validatePrice } from "@saleor/products/utils/validation"; import React from "react"; import { useIntl } from "react-intl"; import { SaleType as SaleTypeEnum } from "../../../types/globalTypes"; import DiscountDates from "../DiscountDates"; import SaleInfo from "../SaleInfo"; import SaleType from "../SaleType"; import SaleValue from "../SaleValue"; export interface FormData { channelListings: ChannelSaleData[]; endDate: string; endTime: string; hasEndDate: boolean; name: string; startDate: string; startTime: string; type: SaleTypeEnum; value: string; } export interface SaleCreatePageProps { allChannelsCount: number; channelListings: ChannelSaleData[]; disabled: boolean; errors: DiscountErrorFragment[]; saveButtonBarState: ConfirmButtonTransitionState; onBack: () => void; onChannelsChange: (data: ChannelSaleData[]) => void; openChannelsModal: () => void; onSubmit: (data: FormData) => void; } const SaleCreatePage: React.FC = ({ allChannelsCount, channelListings = [], disabled, errors, onChannelsChange, onSubmit, openChannelsModal, saveButtonBarState, onBack }) => { const intl = useIntl(); const initialForm: FormData = { channelListings, endDate: "", endTime: "", hasEndDate: false, name: "", startDate: "", startTime: "", type: SaleTypeEnum.FIXED, value: "" }; return (
{({ change, data, hasChanged, submit, triggerChange }) => { const handleChannelChange = createSaleChannelsChangeHandler( data.channelListings, onChannelsChange, triggerChange ); const formDisabled = data.channelListings?.some(channel => validatePrice(channel?.discountValue) ); return ( {intl.formatMessage(sectionNames.sales)}
({ id: channel.id, name: channel.name }))} disabled={disabled} openModal={openChannelsModal} />
); }}
); }; SaleCreatePage.displayName = "SaleCreatePage"; export default SaleCreatePage;