UNPKG

@hhgtech/hhg-components

Version:
1,266 lines (1,242 loc) 312 kB
import { _ as __rest, a as __awaiter } from './tslib.es6-00ab44b2.js'; import React__default, { createContext, useMemo, useContext, useEffect, useRef, useState, useCallback, forwardRef, useImperativeHandle, memo, useLayoutEffect } from 'react'; import { createStyles, Box, useMantineTheme, Button as Button$1, Autocomplete, Input as Input$1, Checkbox as Checkbox$1, Radio as Radio$1, Select as Select$1, Flex, clsx, TextInput, NumberInput as NumberInput$1, AspectRatio, rem, Badge, Tooltip, Portal, Transition, Overlay } from '@mantine/core'; import debounce from 'lodash/debounce'; import { createFormContext, useForm } from '@mantine/form'; import dayjs from 'dayjs'; import { B as BEARER_TOKEN_COOKIE } from './index-d535cfb0.js'; import { getCookie, setCookie } from './miscCookieHelper.js'; import { t as translationsMap$1 } from './translationsProvider-67aac7cb.js'; import { u as useTranslations } from './index-09d9e570.js'; import { T as TranslationsContext } from './translationsContext-18f7b7e0.js'; import { M as MediaQueries, B as Breakpoints, b as getWrapperDomWithSelector, a as getPopupWrapperDom } from './utils-538169b3.js'; import { T as Text } from './index-0b67696c.js'; import { S as Select, d as Checkbox, I as Input, R as Radio, P as Phone, N as NumberInput, E as ErrorIcon, O as OTP } from './index-bd44bcb2.js'; import { D as DatePicker } from './index-0861b084.js'; import { B as Button } from './index-2d25b0f0.js'; import { G as GlobalTextStyleNew, C as CustomStylesType, F as FontWeight } from './index-17c85f76.js'; import './index.styles-3adef5f6.js'; import { useIntersection } from '@mantine/hooks'; import './index-3f09210d.js'; import './index-04505e35.js'; import { M as MAPPED_LOCALE } from './utils-2d973164.js'; import { DateInput } from '@mantine/dates'; import { L as LOCALE_SPECS, Z as ZINDEX_SSO, I as ISO_FORMAT } from './index-8c40504a.js'; import { C as COMMON_DATE_TRANSLATE_KEY } from './index-fe4471f4.js'; import './index-7adf994c.js'; import { u as usePlacesAutocomplete, G as GOOGLE_API_KEY } from './usePlacesAutocomplete-0feee1dd.js'; import { H as Heading$1 } from './index-e348d0b2.js'; import { L as LOCALE } from './Locale-dc1237b9.js'; import { v1 } from 'uuid'; import { domainLocales } from './constantsDomainLocales.js'; import { parsePhoneNumber } from 'react-phone-number-input'; import styled from '@emotion/styled'; import { theme } from './miscTheme.js'; import { h as hexToRgb } from './utils-cf2f413d.js'; import { u as useTextStyles, C as ChoiceField, T as TextField } from './index-0776ee15.js'; import { T as TogetherComponentGlobalContext } from './utils-5e9c89a7.js'; import { M as MantineProvider } from './index-4f530542.js'; import { i as isVideo } from './index-f64f2609.js'; import { I as ImageWrap, u as useScreenSize } from './index-50aea2c8.js'; import { motion } from 'framer-motion'; import { createPortal } from 'react-dom'; import { ChevronDown } from '@hhgtech/icons/arrow'; import { MapPin } from '@hhgtech/icons/core'; import { I as InputDate } from './InputDate-9df68382.js'; import { Carousel } from '@mantine/carousel'; import { c as currencyFormat } from './utils-75069a38.js'; import { D as DrawerComponent, C as Close } from './index-72e8c8cf.js'; import './constantsIsProduction.js'; import './normalizeLink-c3e1dac7.js'; import './i18n-values/en-PH.js'; import './i18n-values/hi-IN.js'; import './i18n-values/id-ID.js'; import './i18n-values/km-KH.js'; import './i18n-values/ms-MY.js'; import './i18n-values/my-MM.js'; import './i18n-values/th-TH.js'; import './i18n-values/tl-PH.js'; import './i18n-values/vi-VN.js'; import './i18n-values/vi-VN_MB.js'; import './i18n-values/zh-SG.js'; import './i18n-values/zh-TW.js'; import '@hhgtech/icons/other'; import './shared-b07d1eb2.js'; import 'classnames'; import './useUniqueId-38cdf062.js'; import './constantsSite.js'; import '@emotion/react'; import '@mantine/notifications'; import 'date-fns/locale'; import './constantsRiskScreener.js'; import './constants-ce67620e.js'; import 'string-format'; import './constants-a21536f3.js'; import './index-dac15b93.js'; import 'slugify'; import './togetherApiPaths.js'; import './constants-367949ba.js'; import 'vaul'; const LeadGenComponentContext = createContext({}); var LEADGEN_LAYOUT; (function (LEADGEN_LAYOUT) { LEADGEN_LAYOUT["LightBoxA"] = "LightBoxA"; LEADGEN_LAYOUT["LightBoxB"] = "LightBoxB"; LEADGEN_LAYOUT["SkinA"] = "SkinA"; LEADGEN_LAYOUT["SkinB"] = "SkinB"; LEADGEN_LAYOUT["Floating"] = "Floating"; LEADGEN_LAYOUT["Tab"] = "Tab"; LEADGEN_LAYOUT["InlineA"] = "InlineA"; LEADGEN_LAYOUT["InlineB"] = "InlineB"; LEADGEN_LAYOUT["CenterTab"] = "CenterTab"; LEADGEN_LAYOUT["Sidebar"] = "Sidebar"; LEADGEN_LAYOUT["Fullscreen"] = "Fullscreen"; LEADGEN_LAYOUT["Slider"] = "Slider"; })(LEADGEN_LAYOUT || (LEADGEN_LAYOUT = {})); const LEADGEN_BLOCK = { TextBlock: 'TextBlock', NumberBlock: 'NumberBlock', DateBlock: 'DateBlock', EmailBlock: 'EmailBlock', PhoneBlock: 'PhoneBlock', PhoneOtpBlock: 'PhoneOtpBlock', WhatsappOtpBlock: 'WhatsappOtpBlock', ZaloOtpBlock: 'ZaloOtpBlock', LocationBlock: 'LocationBlock', LinkButtonBlock: 'LinkButtonBlock', RadioBlock: 'RadioBlock', DropdownBlock: 'DropdownBlock', CheckboxBlock: 'CheckboxBlock', TncBlock: 'TncBlock', TitleBlock: 'TitleBlock', SubtitleBlock: 'SubtitleBlock', }; const LEADGEN_BLOCK_INPUT = [ LEADGEN_BLOCK.TextBlock, LEADGEN_BLOCK.NumberBlock, LEADGEN_BLOCK.DateBlock, LEADGEN_BLOCK.EmailBlock, LEADGEN_BLOCK.PhoneBlock, LEADGEN_BLOCK.PhoneOtpBlock, LEADGEN_BLOCK.WhatsappOtpBlock, LEADGEN_BLOCK.ZaloOtpBlock, LEADGEN_BLOCK.LocationBlock, LEADGEN_BLOCK.RadioBlock, LEADGEN_BLOCK.DropdownBlock, LEADGEN_BLOCK.CheckboxBlock, LEADGEN_BLOCK.TncBlock, ]; const leadGenFieldNamePhone = (listBlockAdded) => { return listBlockAdded .filter(({ name }) => [ LEADGEN_BLOCK.PhoneBlock, LEADGEN_BLOCK.PhoneOtpBlock, LEADGEN_BLOCK.WhatsappOtpBlock, LEADGEN_BLOCK.ZaloOtpBlock, ].includes(name)) .map(({ data }) => data.value); }; const leadGenFieldRequired = (blocks) => { if (!(blocks === null || blocks === void 0 ? void 0 : blocks.length)) { return []; } return blocks .map(({ data, name, id }) => { const { required, value } = data; if (name === LEADGEN_BLOCK.TncBlock && id && required) { return `TNC-${id}`; } if (required && typeof data['newtab'] === 'undefined') { return value; } return; }) .filter(Boolean); }; const SSO_MAP_LEAD = ['name', 'email', 'birthday', 'phone', 'gender']; const LEAD_LOCALE_DATA$1 = { 'vi-VN': { popupLang: 'vi', countryCode: 'vn', countryCodeNumber: 84, }, 'id-ID': { popupLang: 'id', countryCode: 'id', countryCodeNumber: 62, }, 'th-TH': { popupLang: 'th', countryCode: 'th', countryCodeNumber: 66, }, 'ms-MY': { popupLang: 'ms', countryCode: 'my', countryCodeNumber: 60, }, 'zh-TW': { popupLang: 'zh', countryCode: 'tw', countryCodeNumber: 886, }, 'km-KH': { popupLang: 'km', countryCode: 'kh', countryCodeNumber: 855, }, 'my-MM': { popupLang: 'my', countryCode: 'mm', countryCodeNumber: 95, }, 'hi-IN': { popupLang: 'hi', countryCode: 'in', countryCodeNumber: 91, }, }; const mappingSSOToLead = (userInfoProps) => { var _a, _b; try { const { id, area_code } = userInfoProps; if (!userInfoProps || !id) { return; } const user = {}; for (const ssoKey of SSO_MAP_LEAD) { if (ssoKey in userInfoProps && typeof (userInfoProps === null || userInfoProps === void 0 ? void 0 : userInfoProps[ssoKey]) !== 'undefined') { const initValue = userInfoProps[ssoKey]; if (ssoKey === 'birthday') { const dob = dayjs(initValue, 'YYYY-MM-DD', true); if (dob.isValid()) { user.birthday = dob.toDate(); } } else if (ssoKey === 'gender') { user.gender = initValue.toString(); } else if (ssoKey === 'phone' && typeof area_code !== 'undefined') { user.phone = area_code + initValue; } else { user[ssoKey] = initValue; } } } if (((_a = user === null || user === void 0 ? void 0 : user.email) === null || _a === void 0 ? void 0 : _a.includes('@hhg.com')) || ((_b = user === null || user === void 0 ? void 0 : user.email) === null || _b === void 0 ? void 0 : _b.includes('@facebook.com'))) { delete user.email; } return Object.values(user).length ? user : undefined; } catch (error) { return; } }; const formatCampaignDetail = (campaign) => { if (!campaign) { return {}; } try { const { extra_fields, thank_you_image } = campaign || {}; const { textBlocks: exTextBlocks, imageBlocks: exImageBlocks, listBlockAdded: exListBlockAdded, listBlockThankyou: exListBlockThankyou, actionBlocks: exActionBlocks, } = extra_fields; const textBlocks = JSON.parse(exTextBlocks); const imageBlocks = JSON.parse(exImageBlocks); const listBlockAdded = JSON.parse(exListBlockAdded); const listBlockThankyou = JSON.parse(exListBlockThankyou); const actionBlocks = JSON.parse(exActionBlocks); const ThankYouBlock = { image: { src: thank_you_image }, }; listBlockThankyou.forEach((block) => { const { name, data } = block || {}; const { value: htmlText, align, newtab, url } = data || {}; switch (name) { case LEADGEN_BLOCK.TitleBlock: { ThankYouBlock.title = { htmlText, align }; } case LEADGEN_BLOCK.SubtitleBlock: { ThankYouBlock.description = { htmlText, align }; } case LEADGEN_BLOCK.LinkButtonBlock: { ThankYouBlock.button = { htmlText, newtab, url }; } } }); return Object.assign(Object.assign({}, campaign), { extra_fields: Object.assign(Object.assign({}, extra_fields), { textBlocks, imageBlocks, listBlockAdded, listBlockThankyou, actionBlocks }), ThankYouBlock }); } catch (error) { return {}; } }; const CAMPAIGN_TARGET_TYPE = { LINKS: 1, TAGS: 2 }; let LEAD_API = 'https://dev.leadgen.hellobacsi.com/'; const LEAD_DEVICE_TYPE = { MOBILE: 1, DESKTOP: 2, }; let LEAD_CLASS = ''; if (LEAD_API.includes('localhost')) { LEAD_API = 'https://dev.leadgen.hellobacsi.com/'; } if (location.hostname.includes('marrybaby.vn')) { LEAD_CLASS = 'pink'; } // var LEAD_CURRENT_URL = location.href.toLowerCase(); let LEAD_CURRENT_URL = 'https://' + location.hostname + location.pathname + location.search; LEAD_CURRENT_URL = LEAD_CURRENT_URL.toLowerCase(); // TODO: set inital object if exists if (sessionStorage.getItem('insider_object')) { window.insider_object = JSON.parse(sessionStorage.getItem('insider_object')); } const docLang = document.documentElement.lang; // TODO: country code const LEAD_LOCALE_DATA = { 'vi-VN': { popupLang: 'vi', countryCode: 'vn', countryCodeNumber: 84, }, 'id-ID': { popupLang: 'id', countryCode: 'id', countryCodeNumber: 62, }, 'th-TH': { popupLang: 'th', countryCode: 'th', countryCodeNumber: 66, }, 'ms-MY': { popupLang: 'ms', countryCode: 'my', countryCodeNumber: 60, }, 'zh-TW': { popupLang: 'zh', countryCode: 'tw', countryCodeNumber: 886, }, 'km-KH': { popupLang: 'km', countryCode: 'kh', countryCodeNumber: 855, }, 'my-MM': { popupLang: 'my', countryCode: 'mm', countryCodeNumber: 95, }, 'hi-IN': { popupLang: 'hi', countryCode: 'in', countryCodeNumber: 91, }, }; const LEAD_LOCALE = LEAD_LOCALE_DATA[docLang] || LEAD_LOCALE_DATA['vi-VN']; function LEAD_RESET_VAR() { // LEAD_CURRENT_URL = location.href.toLowerCase(); LEAD_CURRENT_URL = 'https://' + location.hostname + location.pathname + location.search; } const LEAD_TIMEZONE_DATA = { 1: 'Asia/Ho_Chi_Minh', 10: 'Asia/Ho_Chi_Minh', 11: 'Asia/Ho_Chi_Minh', 12: 'Asia/Ho_Chi_Minh', 2: 'Asia/Jakarta', 3: 'Asia/Bangkok', 4: 'Asia/Phnom_Penh', 5: 'Asia/Kuala_Lumpur', 6: 'Asia/Taipei', 7: 'Asia/Yangon', 8: 'Asia/Kolkata', 9: 'Asia/Manila', // Philippines / Filipinos Site }; const TEMPLATE_ALLOW_NEWTRACKING = [ LEADGEN_LAYOUT.LightBoxA, LEADGEN_LAYOUT.LightBoxB, LEADGEN_LAYOUT.InlineA, LEADGEN_LAYOUT.InlineB, LEADGEN_LAYOUT.Slider, LEADGEN_LAYOUT.CenterTab, ]; const formatLeadGenFormValue = (values = {}, blocks) => { const newValues = {}; for (const block of blocks) { const { data } = block || {}; const { value: fieldName } = data || {}; if (fieldName in values) { newValues[fieldName] = values[fieldName]; } } return newValues; }; class Store { constructor() { this.apiSsoUrl = 'https://staging-id.hellobacsi.com/'; this.apiLeadUrl = 'https://dev.leadgen.hellobacsi.com/'; this.apiSubotUrl = 'https://staging-service-subot.hellohealthgroup.com/'; } } const leadStore = new Store(); const METHOD = { GET: 'get', POST: 'POST', }; const LEADGEN_ERROR_CODE = { UNAUTHORIZED: 'UNAUTHORIZED', }; const LEADGEN_API_PATH = { V2_CAMPAIGN: 'api/v2/campaign', V2_SUBSCRIPTION_LEAD: 'api/v2/subscription-box', V2_SUBSCRIPTION_INFO: 'api/campaign/get-title', POST_CTA_SUBMIT: 'api/collection/cta-submit', }; const SSO_API_PATH = { USER_UPDATE: 'api/user/update', }; const ssoApi = { call(_a) { var { url, data } = _a, config = __rest(_a, ["url", "data"]); const token = getCookie(BEARER_TOKEN_COOKIE); config.body = JSON.stringify(data); config.headers = { 'Content-Type': 'application/json', Authorization: `Bearer ${token}`, }; if (!token) { return Promise.reject({ code: LEADGEN_ERROR_CODE.UNAUTHORIZED, _data: '', }); } return fetch(`${leadStore.apiSsoUrl}${url}`, config) .then((res) => res.json()) .catch(() => ({})); }, }; const leadApi = { call(_a) { var { url, data = undefined } = _a, config = __rest(_a, ["url", "data"]); config.body = JSON.stringify(data); config.headers = { 'Content-Type': 'application/json', }; return fetch(`${leadStore.apiLeadUrl}${url}`, config) .then((res) => res.json()) .catch(() => ({})); }, }; const subotApi = { call(_a) { var { url, data } = _a, config = __rest(_a, ["url", "data"]); config.body = JSON.stringify(data); config.headers = { 'Content-Type': 'application/json', }; return fetch(`${leadStore.apiSubotUrl}${url}`, config) .then((res) => res.json()) .catch(() => ({})); }, }; const campaignGetById = (id) => { return leadApi.call({ url: `api/internal/campaign/${id}`, method: 'get', }); }; const validateEmailOrPhoneOnLeadGen = ({ campaign_id, email, phone, }) => { let phoneToSend = phone; // Remove the '0' part. Logic from Back to check between Subot and Lead with different format if (phoneToSend && phoneToSend.startsWith('0')) { phoneToSend = phoneToSend.substring(1); } return leadApi.call({ url: 'api/subot-campaign/check', method: 'post', data: { campaign_id, email, phone: phoneToSend, }, }); }; const validateEmailOrPhoneOnSubot = ({ bot_id, email, phone, }) => { let phoneToSend = phone; // Remove the '0' part. Logic from Back to check between Subot and Lead with different format if (phoneToSend && phoneToSend.startsWith('0')) { phoneToSend = phoneToSend.substring(1); } return subotApi.call({ url: 'frontend/api/subot-campaign/check', method: 'post', data: { bot_id, email, phone: phoneToSend, }, }); }; const validatePhoneNumberOnLeadGen = ({ campaign_id, phone, }) => { return leadApi.call({ url: 'api/collection/log/check-phone-with-campaign', method: 'post', data: { campaign_id, phone, }, }); }; const LEAD_OTP_API = { whatsapp: 'api/sms/whatsapp_otp', phone: 'api/sms/otp', zalo: 'api/sms/zalo_otp', }; const sendSMSOtpLead = ({ phone, type, }) => { return leadApi.call({ url: LEAD_OTP_API[type], method: 'post', data: { // The type Whatsapp/Zalo do not remove the '+' phone_number: type === 'phone' ? phone.replace('+', '') : phone, }, }); }; const LEAD_VERIFY_OTP_API = { whatsapp: 'api/sms/whatsapp_verify', phone: 'api/sms/verify', zalo: 'api/sms/zalo_verify', }; const verifyOtpLead = ({ phone, otp, type, }) => { return leadApi.call({ url: LEAD_VERIFY_OTP_API[type], method: 'post', data: { // The type Whatsapp/Zalo do not remove the '+' otp_code: otp, phone_number: type === 'phone' ? phone.replace('+', '') : phone, }, }); }; const getCampaignByCode = (campaign_code) => { return leadApi.call({ url: `${LEADGEN_API_PATH.V2_CAMPAIGN}/${campaign_code}`, method: METHOD.GET, }); }; const getSubscriptionBoxInfo = ({ category, site, slug, }) => { return leadApi.call({ url: `${LEADGEN_API_PATH.V2_SUBSCRIPTION_INFO}?category=${category}&site=${site}&slug=${slug}`, method: METHOD.GET, }); }; const postSubscriptionBoxLead = ({ data }) => { return leadApi.call({ url: LEADGEN_API_PATH.V2_SUBSCRIPTION_LEAD, method: METHOD.POST, data, }); }; const postUserInfoFromLeadGen = ({ name }) => { return ssoApi.call({ url: SSO_API_PATH.USER_UPDATE, method: METHOD.POST, data: { name }, }); }; const campaignPostImpression = ({ code, action, title_article, ga_client_id, cookie_id, extra, url, referrer, }) => { return leadApi.call({ url: `api/campaign/${code}/impression`, method: METHOD.POST, data: { action, title_article, cookie_id, ga_client_id, url, extra, referrer, }, }); }; const trackingSubscription = (data) => { return leadApi.call({ url: `api/collection/tracking-subscription`, method: METHOD.POST, data, }); }; const postPhoneToCtaSubmit = ({ data }) => { return leadApi.call({ url: LEADGEN_API_PATH.POST_CTA_SUBMIT, method: METHOD.POST, data, }); }; const Service = { campaignGetById, getCampaignByCode, getSubscriptionBoxInfo, postSubscriptionBoxLead, postUserInfoFromLeadGen, campaignPostImpression, trackingSubscription, validateEmailOrPhoneOnSubot, validateEmailOrPhoneOnLeadGen, validatePhoneNumberOnLeadGen, sendSMSOtpLead, verifyOtpLead, postPhoneToCtaSubmit, }; const checkUsedEmailOrPhone = (campaignId, campaign_subot_id, data) => __awaiter(void 0, void 0, void 0, function* () { const key = 'email' in data ? 'email' : 'phone'; const value = 'email' in data ? data.email : data.phone; const errorMsg = 'email' in data ? 'validator.emailUsed' : 'validator.phoneUsed'; /** Check on Leadgen Tool */ const resLeadGen = yield Service.validateEmailOrPhoneOnLeadGen({ campaign_id: [campaignId], [key]: value, // Can be email or phone }); if (resLeadGen._errorCode === 'SubmitLeadWithBotId_ERR_001' || resLeadGen._errorCode === 'SubmitLeadWithBotId_ERR_002') { return errorMsg; } /** Check on Subot */ if (campaign_subot_id.length) { const resSubot = yield Service.validateEmailOrPhoneOnSubot({ bot_id: campaign_subot_id, [key]: value, // Can be email or phone }); if (resSubot._errorCode === 'CheckSuBotLeadTool_ERR_001') { return errorMsg; } } }); const checkUsedPhoneOnly = (campaignId, phone) => __awaiter(void 0, void 0, void 0, function* () { var _a; const resLeadGen = yield Service.validatePhoneNumberOnLeadGen({ campaign_id: campaignId, phone, }); if (((_a = resLeadGen === null || resLeadGen === void 0 ? void 0 : resLeadGen._messages) === null || _a === void 0 ? void 0 : _a[0]) === 'Phone was exist') { return 'validator.phoneUsed'; } }); const validatedCache = { email: {}, phone: {}, phoneOnly: {}, }; const checkUsedEmailOrPhoneWithCache = (campaignId, campaign_subot_id, data) => __awaiter(void 0, void 0, void 0, function* () { const key = 'email' in data ? 'email' : 'phone'; const value = 'email' in data ? data.email : data.phone; const errorMsg = 'email' in data ? 'validator.emailUsed' : 'validator.phoneUsed'; if (validatedCache[key][value]) { if (validatedCache[key][value].value) { return errorMsg; } else if (!validatedCache[key][value].value && validatedCache[key][value].expire > Date.now()) { return ''; } } const res = yield checkUsedEmailOrPhone(campaignId, campaign_subot_id, data); if (res) { validatedCache[key][value] = { value: true, }; } else { validatedCache[key][value] = { value: false, expire: Date.now() + 1000 * 60, }; } return res; }); const checkUsedPhoneOnlyWithCache = (campaignId, phone) => __awaiter(void 0, void 0, void 0, function* () { if (validatedCache.phoneOnly[phone]) { if (validatedCache.phoneOnly[phone].value) { return 'validator.phoneUsed'; } else if (!validatedCache.phoneOnly[phone].value && validatedCache.phoneOnly[phone].expire > Date.now()) { return ''; } } const res = yield checkUsedPhoneOnly(campaignId, phone); if (res) { validatedCache.phoneOnly[phone] = { value: true, }; } else { validatedCache.phoneOnly[phone] = { value: false, expire: Date.now() + 1000 * 60, }; } return res; }); const clearCacheUsedEmailOrPhone = () => { validatedCache.email = {}; validatedCache.phone = {}; validatedCache.phoneOnly = {}; }; var enPH = { "validator.required": "This field is required.", "validator.remote": "Please fix this field.", "validator.email": "Please enter a valid email address.", "validator.phone": "Please input correct phone number.", "validator.url": "Please enter a valid URL.", "validator.date": "Please enter a valid date.", "validator.dateISO": "Please enter a valid date (ISO).", "validator.number": "Please enter a valid number.", "validator.digits": "Please enter only digits.", "validator.creditcard": "Please enter a valid credit card number.", "validator.equalTo": "Please enter the same value again.", "validator.accept": "Please enter a value with a valid extension.", "validator.maxlength": "jQuery.validator.format('Please enter no more than {0} characters.", "validator.minlength": "jQuery.validator.format('Please enter at least {0} characters.", "validator.rangelength": "jQuery.validator.format('Please enter a value between {0} and {1} characters long.", "validator.range": "jQuery.validator.format('Please enter a value between {0} and {1}.", "validator.max": "jQuery.validator.format('Please enter a value less than or equal to {0}.", "validator.min": "jQuery.validator.format('Please enter a value greater than or equal to {0}.", "validator.emailUsed": "Email already in use for this campaign.", "validator.phoneUsed": "Your phone number already in use for this campaign.", "validator.dateInvalid": "This date is not valid, please update.", "lead.otp.title": "Enter OTP", "lead.otp.desc": "We have sent an OTP to your mobile number {phone}", "lead.otp.verify": "Verify", "lead.otp.resend": "Resend OTP{timer}", "lead.otp.phoneLabel": "Phone OTP", "lead.otp.phonePlaceholder": "Enter OTP", "lead.empty.title": "Oops, seem your information is empty, do you want to submit the information again?", "lead.empty.cancel": "Cancel", "lead.empty.submitAgain": "Submit again", "inlineFreebie.freeSample.title": "Free Sample", "inlineFreebie.luckyDrawGift.title": "Lucky-draw Gift", "inlineFreebie.value": "Value", "common.day": "Day", "common.month": "Month", "common.year": "Year" }; var hiIN = { "validator.required": "इस क्षेत्र की आवश्यकता है।", "validator.email": "कृपया एक मान्य ईमेल पता दर्ज करें", "validator.number": "कृपया एक वैध संख्या दर्ज करें", "validator.digits": "कृपया केवल अंक दर्ज करें", "validator.maxlength": "कृपया {0} अक्षर से अधिक दर्ज न करें", "validator.minlength": "कृपया कम से कम {0} अक्षर दर्ज करें", "validator.phone": "कृपया एक वैध संख्या दर्ज करें", "validator.dateInvalid": "यह तिथि मान्य नहीं है, कृपया अपडेट करें।", "validator.emailUsed": "Email already in use for this campaign.", "validator.phoneUsed": "Your phone number already in use for this campaign.", "lead.otp.title": "Enter OTP", "lead.otp.desc": "We have sent an OTP to your mobile number {phone}", "lead.otp.verify": "Verify", "lead.otp.resend": "Resend OTP{timer}", "lead.empty.title": "ऊप्स! लगता है आपकी जानकारी खाली है। क्या आप जानकारी फिर से सबमिट करना चाहते हैं?", "lead.empty.cancel": "रद्द करें", "lead.empty.submitAgain": "फिर से सबमिट करें", "inlineFreebie.freeSample.title": "मुफ्त नमूना", "inlineFreebie.luckyDrawGift.title": "लकी-ड्रा गिफ्ट", "inlineFreebie.value": "मूल्य", "common.day": "साल", "common.month": "महीना", "common.year": "" }; var idID = { "validator.required": "Kolom ini wajib diisi", "validator.email": "Tolong daftarkan email yang valid", "validator.number": "Tolong daftarkan nomor telepon yang valid", "validator.digits": "Tolong masukkan angka saja", "validator.maxlength": "Jangan memasukkan lebih dari {0} karakter", "validator.minlength": "Tolong ketik sedikitnya {0} karakter", "validator.phone": "Tolong daftarkan nomor telepon yang valid", "validator.emailUsed": "Email sudah digunakan untuk kampanye ini.", "validator.phoneUsed": "Nomor telepon Anda sudah digunakan untuk kampanye ini.", "validator.dateInvalid": "Tanggal ini tidak valid, silakan perbarui", "lead.otp.title": "Masukkan OTP", "lead.otp.desc": "Kami telah mengirimkan OTP ke nomor ponsel Anda {phone}", "lead.otp.verify": "Verifikasi", "lead.otp.resend": "Kirim Ulang OTP {timer}", "lead.otp.phoneLabel": "OTP Telepon", "lead.otp.phonePlaceholder": "Masukkan OTP", "lead.empty.title": "Oops, sepertinya informasi Anda kosong. Apakah Anda ingin mengirimkan informasi lagi?", "lead.empty.cancel": "Batal", "lead.empty.submitAgain": "Kirim lagi", "inlineFreebie.freeSample.title": "Sampel Gratis", "inlineFreebie.luckyDrawGift.title": "Hadiah Undian", "inlineFreebie.value": "Nilai", "common.day": "Hari", "common.month": "Bulan", "common.year": "Tahun" }; var kmKH = { "validator.required": "ព័ត៌មាន​ចាំបាច់​ដែល​ត្រូវ​បំពេញ", "validator.email": "សូម​វាយ​អាសយដ្ឋាន​អ៊ីម៉ែល​ឲ្យ​បាន​ត្រឹមត្រូវ", "validator.number": "សូម​វាយបញ្ចូល​លេខ​ឲ្យ​បាន​ត្រឹមត្រូវ", "validator.digits": "វាយ​បញ្ចូល​បាន​តែ​លេខ​ប៉ុណ្ណោះ", "validator.maxlength": "សូម​វាយ​បញ្ចូលកុំ​ឲ្យ​លើស {0} តួអក្សរ", "validator.minlength": "សូម​វាយ​បញ្ចូល​តិច​បំផុត {0} តួអក្ស", "validator.phone": "សូម​វាយបញ្ចូល​លេខ​ឲ្យ​បាន​ត្រឹមត្រូវ", "validator.emailUsed": "អ៊ីមែលត្រូវបានប្រើប្រាស់សម្រាប់យុទ្ធនាការនេះរួចហើយ។", "validator.phoneUsed": "លេខទូរស័ព្ទរបស់អ្នកត្រូវបានប្រើប្រាស់សម្រាប់យុទ្ធនាការនេះរួចហើយ។", "validator.dateInvalid": "កាលបរិច្ឆេទនេះមិនត្រឹមត្រូវទេ សូមធ្វើបច្ចុប្បន្នភាព។", "lead.otp.title": "បញ្ចូល OTP", "lead.otp.desc": "យើងបានផ្ញើ OTP ទៅកាន់លេខទូរសព្ទរបស់អ្នក {phone}", "lead.otp.verify": "ផ្ទៀងផ្ទាត់", "lead.otp.resend": "ផ្ញើ OTP ម្តងទៀត {timer}", "lead.otp.phoneLabel": "OTP ទូរស័ព្ទ", "lead.otp.phonePlaceholder": "បញ្ចូល OTP", "lead.empty.title": "អូុបស! ហាក់ដូចជាព័ត៌មានរបស់អ្នកទទេ។ តើអ្នកចង់ដាក់ស្នើព័ត៌មានម្តងទៀតទេ?", "lead.empty.cancel": "លុប​ចោល", "lead.empty.submitAgain": "ដាក់ស្នើម្ដងទៀត", "inlineFreebie.freeSample.title": "សំបុត្រស្រង់ពិន័យ", "inlineFreebie.luckyDrawGift.title": "សំបុត្រស្រង់ពិន័យ", "inlineFreebie.value": "តម្លៃ", "common.day": "ឆ្នាំ", "common.month": "ខែ", "common.year": "ថ្ងៃ" }; var msMY = { "validator.required": "Bahagian ini wajib diisi.", "validator.email": "Sila masukkan alamat emel yang sah.", "validator.number": "Sila masukkan no telefon yang sah.", "validator.digits": "Sila masukkan nombor digit sahaja.", "validator.maxlength": "Sila masukkan tidak lebih dari {0} aksara", "validator.minlength": "Sila masukkan sekurang-kurangnya {0} aksara", "validator.phone": "Sila masukkan no telefon yang sah.", "validator.emailUsed": "Emel sudah digunakan untuk kempen ini.", "validator.phoneUsed": "Nombor telefon anda sudah digunakan untuk kempen ini.", "validator.dateInvalid": "Tarikh ini tidak sah, sila kemas kini", "lead.otp.title": "Masukkan OTP", "lead.otp.desc": "Kami telah menghantar OTP ke nombor telefon bimbit anda {phone}", "lead.otp.verify": "Sahkan", "lead.otp.resend": "Hantar semula OTP {timer}", "lead.otp.phoneLabel": "OTP Telefon", "lead.otp.phonePlaceholder": "Masukkan OTP", "lead.empty.title": "Oops, nampaknya maklumat anda kosong. Adakah anda ingin menghantar maklumat semula?", "lead.empty.cancel": "Batal", "lead.empty.submitAgain": "Hantar semula", "inlineFreebie.freeSample.title": "Sampel Percuma", "inlineFreebie.luckyDrawGift.title": "Hadiah Undian", "inlineFreebie.value": "Nilai", "common.day": "Hari", "common.month": "Bulan", "common.year": "Tahun" }; var myMM = { "validator.required": "ဒီနေရာမှာ ဖြည့်ဖို့ လိုအပ်ပါတယ်", "validator.email": "မှန်ကန်သော အီးမေးလ်လိပ်စာထည့်သွင်းပါ", "validator.number": "မှန်ကန်သော ဖုန်းနံပါတ်ထည့်သွင်းပါ", "validator.digits": "နံပါတ်များသာဖြည့်ပါ", "validator.maxlength": "ကျေးဇူးပြု၍ {0} ထပ်မပိုသော ဂဏန်းများသာဖြည့်ပါ", "validator.minlength": "ကျေးဇူးပြု၍ အနည်းဆုံး {0} ဂဏန်းဖြည့်ပါ", "validator.phone": "မှန်ကန်သော ဖုန်းနံပါတ်ထည့်သွင်းပါ", "validator.emailUsed": "ဤအေကာင့်အတွက် အီးမေးလ်ကို အသုံးပြုပြီးဖြစ်ပါသည်။", "validator.phoneUsed": "ဤအေကာင့်အတွက် သင့်ဖုန်းနံပါတ်ကို အသုံးပြုပြီးဖြစ်ပါသည်။", "validator.dateInvalid": "ယနေ့စွဲမှားနေသည်၊ ကျေးဇူးပြု၍ ပြင်ဆင်ပါ။", "lead.otp.title": "OTP ကိုထည့်ပါ", "lead.otp.desc": "ကျွန်ုပ်တို့သည် OTP ကိုသင့်ဖုန်းနံပါတ် {phone} သို့ပို့ခဲ့သည်", "lead.otp.verify": "အတည်ပြုပါ", "lead.otp.resend": "OTP ကိုထပ်မံပို့ရန် {timer}", "lead.otp.phoneLabel": "ဖုန်း OTP", "lead.otp.phonePlaceholder": "OTP ကိုထည့်ပါ", "lead.empty.title": "အုပ်စ်! သင့်အချက်အလက်သည် ဗလာဖြစ်နေသလိုဖြစ်သည်။ ထပ်မံတင်သွင်းလိုပါသလား?", "lead.empty.cancel": "မလုပ်ဆောင်ပါ", "lead.empty.submitAgain": "ထပ်မံတင်သွင်းပါ", "inlineFreebie.freeSample.title": "အခမဲ့အစားအစာ", "inlineFreebie.luckyDrawGift.title": "အခမဲ့အစားအစာ", "inlineFreebie.value": "တန်ဖိုး", "common.day": "ရက်", "common.month": "လ", "common.year": "နှစ်" }; var thTH = { "validator.required": "ต้องระบุข้อมูลในช่องนี้", "validator.email": "กรุณาใส่อีเมล์ที่ถูกต้อง", "validator.number": "กรุณาใส่ตัวเลขที่ถูกต้อง", "validator.digits": "กรุณาส่เฉพาะตัวเลข", "validator.maxlength": "กรุณาใส่ตัวเลขมากกว่า {0} หลัก", "validator.minlength": "กรุณาใส่ตัวเลขอย่างน้อย {0} หลัก", "validator.phone": "กรุณาใส่ตัวเลขที่ถูกต้อง", "validator.emailUsed": "อีเมลนี้ถูกใช้สำหรับแคมเปญนี้แล้ว", "validator.phoneUsed": "หมายเลขโทรศัพท์ของคุณถูกใช้สำหรับแคมเปญนี้แล้ว", "validator.dateInvalid": "วันที่นี้ไม่ถูกต้อง โปรดอัปเดต", "lead.otp.title": "ป้อน OTP", "lead.otp.desc": "เราได้ส่ง OTP ไปยังหมายเลขโทรศัพท์มือถือของคุณ {phone}", "lead.otp.verify": "ยืนยัน", "lead.otp.resend": "ส่ง OTP อีกครั้ง {timer}", "lead.otp.phoneLabel": "OTP โทรศัพท์", "lead.otp.phonePlaceholder": "ป้อน OTP", "lead.empty.title": "อุ๊ปส์! ดูเหมือนว่าข้อมูลของคุณว่างเปล่า คุณต้องการส่งข้อมูลอีกครั้งหรือไม่?", "lead.empty.cancel": "ยกเลิก", "lead.empty.submitAgain": "ส่งอีกครั้ง", "inlineFreebie.freeSample.title": "ตัวอย่างฟรี", "inlineFreebie.luckyDrawGift.title": "ของรางวัลที่ถูกรางวัล", "inlineFreebie.value": "ค่า", "common.day": "วัน", "common.month": "เดือน", "common.year": "ปี" }; var viVN = { "validator.required": "Vui lòng điền mục này", "validator.email": "Vui lòng điền email có thật.", "validator.number": "Vui lòng điền số có thật", "validator.digits": "Vui lòng chỉ điền số", "validator.maxlength": "Vui lòng điền dưới {0} số", "validator.minlength": "Vui lòng điền hơn {0} số", "validator.remote": "Hãy sửa cho đúng.", "validator.url": "Hãy nhập URL.", "validator.date": "Hãy nhập ngày.", "validator.dateISO": "Hãy nhập ngày (ISO).", "validator.creditcard": "Hãy nhập số thẻ tín dụng.", "validator.equalTo": "Hãy nhập thêm lần nữa.", "validator.extension": "Phần mở rộng không đúng.", "validator.rangelength": "Hãy nhập từ {0} đến {1} kí tự.", "validator.range": "Hãy nhập từ {0} đến {1}.", "validator.max": "Hãy nhập từ {0} trở xuống.", "validator.min": "Hãy nhập từ {0} trở lên.", "validator.phone": "Nhập đúng định dạng số điện thoại", "validator.emailUsed": "Email này đã được sử dụng.", "validator.phoneUsed": "Số điện thoại này đã được sử dụng.", "validator.dateInvalid": "Ngày này không hợp lệ, vui lòng cập nhật.", "lead.otp.title": "Nhập OTP", "lead.otp.desc": "Chúng tôi đã gửi OTP đến số điện thoại của bạn {phone}", "lead.otp.verify": "Xác minh", "lead.otp.resend": "Gửi lại OTP {timer}", "lead.otp.phoneLabel": "Nhập OTP", "lead.otp.phonePlaceholder": "Nhập OTP", "lead.empty.title": "Oops, có vẻ như thông tin của bạn đang trống. Bạn có muốn gửi lại thông tin không?", "lead.empty.cancel": "Hủy", "lead.empty.submitAgain": "Gửi lại", "inlineFreebie.freeSample.title": "Dùng thử miễn phí", "inlineFreebie.luckyDrawGift.title": "Phần thưởng may mắn", "inlineFreebie.value": "Trị giá", "common.day": "Ngày", "common.month": "Tháng", "common.year": "Năm" }; var zhTW = { "validator.required": "此為必填欄位", "validator.email": "請填入有效的 email 地址", "validator.number": "請填入有效的電話號碼", "validator.digits": "此欄位僅能輸入數字", "validator.maxlength": "請輸入少於 {0} 位數", "validator.minlength": "請輸入至少 {0} 位數", "validator.phone": "請填入有效的電話號碼", "validator.emailUsed": "此電子郵件已被使用於此活動。", "validator.phoneUsed": "您的手機號碼已被使用於此活動。", "validator.dateInvalid": "此日期無效,請更新.", "lead.otp.title": "輸入 OTP", "lead.otp.desc": "我們已將 OTP 發送到您的手機號碼 {phone}", "lead.otp.verify": "驗證", "lead.otp.resend": "重新發送 OTP {timer}", "lead.otp.phoneLabel": "電話 OTP", "lead.otp.phonePlaceholder": "輸入 OTP", "lead.empty.title": "哎呀,您的資訊似乎是空的,您想要重新提交資訊嗎?", "lead.empty.cancel": "取消", "lead.empty.submitAgain": "重新提交", "inlineFreebie.freeSample.title": "免費試用", "inlineFreebie.luckyDrawGift.title": "幸運抽獎禮品", "inlineFreebie.value": "價值", "common.day": "日", "common.month": "月", "common.year": "年" }; const translationsMap = { 'en-PH': enPH, 'vi-VN': viVN, 'hi-IN': hiIN, 'id-ID': idID, 'ms-MY': msMY, 'my-MM': myMM, 'km-KH': kmKH, 'zh-TW': zhTW, 'zh-SG': zhTW, 'th-TH': thTH, 'tl-PH': enPH, }; const getTranslations = (locale) => { const translations = Object.assign(Object.assign({}, translationsMap$1[locale]), translationsMap[locale]); if (translations) { return translations; } return translationsMap['en-PH']; }; const FormatMessageContext = createContext(null); const LeadGenTranslationProvider = ({ locale, formatMessage, children, }) => { const translationContextValue = useMemo(() => ({ locale, values: getTranslations(locale) }), [locale]); return (React__default.createElement(FormatMessageContext.Provider, { value: formatMessage || null }, formatMessage ? (children) : (React__default.createElement(TranslationsContext.Provider, { value: translationContextValue }, children)))); }; const useLeadGenTranslations = () => { const externalFormatMessage = useContext(FormatMessageContext); const { t: internalT, locale } = useTranslations(); const t = useMemo(() => { if (externalFormatMessage) { return (key, options) => { return externalFormatMessage({ id: key, defaultMessage: key }, options); }; } return internalT; }, [externalFormatMessage, internalT]); return { t, locale }; }; // You can give context variables any name const [LeadFormProvider$1, useLeadFormContext$1, useLeadForm$1] = createFormContext(); const useLeadFormConfig$1 = ({ listBlockAdded = [], validatingPhoneRef, validatingEmailRef, campaignId, campaign_subot_id = [], userInfo, }) => { const { t } = useLeadGenTranslations(); const initialValues = useMemo(() => formatLeadGenFormValue(mappingSSOToLead(userInfo), listBlockAdded), [userInfo === null || userInfo === void 0 ? void 0 : userInfo.id]); useEffect(() => { if (!window.intlTelInputUtils) { require('intl-tel-input/build/js/utils'); } }, []); const validateObj = useMemo(() => { const InputBlocks = [ 'TextBlock', 'NumberBlock', 'EmailBlock', 'PhoneBlock', 'DateBlock', 'CheckboxBlock', 'RadioBlock', 'DropdownBlock', 'PhoneOtpBlock', 'WhatsappOtpBlock', 'ZaloOtpBlock', 'LocationBlock', 'TncBlock', ]; // ALL are required and can skip if not touched yet const withSharedCheck = (name, cb, // eslint-disable-next-line @typescript-eslint/no-explicit-any block) => { return (value) => { var _a; const isBLockRequired = (_a = block === null || block === void 0 ? void 0 : block.data) === null || _a === void 0 ? void 0 : _a.required; if (!formRef.current.isTouched(name)) return; if (typeof value === 'undefined' || value === '' || (Array.isArray(value) && value.length === 0)) { return isBLockRequired ? t('validator.required') : cb === null || cb === void 0 ? void 0 : cb(value); } return cb === null || cb === void 0 ? void 0 : cb(value); }; }; return listBlockAdded .filter((b) => InputBlocks.includes(b.name)) .reduce((r, b) => { var _a; const isRequired = (_a = b.data.required) !== null && _a !== void 0 ? _a : true; if (b.name === 'NumberBlock') { return Object.assign(Object.assign({}, r), { [b.data.value]: withSharedCheck(b.data.value, (value) => { if (value && isNaN(Number(value))) { return t('validator.number'); } }, b) }); } else if (b.name === 'EmailBlock') { return Object.assign(Object.assign({}, r), { [b.data.value]: withSharedCheck(b.data.value, (value) => { if (value && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)) { return t('validator.email'); } if (!value) return; validatingEmailRef.current = true; setTimeout(() => { formRef.current.setFieldError(b.data.value, 'Validating...'); checkUsedEmailOrPhoneWithCache(campaignId, campaign_subot_id, { email: value, }) .then((tKey) => { if (tKey) { formRef.current.setFieldError(b.data.value, t(tKey)); } else { formRef.current.clearFieldError(b.data.value); } validatingEmailRef.current = false; }) .catch((e) => { console.error(e); formRef.current.setFieldError(b.data.value, e.message || 'Something went wrong'); validatingEmailRef.current = false; }); }, 200); }, b) }); } else if (b.name === 'PhoneBlock' || b.name === 'PhoneOtpBlock' || b.name === 'ZaloOtpBlock' || b.name === 'WhatsappOtpBlock') { return Object.assign(Object.assign({}, r), { [b.data.value]: withSharedCheck(b.data.value, (value) => { if (value && window.intlTelInputUtils && !window.intlTelInputUtils.isValidNumber(String(value), LEAD_LOCALE.countryCode)) { return t('validator.phone'); } if (!value) return; validatingPhoneRef.current = true; setTimeout(() => { formRef.current.setFieldError(b.data.value, 'Validating...'); if (b.data.singleSubmission) { checkUsedPhoneOnlyWithCache(campaignId, value) .then((tKey) => { if (tKey) { formRef.current.setFieldError(b.data.value, t(tKey)); } else { formRef.current.clearFieldError(b.data.value); } validatingPhoneRef.current = false; }) .catch((err) => { console.error(err); formRef.current.setFieldError(b.data.value, err.message || 'Something went wrong'); validatingPhoneRef.current = false; }); } else { checkUsedEmailOrPhoneWithCache(campaignId, campaign_subot_id, { phone: value, }) .then((tKey) => { if (tKey) { formRef.current.setFieldError(b.data.value, t(tKey)); } else { formRef.current.clearFieldError(b.data.value); } validatingPhoneRef.current = false; }) .catch((e) => { console.error(e); formRef.current.setFieldError(b.data.value, e.message || 'Something went wrong'); validatingPhoneRef.current = false; }); } }, 200); }, b) }); } else if (b.name === 'DateBlock') { return Object.assign(Object.assign({}, r), { [b.data.value]: withSharedCheck(b.data.value, (value) => { if (value && isNaN(Date.parse(value))) { return t('validator.date'); } }, b) }); } else if (b.name === 'TncBlock') { return Object.assign(Object.assign({}, r), { [`TNC-` + b.id]: withSharedCheck('TNC-' + b.id, (value) => { if (isRequired && !value) { return t('validator.required'); } }, b) }); } else { return Object.assign(Object.assign({}, r), { [b.data.value]: withSharedCheck(b.data.value, undefined, b) }); } }, {}); }, [listBlockAdded.map((b) => b.name).join(',')]); const form = useLeadForm$1({ validateInputOnChange: true, clearInputErrorOnChange: true, validate: validateObj, initialValues, }); const formRef = useRef(form); formRef.current = form; return { form, validateObj }; }; const Component = ({ campaign, onClose: onCloseProp, onOtherSubmit, onSubmit, showThankyou, setShowThankyou, locale, children, showEmpty, setShowEmpty, userInfo, }) => { var _a, _b; const extraFields = campaign.extra_fields; const campaignId = campaign.id; const campaign_subot_id = campaign.bot_id || []; const listBlockAdded = JSON.parse(extraFields.listBlockAdded); const actionBlocks = JSON.parse(extraFields.actionBlocks); const textBlocks = JSON.parse(extraFields.textBlocks); const heading = ((_b = (_a = textBlocks === null || textBlocks === void 0 ? void 0 : textBlocks.titleBlock) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.value) || ''; const description = textBlocks.subtitleBlock.data.value; const validatingPhoneRef = useRef(false); const validatingEmailRef = useRef(false); const leadFormConfig = useLeadFormConfig$1({ listBlockAdded, validatingPhoneRef, validatingEmailRef, campaignId, campaign_subot_id, userInfo, }); const [showOtpPhone, setShowOtpPhone] = useState(null); const [formRef, setFormRef] = useState(null); const onClose = () => { if (showOtpPhone) { setShowOtpPhone(null); } else { onCloseProp === null || onCloseProp === void 0 ? void 0 : onCloseProp(); } }; useEffect(() => { clearCacheUsedEmailOrPhone(); }, []); return campaign ? (React__default.createElement(LeadGenComponentContext.Provider, { value: { campaignId, campaign_subot_id, heading, description, listBlockAdded, textBlocks, actionBlocks, leadFormConfig, validatingEmailRef, validatingPhoneRef, formRef: { current: formRef }, setFormRef, locale, onClose, onOtherSubmit, showOtpPhone, setShowOtpPhone, onSubmit, showThankyou, setShowThankyou, showEmpty, setShowEmpty, } }, children)) : null; }; const Description = (_a) => { var rest = __rest(_a, []); const { description } = useContext(LeadGenComponentContext); return description ? (React__default.createElement(Text, Object.assign({ size: "p3" }, rest), description)) : null; }; const LeadGenContext$1 = createContext({}); var useStyles$3 = createStyles(() => { return { control: {}, }; }); const libraries$1 = ['places']; const LocationBlock = ({ name, placeholder, locale, required = true, }) => { var _a; const form = useLeadFormContext$1(); const [searchValue, setSearchValue] = useState(''); const [address, setAddress] = useState(''); const { predictions } = usePlacesAutocomplete(searchValue, '', locale === 'tl-PH' ? 'en' : (_a = locale === null || locale === void 0 ? void 0 : locale.split('-')) === null || _a === void 0 ? void 0 : _a[0]); const [LoadScript, setLoadScript] = useState(null); const [ready, setReady] = useState(false); const randRef = useRef(