UNPKG

analytica-frontend-lib

Version:

Repositório público dos componentes utilizados nas plataformas da Analytica Ensino

1 lines 2.79 kB
{"version":3,"sources":["../src/hooks/useCep.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\n\nexport interface CepData {\n cep: string;\n logradouro: string;\n complemento: string;\n bairro: string;\n localidade: string;\n uf: string;\n erro?: boolean;\n}\n\ninterface UseCepResult {\n loading: boolean;\n error: string | null;\n fetchCep: (cep: string) => Promise<CepData | null>;\n}\n\n/**\n * Hook para buscar dados de endereço pela API ViaCEP\n *\n * @example\n * ```tsx\n * const { loading, error, fetchCep } = useCep();\n *\n * const handleCepChange = async (cep: string) => {\n * const data = await fetchCep(cep);\n * if (data) {\n * setStreet(data.logradouro);\n * setCity(data.localidade);\n * setState(data.uf);\n * setNeighborhood(data.bairro);\n * }\n * };\n * ```\n */\nexport function useCep(): UseCepResult {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchCep = useCallback(async (cep: string): Promise<CepData | null> => {\n // Remove caracteres não numéricos\n const cleanCep = cep.replace(/\\D/g, '');\n\n // Valida se o CEP tem 8 dígitos\n if (cleanCep.length !== 8) {\n setError('CEP deve conter 8 dígitos');\n return null;\n }\n\n setLoading(true);\n setError(null);\n\n try {\n const response = await fetch(\n `https://viacep.com.br/ws/${cleanCep}/json/`\n );\n\n if (!response.ok) {\n throw new Error('Erro ao buscar CEP');\n }\n\n const data: CepData = await response.json();\n\n if (data.erro) {\n setError('CEP não encontrado');\n return null;\n }\n\n return data;\n } catch (err) {\n // Log error details for debugging\n console.error('Erro ao buscar CEP:', err);\n\n // Always show user-friendly Portuguese message\n setError('Erro ao buscar CEP');\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { loading, error, fetchCep };\n}\n"],"mappings":";AAAA,SAAS,UAAU,mBAAmB;AAoC/B,SAAS,SAAuB;AACrC,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,IAAI;AAEtD,QAAM,WAAW,YAAY,OAAO,QAAyC;AAE3E,UAAM,WAAW,IAAI,QAAQ,OAAO,EAAE;AAGtC,QAAI,SAAS,WAAW,GAAG;AACzB,eAAS,8BAA2B;AACpC,aAAO;AAAA,IACT;AAEA,eAAW,IAAI;AACf,aAAS,IAAI;AAEb,QAAI;AACF,YAAM,WAAW,MAAM;AAAA,QACrB,4BAA4B,QAAQ;AAAA,MACtC;AAEA,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,MAAM,oBAAoB;AAAA,MACtC;AAEA,YAAM,OAAgB,MAAM,SAAS,KAAK;AAE1C,UAAI,KAAK,MAAM;AACb,iBAAS,uBAAoB;AAC7B,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT,SAAS,KAAK;AAEZ,cAAQ,MAAM,uBAAuB,GAAG;AAGxC,eAAS,oBAAoB;AAC7B,aAAO;AAAA,IACT,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,SAAS,OAAO,SAAS;AACpC;","names":[]}