@agrada_digital/pbm 0.0.48 → 0.0.50

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 = process.env.VITE_API_URL;\r\n const STORE_ID = process.env.VITE_STORE_ID;\r\n const STORE_NAME = process.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 = process.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":"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","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","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 { 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","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;\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 = originalProductPrice.toString().includes(\",\") ? Number(originalProductPrice.toString().replace(\",\", \".\")) : originalProductPrice;\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_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,7 +98,7 @@ 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";
@@ -128,10 +129,36 @@ var createPBMStore = (set) => ({
128
129
  var usePBMStore = create(createPBMStore);
129
130
  var pbmStore = createStore(createPBMStore);
130
131
 
132
+ // src/services/validate-document.ts
133
+ import Cookies from "js-cookie";
134
+ var ValidateDocument = async ({ document, products }) => {
135
+ const API_URL = import.meta.env.VITE_API_URL;
136
+ if (!API_URL) {
137
+ throw new Error("API URL is not defined in environment variables");
138
+ }
139
+ const AUTH_TOKEN = Cookies.get("pbm-token");
140
+ if (!AUTH_TOKEN) {
141
+ throw new Error("Token is not defined in cookies or is expired");
142
+ }
143
+ const response = await fetch(`${API_URL}/transactions/validate`, {
144
+ method: "POST",
145
+ headers: {
146
+ Authorization: `Bearer ${AUTH_TOKEN}`,
147
+ "Content-Type": "application/json"
148
+ },
149
+ body: JSON.stringify({ document, products })
150
+ });
151
+ const dataResponse = await response.json();
152
+ if (!dataResponse.success) {
153
+ throw new Error(dataResponse.message || "Failed to fetch document validation");
154
+ }
155
+ return dataResponse;
156
+ };
157
+
131
158
  // src/components/Form/index.tsx
132
159
  import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
133
160
  function Form({ setLoading }) {
134
- const { setSecurityNumber, setState, securityNumber } = usePBMStore();
161
+ const { setSecurityNumber, setState, securityNumber, targetProduct } = usePBMStore();
135
162
  const {
136
163
  handleSubmit,
137
164
  register,
@@ -143,28 +170,37 @@ function Form({ setLoading }) {
143
170
  securityNumber: securityNumber || ""
144
171
  }
145
172
  });
146
- const onSubmitDefault = (values) => {
173
+ const onSubmitDefault = async (values) => {
147
174
  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(() => {
175
+ try {
176
+ if (targetProduct === null) {
177
+ console.error("Product is not defined!");
178
+ return;
179
+ }
180
+ const response = await ValidateDocument({
181
+ document: values.securityNumber.replace(/\D/g, ""),
182
+ products: [{ ean: targetProduct.ean, quantity: targetProduct.quantity }]
183
+ });
184
+ if (response.success) {
185
+ const status = {
186
+ "active": "isActivated",
187
+ "nonexistent": "isInvalid"
188
+ };
189
+ setSecurityNumber(values.securityNumber);
190
+ setState(status[response.data.process_platform.status]);
191
+ }
192
+ } catch (error) {
193
+ console.error("Error validating document:", error);
194
+ } finally {
160
195
  setLoading(false);
161
- });
196
+ }
197
+ ;
162
198
  };
163
199
  return /* @__PURE__ */ jsxs3(
164
200
  "form",
165
201
  {
166
202
  onSubmit: handleSubmit(onSubmitDefault),
167
- className: classNames2(
203
+ className: classNames3(
168
204
  "w-full h-auto flex items-center justify-center mb-0 transition-all duration-150",
169
205
  { "mb-4": errors.securityNumber }
170
206
  ),
@@ -181,7 +217,7 @@ function Form({ setLoading }) {
181
217
  "input",
182
218
  {
183
219
  type: "text",
184
- className: classNames2(
220
+ className: classNames3(
185
221
  "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
222
  { "outline outline-red-600": errors.securityNumber }
187
223
  ),
@@ -245,14 +281,14 @@ function Loading({ textColor }) {
245
281
  var Loading_default = Loading;
246
282
 
247
283
  // src/components/UI/Button/index.tsx
248
- import classNames3 from "classnames";
284
+ import classNames4 from "classnames";
249
285
  import { jsx as jsx6 } from "react/jsx-runtime";
250
286
  function Button(props) {
251
287
  return /* @__PURE__ */ jsx6(
252
288
  "button",
253
289
  {
254
290
  ...props,
255
- className: classNames3(
291
+ className: classNames4(
256
292
  "w-3xs cursor-pointer h-10 rounded-full bg-blue-500 hover:bg-blue-400 text-white text-sm font-semibold transition-colors",
257
293
  props.className
258
294
  ),
@@ -291,13 +327,13 @@ var BENEFITS_ITEMS = [
291
327
  ];
292
328
 
293
329
  // src/components/UI/Title/index.tsx
294
- import classNames4 from "classnames";
330
+ import classNames5 from "classnames";
295
331
  import { jsx as jsx7 } from "react/jsx-runtime";
296
332
  function Title(props) {
297
333
  return /* @__PURE__ */ jsx7(
298
334
  "h2",
299
335
  {
300
- className: classNames4(
336
+ className: classNames5(
301
337
  "text-start font-semibold text-sm text-zinc-900",
302
338
  props.className
303
339
  ),
@@ -454,13 +490,13 @@ function BenefitsTable({
454
490
  var BenefitsTable_default = BenefitsTable;
455
491
 
456
492
  // src/components/UI/Text/index.tsx
457
- import classNames5 from "classnames";
493
+ import classNames6 from "classnames";
458
494
  import { jsx as jsx10 } from "react/jsx-runtime";
459
495
  function Text(props) {
460
496
  return /* @__PURE__ */ jsx10(
461
497
  "p",
462
498
  {
463
- className: classNames5(
499
+ className: classNames6(
464
500
  "text-start font-normal text-sm text-zinc-900",
465
501
  props.className
466
502
  ),
@@ -474,14 +510,14 @@ function Text(props) {
474
510
  var Text_default = Text;
475
511
 
476
512
  // src/components/Iframe/index.tsx
477
- import classNames6 from "classnames";
513
+ import classNames7 from "classnames";
478
514
  import { TriangleAlert } from "lucide-react";
479
515
  import { jsx as jsx11, jsxs as jsxs7 } from "react/jsx-runtime";
480
516
  function Iframe({ url, title, openModal, setOpenModal }) {
481
517
  return /* @__PURE__ */ jsxs7(
482
518
  "main",
483
519
  {
484
- className: classNames6(
520
+ className: classNames7(
485
521
  "fixed inset-0 flex items-center justify-center z-50 flex-col transition-all shadow",
486
522
  {
487
523
  "opacity-100 pointer-events-auto": openModal,
@@ -582,7 +618,7 @@ var SecurityNumberInvalid_default = SecurityNumberInvalid;
582
618
  import { useCallback as useCallback2, useEffect as useEffect2, useState as useState3 } from "react";
583
619
 
584
620
  // src/components/UI/Link/index.tsx
585
- import classNames7 from "classnames";
621
+ import classNames8 from "classnames";
586
622
 
587
623
  // src/utils/getParams.ts
588
624
  var getParams = (params) => {
@@ -599,7 +635,7 @@ function Link(props) {
599
635
  ...props,
600
636
  target: "_blank",
601
637
  href: typeof props.href === "string" ? props.href : props.href.pathname + getParams(props.href.param),
602
- className: classNames7(
638
+ className: classNames8(
603
639
  "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
640
  props.className
605
641
  ),
@@ -640,11 +676,11 @@ function SecurityNumberRegitered({ textColor }) {
640
676
  var SecurityNumberRegitered_default = SecurityNumberRegitered;
641
677
 
642
678
  // src/services/authorization.ts
643
- import Cookies from "js-cookie";
679
+ import Cookies2 from "js-cookie";
644
680
  var GetAuthorization = async ({ clientID }) => {
645
- const API_URL = process.env.VITE_API_URL;
646
- const STORE_ID = process.env.VITE_STORE_ID;
647
- const STORE_NAME = process.env.VITE_STORE_NAME;
681
+ const API_URL = import.meta.env.VITE_API_URL;
682
+ const STORE_ID = import.meta.env.VITE_STORE_ID;
683
+ const STORE_NAME = import.meta.env.VITE_STORE_NAME;
648
684
  if (!API_URL) {
649
685
  throw new Error("API URL is not defined in environment variables");
650
686
  }
@@ -666,12 +702,12 @@ var GetAuthorization = async ({ clientID }) => {
666
702
  if (!dataResponse.success) {
667
703
  throw new Error(dataResponse.message || "Failed to fetch authorization");
668
704
  }
669
- Cookies.set("pbm-token", dataResponse.data.token, {
705
+ Cookies2.set("pbm-token", dataResponse.data.token, {
670
706
  expires: parseInt(dataResponse.data.expiresIn, 10) / (60 * 60),
671
707
  secure: true,
672
708
  sameSite: "Strict"
673
709
  });
674
- Cookies.set("pbm-token-refresh", dataResponse.data.refreshToken, {
710
+ Cookies2.set("pbm-token-refresh", dataResponse.data.refreshToken, {
675
711
  secure: true,
676
712
  sameSite: "Strict"
677
713
  });
@@ -680,41 +716,6 @@ var GetAuthorization = async ({ clientID }) => {
680
716
 
681
717
  // src/PBM.tsx
682
718
  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 = process.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
719
  import { Fragment, jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
719
720
  function PBM({
720
721
  originalProductPrice,
@@ -722,38 +723,27 @@ function PBM({
722
723
  clientID,
723
724
  eanProduct
724
725
  }) {
726
+ const formatedOriginalProductPrice = originalProductPrice.toString().includes(",") ? Number(originalProductPrice.toString().replace(",", ".")) : originalProductPrice;
725
727
  const [loading, setLoading] = useState3(false);
726
728
  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
729
  const handleAuthorizationRequest = useCallback2(async () => {
741
730
  try {
742
731
  const response = await GetAuthorization({ clientID });
743
- if (response.success && eanProduct) {
744
- handleGetProductByEAN();
732
+ if (response.success) {
733
+ setTargetProduct({ ean: eanProduct, quantity: 1 });
734
+ console.log("Authorization successful:", response.data);
745
735
  } else {
746
736
  console.error("Authorization failed:", response.message);
747
737
  }
748
738
  } catch (error) {
749
739
  console.error("Error fetching authorization:", error);
750
740
  }
751
- }, [clientID, handleGetProductByEAN, eanProduct]);
741
+ }, [clientID, eanProduct]);
752
742
  useEffect2(() => {
753
743
  handleAuthorizationRequest();
754
744
  }, [handleAuthorizationRequest]);
755
745
  return /* @__PURE__ */ jsxs10(Container_default, { variant: "main", children: [
756
- /* @__PURE__ */ jsx15(Header_default, { originalProductPrice: originalProductPrice || 0 }),
746
+ /* @__PURE__ */ jsx15(Header_default, { originalProductPrice: formatedOriginalProductPrice || 0 }),
757
747
  /* @__PURE__ */ jsxs10(Container_default, { variant: "simple", children: [
758
748
  state === "isEmpty" && !loading && /* @__PURE__ */ jsxs10(Fragment, { children: [
759
749
  /* @__PURE__ */ jsx15(Form_default, { setLoading }),
@@ -773,9 +763,9 @@ function PBM({
773
763
  state === "isEmpty" && loading && /* @__PURE__ */ jsx15(Loading_default, {}),
774
764
  state === "isInvalid" && !loading && /* @__PURE__ */ jsx15(SecurityNumberInvalid_default, {}),
775
765
  state === "isRegistered" && !loading && /* @__PURE__ */ jsx15(SecurityNumberRegitered_default, {}),
776
- state === "isActivated" && !loading && /* @__PURE__ */ jsx15(BenefitsTable_default, { originalProductPrice })
766
+ state === "isActivated" && !loading && /* @__PURE__ */ jsx15(BenefitsTable_default, { originalProductPrice: formatedOriginalProductPrice })
777
767
  ] }),
778
- /* @__PURE__ */ jsx15(Footer_default, { industryLogo })
768
+ /* @__PURE__ */ jsx15(Footer_default, { industryLogo: industryLogo || void 0 })
779
769
  ] });
780
770
  }
781
771
  var PBM_default = PBM;