@agrada_digital/pbm 0.0.49 → 0.0.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/components/Header/index.tsx","../src/components/UI/Container/index.tsx","../src/components/Footer/index.tsx","../src/schema/validation-schema.ts","../src/utils/format.ts","../src/components/Form/index.tsx","../src/libs/zustand/usePBM.tsx","../src/components/UI/Loading/index.tsx","../src/components/UI/Button/index.tsx","../src/components/BenefitsTable/index.tsx","../src/mocks/benefits.ts","../src/components/UI/Title/index.tsx","../src/components/BenefitsTable/Item.tsx","../src/components/UI/Text/index.tsx","../src/components/Iframe/index.tsx","../src/components/SecurityNumberInvalid/index.tsx","../src/PBM.tsx","../src/components/UI/Link/index.tsx","../src/utils/getParams.ts","../src/components/SecurityNumberRegitered/index.tsx","../src/services/authorization.ts","../src/services/get-product-by-ean.ts","../src/libs/zustand/useTargetProduct.tsx"],"sourcesContent":["// Estilos\r\nimport './index.css';\r\n\r\n// Componente Principal\r\nexport { default as PBM } from \"./PBM\";\r\n\r\n// Tipos\r\nexport type { PBMProps } from \"./PBM\";\r\nexport type { PBMStore } from \"./libs/zustand/usePBM\";\r\n\r\n// Hooks\r\nexport { usePBMStore } from \"./libs/zustand/usePBM\"; \r\n","function Header({ originalProductPrice }: { originalProductPrice: number }) {\r\n return (\r\n <header\r\n className=\"flex items-center justify-between w-full p-0.5 rounded-full bg-[#44c2c0]/30\"\r\n id=\"header_pbm\"\r\n >\r\n <span\r\n className=\"py-1 px-6 rounded-full bg-[#44c2c0] shrink-0 text-white text-sm font-bold\"\r\n data-testid=\"test_id_header_price\"\r\n id=\"header_price\"\r\n >\r\n {Number(originalProductPrice)?.toLocaleString(\"pt-BR\", {\r\n currency: \"BRL\",\r\n currencyDisplay: \"symbol\",\r\n currencySign: \"standard\",\r\n style: \"currency\",\r\n })}\r\n </span>\r\n <h1 id=\"header_title\" className=\"text-center w-full text-[#339c9b] font-bold text-xs px-4 md:text-sm\">\r\n Benefício de Laboratório\r\n </h1>\r\n </header>\r\n );\r\n}\r\n\r\nexport default Header;\r\n","import classNames from \"classnames\";\r\nimport React from \"react\";\r\n\r\nfunction Container({\r\n children,\r\n variant,\r\n}: {\r\n children: React.ReactNode;\r\n variant: \"simple\" | \"main\";\r\n}) {\r\n return (\r\n <main\r\n className={classNames({\r\n \"flex flex-col items-center justify-center min-w-[var(--min-container)] max-w-[var(--max-container)] w-full h-auto rounded-2xl p-4 bg-gray-100 gap-4\":\r\n variant === \"main\",\r\n \"w-full h-auto relative\": variant === \"simple\",\r\n })}\r\n data-testid=\"test_id_container\"\r\n data-variant={variant}\r\n id=\"container_pbm\"\r\n >\r\n {children}\r\n </main>\r\n );\r\n}\r\n\r\nexport default Container;\r\n","function Footer({ industryLogo }: { industryLogo?: string }) {\r\n return (\r\n <footer className=\"w-full h-auto relative\" id=\"footer_pbm\">\r\n <section className=\"flex items-center justify-center w-full h-auto gap-4\">\r\n <section className=\"w-4/5 h-auto\">\r\n <h3 className=\"text-start font-semibold text-sm\">\r\n Economize com o benefício do laboratório.\r\n </h3>\r\n <p className=\"text-start font-normal text-sm\">\r\n Este produto tem preço exclusivo para clientes cadastrados no\r\n programa.\r\n </p>\r\n </section>\r\n {industryLogo && (\r\n <img\r\n src={industryLogo}\r\n alt=\"parceiro\"\r\n className=\"w-1/5 min-w-20 h-auto aspect-square\"\r\n loading=\"eager\"\r\n id=\"footer_industry_logo_pbm\"\r\n data-testid=\"footer_industry_logo_pbm\"\r\n />\r\n )}\r\n </section>\r\n </footer>\r\n );\r\n}\r\n\r\nexport default Footer;\r\n","import { z } from \"zod\";\r\n\r\nexport const validationSchema = z.strictObject({\r\n securityNumber: z\r\n .string({\r\n required_error: 'CPF é obrigatório.',\r\n })\r\n .refine((doc) => {\r\n const replacedDoc = doc.replace(/\\D/g, '');\r\n return replacedDoc.length >= 11;\r\n }, 'CPF deve conter no mínimo 11 caracteres.')\r\n .refine((doc) => {\r\n const replacedDoc = doc.replace(/\\D/g, '');\r\n return !!Number(replacedDoc);\r\n }, 'CPF deve conter apenas números.'),\r\n});\r\n\r\nexport type validationSchemaType = z.infer<typeof validationSchema>","export const toFormat = (value: string) => {\r\n const cleanedValue = value.replace(/\\D/g, '');\r\n\r\n if (cleanedValue.length <= 11) {\r\n return cleanedValue\r\n .replace(/(\\d{3})(\\d)/, '$1.$2')\r\n .replace(/(\\d{3})(\\d)/, '$1.$2')\r\n .replace(/(\\d{3})(\\d{1,2})/, '$1-$2')\r\n .replace(/(-\\d{2})\\d+?$/, '$1');\r\n }\r\n};","import {\r\n validationSchema,\r\n validationSchemaType,\r\n} from \"../../schema/validation-schema\";\r\nimport { toFormat } from \"../../utils/format\";\r\n\r\nimport classNames from \"classnames\";\r\nimport { zodResolver } from \"@hookform/resolvers/zod\";\r\nimport { useForm } from \"react-hook-form\";\r\n\r\nimport { ArrowRight } from \"lucide-react\";\r\nimport { Dispatch, SetStateAction } from \"react\";\r\nimport { ISecurityNumber } from \"../../types/globals\";\r\n\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\n\r\ninterface IForm {\r\n setLoading: Dispatch<SetStateAction<boolean>>;\r\n}\r\n\r\nfunction Form({ setLoading }: IForm) {\r\n const { setSecurityNumber, setState, securityNumber } = usePBMStore();\r\n\r\n const {\r\n handleSubmit,\r\n register,\r\n setValue,\r\n formState: { errors },\r\n } = useForm<validationSchemaType>({\r\n resolver: zodResolver(validationSchema),\r\n defaultValues: {\r\n securityNumber: securityNumber || \"\",\r\n },\r\n });\r\n\r\n const onSubmitDefault = (values: validationSchemaType) => {\r\n setLoading(true);\r\n\r\n new Promise((resolve) => {\r\n setTimeout(() => {\r\n resolve({\r\n securityNumber: values.securityNumber,\r\n state: \"isActivated\",\r\n });\r\n }, 2000);\r\n })\r\n .then((result) => {\r\n const response = result as ISecurityNumber;\r\n\r\n setSecurityNumber(response.securityNumber);\r\n setState(response.state);\r\n })\r\n .finally(() => {\r\n setLoading(false);\r\n });\r\n };\r\n\r\n return (\r\n <form\r\n onSubmit={handleSubmit(onSubmitDefault)}\r\n className={classNames(\r\n \"w-full h-auto flex items-center justify-center mb-0 transition-all duration-150\",\r\n { \"mb-4\": errors.securityNumber }\r\n )}\r\n id=\"form_security_number_pbm\"\r\n >\r\n <label\r\n htmlFor=\"cpf\"\r\n className=\"w-4/5 h-auto flex items-start flex-col justify-center relative py-2\"\r\n id=\"label_security_number_pbm\"\r\n >\r\n <input\r\n type=\"text\"\r\n className={classNames(\r\n \"w-full h-8 bg-[#44c2c0]/20 rounded-s-full text-sm font-semibold focus:outline focus:outline-[#339c9b] focus:bg-[#44c2c0]/30 text-zinc-600 placeholder:text-zinc-600 px-4 placeholder:text-sm placeholder:font-semibold\",\r\n { \"outline outline-red-600\": errors.securityNumber }\r\n )}\r\n placeholder=\"Digite seu CPF aqui...\"\r\n required\r\n maxLength={14}\r\n {...register(\"securityNumber\", {\r\n onChange: (e) => {\r\n const formatted = toFormat(e.target.value);\r\n setValue(\"securityNumber\", formatted as string, {\r\n shouldValidate: true,\r\n });\r\n },\r\n })}\r\n defaultValue={securityNumber || \"\"}\r\n id=\"input_security_number_pbm\"\r\n />\r\n {errors.securityNumber && (\r\n <span className=\"text-red-400 text-xs font-semibold absolute -bottom-3 left-2 text-nowrap\" id=\"security_number_form_error\">\r\n {errors.securityNumber.message}\r\n </span>\r\n )}\r\n </label>\r\n <button\r\n type=\"submit\"\r\n className=\"bg-gray-400 w-1/5 h-8 flex items-center justify-center rounded-e-full cursor-pointer\"\r\n id=\"button_submit_security_number_pbm\"\r\n >\r\n <ArrowRight size={24} color=\"white\" strokeWidth={2} />\r\n </button>\r\n </form>\r\n );\r\n}\r\n\r\nexport default Form;\r\n","import { create, createStore, StateCreator, StoreApi } from \"zustand\";\r\nimport { usePBMTypes } from \"../../types/globals\";\r\n\r\nexport interface PBMStore extends usePBMTypes {\r\n setSecurityNumber: (securityNumber: string) => void;\r\n setState: (state: usePBMTypes[\"state\"]) => void;\r\n setAvailableDiscountSelected: (\r\n availableDiscount: usePBMTypes[\"availableDiscountSelected\"]\r\n ) => void;\r\n setTargetProduct: (targetProduct: usePBMTypes[\"targetProduct\"]) => void;\r\n}\r\n\r\nconst initialPBMState: usePBMTypes = {\r\n securityNumber: \"\",\r\n state: \"isEmpty\",\r\n availableDiscountSelected: {\r\n quantity: 0,\r\n discount: {\r\n unit: 0,\r\n total: 0,\r\n },\r\n totalPrice: 0,\r\n },\r\n targetProduct: null,\r\n campaign: \"pbm_campaign\",\r\n};\r\n\r\n// ✅ TIPANDO a função corretamente com StateCreator\r\nconst createPBMStore: StateCreator<PBMStore> = (set) => ({\r\n ...initialPBMState,\r\n\r\n setSecurityNumber: (securityNumber: string) => set({ securityNumber }),\r\n setState: (state: usePBMTypes[\"state\"]) => set({ state }),\r\n setTargetProduct: (targetProduct: usePBMTypes[\"targetProduct\"]) =>\r\n set({ targetProduct }),\r\n setAvailableDiscountSelected: (\r\n availableDiscount: usePBMTypes[\"availableDiscountSelected\"]\r\n ) => set({ availableDiscountSelected: availableDiscount }),\r\n});\r\n\r\n// React hook (usado dentro de componentes React)\r\nexport const usePBMStore = create<PBMStore>(createPBMStore);\r\n\r\n// Store para uso em Vanilla JS\r\nexport const pbmStore: StoreApi<PBMStore> =\r\n createStore<PBMStore>(createPBMStore);\r\n","interface LoadingProps {\r\n textColor?: string;\r\n}\r\n\r\nfunction Loading({ textColor }: LoadingProps) {\r\n return (\r\n <main className=\"flex items-center justify-center gap-4\" id=\"loading_pbm\">\r\n <div\r\n data-testid=\"test_id_spin\"\r\n className=\"w-8 h-8 border-4 border-t-gray-700 border-gray-300 rounded-full animate-spin\"\r\n id=\"loading_spin\"\r\n ></div>\r\n <p\r\n className={\"text-sm font-semibold text-start text-zinc-900\"}\r\n style={{ color: textColor }}\r\n id=\"loading_label\"\r\n >\r\n Um momento... estamos verificando seus dados.\r\n </p>\r\n </main>\r\n );\r\n}\r\n\r\nexport default Loading;\r\n","import classNames from \"classnames\";\r\nimport React, { ButtonHTMLAttributes } from \"react\";\r\n\r\ninterface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\nfunction Button(props: ButtonProps) {\r\n return (\r\n <button\r\n {...props}\r\n className={classNames(\r\n \"w-3xs cursor-pointer h-10 rounded-full bg-blue-500 hover:bg-blue-400 text-white text-sm font-semibold transition-colors\",\r\n props.className\r\n )}\r\n >\r\n {props.children}\r\n </button>\r\n );\r\n}\r\n\r\nexport default Button;\r\n","import { useState } from \"react\";\r\n\r\nimport { BENEFITS_ITEMS } from \"../../mocks/benefits\";\r\n\r\nimport Title from \"../UI/Title\";\r\nimport Item from \"./Item\";\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\nimport Button from \"../UI/Button\";\r\n\r\nfunction BenefitsTable({\r\n originalProductPrice,\r\n}: {\r\n originalProductPrice: number;\r\n}) {\r\n const { securityNumber, setState } = usePBMStore();\r\n const [selectedDiscout, setSelectedDiscount] = useState<string | null>(null);\r\n\r\n return (\r\n <section\r\n className=\"flex items-start justify-center gap-4 w-full h-auto flex-col\"\r\n id=\"benefits_table_pbm\"\r\n >\r\n <Title>Descontos disponíveis:</Title>\r\n\r\n <form\r\n className=\"flex flex-col items-center justify-start w-full gap-3\"\r\n id=\"form_benefits_table_pbm\"\r\n >\r\n {BENEFITS_ITEMS.map((item, index) => {\r\n const ID_INPUT = \"unity_quantity_\" + item.authorizedQuantity;\r\n\r\n return (\r\n <Item\r\n key={index}\r\n data={item}\r\n checked={selectedDiscout === ID_INPUT}\r\n onChange={() => setSelectedDiscount(ID_INPUT)}\r\n originalProductPrice={originalProductPrice}\r\n />\r\n );\r\n })}\r\n </form>\r\n\r\n {!securityNumber && (\r\n <Button\r\n onClick={() => setState(\"isEmpty\")}\r\n className=\"bg-transparent p-0 pl-2 w-auto h-auto text-zinc-600 cursor-pointer hover:text-zinc-900 hover:bg-transparent text-start\"\r\n id=\"unauthorized_benefits_button\"\r\n >\r\n Atenção: não é possível utilizar os benefícos sem realizar a consulta\r\n do cpf, por favor{\" \"}\r\n <span className=\"underline\">\r\n insira seu cpf para utilizar os benefícios\r\n </span>\r\n </Button>\r\n )}\r\n\r\n {securityNumber && (\r\n <Button\r\n onClick={() => setState(\"isEmpty\")}\r\n className=\"bg-transparent p-0 pl-2 w-auto h-auto text-zinc-600 cursor-pointer hover:text-zinc-900 hover:bg-transparent text-start\"\r\n id=\"change_security_number\"\r\n >\r\n <span className=\"underline\">Deseja editar o cpf digitado?</span>\r\n </Button>\r\n )}\r\n </section>\r\n );\r\n}\r\n\r\nexport default BenefitsTable;\r\n","export interface IBenefitsItem {\r\n id: number;\r\n ean: string;\r\n authorizedQuantity: number;\r\n discountValue: number;\r\n discountPercentual: number;\r\n}\r\n\r\nexport const BENEFITS_ITEMS: IBenefitsItem[] = [\r\n {\r\n id: 1,\r\n ean: \"001\",\r\n authorizedQuantity: 1,\r\n discountValue: 4800,\r\n discountPercentual: 2400\r\n },\r\n {\r\n id: 2,\r\n ean: \"002\",\r\n authorizedQuantity: 2,\r\n discountValue: 4800,\r\n discountPercentual: 2400\r\n },\r\n {\r\n id: 3,\r\n ean: \"003\",\r\n authorizedQuantity: 3,\r\n discountValue: 9400,\r\n discountPercentual: 4700\r\n }\r\n\r\n]","import classNames from \"classnames\";\r\nimport React, { HTMLAttributes } from \"react\";\r\n\r\ninterface TitleProps extends HTMLAttributes<HTMLTitleElement> {\r\n children: React.ReactNode;\r\n textColor?: string;\r\n textSize?: string;\r\n}\r\n\r\nfunction Title(props: TitleProps) {\r\n return (\r\n <h2\r\n className={classNames(\r\n \"text-start font-semibold text-sm text-zinc-900\",\r\n props.className\r\n )}\r\n style={{ color: props.textColor, fontSize: props.textSize }}\r\n data-testid=\"test_id_title\"\r\n id=\"title_pbm\"\r\n >\r\n {props.children}\r\n </h2>\r\n );\r\n}\r\n\r\nexport default Title;\r\n","import { IBenefitsItem } from \"../../mocks/benefits\";\r\n\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\n\r\nimport { Badge, BadgeCheck } from \"lucide-react\";\r\nimport { useCallback, useEffect } from \"react\";\r\n\r\ninterface ItemProps {\r\n data: IBenefitsItem;\r\n onChange: VoidFunction;\r\n checked: boolean;\r\n originalProductPrice: number;\r\n}\r\n\r\nfunction Item({ data, onChange, checked, originalProductPrice }: ItemProps) {\r\n const { setAvailableDiscountSelected, securityNumber } = usePBMStore();\r\n\r\n const ID_INPUT = \"unity_quantity_\" + data.authorizedQuantity;\r\n\r\n const decimalDiscount = data.discountPercentual / 10000;\r\n\r\n const unitDiscountValue = originalProductPrice * decimalDiscount;\r\n\r\n const discountValue = unitDiscountValue * data.authorizedQuantity;\r\n\r\n const totalPriceProductWithDiscountBenefit =\r\n originalProductPrice * data.authorizedQuantity - discountValue;\r\n\r\n const updateStorageData = useCallback(() => {\r\n if (checked) {\r\n setAvailableDiscountSelected({\r\n discount: {\r\n total: discountValue,\r\n unit: unitDiscountValue,\r\n },\r\n quantity: data.authorizedQuantity,\r\n totalPrice: totalPriceProductWithDiscountBenefit,\r\n });\r\n }\r\n }, [\r\n checked,\r\n data.authorizedQuantity,\r\n setAvailableDiscountSelected,\r\n discountValue,\r\n totalPriceProductWithDiscountBenefit,\r\n unitDiscountValue,\r\n ]);\r\n\r\n useEffect(() => {\r\n updateStorageData();\r\n }, [updateStorageData]);\r\n\r\n return (\r\n <label\r\n htmlFor={ID_INPUT}\r\n className=\"label_benefits w-full flex items-center justify-start bg-zinc-300/60 border border-zinc-400/50 px-4 py-2 hover:bg-zinc-300 transition-colors cursor-pointer rounded-full gap-1\"\r\n id={\"label_benefits_\" + ID_INPUT}\r\n >\r\n <input\r\n type=\"radio\"\r\n name=\"benefits_discount\"\r\n id={ID_INPUT}\r\n className=\"hidden\"\r\n checked={checked}\r\n onChange={onChange}\r\n disabled={!securityNumber}\r\n />\r\n\r\n {!checked ? (\r\n <Badge color=\"#9f9fa9\" size={20} />\r\n ) : (\r\n <BadgeCheck color=\"#32b316\" size={20} />\r\n )}\r\n\r\n <span className=\"text-zinc-900 font-semibold text-sm\">\r\n {data.authorizedQuantity}un\r\n </span>\r\n\r\n <section className=\"ml-auto relative\">\r\n <span className=\"absolute -top-4 text-emerald-900 py-0.5 font-semibold text-xs bg-[#32b316] px-2 w-auto text-nowrap rounded-2xl -right-4\">\r\n {discountValue.toLocaleString(\"pt-BR\", {\r\n currency: \"BRL\",\r\n currencyDisplay: \"symbol\",\r\n currencySign: \"standard\",\r\n style: \"currency\",\r\n })}{\" \"}\r\n OFF\r\n </span>\r\n <strong className=\"text-zinc-900 font-semibold text-sm text-center\">\r\n {totalPriceProductWithDiscountBenefit.toLocaleString(\"pt-BR\", {\r\n currency: \"BRL\",\r\n currencyDisplay: \"symbol\",\r\n currencySign: \"standard\",\r\n style: \"currency\",\r\n })}\r\n </strong>\r\n </section>\r\n </label>\r\n );\r\n}\r\n\r\nexport default Item;\r\n","import classNames from \"classnames\";\r\nimport React, { HTMLAttributes } from \"react\";\r\n\r\ninterface TextProps extends HTMLAttributes<HTMLParagraphElement> {\r\n children: React.ReactNode;\r\n textColor?: string;\r\n textSize?: string;\r\n}\r\n\r\nfunction Text(props: TextProps) {\r\n return (\r\n <p\r\n className={classNames(\r\n \"text-start font-normal text-sm text-zinc-900\",\r\n props.className\r\n )}\r\n style={{ color: props.textColor, fontSize: props.textSize }}\r\n data-testid=\"test_id_text\"\r\n id=\"text_pbm\"\r\n >\r\n {props.children}\r\n </p>\r\n );\r\n}\r\n\r\nexport default Text;\r\n","import classNames from \"classnames\";\r\nimport { TriangleAlert } from \"lucide-react\";\r\nimport { Dispatch, SetStateAction } from \"react\";\r\n\r\ninterface IFrameProps {\r\n url: string;\r\n title: string;\r\n openModal: boolean;\r\n setOpenModal: Dispatch<SetStateAction<boolean>>;\r\n}\r\n\r\nfunction Iframe({ url, title, openModal, setOpenModal }: IFrameProps) {\r\n return (\r\n <main\r\n className={classNames(\r\n \"fixed inset-0 flex items-center justify-center z-50 flex-col transition-all shadow\",\r\n {\r\n \"opacity-100 pointer-events-auto\": openModal,\r\n \"opacity-0 pointer-events-none\": !openModal,\r\n }\r\n )}\r\n data-testid=\"test_id_iframe\"\r\n id=\"iframe_pbm\"\r\n >\r\n <div\r\n className=\"bg-black/35 inset-0 absolute\"\r\n onClick={() => {\r\n setOpenModal(false);\r\n window.location.reload();\r\n }}\r\n ></div>\r\n <section className=\"w-4/5 h-auto bg-zinc-800 py-2 px-4 flex items-center justify-end rounded-ss-2xl rounded-se-2xl border-b-2 border-gray-100 z-10\">\r\n <button\r\n className=\"shadow-2xl cursor-pointer text-white font-bold bg-red-500 w-auto h-auto px-8 py-2 rounded-full\"\r\n aria-label=\"Fechar o modal\"\r\n data-testid=\"test_id_buttonclose\"\r\n onClick={() => {\r\n setOpenModal(false);\r\n window.location.reload();\r\n }}\r\n >\r\n Fechar\r\n </button>\r\n </section>\r\n <iframe\r\n src={url}\r\n title={title}\r\n width=\"80%\"\r\n height=\"80%\"\r\n allowFullScreen\r\n className=\"z-10\"\r\n ></iframe>\r\n <section className=\"items-center justify-center flex flex-wrap gap-1 bg-zinc-800 z-10 w-4/5 py-2 px-4 rounded-ee-2xl rounded-es-2xl border-t-2 border-gray-100\">\r\n <TriangleAlert size={20} className=\"shrink-0 text-red-500 \" />\r\n\r\n <p className=\"text-start text-sm text-white\">\r\n <span className=\"text-red-500 font-semibold text-base mr-1\">\r\n Atenção:\r\n </span>\r\n Após finalizar os termos de aceite, você já poderá fechar essa janela.\r\n Pode levar <strong>alguns minutos</strong> para os seus dados serem\r\n aprovados.\r\n </p>\r\n </section>\r\n </main>\r\n );\r\n}\r\n\r\nexport default Iframe;\r\n","import Title from \"../UI/Title\";\r\nimport Text from \"../UI/Text\";\r\nimport Button from \"../UI/Button\";\r\nimport Iframe from \"../Iframe\";\r\n\r\nimport { useState } from \"react\";\r\n\r\nfunction SecurityNumberInvalid({ textColor }: { textColor?: string }) {\r\n const [openModal, setOpenModal] = useState<boolean>(false);\r\n return (\r\n <section\r\n data-testid=\"test_id_invalid\"\r\n className=\"flex items-end justify-center gap-2 w-full h-auto flex-col border-y border-zinc-300 py-6\"\r\n id=\"security_number_invalid_container_pbm\"\r\n >\r\n <Title className=\"w-full\" textColor={textColor}>\r\n CPF não cadastrado!\r\n </Title>\r\n <Text className=\"w-full\" textColor={textColor}>\r\n Por favor, conclua seu cadastro para habilitar os benefícios deste\r\n laboratório.\r\n </Text>\r\n <Button\r\n data-testid=\"test_id_openiframe\"\r\n onClick={() => setOpenModal(true)}\r\n id=\"button_accept_terms_pbm\"\r\n >\r\n Aceitar os termos\r\n </Button>\r\n\r\n <Iframe\r\n url=\"https://termo.azurewebsites.net/\"\r\n title=\"Aceitar termos PBM\"\r\n openModal={openModal}\r\n setOpenModal={setOpenModal}\r\n />\r\n </section>\r\n );\r\n}\r\n\r\nexport default SecurityNumberInvalid;\r\n","import Header from \"./components/Header\";\nimport Container from \"./components/UI/Container\";\nimport Footer from \"./components/Footer\";\nimport Form from \"./components/Form\";\nimport Loading from \"./components/UI/Loading\";\nimport Button from \"./components/UI/Button\";\nimport BenefitsTable from \"./components/BenefitsTable\";\nimport SecurityNumberInvalid from \"./components/SecurityNumberInvalid\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport SecurityNumberRegitered from \"./components/SecurityNumberRegitered\";\nimport { GetAuthorization } from \"./services/authorization\";\nimport { ArrowRight } from \"lucide-react\";\nimport { usePBMStore } from \"./libs/zustand/usePBM\";\nimport { GetProductByEAN } from \"./services/get-product-by-ean\";\nimport { useTargetProducts } from \"./libs/zustand/useTargetProduct\";\n\nexport interface PBMProps {\n originalProductPrice: number;\n industryLogo: string;\n clientID: string;\n eanProduct: string;\n}\n\nfunction PBM({\n originalProductPrice,\n industryLogo,\n clientID,\n eanProduct,\n}: PBMProps) {\n const [loading, setLoading] = useState<boolean>(false);\n\n const { setState, state, setTargetProduct } = usePBMStore();\n const { setTargetProductInternal } = useTargetProducts();\n\n const handleGetProductByEAN = useCallback(async () => {\n try {\n const response = await GetProductByEAN({ PRODUCT_EAN: eanProduct });\n\n if (response.success) {\n // Pega a posição zero, pois a API sempre retorna um array, mesmo contendo somente um item.\n const productByEan = response.data.message.products[0];\n setTargetProduct(productByEan);\n setTargetProductInternal(productByEan);\n }\n } catch (error) {\n console.error(error);\n }\n }, [eanProduct, setTargetProduct, setTargetProductInternal]);\n\n const handleAuthorizationRequest = useCallback(async () => {\n try {\n const response = await GetAuthorization({ clientID: clientID });\n\n if (response.success && eanProduct) {\n handleGetProductByEAN();\n } else {\n console.error(\"Authorization failed:\", response.message);\n }\n } catch (error) {\n console.error(\"Error fetching authorization:\", error);\n }\n }, [clientID, handleGetProductByEAN, eanProduct]);\n\n useEffect(() => {\n handleAuthorizationRequest();\n }, [handleAuthorizationRequest]);\n\n return (\n <Container variant=\"main\">\n <Header originalProductPrice={originalProductPrice || 0} />\n\n <Container variant=\"simple\">\n {state === \"isEmpty\" && !loading && (\n <>\n <Form setLoading={setLoading} />\n <Button\n className=\"bg-transparent p-0 pl-2 w-auto h-auto text-zinc-600 underline cursor-pointer hover:text-zinc-900 hover:bg-transparent flex items-center justify-start gap-1\"\n onClick={() => setState(\"isActivated\")}\n id=\"check_benefits_button\"\n >\n <span>Consultar benefícios</span>\n <ArrowRight size={16} />\n </Button>\n </>\n )}\n\n {state === \"isEmpty\" && loading && <Loading />}\n\n {state === \"isInvalid\" && !loading && <SecurityNumberInvalid />}\n\n {state === \"isRegistered\" && !loading && <SecurityNumberRegitered />}\n\n {state === \"isActivated\" && !loading && (\n <BenefitsTable originalProductPrice={originalProductPrice} />\n )}\n </Container>\n\n <Footer industryLogo={industryLogo} />\n </Container>\n );\n}\n\nexport default PBM;\n","import { ILinkHref } from \"../../../types/globals\";\r\nimport classNames from \"classnames\";\r\nimport React from \"react\";\r\nimport { getParams } from \"../../../utils/getParams\";\r\n\r\ninterface LinkProps {\r\n className?: string;\r\n children: React.ReactNode;\r\n href: ILinkHref | string;\r\n}\r\n\r\nfunction Link(props: LinkProps) {\r\n return (\r\n <a\r\n {...props}\r\n target=\"_blank\"\r\n href={\r\n typeof props.href === \"string\"\r\n ? props.href\r\n : props.href.pathname + getParams(props.href.param)\r\n }\r\n className={classNames(\r\n \"w-3xs cursor-pointer h-10 rounded-full bg-blue-500 hover:bg-blue-400 text-white text-sm font-semibold transition-colors flex items-center justify-center\",\r\n props.className\r\n )}\r\n data-testid=\"test_id_link\"\r\n id=\"link_pbm\"\r\n >\r\n {props.children}\r\n </a>\r\n );\r\n}\r\n\r\nexport default Link;\r\n","export const getParams = (\r\n params: { [key: string]: string | number } | undefined\r\n) => {\r\n if (params === undefined) return \"\";\r\n\r\n return (\r\n \"?\" +\r\n Object.keys(params)\r\n .map((paramter) => paramter + \"=\" + params[paramter])\r\n .join(\"&\")\r\n );\r\n};","import Title from \"../UI/Title\";\r\nimport Text from \"../UI/Text\";\r\nimport Link from \"../UI/Link\";\r\n\r\nfunction SecurityNumberRegitered({ textColor }: { textColor?: string }) {\r\n return (\r\n <section\r\n data-testid=\"test_id_registered\"\r\n className=\"flex items-end justify-center gap-2 w-full h-auto flex-col border-y border-zinc-300 py-6\"\r\n id=\"security_number_registered_container_pbm\"\r\n >\r\n <Title className=\"w-full\" textColor={textColor}>\r\n CPF não habilitado no produto!\r\n </Title>\r\n <Text className=\"w-full\" textColor={textColor}>\r\n Por favor, conclua seu cadastro para habilitar os benefícios deste\r\n laboratório.\r\n </Text>\r\n <Link\r\n href={{\r\n pathname: \"https://gip-pd-app.interplayers.com.br/idp-pd-app/adesao\",\r\n param: { guid: \"f2aff249-51b4-49a4-b671-d6bee89da0f0\" },\r\n }}\r\n >\r\n Ativar CPF\r\n </Link>\r\n </section>\r\n );\r\n}\r\n\r\nexport default SecurityNumberRegitered;\r\n","import Cookies from \"js-cookie\";\r\nimport { IRequestDefault } from \"../types/requests\";\r\n\r\ninterface GetAuthorizationParams {\r\n clientID: string;\r\n}\r\n\r\ninterface IAuthData {\r\n expiresIn: string;\r\n store: {\r\n CNPJ: string;\r\n name: string;\r\n },\r\n token: string;\r\n refreshToken: string;\r\n}\r\n\r\ninterface IResponseAuth extends IRequestDefault {\r\n data: IAuthData;\r\n}\r\n\r\nexport const GetAuthorization = async ({ clientID }: GetAuthorizationParams): Promise<IResponseAuth> => {\r\n const API_URL = import.meta.env.VITE_API_URL;\r\n const STORE_ID = import.meta.env.VITE_STORE_ID;\r\n const STORE_NAME = import.meta.env.VITE_STORE_NAME;\r\n\r\n if (!API_URL) {\r\n throw new Error('API URL is not defined in environment variables');\r\n }\r\n\r\n if (!STORE_ID || !STORE_NAME) {\r\n throw new Error('Store ID or Store Name is not defined in environment variables');\r\n }\r\n\r\n const response = await fetch(`${API_URL}/auth`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n StoreID: STORE_ID,\r\n StoreName: STORE_NAME,\r\n ClientID: clientID\r\n })\r\n });\r\n\r\n const dataResponse: IResponseAuth = await response.json();\r\n\r\n if (!dataResponse.success) {\r\n throw new Error(dataResponse.message || 'Failed to fetch authorization');\r\n }\r\n\r\n Cookies.set('pbm-token', dataResponse.data.token, {\r\n expires: parseInt(dataResponse.data.expiresIn, 10) / (60 * 60),\r\n secure: true,\r\n sameSite: 'Strict'\r\n });\r\n\r\n Cookies.set('pbm-token-refresh', dataResponse.data.refreshToken, {\r\n secure: true,\r\n sameSite: 'Strict'\r\n });\r\n\r\n return dataResponse;\r\n}","import Cookies from \"js-cookie\";\r\nimport { IRequestDefault } from \"../types/requests\";\r\nimport { IProduct } from \"../types/globals\";\r\n\r\ninterface IPagination {\r\n page: number,\r\n limit: number,\r\n total: number,\r\n totalPages: number,\r\n hasNextPage: boolean,\r\n hasPrevPage: boolean\r\n}\r\n\r\ninterface IMessageData {\r\n products: IProduct[],\r\n pagination: IPagination\r\n}\r\n\r\ninterface IDataRequestListProducts {\r\n message: IMessageData,\r\n data: string,\r\n statusCode: number\r\n}\r\n\r\ninterface IResponseGetProducts extends IRequestDefault {\r\n data: IDataRequestListProducts\r\n}\r\n\r\nexport const GetProductByEAN = async ({ PRODUCT_EAN }: { PRODUCT_EAN: string }): Promise<IResponseGetProducts> => {\r\n const API_URL = import.meta.env.VITE_API_URL;\r\n\r\n const AUTH_TOKEN = Cookies.get(\"pbm-token\");\r\n\r\n if (!AUTH_TOKEN) {\r\n throw new Error('Token is not defined in cookies or is expired');\r\n }\r\n\r\n const response = await fetch(`${API_URL}/core/products?ean=${PRODUCT_EAN}`, {\r\n method: 'GET',\r\n headers: {\r\n Authorization: `Bearer ${AUTH_TOKEN}`,\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n const dataResponse: IResponseGetProducts = await response.json();\r\n\r\n if (!dataResponse.success) {\r\n throw new Error(dataResponse.message || 'Failed to fetch authorization');\r\n }\r\n\r\n return dataResponse;\r\n}","import { create, StateCreator } from \"zustand\";\r\nimport { IProduct } from \"../../types/globals\";\r\n\r\ninterface targetProductDataType {\r\n targetProductInternal: IProduct | null;\r\n}\r\n\r\nexport interface useTargetProduct extends targetProductDataType {\r\n setTargetProductInternal: (\r\n targetProductInternal: useTargetProduct[\"targetProductInternal\"]\r\n ) => void;\r\n}\r\n\r\nconst initialTargetProductState: targetProductDataType = {\r\n targetProductInternal: null,\r\n};\r\n\r\n// ✅ TIPANDO a função corretamente com StateCreator\r\nconst createPBMStore: StateCreator<useTargetProduct> = (set) => ({\r\n ...initialTargetProductState,\r\n\r\n setTargetProductInternal: (\r\n targetProductInternal: useTargetProduct[\"targetProductInternal\"]\r\n ) => set({ targetProductInternal }),\r\n});\r\n\r\n// React hook (usado dentro de componentes React)\r\nexport const useTargetProducts = create<useTargetProduct>(createPBMStore);\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEI;AAFJ,SAAS,OAAO,EAAE,qBAAqB,GAAqC;AAC1E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,IAAG;AAAA,MAEH;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,eAAY;AAAA,YACZ,IAAG;AAAA,YAEF,iBAAO,oBAAoB,GAAG,eAAe,SAAS;AAAA,cACrD,UAAU;AAAA,cACV,iBAAiB;AAAA,cACjB,cAAc;AAAA,cACd,OAAO;AAAA,YACT,CAAC;AAAA;AAAA,QACH;AAAA,QACA,4CAAC,QAAG,IAAG,gBAAe,WAAU,uEAAsE,4CAEtG;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,iBAAQ;;;ACzBf,wBAAuB;AAWnB,IAAAA,sBAAA;AARJ,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AACF,GAGG;AACD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW,kBAAAC,SAAW;AAAA,QACpB,uJACE,YAAY;AAAA,QACd,0BAA0B,YAAY;AAAA,MACxC,CAAC;AAAA,MACD,eAAY;AAAA,MACZ,gBAAc;AAAA,MACd,IAAG;AAAA,MAEF;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,oBAAQ;;;ACtBP,IAAAC,sBAAA;AAJR,SAAS,OAAO,EAAE,aAAa,GAA8B;AAC3D,SACE,6CAAC,YAAO,WAAU,0BAAyB,IAAG,cAC5C,wDAAC,aAAQ,WAAU,wDACjB;AAAA,kDAAC,aAAQ,WAAU,gBACjB;AAAA,mDAAC,QAAG,WAAU,oCAAmC,6DAEjD;AAAA,MACA,6CAAC,OAAE,WAAU,kCAAiC,wFAG9C;AAAA,OACF;AAAA,IACC,gBACC;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,KAAI;AAAA,QACJ,WAAU;AAAA,QACV,SAAQ;AAAA,QACR,IAAG;AAAA,QACH,eAAY;AAAA;AAAA,IACd;AAAA,KAEJ,GACF;AAEJ;AAEA,IAAO,iBAAQ;;;AC5Bf,iBAAkB;AAEX,IAAM,mBAAmB,aAAE,aAAa;AAAA,EAC3C,gBAAgB,aACX,OAAO;AAAA,IACJ,gBAAgB;AAAA,EACpB,CAAC,EACA,OAAO,CAAC,QAAQ;AACb,UAAM,cAAc,IAAI,QAAQ,OAAO,EAAE;AACzC,WAAO,YAAY,UAAU;AAAA,EACjC,GAAG,6CAA0C,EAC5C,OAAO,CAAC,QAAQ;AACb,UAAM,cAAc,IAAI,QAAQ,OAAO,EAAE;AACzC,WAAO,CAAC,CAAC,OAAO,WAAW;AAAA,EAC/B,GAAG,oCAAiC;AAC5C,CAAC;;;ACfM,IAAM,WAAW,CAAC,UAAkB;AACvC,QAAM,eAAe,MAAM,QAAQ,OAAO,EAAE;AAE5C,MAAI,aAAa,UAAU,IAAI;AAC3B,WAAO,aACF,QAAQ,eAAe,OAAO,EAC9B,QAAQ,eAAe,OAAO,EAC9B,QAAQ,oBAAoB,OAAO,EACnC,QAAQ,iBAAiB,IAAI;AAAA,EACtC;AACJ;;;ACJA,IAAAC,qBAAuB;AACvB,IAAAC,cAA4B;AAC5B,6BAAwB;AAExB,0BAA2B;;;ACV3B,qBAA4D;AAY5D,IAAM,kBAA+B;AAAA,EACnC,gBAAgB;AAAA,EAChB,OAAO;AAAA,EACP,2BAA2B;AAAA,IACzB,UAAU;AAAA,IACV,UAAU;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,EACd;AAAA,EACA,eAAe;AAAA,EACf,UAAU;AACZ;AAGA,IAAM,iBAAyC,CAAC,SAAS;AAAA,EACvD,GAAG;AAAA,EAEH,mBAAmB,CAAC,mBAA2B,IAAI,EAAE,eAAe,CAAC;AAAA,EACrE,UAAU,CAAC,UAAgC,IAAI,EAAE,MAAM,CAAC;AAAA,EACxD,kBAAkB,CAAC,kBACjB,IAAI,EAAE,cAAc,CAAC;AAAA,EACvB,8BAA8B,CAC5B,sBACG,IAAI,EAAE,2BAA2B,kBAAkB,CAAC;AAC3D;AAGO,IAAM,kBAAc,uBAAiB,cAAc;AAGnD,IAAM,eACX,4BAAsB,cAAc;;;ADqBhC,IAAAC,sBAAA;AA9CN,SAAS,KAAK,EAAE,WAAW,GAAU;AACnC,QAAM,EAAE,mBAAmB,UAAU,eAAe,IAAI,YAAY;AAEpE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,EAAE,OAAO;AAAA,EACtB,QAAI,gCAA8B;AAAA,IAChC,cAAU,yBAAY,gBAAgB;AAAA,IACtC,eAAe;AAAA,MACb,gBAAgB,kBAAkB;AAAA,IACpC;AAAA,EACF,CAAC;AAED,QAAM,kBAAkB,CAAC,WAAiC;AACxD,eAAW,IAAI;AAEf,QAAI,QAAQ,CAAC,YAAY;AACvB,iBAAW,MAAM;AACf,gBAAQ;AAAA,UACN,gBAAgB,OAAO;AAAA,UACvB,OAAO;AAAA,QACT,CAAC;AAAA,MACH,GAAG,GAAI;AAAA,IACT,CAAC,EACE,KAAK,CAAC,WAAW;AAChB,YAAM,WAAW;AAEjB,wBAAkB,SAAS,cAAc;AACzC,eAAS,SAAS,KAAK;AAAA,IACzB,CAAC,EACA,QAAQ,MAAM;AACb,iBAAW,KAAK;AAAA,IAClB,CAAC;AAAA,EACL;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,aAAa,eAAe;AAAA,MACtC,eAAW,mBAAAC;AAAA,QACT;AAAA,QACA,EAAE,QAAQ,OAAO,eAAe;AAAA,MAClC;AAAA,MACA,IAAG;AAAA,MAEH;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,WAAU;AAAA,YACV,IAAG;AAAA,YAEH;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,eAAW,mBAAAA;AAAA,oBACT;AAAA,oBACA,EAAE,2BAA2B,OAAO,eAAe;AAAA,kBACrD;AAAA,kBACA,aAAY;AAAA,kBACZ,UAAQ;AAAA,kBACR,WAAW;AAAA,kBACV,GAAG,SAAS,kBAAkB;AAAA,oBAC7B,UAAU,CAAC,MAAM;AACf,4BAAM,YAAY,SAAS,EAAE,OAAO,KAAK;AACzC,+BAAS,kBAAkB,WAAqB;AAAA,wBAC9C,gBAAgB;AAAA,sBAClB,CAAC;AAAA,oBACH;AAAA,kBACF,CAAC;AAAA,kBACD,cAAc,kBAAkB;AAAA,kBAChC,IAAG;AAAA;AAAA,cACL;AAAA,cACC,OAAO,kBACN,6CAAC,UAAK,WAAU,6EAA4E,IAAG,8BAC5F,iBAAO,eAAe,SACzB;AAAA;AAAA;AAAA,QAEJ;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAU;AAAA,YACV,IAAG;AAAA,YAEH,uDAAC,kCAAW,MAAM,IAAI,OAAM,SAAQ,aAAa,GAAG;AAAA;AAAA,QACtD;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,eAAQ;;;AEtGX,IAAAC,sBAAA;AAFJ,SAAS,QAAQ,EAAE,UAAU,GAAiB;AAC5C,SACE,8CAAC,UAAK,WAAU,0CAAyC,IAAG,eAC1D;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,eAAY;AAAA,QACZ,WAAU;AAAA,QACV,IAAG;AAAA;AAAA,IACJ;AAAA,IACD;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,QACX,OAAO,EAAE,OAAO,UAAU;AAAA,QAC1B,IAAG;AAAA,QACJ;AAAA;AAAA,IAED;AAAA,KACF;AAEJ;AAEA,IAAO,kBAAQ;;;ACvBf,IAAAC,qBAAuB;AASnB,IAAAC,sBAAA;AAFJ,SAAS,OAAO,OAAoB;AAClC,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW,mBAAAC;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MAEC,gBAAM;AAAA;AAAA,EACT;AAEJ;AAEA,IAAO,iBAAQ;;;ACrBf,IAAAC,gBAAyB;;;ACQlB,IAAM,iBAAkC;AAAA,EAC3C;AAAA,IACI,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,oBAAoB;AAAA,IACpB,eAAe;AAAA,IACf,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,IACI,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,oBAAoB;AAAA,IACpB,eAAe;AAAA,IACf,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,IACI,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,oBAAoB;AAAA,IACpB,eAAe;AAAA,IACf,oBAAoB;AAAA,EACxB;AAEJ;;;AC/BA,IAAAC,qBAAuB;AAWnB,IAAAC,sBAAA;AAFJ,SAAS,MAAM,OAAmB;AAChC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW,mBAAAC;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,OAAO,EAAE,OAAO,MAAM,WAAW,UAAU,MAAM,SAAS;AAAA,MAC1D,eAAY;AAAA,MACZ,IAAG;AAAA,MAEF,gBAAM;AAAA;AAAA,EACT;AAEJ;AAEA,IAAO,gBAAQ;;;ACrBf,IAAAC,uBAAkC;AAClC,mBAAuC;AAqDjC,IAAAC,sBAAA;AA5CN,SAAS,KAAK,EAAE,MAAM,UAAU,SAAS,qBAAqB,GAAc;AAC1E,QAAM,EAAE,8BAA8B,eAAe,IAAI,YAAY;AAErE,QAAM,WAAW,oBAAoB,KAAK;AAE1C,QAAM,kBAAkB,KAAK,qBAAqB;AAElD,QAAM,oBAAoB,uBAAuB;AAEjD,QAAM,gBAAgB,oBAAoB,KAAK;AAE/C,QAAM,uCACJ,uBAAuB,KAAK,qBAAqB;AAEnD,QAAM,wBAAoB,0BAAY,MAAM;AAC1C,QAAI,SAAS;AACX,mCAA6B;AAAA,QAC3B,UAAU;AAAA,UACR,OAAO;AAAA,UACP,MAAM;AAAA,QACR;AAAA,QACA,UAAU,KAAK;AAAA,QACf,YAAY;AAAA,MACd,CAAC;AAAA,IACH;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,8BAAU,MAAM;AACd,sBAAkB;AAAA,EACpB,GAAG,CAAC,iBAAiB,CAAC;AAEtB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,MACT,WAAU;AAAA,MACV,IAAI,oBAAoB;AAAA,MAExB;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,MAAK;AAAA,YACL,IAAI;AAAA,YACJ,WAAU;AAAA,YACV;AAAA,YACA;AAAA,YACA,UAAU,CAAC;AAAA;AAAA,QACb;AAAA,QAEC,CAAC,UACA,6CAAC,8BAAM,OAAM,WAAU,MAAM,IAAI,IAEjC,6CAAC,mCAAW,OAAM,WAAU,MAAM,IAAI;AAAA,QAGxC,8CAAC,UAAK,WAAU,uCACb;AAAA,eAAK;AAAA,UAAmB;AAAA,WAC3B;AAAA,QAEA,8CAAC,aAAQ,WAAU,oBACjB;AAAA,wDAAC,UAAK,WAAU,2HACb;AAAA,0BAAc,eAAe,SAAS;AAAA,cACrC,UAAU;AAAA,cACV,iBAAiB;AAAA,cACjB,cAAc;AAAA,cACd,OAAO;AAAA,YACT,CAAC;AAAA,YAAG;AAAA,YAAI;AAAA,aAEV;AAAA,UACA,6CAAC,YAAO,WAAU,mDACf,+CAAqC,eAAe,SAAS;AAAA,YAC5D,UAAU;AAAA,YACV,iBAAiB;AAAA,YACjB,cAAc;AAAA,YACd,OAAO;AAAA,UACT,CAAC,GACH;AAAA,WACF;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,eAAQ;;;AH/ET,IAAAC,sBAAA;AAbN,SAAS,cAAc;AAAA,EACrB;AACF,GAEG;AACD,QAAM,EAAE,gBAAgB,SAAS,IAAI,YAAY;AACjD,QAAM,CAAC,iBAAiB,mBAAmB,QAAI,wBAAwB,IAAI;AAE3E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,IAAG;AAAA,MAEH;AAAA,qDAAC,iBAAM,uCAAsB;AAAA,QAE7B;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,IAAG;AAAA,YAEF,yBAAe,IAAI,CAAC,MAAM,UAAU;AACnC,oBAAM,WAAW,oBAAoB,KAAK;AAE1C,qBACE;AAAA,gBAAC;AAAA;AAAA,kBAEC,MAAM;AAAA,kBACN,SAAS,oBAAoB;AAAA,kBAC7B,UAAU,MAAM,oBAAoB,QAAQ;AAAA,kBAC5C;AAAA;AAAA,gBAJK;AAAA,cAKP;AAAA,YAEJ,CAAC;AAAA;AAAA,QACH;AAAA,QAEC,CAAC,kBACA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,SAAS,SAAS;AAAA,YACjC,WAAU;AAAA,YACV,IAAG;AAAA,YACJ;AAAA;AAAA,cAEmB;AAAA,cAClB,6CAAC,UAAK,WAAU,aAAY,2DAE5B;AAAA;AAAA;AAAA,QACF;AAAA,QAGD,kBACC;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,SAAS,SAAS;AAAA,YACjC,WAAU;AAAA,YACV,IAAG;AAAA,YAEH,uDAAC,UAAK,WAAU,aAAY,2CAA6B;AAAA;AAAA,QAC3D;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEA,IAAO,wBAAQ;;;AItEf,IAAAC,qBAAuB;AAWnB,IAAAC,uBAAA;AAFJ,SAAS,KAAK,OAAkB;AAC9B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW,mBAAAC;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,OAAO,EAAE,OAAO,MAAM,WAAW,UAAU,MAAM,SAAS;AAAA,MAC1D,eAAY;AAAA,MACZ,IAAG;AAAA,MAEF,gBAAM;AAAA;AAAA,EACT;AAEJ;AAEA,IAAO,eAAQ;;;ACzBf,IAAAC,qBAAuB;AACvB,IAAAC,uBAA8B;AAuBxB,IAAAC,uBAAA;AAbN,SAAS,OAAO,EAAE,KAAK,OAAO,WAAW,aAAa,GAAgB;AACpE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW,mBAAAC;AAAA,QACT;AAAA,QACA;AAAA,UACE,mCAAmC;AAAA,UACnC,iCAAiC,CAAC;AAAA,QACpC;AAAA,MACF;AAAA,MACA,eAAY;AAAA,MACZ,IAAG;AAAA,MAEH;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS,MAAM;AACb,2BAAa,KAAK;AAClB,qBAAO,SAAS,OAAO;AAAA,YACzB;AAAA;AAAA,QACD;AAAA,QACD,8CAAC,aAAQ,WAAU,kIACjB;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,cAAW;AAAA,YACX,eAAY;AAAA,YACZ,SAAS,MAAM;AACb,2BAAa,KAAK;AAClB,qBAAO,SAAS,OAAO;AAAA,YACzB;AAAA,YACD;AAAA;AAAA,QAED,GACF;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL;AAAA,YACA,OAAM;AAAA,YACN,QAAO;AAAA,YACP,iBAAe;AAAA,YACf,WAAU;AAAA;AAAA,QACX;AAAA,QACD,+CAAC,aAAQ,WAAU,8IACjB;AAAA,wDAAC,sCAAc,MAAM,IAAI,WAAU,0BAAyB;AAAA,UAE5D,+CAAC,OAAE,WAAU,iCACX;AAAA,0DAAC,UAAK,WAAU,6CAA4C,4BAE5D;AAAA,YAAO;AAAA,YAEI,8CAAC,YAAO,4BAAc;AAAA,YAAS;AAAA,aAE5C;AAAA,WACF;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,iBAAQ;;;AC/Df,IAAAC,gBAAyB;AAKrB,IAAAC,uBAAA;AAHJ,SAAS,sBAAsB,EAAE,UAAU,GAA2B;AACpE,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAkB,KAAK;AACzD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAY;AAAA,MACZ,WAAU;AAAA,MACV,IAAG;AAAA,MAEH;AAAA,sDAAC,iBAAM,WAAU,UAAS,WAAsB,oCAEhD;AAAA,QACA,8CAAC,gBAAK,WAAU,UAAS,WAAsB,mGAG/C;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,eAAY;AAAA,YACZ,SAAS,MAAM,aAAa,IAAI;AAAA,YAChC,IAAG;AAAA,YACJ;AAAA;AAAA,QAED;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,KAAI;AAAA,YACJ,OAAM;AAAA,YACN;AAAA,YACA;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,gCAAQ;;;AC/Bf,IAAAC,gBAAiD;;;ACRjD,IAAAC,qBAAuB;;;ACDhB,IAAM,YAAY,CACrB,WACC;AACD,MAAI,WAAW,OAAW,QAAO;AAEjC,SACI,MACA,OAAO,KAAK,MAAM,EACb,IAAI,CAAC,aAAa,WAAW,MAAM,OAAO,QAAQ,CAAC,EACnD,KAAK,GAAG;AAErB;;;ADEI,IAAAC,uBAAA;AAFJ,SAAS,KAAK,OAAkB;AAC9B,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,QAAO;AAAA,MACP,MACE,OAAO,MAAM,SAAS,WAClB,MAAM,OACN,MAAM,KAAK,WAAW,UAAU,MAAM,KAAK,KAAK;AAAA,MAEtD,eAAW,mBAAAC;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,eAAY;AAAA,MACZ,IAAG;AAAA,MAEF,gBAAM;AAAA;AAAA,EACT;AAEJ;AAEA,IAAO,eAAQ;;;AE3BX,IAAAC,uBAAA;AAFJ,SAAS,wBAAwB,EAAE,UAAU,GAA2B;AACtE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAY;AAAA,MACZ,WAAU;AAAA,MACV,IAAG;AAAA,MAEH;AAAA,sDAAC,iBAAM,WAAU,UAAS,WAAsB,+CAEhD;AAAA,QACA,8CAAC,gBAAK,WAAU,UAAS,WAAsB,mGAG/C;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,MAAM;AAAA,cACJ,UAAU;AAAA,cACV,OAAO,EAAE,MAAM,uCAAuC;AAAA,YACxD;AAAA,YACD;AAAA;AAAA,QAED;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,kCAAQ;;;AC9Bf,uBAAoB;AAApB;AAqBO,IAAM,mBAAmB,OAAO,EAAE,SAAS,MAAsD;AACpG,QAAM,UAAU,YAAY,IAAI;AAChC,QAAM,WAAW,YAAY,IAAI;AACjC,QAAM,aAAa,YAAY,IAAI;AAEnC,MAAI,CAAC,SAAS;AACV,UAAM,IAAI,MAAM,iDAAiD;AAAA,EACrE;AAEA,MAAI,CAAC,YAAY,CAAC,YAAY;AAC1B,UAAM,IAAI,MAAM,gEAAgE;AAAA,EACpF;AAEA,QAAM,WAAW,MAAM,MAAM,GAAG,OAAO,SAAS;AAAA,IAC5C,QAAQ;AAAA,IACR,SAAS;AAAA,MACL,gBAAgB;AAAA,IACpB;AAAA,IACA,MAAM,KAAK,UAAU;AAAA,MACjB,SAAS;AAAA,MACT,WAAW;AAAA,MACX,UAAU;AAAA,IACd,CAAC;AAAA,EACL,CAAC;AAED,QAAM,eAA8B,MAAM,SAAS,KAAK;AAExD,MAAI,CAAC,aAAa,SAAS;AACvB,UAAM,IAAI,MAAM,aAAa,WAAW,+BAA+B;AAAA,EAC3E;AAEA,mBAAAC,QAAQ,IAAI,aAAa,aAAa,KAAK,OAAO;AAAA,IAC9C,SAAS,SAAS,aAAa,KAAK,WAAW,EAAE,KAAK,KAAK;AAAA,IAC3D,QAAQ;AAAA,IACR,UAAU;AAAA,EACd,CAAC;AAED,mBAAAA,QAAQ,IAAI,qBAAqB,aAAa,KAAK,cAAc;AAAA,IAC7D,QAAQ;AAAA,IACR,UAAU;AAAA,EACd,CAAC;AAED,SAAO;AACX;;;AJpDA,IAAAC,uBAA2B;;;AKZ3B,IAAAC,oBAAoB;AAApB,IAAAC,eAAA;AA4BO,IAAM,kBAAkB,OAAO,EAAE,YAAY,MAA8D;AAC9G,QAAM,UAAUA,aAAY,IAAI;AAEhC,QAAM,aAAa,kBAAAC,QAAQ,IAAI,WAAW;AAE1C,MAAI,CAAC,YAAY;AACb,UAAM,IAAI,MAAM,+CAA+C;AAAA,EACnE;AAEA,QAAM,WAAW,MAAM,MAAM,GAAG,OAAO,sBAAsB,WAAW,IAAI;AAAA,IACxE,QAAQ;AAAA,IACR,SAAS;AAAA,MACL,eAAe,UAAU,UAAU;AAAA,MACnC,gBAAgB;AAAA,IACpB;AAAA,EACJ,CAAC;AAED,QAAM,eAAqC,MAAM,SAAS,KAAK;AAE/D,MAAI,CAAC,aAAa,SAAS;AACvB,UAAM,IAAI,MAAM,aAAa,WAAW,+BAA+B;AAAA,EAC3E;AAEA,SAAO;AACX;;;ACpDA,IAAAC,kBAAqC;AAarC,IAAM,4BAAmD;AAAA,EACvD,uBAAuB;AACzB;AAGA,IAAMC,kBAAiD,CAAC,SAAS;AAAA,EAC/D,GAAG;AAAA,EAEH,0BAA0B,CACxB,0BACG,IAAI,EAAE,sBAAsB,CAAC;AACpC;AAGO,IAAM,wBAAoB,wBAAyBA,eAAc;;;AN2ClE,IAAAC,uBAAA;AA9CN,SAAS,IAAI;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAa;AACX,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAkB,KAAK;AAErD,QAAM,EAAE,UAAU,OAAO,iBAAiB,IAAI,YAAY;AAC1D,QAAM,EAAE,yBAAyB,IAAI,kBAAkB;AAEvD,QAAM,4BAAwB,2BAAY,YAAY;AACpD,QAAI;AACF,YAAM,WAAW,MAAM,gBAAgB,EAAE,aAAa,WAAW,CAAC;AAElE,UAAI,SAAS,SAAS;AAEpB,cAAM,eAAe,SAAS,KAAK,QAAQ,SAAS,CAAC;AACrD,yBAAiB,YAAY;AAC7B,iCAAyB,YAAY;AAAA,MACvC;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,KAAK;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,YAAY,kBAAkB,wBAAwB,CAAC;AAE3D,QAAM,iCAA6B,2BAAY,YAAY;AACzD,QAAI;AACF,YAAM,WAAW,MAAM,iBAAiB,EAAE,SAAmB,CAAC;AAE9D,UAAI,SAAS,WAAW,YAAY;AAClC,8BAAsB;AAAA,MACxB,OAAO;AACL,gBAAQ,MAAM,yBAAyB,SAAS,OAAO;AAAA,MACzD;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,iCAAiC,KAAK;AAAA,IACtD;AAAA,EACF,GAAG,CAAC,UAAU,uBAAuB,UAAU,CAAC;AAEhD,+BAAU,MAAM;AACd,+BAA2B;AAAA,EAC7B,GAAG,CAAC,0BAA0B,CAAC;AAE/B,SACE,+CAAC,qBAAU,SAAQ,QACjB;AAAA,kDAAC,kBAAO,sBAAsB,wBAAwB,GAAG;AAAA,IAEzD,+CAAC,qBAAU,SAAQ,UAChB;AAAA,gBAAU,aAAa,CAAC,WACvB,gFACE;AAAA,sDAAC,gBAAK,YAAwB;AAAA,QAC9B;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS,MAAM,SAAS,aAAa;AAAA,YACrC,IAAG;AAAA,YAEH;AAAA,4DAAC,UAAK,qCAAoB;AAAA,cAC1B,8CAAC,mCAAW,MAAM,IAAI;AAAA;AAAA;AAAA,QACxB;AAAA,SACF;AAAA,MAGD,UAAU,aAAa,WAAW,8CAAC,mBAAQ;AAAA,MAE3C,UAAU,eAAe,CAAC,WAAW,8CAAC,iCAAsB;AAAA,MAE5D,UAAU,kBAAkB,CAAC,WAAW,8CAAC,mCAAwB;AAAA,MAEjE,UAAU,iBAAiB,CAAC,WAC3B,8CAAC,yBAAc,sBAA4C;AAAA,OAE/D;AAAA,IAEA,8CAAC,kBAAO,cAA4B;AAAA,KACtC;AAEJ;AAEA,IAAO,cAAQ;","names":["import_jsx_runtime","classNames","import_jsx_runtime","import_classnames","import_zod","import_jsx_runtime","classNames","import_jsx_runtime","import_classnames","import_jsx_runtime","classNames","import_react","import_classnames","import_jsx_runtime","classNames","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_classnames","import_jsx_runtime","classNames","import_classnames","import_lucide_react","import_jsx_runtime","classNames","import_react","import_jsx_runtime","import_react","import_classnames","import_jsx_runtime","classNames","import_jsx_runtime","Cookies","import_lucide_react","import_js_cookie","import_meta","Cookies","import_zustand","createPBMStore","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/components/Header/index.tsx","../src/components/UI/Container/index.tsx","../src/components/Footer/index.tsx","../src/schema/validation-schema.ts","../src/utils/format.ts","../src/components/Form/index.tsx","../src/libs/zustand/usePBM.tsx","../src/services/validate-document.ts","../src/components/UI/Loading/index.tsx","../src/components/UI/Button/index.tsx","../src/components/BenefitsTable/index.tsx","../src/mocks/benefits.ts","../src/components/UI/Title/index.tsx","../src/components/BenefitsTable/Item.tsx","../src/components/UI/Text/index.tsx","../src/components/Iframe/index.tsx","../src/components/SecurityNumberInvalid/index.tsx","../src/PBM.tsx","../src/components/UI/Link/index.tsx","../src/utils/getParams.ts","../src/components/SecurityNumberRegitered/index.tsx","../src/services/authorization.ts"],"sourcesContent":["// Estilos\r\nimport './index.css';\r\n\r\n// Componente Principal\r\nexport { default as PBM } from \"./PBM\";\r\n\r\n// Tipos\r\nexport type { PBMProps } from \"./PBM\";\r\nexport type { PBMStore } from \"./libs/zustand/usePBM\";\r\n\r\n// Hooks\r\nexport { usePBMStore } from \"./libs/zustand/usePBM\"; \r\n","function Header({ originalProductPrice }: { originalProductPrice: number }) {\r\n return (\r\n <header\r\n className=\"flex items-center justify-between w-full p-0.5 rounded-full bg-[#44c2c0]/30\"\r\n id=\"header_pbm\"\r\n >\r\n <span\r\n className=\"py-1 px-6 rounded-full bg-[#44c2c0] shrink-0 text-white text-sm font-bold\"\r\n data-testid=\"test_id_header_price\"\r\n id=\"header_price\"\r\n >\r\n {Number(originalProductPrice)?.toLocaleString(\"pt-BR\", {\r\n currency: \"BRL\",\r\n currencyDisplay: \"symbol\",\r\n currencySign: \"standard\",\r\n style: \"currency\",\r\n })}\r\n </span>\r\n <h1 id=\"header_title\" className=\"text-center w-full text-[#339c9b] font-bold text-xs px-4 md:text-sm\">\r\n Benefício de Laboratório\r\n </h1>\r\n </header>\r\n );\r\n}\r\n\r\nexport default Header;\r\n","import classNames from \"classnames\";\r\nimport React from \"react\";\r\n\r\nfunction Container({\r\n children,\r\n variant,\r\n}: {\r\n children: React.ReactNode;\r\n variant: \"simple\" | \"main\";\r\n}) {\r\n return (\r\n <main\r\n className={classNames({\r\n \"flex flex-col items-center justify-center min-w-[var(--min-container)] max-w-[var(--max-container)] w-full h-auto rounded-2xl p-4 bg-gray-100 gap-4\":\r\n variant === \"main\",\r\n \"w-full h-auto relative\": variant === \"simple\",\r\n })}\r\n data-testid=\"test_id_container\"\r\n data-variant={variant}\r\n id=\"container_pbm\"\r\n >\r\n {children}\r\n </main>\r\n );\r\n}\r\n\r\nexport default Container;\r\n","import classNames from \"classnames\";\r\n\r\nfunction Footer({ industryLogo }: { industryLogo?: string }) {\r\n return (\r\n <footer className=\"w-full h-auto relative\" id=\"footer_pbm\">\r\n <section className={classNames(\"flex items-center w-full h-auto gap-4\", { \"justify-center\": industryLogo, \"justify-start\": !industryLogo })}>\r\n <section className=\"w-4/5 h-auto\">\r\n <h3 className=\"text-start font-semibold text-sm\">\r\n Economize com o benefício do laboratório.\r\n </h3>\r\n <p className=\"text-start font-normal text-sm\">\r\n Este produto tem preço exclusivo para clientes cadastrados no\r\n programa.\r\n </p>\r\n </section>\r\n {industryLogo && (\r\n <img\r\n src={industryLogo}\r\n alt=\"parceiro\"\r\n className=\"w-1/5 min-w-20 h-auto aspect-square\"\r\n loading=\"eager\"\r\n id=\"footer_industry_logo_pbm\"\r\n data-testid=\"footer_industry_logo_pbm\"\r\n />\r\n )}\r\n </section>\r\n </footer>\r\n );\r\n}\r\n\r\nexport default Footer;\r\n","import { z } from \"zod\";\r\n\r\nexport const validationSchema = z.strictObject({\r\n securityNumber: z\r\n .string({\r\n required_error: 'CPF é obrigatório.',\r\n })\r\n .refine((doc) => {\r\n const replacedDoc = doc.replace(/\\D/g, '');\r\n return replacedDoc.length >= 11;\r\n }, 'CPF deve conter no mínimo 11 caracteres.')\r\n .refine((doc) => {\r\n const replacedDoc = doc.replace(/\\D/g, '');\r\n return !!Number(replacedDoc);\r\n }, 'CPF deve conter apenas números.'),\r\n});\r\n\r\nexport type validationSchemaType = z.infer<typeof validationSchema>","export const toFormat = (value: string) => {\r\n const cleanedValue = value.replace(/\\D/g, '');\r\n\r\n if (cleanedValue.length <= 11) {\r\n return cleanedValue\r\n .replace(/(\\d{3})(\\d)/, '$1.$2')\r\n .replace(/(\\d{3})(\\d)/, '$1.$2')\r\n .replace(/(\\d{3})(\\d{1,2})/, '$1-$2')\r\n .replace(/(-\\d{2})\\d+?$/, '$1');\r\n }\r\n};","import {\r\n validationSchema,\r\n validationSchemaType,\r\n} from \"../../schema/validation-schema\";\r\nimport { toFormat } from \"../../utils/format\";\r\n\r\nimport classNames from \"classnames\";\r\nimport { zodResolver } from \"@hookform/resolvers/zod\";\r\nimport { useForm } from \"react-hook-form\";\r\n\r\nimport { ArrowRight } from \"lucide-react\";\r\nimport { Dispatch, SetStateAction } from \"react\";\r\nimport { IProduct, ISecurityNumber } from \"../../types/globals\";\r\n\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\nimport { ValidateDocument } from \"../../services/validate-document\";\r\n\r\ninterface IForm {\r\n setLoading: Dispatch<SetStateAction<boolean>>;\r\n}\r\n\r\nfunction Form({ setLoading }: IForm) {\r\n const { setSecurityNumber, setState, securityNumber, targetProduct } = usePBMStore();\r\n\r\n const {\r\n handleSubmit,\r\n register,\r\n setValue,\r\n formState: { errors },\r\n } = useForm<validationSchemaType>({\r\n resolver: zodResolver(validationSchema),\r\n defaultValues: {\r\n securityNumber: securityNumber || \"\",\r\n },\r\n });\r\n\r\n const onSubmitDefault = async (values: validationSchemaType) => {\r\n setLoading(true);\r\n\r\n try {\r\n if (targetProduct === null) {\r\n console.error(\"Product is not defined!\");\r\n return;\r\n }\r\n\r\n const response = await ValidateDocument({\r\n document: values.securityNumber.replace(/\\D/g, ''),\r\n products: [{ ean: targetProduct.ean, quantity: targetProduct.quantity }]\r\n });\r\n\r\n if (response.success) {\r\n const status: Record<string, \"isRegistered\" | \"isActivated\" | \"isInvalid\" | \"isEmpty\"> = {\r\n \"active\": \"isActivated\",\r\n \"nonexistent\": \"isInvalid\"\r\n }\r\n\r\n setSecurityNumber(values.securityNumber);\r\n setState(status[response.data.process_platform.status]);\r\n }\r\n } catch (error) {\r\n console.error(\"Error validating document:\", error);\r\n } finally {\r\n setLoading(false);\r\n };\r\n };\r\n\r\n return (\r\n <form\r\n onSubmit={handleSubmit(onSubmitDefault)}\r\n className={classNames(\r\n \"w-full h-auto flex items-center justify-center mb-0 transition-all duration-150\",\r\n { \"mb-4\": errors.securityNumber }\r\n )}\r\n id=\"form_security_number_pbm\"\r\n >\r\n <label\r\n htmlFor=\"cpf\"\r\n className=\"w-4/5 h-auto flex items-start flex-col justify-center relative py-2\"\r\n id=\"label_security_number_pbm\"\r\n >\r\n <input\r\n type=\"text\"\r\n className={classNames(\r\n \"w-full h-8 bg-[#44c2c0]/20 rounded-s-full text-sm font-semibold focus:outline focus:outline-[#339c9b] focus:bg-[#44c2c0]/30 text-zinc-600 placeholder:text-zinc-600 px-4 placeholder:text-sm placeholder:font-semibold\",\r\n { \"outline outline-red-600\": errors.securityNumber }\r\n )}\r\n placeholder=\"Digite seu CPF aqui...\"\r\n required\r\n maxLength={14}\r\n {...register(\"securityNumber\", {\r\n onChange: (e) => {\r\n const formatted = toFormat(e.target.value);\r\n setValue(\"securityNumber\", formatted as string, {\r\n shouldValidate: true,\r\n });\r\n },\r\n })}\r\n defaultValue={securityNumber || \"\"}\r\n id=\"input_security_number_pbm\"\r\n />\r\n {errors.securityNumber && (\r\n <span className=\"text-red-400 text-xs font-semibold absolute -bottom-3 left-2 text-nowrap\" id=\"security_number_form_error\">\r\n {errors.securityNumber.message}\r\n </span>\r\n )}\r\n </label>\r\n <button\r\n type=\"submit\"\r\n className=\"bg-gray-400 w-1/5 h-8 flex items-center justify-center rounded-e-full cursor-pointer\"\r\n id=\"button_submit_security_number_pbm\"\r\n >\r\n <ArrowRight size={24} color=\"white\" strokeWidth={2} />\r\n </button>\r\n </form>\r\n );\r\n}\r\n\r\nexport default Form;\r\n","import { createStore, StateCreator, StoreApi } from \"zustand\";\r\nimport { useStore } from \"zustand/react\";\r\nimport { usePBMTypes } from \"../../types/globals\";\r\n\r\nexport interface PBMStore extends usePBMTypes {\r\n setSecurityNumber: (securityNumber: string) => void;\r\n setState: (state: usePBMTypes[\"state\"]) => void;\r\n setAvailableDiscountSelected: (\r\n availableDiscount: usePBMTypes[\"availableDiscountSelected\"]\r\n ) => void;\r\n setTargetProduct: (targetProduct: usePBMTypes[\"targetProduct\"]) => void;\r\n}\r\n\r\nconst initialPBMState: usePBMTypes = {\r\n securityNumber: \"\",\r\n state: \"isEmpty\",\r\n availableDiscountSelected: {\r\n quantity: 0,\r\n discount: {\r\n unit: 0,\r\n total: 0,\r\n },\r\n totalPrice: 0,\r\n },\r\n targetProduct: null,\r\n campaign: \"pbm_campaign\",\r\n};\r\n\r\n// ✅ TIPANDO a função corretamente com StateCreator\r\nconst createPBMStore: StateCreator<PBMStore> = (set) => ({\r\n ...initialPBMState,\r\n\r\n setSecurityNumber: (securityNumber: string) => set({ securityNumber }),\r\n setState: (state: usePBMTypes[\"state\"]) => set({ state }),\r\n setTargetProduct: (targetProduct: usePBMTypes[\"targetProduct\"]) =>\r\n set({ targetProduct }),\r\n setAvailableDiscountSelected: (\r\n availableDiscount: usePBMTypes[\"availableDiscountSelected\"]\r\n ) => set({ availableDiscountSelected: availableDiscount }),\r\n});\r\n\r\n// Store base única (usada tanto no React quanto no webcomponent)\r\nexport const pbmStore: StoreApi<PBMStore> =\r\n createStore<PBMStore>(createPBMStore);\r\n\r\n// React hook (usado dentro de componentes React) - usa a mesma instância da store\r\nexport function usePBMStore(): PBMStore;\r\nexport function usePBMStore<T>(selector: (state: PBMStore) => T): T;\r\nexport function usePBMStore<T>(selector?: (state: PBMStore) => T): PBMStore | T {\r\n if (selector) {\r\n return useStore(pbmStore, selector);\r\n }\r\n return useStore(pbmStore, (state) => state);\r\n}\r\n","import Cookies from \"js-cookie\";\r\nimport { IRequestDefault } from \"../types/requests\";\r\n\r\ninterface IProcessBenefits {\r\n process: {\r\n error?: { returnCode: string; informativeText: string }[]\r\n },\r\n returnCode: string;\r\n}\r\n\r\ninterface IProcessPlatform {\r\n status: string;\r\n message: string;\r\n}\r\n\r\ninterface IRefreshAuthData {\r\n process_benefits: IProcessBenefits;\r\n process_platform: IProcessPlatform;\r\n}\r\n\r\ninterface IResponseValidateDocument extends IRequestDefault {\r\n data: IRefreshAuthData;\r\n}\r\n\r\ninterface IValidateDocumentParams {\r\n document: string;\r\n products: { ean: string; quantity: number }[];\r\n}\r\n\r\nexport const ValidateDocument = async ({ document, products }: IValidateDocumentParams): Promise<IResponseValidateDocument> => {\r\n const API_URL = import.meta.env.VITE_API_URL;\r\n\r\n if (!API_URL) {\r\n throw new Error('API URL is not defined in environment variables');\r\n }\r\n\r\n const AUTH_TOKEN = Cookies.get(\"pbm-token\");\r\n\r\n if (!AUTH_TOKEN) {\r\n throw new Error('Token is not defined in cookies or is expired');\r\n }\r\n\r\n const response = await fetch(`${API_URL}/transactions/validate`, {\r\n method: 'POST',\r\n headers: {\r\n Authorization: `Bearer ${AUTH_TOKEN}`,\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({ document, products })\r\n })\r\n\r\n const dataResponse: IResponseValidateDocument = await response.json();\r\n\r\n if (!dataResponse.success) {\r\n throw new Error(dataResponse.message || 'Failed to fetch document validation');\r\n }\r\n\r\n return dataResponse;\r\n}","interface LoadingProps {\r\n textColor?: string;\r\n}\r\n\r\nfunction Loading({ textColor }: LoadingProps) {\r\n return (\r\n <main className=\"flex items-center justify-center gap-4\" id=\"loading_pbm\">\r\n <div\r\n data-testid=\"test_id_spin\"\r\n className=\"w-8 h-8 border-4 border-t-gray-700 border-gray-300 rounded-full animate-spin\"\r\n id=\"loading_spin\"\r\n ></div>\r\n <p\r\n className={\"text-sm font-semibold text-start text-zinc-900\"}\r\n style={{ color: textColor }}\r\n id=\"loading_label\"\r\n >\r\n Um momento... estamos verificando seus dados.\r\n </p>\r\n </main>\r\n );\r\n}\r\n\r\nexport default Loading;\r\n","import classNames from \"classnames\";\r\nimport React, { ButtonHTMLAttributes } from \"react\";\r\n\r\ninterface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\nfunction Button(props: ButtonProps) {\r\n return (\r\n <button\r\n {...props}\r\n className={classNames(\r\n \"w-3xs cursor-pointer h-10 rounded-full bg-blue-500 hover:bg-blue-400 text-white text-sm font-semibold transition-colors\",\r\n props.className\r\n )}\r\n >\r\n {props.children}\r\n </button>\r\n );\r\n}\r\n\r\nexport default Button;\r\n","import { useState } from \"react\";\r\n\r\nimport { BENEFITS_ITEMS } from \"../../mocks/benefits\";\r\n\r\nimport Title from \"../UI/Title\";\r\nimport Item from \"./Item\";\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\nimport Button from \"../UI/Button\";\r\n\r\nfunction BenefitsTable({\r\n originalProductPrice,\r\n}: {\r\n originalProductPrice: number;\r\n}) {\r\n const { securityNumber, setState } = usePBMStore();\r\n const [selectedDiscout, setSelectedDiscount] = useState<string | null>(null);\r\n\r\n return (\r\n <section\r\n className=\"flex items-start justify-center gap-4 w-full h-auto flex-col\"\r\n id=\"benefits_table_pbm\"\r\n >\r\n <Title>Descontos disponíveis:</Title>\r\n\r\n <form\r\n className=\"flex flex-col items-center justify-start w-full gap-3\"\r\n id=\"form_benefits_table_pbm\"\r\n >\r\n {BENEFITS_ITEMS.map((item, index) => {\r\n const ID_INPUT = \"unity_quantity_\" + item.authorizedQuantity;\r\n\r\n return (\r\n <Item\r\n key={index}\r\n data={item}\r\n checked={selectedDiscout === ID_INPUT}\r\n onChange={() => setSelectedDiscount(ID_INPUT)}\r\n originalProductPrice={originalProductPrice}\r\n />\r\n );\r\n })}\r\n </form>\r\n\r\n {!securityNumber && (\r\n <Button\r\n onClick={() => setState(\"isEmpty\")}\r\n className=\"bg-transparent p-0 pl-2 w-auto h-auto text-zinc-600 cursor-pointer hover:text-zinc-900 hover:bg-transparent text-start\"\r\n id=\"unauthorized_benefits_button\"\r\n >\r\n Atenção: não é possível utilizar os benefícos sem realizar a consulta\r\n do cpf, por favor{\" \"}\r\n <span className=\"underline\">\r\n insira seu cpf para utilizar os benefícios\r\n </span>\r\n </Button>\r\n )}\r\n\r\n {securityNumber && (\r\n <Button\r\n onClick={() => setState(\"isEmpty\")}\r\n className=\"bg-transparent p-0 pl-2 w-auto h-auto text-zinc-600 cursor-pointer hover:text-zinc-900 hover:bg-transparent text-start\"\r\n id=\"change_security_number\"\r\n >\r\n <span className=\"underline\">Deseja editar o cpf digitado?</span>\r\n </Button>\r\n )}\r\n </section>\r\n );\r\n}\r\n\r\nexport default BenefitsTable;\r\n","export interface IBenefitsItem {\r\n id: number;\r\n ean: string;\r\n authorizedQuantity: number;\r\n discountValue: number;\r\n discountPercentual: number;\r\n}\r\n\r\nexport const BENEFITS_ITEMS: IBenefitsItem[] = [\r\n {\r\n id: 1,\r\n ean: \"001\",\r\n authorizedQuantity: 1,\r\n discountValue: 4800,\r\n discountPercentual: 2400\r\n },\r\n {\r\n id: 2,\r\n ean: \"002\",\r\n authorizedQuantity: 2,\r\n discountValue: 4800,\r\n discountPercentual: 2400\r\n },\r\n {\r\n id: 3,\r\n ean: \"003\",\r\n authorizedQuantity: 3,\r\n discountValue: 9400,\r\n discountPercentual: 4700\r\n }\r\n\r\n]","import classNames from \"classnames\";\r\nimport React, { HTMLAttributes } from \"react\";\r\n\r\ninterface TitleProps extends HTMLAttributes<HTMLTitleElement> {\r\n children: React.ReactNode;\r\n textColor?: string;\r\n textSize?: string;\r\n}\r\n\r\nfunction Title(props: TitleProps) {\r\n return (\r\n <h2\r\n className={classNames(\r\n \"text-start font-semibold text-sm text-zinc-900\",\r\n props.className\r\n )}\r\n style={{ color: props.textColor, fontSize: props.textSize }}\r\n data-testid=\"test_id_title\"\r\n id=\"title_pbm\"\r\n >\r\n {props.children}\r\n </h2>\r\n );\r\n}\r\n\r\nexport default Title;\r\n","import { IBenefitsItem } from \"../../mocks/benefits\";\r\n\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\n\r\nimport { Badge, BadgeCheck } from \"lucide-react\";\r\nimport { useCallback, useEffect } from \"react\";\r\n\r\ninterface ItemProps {\r\n data: IBenefitsItem;\r\n onChange: VoidFunction;\r\n checked: boolean;\r\n originalProductPrice: number;\r\n}\r\n\r\nfunction Item({ data, onChange, checked, originalProductPrice }: ItemProps) {\r\n const { setAvailableDiscountSelected, securityNumber } = usePBMStore();\r\n\r\n const ID_INPUT = \"unity_quantity_\" + data.authorizedQuantity;\r\n\r\n const decimalDiscount = data.discountPercentual / 10000;\r\n\r\n const unitDiscountValue = originalProductPrice * decimalDiscount;\r\n\r\n const discountValue = unitDiscountValue * data.authorizedQuantity;\r\n\r\n const totalPriceProductWithDiscountBenefit =\r\n originalProductPrice * data.authorizedQuantity - discountValue;\r\n\r\n const updateStorageData = useCallback(() => {\r\n if (checked) {\r\n setAvailableDiscountSelected({\r\n discount: {\r\n total: discountValue,\r\n unit: unitDiscountValue,\r\n },\r\n quantity: data.authorizedQuantity,\r\n totalPrice: totalPriceProductWithDiscountBenefit,\r\n });\r\n }\r\n }, [\r\n checked,\r\n data.authorizedQuantity,\r\n setAvailableDiscountSelected,\r\n discountValue,\r\n totalPriceProductWithDiscountBenefit,\r\n unitDiscountValue,\r\n ]);\r\n\r\n useEffect(() => {\r\n updateStorageData();\r\n }, [updateStorageData]);\r\n\r\n return (\r\n <label\r\n htmlFor={ID_INPUT}\r\n className=\"label_benefits w-full flex items-center justify-start bg-zinc-300/60 border border-zinc-400/50 px-4 py-2 hover:bg-zinc-300 transition-colors cursor-pointer rounded-full gap-1\"\r\n id={\"label_benefits_\" + ID_INPUT}\r\n >\r\n <input\r\n type=\"radio\"\r\n name=\"benefits_discount\"\r\n id={ID_INPUT}\r\n className=\"hidden\"\r\n checked={checked}\r\n onChange={onChange}\r\n disabled={!securityNumber}\r\n />\r\n\r\n {!checked ? (\r\n <Badge color=\"#9f9fa9\" size={20} />\r\n ) : (\r\n <BadgeCheck color=\"#32b316\" size={20} />\r\n )}\r\n\r\n <span className=\"text-zinc-900 font-semibold text-sm\">\r\n {data.authorizedQuantity}un\r\n </span>\r\n\r\n <section className=\"ml-auto relative\">\r\n <span className=\"absolute -top-4 text-emerald-900 py-0.5 font-semibold text-xs bg-[#32b316] px-2 w-auto text-nowrap rounded-2xl -right-4\">\r\n {discountValue.toLocaleString(\"pt-BR\", {\r\n currency: \"BRL\",\r\n currencyDisplay: \"symbol\",\r\n currencySign: \"standard\",\r\n style: \"currency\",\r\n })}{\" \"}\r\n OFF\r\n </span>\r\n <strong className=\"text-zinc-900 font-semibold text-sm text-center\">\r\n {totalPriceProductWithDiscountBenefit.toLocaleString(\"pt-BR\", {\r\n currency: \"BRL\",\r\n currencyDisplay: \"symbol\",\r\n currencySign: \"standard\",\r\n style: \"currency\",\r\n })}\r\n </strong>\r\n </section>\r\n </label>\r\n );\r\n}\r\n\r\nexport default Item;\r\n","import classNames from \"classnames\";\r\nimport React, { HTMLAttributes } from \"react\";\r\n\r\ninterface TextProps extends HTMLAttributes<HTMLParagraphElement> {\r\n children: React.ReactNode;\r\n textColor?: string;\r\n textSize?: string;\r\n}\r\n\r\nfunction Text(props: TextProps) {\r\n return (\r\n <p\r\n className={classNames(\r\n \"text-start font-normal text-sm text-zinc-900\",\r\n props.className\r\n )}\r\n style={{ color: props.textColor, fontSize: props.textSize }}\r\n data-testid=\"test_id_text\"\r\n id=\"text_pbm\"\r\n >\r\n {props.children}\r\n </p>\r\n );\r\n}\r\n\r\nexport default Text;\r\n","import classNames from \"classnames\";\r\nimport { TriangleAlert } from \"lucide-react\";\r\nimport { Dispatch, SetStateAction } from \"react\";\r\n\r\ninterface IFrameProps {\r\n url: string;\r\n title: string;\r\n openModal: boolean;\r\n setOpenModal: Dispatch<SetStateAction<boolean>>;\r\n}\r\n\r\nfunction Iframe({ url, title, openModal, setOpenModal }: IFrameProps) {\r\n return (\r\n <main\r\n className={classNames(\r\n \"fixed inset-0 flex items-center justify-center z-50 flex-col transition-all shadow\",\r\n {\r\n \"opacity-100 pointer-events-auto\": openModal,\r\n \"opacity-0 pointer-events-none\": !openModal,\r\n }\r\n )}\r\n data-testid=\"test_id_iframe\"\r\n id=\"iframe_pbm\"\r\n >\r\n <div\r\n className=\"bg-black/35 inset-0 absolute\"\r\n onClick={() => {\r\n setOpenModal(false);\r\n window.location.reload();\r\n }}\r\n ></div>\r\n <section className=\"w-4/5 h-auto bg-zinc-800 py-2 px-4 flex items-center justify-end rounded-ss-2xl rounded-se-2xl border-b-2 border-gray-100 z-10\">\r\n <button\r\n className=\"shadow-2xl cursor-pointer text-white font-bold bg-red-500 w-auto h-auto px-8 py-2 rounded-full\"\r\n aria-label=\"Fechar o modal\"\r\n data-testid=\"test_id_buttonclose\"\r\n onClick={() => {\r\n setOpenModal(false);\r\n window.location.reload();\r\n }}\r\n >\r\n Fechar\r\n </button>\r\n </section>\r\n <iframe\r\n src={url}\r\n title={title}\r\n width=\"80%\"\r\n height=\"80%\"\r\n allowFullScreen\r\n className=\"z-10\"\r\n ></iframe>\r\n <section className=\"items-center justify-center flex flex-wrap gap-1 bg-zinc-800 z-10 w-4/5 py-2 px-4 rounded-ee-2xl rounded-es-2xl border-t-2 border-gray-100\">\r\n <TriangleAlert size={20} className=\"shrink-0 text-red-500 \" />\r\n\r\n <p className=\"text-start text-sm text-white\">\r\n <span className=\"text-red-500 font-semibold text-base mr-1\">\r\n Atenção:\r\n </span>\r\n Após finalizar os termos de aceite, você já poderá fechar essa janela.\r\n Pode levar <strong>alguns minutos</strong> para os seus dados serem\r\n aprovados.\r\n </p>\r\n </section>\r\n </main>\r\n );\r\n}\r\n\r\nexport default Iframe;\r\n","import Title from \"../UI/Title\";\r\nimport Text from \"../UI/Text\";\r\nimport Button from \"../UI/Button\";\r\nimport Iframe from \"../Iframe\";\r\n\r\nimport { useState } from \"react\";\r\n\r\nfunction SecurityNumberInvalid({ textColor }: { textColor?: string }) {\r\n const [openModal, setOpenModal] = useState<boolean>(false);\r\n return (\r\n <section\r\n data-testid=\"test_id_invalid\"\r\n className=\"flex items-end justify-center gap-2 w-full h-auto flex-col border-y border-zinc-300 py-6\"\r\n id=\"security_number_invalid_container_pbm\"\r\n >\r\n <Title className=\"w-full\" textColor={textColor}>\r\n CPF não cadastrado!\r\n </Title>\r\n <Text className=\"w-full\" textColor={textColor}>\r\n Por favor, conclua seu cadastro para habilitar os benefícios deste\r\n laboratório.\r\n </Text>\r\n <Button\r\n data-testid=\"test_id_openiframe\"\r\n onClick={() => setOpenModal(true)}\r\n id=\"button_accept_terms_pbm\"\r\n >\r\n Aceitar os termos\r\n </Button>\r\n\r\n <Iframe\r\n url=\"https://termo.azurewebsites.net/\"\r\n title=\"Aceitar termos PBM\"\r\n openModal={openModal}\r\n setOpenModal={setOpenModal}\r\n />\r\n </section>\r\n );\r\n}\r\n\r\nexport default SecurityNumberInvalid;\r\n","import Header from \"./components/Header\";\nimport Container from \"./components/UI/Container\";\nimport Footer from \"./components/Footer\";\nimport Form from \"./components/Form\";\nimport Loading from \"./components/UI/Loading\";\nimport Button from \"./components/UI/Button\";\nimport BenefitsTable from \"./components/BenefitsTable\";\nimport SecurityNumberInvalid from \"./components/SecurityNumberInvalid\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport SecurityNumberRegitered from \"./components/SecurityNumberRegitered\";\nimport { GetAuthorization } from \"./services/authorization\";\nimport { ArrowRight } from \"lucide-react\";\nimport { usePBMStore } from \"./libs/zustand/usePBM\";\n\nexport interface PBMProps {\n originalProductPrice: number | string;\n industryLogo?: string;\n clientID: string;\n eanProduct: string;\n}\n\nfunction PBM({\n originalProductPrice,\n industryLogo,\n clientID,\n eanProduct,\n}: PBMProps) {\n const formatedOriginalProductPrice = Number(\n String(originalProductPrice).replace(',', '.')\n );\n\n const [loading, setLoading] = useState<boolean>(false);\n\n const { setState, state, setTargetProduct } = usePBMStore();\n\n const handleAuthorizationRequest = useCallback(async () => {\n try {\n const response = await GetAuthorization({ clientID: clientID });\n\n if (response.success) {\n setTargetProduct({ ean: eanProduct, quantity: 1 })\n console.log(\"Authorization successful:\", response.data);\n } else {\n console.error(\"Authorization failed:\", response.message);\n }\n } catch (error) {\n console.error(\"Error fetching authorization:\", error);\n }\n }, [clientID, eanProduct]);\n\n useEffect(() => {\n handleAuthorizationRequest();\n }, [handleAuthorizationRequest]);\n\n return (\n <Container variant=\"main\">\n <Header originalProductPrice={formatedOriginalProductPrice || 0} />\n\n <Container variant=\"simple\">\n {state === \"isEmpty\" && !loading && (\n <>\n <Form setLoading={setLoading} />\n <Button\n className=\"bg-transparent p-0 pl-2 w-auto h-auto text-zinc-600 underline cursor-pointer hover:text-zinc-900 hover:bg-transparent flex items-center justify-start gap-1\"\n onClick={() => setState(\"isActivated\")}\n id=\"check_benefits_button\"\n >\n <span>Consultar benefícios</span>\n <ArrowRight size={16} />\n </Button>\n </>\n )}\n\n {state === \"isEmpty\" && loading && <Loading />}\n\n {state === \"isInvalid\" && !loading && <SecurityNumberInvalid />}\n\n {state === \"isRegistered\" && !loading && <SecurityNumberRegitered />}\n\n {state === \"isActivated\" && !loading && (\n <BenefitsTable originalProductPrice={formatedOriginalProductPrice} />\n )}\n </Container>\n\n <Footer industryLogo={industryLogo || undefined} />\n </Container>\n );\n}\n\nexport default PBM;\n","import { ILinkHref } from \"../../../types/globals\";\r\nimport classNames from \"classnames\";\r\nimport React from \"react\";\r\nimport { getParams } from \"../../../utils/getParams\";\r\n\r\ninterface LinkProps {\r\n className?: string;\r\n children: React.ReactNode;\r\n href: ILinkHref | string;\r\n}\r\n\r\nfunction Link(props: LinkProps) {\r\n return (\r\n <a\r\n {...props}\r\n target=\"_blank\"\r\n href={\r\n typeof props.href === \"string\"\r\n ? props.href\r\n : props.href.pathname + getParams(props.href.param)\r\n }\r\n className={classNames(\r\n \"w-3xs cursor-pointer h-10 rounded-full bg-blue-500 hover:bg-blue-400 text-white text-sm font-semibold transition-colors flex items-center justify-center\",\r\n props.className\r\n )}\r\n data-testid=\"test_id_link\"\r\n id=\"link_pbm\"\r\n >\r\n {props.children}\r\n </a>\r\n );\r\n}\r\n\r\nexport default Link;\r\n","export const getParams = (\r\n params: { [key: string]: string | number } | undefined\r\n) => {\r\n if (params === undefined) return \"\";\r\n\r\n return (\r\n \"?\" +\r\n Object.keys(params)\r\n .map((paramter) => paramter + \"=\" + params[paramter])\r\n .join(\"&\")\r\n );\r\n};","import Title from \"../UI/Title\";\r\nimport Text from \"../UI/Text\";\r\nimport Link from \"../UI/Link\";\r\n\r\nfunction SecurityNumberRegitered({ textColor }: { textColor?: string }) {\r\n return (\r\n <section\r\n data-testid=\"test_id_registered\"\r\n className=\"flex items-end justify-center gap-2 w-full h-auto flex-col border-y border-zinc-300 py-6\"\r\n id=\"security_number_registered_container_pbm\"\r\n >\r\n <Title className=\"w-full\" textColor={textColor}>\r\n CPF não habilitado no produto!\r\n </Title>\r\n <Text className=\"w-full\" textColor={textColor}>\r\n Por favor, conclua seu cadastro para habilitar os benefícios deste\r\n laboratório.\r\n </Text>\r\n <Link\r\n href={{\r\n pathname: \"https://gip-pd-app.interplayers.com.br/idp-pd-app/adesao\",\r\n param: { guid: \"f2aff249-51b4-49a4-b671-d6bee89da0f0\" },\r\n }}\r\n >\r\n Ativar CPF\r\n </Link>\r\n </section>\r\n );\r\n}\r\n\r\nexport default SecurityNumberRegitered;\r\n","import Cookies from \"js-cookie\";\r\nimport { IRequestDefault } from \"../types/requests\";\r\n\r\ninterface GetAuthorizationParams {\r\n clientID: string;\r\n}\r\n\r\ninterface IAuthData {\r\n expiresIn: string;\r\n store: {\r\n CNPJ: string;\r\n name: string;\r\n },\r\n token: string;\r\n refreshToken: string;\r\n}\r\n\r\ninterface IResponseAuth extends IRequestDefault {\r\n data: IAuthData;\r\n}\r\n\r\nexport const GetAuthorization = async ({ clientID }: GetAuthorizationParams): Promise<IResponseAuth> => {\r\n const API_URL = import.meta.env.VITE_API_URL;\r\n const STORE_ID = import.meta.env.VITE_STORE_ID;\r\n const STORE_NAME = import.meta.env.VITE_STORE_NAME;\r\n\r\n if (!API_URL) {\r\n throw new Error('API URL is not defined in environment variables');\r\n }\r\n\r\n if (!STORE_ID || !STORE_NAME) {\r\n throw new Error('Store ID or Store Name is not defined in environment variables');\r\n }\r\n\r\n const response = await fetch(`${API_URL}/auth`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n StoreID: STORE_ID,\r\n StoreName: STORE_NAME,\r\n ClientID: clientID\r\n })\r\n });\r\n\r\n const dataResponse: IResponseAuth = await response.json();\r\n\r\n if (!dataResponse.success) {\r\n throw new Error(dataResponse.message || 'Failed to fetch authorization');\r\n }\r\n\r\n Cookies.set('pbm-token', dataResponse.data.token, {\r\n expires: parseInt(dataResponse.data.expiresIn, 10) / (60 * 60),\r\n secure: true,\r\n sameSite: 'Strict'\r\n });\r\n\r\n Cookies.set('pbm-token-refresh', dataResponse.data.refreshToken, {\r\n secure: true,\r\n sameSite: 'Strict'\r\n });\r\n\r\n return dataResponse;\r\n}"],"mappings":"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","names":["import_jsx_runtime","classNames","import_classnames","import_jsx_runtime","classNames","import_classnames","import_zod","Cookies","import_jsx_runtime","classNames","import_jsx_runtime","import_classnames","import_jsx_runtime","classNames","import_react","import_classnames","import_jsx_runtime","classNames","import_lucide_react","import_react","import_jsx_runtime","import_jsx_runtime","import_classnames","import_jsx_runtime","classNames","import_classnames","import_lucide_react","import_jsx_runtime","classNames","import_react","import_jsx_runtime","import_react","import_classnames","import_jsx_runtime","classNames","import_jsx_runtime","import_js_cookie","import_meta","Cookies","import_lucide_react","import_jsx_runtime"]}
package/dist/index.mjs CHANGED
@@ -52,9 +52,10 @@ function Container({
52
52
  var Container_default = Container;
53
53
 
54
54
  // src/components/Footer/index.tsx
55
+ import classNames2 from "classnames";
55
56
  import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
56
57
  function Footer({ industryLogo }) {
57
- return /* @__PURE__ */ jsx3("footer", { className: "w-full h-auto relative", id: "footer_pbm", children: /* @__PURE__ */ jsxs2("section", { className: "flex items-center justify-center w-full h-auto gap-4", children: [
58
+ return /* @__PURE__ */ jsx3("footer", { className: "w-full h-auto relative", id: "footer_pbm", children: /* @__PURE__ */ jsxs2("section", { className: classNames2("flex items-center w-full h-auto gap-4", { "justify-center": industryLogo, "justify-start": !industryLogo }), children: [
58
59
  /* @__PURE__ */ jsxs2("section", { className: "w-4/5 h-auto", children: [
59
60
  /* @__PURE__ */ jsx3("h3", { className: "text-start font-semibold text-sm", children: "Economize com o benef\xEDcio do laborat\xF3rio." }),
60
61
  /* @__PURE__ */ jsx3("p", { className: "text-start font-normal text-sm", children: "Este produto tem pre\xE7o exclusivo para clientes cadastrados no programa." })
@@ -97,13 +98,14 @@ var toFormat = (value) => {
97
98
  };
98
99
 
99
100
  // src/components/Form/index.tsx
100
- import classNames2 from "classnames";
101
+ import classNames3 from "classnames";
101
102
  import { zodResolver } from "@hookform/resolvers/zod";
102
103
  import { useForm } from "react-hook-form";
103
104
  import { ArrowRight } from "lucide-react";
104
105
 
105
106
  // src/libs/zustand/usePBM.tsx
106
- import { create, createStore } from "zustand";
107
+ import { createStore } from "zustand";
108
+ import { useStore } from "zustand/react";
107
109
  var initialPBMState = {
108
110
  securityNumber: "",
109
111
  state: "isEmpty",
@@ -125,13 +127,44 @@ var createPBMStore = (set) => ({
125
127
  setTargetProduct: (targetProduct) => set({ targetProduct }),
126
128
  setAvailableDiscountSelected: (availableDiscount) => set({ availableDiscountSelected: availableDiscount })
127
129
  });
128
- var usePBMStore = create(createPBMStore);
129
130
  var pbmStore = createStore(createPBMStore);
131
+ function usePBMStore(selector) {
132
+ if (selector) {
133
+ return useStore(pbmStore, selector);
134
+ }
135
+ return useStore(pbmStore, (state) => state);
136
+ }
137
+
138
+ // src/services/validate-document.ts
139
+ import Cookies from "js-cookie";
140
+ var ValidateDocument = async ({ document, products }) => {
141
+ const API_URL = import.meta.env.VITE_API_URL;
142
+ if (!API_URL) {
143
+ throw new Error("API URL is not defined in environment variables");
144
+ }
145
+ const AUTH_TOKEN = Cookies.get("pbm-token");
146
+ if (!AUTH_TOKEN) {
147
+ throw new Error("Token is not defined in cookies or is expired");
148
+ }
149
+ const response = await fetch(`${API_URL}/transactions/validate`, {
150
+ method: "POST",
151
+ headers: {
152
+ Authorization: `Bearer ${AUTH_TOKEN}`,
153
+ "Content-Type": "application/json"
154
+ },
155
+ body: JSON.stringify({ document, products })
156
+ });
157
+ const dataResponse = await response.json();
158
+ if (!dataResponse.success) {
159
+ throw new Error(dataResponse.message || "Failed to fetch document validation");
160
+ }
161
+ return dataResponse;
162
+ };
130
163
 
131
164
  // src/components/Form/index.tsx
132
165
  import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
133
166
  function Form({ setLoading }) {
134
- const { setSecurityNumber, setState, securityNumber } = usePBMStore();
167
+ const { setSecurityNumber, setState, securityNumber, targetProduct } = usePBMStore();
135
168
  const {
136
169
  handleSubmit,
137
170
  register,
@@ -143,28 +176,37 @@ function Form({ setLoading }) {
143
176
  securityNumber: securityNumber || ""
144
177
  }
145
178
  });
146
- const onSubmitDefault = (values) => {
179
+ const onSubmitDefault = async (values) => {
147
180
  setLoading(true);
148
- new Promise((resolve) => {
149
- setTimeout(() => {
150
- resolve({
151
- securityNumber: values.securityNumber,
152
- state: "isActivated"
153
- });
154
- }, 2e3);
155
- }).then((result) => {
156
- const response = result;
157
- setSecurityNumber(response.securityNumber);
158
- setState(response.state);
159
- }).finally(() => {
181
+ try {
182
+ if (targetProduct === null) {
183
+ console.error("Product is not defined!");
184
+ return;
185
+ }
186
+ const response = await ValidateDocument({
187
+ document: values.securityNumber.replace(/\D/g, ""),
188
+ products: [{ ean: targetProduct.ean, quantity: targetProduct.quantity }]
189
+ });
190
+ if (response.success) {
191
+ const status = {
192
+ "active": "isActivated",
193
+ "nonexistent": "isInvalid"
194
+ };
195
+ setSecurityNumber(values.securityNumber);
196
+ setState(status[response.data.process_platform.status]);
197
+ }
198
+ } catch (error) {
199
+ console.error("Error validating document:", error);
200
+ } finally {
160
201
  setLoading(false);
161
- });
202
+ }
203
+ ;
162
204
  };
163
205
  return /* @__PURE__ */ jsxs3(
164
206
  "form",
165
207
  {
166
208
  onSubmit: handleSubmit(onSubmitDefault),
167
- className: classNames2(
209
+ className: classNames3(
168
210
  "w-full h-auto flex items-center justify-center mb-0 transition-all duration-150",
169
211
  { "mb-4": errors.securityNumber }
170
212
  ),
@@ -181,7 +223,7 @@ function Form({ setLoading }) {
181
223
  "input",
182
224
  {
183
225
  type: "text",
184
- className: classNames2(
226
+ className: classNames3(
185
227
  "w-full h-8 bg-[#44c2c0]/20 rounded-s-full text-sm font-semibold focus:outline focus:outline-[#339c9b] focus:bg-[#44c2c0]/30 text-zinc-600 placeholder:text-zinc-600 px-4 placeholder:text-sm placeholder:font-semibold",
186
228
  { "outline outline-red-600": errors.securityNumber }
187
229
  ),
@@ -245,14 +287,14 @@ function Loading({ textColor }) {
245
287
  var Loading_default = Loading;
246
288
 
247
289
  // src/components/UI/Button/index.tsx
248
- import classNames3 from "classnames";
290
+ import classNames4 from "classnames";
249
291
  import { jsx as jsx6 } from "react/jsx-runtime";
250
292
  function Button(props) {
251
293
  return /* @__PURE__ */ jsx6(
252
294
  "button",
253
295
  {
254
296
  ...props,
255
- className: classNames3(
297
+ className: classNames4(
256
298
  "w-3xs cursor-pointer h-10 rounded-full bg-blue-500 hover:bg-blue-400 text-white text-sm font-semibold transition-colors",
257
299
  props.className
258
300
  ),
@@ -291,13 +333,13 @@ var BENEFITS_ITEMS = [
291
333
  ];
292
334
 
293
335
  // src/components/UI/Title/index.tsx
294
- import classNames4 from "classnames";
336
+ import classNames5 from "classnames";
295
337
  import { jsx as jsx7 } from "react/jsx-runtime";
296
338
  function Title(props) {
297
339
  return /* @__PURE__ */ jsx7(
298
340
  "h2",
299
341
  {
300
- className: classNames4(
342
+ className: classNames5(
301
343
  "text-start font-semibold text-sm text-zinc-900",
302
344
  props.className
303
345
  ),
@@ -454,13 +496,13 @@ function BenefitsTable({
454
496
  var BenefitsTable_default = BenefitsTable;
455
497
 
456
498
  // src/components/UI/Text/index.tsx
457
- import classNames5 from "classnames";
499
+ import classNames6 from "classnames";
458
500
  import { jsx as jsx10 } from "react/jsx-runtime";
459
501
  function Text(props) {
460
502
  return /* @__PURE__ */ jsx10(
461
503
  "p",
462
504
  {
463
- className: classNames5(
505
+ className: classNames6(
464
506
  "text-start font-normal text-sm text-zinc-900",
465
507
  props.className
466
508
  ),
@@ -474,14 +516,14 @@ function Text(props) {
474
516
  var Text_default = Text;
475
517
 
476
518
  // src/components/Iframe/index.tsx
477
- import classNames6 from "classnames";
519
+ import classNames7 from "classnames";
478
520
  import { TriangleAlert } from "lucide-react";
479
521
  import { jsx as jsx11, jsxs as jsxs7 } from "react/jsx-runtime";
480
522
  function Iframe({ url, title, openModal, setOpenModal }) {
481
523
  return /* @__PURE__ */ jsxs7(
482
524
  "main",
483
525
  {
484
- className: classNames6(
526
+ className: classNames7(
485
527
  "fixed inset-0 flex items-center justify-center z-50 flex-col transition-all shadow",
486
528
  {
487
529
  "opacity-100 pointer-events-auto": openModal,
@@ -582,7 +624,7 @@ var SecurityNumberInvalid_default = SecurityNumberInvalid;
582
624
  import { useCallback as useCallback2, useEffect as useEffect2, useState as useState3 } from "react";
583
625
 
584
626
  // src/components/UI/Link/index.tsx
585
- import classNames7 from "classnames";
627
+ import classNames8 from "classnames";
586
628
 
587
629
  // src/utils/getParams.ts
588
630
  var getParams = (params) => {
@@ -599,7 +641,7 @@ function Link(props) {
599
641
  ...props,
600
642
  target: "_blank",
601
643
  href: typeof props.href === "string" ? props.href : props.href.pathname + getParams(props.href.param),
602
- className: classNames7(
644
+ className: classNames8(
603
645
  "w-3xs cursor-pointer h-10 rounded-full bg-blue-500 hover:bg-blue-400 text-white text-sm font-semibold transition-colors flex items-center justify-center",
604
646
  props.className
605
647
  ),
@@ -640,7 +682,7 @@ function SecurityNumberRegitered({ textColor }) {
640
682
  var SecurityNumberRegitered_default = SecurityNumberRegitered;
641
683
 
642
684
  // src/services/authorization.ts
643
- import Cookies from "js-cookie";
685
+ import Cookies2 from "js-cookie";
644
686
  var GetAuthorization = async ({ clientID }) => {
645
687
  const API_URL = import.meta.env.VITE_API_URL;
646
688
  const STORE_ID = import.meta.env.VITE_STORE_ID;
@@ -666,12 +708,12 @@ var GetAuthorization = async ({ clientID }) => {
666
708
  if (!dataResponse.success) {
667
709
  throw new Error(dataResponse.message || "Failed to fetch authorization");
668
710
  }
669
- Cookies.set("pbm-token", dataResponse.data.token, {
711
+ Cookies2.set("pbm-token", dataResponse.data.token, {
670
712
  expires: parseInt(dataResponse.data.expiresIn, 10) / (60 * 60),
671
713
  secure: true,
672
714
  sameSite: "Strict"
673
715
  });
674
- Cookies.set("pbm-token-refresh", dataResponse.data.refreshToken, {
716
+ Cookies2.set("pbm-token-refresh", dataResponse.data.refreshToken, {
675
717
  secure: true,
676
718
  sameSite: "Strict"
677
719
  });
@@ -680,41 +722,6 @@ var GetAuthorization = async ({ clientID }) => {
680
722
 
681
723
  // src/PBM.tsx
682
724
  import { ArrowRight as ArrowRight2 } from "lucide-react";
683
-
684
- // src/services/get-product-by-ean.ts
685
- import Cookies2 from "js-cookie";
686
- var GetProductByEAN = async ({ PRODUCT_EAN }) => {
687
- const API_URL = import.meta.env.VITE_API_URL;
688
- const AUTH_TOKEN = Cookies2.get("pbm-token");
689
- if (!AUTH_TOKEN) {
690
- throw new Error("Token is not defined in cookies or is expired");
691
- }
692
- const response = await fetch(`${API_URL}/core/products?ean=${PRODUCT_EAN}`, {
693
- method: "GET",
694
- headers: {
695
- Authorization: `Bearer ${AUTH_TOKEN}`,
696
- "Content-Type": "application/json"
697
- }
698
- });
699
- const dataResponse = await response.json();
700
- if (!dataResponse.success) {
701
- throw new Error(dataResponse.message || "Failed to fetch authorization");
702
- }
703
- return dataResponse;
704
- };
705
-
706
- // src/libs/zustand/useTargetProduct.tsx
707
- import { create as create2 } from "zustand";
708
- var initialTargetProductState = {
709
- targetProductInternal: null
710
- };
711
- var createPBMStore2 = (set) => ({
712
- ...initialTargetProductState,
713
- setTargetProductInternal: (targetProductInternal) => set({ targetProductInternal })
714
- });
715
- var useTargetProducts = create2(createPBMStore2);
716
-
717
- // src/PBM.tsx
718
725
  import { Fragment, jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
719
726
  function PBM({
720
727
  originalProductPrice,
@@ -722,38 +729,29 @@ function PBM({
722
729
  clientID,
723
730
  eanProduct
724
731
  }) {
732
+ const formatedOriginalProductPrice = Number(
733
+ String(originalProductPrice).replace(",", ".")
734
+ );
725
735
  const [loading, setLoading] = useState3(false);
726
736
  const { setState, state, setTargetProduct } = usePBMStore();
727
- const { setTargetProductInternal } = useTargetProducts();
728
- const handleGetProductByEAN = useCallback2(async () => {
729
- try {
730
- const response = await GetProductByEAN({ PRODUCT_EAN: eanProduct });
731
- if (response.success) {
732
- const productByEan = response.data.message.products[0];
733
- setTargetProduct(productByEan);
734
- setTargetProductInternal(productByEan);
735
- }
736
- } catch (error) {
737
- console.error(error);
738
- }
739
- }, [eanProduct, setTargetProduct, setTargetProductInternal]);
740
737
  const handleAuthorizationRequest = useCallback2(async () => {
741
738
  try {
742
739
  const response = await GetAuthorization({ clientID });
743
- if (response.success && eanProduct) {
744
- handleGetProductByEAN();
740
+ if (response.success) {
741
+ setTargetProduct({ ean: eanProduct, quantity: 1 });
742
+ console.log("Authorization successful:", response.data);
745
743
  } else {
746
744
  console.error("Authorization failed:", response.message);
747
745
  }
748
746
  } catch (error) {
749
747
  console.error("Error fetching authorization:", error);
750
748
  }
751
- }, [clientID, handleGetProductByEAN, eanProduct]);
749
+ }, [clientID, eanProduct]);
752
750
  useEffect2(() => {
753
751
  handleAuthorizationRequest();
754
752
  }, [handleAuthorizationRequest]);
755
753
  return /* @__PURE__ */ jsxs10(Container_default, { variant: "main", children: [
756
- /* @__PURE__ */ jsx15(Header_default, { originalProductPrice: originalProductPrice || 0 }),
754
+ /* @__PURE__ */ jsx15(Header_default, { originalProductPrice: formatedOriginalProductPrice || 0 }),
757
755
  /* @__PURE__ */ jsxs10(Container_default, { variant: "simple", children: [
758
756
  state === "isEmpty" && !loading && /* @__PURE__ */ jsxs10(Fragment, { children: [
759
757
  /* @__PURE__ */ jsx15(Form_default, { setLoading }),
@@ -773,9 +771,9 @@ function PBM({
773
771
  state === "isEmpty" && loading && /* @__PURE__ */ jsx15(Loading_default, {}),
774
772
  state === "isInvalid" && !loading && /* @__PURE__ */ jsx15(SecurityNumberInvalid_default, {}),
775
773
  state === "isRegistered" && !loading && /* @__PURE__ */ jsx15(SecurityNumberRegitered_default, {}),
776
- state === "isActivated" && !loading && /* @__PURE__ */ jsx15(BenefitsTable_default, { originalProductPrice })
774
+ state === "isActivated" && !loading && /* @__PURE__ */ jsx15(BenefitsTable_default, { originalProductPrice: formatedOriginalProductPrice })
777
775
  ] }),
778
- /* @__PURE__ */ jsx15(Footer_default, { industryLogo })
776
+ /* @__PURE__ */ jsx15(Footer_default, { industryLogo: industryLogo || void 0 })
779
777
  ] });
780
778
  }
781
779
  var PBM_default = PBM;