@agrada_digital/pbm 0.0.100 → 0.0.102

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.d.mts CHANGED
@@ -72,4 +72,4 @@ interface PBMStore extends usePBMTypes {
72
72
  declare function usePBMStore(): PBMStore;
73
73
  declare function usePBMStore<T>(selector: (state: PBMStore) => T): T;
74
74
 
75
- export { PBM, type PBMProps, type PBMStore, usePBMStore };
75
+ export { PBM, type PBMProps, type PBMStore, type PBMTheme, usePBMStore };
package/dist/index.d.ts CHANGED
@@ -72,4 +72,4 @@ interface PBMStore extends usePBMTypes {
72
72
  declare function usePBMStore(): PBMStore;
73
73
  declare function usePBMStore<T>(selector: (state: PBMStore) => T): T;
74
74
 
75
- export { PBM, type PBMProps, type PBMStore, usePBMStore };
75
+ export { PBM, type PBMProps, type PBMStore, type PBMTheme, usePBMStore };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/libs/zustand/usePBM.tsx","../src/components/Header/index.tsx","../src/components/UI/Container/index.tsx","../src/components/Footer/index.tsx","../src/components/UI/Title/index.tsx","../src/components/UI/Text/index.tsx","../src/schema/validation-schema.ts","../src/utils/format-security-number.ts","../src/utils/mapping-internal-states.ts","../src/services/benefits-with-document.ts","../src/components/UI/Button/index.tsx","../src/components/Form/index.tsx","../src/libs/zustand/useError.tsx","../src/components/UI/Loading/index.tsx","../src/services/benefits-without-document.ts","../src/components/BenefitsTable/index.tsx","../src/libs/zustand/useModal.tsx","../src/components/BenefitsTable/Item.tsx","../src/components/UI/Icons/index.tsx","../src/components/SecurityNumberInvalid/index.tsx","../src/components/SecurityNumberRegitered/index.tsx","../src/components/Errors/ErrorToApplyBenefits.tsx","../src/components/UI/Link/index.tsx","../src/utils/getParams.ts","../src/components/Modal/index.tsx","../src/PBM.tsx","../src/utils/format-price.ts","../src/hooks/useAppStartup.tsx","../src/services/authorization.ts","../src/services/get-product-by-ean.ts","../src/services/get-list-products.ts","../src/libs/zustand/useTheme.tsx","../src/components/Iframe/index.tsx"],"sourcesContent":["// Estilos - importa CSS escopado para evitar conflitos\r\nimport './pbm-scoped.css';\r\n\r\n// Componente Principal\r\nexport { default as PBM } from \"./PBM\";\r\n\r\n// Tipos\r\nexport type { PBMProps } from \"./types/globals\";\r\nexport type { PBMStore } from \"./libs/zustand/usePBM\";\r\n\r\n// Hooks\r\nexport { usePBMStore } from \"./libs/zustand/usePBM\"; \r\n","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\" style={{ backgroundColor: 'var(--pbm-primary)' }}>{targetProduct?.informativeMessage}</span>}\r\n <header\r\n className=\"flex items-center justify-between w-full p-0.5 rounded-xl mt-5\"\r\n style={{ backgroundColor: 'color-mix(in srgb, var(--pbm-primary), transparent 70%)' }}\r\n id=\"header_pbm\"\r\n >\r\n <span\r\n className=\"py-1 px-6 rounded-xl shrink-0 text-white text-xl font-bold flex items-center justify-start gap-2 relative\"\r\n style={{ backgroundColor: 'var(--pbm-primary)' }}\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 font-bold text-xs px-4 md:text-sm\" style={{ color: 'var(--pbm-secondary)' }}>\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-(--pbm-border) flex flex-col items-center justify-center min-w-(--min-container) max-w-(--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\nimport Title from \"../UI/Title\";\r\nimport Text from \"../UI/Text\";\r\n\r\nfunction Footer() {\r\n const { targetProduct } = 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 <Title>\r\n Economize com o benefício do laboratório.\r\n </Title>\r\n <Text>\r\n Este produto tem preço exclusivo para clientes cadastrados no\r\n programa.\r\n </Text>\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 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\",\r\n props.className\r\n )}\r\n style={{ color: props.textColor || 'var(--pbm-text)', 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 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\",\r\n props.textAlign && `text-${props.textAlign}`,\r\n props.className\r\n )}\r\n style={{ color: props.textColor || 'var(--pbm-text)', 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 { 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 { StateComponentType } from \"../types/globals\";\r\n\r\ntype OutContextStateType = \"acceptance\" | \"industry registration\" | \"active\";\r\n\r\nexport const mappingInternalStates = (outContextState: OutContextStateType) => {\r\n const status: Record<OutContextStateType, StateComponentType> = {\r\n \"acceptance\": \"isInvalid\",\r\n \"industry registration\": \"isRegistered\",\r\n \"active\": \"isActivated\"\r\n }\r\n\r\n return status[outContextState];\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 statusCode: string | null;\r\n informativeText: string;\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 | undefined;\r\n netPrice: number | undefined;\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 text-white text-sm font-semibold transition-colors\",\r\n props.className\r\n )}\r\n style={{ ...props.style }}\r\n >\r\n {props.children}\r\n </button>\r\n );\r\n}\r\n\r\nexport default Button;\r\n","import {\r\n validationSchema,\r\n validationSchemaType,\r\n} from \"../../schema/validation-schema\";\r\nimport { toFormat } from \"../../utils/format-security-number\";\r\nimport { mappingInternalStates } from \"../../utils/mapping-internal-states\";\r\nimport { BenefitsWithDocument } from \"../../services/benefits-with-document\";\r\n\r\nimport Button from \"../UI/Button\";\r\n\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\nimport { zodResolver } from \"@hookform/resolvers/zod\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport { ArrowRight } from \"lucide-react\";\r\nimport classNames from \"classnames\";\r\n\r\nimport { Activity, TransitionStartFunction, useState } from \"react\";\r\nimport { useError } from \"../../libs/zustand/useError\";\r\n\r\ninterface IForm {\r\n startTransition: TransitionStartFunction;\r\n}\r\n\r\nfunction Form({ startTransition }: IForm) {\r\n const store = usePBMStore();\r\n const [showCardIDField, setShowCardIDField] = useState<boolean>(false);\r\n const { setErrorMessage } = useError();\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: store.securityNumber || \"\",\r\n coupon: \"\",\r\n },\r\n });\r\n\r\n const checkSecurityNumberBenefits = async (values: validationSchemaType) => {\r\n try {\r\n if (store.targetProduct === null) {\r\n console.error(\"PBMLOG: Product is not defined!\");\r\n return;\r\n }\r\n\r\n if (!store.targetProduct.productId) {\r\n console.error(\"PBMLOG: Product ID is not defined!\");\r\n return\r\n }\r\n\r\n if (!store.targetProduct.listPrice) {\r\n console.error(\"PBMLOG: List Price is not defined!\");\r\n return\r\n }\r\n\r\n const product = {\r\n productId: store.targetProduct.productId,\r\n ean: store.targetProduct.ean,\r\n requestedQuantity: 1,\r\n listPrice: store.targetProduct.listPrice,\r\n netPrice: store.targetProduct.netPrice ?? store.targetProduct.listPrice\r\n }\r\n\r\n const response = await BenefitsWithDocument({\r\n document: values.securityNumber.replace(/\\D/g, ''),\r\n products: [product]\r\n });\r\n\r\n if (response.success) {\r\n const status = mappingInternalStates(response.data.product[0].statusCustomer);\r\n\r\n store.setSecurityNumber(values.securityNumber);\r\n store.setState(status);\r\n\r\n if (status === \"isInvalid\") {\r\n store.setUrlAcceptTerms(response.data.product[0].urlAcceptTerm || undefined)\r\n return;\r\n }\r\n\r\n if (status === \"isRegistered\") {\r\n store.setUrlRegisterIndustry(response.data.product[0].informativeLink);\r\n return;\r\n }\r\n\r\n if (!status) {\r\n setErrorMessage(response.data.product[0].informativeText);\r\n store.setState(\"isError\");\r\n return;\r\n }\r\n }\r\n } catch (error) {\r\n console.error(\"PBMLOG: Error validating document -\", error);\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 store.setCardID(values.coupon);\r\n }\r\n\r\n startTransition(async () => {\r\n await checkSecurityNumberBenefits(values);\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: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 style={{\r\n '--tw-outline-color': !errors.securityNumber ? 'var(--pbm-secondary)' : undefined,\r\n } as React.CSSProperties}\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={store.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\r\n <Activity mode={showCardIDField ? \"visible\" : \"hidden\"}>\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: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 style={{\r\n '--tw-outline-color': !errors.coupon ? 'var(--pbm-secondary)' : undefined,\r\n } as React.CSSProperties}\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 </Activity>\r\n\r\n <button\r\n type=\"submit\"\r\n className={classNames(\r\n \"w-1/5 h-10 rounded-e-lg flex items-center justify-center cursor-pointer\",\r\n { \"rounded-lg\": showCardIDField }\r\n )}\r\n style={{ backgroundColor: 'var(--pbm-primary)' }}\r\n id=\"button_submit_security_number_pbm\"\r\n >\r\n <ArrowRight size={24} color=\"white\" strokeWidth={2} />\r\n </button>\r\n </form>\r\n\r\n <section className=\"flex items-center-safe justify-between\">\r\n <Button\r\n className=\"bg-transparent p-0 pl-2 w-auto h-auto underline cursor-pointer hover:bg-transparent flex items-center justify-start gap-1\"\r\n style={{ color: 'var(--pbm-text)' }}\r\n onMouseOver={(e) => (e.currentTarget.style.filter = 'brightness(0.8)')}\r\n onMouseOut={(e) => (e.currentTarget.style.filter = 'none')}\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 underline cursor-pointer hover:bg-transparent flex items-center justify-start gap-1\"\r\n style={{ color: 'var(--pbm-text)' }}\r\n onMouseOver={(e) => (e.currentTarget.style.filter = 'brightness(0.8)')}\r\n onMouseOut={(e) => (e.currentTarget.style.filter = 'none')}\r\n onClick={() => store.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 { create, StateCreator } from \"zustand\";\r\n\r\ninterface ErrorData {\r\n ErrorMessage: string;\r\n}\r\n\r\nexport interface useError extends ErrorData {\r\n setErrorMessage: (\r\n ErrorMessage: useError[\"ErrorMessage\"]\r\n ) => void;\r\n resetErrorMessage: () => void;\r\n}\r\n\r\nconst initialErrorState: ErrorData = {\r\n ErrorMessage: \"Erro ao aplicar o benefício\",\r\n};\r\n\r\n// ✅ TIPANDO a função corretamente com StateCreator\r\nconst createErrorStore: StateCreator<useError> = (set) => ({\r\n ...initialErrorState,\r\n\r\n setErrorMessage: (\r\n ErrorMessage: useError[\"ErrorMessage\"]\r\n ) => set({ ErrorMessage }),\r\n\r\n resetErrorMessage: () => set({ ErrorMessage: initialErrorState.ErrorMessage }),\r\n});\r\n\r\n// React hook (usado dentro de componentes React)\r\nexport const useError = create<useError>(createErrorStore);\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-gray-300 rounded-full animate-spin\"\r\n style={{ borderTopColor: 'var(--pbm-secondary)' }}\r\n id=\"loading_spin\"\r\n ></div>\r\n <p\r\n className={\"text-sm font-semibold text-start\"}\r\n style={{ color: textColor || 'var(--pbm-text)' }}\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 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 statusCode: string | null;\r\n informativeText: string;\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 | undefined;\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 Title from \"../UI/Title\";\r\nimport Button from \"../UI/Button\";\r\nimport Loading from \"../UI/Loading\";\r\n\r\nimport { IBenefitsItem } from \"../../types/globals\";\r\n\r\nimport { BenefitsWithDocument } from \"../../services/benefits-with-document\";\r\nimport { CheckBenefistWithoutDocument } from \"../../services/benefits-without-document\";\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\n\r\nimport { useEffect, useState, useTransition } from \"react\";\r\n\r\nimport Item from \"./Item\";\r\n\r\nfunction BenefitsTable() {\r\n const [isPending, startTransition] = useTransition();\r\n\r\n const { securityNumber, setState, state, targetProduct, customLoginUrl, isAuthenticatedShopper } = usePBMStore();\r\n const [selectedDiscout, setSelectedDiscount] = useState<string | null>(null);\r\n\r\n const [benefitsItems, setBenefitsItems] = useState<IBenefitsItem[] | undefined>();\r\n\r\n useEffect(() => {\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 const fetchDicountsWithoutDocument = async () => {\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 }\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 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 }\r\n }\r\n\r\n\r\n startTransition(async () => {\r\n (state === \"isActivated\") ?\r\n await fetchDiscountWithDocument() :\r\n await fetchDicountsWithoutDocument();\r\n })\r\n }, [])\r\n\r\n if (isPending) {\r\n return <Loading textColor=\"var(--pbm-text)\" />;\r\n }\r\n\r\n if (benefitsItems?.length && benefitsItems[0]?.statusCode == null && state === \"isActivated\") {\r\n return (\r\n <main className=\"flex items-center justify-center gap-4\" id=\"loading_pbm\">\r\n <p className=\"text-sm font-semibold text-start\" style={{ color: 'var(--pbm-text)' }} id=\"benefits_error_handle\">{benefitsItems[0].informativeText}</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 type=\"button\"\r\n onClick={() => window.location.assign(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 { 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 resetModal: () => void;\r\n}\r\n\r\nconst initialModalState: ModalDataType = {\r\n modal: {\r\n id: \"\",\r\n open: false,\r\n label: \"\",\r\n url: \"\",\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 resetModal: () => set({ modal: initialModalState.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 = () => {\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 transition-colors rounded-lg gap-1\",\r\n { \"cursor-not-allowed\": state === \"isPreview\", \"cursor-pointer\": state === \"isActivated\", \"opacity-80\": !checked && state === \"isActivated\" }\r\n )}\r\n style={{\r\n borderColor: checked ? 'var(--pbm-primary)' : undefined,\r\n backgroundColor: checked ? 'color-mix(in srgb, var(--pbm-primary), transparent 90%)' : undefined\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 <span style={{ color: 'var(--pbm-primary)' }}>\r\n {!checked ? (\r\n <Icons.CheckOFF size={20} />\r\n ) : (\r\n <Icons.CheckON size={20} />\r\n )}\r\n </span>\r\n\r\n <span className=\"font-semibold text-sm\" style={{ color: 'var(--pbm-text)' }}>\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\r\n className=\"text-white -top-4 py-0.5 font-semibold text-xs px-2 w-auto text-nowrap rounded-2xl -right-3\"\r\n style={{ backgroundColor: 'var(--pbm-primary)' }}\r\n >\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=\"font-semibold text-sm text-center\" style={{ color: 'var(--pbm-text)' }}>\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 Title from \"../UI/Title\";\r\nimport Text from \"../UI/Text\";\r\n\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\nimport Button from \"../UI/Button\";\r\nimport { useModal } from \"../../libs/zustand/useModal\";\r\n\r\nfunction SecurityNumberInvalid({ textColor }: { textColor?: string }) {\r\n const { urlAcceptTerms } = usePBMStore();\r\n const { setModal } = useModal();\r\n\r\n const handleOpenModal = () => {\r\n if (!urlAcceptTerms) return;\r\n\r\n setModal({ open: true, id: \"iframe_pbm\", label: \"Aceitar os termos\", url: urlAcceptTerms });\r\n };\r\n\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 py-6\"\r\n style={{ borderColor: 'color-mix(in srgb, var(--pbm-text), transparent 80%)' }}\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\r\n <Button onClick={() => handleOpenModal()} style={{ backgroundColor: 'var(--pbm-primary)' }}>\r\n Aceitar os termos\r\n </Button>\r\n </section>\r\n );\r\n}\r\n\r\nexport default SecurityNumberInvalid;\r\n","import Title from \"../UI/Title\";\r\nimport Text from \"../UI/Text\";\r\n\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\nimport { useModal } from \"../../libs/zustand/useModal\";\r\nimport Button from \"../UI/Button\";\r\n\r\nfunction SecurityNumberRegitered({ textColor }: { textColor?: string }) {\r\n const { urlRegisterIndustry } = usePBMStore();\r\n const { setModal } = useModal();\r\n\r\n const handleOpenModal = () => {\r\n if (!urlRegisterIndustry) return;\r\n\r\n setModal({ open: true, id: \"iframe_pbm\", label: \"Ativar CPF\", url: urlRegisterIndustry });\r\n };\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 py-6\"\r\n style={{ borderColor: 'color-mix(in srgb, var(--pbm-text), transparent 80%)' }}\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 <Button onClick={() => handleOpenModal()} style={{ backgroundColor: 'var(--pbm-primary)' }}>Ativar CPF</Button>\r\n </section>\r\n );\r\n}\r\n\r\nexport default SecurityNumberRegitered;\r\n","import Container from '../UI/Container'\r\nimport Title from '../UI/Title'\r\nimport Text from '../UI/Text'\r\nimport Button from '../UI/Button'\r\nimport { RefreshCw } from 'lucide-react'\r\nimport { useError } from '../../libs/zustand/useError'\r\nimport { usePBMStore } from '../../libs/zustand/usePBM'\r\n\r\nconst ErrorToApplyBenefits = () => {\r\n const { ErrorMessage } = useError();\r\n const { setState } = usePBMStore();\r\n\r\n return (\r\n <Container variant=\"main\" >\r\n <Title>Erro ao Aplicar o Benefício</Title>\r\n <Text textAlign=\"center\">{ErrorMessage}</Text>\r\n <Button\r\n className=\"bg-transparent p-0 pl-2 w-auto h-auto underline cursor-pointer hover:bg-transparent flex items-center justify-start gap-1\"\r\n style={{ color: 'var(--pbm-text)' }}\r\n onMouseOver={(e) => (e.currentTarget.style.filter = 'brightness(0.8)')}\r\n onMouseOut={(e) => (e.currentTarget.style.filter = 'none')}\r\n onClick={() => setState(\"isEmpty\")}\r\n id=\"check_benefits_button\"\r\n >\r\n <span>Tentar novamente</span>\r\n <RefreshCw size={16} />\r\n </Button>\r\n </Container>\r\n )\r\n}\r\n\r\nexport default ErrorToApplyBenefits","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 target?: 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={props.target || \"_self\"}\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 text-white text-sm font-semibold transition-colors flex items-center justify-center\",\r\n props.className\r\n )}\r\n style={{ backgroundColor: 'var(--pbm-primary)' }}\r\n onMouseOver={(e) => (e.currentTarget.style.backgroundColor = 'var(--pbm-secondary)')}\r\n onMouseOut={(e) => (e.currentTarget.style.backgroundColor = 'var(--pbm-primary)')}\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\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 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 BenefitsTable from \"./components/BenefitsTable\";\nimport SecurityNumberInvalid from \"./components/SecurityNumberInvalid\";\nimport SecurityNumberRegitered from \"./components/SecurityNumberRegitered\";\nimport ErrorToApplyBenefits from \"./components/Errors/ErrorToApplyBenefits\";\nimport Modal from \"./components/Modal\";\n\nimport { usePBMStore } from \"./libs/zustand/usePBM\";\nimport Skeleton from '@mui/material/Skeleton';\n\nimport { PBMProps } from \"./types/globals\";\nimport { formatedPrice } from \"./utils/format-price\";\n\nimport { useTransition } from \"react\";\nimport useAppStartup from \"./hooks/useAppStartup\";\nimport Iframe from \"./components/Iframe\";\nimport { useError } from \"./libs/zustand/useError\";\nimport { useTheme } from \"./libs/zustand/useTheme\";\n\nfunction PBM(props: PBMProps) {\n const { state } = usePBMStore();\n const { IsReady, EanProductExist, IsValid } = useAppStartup(props);\n const { setErrorMessage } = useError();\n\n const theme = useTheme();\n\n const [isPending, startTransition] = useTransition();\n\n const formatedProductPrice = formatedPrice(props.originalProductPrice);\n\n if (!IsValid) return;\n\n if (!IsReady) {\n return (\n <Skeleton variant=\"rectangular\" style={{ borderRadius: \"12px\" }} width={460} height={358} />\n )\n }\n\n if (!EanProductExist) {\n setErrorMessage(\"O produto não foi encontrado no sistema. Por favor, tente novamente mais tarde ou contate o suporte.\");\n\n return (\n <div id=\"pbm-library-root\">\n <ErrorToApplyBenefits />\n </div>\n )\n }\n\n return (\n <div\n id=\"pbm-library-root\"\n style={{\n \"--pbm-primary\": theme.primaryColor,\n \"--pbm-secondary\": theme.secondaryColor,\n \"--pbm-bg\": theme.backgroundColor,\n \"--pbm-text\": theme.textColor,\n \"--pbm-border\": theme.borderColor\n } as React.CSSProperties}\n >\n <Container variant=\"main\">\n <Header originalProductPrice={formatedProductPrice || 0} />\n\n <Container variant=\"simple\">\n {isPending ? (\n <Loading />\n ) : (\n <>\n {state === \"isEmpty\" && <Form startTransition={startTransition} />}\n {state === \"isInvalid\" && <SecurityNumberInvalid />}\n {state === \"isRegistered\" && <SecurityNumberRegitered />}\n {(state === \"isActivated\" || state === \"isPreview\") && <BenefitsTable />}\n {state === \"isError\" && <ErrorToApplyBenefits />}\n </>\n )}\n </Container>\n\n <Footer />\n </Container>\n\n <Modal ID=\"ShopperIsNotAuthenticated\" />\n <Iframe />\n </div>\n );\n}\n\nexport default PBM;\n","export const formatedPrice = (price: string | number) => {\r\n const result = Number(String(price).replace(',', '.'));\r\n return result;\r\n};","import { useCallback, useEffect, useState } from \"react\";\r\n\r\nimport { GetAuthorization } from \"../services/authorization\";\r\nimport { GetProductByEAN } from \"../services/get-product-by-ean\";\r\nimport { GetProductsWithBenefits } from \"../services/get-list-products\";\r\n\r\nimport { usePBMStore } from \"../libs/zustand/usePBM\";\r\nimport { useTheme } from \"../libs/zustand/useTheme\";\r\nimport { PBMProps } from \"../types/globals\";\r\n\r\nconst useAppStartup = (props: PBMProps) => {\r\n const { setTargetProduct, targetProduct, setIsAuthenticatedShopper, setCustomLoginUrl } = usePBMStore();\r\n const { setTheme } = useTheme();\r\n\r\n const [IsReady, setIsReady] = useState<boolean>(false);\r\n const [IsValid, setIsValid] = useState<boolean>(false);\r\n const [EanProductExist, setEanProductExist] = useState<boolean>(true);\r\n\r\n const fetchAuthorizationRequest = async (): Promise<boolean> => {\r\n try {\r\n const response = await GetAuthorization({ clientID: props.clientID });\r\n\r\n if (!response.success) {\r\n console.error(\"PBMLOG: Authorization failed!\");\r\n }\r\n return response.success;\r\n } catch (error) {\r\n console.error(\"Error fetching authorization:\", error);\r\n return false;\r\n }\r\n };\r\n\r\n const fetchValidateProduct = async (): Promise<boolean> => {\r\n if (!props.eanProduct) {\r\n console.error(\"PBMLOG: Ean is not defined.\")\r\n setEanProductExist(false);\r\n return false;\r\n }\r\n\r\n try {\r\n const response = await GetProductsWithBenefits(props.eanProduct);\r\n\r\n if (response.success) {\r\n const data = response.data;\r\n const hasProductInList = (data.ean == props.eanProduct) && data.showModule;\r\n setIsValid(hasProductInList);\r\n return hasProductInList;\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n return false;\r\n };\r\n\r\n const fetchProductByEan = async () => {\r\n try {\r\n if (!props.eanProduct) {\r\n console.error(\"PBMLOG: Ean is not defined.\")\r\n setEanProductExist(false);\r\n return;\r\n }\r\n\r\n const response = await GetProductByEAN({ PRODUCT_EAN: props.eanProduct });\r\n\r\n if (response.success && response.data) {\r\n setEanProductExist(true);\r\n\r\n const { pbm, sku, ...targetProductNewData } = response.data;\r\n\r\n setTargetProduct({\r\n ...targetProduct,\r\n ...targetProductNewData,\r\n productId: Number(targetProductNewData.productId),\r\n informativeMessage: pbm.informativeMessage ?? \"\",\r\n discountMax: pbm.discountMax ?? 0,\r\n industryLogo: pbm.imageLink ?? undefined,\r\n ean: props.eanProduct\r\n })\r\n\r\n setIsAuthenticatedShopper(props.isAuthenticatedShopper);\r\n setCustomLoginUrl(props.customLoginUrl)\r\n } else {\r\n setEanProductExist(false);\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n setEanProductExist(false);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n let isMounted = true;\r\n\r\n const startup = async () => {\r\n if (props.theme) {\r\n setTheme(props.theme);\r\n }\r\n\r\n const isAuthorized = await fetchAuthorizationRequest();\r\n if (!isAuthorized || !isMounted) return;\r\n\r\n const isValidProduct = await fetchValidateProduct();\r\n if (!isValidProduct || !isMounted) return;\r\n\r\n await fetchProductByEan();\r\n\r\n if (isMounted) {\r\n setIsReady(true);\r\n }\r\n };\r\n\r\n startup();\r\n\r\n return () => {\r\n isMounted = false;\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [props.eanProduct, props.clientID]);\r\n\r\n return { IsReady, IsValid, EanProductExist };\r\n}\r\n\r\nexport default useAppStartup","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 Cookies from \"js-cookie\";\r\nimport { IRequestDefault } from \"../types/requests\";\r\nimport { IShortProductList } from \"../types/globals\";\r\n\r\ninterface IResponseGetProducts extends IRequestDefault {\r\n data: IShortProductList\r\n}\r\n\r\nexport const GetProductsWithBenefits = async (eanProduct: 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/program-verification/${eanProduct}`, {\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 { createStore, StoreApi } from \"zustand\";\r\nimport { useStore } from \"zustand/react\";\r\nimport { PBMTheme } from \"../../types/globals\";\r\n\r\nexport interface ThemeStore extends PBMTheme {\r\n setTheme: (theme: PBMTheme) => void;\r\n}\r\n\r\nconst initialThemeState: PBMTheme = {\r\n primaryColor: \"#44c2c0\",\r\n secondaryColor: \"#339c9b\",\r\n backgroundColor: \"#ffffff\",\r\n textColor: \"#52525b\", // zinc-600\r\n borderColor: \"#44c2c0\", // zinc-600\r\n};\r\n\r\nexport const themeStore: StoreApi<ThemeStore> = createStore<ThemeStore>((set) => ({\r\n ...initialThemeState,\r\n setTheme: (theme: PBMTheme) => set((state) => ({ ...state, ...theme })),\r\n}));\r\n\r\nexport function useTheme(): ThemeStore;\r\nexport function useTheme<T>(selector: (state: ThemeStore) => T): T;\r\nexport function useTheme<T>(selector?: (state: ThemeStore) => T): ThemeStore | T {\r\n if (selector) {\r\n return useStore(themeStore, selector);\r\n }\r\n return useStore(themeStore, (state) => state);\r\n}\r\n","import classNames from \"classnames\";\r\nimport { TriangleAlert, ExternalLink } from \"lucide-react\";\r\nimport { useState, useEffect } from \"react\";\r\nimport { useModal } from \"../../libs/zustand/useModal\";\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\nimport Button from \"../UI/Button\";\r\nimport Title from \"../UI/Title\";\r\nimport Text from \"../UI/Text\";\r\n\r\nfunction Iframe() {\r\n const [showFallback, setShowFallback] = useState(false);\r\n\r\n const { setState } = usePBMStore();\r\n const { resetModal, modal } = useModal();\r\n\r\n const isOpen = modal.open && modal.id === \"iframe_pbm\";\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setShowFallback(false);\r\n }\r\n }, [isOpen, modal.url]);\r\n\r\n const handleOpenInNewWindow = () => {\r\n if (modal.url) {\r\n window.open(modal.url, '_blank', 'noopener,noreferrer');\r\n }\r\n };\r\n\r\n const handleClose = () => {\r\n setState(\"isEmpty\");\r\n resetModal();\r\n };\r\n\r\n if (!modal.url) return;\r\n\r\n return (\r\n <main\r\n className={classNames(\r\n \"fixed inset-0 flex items-center justify-center z-50 flex-col transition-all duration-300 pt-[10%]\",\r\n isOpen ? \"opacity-100 pointer-events-auto\" : \"opacity-0 pointer-events-none\"\r\n )}\r\n id=\"iframe_pbm\"\r\n >\r\n <div\r\n className=\"bg-black/40 inset-0 absolute backdrop-blur-sm\"\r\n onClick={handleClose}\r\n />\r\n\r\n <section className=\"w-[90%] md:w-4/5 gap-4 h-auto bg-zinc-900 py-3 px-6 flex items-center justify-end rounded-t-2xl border-b border-white/10 z-10 shadow-2xl\">\r\n <Button\r\n onClick={handleClose}\r\n className=\"bg-red-500 hover:bg-red-400 w-auto px-6 h-9 transition-all active:scale-95 shadow-lg text-xs md:text-sm\"\r\n >\r\n Cancelar\r\n </Button>\r\n <Button\r\n onClick={handleClose}\r\n className=\"bg-blue-600 hover:bg-blue-500 w-auto px-6 h-9 transition-all active:scale-95 shadow-lg text-xs md:text-sm\"\r\n >\r\n Finalizei o formulário\r\n </Button>\r\n </section>\r\n\r\n <div className=\"w-[90%] md:w-4/5 h-[60vh] bg-zinc-900 z-10 overflow-hidden relative shadow-2xl\">\r\n {showFallback ? (\r\n <div className=\"absolute inset-0 flex flex-col items-center justify-center p-8 text-center bg-zinc-900\">\r\n <div className=\"bg-yellow-500/10 p-4 rounded-full mb-4 animate-pulse\">\r\n <TriangleAlert size={48} className=\"text-yellow-500\" />\r\n </div>\r\n <Title textColor=\"white\" textSize=\"20px\" textAlign=\"center\" className=\"mb-2\">\r\n Não foi possível carregar o conteúdo\r\n </Title>\r\n <Text textColor=\"#a1a1aa\" textAlign=\"center\" className=\"mb-8 max-w-md\">\r\n Este conteúdo não permite exibição integrada por segurança.\r\n Clique no botão abaixo para concluir em uma nova aba.\r\n </Text>\r\n <Button\r\n onClick={handleOpenInNewWindow}\r\n className=\"flex items-center gap-2 w-auto px-8 h-12 shadow-xl shadow-emerald-500/20\"\r\n >\r\n <ExternalLink size={18} />\r\n Abrir em nova janela\r\n </Button>\r\n </div>\r\n ) : (\r\n <iframe\r\n src={modal.url}\r\n title={modal.label ?? \"Conteúdo PBM\"}\r\n className=\"w-full h-full border-none bg-white animate-fade-in\"\r\n allowFullScreen\r\n onError={() => setShowFallback(true)}\r\n />\r\n )}\r\n </div>\r\n\r\n <section className=\"w-[90%] md:w-4/5 flex flex-col md:flex-row items-center justify-between gap-3 bg-zinc-900 py-4 px-6 rounded-b-2xl border-t border-white/5 z-10 shadow-2xl\">\r\n <div className=\"flex items-center gap-2\">\r\n <TriangleAlert size={18} className=\"text-yellow-500 shrink-0\" />\r\n <Text textColor=\"white\" className=\"text-[10px] md:text-xs\">\r\n <span className=\"text-yellow-500 font-bold mr-1\">Importante:</span>\r\n Se a página não carregar, tente abrir em tela cheia usando o botão ao lado.\r\n </Text>\r\n </div>\r\n <button\r\n onClick={handleOpenInNewWindow}\r\n className=\"text-white/60 hover:text-white text-[11px] underline flex items-center gap-1 transition-colors cursor-pointer\"\r\n >\r\n <ExternalLink size={14} /> Abrir em nova aba\r\n </button>\r\n </section>\r\n </main>\r\n );\r\n}\r\n\r\nexport default Iframe;\r\n\r\n\r\n"],"mappings":"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","names":["import_jsx_runtime","classNames","import_classnames","import_classnames","import_jsx_runtime","classNames","import_classnames","import_jsx_runtime","classNames","import_jsx_runtime","classNames","Cookies","import_classnames","import_jsx_runtime","classNames","import_zod","import_classnames","import_react","import_zustand","import_jsx_runtime","classNames","import_jsx_runtime","import_js_cookie","import_meta","Cookies","import_react","import_zustand","import_react","import_classnames","import_jsx_runtime","import_jsx_runtime","classNames","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_classnames","import_jsx_runtime","classNames","import_classnames","import_jsx_runtime","classNames","import_react","import_react","import_js_cookie","Cookies","import_js_cookie","import_meta","Cookies","import_js_cookie","import_meta","Cookies","import_zustand","import_react","import_classnames","import_lucide_react","import_react","import_jsx_runtime","classNames","import_jsx_runtime","Skeleton"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/libs/zustand/usePBM.tsx","../src/components/Header/index.tsx","../src/components/UI/Container/index.tsx","../src/components/Footer/index.tsx","../src/components/UI/Title/index.tsx","../src/components/UI/Text/index.tsx","../src/schema/validation-schema.ts","../src/utils/format-security-number.ts","../src/utils/mapping-internal-states.ts","../src/services/benefits-with-document.ts","../src/components/UI/Button/index.tsx","../src/components/Form/index.tsx","../src/libs/zustand/useError.tsx","../src/components/UI/Loading/index.tsx","../src/services/benefits-without-document.ts","../src/components/BenefitsTable/index.tsx","../src/libs/zustand/useModal.tsx","../src/components/BenefitsTable/Item.tsx","../src/components/UI/Icons/index.tsx","../src/components/SecurityNumberInvalid/index.tsx","../src/components/SecurityNumberRegitered/index.tsx","../src/components/Errors/ErrorToApplyBenefits.tsx","../src/components/UI/Link/index.tsx","../src/utils/getParams.ts","../src/components/Modal/index.tsx","../src/PBM.tsx","../src/utils/format-price.ts","../src/hooks/useAppStartup.tsx","../src/services/authorization.ts","../src/services/get-product-by-ean.ts","../src/services/get-list-products.ts","../src/libs/zustand/useTheme.tsx","../src/components/Iframe/index.tsx"],"sourcesContent":["// Estilos - importa CSS escopado para evitar conflitos\r\nimport './pbm-scoped.css';\r\n\r\n// Componente Principal\r\nexport { default as PBM } from \"./PBM\";\r\n\r\n// Tipos\r\nexport type { PBMProps } from \"./types/globals\";\r\nexport type { PBMStore } from \"./libs/zustand/usePBM\";\r\nexport type { PBMTheme } from \"./types/globals\";\r\n\r\n// Hooks\r\nexport { usePBMStore } from \"./libs/zustand/usePBM\"; \r\n","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\" style={{ backgroundColor: 'var(--pbm-primary)' }}>{targetProduct?.informativeMessage}</span>}\r\n <header\r\n className=\"flex items-center justify-between w-full p-0.5 rounded-xl mt-5\"\r\n style={{ backgroundColor: 'color-mix(in srgb, var(--pbm-primary), transparent 70%)' }}\r\n id=\"header_pbm\"\r\n >\r\n <span\r\n className=\"py-1 px-6 rounded-xl shrink-0 text-white text-xl font-bold flex items-center justify-start gap-2 relative\"\r\n style={{ backgroundColor: 'var(--pbm-primary)' }}\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 font-bold text-xs px-4 md:text-sm\" style={{ color: 'var(--pbm-secondary)' }}>\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-(--pbm-border) flex flex-col items-center justify-center min-w-(--min-container) max-w-(--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\nimport Title from \"../UI/Title\";\r\nimport Text from \"../UI/Text\";\r\n\r\nfunction Footer() {\r\n const { targetProduct } = 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 <Title>\r\n Economize com o benefício do laboratório.\r\n </Title>\r\n <Text>\r\n Este produto tem preço exclusivo para clientes cadastrados no\r\n programa.\r\n </Text>\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 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\",\r\n props.className\r\n )}\r\n style={{ color: props.textColor || 'var(--pbm-text)', 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 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\",\r\n props.textAlign && `text-${props.textAlign}`,\r\n props.className\r\n )}\r\n style={{ color: props.textColor || 'var(--pbm-text)', 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 { 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 { StateComponentType } from \"../types/globals\";\r\n\r\ntype OutContextStateType = \"acceptance\" | \"industry registration\" | \"active\";\r\n\r\nexport const mappingInternalStates = (outContextState: OutContextStateType) => {\r\n const status: Record<OutContextStateType, StateComponentType> = {\r\n \"acceptance\": \"isInvalid\",\r\n \"industry registration\": \"isRegistered\",\r\n \"active\": \"isActivated\"\r\n }\r\n\r\n return status[outContextState];\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 statusCode: string | null;\r\n informativeText: string;\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 | undefined;\r\n netPrice: number | undefined;\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 text-white text-sm font-semibold transition-colors\",\r\n props.className\r\n )}\r\n style={{ ...props.style }}\r\n >\r\n {props.children}\r\n </button>\r\n );\r\n}\r\n\r\nexport default Button;\r\n","import {\r\n validationSchema,\r\n validationSchemaType,\r\n} from \"../../schema/validation-schema\";\r\nimport { toFormat } from \"../../utils/format-security-number\";\r\nimport { mappingInternalStates } from \"../../utils/mapping-internal-states\";\r\nimport { BenefitsWithDocument } from \"../../services/benefits-with-document\";\r\n\r\nimport Button from \"../UI/Button\";\r\n\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\nimport { zodResolver } from \"@hookform/resolvers/zod\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport { ArrowRight } from \"lucide-react\";\r\nimport classNames from \"classnames\";\r\n\r\nimport { Activity, TransitionStartFunction, useState } from \"react\";\r\nimport { useError } from \"../../libs/zustand/useError\";\r\n\r\ninterface IForm {\r\n startTransition: TransitionStartFunction;\r\n}\r\n\r\nfunction Form({ startTransition }: IForm) {\r\n const store = usePBMStore();\r\n const [showCardIDField, setShowCardIDField] = useState<boolean>(false);\r\n const { setErrorMessage } = useError();\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: store.securityNumber || \"\",\r\n coupon: \"\",\r\n },\r\n });\r\n\r\n const checkSecurityNumberBenefits = async (values: validationSchemaType) => {\r\n try {\r\n if (store.targetProduct === null) {\r\n console.error(\"PBMLOG: Product is not defined!\");\r\n return;\r\n }\r\n\r\n if (!store.targetProduct.productId) {\r\n console.error(\"PBMLOG: Product ID is not defined!\");\r\n return\r\n }\r\n\r\n if (!store.targetProduct.listPrice) {\r\n console.error(\"PBMLOG: List Price is not defined!\");\r\n return\r\n }\r\n\r\n const product = {\r\n productId: store.targetProduct.productId,\r\n ean: store.targetProduct.ean,\r\n requestedQuantity: 1,\r\n listPrice: store.targetProduct.listPrice,\r\n netPrice: store.targetProduct.netPrice ?? store.targetProduct.listPrice\r\n }\r\n\r\n const response = await BenefitsWithDocument({\r\n document: values.securityNumber.replace(/\\D/g, ''),\r\n products: [product]\r\n });\r\n\r\n if (response.success) {\r\n const status = mappingInternalStates(response.data.product[0].statusCustomer);\r\n\r\n store.setSecurityNumber(values.securityNumber);\r\n store.setState(status);\r\n\r\n if (status === \"isInvalid\") {\r\n store.setUrlAcceptTerms(response.data.product[0].urlAcceptTerm || undefined)\r\n return;\r\n }\r\n\r\n if (status === \"isRegistered\") {\r\n store.setUrlRegisterIndustry(response.data.product[0].informativeLink);\r\n return;\r\n }\r\n\r\n if (!status) {\r\n setErrorMessage(response.data.product[0].informativeText);\r\n store.setState(\"isError\");\r\n return;\r\n }\r\n }\r\n } catch (error) {\r\n console.error(\"PBMLOG: Error validating document -\", error);\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 store.setCardID(values.coupon);\r\n }\r\n\r\n startTransition(async () => {\r\n await checkSecurityNumberBenefits(values);\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: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 style={{\r\n '--tw-outline-color': !errors.securityNumber ? 'var(--pbm-secondary)' : undefined,\r\n } as React.CSSProperties}\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={store.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\r\n <Activity mode={showCardIDField ? \"visible\" : \"hidden\"}>\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: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 style={{\r\n '--tw-outline-color': !errors.coupon ? 'var(--pbm-secondary)' : undefined,\r\n } as React.CSSProperties}\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 </Activity>\r\n\r\n <button\r\n type=\"submit\"\r\n className={classNames(\r\n \"w-1/5 h-10 rounded-e-lg flex items-center justify-center cursor-pointer\",\r\n { \"rounded-lg\": showCardIDField }\r\n )}\r\n style={{ backgroundColor: 'var(--pbm-primary)' }}\r\n id=\"button_submit_security_number_pbm\"\r\n >\r\n <ArrowRight size={24} color=\"white\" strokeWidth={2} />\r\n </button>\r\n </form>\r\n\r\n <section className=\"flex items-center-safe justify-between\">\r\n <Button\r\n className=\"bg-transparent p-0 pl-2 w-auto h-auto underline cursor-pointer hover:bg-transparent flex items-center justify-start gap-1\"\r\n style={{ color: 'var(--pbm-text)' }}\r\n onMouseOver={(e) => (e.currentTarget.style.filter = 'brightness(0.8)')}\r\n onMouseOut={(e) => (e.currentTarget.style.filter = 'none')}\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 underline cursor-pointer hover:bg-transparent flex items-center justify-start gap-1\"\r\n style={{ color: 'var(--pbm-text)' }}\r\n onMouseOver={(e) => (e.currentTarget.style.filter = 'brightness(0.8)')}\r\n onMouseOut={(e) => (e.currentTarget.style.filter = 'none')}\r\n onClick={() => store.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 { create, StateCreator } from \"zustand\";\r\n\r\ninterface ErrorData {\r\n ErrorMessage: string;\r\n}\r\n\r\nexport interface useError extends ErrorData {\r\n setErrorMessage: (\r\n ErrorMessage: useError[\"ErrorMessage\"]\r\n ) => void;\r\n resetErrorMessage: () => void;\r\n}\r\n\r\nconst initialErrorState: ErrorData = {\r\n ErrorMessage: \"Erro ao aplicar o benefício\",\r\n};\r\n\r\n// ✅ TIPANDO a função corretamente com StateCreator\r\nconst createErrorStore: StateCreator<useError> = (set) => ({\r\n ...initialErrorState,\r\n\r\n setErrorMessage: (\r\n ErrorMessage: useError[\"ErrorMessage\"]\r\n ) => set({ ErrorMessage }),\r\n\r\n resetErrorMessage: () => set({ ErrorMessage: initialErrorState.ErrorMessage }),\r\n});\r\n\r\n// React hook (usado dentro de componentes React)\r\nexport const useError = create<useError>(createErrorStore);\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-gray-300 rounded-full animate-spin\"\r\n style={{ borderTopColor: 'var(--pbm-secondary)' }}\r\n id=\"loading_spin\"\r\n ></div>\r\n <p\r\n className={\"text-sm font-semibold text-start\"}\r\n style={{ color: textColor || 'var(--pbm-text)' }}\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 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 statusCode: string | null;\r\n informativeText: string;\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 | undefined;\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 Title from \"../UI/Title\";\r\nimport Button from \"../UI/Button\";\r\nimport Loading from \"../UI/Loading\";\r\n\r\nimport { IBenefitsItem } from \"../../types/globals\";\r\n\r\nimport { BenefitsWithDocument } from \"../../services/benefits-with-document\";\r\nimport { CheckBenefistWithoutDocument } from \"../../services/benefits-without-document\";\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\n\r\nimport { useEffect, useState, useTransition } from \"react\";\r\n\r\nimport Item from \"./Item\";\r\n\r\nfunction BenefitsTable() {\r\n const [isPending, startTransition] = useTransition();\r\n\r\n const { securityNumber, setState, state, targetProduct, customLoginUrl, isAuthenticatedShopper } = usePBMStore();\r\n const [selectedDiscout, setSelectedDiscount] = useState<string | null>(null);\r\n\r\n const [benefitsItems, setBenefitsItems] = useState<IBenefitsItem[] | undefined>();\r\n\r\n useEffect(() => {\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 const fetchDicountsWithoutDocument = async () => {\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 }\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 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 }\r\n }\r\n\r\n\r\n startTransition(async () => {\r\n (state === \"isActivated\") ?\r\n await fetchDiscountWithDocument() :\r\n await fetchDicountsWithoutDocument();\r\n })\r\n }, [])\r\n\r\n if (isPending) {\r\n return <Loading textColor=\"var(--pbm-text)\" />;\r\n }\r\n\r\n if (benefitsItems?.length && benefitsItems[0]?.statusCode == null && state === \"isActivated\") {\r\n return (\r\n <main className=\"flex items-center justify-center gap-4\" id=\"loading_pbm\">\r\n <p className=\"text-sm font-semibold text-start\" style={{ color: 'var(--pbm-text)' }} id=\"benefits_error_handle\">{benefitsItems[0].informativeText}</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 type=\"button\"\r\n onClick={() => window.location.assign(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 { 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 resetModal: () => void;\r\n}\r\n\r\nconst initialModalState: ModalDataType = {\r\n modal: {\r\n id: \"\",\r\n open: false,\r\n label: \"\",\r\n url: \"\",\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 resetModal: () => set({ modal: initialModalState.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 = () => {\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 transition-colors rounded-lg gap-1\",\r\n { \"cursor-not-allowed\": state === \"isPreview\", \"cursor-pointer\": state === \"isActivated\", \"opacity-80\": !checked && state === \"isActivated\" }\r\n )}\r\n style={{\r\n borderColor: checked ? 'var(--pbm-primary)' : undefined,\r\n backgroundColor: checked ? 'color-mix(in srgb, var(--pbm-primary), transparent 90%)' : undefined\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 <span style={{ color: 'var(--pbm-primary)' }}>\r\n {!checked ? (\r\n <Icons.CheckOFF size={20} />\r\n ) : (\r\n <Icons.CheckON size={20} />\r\n )}\r\n </span>\r\n\r\n <span className=\"font-semibold text-sm\" style={{ color: 'var(--pbm-text)' }}>\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\r\n className=\"text-white -top-4 py-0.5 font-semibold text-xs px-2 w-auto text-nowrap rounded-2xl -right-3\"\r\n style={{ backgroundColor: 'var(--pbm-primary)' }}\r\n >\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=\"font-semibold text-sm text-center\" style={{ color: 'var(--pbm-text)' }}>\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 Title from \"../UI/Title\";\r\nimport Text from \"../UI/Text\";\r\n\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\nimport Button from \"../UI/Button\";\r\nimport { useModal } from \"../../libs/zustand/useModal\";\r\n\r\nfunction SecurityNumberInvalid({ textColor }: { textColor?: string }) {\r\n const { urlAcceptTerms } = usePBMStore();\r\n const { setModal } = useModal();\r\n\r\n const handleOpenModal = () => {\r\n if (!urlAcceptTerms) return;\r\n\r\n setModal({ open: true, id: \"iframe_pbm\", label: \"Aceitar os termos\", url: urlAcceptTerms });\r\n };\r\n\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 py-6\"\r\n style={{ borderColor: 'color-mix(in srgb, var(--pbm-text), transparent 80%)' }}\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\r\n <Button onClick={() => handleOpenModal()} style={{ backgroundColor: 'var(--pbm-primary)' }}>\r\n Aceitar os termos\r\n </Button>\r\n </section>\r\n );\r\n}\r\n\r\nexport default SecurityNumberInvalid;\r\n","import Title from \"../UI/Title\";\r\nimport Text from \"../UI/Text\";\r\n\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\nimport { useModal } from \"../../libs/zustand/useModal\";\r\nimport Button from \"../UI/Button\";\r\n\r\nfunction SecurityNumberRegitered({ textColor }: { textColor?: string }) {\r\n const { urlRegisterIndustry } = usePBMStore();\r\n const { setModal } = useModal();\r\n\r\n const handleOpenModal = () => {\r\n if (!urlRegisterIndustry) return;\r\n\r\n setModal({ open: true, id: \"iframe_pbm\", label: \"Ativar CPF\", url: urlRegisterIndustry });\r\n };\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 py-6\"\r\n style={{ borderColor: 'color-mix(in srgb, var(--pbm-text), transparent 80%)' }}\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 <Button onClick={() => handleOpenModal()} style={{ backgroundColor: 'var(--pbm-primary)' }}>Ativar CPF</Button>\r\n </section>\r\n );\r\n}\r\n\r\nexport default SecurityNumberRegitered;\r\n","import Container from '../UI/Container'\r\nimport Title from '../UI/Title'\r\nimport Text from '../UI/Text'\r\nimport Button from '../UI/Button'\r\nimport { RefreshCw } from 'lucide-react'\r\nimport { useError } from '../../libs/zustand/useError'\r\nimport { usePBMStore } from '../../libs/zustand/usePBM'\r\n\r\nconst ErrorToApplyBenefits = () => {\r\n const { ErrorMessage } = useError();\r\n const { setState } = usePBMStore();\r\n\r\n return (\r\n <Container variant=\"main\" >\r\n <Title>Erro ao Aplicar o Benefício</Title>\r\n <Text textAlign=\"center\">{ErrorMessage}</Text>\r\n <Button\r\n className=\"bg-transparent p-0 pl-2 w-auto h-auto underline cursor-pointer hover:bg-transparent flex items-center justify-start gap-1\"\r\n style={{ color: 'var(--pbm-text)' }}\r\n onMouseOver={(e) => (e.currentTarget.style.filter = 'brightness(0.8)')}\r\n onMouseOut={(e) => (e.currentTarget.style.filter = 'none')}\r\n onClick={() => setState(\"isEmpty\")}\r\n id=\"check_benefits_button\"\r\n >\r\n <span>Tentar novamente</span>\r\n <RefreshCw size={16} />\r\n </Button>\r\n </Container>\r\n )\r\n}\r\n\r\nexport default ErrorToApplyBenefits","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 target?: 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={props.target || \"_self\"}\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 text-white text-sm font-semibold transition-colors flex items-center justify-center\",\r\n props.className\r\n )}\r\n style={{ backgroundColor: 'var(--pbm-primary)' }}\r\n onMouseOver={(e) => (e.currentTarget.style.backgroundColor = 'var(--pbm-secondary)')}\r\n onMouseOut={(e) => (e.currentTarget.style.backgroundColor = 'var(--pbm-primary)')}\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\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 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 BenefitsTable from \"./components/BenefitsTable\";\nimport SecurityNumberInvalid from \"./components/SecurityNumberInvalid\";\nimport SecurityNumberRegitered from \"./components/SecurityNumberRegitered\";\nimport ErrorToApplyBenefits from \"./components/Errors/ErrorToApplyBenefits\";\nimport Modal from \"./components/Modal\";\n\nimport { usePBMStore } from \"./libs/zustand/usePBM\";\nimport Skeleton from '@mui/material/Skeleton';\n\nimport { PBMProps } from \"./types/globals\";\nimport { formatedPrice } from \"./utils/format-price\";\n\nimport { useTransition } from \"react\";\nimport useAppStartup from \"./hooks/useAppStartup\";\nimport Iframe from \"./components/Iframe\";\nimport { useError } from \"./libs/zustand/useError\";\nimport { useTheme } from \"./libs/zustand/useTheme\";\n\nfunction PBM(props: PBMProps) {\n const { state } = usePBMStore();\n const { IsReady, EanProductExist, IsValid } = useAppStartup(props);\n const { setErrorMessage } = useError();\n\n const theme = useTheme();\n\n const [isPending, startTransition] = useTransition();\n\n const formatedProductPrice = formatedPrice(props.originalProductPrice);\n\n if (!IsValid) return;\n\n if (!IsReady) {\n return (\n <Skeleton variant=\"rectangular\" style={{ borderRadius: \"12px\" }} width={460} height={358} />\n )\n }\n\n if (!EanProductExist) {\n setErrorMessage(\"O produto não foi encontrado no sistema. Por favor, tente novamente mais tarde ou contate o suporte.\");\n\n return (\n <div id=\"pbm-library-root\">\n <ErrorToApplyBenefits />\n </div>\n )\n }\n\n return (\n <div\n id=\"pbm-library-root\"\n style={{\n \"--pbm-primary\": theme.primaryColor,\n \"--pbm-secondary\": theme.secondaryColor,\n \"--pbm-bg\": theme.backgroundColor,\n \"--pbm-text\": theme.textColor,\n \"--pbm-border\": theme.borderColor\n } as React.CSSProperties}\n >\n <Container variant=\"main\">\n <Header originalProductPrice={formatedProductPrice || 0} />\n\n <Container variant=\"simple\">\n {isPending ? (\n <Loading />\n ) : (\n <>\n {state === \"isEmpty\" && <Form startTransition={startTransition} />}\n {state === \"isInvalid\" && <SecurityNumberInvalid />}\n {state === \"isRegistered\" && <SecurityNumberRegitered />}\n {(state === \"isActivated\" || state === \"isPreview\") && <BenefitsTable />}\n {state === \"isError\" && <ErrorToApplyBenefits />}\n </>\n )}\n </Container>\n\n <Footer />\n </Container>\n\n <Modal ID=\"ShopperIsNotAuthenticated\" />\n <Iframe />\n </div>\n );\n}\n\nexport default PBM;\n","export const formatedPrice = (price: string | number) => {\r\n const result = Number(String(price).replace(',', '.'));\r\n return result;\r\n};","import { useCallback, useEffect, useState } from \"react\";\r\n\r\nimport { GetAuthorization } from \"../services/authorization\";\r\nimport { GetProductByEAN } from \"../services/get-product-by-ean\";\r\nimport { GetProductsWithBenefits } from \"../services/get-list-products\";\r\n\r\nimport { usePBMStore } from \"../libs/zustand/usePBM\";\r\nimport { useTheme } from \"../libs/zustand/useTheme\";\r\nimport { PBMProps } from \"../types/globals\";\r\n\r\nconst useAppStartup = (props: PBMProps) => {\r\n const { setTargetProduct, targetProduct, setIsAuthenticatedShopper, setCustomLoginUrl } = usePBMStore();\r\n const { setTheme } = useTheme();\r\n\r\n const [IsReady, setIsReady] = useState<boolean>(false);\r\n const [IsValid, setIsValid] = useState<boolean>(false);\r\n const [EanProductExist, setEanProductExist] = useState<boolean>(true);\r\n\r\n const fetchAuthorizationRequest = async (): Promise<boolean> => {\r\n try {\r\n const response = await GetAuthorization({ clientID: props.clientID });\r\n\r\n if (!response.success) {\r\n console.error(\"PBMLOG: Authorization failed!\");\r\n }\r\n return response.success;\r\n } catch (error) {\r\n console.error(\"Error fetching authorization:\", error);\r\n return false;\r\n }\r\n };\r\n\r\n const fetchValidateProduct = async (): Promise<boolean> => {\r\n if (!props.eanProduct) {\r\n console.error(\"PBMLOG: Ean is not defined.\")\r\n setEanProductExist(false);\r\n return false;\r\n }\r\n\r\n try {\r\n const response = await GetProductsWithBenefits(props.eanProduct);\r\n\r\n if (response.success) {\r\n const data = response.data;\r\n const hasProductInList = (data.ean == props.eanProduct) && data.showModule;\r\n setIsValid(hasProductInList);\r\n return hasProductInList;\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n return false;\r\n };\r\n\r\n const fetchProductByEan = async () => {\r\n try {\r\n if (!props.eanProduct) {\r\n console.error(\"PBMLOG: Ean is not defined.\")\r\n setEanProductExist(false);\r\n return;\r\n }\r\n\r\n const response = await GetProductByEAN({ PRODUCT_EAN: props.eanProduct });\r\n\r\n if (response.success && response.data) {\r\n setEanProductExist(true);\r\n\r\n const { pbm, sku, ...targetProductNewData } = response.data;\r\n\r\n setTargetProduct({\r\n ...targetProduct,\r\n ...targetProductNewData,\r\n productId: Number(targetProductNewData.productId),\r\n informativeMessage: pbm.informativeMessage ?? \"\",\r\n discountMax: pbm.discountMax ?? 0,\r\n industryLogo: pbm.imageLink ?? undefined,\r\n ean: props.eanProduct\r\n })\r\n\r\n setIsAuthenticatedShopper(props.isAuthenticatedShopper);\r\n setCustomLoginUrl(props.customLoginUrl)\r\n } else {\r\n setEanProductExist(false);\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n setEanProductExist(false);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n let isMounted = true;\r\n\r\n const startup = async () => {\r\n if (props.theme) {\r\n setTheme(props.theme);\r\n }\r\n\r\n const isAuthorized = await fetchAuthorizationRequest();\r\n if (!isAuthorized || !isMounted) return;\r\n\r\n const isValidProduct = await fetchValidateProduct();\r\n if (!isValidProduct || !isMounted) return;\r\n\r\n await fetchProductByEan();\r\n\r\n if (isMounted) {\r\n setIsReady(true);\r\n }\r\n };\r\n\r\n startup();\r\n\r\n return () => {\r\n isMounted = false;\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [props.eanProduct, props.clientID]);\r\n\r\n return { IsReady, IsValid, EanProductExist };\r\n}\r\n\r\nexport default useAppStartup","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 Cookies from \"js-cookie\";\r\nimport { IRequestDefault } from \"../types/requests\";\r\nimport { IShortProductList } from \"../types/globals\";\r\n\r\ninterface IResponseGetProducts extends IRequestDefault {\r\n data: IShortProductList\r\n}\r\n\r\nexport const GetProductsWithBenefits = async (eanProduct: 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/program-verification/${eanProduct}`, {\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 { createStore, StoreApi } from \"zustand\";\r\nimport { useStore } from \"zustand/react\";\r\nimport { PBMTheme } from \"../../types/globals\";\r\n\r\nexport interface ThemeStore extends PBMTheme {\r\n setTheme: (theme: PBMTheme) => void;\r\n}\r\n\r\nconst initialThemeState: PBMTheme = {\r\n primaryColor: \"#44c2c0\",\r\n secondaryColor: \"#339c9b\",\r\n backgroundColor: \"#ffffff\",\r\n textColor: \"#52525b\", // zinc-600\r\n borderColor: \"#44c2c0\", // zinc-600\r\n};\r\n\r\nexport const themeStore: StoreApi<ThemeStore> = createStore<ThemeStore>((set) => ({\r\n ...initialThemeState,\r\n setTheme: (theme: PBMTheme) => set((state) => ({ ...state, ...theme })),\r\n}));\r\n\r\nexport function useTheme(): ThemeStore;\r\nexport function useTheme<T>(selector: (state: ThemeStore) => T): T;\r\nexport function useTheme<T>(selector?: (state: ThemeStore) => T): ThemeStore | T {\r\n if (selector) {\r\n return useStore(themeStore, selector);\r\n }\r\n return useStore(themeStore, (state) => state);\r\n}\r\n","import classNames from \"classnames\";\r\nimport { TriangleAlert, ExternalLink } from \"lucide-react\";\r\nimport { useState, useEffect } from \"react\";\r\nimport { useModal } from \"../../libs/zustand/useModal\";\r\nimport { usePBMStore } from \"../../libs/zustand/usePBM\";\r\nimport Button from \"../UI/Button\";\r\nimport Title from \"../UI/Title\";\r\nimport Text from \"../UI/Text\";\r\n\r\nfunction Iframe() {\r\n const [showFallback, setShowFallback] = useState(false);\r\n\r\n const { setState } = usePBMStore();\r\n const { resetModal, modal } = useModal();\r\n\r\n const isOpen = modal.open && modal.id === \"iframe_pbm\";\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setShowFallback(false);\r\n }\r\n }, [isOpen, modal.url]);\r\n\r\n const handleOpenInNewWindow = () => {\r\n if (modal.url) {\r\n window.open(modal.url, '_blank', 'noopener,noreferrer');\r\n }\r\n };\r\n\r\n const handleClose = () => {\r\n setState(\"isEmpty\");\r\n resetModal();\r\n };\r\n\r\n if (!modal.url) return;\r\n\r\n return (\r\n <main\r\n className={classNames(\r\n \"fixed inset-0 flex items-center justify-center z-50 flex-col transition-all duration-300 pt-[10%]\",\r\n isOpen ? \"opacity-100 pointer-events-auto\" : \"opacity-0 pointer-events-none\"\r\n )}\r\n id=\"iframe_pbm\"\r\n >\r\n <div\r\n className=\"bg-black/40 inset-0 absolute backdrop-blur-sm\"\r\n onClick={handleClose}\r\n />\r\n\r\n <section className=\"w-[90%] md:w-4/5 gap-4 h-auto bg-zinc-900 py-3 px-6 flex items-center justify-end rounded-t-2xl border-b border-white/10 z-10 shadow-2xl\">\r\n <Button\r\n onClick={handleClose}\r\n className=\"bg-red-500 hover:bg-red-400 w-auto px-6 h-9 transition-all active:scale-95 shadow-lg text-xs md:text-sm\"\r\n >\r\n Cancelar\r\n </Button>\r\n <Button\r\n onClick={handleClose}\r\n className=\"bg-blue-600 hover:bg-blue-500 w-auto px-6 h-9 transition-all active:scale-95 shadow-lg text-xs md:text-sm\"\r\n >\r\n Finalizei o formulário\r\n </Button>\r\n </section>\r\n\r\n <div className=\"w-[90%] md:w-4/5 h-[60vh] bg-zinc-900 z-10 overflow-hidden relative shadow-2xl\">\r\n {showFallback ? (\r\n <div className=\"absolute inset-0 flex flex-col items-center justify-center p-8 text-center bg-zinc-900\">\r\n <div className=\"bg-yellow-500/10 p-4 rounded-full mb-4 animate-pulse\">\r\n <TriangleAlert size={48} className=\"text-yellow-500\" />\r\n </div>\r\n <Title textColor=\"white\" textSize=\"20px\" textAlign=\"center\" className=\"mb-2\">\r\n Não foi possível carregar o conteúdo\r\n </Title>\r\n <Text textColor=\"#a1a1aa\" textAlign=\"center\" className=\"mb-8 max-w-md\">\r\n Este conteúdo não permite exibição integrada por segurança.\r\n Clique no botão abaixo para concluir em uma nova aba.\r\n </Text>\r\n <Button\r\n onClick={handleOpenInNewWindow}\r\n className=\"flex items-center gap-2 w-auto px-8 h-12 shadow-xl shadow-emerald-500/20\"\r\n >\r\n <ExternalLink size={18} />\r\n Abrir em nova janela\r\n </Button>\r\n </div>\r\n ) : (\r\n <iframe\r\n src={modal.url}\r\n title={modal.label ?? \"Conteúdo PBM\"}\r\n className=\"w-full h-full border-none bg-white animate-fade-in\"\r\n allowFullScreen\r\n onError={() => setShowFallback(true)}\r\n />\r\n )}\r\n </div>\r\n\r\n <section className=\"w-[90%] md:w-4/5 flex flex-col md:flex-row items-center justify-between gap-3 bg-zinc-900 py-4 px-6 rounded-b-2xl border-t border-white/5 z-10 shadow-2xl\">\r\n <div className=\"flex items-center gap-2\">\r\n <TriangleAlert size={18} className=\"text-yellow-500 shrink-0\" />\r\n <Text textColor=\"white\" className=\"text-[10px] md:text-xs\">\r\n <span className=\"text-yellow-500 font-bold mr-1\">Importante:</span>\r\n Se a página não carregar, tente abrir em tela cheia usando o botão ao lado.\r\n </Text>\r\n </div>\r\n <button\r\n onClick={handleOpenInNewWindow}\r\n className=\"text-white/60 hover:text-white text-[11px] underline flex items-center gap-1 transition-colors cursor-pointer\"\r\n >\r\n <ExternalLink size={14} /> Abrir em nova aba\r\n </button>\r\n </section>\r\n </main>\r\n );\r\n}\r\n\r\nexport default Iframe;\r\n\r\n\r\n"],"mappings":"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","names":["import_jsx_runtime","classNames","import_classnames","import_classnames","import_jsx_runtime","classNames","import_classnames","import_jsx_runtime","classNames","import_jsx_runtime","classNames","Cookies","import_classnames","import_jsx_runtime","classNames","import_zod","import_classnames","import_react","import_zustand","import_jsx_runtime","classNames","import_jsx_runtime","import_js_cookie","import_meta","Cookies","import_react","import_zustand","import_react","import_classnames","import_jsx_runtime","import_jsx_runtime","classNames","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_classnames","import_jsx_runtime","classNames","import_classnames","import_jsx_runtime","classNames","import_react","import_react","import_js_cookie","Cookies","import_js_cookie","import_meta","Cookies","import_js_cookie","import_meta","Cookies","import_zustand","import_react","import_classnames","import_lucide_react","import_react","import_jsx_runtime","classNames","import_jsx_runtime","Skeleton"]}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@agrada_digital/pbm",
3
3
  "private": false,
4
- "version": "0.0.100",
4
+ "version": "0.0.102",
5
5
  "main": "dist/index.js",
6
- "module": "dist/index.js",
6
+ "module": "dist/index.mjs",
7
7
  "types": "dist/index.d.ts",
8
8
  "files": [
9
9
  "dist",
@@ -12,10 +12,11 @@
12
12
  ],
13
13
  "exports": {
14
14
  ".": {
15
- "browser": "./vanilla/index.js",
16
- "import": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.mjs",
17
17
  "require": "./dist/index.js"
18
- }
18
+ },
19
+ "./vanilla": "./vanilla/index.js"
19
20
  },
20
21
  "style": "dist/index.css",
21
22
  "description": "A React component library to implement the PBM (Pharmacy Benefit Manager) model.",