import React, { createContext, useContext, useState, useEffect } from 'react'; import { removeSpecialCharacter } from '../utils/postalCode'; import { getFullLocalStorage } from '../utils/localStorage'; import type { RegionalizationProps } from '../types/RegionalizationProps'; import type { ContextProps, View, DeliveryProps } from '../types/ContextProps'; import type { Address } from '../types/Address'; import type { PikcupPointType } from '../types/PikcupPointType'; const RegionalizationContext = createContext< (RegionalizationProps & ContextProps) | null >(null); export const RegionalizationContextProvider = ({ setMethod, setPickupName, setCity, setUf, setPickupTimes, pricesAndHours, setModalOpen, inputPostalCode, setInputPostalCode, sendPostalCode, status, setStatus, pickupPoints, titleText, moreInfosText, textBackButton, confirmButton, editAddress, delivery, deliveryPrice, pickup, regionalizeCatalog, children, }: RegionalizationProps & ContextProps) => { const [internalMethod, setInternalMethod] = useState(); const [view, setView] = useState('PostalCodeInputScreen'); const [postalCode, setPostalCode] = useState(''); const [address, setAddress] = useState
(); const [pickupAddress, setPickupAddress] = useState(); const [deliveryRequestInfos, setDeliveryRequestInfos] = useState< undefined | DeliveryProps >(); const pickupTimes = { openingTime: pickupAddress?.businessHours.businessHoursWeek.openingTime.slice(0, 2) ?? '', closingTime: pickupAddress?.businessHours.businessHoursWeek.closingTime.slice(0, 2) ?? '', }; const asyncSendPostalCode = async () => { setStatus({ loading: true, message: 'Carregando...' }); const { isValid, address: addressRequest, deliveryInfos: deliveryData, } = await sendPostalCode(); if (isValid) { setStatus({ loading: false }); setInternalMethod('delivery'); setAddress(addressRequest); setStatus({}); setPostalCode(inputPostalCode); setDeliveryRequestInfos(deliveryData); setView('ConfirmScreen'); } }; const postalCodeValidation = () => { const validatePostalCode = /\d{8}$/.test( removeSpecialCharacter(inputPostalCode) ); if (validatePostalCode) { asyncSendPostalCode(); } else { setStatus({ status: 'failed', loading: false, message: 'Informe um Cep valido ', }); } }; useEffect(() => { setPostalCode(getFullLocalStorage()?.userAddressInfos?.postalCode); setMethod?.(getFullLocalStorage()?.regionalized); setDeliveryRequestInfos(getFullLocalStorage()?.deliveryInfos); }, []); return ( {children} ); }; export const useRegionalizationContext = () => { const context = useContext(RegionalizationContext); if (!context) { throw new Error( 'useRegionalizationContext must be used within a RegionalizationContextProvider' ); } return context; };