import { Box, Button, ButtonGroup, Container, Flex, Heading, Stack, Text, useBreakpointValue, useMediaQuery, useToast, } from '@chakra-ui/react'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { __ } from '@wordpress/i18n'; import React, { useEffect } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import { BiCog } from 'react-icons/bi'; import { useNavigate } from 'react-router'; import { Link, NavLink, useParams } from 'react-router-dom'; import BackButton from '../../../../../assets/js/back-end/components/common/BackButton'; import { Header, HeaderLeftSection, HeaderLogo, HeaderTop, } from '../../../../../assets/js/back-end/components/common/Header'; import { NavMenu, NavMenuItem, NavMenuLink, } from '../../../../../assets/js/back-end/components/common/Nav'; import { navActiveStyles } from '../../../../../assets/js/back-end/config/styles'; import routes from '../../../../../assets/js/back-end/constants/routes'; import { useWarnUnsavedChanges } from '../../../../../assets/js/back-end/hooks/useWarnUnSavedChanges'; import API from '../../../../../assets/js/back-end/utils/api'; import { deepClean } from '../../../../../assets/js/back-end/utils/utils'; import { urls } from '../constants/urls'; import { multipleCurrencyBackendRoutes } from '../routes/routes'; import { PriceZoneSchema } from '../types/multiCurrency'; import SkeletonEdit from './Skeleton/SkeletonEdit'; import Countries from './components/Countries'; import Currency from './components/Currency'; import ExchangeRate from './components/ExchangeRate'; import Name from './components/Name'; import PriceZoneActionBtn from './components/PriceZoneActionBtn'; const headerTabStyles = { mr: '10', py: '6', d: 'flex', gap: 1, justifyContent: 'flex-start', alignItems: 'center', fontWeight: 'medium', fontSize: ['xs', null, 'sm'], }; const EditPriceZone: React.FC = () => { const { pricingZoneID }: any = useParams(); const toast = useToast(); const queryClient = useQueryClient(); const methods = useForm(); const navigate = useNavigate(); const pricingZoneAPI = new API(urls.pricingZones); const [isLargerThan992] = useMediaQuery('(min-width: 992px)'); const buttonSize = useBreakpointValue(['sm', 'md']); const pricingZoneQuery = useQuery({ queryKey: [`pricingZone${pricingZoneID}`, pricingZoneID], queryFn: () => pricingZoneAPI.get(pricingZoneID, 'edit'), }); useEffect(() => { if (pricingZoneQuery?.isError) { navigate(routes.notFound); } }, [pricingZoneQuery?.isError, navigate]); const updatePriceZone = useMutation({ mutationFn: (data) => pricingZoneAPI.update(pricingZoneID, data), ...{ onSuccess: () => { queryClient.invalidateQueries({ queryKey: [`pricingZone${pricingZoneID}`], }); queryClient.invalidateQueries({ queryKey: [`pricingZonesList`] }); toast({ title: __( 'PriceZone updated successfully.', 'learning-management-system', ), isClosable: true, status: 'success', }); navigate(multipleCurrencyBackendRoutes.list); }, onError: (error: any) => { const message: any = error?.message ? error?.message : error?.data?.message; toast({ title: __( 'Failed to update the pricing zone.', 'learning-management-system', ), description: message ? `${message}` : undefined, status: 'error', isClosable: true, }); }, }, }); const onSubmit = (data: any) => { updatePriceZone.mutate(deepClean(data)); }; useWarnUnsavedChanges(methods.formState.isDirty); useEffect(() => { if (pricingZoneQuery?.isSuccess && pricingZoneQuery?.data) { methods.reset(methods.getValues()); } }, [pricingZoneQuery?.data]); const FormButton = () => ( ); return (
{__('Edit Pricing Zone', 'learning-management-system')} } > {__('Settings', 'learning-management-system')}
{pricingZoneQuery.isSuccess ? (
{__( 'Edit Pricing Zone', 'learning-management-system', )} {isLargerThan992 ? : null} {!isLargerThan992 ? : null}
) : ( )}
); }; export default EditPriceZone;