@agrada_digital/pbm 0.0.90 → 0.0.91
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 +17 -21
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +28 -32
- package/dist/index.mjs.map +1 -1
- package/dist-wc/pbm-wc.js +61 -61
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -435,7 +435,7 @@ function Loading({ textColor }) {
|
|
|
435
435
|
var Loading_default = Loading;
|
|
436
436
|
|
|
437
437
|
// src/components/BenefitsTable/index.tsx
|
|
438
|
-
import { useEffect as useEffect2, useState as
|
|
438
|
+
import { useEffect as useEffect2, useState as useState2 } from "react";
|
|
439
439
|
|
|
440
440
|
// src/components/UI/Title/index.tsx
|
|
441
441
|
import classNames5 from "classnames";
|
|
@@ -472,7 +472,7 @@ var createModalStore = (set) => ({
|
|
|
472
472
|
var useModal = create(createModalStore);
|
|
473
473
|
|
|
474
474
|
// src/components/BenefitsTable/Item.tsx
|
|
475
|
-
import { useCallback, useEffect
|
|
475
|
+
import { useCallback, useEffect } from "react";
|
|
476
476
|
import classNames6 from "classnames";
|
|
477
477
|
|
|
478
478
|
// src/components/UI/Icons/index.tsx
|
|
@@ -528,7 +528,6 @@ import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
|
528
528
|
function Item({ data, onChange, checked }) {
|
|
529
529
|
const { setAvailableDiscountSelected, state, isAuthenticatedShopper } = usePBMStore();
|
|
530
530
|
const { setModal } = useModal();
|
|
531
|
-
const [openModalAlert, setOpenModalAlert] = useState2(false);
|
|
532
531
|
const ID_INPUT = "unity_quantity_" + data.authorizedQuantity;
|
|
533
532
|
const decimalDiscount = data.discountPercentual / 100;
|
|
534
533
|
const unitDiscountValue = data.grossPrice * decimalDiscount;
|
|
@@ -558,12 +557,15 @@ function Item({ data, onChange, checked }) {
|
|
|
558
557
|
useEffect(() => {
|
|
559
558
|
updateStorageData();
|
|
560
559
|
}, [updateStorageData]);
|
|
561
|
-
const
|
|
562
|
-
if (isAuthenticatedShopper)
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
560
|
+
const handleChange = (e) => {
|
|
561
|
+
if (!isAuthenticatedShopper && state === "isActivated") {
|
|
562
|
+
setModal({
|
|
563
|
+
id: "ShopperIsNotAuthenticated",
|
|
564
|
+
open: true
|
|
565
|
+
});
|
|
566
|
+
return;
|
|
567
|
+
}
|
|
568
|
+
onChange();
|
|
567
569
|
};
|
|
568
570
|
return /* @__PURE__ */ jsxs6(
|
|
569
571
|
"label",
|
|
@@ -574,7 +576,6 @@ function Item({ data, onChange, checked }) {
|
|
|
574
576
|
{ "cursor-not-allowed": state === "isPreview", "cursor-pointer": state === "isActivated" }
|
|
575
577
|
),
|
|
576
578
|
id: "label_benefits_" + ID_INPUT,
|
|
577
|
-
onClick: CheckUserIsAuthenticated,
|
|
578
579
|
children: [
|
|
579
580
|
/* @__PURE__ */ jsx9(
|
|
580
581
|
"input",
|
|
@@ -584,7 +585,7 @@ function Item({ data, onChange, checked }) {
|
|
|
584
585
|
id: ID_INPUT,
|
|
585
586
|
className: "hidden",
|
|
586
587
|
checked,
|
|
587
|
-
onChange,
|
|
588
|
+
onChange: handleChange,
|
|
588
589
|
disabled: state === "isPreview"
|
|
589
590
|
}
|
|
590
591
|
),
|
|
@@ -647,9 +648,9 @@ var CheckBenefistWithoutDocument = async ({ products }) => {
|
|
|
647
648
|
import { Fragment as Fragment3, jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
648
649
|
function BenefitsTable() {
|
|
649
650
|
const { securityNumber, setState, state, targetProduct, customLoginUrl, isAuthenticatedShopper } = usePBMStore();
|
|
650
|
-
const [selectedDiscout, setSelectedDiscount] =
|
|
651
|
-
const [loading, setLoading] =
|
|
652
|
-
const [benefitsItems, setBenefitsItems] =
|
|
651
|
+
const [selectedDiscout, setSelectedDiscount] = useState2(null);
|
|
652
|
+
const [loading, setLoading] = useState2(true);
|
|
653
|
+
const [benefitsItems, setBenefitsItems] = useState2();
|
|
653
654
|
useEffect2(() => {
|
|
654
655
|
const fetchDicountsWithoutDocument = async () => {
|
|
655
656
|
if (!targetProduct?.productId) {
|
|
@@ -765,6 +766,7 @@ function BenefitsTable() {
|
|
|
765
766
|
{
|
|
766
767
|
className: "flex flex-col items-center justify-start w-full gap-4.5",
|
|
767
768
|
id: "form_benefits_table_pbm",
|
|
769
|
+
onSubmit: (e) => e.preventDefault(),
|
|
768
770
|
children: [
|
|
769
771
|
!benefitsItems && /* @__PURE__ */ jsx10("p", { className: "text-sm font-semibold text-start text-zinc-900", id: "benefits_empty_pbm", children: "N\xE3o foi poss\xEDvel encontrar benef\xEDcios para esse produto." }),
|
|
770
772
|
benefitsItems && benefitsItems.map((item, index) => {
|
|
@@ -905,7 +907,7 @@ function SecurityNumberInvalid({ textColor }) {
|
|
|
905
907
|
var SecurityNumberInvalid_default = SecurityNumberInvalid;
|
|
906
908
|
|
|
907
909
|
// src/PBM.tsx
|
|
908
|
-
import { useCallback as useCallback2, useEffect as useEffect3, useState as
|
|
910
|
+
import { useCallback as useCallback2, useEffect as useEffect3, useState as useState3 } from "react";
|
|
909
911
|
|
|
910
912
|
// src/components/SecurityNumberRegitered/index.tsx
|
|
911
913
|
import { jsx as jsx14, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
@@ -1047,7 +1049,7 @@ var GetProductsWithBenefits = async () => {
|
|
|
1047
1049
|
};
|
|
1048
1050
|
|
|
1049
1051
|
// src/PBM.tsx
|
|
1050
|
-
import { jsx as jsx16, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1052
|
+
import { Fragment as Fragment4, jsx as jsx16, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1051
1053
|
function PBM({
|
|
1052
1054
|
originalProductPrice,
|
|
1053
1055
|
clientID,
|
|
@@ -1058,11 +1060,11 @@ function PBM({
|
|
|
1058
1060
|
const formatedOriginalProductPrice = Number(
|
|
1059
1061
|
String(originalProductPrice).replace(",", ".")
|
|
1060
1062
|
);
|
|
1061
|
-
const [isReady, setIsReady] =
|
|
1062
|
-
const [loading, setLoading] =
|
|
1063
|
+
const [isReady, setIsReady] = useState3(false);
|
|
1064
|
+
const [loading, setLoading] = useState3(false);
|
|
1063
1065
|
const { state, setTargetProduct, targetProduct, setIsAuthenticatedShopper, setCustomLoginUrl } = usePBMStore();
|
|
1064
|
-
const [EanProductExist, setEanProductExist] =
|
|
1065
|
-
const [IsValid, setIsValid] =
|
|
1066
|
+
const [EanProductExist, setEanProductExist] = useState3(true);
|
|
1067
|
+
const [IsValid, setIsValid] = useState3(false);
|
|
1066
1068
|
const fetchValidateProduct = useCallback2(async () => {
|
|
1067
1069
|
try {
|
|
1068
1070
|
const response = await GetProductsWithBenefits();
|
|
@@ -1149,21 +1151,15 @@ function PBM({
|
|
|
1149
1151
|
if (!IsValid) {
|
|
1150
1152
|
return;
|
|
1151
1153
|
}
|
|
1152
|
-
const RenderStateComponent = () => {
|
|
1153
|
-
const StateMap = {
|
|
1154
|
-
"isEmpty": /* @__PURE__ */ jsx16(Form_default, { setLoading }),
|
|
1155
|
-
"isInvalid": /* @__PURE__ */ jsx16(SecurityNumberInvalid_default, {}),
|
|
1156
|
-
"isRegistered": /* @__PURE__ */ jsx16(SecurityNumberRegitered_default, {}),
|
|
1157
|
-
"isActivated": /* @__PURE__ */ jsx16(BenefitsTable_default, {}),
|
|
1158
|
-
"isPreview": /* @__PURE__ */ jsx16(BenefitsTable_default, {})
|
|
1159
|
-
};
|
|
1160
|
-
if (!loading) return StateMap[state];
|
|
1161
|
-
else return /* @__PURE__ */ jsx16(Loading_default, {});
|
|
1162
|
-
};
|
|
1163
1154
|
return /* @__PURE__ */ jsxs11("div", { id: "pbm-library-root", children: [
|
|
1164
1155
|
/* @__PURE__ */ jsxs11(Container_default, { variant: "main", children: [
|
|
1165
1156
|
/* @__PURE__ */ jsx16(Header_default, { originalProductPrice: formatedOriginalProductPrice || 0 }),
|
|
1166
|
-
/* @__PURE__ */ jsx16(Container_default, { variant: "simple", children: /* @__PURE__ */ jsx16(
|
|
1157
|
+
/* @__PURE__ */ jsx16(Container_default, { variant: "simple", children: loading ? /* @__PURE__ */ jsx16(Loading_default, {}) : /* @__PURE__ */ jsxs11(Fragment4, { children: [
|
|
1158
|
+
state === "isEmpty" && /* @__PURE__ */ jsx16(Form_default, { setLoading }),
|
|
1159
|
+
state === "isInvalid" && /* @__PURE__ */ jsx16(SecurityNumberInvalid_default, {}),
|
|
1160
|
+
state === "isRegistered" && /* @__PURE__ */ jsx16(SecurityNumberRegitered_default, {}),
|
|
1161
|
+
(state === "isActivated" || state === "isPreview") && /* @__PURE__ */ jsx16(BenefitsTable_default, {})
|
|
1162
|
+
] }) }),
|
|
1167
1163
|
/* @__PURE__ */ jsx16(Footer_default, {})
|
|
1168
1164
|
] }),
|
|
1169
1165
|
/* @__PURE__ */ jsx16(Modal_default, { ID: "ShopperIsNotAuthenticated" })
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/libs/zustand/usePBM.tsx","../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/services/benefits-with-document.ts","../src/components/UI/Button/index.tsx","../src/components/UI/Loading/index.tsx","../src/components/BenefitsTable/index.tsx","../src/components/UI/Title/index.tsx","../src/libs/zustand/useModal.tsx","../src/components/BenefitsTable/Item.tsx","../src/components/UI/Icons/index.tsx","../src/services/benefits-without-document.ts","../src/components/UI/Text/index.tsx","../src/components/UI/Link/index.tsx","../src/utils/getParams.ts","../src/components/SecurityNumberInvalid/index.tsx","../src/PBM.tsx","../src/components/SecurityNumberRegitered/index.tsx","../src/services/authorization.ts","../src/services/get-product-by-ean.ts","../src/components/Modal/index.tsx","../src/services/get-list-products.ts"],"sourcesContent":["import { createStore, StateCreator, StoreApi } from \"zustand\";\r\nimport { useStore } from \"zustand/react\";\r\nimport { IProduct, 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 setUrlAcceptTerms: (urlAcceptTerms: usePBMTypes[\"urlAcceptTerms\"]) => void;\r\n setUrlRegisterIndustry: (urlRegisterIndustry: usePBMTypes[\"urlRegisterIndustry\"]) => void;\r\n setIsAuthenticatedShopper: (isAuthenticatedShopper: usePBMTypes[\"isAuthenticatedShopper\"]) => void;\r\n setCustomLoginUrl: (customLoginUrl: usePBMTypes[\"customLoginUrl\"]) => void;\r\n setCardID: (cardID: usePBMTypes[\"cardID\"]) => void;\r\n}\r\n\r\n// Tipo apenas com os getters (estado readonly)\r\nexport type PBMStoreReadonly = Omit<PBMStore,\r\n | 'setSecurityNumber'\r\n | 'setState'\r\n | 'setAvailableDiscountSelected'\r\n | 'setTargetProduct'\r\n | 'setUrlAcceptTerms'\r\n | 'setUrlRegisterIndustry'\r\n>;\r\n\r\nconst initialPBMState: usePBMTypes = {\r\n securityNumber: \"\",\r\n cardID: \"\",\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 grossPrice: 0\r\n },\r\n targetProduct: null,\r\n campaign: \"pbm_campaign\",\r\n isAuthenticatedShopper: false,\r\n customLoginUrl: \"/login\"\r\n};\r\n\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 setUrlAcceptTerms: (urlAcceptTerms: usePBMTypes[\"urlAcceptTerms\"]) =>\r\n set({ urlAcceptTerms: urlAcceptTerms }),\r\n setUrlRegisterIndustry: (urlRegisterIndustry: usePBMTypes[\"urlRegisterIndustry\"]) =>\r\n set({ urlRegisterIndustry: urlRegisterIndustry }),\r\n setIsAuthenticatedShopper: (isAuthenticatedShopper: usePBMTypes[\"isAuthenticatedShopper\"]) =>\r\n set({ isAuthenticatedShopper: isAuthenticatedShopper }),\r\n setCustomLoginUrl: (customLoginUrl: usePBMTypes[\"customLoginUrl\"]) => set({ customLoginUrl: customLoginUrl }),\r\n setCardID: (cardID: usePBMTypes[\"cardID\"]) => set({ cardID: cardID })\r\n});\r\n\r\n// Store completa (uso interno na biblioteca)\r\nexport const pbmStore: StoreApi<PBMStore> = createStore<PBMStore>(createPBMStore);\r\n\r\n// Cria uma versão somente leitura da store para exposição pública\r\nexport const createReadonlyStore = (): StoreApi<PBMStoreReadonly> => {\r\n return {\r\n getState: () => {\r\n const fullState = pbmStore.getState();\r\n // Remove os setters do estado retornado\r\n const {\r\n setSecurityNumber,\r\n setState,\r\n setAvailableDiscountSelected,\r\n setTargetProduct,\r\n setUrlAcceptTerms,\r\n setUrlRegisterIndustry,\r\n setIsAuthenticatedShopper,\r\n setCustomLoginUrl,\r\n setCardID,\r\n ...readonlyState\r\n } = fullState;\r\n\r\n const { quantity, productId, skuId, discountMax, netPrice, stockBalance, listPrice, price, ...limitedTargetProductData } = fullState.targetProduct as IProduct;\r\n\r\n return { ...readonlyState, targetProduct: limitedTargetProductData } as PBMStoreReadonly;\r\n }\r\n } as StoreApi<PBMStoreReadonly>;\r\n};\r\n\r\n// React hook (usado dentro de componentes React)\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 { usePBMStore } from \"../../libs/zustand/usePBM\";\r\n\r\nfunction Header({ originalProductPrice }: { originalProductPrice: number }) {\r\n const { targetProduct } = usePBMStore();\r\n const Price = (targetProduct?.listPrice || originalProductPrice);\r\n const Discount = Price * ((targetProduct?.discountMax || 0) / 100)\r\n\r\n return (\r\n <>\r\n {(targetProduct?.informativeMessage) && <span className=\"absolute w-11/12 -top-6 bg-emerald-500 px-4 py-1 rounded-lg text-sm text-center font-medium text-white\">{targetProduct?.informativeMessage}</span>}\r\n <header\r\n className=\"flex items-center justify-between w-full p-0.5 rounded-xl bg-[#44c2c0]/30 mt-5\"\r\n id=\"header_pbm\"\r\n >\r\n <span\r\n className=\"py-1 px-6 rounded-xl bg-[#44c2c0] shrink-0 text-white text-xl font-bold flex items-center justify-start gap-2 relative\"\r\n data-testid=\"test_id_header_price\"\r\n id=\"header_price\"\r\n >\r\n <section className=\"flex items-center gap-2 justify-center-safe\">\r\n <span className=\"line-through text-sm font-light\">\r\n {Number(Price)?.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 {Number(Price - Discount)?.toLocaleString(\"pt-BR\", {\r\n currency: \"BRL\",\r\n currencyDisplay: \"symbol\",\r\n currencySign: \"standard\",\r\n style: \"currency\",\r\n })}\r\n </section>\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 Desconto de Laboratório\r\n </h1>\r\n </header>\r\n </>\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 \"border-3 border-[#44c2c0] flex flex-col items-center justify-center min-w-[var(--min-container)] max-w-[var(--max-container)] w-full h-auto rounded-xl p-4 bg-white gap-4 relative\":\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\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\n\r\nfunction Footer() {\r\n const { targetProduct, state } = usePBMStore();\r\n\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\": targetProduct?.industryLogo, \"justify-start\": !targetProduct?.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 {targetProduct?.industryLogo && (\r\n <img\r\n src={targetProduct.industryLogo}\r\n alt=\"parceiro\"\r\n className=\"w-1/5 min-w-20 h-auto aspect-auto rounded-xl\"\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.object({\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 coupon: z.string({ required_error: 'Cupom / ID do Cartão obrigatório.'}).optional()\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, useState } from \"react\";\r\n\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\nimport { BenefitsWithDocument } from \"../../services/benefits-with-document\";\r\nimport Button from \"../UI/Button\";\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, setUrlAcceptTerms, setUrlRegisterIndustry, setCardID } = usePBMStore();\r\n const [showCardIDField, setShowCardIDField] = useState<boolean>(false);\r\n\r\n const {\r\n handleSubmit,\r\n register,\r\n setValue,\r\n clearErrors,\r\n unregister,\r\n formState: { errors },\r\n } = useForm<validationSchemaType>({\r\n resolver: zodResolver(validationSchema),\r\n mode: 'onSubmit',\r\n defaultValues: {\r\n securityNumber: securityNumber || \"\",\r\n coupon: \"\",\r\n },\r\n });\r\n\r\n const onSubmitDefault = async (values: validationSchemaType) => {\r\n if (!showCardIDField) {\r\n setValue(\"coupon\", undefined, { shouldValidate: false });\r\n }\r\n\r\n if (showCardIDField && values.coupon != undefined) {\r\n setCardID(values.coupon);\r\n }\r\n\r\n setLoading(true);\r\n\r\n try {\r\n if (targetProduct === null) {\r\n console.error(\"PBMLOG: Product is not defined!\");\r\n return;\r\n }\r\n\r\n if (!targetProduct.productId) {\r\n console.error(\"PBMLOG: Product ID is not defined!\");\r\n return\r\n }\r\n\r\n if (!targetProduct.listPrice) {\r\n console.error(\"PBMLOG: List Price is not defined!\");\r\n return\r\n }\r\n\r\n const response = await BenefitsWithDocument({\r\n document: values.securityNumber.replace(/\\D/g, ''),\r\n products: [{\r\n productId: targetProduct.productId,\r\n ean: targetProduct.ean,\r\n requestedQuantity: 1,\r\n listPrice: targetProduct.listPrice,\r\n netPrice: targetProduct.netPrice ?? targetProduct.listPrice\r\n }]\r\n });\r\n\r\n if (response.success) {\r\n const status: Record<\"acceptance\" | \"industry registration\" | \"active\", \"isRegistered\" | \"isActivated\" | \"isInvalid\" | \"isEmpty\"> = {\r\n \"acceptance\": \"isInvalid\",\r\n \"industry registration\": \"isRegistered\",\r\n \"active\": \"isActivated\"\r\n }\r\n\r\n setSecurityNumber(values.securityNumber);\r\n setState(status[response.data.product[0].statusCustomer]);\r\n\r\n if (status[response.data.product[0].statusCustomer] === \"isInvalid\") {\r\n setUrlAcceptTerms(response.data.product[0].urlAcceptTerm || undefined)\r\n return;\r\n }\r\n\r\n if (status[response.data.product[0].statusCustomer] === \"isRegistered\") {\r\n setUrlRegisterIndustry(response.data.product[0].informativeLink);\r\n return;\r\n }\r\n }\r\n } catch (error) {\r\n console.error(\"PBMLOG: Error validating document -\", error);\r\n } finally {\r\n setLoading(false);\r\n };\r\n };\r\n\r\n return (\r\n <>\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 || (errors.coupon && showCardIDField), \"gap-2\": showCardIDField }\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-10 bg-gray-100 rounded-s-lg text-sm font-semibold focus:outline focus:outline-[#339c9b] focus:bg-white text-zinc-600 placeholder:text-zinc-600 px-4 placeholder:text-sm placeholder:font-semibold\",\r\n { \"outline outline-red-600\": errors.securityNumber, \"rounded-lg\": showCardIDField }\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 {showCardIDField && (\r\n <label\r\n htmlFor=\"coupon\"\r\n className=\"w-4/5 h-auto flex items-start flex-col justify-center relative py-2\"\r\n id=\"label_coupon_pbm\"\r\n >\r\n <input\r\n type=\"text\"\r\n className={classNames(\r\n \"w-full h-10 bg-gray-100 rounded-s-lg text-sm font-semibold focus:outline focus:outline-[#339c9b] focus:bg-white text-zinc-600 placeholder:text-zinc-600 px-4 placeholder:text-sm placeholder:font-semibold\",\r\n { \"outline outline-red-600\": errors.coupon, \"rounded-lg\": showCardIDField }\r\n )}\r\n placeholder=\"Cupom / ID do Cartão\"\r\n {...register(\"coupon\", {\r\n required: showCardIDField ? 'Cupom / ID do Cartão obrigatório.' : false,\r\n shouldUnregister: !showCardIDField,\r\n onChange: (e) => {\r\n setValue(\"coupon\", e.target.value, {\r\n shouldValidate: showCardIDField,\r\n });\r\n },\r\n })}\r\n id=\"input_coupon_pbm\"\r\n />\r\n {errors.coupon && (\r\n <span className=\"text-red-400 text-xs font-semibold absolute -bottom-3 left-2 text-nowrap\" id=\"coupon_form_error\">\r\n {errors.coupon.message}\r\n </span>\r\n )}\r\n </label>\r\n )}\r\n <button\r\n type=\"submit\"\r\n className={classNames(\r\n \"bg-emerald-500 w-1/5 h-10 rounded-e-lg flex items-center justify-center cursor-pointer\",\r\n { \"rounded-lg\": showCardIDField }\r\n )}\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 <section className=\"flex items-center-safe justify-between\">\r\n <Button\r\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\"\r\n onClick={() => {\r\n const newValue = !showCardIDField;\r\n setShowCardIDField(newValue);\r\n if (!newValue) {\r\n // Quando esconder o campo, desregistrar, limpar o valor e os erros\r\n unregister(\"coupon\");\r\n clearErrors(\"coupon\");\r\n }\r\n }}\r\n id=\"check_benefits_button\"\r\n >\r\n <span>{!showCardIDField ? \"Possui Cupom / ID do Cartão?\" : \"Não possui Cupom / ID do Cartão??\"}</span>\r\n <ArrowRight size={16} className={classNames({ \"rotate-0\": !showCardIDField, \"rotate-180\": showCardIDField })} />\r\n </Button>\r\n <Button\r\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\"\r\n onClick={() => setState(\"isPreview\")}\r\n id=\"check_benefits_button\"\r\n >\r\n <span>Consultar Benefícios</span>\r\n <ArrowRight size={16} />\r\n </Button>\r\n </section>\r\n </>\r\n );\r\n}\r\n\r\nexport default Form;\r\n","import Cookies from \"js-cookie\";\r\nimport { IRequestDefault } from \"../types/requests\";\r\n\r\nexport interface IProductWithDocumentData {\r\n id: number;\r\n ean: number;\r\n authorizedQuantity: number;\r\n discountValue: string;\r\n discountPercentual: number;\r\n authorizer: string;\r\n industryName: string;\r\n requestCoupon: string;\r\n requestHolderId: string;\r\n comboId: number;\r\n grossPrice: number;\r\n allowsAdhesion: string;\r\n discountMaxNewPatient: number;\r\n informativeMessage: string;\r\n priceWithBenefit: number;\r\n urlAcceptTerm: string;\r\n informativeLink: string;\r\n productId: number;\r\n statusCustomer: \"acceptance\" | \"industry registration\" | \"active\";\r\n}\r\n\r\ninterface IResponseBenefitsWithDocument extends IRequestDefault {\r\n data: { product: IProductWithDocumentData[] };\r\n}\r\n\r\ninterface ProductRequestBody {\r\n productId: number;\r\n ean: string;\r\n requestedQuantity: number;\r\n listPrice: number;\r\n netPrice: number;\r\n}\r\n\r\ninterface IBenefitsWithDocumentParams {\r\n document: string;\r\n products: ProductRequestBody[];\r\n}\r\n\r\nexport const BenefitsWithDocument = async ({ document, products }: IBenefitsWithDocumentParams): Promise<IResponseBenefitsWithDocument> => {\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}/products/benefitByDocument`, {\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({ consumer: { document }, products })\r\n })\r\n\r\n const dataResponse: IResponseBenefitsWithDocument = 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}","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-lg bg-emerald-500 hover:bg-emerald-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","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 { useEffect, useState } from \"react\";\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\nimport { CheckBenefistWithoutDocument } from \"../../services/benefits-without-document\";\r\nimport { IBenefitsItem } from \"../../types/globals\";\r\nimport { BenefitsWithDocument } from \"../../services/benefits-with-document\";\r\n\r\nfunction BenefitsTable() {\r\n const { securityNumber, setState, state, targetProduct, customLoginUrl, isAuthenticatedShopper } = usePBMStore();\r\n const [selectedDiscout, setSelectedDiscount] = useState<string | null>(null);\r\n const [loading, setLoading] = useState<boolean>(true);\r\n const [benefitsItems, setBenefitsItems] = useState<IBenefitsItem[] | undefined>();\r\n\r\n useEffect(() => {\r\n const fetchDicountsWithoutDocument = async () => {\r\n if (!targetProduct?.productId) {\r\n console.error(\"PBMLOG: Product ID is not defined on targetProduct\");\r\n return;\r\n }\r\n\r\n if (!targetProduct.ean) {\r\n console.error(\"PBMLOG: EAN is not defined on targetProduct\");\r\n return;\r\n }\r\n\r\n if (!targetProduct.listPrice) {\r\n console.error(\"PBMLOG: List Price is not defined on targetProduct\");\r\n return;\r\n }\r\n\r\n if (!targetProduct.price) {\r\n console.error(\"PBMLOG: Price is not defined on targetProduct\");\r\n return;\r\n }\r\n\r\n try {\r\n const data = {\r\n productId: Number(targetProduct.productId),\r\n ean: targetProduct.ean,\r\n requestedQuantity: 1,\r\n listPrice: targetProduct.listPrice,\r\n netPrice: targetProduct.price\r\n }\r\n\r\n const response = await CheckBenefistWithoutDocument({ products: [data] });\r\n\r\n if (response.success && response.data) {\r\n setBenefitsItems(response.data)\r\n } else {\r\n setBenefitsItems(undefined)\r\n }\r\n } catch (error) {\r\n setBenefitsItems(undefined)\r\n console.error(error);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n\r\n const fetchDiscountWithDocument = async () => {\r\n if (!securityNumber) {\r\n console.error(\"PBMLOG: Document is not defined\");\r\n return;\r\n }\r\n\r\n if (!targetProduct?.productId) {\r\n console.error(\"PBMLOG: Product ID is not defined on targetProduct\");\r\n return;\r\n }\r\n\r\n if (!targetProduct.ean) {\r\n console.error(\"PBMLOG: EAN is not defined on targetProduct\");\r\n return;\r\n }\r\n\r\n if (!targetProduct.listPrice) {\r\n console.error(\"PBMLOG: List Price is not defined on targetProduct\");\r\n return;\r\n }\r\n\r\n if (!targetProduct.price) {\r\n console.error(\"PBMLOG: Price is not defined on targetProduct\");\r\n return;\r\n }\r\n\r\n try {\r\n const data = {\r\n productId: Number(targetProduct.productId),\r\n ean: targetProduct.ean,\r\n requestedQuantity: 1,\r\n listPrice: targetProduct.listPrice,\r\n netPrice: targetProduct.price\r\n }\r\n\r\n const response = await BenefitsWithDocument({ document: securityNumber, products: [data] });\r\n\r\n if (response.success && response.data) {\r\n setBenefitsItems(response.data.product)\r\n } else {\r\n setBenefitsItems(undefined)\r\n }\r\n } catch (error) {\r\n setBenefitsItems(undefined)\r\n console.error(error);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n\r\n state === \"isActivated\" ?\r\n fetchDiscountWithDocument() :\r\n fetchDicountsWithoutDocument();\r\n }, [])\r\n\r\n if (loading) {\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 id=\"loading_label\"\r\n >\r\n Buscando beneficios disponíveis...\r\n </p>\r\n </main>\r\n )\r\n }\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-4.5\"\r\n id=\"form_benefits_table_pbm\"\r\n >\r\n {!benefitsItems && (\r\n <p className=\"text-sm font-semibold text-start text-zinc-900\" id=\"benefits_empty_pbm\">Não foi possível encontrar benefícios para esse produto.</p>\r\n )}\r\n\r\n {benefitsItems && benefitsItems.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 />\r\n );\r\n })}\r\n </form>\r\n\r\n {state === \"isPreview\" && (\r\n <Button\r\n onClick={() => setState(\"isEmpty\")}\r\n className=\"bg-transparent p-0 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 e o Login, 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 {state === \"isActivated\" && (\r\n <>\r\n {!isAuthenticatedShopper && <Button\r\n onClick={() => window.location.href = customLoginUrl || \"/login\"}\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=\"login\"\r\n >\r\n <span className=\"underline\">Por favor, faça o Login para aproveitar os benefícios!</span>\r\n </Button>}\r\n\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 )}\r\n </section>\r\n );\r\n}\r\n\r\nexport default BenefitsTable;\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 textAlign?: \"start\" | \"center\" | \"end\";\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, textAlign: props.textAlign }}\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 { create, StateCreator } from \"zustand\";\r\nimport { IModal } from \"../../types/globals\";\r\n\r\ninterface ModalDataType {\r\n modal: IModal;\r\n}\r\n\r\nexport interface useModal extends ModalDataType {\r\n setModal: (\r\n modal: useModal[\"modal\"]\r\n ) => void;\r\n}\r\n\r\nconst initialModalState: ModalDataType = {\r\n modal: {\r\n id: \"\",\r\n open: false\r\n },\r\n};\r\n\r\n// ✅ TIPANDO a função corretamente com StateCreator\r\nconst createModalStore: StateCreator<useModal> = (set) => ({\r\n ...initialModalState,\r\n\r\n setModal: (\r\n modal: useModal[\"modal\"]\r\n ) => set({ modal }),\r\n});\r\n\r\n// React hook (usado dentro de componentes React)\r\nexport const useModal = create<useModal>(createModalStore);\r\n","import { usePBMStore } from \"../../libs/zustand/usePBM\";\r\nimport { useModal } from \"../../libs/zustand/useModal\";\r\n\r\nimport { useCallback, useEffect, useState } from \"react\";\r\nimport { IBenefitsItem } from \"../../types/globals\";\r\nimport classNames from \"classnames\";\r\nimport { Icons } from \"../UI/Icons\";\r\n\r\ninterface ItemProps {\r\n data: IBenefitsItem;\r\n onChange: VoidFunction;\r\n checked: boolean;\r\n}\r\n\r\nfunction Item({ data, onChange, checked }: ItemProps) {\r\n const { setAvailableDiscountSelected, state, isAuthenticatedShopper } = usePBMStore();\r\n const { setModal } = useModal();\r\n\r\n const [openModalAlert, setOpenModalAlert] = useState<boolean>(false);\r\n\r\n const ID_INPUT = \"unity_quantity_\" + data.authorizedQuantity;\r\n\r\n const decimalDiscount = data.discountPercentual / 100;\r\n\r\n const unitDiscountValue = data.grossPrice * decimalDiscount;\r\n\r\n\r\n const discountValue = unitDiscountValue * data.authorizedQuantity;\r\n\r\n const totalPriceProductWithDiscountBenefit =\r\n (data.grossPrice * data.authorizedQuantity) - discountValue;\r\n\r\n const updateStorageData = useCallback(() => {\r\n if (checked) {\r\n // Arredonda para 2 casas decimais\r\n const roundToTwoDecimals = (value: number) => Math.round(value * 100) / 100;\r\n\r\n setAvailableDiscountSelected({\r\n discount: {\r\n total: roundToTwoDecimals(discountValue),\r\n unit: roundToTwoDecimals(unitDiscountValue),\r\n },\r\n quantity: data.authorizedQuantity,\r\n totalPrice: roundToTwoDecimals(totalPriceProductWithDiscountBenefit),\r\n grossPrice: data.grossPrice\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 const CheckUserIsAuthenticated = () => {\r\n if (isAuthenticatedShopper) return;\r\n\r\n setModal({\r\n id: \"ShopperIsNotAuthenticated\",\r\n open: true\r\n });\r\n }\r\n\r\n return (\r\n <label\r\n htmlFor={ID_INPUT}\r\n className={classNames(\r\n \"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 rounded-lg gap-1\",\r\n { \"cursor-not-allowed\": state === \"isPreview\", \"cursor-pointer\": state === \"isActivated\" }\r\n )}\r\n id={\"label_benefits_\" + ID_INPUT}\r\n onClick={CheckUserIsAuthenticated}\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={state === \"isPreview\"}\r\n />\r\n\r\n {!checked ? (\r\n <Icons.CheckOFF size={20} />\r\n ) : (\r\n <Icons.CheckON 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 gap-2 flex items-center-safe justify-end-safe\">\r\n <span className=\"text-white -top-4 py-0.5 font-semibold text-xs bg-[#32b316] px-2 w-auto text-nowrap rounded-2xl -right-3\">\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 * as React from \"react\"\r\n\r\nfunction CheckON({ size }: { size: number }) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n data-name=\"Camada 1\"\r\n viewBox=\"0 0 500 500\"\r\n width={size}\r\n height={size}\r\n >\r\n <path\r\n d=\"M421.44 78.56C375.64 32.77 314.76 7.55 250 7.55S124.36 32.77 78.56 78.56C32.77 124.36 7.55 185.24 7.55 250s25.22 125.64 71.01 171.44c45.8 45.79 106.68 71.01 171.44 71.01s125.64-25.22 171.44-71.01c45.79-45.8 71.01-106.68 71.01-171.44s-25.22-125.64-71.01-171.44zm-49.17 121.7L242.88 334.63c-8.98 9.29-23.57 10.17-33.59 2.02l-79.63-64.7c-10.69-8.67-12.33-24.38-3.66-35.07 8.67-10.69 24.38-12.33 35.07-3.65l61.9 50.39L336.5 165.74c4.4-4.75 10.48-7.59 16.95-7.93a24.88 24.88 0 0118.83 7.26c9.72 9.72 9.71 25.48 0 35.19z\"\r\n fill=\"#229b00\"\r\n />\r\n </svg>\r\n )\r\n}\r\nfunction CheckOFF({ size }: { size: number }) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n data-name=\"Camada 1\"\r\n viewBox=\"0 0 500 500\"\r\n width={size}\r\n height={size}\r\n >\r\n <circle cx={250} cy={250} r={237.45} fill=\"#fff\" />\r\n <path\r\n d=\"M250 492.45c-64.76 0-125.64-25.22-171.44-71.01C32.77 375.64 7.55 314.76 7.55 250S32.77 124.36 78.56 78.56C124.36 32.77 185.24 7.55 250 7.55s125.64 25.22 171.44 71.01c45.79 45.79 71.01 106.68 71.01 171.44s-25.22 125.64-71.01 171.44c-45.79 45.79-106.68 71.01-171.44 71.01zm0-474.9C121.83 17.55 17.55 121.83 17.55 250S121.83 482.45 250 482.45 482.45 378.17 482.45 250 378.17 17.55 250 17.55z\"\r\n fill=\"#d8d8d8\"\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nexport const Icons = {\r\n CheckON,\r\n CheckOFF\r\n}","import Cookies from \"js-cookie\";\r\nimport { IRequestDefault } from \"../types/requests\";\r\n\r\ninterface ICheckBenefitsWithoutDocumentData {\r\n id: number;\r\n ean: number;\r\n authorizedQuantity: number;\r\n discountValue: string;\r\n discountPercentual: number;\r\n authorizer: string;\r\n industryName: string;\r\n requestCoupon: string;\r\n requestHolderId: string;\r\n comboId: number;\r\n grossPrice: number;\r\n allowsAdhesion: string;\r\n discountMaxNewPatient: number;\r\n informativeMessage: string;\r\n priceWithBenefit: number;\r\n}\r\n\r\ninterface ICheckBenefitsWithoutDocumentResponse extends IRequestDefault {\r\n data: ICheckBenefitsWithoutDocumentData[];\r\n}\r\n\r\ninterface IProductsCheckBenefits {\r\n productId: number;\r\n ean: string;\r\n requestedQuantity: number;\r\n listPrice: number;\r\n}\r\n\r\ninterface ICheckBenefistWithoutDocumentParams {\r\n products: IProductsCheckBenefits[];\r\n}\r\n\r\nexport const CheckBenefistWithoutDocument = async ({ products }: ICheckBenefistWithoutDocumentParams): Promise<ICheckBenefitsWithoutDocumentResponse> => {\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}/products/genericBenefit`, {\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({ products })\r\n })\r\n\r\n const dataResponse: ICheckBenefitsWithoutDocumentResponse = await response.json();\r\n\r\n if (!dataResponse.success) {\r\n throw new Error(dataResponse.message || 'Failed to fetch benefits without document');\r\n }\r\n\r\n return dataResponse;\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 textAlign?: \"start\" | \"center\" | \"end\";\r\n}\r\n\r\nfunction Text(props: TextProps) {\r\n return (\r\n <p\r\n className={classNames(\r\n \"font-normal text-sm text-zinc-900\",\r\n props.textAlign && `text-${props.textAlign}`,\r\n props.className\r\n )}\r\n style={{ color: props.textColor, fontSize: props.textSize, textAlign: props.textAlign }}\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 { ILinkHref } from \"../../../types/globals\";\r\nimport classNames from \"classnames\";\r\nimport React from \"react\";\r\nimport { getParams } from \"../../../utils/getParams\";\r\nimport { usePBMStore } from \"../../../libs/zustand/usePBM\";\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 const { setState } = usePBMStore();\r\n\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-lg bg-emerald-500 hover:bg-emerald-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 onClick={() => setState(\"isEmpty\")}\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\n// import Button from \"../UI/Button\";\r\n// import Iframe from \"../Iframe\";\r\n\r\n// import { useState } from \"react\";\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\nimport Link from \"../UI/Link\";\r\n\r\nfunction SecurityNumberInvalid({ textColor }: { textColor?: string }) {\r\n // const [openModal, setOpenModal] = useState<boolean>(false);\r\n const { urlAcceptTerms } = usePBMStore();\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 Conclua seu cadastro para habilitar o benefício. <br />\r\n Ao clicar em “Aceitar os termos”, você irá para uma página externa. Aceite os termos e volte para continuar.\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 <Link\r\n href={urlAcceptTerms || \"\"}\r\n >\r\n Aceitar os termos\r\n </Link>\r\n\r\n {/* <Iframe\r\n url={urlAcceptTerms || \"\"}\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 { ReactElement, useCallback, useEffect, useState } from \"react\";\nimport SecurityNumberRegitered from \"./components/SecurityNumberRegitered\";\nimport { GetAuthorization } from \"./services/authorization\";\nimport { ArrowRight, RefreshCw } from \"lucide-react\";\nimport { usePBMStore } from \"./libs/zustand/usePBM\";\nimport { GetProductByEAN } from \"./services/get-product-by-ean\";\nimport Title from \"./components/UI/Title\";\nimport Text from \"./components/UI/Text\";\nimport Skeleton from '@mui/material/Skeleton';\nimport Modal from \"./components/Modal\";\nimport { StateComponentType } from \"./types/globals\";\nimport { GetProductsWithBenefits } from \"./services/get-list-products\";\n\nexport interface PBMProps {\n originalProductPrice: number | string;\n clientID: string;\n eanProduct: string;\n isAuthenticatedShopper: boolean;\n customLoginUrl?: string;\n}\n\nfunction PBM({\n originalProductPrice,\n clientID,\n eanProduct,\n isAuthenticatedShopper,\n customLoginUrl,\n}: PBMProps) {\n const formatedOriginalProductPrice = Number(\n String(originalProductPrice).replace(',', '.')\n );\n\n const [isReady, setIsReady] = useState<boolean>(false);\n const [loading, setLoading] = useState<boolean>(false);\n const { state, setTargetProduct, targetProduct, setIsAuthenticatedShopper, setCustomLoginUrl } = usePBMStore();\n const [EanProductExist, setEanProductExist] = useState<boolean>(true);\n const [IsValid, setIsValid] = useState<boolean>(false);\n\n const fetchValidateProduct = useCallback(async () => {\n try {\n const response = await GetProductsWithBenefits();\n\n if (response.success) {\n const data = response.data;\n\n const hasProductInList = data.some(product => product.ean == eanProduct);\n setIsValid(hasProductInList);\n }\n } catch (error) {\n console.error(error);\n }\n}, [eanProduct, IsValid])\n\n const fetchProductByEan = async () => {\n try {\n if(!IsValid) return;\n\n if (!eanProduct) {\n console.error(\"PBMLOG: Ean is not defined.\")\n setEanProductExist(false);\n return\n }\n\n const response = await GetProductByEAN({ PRODUCT_EAN: eanProduct });\n\n if (response.success && response.data) {\n setEanProductExist(true);\n\n const { pbm, sku, ...targetProductNewData } = response.data;\n\n setTargetProduct({\n ...targetProduct,\n ...targetProductNewData,\n productId: Number(targetProductNewData.productId),\n informativeMessage: pbm.informativeMessage ?? \"\",\n discountMax: pbm.discountMax ?? 0,\n industryLogo: pbm.imageLink ?? undefined,\n ean: eanProduct\n })\n\n setIsAuthenticatedShopper(isAuthenticatedShopper);\n setCustomLoginUrl(customLoginUrl)\n }\n } catch (error) {\n console.error(error);\n } finally {\n setIsReady(true)\n }\n }\n\n const handleAuthorizationRequest = useCallback(async () => {\n try {\n const response = await GetAuthorization({ clientID: clientID });\n\n if (response.success) {\n fetchValidateProduct();\n fetchProductByEan();\n } else {\n console.error(\"PBMLOG: Authorization failed!\");\n }\n } catch (error) {\n console.error(\"Error fetching authorization:\", error);\n }\n }, [clientID, IsValid]);\n\n useEffect(() => {\n handleAuthorizationRequest();\n }, [handleAuthorizationRequest]);\n\n if (!isReady) {\n return (\n <Skeleton variant=\"rectangular\" style={{ borderRadius: \"12px\" }} width={460} height={358} />\n )\n }\n\n if (!EanProductExist) {\n return (\n <div id=\"pbm-library-root\">\n <Container variant=\"main\" >\n <Title>Erro ao Aplicar o Benefício</Title>\n <Text textAlign=\"center\">O produto não foi encontrado no sistema. <br /> Por favor, tente novamente mais tarde ou contate o suporte.</Text>\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={() => window.location.reload()}\n id=\"check_benefits_button\"\n >\n <span>Tentar novamente</span>\n <RefreshCw size={16} />\n </Button>\n </Container>\n </div>\n )\n }\n\n if (!IsValid) {\n return;\n }\n\n const RenderStateComponent = () => {\n const StateMap: Record<StateComponentType, ReactElement> = {\n \"isEmpty\": <Form setLoading={setLoading} />,\n \"isInvalid\": <SecurityNumberInvalid />,\n \"isRegistered\": <SecurityNumberRegitered />,\n \"isActivated\": <BenefitsTable />,\n \"isPreview\": <BenefitsTable />\n }\n\n if (!loading) return StateMap[state];\n else return <Loading />\n }\n\n return (\n <div id=\"pbm-library-root\">\n <Container variant=\"main\">\n <Header originalProductPrice={formatedOriginalProductPrice || 0} />\n\n <Container variant=\"simple\">\n <RenderStateComponent />\n </Container>\n\n <Footer />\n </Container>\n\n <Modal ID=\"ShopperIsNotAuthenticated\" />\n </div>\n );\n}\n\nexport default PBM;\n","import Title from \"../UI/Title\";\r\nimport Text from \"../UI/Text\";\r\nimport Link from \"../UI/Link\";\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\n\r\nfunction SecurityNumberRegitered({ textColor }: { textColor?: string }) {\r\n const { urlRegisterIndustry } = usePBMStore();\r\n\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 Ops, seu CPF ainda não está habilitado para este produto.\r\n </Title>\r\n <Text className=\"w-full\" textColor={textColor}>\r\n Para ativar o benefício, clique em “Ativar CPF” e conclua a etapa na página externa. Depois, é só voltar para continuar — vamos aguardar você aqui.\r\n </Text>\r\n <Link\r\n href={urlRegisterIndustry || \"\"}\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\n\r\nexport const GetAuthorization = async ({ clientID }: { clientID: string }) => {\r\n const response = await fetch(\r\n 'https://pbm-auth-serverless.vercel.app/api/auth',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n credentials: 'include',\r\n body: JSON.stringify({\r\n clientId: clientID\r\n })\r\n }\r\n );\r\n\r\n const data = await response.json();\r\n\r\n if (!data.success) {\r\n throw new Error('Authorization failed');\r\n }\r\n\r\n Cookies.set('pbm-token', data.tokens.token, {\r\n secure: true,\r\n sameSite: 'Strict'\r\n });\r\n\r\n Cookies.set('pbm-token-refresh', data.tokens.refreshToken, {\r\n secure: true,\r\n sameSite: 'Strict'\r\n });\r\n\r\n return data;\r\n};","import Cookies from \"js-cookie\";\r\nimport { IRequestDefault } from \"../types/requests\";\r\n\r\ninterface IPBM {\r\n source: string;\r\n programName: string;\r\n industryName: string;\r\n discountMax: number;\r\n discountMin: number;\r\n informativeMessage: string;\r\n discountMaxNewPatient: number;\r\n discountMinNewPatient: number;\r\n discountFirstBox: number;\r\n suggestedPriceValue: string;\r\n imageLink: string | null;\r\n eanCombos: number | null;\r\n qtyDiscountMax: number;\r\n requestCoupon: string | null;\r\n}\r\n\r\nexport interface IDataRequestListProducts {\r\n productId: string;\r\n productName: string;\r\n sku: string;\r\n skuId: string;\r\n ean: string;\r\n price: number;\r\n listPrice: number;\r\n stockBalance: number;\r\n availabilityText: string;\r\n brandName: string;\r\n categoryName: string;\r\n pbm: IPBM;\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}/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 Title from '../UI/Title'\r\nimport Text from '../UI/Text'\r\nimport Button from '../UI/Button'\r\nimport Link from '../UI/Link'\r\nimport { usePBMStore } from '../../libs/zustand/usePBM'\r\nimport { useModal } from '../../libs/zustand/useModal'\r\nimport classNames from 'classnames'\r\n\r\nconst Modal = ({ ID }: { ID: string }) => {\r\n const { customLoginUrl } = usePBMStore();\r\n const { modal, setModal } = useModal();\r\n\r\n return (\r\n <main className={classNames(\r\n \"fixed inset-0 flex items-center justify-center z-50 flex-col transition-all shadow bg-black/40\",\r\n {\r\n \"opacity-100 pointer-events-auto\": modal.id === ID && modal.open,\r\n \"opacity-0 pointer-events-none\": modal.id != ID || !modal.open,\r\n }\r\n )}>\r\n <div className='absolute inset-0' onClick={() => setModal({ id: \"\", open: false })}></div>\r\n <section className='z-10 bg-white gap-2 flex-col items-center-safe justify-center-safe p-8 rounded-xl'>\r\n <Title textColor='tomato' textSize='18px' textAlign='center' className='mb-2'>Opa! Parece que você não está Logado</Title>\r\n <Text className='mb-2' textAlign='center'>Para aproveitar os benefícios é necessário realizar o <strong>Login</strong> ou <strong>Cadastro</strong> no site!</Text>\r\n <section className='flex items-center-safe justify-center-safe gap-4'>\r\n <Button className='bg-gray-600 hover:bg-gray-500' onClick={() => setModal({ id: \"\", open: false })}>Seguir sem Benefícios</Button>\r\n <Link href={customLoginUrl || \"/login\"}>Aproveitar Benefícios</Link>\r\n </section>\r\n </section>\r\n </main>\r\n )\r\n}\r\n\r\nexport default Modal;","import Cookies from \"js-cookie\";\r\nimport { IRequestDefault } from \"../types/requests\";\r\nimport { IProductInList } from \"../types/globals\";\r\n\r\ninterface IResponseGetProducts extends IRequestDefault {\r\n data: IProductInList[]\r\n}\r\n\r\nexport const GetProductsWithBenefits = async (): 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}/products/list`, {\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}"],"mappings":"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","names":["jsx","classNames","jsx","jsxs","classNames","classNames","classNames","jsx","Fragment","jsx","jsxs","classNames","jsx","jsxs","useEffect","useState","classNames","jsx","useState","classNames","jsx","jsxs","jsx","jsxs","useState","classNames","Cookies","Fragment","jsx","jsxs","useState","useEffect","classNames","jsx","classNames","jsx","classNames","jsx","jsxs","useCallback","useEffect","useState","jsx","jsxs","Cookies","Cookies","classNames","jsx","jsxs","Cookies","jsx","jsxs","useState","useCallback","useEffect"]}
|
|
1
|
+
{"version":3,"sources":["../src/libs/zustand/usePBM.tsx","../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/services/benefits-with-document.ts","../src/components/UI/Button/index.tsx","../src/components/UI/Loading/index.tsx","../src/components/BenefitsTable/index.tsx","../src/components/UI/Title/index.tsx","../src/libs/zustand/useModal.tsx","../src/components/BenefitsTable/Item.tsx","../src/components/UI/Icons/index.tsx","../src/services/benefits-without-document.ts","../src/components/UI/Text/index.tsx","../src/components/UI/Link/index.tsx","../src/utils/getParams.ts","../src/components/SecurityNumberInvalid/index.tsx","../src/PBM.tsx","../src/components/SecurityNumberRegitered/index.tsx","../src/services/authorization.ts","../src/services/get-product-by-ean.ts","../src/components/Modal/index.tsx","../src/services/get-list-products.ts"],"sourcesContent":["import { createStore, StateCreator, StoreApi } from \"zustand\";\r\nimport { useStore } from \"zustand/react\";\r\nimport { IProduct, 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 setUrlAcceptTerms: (urlAcceptTerms: usePBMTypes[\"urlAcceptTerms\"]) => void;\r\n setUrlRegisterIndustry: (urlRegisterIndustry: usePBMTypes[\"urlRegisterIndustry\"]) => void;\r\n setIsAuthenticatedShopper: (isAuthenticatedShopper: usePBMTypes[\"isAuthenticatedShopper\"]) => void;\r\n setCustomLoginUrl: (customLoginUrl: usePBMTypes[\"customLoginUrl\"]) => void;\r\n setCardID: (cardID: usePBMTypes[\"cardID\"]) => void;\r\n}\r\n\r\n// Tipo apenas com os getters (estado readonly)\r\nexport type PBMStoreReadonly = Omit<PBMStore,\r\n | 'setSecurityNumber'\r\n | 'setState'\r\n | 'setAvailableDiscountSelected'\r\n | 'setTargetProduct'\r\n | 'setUrlAcceptTerms'\r\n | 'setUrlRegisterIndustry'\r\n>;\r\n\r\nconst initialPBMState: usePBMTypes = {\r\n securityNumber: \"\",\r\n cardID: \"\",\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 grossPrice: 0\r\n },\r\n targetProduct: null,\r\n campaign: \"pbm_campaign\",\r\n isAuthenticatedShopper: false,\r\n customLoginUrl: \"/login\"\r\n};\r\n\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 setUrlAcceptTerms: (urlAcceptTerms: usePBMTypes[\"urlAcceptTerms\"]) =>\r\n set({ urlAcceptTerms: urlAcceptTerms }),\r\n setUrlRegisterIndustry: (urlRegisterIndustry: usePBMTypes[\"urlRegisterIndustry\"]) =>\r\n set({ urlRegisterIndustry: urlRegisterIndustry }),\r\n setIsAuthenticatedShopper: (isAuthenticatedShopper: usePBMTypes[\"isAuthenticatedShopper\"]) =>\r\n set({ isAuthenticatedShopper: isAuthenticatedShopper }),\r\n setCustomLoginUrl: (customLoginUrl: usePBMTypes[\"customLoginUrl\"]) => set({ customLoginUrl: customLoginUrl }),\r\n setCardID: (cardID: usePBMTypes[\"cardID\"]) => set({ cardID: cardID })\r\n});\r\n\r\n// Store completa (uso interno na biblioteca)\r\nexport const pbmStore: StoreApi<PBMStore> = createStore<PBMStore>(createPBMStore);\r\n\r\n// Cria uma versão somente leitura da store para exposição pública\r\nexport const createReadonlyStore = (): StoreApi<PBMStoreReadonly> => {\r\n return {\r\n getState: () => {\r\n const fullState = pbmStore.getState();\r\n // Remove os setters do estado retornado\r\n const {\r\n setSecurityNumber,\r\n setState,\r\n setAvailableDiscountSelected,\r\n setTargetProduct,\r\n setUrlAcceptTerms,\r\n setUrlRegisterIndustry,\r\n setIsAuthenticatedShopper,\r\n setCustomLoginUrl,\r\n setCardID,\r\n ...readonlyState\r\n } = fullState;\r\n\r\n const { quantity, productId, skuId, discountMax, netPrice, stockBalance, listPrice, price, ...limitedTargetProductData } = fullState.targetProduct as IProduct;\r\n\r\n return { ...readonlyState, targetProduct: limitedTargetProductData } as PBMStoreReadonly;\r\n }\r\n } as StoreApi<PBMStoreReadonly>;\r\n};\r\n\r\n// React hook (usado dentro de componentes React)\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 { usePBMStore } from \"../../libs/zustand/usePBM\";\r\n\r\nfunction Header({ originalProductPrice }: { originalProductPrice: number }) {\r\n const { targetProduct } = usePBMStore();\r\n const Price = (targetProduct?.listPrice || originalProductPrice);\r\n const Discount = Price * ((targetProduct?.discountMax || 0) / 100)\r\n\r\n return (\r\n <>\r\n {(targetProduct?.informativeMessage) && <span className=\"absolute w-11/12 -top-6 bg-emerald-500 px-4 py-1 rounded-lg text-sm text-center font-medium text-white\">{targetProduct?.informativeMessage}</span>}\r\n <header\r\n className=\"flex items-center justify-between w-full p-0.5 rounded-xl bg-[#44c2c0]/30 mt-5\"\r\n id=\"header_pbm\"\r\n >\r\n <span\r\n className=\"py-1 px-6 rounded-xl bg-[#44c2c0] shrink-0 text-white text-xl font-bold flex items-center justify-start gap-2 relative\"\r\n data-testid=\"test_id_header_price\"\r\n id=\"header_price\"\r\n >\r\n <section className=\"flex items-center gap-2 justify-center-safe\">\r\n <span className=\"line-through text-sm font-light\">\r\n {Number(Price)?.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 {Number(Price - Discount)?.toLocaleString(\"pt-BR\", {\r\n currency: \"BRL\",\r\n currencyDisplay: \"symbol\",\r\n currencySign: \"standard\",\r\n style: \"currency\",\r\n })}\r\n </section>\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 Desconto de Laboratório\r\n </h1>\r\n </header>\r\n </>\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 \"border-3 border-[#44c2c0] flex flex-col items-center justify-center min-w-[var(--min-container)] max-w-[var(--max-container)] w-full h-auto rounded-xl p-4 bg-white gap-4 relative\":\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\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\n\r\nfunction Footer() {\r\n const { targetProduct, state } = usePBMStore();\r\n\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\": targetProduct?.industryLogo, \"justify-start\": !targetProduct?.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 {targetProduct?.industryLogo && (\r\n <img\r\n src={targetProduct.industryLogo}\r\n alt=\"parceiro\"\r\n className=\"w-1/5 min-w-20 h-auto aspect-auto rounded-xl\"\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.object({\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 coupon: z.string({ required_error: 'Cupom / ID do Cartão obrigatório.'}).optional()\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, useState } from \"react\";\r\n\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\nimport { BenefitsWithDocument } from \"../../services/benefits-with-document\";\r\nimport Button from \"../UI/Button\";\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, setUrlAcceptTerms, setUrlRegisterIndustry, setCardID } = usePBMStore();\r\n const [showCardIDField, setShowCardIDField] = useState<boolean>(false);\r\n\r\n const {\r\n handleSubmit,\r\n register,\r\n setValue,\r\n clearErrors,\r\n unregister,\r\n formState: { errors },\r\n } = useForm<validationSchemaType>({\r\n resolver: zodResolver(validationSchema),\r\n mode: 'onSubmit',\r\n defaultValues: {\r\n securityNumber: securityNumber || \"\",\r\n coupon: \"\",\r\n },\r\n });\r\n\r\n const onSubmitDefault = async (values: validationSchemaType) => {\r\n if (!showCardIDField) {\r\n setValue(\"coupon\", undefined, { shouldValidate: false });\r\n }\r\n\r\n if (showCardIDField && values.coupon != undefined) {\r\n setCardID(values.coupon);\r\n }\r\n\r\n setLoading(true);\r\n\r\n try {\r\n if (targetProduct === null) {\r\n console.error(\"PBMLOG: Product is not defined!\");\r\n return;\r\n }\r\n\r\n if (!targetProduct.productId) {\r\n console.error(\"PBMLOG: Product ID is not defined!\");\r\n return\r\n }\r\n\r\n if (!targetProduct.listPrice) {\r\n console.error(\"PBMLOG: List Price is not defined!\");\r\n return\r\n }\r\n\r\n const response = await BenefitsWithDocument({\r\n document: values.securityNumber.replace(/\\D/g, ''),\r\n products: [{\r\n productId: targetProduct.productId,\r\n ean: targetProduct.ean,\r\n requestedQuantity: 1,\r\n listPrice: targetProduct.listPrice,\r\n netPrice: targetProduct.netPrice ?? targetProduct.listPrice\r\n }]\r\n });\r\n\r\n if (response.success) {\r\n const status: Record<\"acceptance\" | \"industry registration\" | \"active\", \"isRegistered\" | \"isActivated\" | \"isInvalid\" | \"isEmpty\"> = {\r\n \"acceptance\": \"isInvalid\",\r\n \"industry registration\": \"isRegistered\",\r\n \"active\": \"isActivated\"\r\n }\r\n\r\n setSecurityNumber(values.securityNumber);\r\n setState(status[response.data.product[0].statusCustomer]);\r\n\r\n if (status[response.data.product[0].statusCustomer] === \"isInvalid\") {\r\n setUrlAcceptTerms(response.data.product[0].urlAcceptTerm || undefined)\r\n return;\r\n }\r\n\r\n if (status[response.data.product[0].statusCustomer] === \"isRegistered\") {\r\n setUrlRegisterIndustry(response.data.product[0].informativeLink);\r\n return;\r\n }\r\n }\r\n } catch (error) {\r\n console.error(\"PBMLOG: Error validating document -\", error);\r\n } finally {\r\n setLoading(false);\r\n };\r\n };\r\n\r\n return (\r\n <>\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 || (errors.coupon && showCardIDField), \"gap-2\": showCardIDField }\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-10 bg-gray-100 rounded-s-lg text-sm font-semibold focus:outline focus:outline-[#339c9b] focus:bg-white text-zinc-600 placeholder:text-zinc-600 px-4 placeholder:text-sm placeholder:font-semibold\",\r\n { \"outline outline-red-600\": errors.securityNumber, \"rounded-lg\": showCardIDField }\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 {showCardIDField && (\r\n <label\r\n htmlFor=\"coupon\"\r\n className=\"w-4/5 h-auto flex items-start flex-col justify-center relative py-2\"\r\n id=\"label_coupon_pbm\"\r\n >\r\n <input\r\n type=\"text\"\r\n className={classNames(\r\n \"w-full h-10 bg-gray-100 rounded-s-lg text-sm font-semibold focus:outline focus:outline-[#339c9b] focus:bg-white text-zinc-600 placeholder:text-zinc-600 px-4 placeholder:text-sm placeholder:font-semibold\",\r\n { \"outline outline-red-600\": errors.coupon, \"rounded-lg\": showCardIDField }\r\n )}\r\n placeholder=\"Cupom / ID do Cartão\"\r\n {...register(\"coupon\", {\r\n required: showCardIDField ? 'Cupom / ID do Cartão obrigatório.' : false,\r\n shouldUnregister: !showCardIDField,\r\n onChange: (e) => {\r\n setValue(\"coupon\", e.target.value, {\r\n shouldValidate: showCardIDField,\r\n });\r\n },\r\n })}\r\n id=\"input_coupon_pbm\"\r\n />\r\n {errors.coupon && (\r\n <span className=\"text-red-400 text-xs font-semibold absolute -bottom-3 left-2 text-nowrap\" id=\"coupon_form_error\">\r\n {errors.coupon.message}\r\n </span>\r\n )}\r\n </label>\r\n )}\r\n <button\r\n type=\"submit\"\r\n className={classNames(\r\n \"bg-emerald-500 w-1/5 h-10 rounded-e-lg flex items-center justify-center cursor-pointer\",\r\n { \"rounded-lg\": showCardIDField }\r\n )}\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 <section className=\"flex items-center-safe justify-between\">\r\n <Button\r\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\"\r\n onClick={() => {\r\n const newValue = !showCardIDField;\r\n setShowCardIDField(newValue);\r\n if (!newValue) {\r\n // Quando esconder o campo, desregistrar, limpar o valor e os erros\r\n unregister(\"coupon\");\r\n clearErrors(\"coupon\");\r\n }\r\n }}\r\n id=\"check_benefits_button\"\r\n >\r\n <span>{!showCardIDField ? \"Possui Cupom / ID do Cartão?\" : \"Não possui Cupom / ID do Cartão??\"}</span>\r\n <ArrowRight size={16} className={classNames({ \"rotate-0\": !showCardIDField, \"rotate-180\": showCardIDField })} />\r\n </Button>\r\n <Button\r\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\"\r\n onClick={() => setState(\"isPreview\")}\r\n id=\"check_benefits_button\"\r\n >\r\n <span>Consultar Benefícios</span>\r\n <ArrowRight size={16} />\r\n </Button>\r\n </section>\r\n </>\r\n );\r\n}\r\n\r\nexport default Form;\r\n","import Cookies from \"js-cookie\";\r\nimport { IRequestDefault } from \"../types/requests\";\r\n\r\nexport interface IProductWithDocumentData {\r\n id: number;\r\n ean: number;\r\n authorizedQuantity: number;\r\n discountValue: string;\r\n discountPercentual: number;\r\n authorizer: string;\r\n industryName: string;\r\n requestCoupon: string;\r\n requestHolderId: string;\r\n comboId: number;\r\n grossPrice: number;\r\n allowsAdhesion: string;\r\n discountMaxNewPatient: number;\r\n informativeMessage: string;\r\n priceWithBenefit: number;\r\n urlAcceptTerm: string;\r\n informativeLink: string;\r\n productId: number;\r\n statusCustomer: \"acceptance\" | \"industry registration\" | \"active\";\r\n}\r\n\r\ninterface IResponseBenefitsWithDocument extends IRequestDefault {\r\n data: { product: IProductWithDocumentData[] };\r\n}\r\n\r\ninterface ProductRequestBody {\r\n productId: number;\r\n ean: string;\r\n requestedQuantity: number;\r\n listPrice: number;\r\n netPrice: number;\r\n}\r\n\r\ninterface IBenefitsWithDocumentParams {\r\n document: string;\r\n products: ProductRequestBody[];\r\n}\r\n\r\nexport const BenefitsWithDocument = async ({ document, products }: IBenefitsWithDocumentParams): Promise<IResponseBenefitsWithDocument> => {\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}/products/benefitByDocument`, {\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({ consumer: { document }, products })\r\n })\r\n\r\n const dataResponse: IResponseBenefitsWithDocument = 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}","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-lg bg-emerald-500 hover:bg-emerald-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","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 { useEffect, useState } from \"react\";\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\nimport { CheckBenefistWithoutDocument } from \"../../services/benefits-without-document\";\r\nimport { IBenefitsItem } from \"../../types/globals\";\r\nimport { BenefitsWithDocument } from \"../../services/benefits-with-document\";\r\n\r\nfunction BenefitsTable() {\r\n const { securityNumber, setState, state, targetProduct, customLoginUrl, isAuthenticatedShopper } = usePBMStore();\r\n const [selectedDiscout, setSelectedDiscount] = useState<string | null>(null);\r\n const [loading, setLoading] = useState<boolean>(true);\r\n const [benefitsItems, setBenefitsItems] = useState<IBenefitsItem[] | undefined>();\r\n\r\n useEffect(() => {\r\n const fetchDicountsWithoutDocument = async () => {\r\n if (!targetProduct?.productId) {\r\n console.error(\"PBMLOG: Product ID is not defined on targetProduct\");\r\n return;\r\n }\r\n\r\n if (!targetProduct.ean) {\r\n console.error(\"PBMLOG: EAN is not defined on targetProduct\");\r\n return;\r\n }\r\n\r\n if (!targetProduct.listPrice) {\r\n console.error(\"PBMLOG: List Price is not defined on targetProduct\");\r\n return;\r\n }\r\n\r\n if (!targetProduct.price) {\r\n console.error(\"PBMLOG: Price is not defined on targetProduct\");\r\n return;\r\n }\r\n\r\n try {\r\n const data = {\r\n productId: Number(targetProduct.productId),\r\n ean: targetProduct.ean,\r\n requestedQuantity: 1,\r\n listPrice: targetProduct.listPrice,\r\n netPrice: targetProduct.price\r\n }\r\n\r\n const response = await CheckBenefistWithoutDocument({ products: [data] });\r\n\r\n if (response.success && response.data) {\r\n setBenefitsItems(response.data)\r\n } else {\r\n setBenefitsItems(undefined)\r\n }\r\n } catch (error) {\r\n setBenefitsItems(undefined)\r\n console.error(error);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n\r\n const fetchDiscountWithDocument = async () => {\r\n if (!securityNumber) {\r\n console.error(\"PBMLOG: Document is not defined\");\r\n return;\r\n }\r\n\r\n if (!targetProduct?.productId) {\r\n console.error(\"PBMLOG: Product ID is not defined on targetProduct\");\r\n return;\r\n }\r\n\r\n if (!targetProduct.ean) {\r\n console.error(\"PBMLOG: EAN is not defined on targetProduct\");\r\n return;\r\n }\r\n\r\n if (!targetProduct.listPrice) {\r\n console.error(\"PBMLOG: List Price is not defined on targetProduct\");\r\n return;\r\n }\r\n\r\n if (!targetProduct.price) {\r\n console.error(\"PBMLOG: Price is not defined on targetProduct\");\r\n return;\r\n }\r\n\r\n try {\r\n const data = {\r\n productId: Number(targetProduct.productId),\r\n ean: targetProduct.ean,\r\n requestedQuantity: 1,\r\n listPrice: targetProduct.listPrice,\r\n netPrice: targetProduct.price\r\n }\r\n\r\n const response = await BenefitsWithDocument({ document: securityNumber, products: [data] });\r\n\r\n if (response.success && response.data) {\r\n setBenefitsItems(response.data.product)\r\n } else {\r\n setBenefitsItems(undefined)\r\n }\r\n } catch (error) {\r\n setBenefitsItems(undefined)\r\n console.error(error);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n\r\n state === \"isActivated\" ?\r\n fetchDiscountWithDocument() :\r\n fetchDicountsWithoutDocument();\r\n }, [])\r\n\r\n if (loading) {\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 id=\"loading_label\"\r\n >\r\n Buscando beneficios disponíveis...\r\n </p>\r\n </main>\r\n )\r\n }\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-4.5\"\r\n id=\"form_benefits_table_pbm\"\r\n onSubmit={(e) => e.preventDefault()}\r\n >\r\n {!benefitsItems && (\r\n <p className=\"text-sm font-semibold text-start text-zinc-900\" id=\"benefits_empty_pbm\">Não foi possível encontrar benefícios para esse produto.</p>\r\n )}\r\n\r\n {benefitsItems && benefitsItems.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 />\r\n );\r\n })}\r\n </form>\r\n\r\n {state === \"isPreview\" && (\r\n <Button\r\n onClick={() => setState(\"isEmpty\")}\r\n className=\"bg-transparent p-0 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 e o Login, 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 {state === \"isActivated\" && (\r\n <>\r\n {!isAuthenticatedShopper && <Button\r\n onClick={() => window.location.href = customLoginUrl || \"/login\"}\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=\"login\"\r\n >\r\n <span className=\"underline\">Por favor, faça o Login para aproveitar os benefícios!</span>\r\n </Button>}\r\n\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 )}\r\n </section>\r\n );\r\n}\r\n\r\nexport default BenefitsTable;\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 textAlign?: \"start\" | \"center\" | \"end\";\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, textAlign: props.textAlign }}\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 { create, StateCreator } from \"zustand\";\r\nimport { IModal } from \"../../types/globals\";\r\n\r\ninterface ModalDataType {\r\n modal: IModal;\r\n}\r\n\r\nexport interface useModal extends ModalDataType {\r\n setModal: (\r\n modal: useModal[\"modal\"]\r\n ) => void;\r\n}\r\n\r\nconst initialModalState: ModalDataType = {\r\n modal: {\r\n id: \"\",\r\n open: false\r\n },\r\n};\r\n\r\n// ✅ TIPANDO a função corretamente com StateCreator\r\nconst createModalStore: StateCreator<useModal> = (set) => ({\r\n ...initialModalState,\r\n\r\n setModal: (\r\n modal: useModal[\"modal\"]\r\n ) => set({ modal }),\r\n});\r\n\r\n// React hook (usado dentro de componentes React)\r\nexport const useModal = create<useModal>(createModalStore);\r\n","import { usePBMStore } from \"../../libs/zustand/usePBM\";\r\nimport { useModal } from \"../../libs/zustand/useModal\";\r\n\r\nimport { FormEvent, useCallback, useEffect } from \"react\";\r\nimport { IBenefitsItem } from \"../../types/globals\";\r\nimport classNames from \"classnames\";\r\nimport { Icons } from \"../UI/Icons\";\r\n\r\ninterface ItemProps {\r\n data: IBenefitsItem;\r\n onChange: VoidFunction;\r\n checked: boolean;\r\n}\r\n\r\nfunction Item({ data, onChange, checked }: ItemProps) {\r\n const { setAvailableDiscountSelected, state, isAuthenticatedShopper } = usePBMStore();\r\n const { setModal } = useModal();\r\n\r\n const ID_INPUT = \"unity_quantity_\" + data.authorizedQuantity;\r\n\r\n const decimalDiscount = data.discountPercentual / 100;\r\n\r\n const unitDiscountValue = data.grossPrice * decimalDiscount;\r\n\r\n\r\n const discountValue = unitDiscountValue * data.authorizedQuantity;\r\n\r\n const totalPriceProductWithDiscountBenefit =\r\n (data.grossPrice * data.authorizedQuantity) - discountValue;\r\n\r\n const updateStorageData = useCallback(() => {\r\n if (checked) {\r\n // Arredonda para 2 casas decimais\r\n const roundToTwoDecimals = (value: number) => Math.round(value * 100) / 100;\r\n\r\n setAvailableDiscountSelected({\r\n discount: {\r\n total: roundToTwoDecimals(discountValue),\r\n unit: roundToTwoDecimals(unitDiscountValue),\r\n },\r\n quantity: data.authorizedQuantity,\r\n totalPrice: roundToTwoDecimals(totalPriceProductWithDiscountBenefit),\r\n grossPrice: data.grossPrice\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 const handleChange = (e: FormEvent) => {\r\n if (!isAuthenticatedShopper && state === \"isActivated\") {\r\n setModal({\r\n id: \"ShopperIsNotAuthenticated\",\r\n open: true\r\n });\r\n return;\r\n }\r\n\r\n onChange();\r\n }\r\n\r\n return (\r\n <label\r\n htmlFor={ID_INPUT}\r\n className={classNames(\r\n \"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 rounded-lg gap-1\",\r\n { \"cursor-not-allowed\": state === \"isPreview\", \"cursor-pointer\": state === \"isActivated\" }\r\n )}\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={handleChange}\r\n disabled={state === \"isPreview\"}\r\n />\r\n\r\n {!checked ? (\r\n <Icons.CheckOFF size={20} />\r\n ) : (\r\n <Icons.CheckON 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 gap-2 flex items-center-safe justify-end-safe\">\r\n <span className=\"text-white -top-4 py-0.5 font-semibold text-xs bg-[#32b316] px-2 w-auto text-nowrap rounded-2xl -right-3\">\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 * as React from \"react\"\r\n\r\nfunction CheckON({ size }: { size: number }) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n data-name=\"Camada 1\"\r\n viewBox=\"0 0 500 500\"\r\n width={size}\r\n height={size}\r\n >\r\n <path\r\n d=\"M421.44 78.56C375.64 32.77 314.76 7.55 250 7.55S124.36 32.77 78.56 78.56C32.77 124.36 7.55 185.24 7.55 250s25.22 125.64 71.01 171.44c45.8 45.79 106.68 71.01 171.44 71.01s125.64-25.22 171.44-71.01c45.79-45.8 71.01-106.68 71.01-171.44s-25.22-125.64-71.01-171.44zm-49.17 121.7L242.88 334.63c-8.98 9.29-23.57 10.17-33.59 2.02l-79.63-64.7c-10.69-8.67-12.33-24.38-3.66-35.07 8.67-10.69 24.38-12.33 35.07-3.65l61.9 50.39L336.5 165.74c4.4-4.75 10.48-7.59 16.95-7.93a24.88 24.88 0 0118.83 7.26c9.72 9.72 9.71 25.48 0 35.19z\"\r\n fill=\"#229b00\"\r\n />\r\n </svg>\r\n )\r\n}\r\nfunction CheckOFF({ size }: { size: number }) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n data-name=\"Camada 1\"\r\n viewBox=\"0 0 500 500\"\r\n width={size}\r\n height={size}\r\n >\r\n <circle cx={250} cy={250} r={237.45} fill=\"#fff\" />\r\n <path\r\n d=\"M250 492.45c-64.76 0-125.64-25.22-171.44-71.01C32.77 375.64 7.55 314.76 7.55 250S32.77 124.36 78.56 78.56C124.36 32.77 185.24 7.55 250 7.55s125.64 25.22 171.44 71.01c45.79 45.79 71.01 106.68 71.01 171.44s-25.22 125.64-71.01 171.44c-45.79 45.79-106.68 71.01-171.44 71.01zm0-474.9C121.83 17.55 17.55 121.83 17.55 250S121.83 482.45 250 482.45 482.45 378.17 482.45 250 378.17 17.55 250 17.55z\"\r\n fill=\"#d8d8d8\"\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nexport const Icons = {\r\n CheckON,\r\n CheckOFF\r\n}","import Cookies from \"js-cookie\";\r\nimport { IRequestDefault } from \"../types/requests\";\r\n\r\ninterface ICheckBenefitsWithoutDocumentData {\r\n id: number;\r\n ean: number;\r\n authorizedQuantity: number;\r\n discountValue: string;\r\n discountPercentual: number;\r\n authorizer: string;\r\n industryName: string;\r\n requestCoupon: string;\r\n requestHolderId: string;\r\n comboId: number;\r\n grossPrice: number;\r\n allowsAdhesion: string;\r\n discountMaxNewPatient: number;\r\n informativeMessage: string;\r\n priceWithBenefit: number;\r\n}\r\n\r\ninterface ICheckBenefitsWithoutDocumentResponse extends IRequestDefault {\r\n data: ICheckBenefitsWithoutDocumentData[];\r\n}\r\n\r\ninterface IProductsCheckBenefits {\r\n productId: number;\r\n ean: string;\r\n requestedQuantity: number;\r\n listPrice: number;\r\n}\r\n\r\ninterface ICheckBenefistWithoutDocumentParams {\r\n products: IProductsCheckBenefits[];\r\n}\r\n\r\nexport const CheckBenefistWithoutDocument = async ({ products }: ICheckBenefistWithoutDocumentParams): Promise<ICheckBenefitsWithoutDocumentResponse> => {\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}/products/genericBenefit`, {\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({ products })\r\n })\r\n\r\n const dataResponse: ICheckBenefitsWithoutDocumentResponse = await response.json();\r\n\r\n if (!dataResponse.success) {\r\n throw new Error(dataResponse.message || 'Failed to fetch benefits without document');\r\n }\r\n\r\n return dataResponse;\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 textAlign?: \"start\" | \"center\" | \"end\";\r\n}\r\n\r\nfunction Text(props: TextProps) {\r\n return (\r\n <p\r\n className={classNames(\r\n \"font-normal text-sm text-zinc-900\",\r\n props.textAlign && `text-${props.textAlign}`,\r\n props.className\r\n )}\r\n style={{ color: props.textColor, fontSize: props.textSize, textAlign: props.textAlign }}\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 { ILinkHref } from \"../../../types/globals\";\r\nimport classNames from \"classnames\";\r\nimport React from \"react\";\r\nimport { getParams } from \"../../../utils/getParams\";\r\nimport { usePBMStore } from \"../../../libs/zustand/usePBM\";\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 const { setState } = usePBMStore();\r\n\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-lg bg-emerald-500 hover:bg-emerald-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 onClick={() => setState(\"isEmpty\")}\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\n// import Button from \"../UI/Button\";\r\n// import Iframe from \"../Iframe\";\r\n\r\n// import { useState } from \"react\";\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\nimport Link from \"../UI/Link\";\r\n\r\nfunction SecurityNumberInvalid({ textColor }: { textColor?: string }) {\r\n // const [openModal, setOpenModal] = useState<boolean>(false);\r\n const { urlAcceptTerms } = usePBMStore();\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 Conclua seu cadastro para habilitar o benefício. <br />\r\n Ao clicar em “Aceitar os termos”, você irá para uma página externa. Aceite os termos e volte para continuar.\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 <Link\r\n href={urlAcceptTerms || \"\"}\r\n >\r\n Aceitar os termos\r\n </Link>\r\n\r\n {/* <Iframe\r\n url={urlAcceptTerms || \"\"}\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 { RefreshCw } from \"lucide-react\";\nimport { usePBMStore } from \"./libs/zustand/usePBM\";\nimport { GetProductByEAN } from \"./services/get-product-by-ean\";\nimport Title from \"./components/UI/Title\";\nimport Text from \"./components/UI/Text\";\nimport Skeleton from '@mui/material/Skeleton';\nimport Modal from \"./components/Modal\";\nimport { GetProductsWithBenefits } from \"./services/get-list-products\";\n\nexport interface PBMProps {\n originalProductPrice: number | string;\n clientID: string;\n eanProduct: string;\n isAuthenticatedShopper: boolean;\n customLoginUrl?: string;\n}\n\nfunction PBM({\n originalProductPrice,\n clientID,\n eanProduct,\n isAuthenticatedShopper,\n customLoginUrl,\n}: PBMProps) {\n const formatedOriginalProductPrice = Number(\n String(originalProductPrice).replace(',', '.')\n );\n\n const [isReady, setIsReady] = useState<boolean>(false);\n const [loading, setLoading] = useState<boolean>(false);\n const { state, setTargetProduct, targetProduct, setIsAuthenticatedShopper, setCustomLoginUrl } = usePBMStore();\n const [EanProductExist, setEanProductExist] = useState<boolean>(true);\n const [IsValid, setIsValid] = useState<boolean>(false);\n\n const fetchValidateProduct = useCallback(async () => {\n try {\n const response = await GetProductsWithBenefits();\n\n if (response.success) {\n const data = response.data;\n\n const hasProductInList = data.some(product => product.ean == eanProduct);\n setIsValid(hasProductInList);\n }\n } catch (error) {\n console.error(error);\n }\n }, [eanProduct, IsValid])\n\n const fetchProductByEan = async () => {\n try {\n if (!IsValid) return;\n\n if (!eanProduct) {\n console.error(\"PBMLOG: Ean is not defined.\")\n setEanProductExist(false);\n return\n }\n\n const response = await GetProductByEAN({ PRODUCT_EAN: eanProduct });\n\n if (response.success && response.data) {\n setEanProductExist(true);\n\n const { pbm, sku, ...targetProductNewData } = response.data;\n\n setTargetProduct({\n ...targetProduct,\n ...targetProductNewData,\n productId: Number(targetProductNewData.productId),\n informativeMessage: pbm.informativeMessage ?? \"\",\n discountMax: pbm.discountMax ?? 0,\n industryLogo: pbm.imageLink ?? undefined,\n ean: eanProduct\n })\n\n setIsAuthenticatedShopper(isAuthenticatedShopper);\n setCustomLoginUrl(customLoginUrl)\n }\n } catch (error) {\n console.error(error);\n } finally {\n setIsReady(true)\n }\n }\n\n const handleAuthorizationRequest = useCallback(async () => {\n try {\n const response = await GetAuthorization({ clientID: clientID });\n\n if (response.success) {\n fetchValidateProduct();\n fetchProductByEan();\n } else {\n console.error(\"PBMLOG: Authorization failed!\");\n }\n } catch (error) {\n console.error(\"Error fetching authorization:\", error);\n }\n }, [clientID, IsValid]);\n\n useEffect(() => {\n handleAuthorizationRequest();\n }, [handleAuthorizationRequest]);\n\n if (!isReady) {\n return (\n <Skeleton variant=\"rectangular\" style={{ borderRadius: \"12px\" }} width={460} height={358} />\n )\n }\n\n if (!EanProductExist) {\n return (\n <div id=\"pbm-library-root\">\n <Container variant=\"main\" >\n <Title>Erro ao Aplicar o Benefício</Title>\n <Text textAlign=\"center\">O produto não foi encontrado no sistema. <br /> Por favor, tente novamente mais tarde ou contate o suporte.</Text>\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={() => window.location.reload()}\n id=\"check_benefits_button\"\n >\n <span>Tentar novamente</span>\n <RefreshCw size={16} />\n </Button>\n </Container>\n </div>\n )\n }\n\n if (!IsValid) {\n return;\n }\n\n return (\n <div id=\"pbm-library-root\">\n <Container variant=\"main\">\n <Header originalProductPrice={formatedOriginalProductPrice || 0} />\n\n <Container variant=\"simple\">\n {loading ? (\n <Loading />\n ) : (\n <>\n {state === \"isEmpty\" && <Form setLoading={setLoading} />}\n {state === \"isInvalid\" && <SecurityNumberInvalid />}\n {state === \"isRegistered\" && <SecurityNumberRegitered />}\n {(state === \"isActivated\" || state === \"isPreview\") && <BenefitsTable />}\n </>\n )}\n </Container>\n\n <Footer />\n </Container>\n\n <Modal ID=\"ShopperIsNotAuthenticated\" />\n </div>\n );\n}\n\nexport default PBM;\n","import Title from \"../UI/Title\";\r\nimport Text from \"../UI/Text\";\r\nimport Link from \"../UI/Link\";\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\n\r\nfunction SecurityNumberRegitered({ textColor }: { textColor?: string }) {\r\n const { urlRegisterIndustry } = usePBMStore();\r\n\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 Ops, seu CPF ainda não está habilitado para este produto.\r\n </Title>\r\n <Text className=\"w-full\" textColor={textColor}>\r\n Para ativar o benefício, clique em “Ativar CPF” e conclua a etapa na página externa. Depois, é só voltar para continuar — vamos aguardar você aqui.\r\n </Text>\r\n <Link\r\n href={urlRegisterIndustry || \"\"}\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\n\r\nexport const GetAuthorization = async ({ clientID }: { clientID: string }) => {\r\n const response = await fetch(\r\n 'https://pbm-auth-serverless.vercel.app/api/auth',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n credentials: 'include',\r\n body: JSON.stringify({\r\n clientId: clientID\r\n })\r\n }\r\n );\r\n\r\n const data = await response.json();\r\n\r\n if (!data.success) {\r\n throw new Error('Authorization failed');\r\n }\r\n\r\n Cookies.set('pbm-token', data.tokens.token, {\r\n secure: true,\r\n sameSite: 'Strict'\r\n });\r\n\r\n Cookies.set('pbm-token-refresh', data.tokens.refreshToken, {\r\n secure: true,\r\n sameSite: 'Strict'\r\n });\r\n\r\n return data;\r\n};","import Cookies from \"js-cookie\";\r\nimport { IRequestDefault } from \"../types/requests\";\r\n\r\ninterface IPBM {\r\n source: string;\r\n programName: string;\r\n industryName: string;\r\n discountMax: number;\r\n discountMin: number;\r\n informativeMessage: string;\r\n discountMaxNewPatient: number;\r\n discountMinNewPatient: number;\r\n discountFirstBox: number;\r\n suggestedPriceValue: string;\r\n imageLink: string | null;\r\n eanCombos: number | null;\r\n qtyDiscountMax: number;\r\n requestCoupon: string | null;\r\n}\r\n\r\nexport interface IDataRequestListProducts {\r\n productId: string;\r\n productName: string;\r\n sku: string;\r\n skuId: string;\r\n ean: string;\r\n price: number;\r\n listPrice: number;\r\n stockBalance: number;\r\n availabilityText: string;\r\n brandName: string;\r\n categoryName: string;\r\n pbm: IPBM;\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}/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 Title from '../UI/Title'\r\nimport Text from '../UI/Text'\r\nimport Button from '../UI/Button'\r\nimport Link from '../UI/Link'\r\nimport { usePBMStore } from '../../libs/zustand/usePBM'\r\nimport { useModal } from '../../libs/zustand/useModal'\r\nimport classNames from 'classnames'\r\n\r\nconst Modal = ({ ID }: { ID: string }) => {\r\n const { customLoginUrl } = usePBMStore();\r\n const { modal, setModal } = useModal();\r\n\r\n return (\r\n <main className={classNames(\r\n \"fixed inset-0 flex items-center justify-center z-50 flex-col transition-all shadow bg-black/40\",\r\n {\r\n \"opacity-100 pointer-events-auto\": modal.id === ID && modal.open,\r\n \"opacity-0 pointer-events-none\": modal.id != ID || !modal.open,\r\n }\r\n )}>\r\n <div className='absolute inset-0' onClick={() => setModal({ id: \"\", open: false })}></div>\r\n <section className='z-10 bg-white gap-2 flex-col items-center-safe justify-center-safe p-8 rounded-xl'>\r\n <Title textColor='tomato' textSize='18px' textAlign='center' className='mb-2'>Opa! Parece que você não está Logado</Title>\r\n <Text className='mb-2' textAlign='center'>Para aproveitar os benefícios é necessário realizar o <strong>Login</strong> ou <strong>Cadastro</strong> no site!</Text>\r\n <section className='flex items-center-safe justify-center-safe gap-4'>\r\n <Button className='bg-gray-600 hover:bg-gray-500' onClick={() => setModal({ id: \"\", open: false })}>Seguir sem Benefícios</Button>\r\n <Link href={customLoginUrl || \"/login\"}>Aproveitar Benefícios</Link>\r\n </section>\r\n </section>\r\n </main>\r\n )\r\n}\r\n\r\nexport default Modal;","import Cookies from \"js-cookie\";\r\nimport { IRequestDefault } from \"../types/requests\";\r\nimport { IProductInList } from \"../types/globals\";\r\n\r\ninterface IResponseGetProducts extends IRequestDefault {\r\n data: IProductInList[]\r\n}\r\n\r\nexport const GetProductsWithBenefits = async (): 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}/products/list`, {\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}"],"mappings":"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","names":["jsx","classNames","jsx","jsxs","classNames","classNames","classNames","jsx","Fragment","jsx","jsxs","classNames","jsx","jsxs","useEffect","useState","classNames","jsx","classNames","jsx","jsxs","jsx","jsxs","classNames","Cookies","Fragment","jsx","jsxs","useState","useEffect","classNames","jsx","classNames","jsx","classNames","jsx","jsxs","useCallback","useEffect","useState","jsx","jsxs","Cookies","Cookies","classNames","jsx","jsxs","Cookies","Fragment","jsx","jsxs","useState","useCallback","useEffect"]}
|