import { useChannelsList } from "@saleor/channels/queries"; import { createSortedShippingChannels } from "@saleor/channels/utils"; import ChannelsAvailabilityDialog from "@saleor/components/ChannelsAvailabilityDialog"; import { WindowTitle } from "@saleor/components/WindowTitle"; import useChannels from "@saleor/hooks/useChannels"; import useNavigator from "@saleor/hooks/useNavigator"; import { sectionNames } from "@saleor/intl"; import ShippingZonePostalCodeRangeDialog from "@saleor/shipping/components/ShippingZonePostalCodeRangeDialog"; import ShippingZoneRatesCreatePage from "@saleor/shipping/components/ShippingZoneRatesCreatePage"; import { useShippingRateCreator } from "@saleor/shipping/handlers"; import { shippingPriceRatesUrl, ShippingRateCreateUrlDialog, ShippingRateCreateUrlQueryParams, shippingZoneUrl } from "@saleor/shipping/urls"; import filterPostalCodes from "@saleor/shipping/views/utils"; import { MinMax } from "@saleor/types"; import { PostalCodeRuleInclusionTypeEnum, ShippingMethodTypeEnum } from "@saleor/types/globalTypes"; import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers"; import React from "react"; import { useIntl } from "react-intl"; export interface PriceRatesCreateProps { id: string; params: ShippingRateCreateUrlQueryParams; } export const PriceRatesCreate: React.FC = ({ id, params }) => { const navigate = useNavigator(); const intl = useIntl(); const [postalCodes, setPostalCodes] = React.useState([]); const [radioInclusionType, setRadioInclusionType] = React.useState( PostalCodeRuleInclusionTypeEnum.EXCLUDE ); const { data: channelsData, loading: channelsLoading } = useChannelsList({}); const [openModal, closeModal] = createDialogActionHandlers< ShippingRateCreateUrlDialog, ShippingRateCreateUrlQueryParams >(navigate, params => shippingPriceRatesUrl(id, params), params); const allChannels = createSortedShippingChannels(channelsData?.channels); const { channelListElements, channelsToggle, currentChannels, handleChannelsConfirm, handleChannelsModalClose, handleChannelsModalOpen, isChannelSelected, isChannelsModalOpen, setCurrentChannels, toggleAllChannels } = useChannels(allChannels, params?.action, { closeModal, openModal }); const { channelErrors, createShippingRate, errors, status } = useShippingRateCreator( id, ShippingMethodTypeEnum.PRICE, postalCodes, radioInclusionType ); const handleBack = () => navigate(shippingZoneUrl(id)); const handlePostalCodeRangeAdd = (data: MinMax) => { setPostalCodes(postalCodes => [ ...postalCodes, { end: data.max, start: data.min } ]); closeModal(); }; const onPostalCodeInclusionChange = ( inclusion: PostalCodeRuleInclusionTypeEnum ) => { setRadioInclusionType(inclusion); setPostalCodes([]); }; const onPostalCodeUnassign = code => { setPostalCodes(filterPostalCodes(postalCodes, code)); closeModal(); }; return ( <> {!!allChannels?.length && ( )} openModal("add-range")} onPostalCodeUnassign={onPostalCodeUnassign} onPostalCodeInclusionChange={onPostalCodeInclusionChange} variant={ShippingMethodTypeEnum.PRICE} /> ); }; export default PriceRatesCreate;