import React, { createContext, useEffect, useMemo, useState } from 'react' import type { FC } from 'react' import controller from './controller' export interface IContext { postalCode: Maybe regionId: Maybe setPostalCode: (value: Maybe) => void setRegionId: (value: Maybe) => void loading?: boolean } export const Context = createContext(undefined) export const Provider: FC = ({ children }) => { const [isLoading, setLoading] = useState(true) const [postalCode, setPostalCode] = useState>( controller.postalCode.get() ) const [regionId, setRegionId] = useState>( controller.region.get() ) const value = useMemo( () => ({ postalCode, regionId, setPostalCode: (val: Maybe) => { controller.postalCode.set(val) setPostalCode(val) }, setRegionId: (val: Maybe) => { controller.region.set(val) setRegionId(val) }, loading: isLoading, }), [postalCode, regionId, isLoading] ) useEffect(() => { setLoading(false) }, []) return {children} }