{"version":3,"sources":["utils/index.ts","components/reusable/Typography/index.tsx","contexts/SnackbarContext.tsx","store/location.js","utils/getDeviceType.ts","api/backend.js","store/shrimpHarvest.js","contexts/FlagContext.js","store/sessionTwa.js","libs/twaChecker.js","features/authentication/api/users.js","features/authentication/context/auth.js","store/utm.js","store/dashboard.js","hooks/useQueryString.ts","utils/date.ts","utils/operation.ts","contexts/AlertContext.tsx","utils/debounce.ts","assets/icons/new-dashboard/icon-calculator.png","assets/icons/new-dashboard/icon-shrimp.png","assets/icons/new-dashboard/icon-consultation.png","utils/cookies.js","utils/transform.ts","assets/icons/icon-cross-circle-white.svg","components/reusable/PopupAlert.tsx","libs/analytics.js","assets/icons/new-dashboard/icon-shop.png","assets/icons/new-dashboard/icon-play.png","hooks/useWindowDimensions.js","assets/logo-efarm.webp","assets/icons/icon-check-circle.svg","libs/survicate.js","libs/efiauth.js","store/auth.js","pages/LoadingScreen.js","assets/logo-text.png","libs/queryClient.js","components/reusable/DownloadPrompt.js","components/reusable/snackbar/styles.tsx","components/reusable/snackbar/Snackbar.tsx","features/clevertap-popup/components/PopupModal.tsx","features/clevertap-popup/constant/index.ts","features/clevertap-popup/helpers/getPopupObject.ts","features/clevertap-popup/helpers/actions.ts","features/clevertap-popup/context/ClevertapContext.tsx","components/App.js","serviceWorkerRegistration.js","reportWebVitals.js","libs/errorMonitoring.js","index.js","utils/userAgent.js","libs/helpers.js","store/skeleton.ts","assets/img/shrimp-harvest/benefit-1.svg","assets/img/shrimp-harvest/benefit-2.svg","assets/img/shrimp-harvest/benefit-3.svg","assets/img/dashboard/consultation/mamang.webp","assets/img/dashboard/consultation/sapto.webp","assets/img/dashboard/consultation/syarifa.webp","assets/img/dashboard/consultation/chat-via-wa.svg","assets/img/dashboard/consultation/free-consultation.svg","assets/img/dashboard/consultation/with-expert.svg","config/index.js","libs/env.js","store/acquisition.js","libs/firebase.js","libs/flags.js","features/authentication/api/skeleton.js","store/leads.js","libs/notification.js","features/authentication/tracking/index.js","assets/icons/new-dashboard/icon-calendar.png","config/features.js","features/cultivation-records/store/reportExternal.ts"],"names":["Typography","styled","div","props","block","variant","weight","color","height","defaultValuesSnackbarContext","message","isDisplayed","isHideConfirmButton","onDisplay","onClose","onConfirm","confirmStateClicked","SnackbarContext","createContext","SnackbarProvider","children","useState","setMessage","setIsDisplayed","setHideConfirmButton","windowTimeout","setWindowTimeout","setConfirmStateClicked","handleClose","useCallback","clearTimeout","handleDisplay","window","setTimeout","Provider","value","prevState","LOCATION_STATE_STORAGE_KEY","getLocationState","state","JSON","parse","localStorage","getItem","defaultAddress","province_name","city_name","district_name","subdistrict_name","isRequiredAddressDetail","name","setLocationState","setItem","stringify","deleteLocationState","removeItem","getDeviceType","userAgent","navigator","vendor","opera","test","MSStream","axios","instanceWithToken","request","requester","a","res","data","response","status","efiauth","fetchLeadProfile","get","process","fetchSummary","fetchAllBlock","params","fetchAllPonds","blockName","fetchPonds","pondName","fetchCycle","cycleId","postDevices","lead_id","device_token","post","device_type","patchSwitchInternalMode","patch","SHRIMP_HARVEST_FORM_STORAGE_KEY","storeStateBenefitShrimp","getStateBenefitShrimp","deleteStateBenefitShrimp","storeFormShrimpState","getFormShrimpState","deleteFormShrimpState","persistHistoryState","payload","getPersistedHistory","deletePersistedHistory","persistHistoryDetailState","deletePersistedHistoryDetail","FlagsContext","FlagsProvider","defaults","flags","setFlags","useEffect","remoteConfig","defaultConfig","handleRemoteConfig","fetchFlags","newFlags","currentFlags","KEY_IS_TWA","isTrustedWebActivity","sessionStorage","referrer","document","trim","length","referrerUrl","URL","protocol","hostname","instance","api","instanceToken","instanceCustomHeaders","baseUrl","signin","tempToken","headers","Authorization","completeSignup","editProfile","put","signup","withCredentials","AuthContext","createContainer","initialState","isInitialized","setIsInitialized","error","setError","tempIsLogged","setTempIsLogged","user","setUser","greetingPopup","setGreetingPopup","useCookies","isNotifBlocked","isSubscribeCT","removeCookie","isFetchLeadLoading","setIsFetchLeadLoading","isRefreshTokenEnabled","defaultValuesFlagsContext","isLoggedIn","setNameFromStorage","persistedName","loadPersistedName","setLeadsFromStorage","leadState","getLeadsState","query","getQueryParams","tokenExp","refreshExp","removePersistedTokens","tokens","loadPersistedTokens","access_token","refresh_token","fetchUserProfile","newUser","login","username","password","getTempToken","app_token","signinResponse","accessToken","token","accessTokenExpiryTime","token_expired","refreshTokenExpiryTime","refresh_expired","isPushNotificationEnabled","getFirebaseToken","storePersistedName","trackUserLogin","deleteDummyState","deleteAcquisitionState","loginByPhone","phoneNumber","acquireUser","trackCompleteSignUp","editUser","trackUpdateData","leads","id","clevertapEventUpdateProfile","position","province","locations","city","district","subDistrict","signUp","trackSignUp","phone","setDummyState","logout","isFarmer","is_farmer","isFarmerRegistered","isGuestMode","useMemo","location","leadId","leadName","leadPhone","setLeadsState","clevertapEventUserLogin","identity","uuid","email","verified","is_verified","cultivationType","farm","address","trackAlreadyLoggedIn","isUserInternal","fbd","isInternalMode","is_internal_mode","setInternalModeUser","UTM_CAMPAIGN_KEY","UTM_ROUTE_KEY","storeUtmCampaign","content","getUtmCampaign","removeUtmCampaign","storeUtmRoute","getUtmRoute","removeUtmRoute","DASHBOARD_UVP_CONSULTATION_KEY","DASHBOARD_COACHMARK_KEY","storeCoachmarkDashboardFlag","getCoachmarkDashboardFlag","storeDashboardUVPFlag","getDashboardUVPFlag","useQueryString","search","useLocation","URLSearchParams","dayjs","extend","relativeTime","timezone","utc","locale","DATE_TIME_FORMAT","now","format","fromNow","date","transformToDefaultFormat","transformToISOFormat","toISOString","transformToBackEndFormat","convertStartDate","convertEndDate","isEmpty","obj","Object","keys","constructor","insertArrayAt","array","index","slice","escapeRegExp","text","replace","defaultValueAlertContext","showAlert","handleShowAlert","AlertContext","AlertProvider","setShowAlert","typeAlert","setTypeAlert","showIcon","setShowIcon","msg","type","icon","handleCloseAlert","isOpen","debounce","callback","wait","timeout","args","apply","notifCookiesExpires","days","generateDayFromNowTo","formatNumber","amount","validAmount","defaultValue","parseInt","isNaN","toLocaleString","Alert","Wrapper","PopupAlert","handleClosePopupAlert","src","CircleCrossIcon","CircleCheckIcon","alt","loading","className","memo","initializeGtm","tagManagerArgs","gtmId","ConfigEnv","analytics","TagManager","initialize","initializeFbPixel","f","b","e","n","t","s","fbq","callMethod","arguments","queue","push","_fbq","loaded","version","createElement","async","getElementsByTagName","parentNode","insertBefore","fbPixelId","initializeAppsFlyer","i","o","p","pba","webAppId","appsFlyerId","AppsFlyerSdkObject","AF","q","Date","concat","Array","prototype","call","plugins","split","sort","join","initializeCleverTap","clevertap","init","projectId","region","privacy","useIP","spa","setLogLevel","traffic_route","trackEvent","eventName","eventProperties","dataLayer","event","eventProps","eventType","eventValue","trackAFUserId","userId","trackerLandingPage","trackButtonMasuk","trackTopButtonDaftar","trackFeature","feature","landing_page_features","trackBottomButtonDaftar","trackTestimonialButtonDaftar","trackConsultationClicked","trackTestimoni","trackConsultationCardClicked","trackDeeplink","campaign","utm_campaign","trackerDashboard","trackConsultationChatStarted","trackBannerClick","bannerId","banner_id","trackCloseSheetNotif","trackTabChanges","pathName","tabName","tab_name","trackLogout","trackHelp","page","trackMarketplaceCardClicked","trackWAConsultationClicked","consultant_phone","trackerLaporanHarian","trackBack","trackerLaporanSiklus","trackGrowth","growth","trackFeedig","feedig","trackerQuestionnaire","trackIsFarmers","trackIsNotFarmers","trackInterest","trackReferral","trackerFeatureStopperSheets","trackIsFarmerToggle","trackIsNotFarmerToggle","trackBackAcquisitionForm","trackIsiDataDiri","trackButtonUpdateData","trackUtm","utmParams","trackSelectBlock","trackSelectPond","trackDetailKolam","trackLaporanSiklus","trackPengaturan","trackExpandRecommendation","trackNotificationReceived","trackNotificationClicked","trackNotifHomepage","trackNotifPengaturan","trackFabShrimpForm","trackNextShrimpForm","trackGoToHarvestHistory","trackChangeNumberShrimpForm","trackChangeLocationShrimpForm","trackSubmitShrimpFormData","shrimp_form_data","trackSlideBenefitPanenUdang","trackTertarikPanenUdang","trackCloseBenefitPanenUdang","trackBannerPanenUdang","trackShrimpHarvest","category","chosen_panen_udang_category","trackChooseHistory","transaction_id","closeHistory","trackSharePanenUdang","trackSharePanenUdangSocialMedia","social_media","trackShrimpHarvestCardClicked","trackPanenUdangNonVerifiedFarmer","trackPanenUdangNonVerifiedFarmerClicked","feature_name","trackPanenUdangNonVerifiedUpdateProfile","trackBackFromTokoBudidaya","trackSearchInputHomepage","keyword","trackChosenProductPakan","product_id","trackChosenProductNonPakan","trackChosenProductCategory","category_name","trackBackFromPCP","trackSearchInputPCP","trackChosenProduct","trackOrderPCP","trackOrderPDP","trackBackFromOrderDetail","trackChosenPayment","duration_name","trackFinishedPayment","trackDetailProduct","trackCartPage","trackClickPayment","trackPaymentPage","trackProductRecommendation","product_recommendation_id","entry_point","trackDirectToTokbud","trackProductPersonalize","model_name","trackProductGeneral","clevertapEventPush","onUserLogin","Site","Identity","Email","Name","Phone","phoneInvertNormalize","Verified","Position","Province","City","District","profile","getWindowDimensions","width","innerWidth","innerHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize","addEventListener","removeEventListener","disableTargeting","_sva","getSurveyId","surveyName","displaySurvey","surveyId","options","forceDisplay","displayMethod","survicate","setVisitorTraits","showSurvey","questionAnswered","questionId","answer","closeSurvey","getStateSurvey","getState","visit","visitor","authsUrl","refreshToken","InvalidTokenError","Error","AuthServiceError","config","getAccessToken","setAccessToken","newAccessToken","getRefreshToken","setRefreshToken","newRefreshToken","setAccessTokenExpiryTime","newAccessTokenExpiryTime","setRefreshTokenExpiryTime","newRefreshTokenExpiryTime","checkExpired","overheadSecond","expiryTime","getTime","setTokens","storePersistedTokens","setTokenExpiryTime","storePersistedExpiryTokenTime","TOKEN_STATIC_CUSTOMER","loadPersistedExpiryTokenTime","createAxios","opts","create","packageJson","onBeforeRequest","refreshIfExpired","setHeaders","onRequestError","err","Promise","reject","interceptors","use","createAxiosCustomer","fetchApiRequest","endpoint","mem","doLogout","maxAge","removePersistedExpiryTokenTime","removePersistedName","removeToolsbudToken","deleteLeadsState","TOKENS_STORAGE_KEY","EXPIRY_TIME_TOKENS_STORAGE_KEY","NAME_STORAGE_KEY","undefined","expiryTimes","expiryTimesJson","tokensJson","console","LoadingScreen","Container","queryClient","QueryClient","defaultOptions","queries","retry","refetchOnWindowFocus","cacheTime","keepPreviousData","DownloadPrompt","isInProhibitedPage","downloadBar","prohibitedRoutes","some","route","useRouteMatch","isExact","viewportWidth","isDownloadPromptVisible","logoeFarm","classNames","href","playStoreLink","target","rel","Button","displayName","Dismiss","Snackbar","hideCloseButton","useContext","snackbarRef","useRef","container","getElementById","createPortal","CSSTransition","in","nodeRef","unmountOnExit","ref","onClick","PopupBox","lazy","PopupBanner","PopupInterstitial","PopupInterstitialFullscreen","PopupInterstitialImage","PopupInterstitialImageFullscreen","PopupInterstitialImageOnly","PopupBannerImage","ClevertapPopup","templateType","notificationObject","interstitialType","bannerType","validTemplateType","regexPattern","defaultPopupStyle","backgroundColor","textColor","buttonColor","buttonTextColor","buttonText","getImageSource","html","match","getPopupStyle","interstitialBtnPattern","interstitialStylePattern","bannerBtnPattern","bannerStylePattern","style","filter","x","includes","forEach","properties","getTemplateType","kv","template","toLowerCase","normalizeKV","url","onActionClicked","popupObject","msgId","pivotId","onNewTab","open","onActionVisitUrl","Boolean","renderNotificationClicked","ClevertapContext","ClevertapProvider","customPopupFeature","ClevertapPopupProvider","isActive","clevertapExt","notificationObj","setNotificationObj","popupOpen","setPopupOpen","notificationCallback","msgContent","title","description","notifObject","imgSrc","renderNotificationViewed","openState","toggleClose","NewDashboard","Otp","LocationPicker","Maps","SuccessPage","Questionnaire","LoginUsername","LoginPhone","RegisterPhone","Onboarding","MyPondsRouter","CultivationRecordsRouter","CultivationRecordsExternalRouter","MarketplaceRouterGuestMode","CultivationGPTRouter","MaintenancePageProvider","LoginGate","history","useHistory","utmRoute","toolsbudToken","getToolsbudToken","useFlags","isMyPondsEnabled","isCultivationRecordsEnabled","isMarketplaceUsingGuestMode","isInternalModeEnabled","auth","useContainer","isDummy","getDummyState","is_trial","acquisitionName","pathname","isMarketplace","isCultivation","App","getAnalytics","firebase","client","exact","path","render","quessionaireUrl","isLocalhost","registerValidSW","swUrl","serviceWorker","register","then","registration","onupdatefound","installingWorker","installing","onstatechange","controller","waiting","postMessage","alert","reload","onUpdate","onSuccess","catch","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","dsn","integrations","BrowserTracing","environment","tracesSampleRate","appVersion","ReactDOM","currentVersion","isEnabled","isVerboseMode","loadingComponent","StrictMode","fallback","origin","fetch","contentType","indexOf","ready","unregister","log","checkValidServiceWorker","serviceWorkerRegistration","userAgentData","platform","preventGoBack","pushState","searchParams","fromEntries","entries","redirectToWhatsapp","number","customNumber","encodeURIComponent","whatsapp","handleComplaint","leads_name","leads_id","backUrl","urlFormComplaint","cycleToInterval","cycle","start","tanggal","end","final_harvest","Number","React","flaggedWaterParams","parameters","flag","map","el","label","validationRegexes","inputValue","parsePhoneNumber","charAt","isValid","RegExp","closeTooltip","tooltipClass","getElementsByClassName","display","numberize","isArray","item","result","key","groupCycleIdentity","selectedCycle","selectedPond","desc","komoditas","jenis_budidaya","jumlah_benih","asal_benih","ukuran_benih","berat_benih","area","toFixed","starting_aqualisan_dose","ObjectString","byString","k","generateRangeDate","start_date","end_date","formatedStartDate","formatedEndDate","year","formatRupiah","currencyIndonesian","convert","toString","reverse","formatCurrency","Intl","NumberFormat","phoneReplaceNormalize","String","startsWith","getUrlFeatureByUtmCampaign","utmCampaign","redirectUrl","belajar_budidaya","konsultasi_budidaya","rencana_panen","kalkulator_budidaya","toko_budidaya","DEEP_LINK_CREATE_FARM","goToFeature","dt","setDate","getDate","isShowedMarketplaceIconByProvince","marketplace","excludeProvince","debounceTimer","time","debouncer","secureStorage","SecureLS","encodingType","set","remove","joinNumber","water","chartValues","limits","range","yKey","feedLog","dataKey","dashboardKey","chart","pie","markerColors","form","checkbox","source","radio","roles","role","seedCount","feedPrice","harvestSize","joinNumberUrl","harvestShrimpBenefit","image","imgBenefit","imgBenefit2","imgBenefit3","harvestShrimpBanner","benefits","sellShrimp","harvestType","questions","questionnaire","interest","excludeCategory","dashboard","consultationValues","img","consultationFreeConsultation","consultationWithExpert","consultationChatViaApp","consultationTesti","sapto","testi","syarifa","mamang","consultationMessage","tawkTo","propertyId","widgetId","apiKey","authDomain","storageBucket","messagingSenderId","appId","measurementId","ACQUSISITION_STATE_STORAGE_KEY","ACQUSISITION_DUMMY_STORAGE_KEY","getAcquisitionState","setAcquisitionState","messaging","firebaseConfig","Firebase","initializeApp","isPushNotificationSupported","getMessaging","getToken","vapidKey","currentToken","onMessageListener","resolve","onMessage","isWaterParameterEnabled","isRecommendationEnabled","isCycleIdentityEnabled","isSREnabled","isTotalFeedEnabled","isFCREnabled","isGrowthEnabled","isFeedLogsEnabled","isDiseaseEnabled","isHarvestEnabled","isSaprodiEnabled","isAmoniaAndNitriteEnabled","isLandingPageEnabled","isAcquisitionFormEnabled","isUsingNewDashboardVersion2","isVideoCanLike","isVideoCanComment","isSellShrimpEnabled","isCultivationCalculatorEnabled","isMarketplaceEnabled","isSurveyCalculatorEnabled","isSurvicateCanClose","isDownloadPromptEnabled","isHarvestShrimpEnabledV2","isCultivationEventEnabled","isCultivationEventTutorialVideoEnabled","isCultivationHomePageEnabled","isProductRecommendationEnabled","isRelatedEventEnabled","isShipmentCostAndAddressEnabled","isOtpByWAEnabled","isListPromoEnabled","isNewConsultationEnabled","isUsingNewHistoryOrder","isMaintenanceEnabled","isReportPerCycleEnabled","isConsultationRegisterPremiumEnabled","isNotificationEnabled","isNonVerifiedFarmerInterceptorEnabled","isReportDetailsEnabled","isProductBestSellingEFarmEnabled","is3plInfoEnable","isABTestingProductEnabled","isJoinMentoringMemberPageEnabled","isProductBundlingEnabled","tokbudCsNumber","expiryDurationPayment","isPaymentGatewayEnabled","isConfirmOrderCompleteEnabled","isComplaintFormEnabled","isFeedbackCustomerEnabled","isGetWithLeadIdFarmsCultivation","isComplaintRequestTokenEnabled","getRemoteConfig","fetchAndActivate","remoteFlags","getAll","keyWithObjectValues","keyWithStringValues","_value","asString","setHeaderCultivation","baseURL","apiCultivation","instanceTokenOpts","instanceWithTokenCustomer","instanceWithoutToken","method","assign","requestWithData","LEADS_STATE_STORAGE_KEY","Notification","permission","leadsId","leadsName","lead_name","lead_phone","trackOtpRequested","media","trackOtpValid","trackOtpResend","trackUserLoginPhone","trackerSignUpJourney","trackLoginWithUsername","trackLoginWithPhone","trackUseReferral","trackAttemptOTP","try","LearnCultivationCard","EventCultivationCard","SellShrimpCard","ConsultationCard","featureCard","iconShrimp","oldComponent","iconShop","iconConsultation","iconPlay","iconCalculator","iconCalendar","EFI_TOOLSBUD_TOKEN","setToolsbudToken"],"mappings":"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","file":"static/js/main.95ec20cd.chunk.js","sourcesContent":["export * from './cookies';\nexport * from './date';\nexport * from './debounce';\nexport * from './operation';\nexport * from './transform';\n","import styled from 'styled-components';\n\ninterface TypographyProps {\n block: boolean;\n color:\n | 'grey'\n | 'white'\n | 'green'\n | 'orange'\n | 'yellow'\n | 'red'\n | 'black'\n | 'black-100'\n | 'black-300'\n | 'black-700'\n | 'primary-600'\n | 'primary-700';\n height: '400' | '600' | '800';\n weight: number;\n variant: '100' | '200' | '300' | '400' | '500' | 'caption' | 'small';\n}\n\nconst Typography = styled.div>`\n margin: 0;\n ${(props) => props.block && `display:${!props.block && 'inline-block'};`}\n font-size: ${(props) => props.variant === 'caption' && '8px'};\n font-size: ${(props) => props.variant === 'small' && '10px'};\n font-size: ${(props) => props.variant === '100' && '12px'};\n font-size: ${(props) => props.variant === '200' && '14px'};\n font-size: ${(props) => props.variant === '300' && '16px'};\n font-size: ${(props) => props.variant === '400' && '18px'};\n font-size: ${(props) => props.variant === '500' && '20px'};\n font-weight: ${(props) => props.weight};\n color: ${(props) => props.color === 'grey' && '#A5A5A5'};\n color: ${(props) => props.color === 'white' && '#FFFFFF'};\n color: ${(props) => props.color === 'green' && '#038767'};\n color: ${(props) => props.color === 'orange' && '#C05717'};\n color: ${(props) => props.color === 'yellow' && '#f49342'};\n color: ${(props) => props.color === 'red' && '#D44140'};\n color: ${(props) => props.color === 'black' && '#1D1D1D'};\n color: ${(props) => props.color === 'black-100' && '#D2D2D2'};\n color: ${(props) => props.color === 'black-300' && '#777777'};\n color: ${(props) => props.color === 'black-700' && '#26282B'};\n color: ${(props) => props.color === 'primary-600' && '#026C52'};\n color: ${(props) => props.color === 'primary-700' && '#02513E'};\n line-height: ${(props) => props.height === '400' && '18px'};\n line-height: ${(props) => props.height === '600' && '22px'};\n line-height: ${(props) => props.height === '800' && '26px'};\n letter-spacing: 0.5px;\n`;\n\nexport default Typography;\n","import { useState, createContext, FC, ReactNode, useCallback } from 'react';\nimport { node } from 'prop-types';\n\ninterface SnackbarProviderProps {\n children: ReactNode;\n}\n\ninterface SnackbarContext {\n isDisplayed: boolean;\n message: string;\n isHideConfirmButton: boolean;\n onDisplay(message?: string, isConfirmAble?: boolean): void;\n onClose(): void;\n onConfirm(): void;\n confirmStateClicked: number;\n}\n\nexport const defaultValuesSnackbarContext = {\n message: '',\n isDisplayed: false,\n isHideConfirmButton: true,\n onDisplay: () => {},\n onClose: () => {},\n onConfirm: () => {},\n confirmStateClicked: 0\n};\n\nexport const SnackbarContext = createContext(\n defaultValuesSnackbarContext\n);\n\nexport const SnackbarProvider: FC = ({ children }) => {\n const [message, setMessage] = useState('');\n const [isDisplayed, setIsDisplayed] = useState(false);\n const [isHideConfirmButton, setHideConfirmButton] = useState(true);\n const [windowTimeout, setWindowTimeout] = useState(0);\n const [confirmStateClicked, setConfirmStateClicked] = useState(0);\n\n const handleClose = useCallback(() => {\n setIsDisplayed(false);\n setHideConfirmButton(true);\n\n clearTimeout(windowTimeout);\n }, [windowTimeout]);\n\n const handleDisplay = useCallback(\n (message: string, isHideConfirmButton = true) => {\n setMessage(message);\n setIsDisplayed(true);\n setHideConfirmButton(isHideConfirmButton);\n\n if (isHideConfirmButton) {\n setWindowTimeout(\n window.setTimeout(() => {\n handleClose();\n }, 2000)\n );\n }\n },\n [handleClose]\n );\n\n function handleConfirm(): void {\n handleClose();\n setConfirmStateClicked((prevState) => prevState + 1);\n }\n\n return (\n \n {children}\n \n );\n};\n\nSnackbarProvider.propTypes = {\n children: node.isRequired\n};\n","const LOCATION_STATE_STORAGE_KEY = 'location-state';\n\nexport const getLocationState = () => {\n let state =\n JSON.parse(localStorage.getItem(LOCATION_STATE_STORAGE_KEY)) || '';\n\n if (state !== '') {\n const defaultAddress = `${state?.province_name}, ${state?.city_name}, ${state?.district_name}, ${state?.subdistrict_name}`;\n state.isRequiredAddressDetail =\n state?.name === defaultAddress || state?.name === '';\n }\n\n return state;\n};\n\nexport const setLocationState = (state) => {\n localStorage.setItem(LOCATION_STATE_STORAGE_KEY, JSON.stringify(state));\n};\n\nexport const editLocationState = (key, value) => {\n const state = getLocationState();\n state[key] = value;\n setLocationState(state);\n};\n\nexport const deleteLocationState = () => {\n localStorage.removeItem(LOCATION_STATE_STORAGE_KEY);\n};\n","const getDeviceType = () => {\n const userAgent =\n navigator.userAgent || navigator.vendor || (window as any).opera;\n if (/iPad|iPhone|iPod/.test(userAgent) && !(window as any).MSStream) {\n return 'ios';\n }\n if (/android/i.test(userAgent)) {\n return 'android';\n }\n return 'web';\n};\n\nexport default getDeviceType;\n","import * as efiauth from 'libs/efiauth';\nimport { instanceWithToken } from '@auth/api/skeleton';\nimport getDeviceType from 'utils/getDeviceType';\n\nconst axios = instanceWithToken;\n\nconst request = async (requester) => {\n try {\n const res = await requester();\n return res.data.data;\n } catch (err) {\n if (err.response) {\n err.message = `Error HTTP ${err.response.status}`;\n if (err.response.status === 401) {\n efiauth.doLogout();\n }\n }\n throw err;\n }\n};\n\nexport const fetchLeadProfile = async () => {\n return request(() => axios.get(`${process.env.REACT_APP_BACKEND_URL}/leads`));\n};\n\nexport const fetchSummary = async () => {\n return request(() => axios(`${process.env.REACT_APP_BACKEND_URL}/summary`));\n};\n\nexport const fetchBlockList = async () => {\n return request(() =>\n axios(`${process.env.REACT_APP_BACKEND_URL}/summary/block`)\n );\n};\n\nexport const fetchAllBlock = async (params) => {\n return request(() =>\n axios(`${process.env.REACT_APP_BACKEND_URL}/summary/blocks`, {\n ...(params && { params })\n })\n );\n};\n\nexport const fetchAllPonds = async (blockName) => {\n return request(() =>\n axios(`${process.env.REACT_APP_BACKEND_URL}/summary/block/${blockName}`)\n );\n};\n\nexport const fetchPonds = async (pondName) => {\n return request(() =>\n axios(`${process.env.REACT_APP_BACKEND_URL}/summary/pond/${pondName}`)\n );\n};\n\nexport const fetchCycle = async (cycleId) => {\n return request(() =>\n axios(`${process.env.REACT_APP_BACKEND_URL}/cycles/${cycleId}`)\n );\n};\n\nexport const postDevices = async (lead_id, device_token) => {\n return request(() =>\n axios.post(`${process.env.REACT_APP_BACKEND_URL}/leads/devices`, {\n lead_id,\n device_token,\n device_type: getDeviceType()\n })\n );\n};\n\nexport const patchSwitchInternalMode = async () => {\n return request(() =>\n axios.patch(`${process.env.REACT_APP_BACKEND_URL}/fbd/internal-mode`)\n );\n};\n","const SHRIMP_HARVEST_FORM_STORAGE_KEY = 'shrimp-harvest-state';\n\nexport const storeStateBenefitShrimp = (state) => {\n localStorage.setItem('efarm@modal-shrimp-harvest-benefit', state);\n};\n\nexport const getStateBenefitShrimp = () => {\n let state = localStorage.getItem('efarm@modal-shrimp-harvest-benefit');\n if (state) {\n return false;\n }\n return true;\n};\n\nexport const deleteStateBenefitShrimp = () => {\n localStorage.removeItem('efarm@modal-shrimp-harvest-benefit');\n};\n\nexport const storeFormShrimpState = (state) => {\n localStorage.setItem(SHRIMP_HARVEST_FORM_STORAGE_KEY, JSON.stringify(state));\n};\n\nexport const getFormShrimpState = () => {\n const state =\n JSON.parse(localStorage.getItem(SHRIMP_HARVEST_FORM_STORAGE_KEY)) || '';\n return state;\n};\n\nexport const deleteFormShrimpState = () => {\n localStorage.removeItem(SHRIMP_HARVEST_FORM_STORAGE_KEY);\n};\n\nexport const persistHistoryState = (data) => {\n let payload = JSON.stringify(data);\n localStorage.setItem('efarm@store-persisted-history', payload);\n};\n\nexport const getPersistedHistory = () => {\n const state =\n JSON.parse(localStorage.getItem('efarm@store-persisted-history')) || [];\n return state;\n};\n\nexport const deletePersistedHistory = () => {\n localStorage.removeItem('efarm@store-persisted-history');\n};\n\nexport const persistHistoryDetailState = (data) => {\n let payload = JSON.stringify(data);\n localStorage.setItem('efarm@store-persisted-history-detail', payload);\n};\n\nexport const deletePersistedHistoryDetail = () => {\n localStorage.removeItem('efarm@store-persisted-history-detail');\n};\n","import { useCallback, createContext, useState, useEffect } from 'react';\nimport { remoteConfig, fetchFlags } from 'libs/flags';\n\nexport const FlagsContext = createContext();\n// it can cause error indexedDB is not defined in the unit test, so add async await to the function\n// WIP fix unit test, revert the remote config line\n\nconst FlagsProvider = ({ defaults, children }) => {\n const [flags, setFlags] = useState(defaults);\n\n // Get all remote flags\n useEffect(() => {\n remoteConfig().defaultConfig = defaults;\n }, [defaults]);\n\n if (process.env.NODE_ENV === 'development') {\n remoteConfig().settings = {\n minimumFetchIntervalMillis: 3600000\n };\n }\n\n // Get all remote flags\n const handleRemoteConfig = useCallback(async () => {\n const newFlags = await fetchFlags();\n setFlags((currentFlags) => ({ ...currentFlags, ...newFlags }));\n }, [remoteConfig]);\n\n useEffect(() => {\n handleRemoteConfig();\n }, [handleRemoteConfig]);\n\n return (\n {children}\n );\n};\n\nexport default FlagsProvider;\n","const KEY_IS_TWA = 'trustedWebActivity';\n\nexport const getTwaStatus = () => {\n return sessionStorage.getItem(KEY_IS_TWA);\n};\n\nexport const storeTwaStatus = (value) => {\n return sessionStorage.setItem(KEY_IS_TWA, value);\n};\n","import { getTwaStatus, storeTwaStatus } from 'store/sessionTwa';\nconst TWA_PROTOCOL = 'android-app:';\nconst packageName = process.env.REACT_APP_APPLICATION_ID;\n\n/**\n * This method should run on every page load. `packageName` corresponds to the ID\n * of the app on the Play Store. This is important to differentiate from the page\n * being opened from a Custom Tab, for instance.\n */\nexport const isTrustedWebActivity = () => {\n const sessionStorageStatus = getTwaStatus();\n // alert(sessionStorageStatus);\n if (sessionStorageStatus === 'true') {\n return true;\n }\n\n const referrer = document.referrer.trim();\n if (referrer.length === 0) {\n return false;\n }\n\n const referrerUrl = new URL(referrer);\n // alert(referrerUrl.protocol);\n if (\n referrerUrl.protocol === TWA_PROTOCOL &&\n referrerUrl.hostname === packageName\n ) {\n storeTwaStatus('true');\n return true;\n }\n\n return false;\n};\n","import * as api from './skeleton';\n\nconst instance = api.instanceWithoutToken;\nconst request = api.request;\nconst instanceToken = api.instanceWithToken;\nconst instanceCustomHeaders = api.instanceCustomHeaders;\nconst baseUrl = process.env.REACT_APP_BACKEND_URL;\n\nexport const signin = (tempToken) => {\n const headers = {\n Authorization: `Bearer ${tempToken}`\n };\n return request(() => instanceCustomHeaders('post', '/users/signin', headers));\n};\n\nexport const completeSignup = (payload) => {\n return request(() =>\n instanceToken.post(`${baseUrl}/users/complete-signup`, payload)\n );\n};\n\nexport const editProfile = (payload) => {\n return request(() => instanceToken.put(`${baseUrl}/users/update`, payload));\n};\n\nexport const signup = (payload) => {\n return request(() =>\n instance.post('/users/signup', payload, { withCredentials: true })\n );\n};\n","import axios from 'axios';\nimport { useState, useEffect, useMemo, useCallback } from 'react';\nimport { createContainer } from 'unstated-next';\nimport {\n trackUserLogin,\n trackSignUp,\n trackCompleteSignUp,\n trackUpdateData,\n trackAlreadyLoggedIn\n} from '@auth/tracking';\nimport * as efiauth from 'libs/efiauth';\nimport { fetchLeadProfile } from 'api/backend';\nimport { signup, completeSignup, editProfile, signin } from '@auth/api/users';\nimport {\n loadPersistedName,\n storePersistedName,\n removePersistedTokens,\n loadPersistedTokens\n} from 'store/auth';\nimport {\n deleteDummyState,\n deleteAcquisitionState,\n setDummyState\n} from 'store/acquisition';\nimport { getLeadsState, setLeadsState } from 'store/leads';\nimport { setLocationState } from 'store/location';\nimport {\n clevertapEventUserLogin,\n clevertapEventUpdateProfile\n} from 'libs/analytics';\nimport { defaultValuesFlagsContext } from 'libs/flags';\nimport { getQueryParams } from 'libs/helpers';\nimport { useCookies } from 'react-cookie';\nimport { isNotifBlocked, isSubscribeCT } from 'utils';\nimport { getFirebaseToken } from 'libs/firebase';\nimport { isPushNotificationEnabled } from 'libs/notification';\n\nconst useAuth = (initialState = null) => {\n const [isInitialized, setIsInitialized] = useState(false);\n const [error, setError] = useState(null);\n const [tempIsLogged, setTempIsLogged] = useState(false);\n const [user, setUser] = useState(initialState);\n const [greetingPopup, setGreetingPopup] = useState(false);\n\n const [, , removeCookie] = useCookies([isNotifBlocked, isSubscribeCT]);\n\n const [isFetchLeadLoading, setIsFetchLeadLoading] = useState(false);\n\n const { isRefreshTokenEnabled } = defaultValuesFlagsContext;\n\n const isLoggedIn = efiauth.isLoggedIn || tempIsLogged;\n\n const setNameFromStorage = () => {\n const persistedName = loadPersistedName();\n if (persistedName) {\n setUser({\n ...user,\n name: persistedName\n });\n }\n };\n\n const setLeadsFromStorage = () => {\n const leadState = getLeadsState();\n if (leadState) {\n setUser({\n ...user,\n ...leadState\n });\n }\n };\n\n useEffect(() => {\n (async () => {\n const query = getQueryParams();\n try {\n if (query?.tokenExp || query?.refreshExp) {\n efiauth.setTokenExpiryTime(query.tokenExp, query.refreshExp);\n setTempIsLogged(true);\n }\n if (isRefreshTokenEnabled) {\n removePersistedTokens();\n } else {\n const tokens = loadPersistedTokens();\n if (!tokens) {\n throw new efiauth.InvalidTokenError('not logged in');\n }\n\n efiauth.setAccessToken(tokens.access_token);\n efiauth.setRefreshToken(tokens.refresh_token);\n }\n if (isLoggedIn) {\n const newUser = await fetchUserProfile();\n setUser(newUser);\n setIsInitialized(true);\n }\n } catch (err) {\n if (err instanceof efiauth.InvalidTokenError) {\n // not an error, it means user is not logged in\n } else {\n setError(err);\n }\n } finally {\n setNameFromStorage();\n setLeadsFromStorage();\n }\n })();\n }, [isLoggedIn]);\n\n const login = async (username, password) => {\n // WIP Refactor remove this after BE proxy\n let accessToken;\n let accessTokenExpiryTime;\n let refreshTokenExpiryTime;\n const authServiceUrl = process.env.REACT_APP_BACKEND_URL;\n try {\n const getTempToken = await axios.post(`${authServiceUrl}/app/login`, {\n username,\n password\n });\n const tempToken = getTempToken.data.data.app_token;\n const signinResponse = await signin(tempToken);\n accessToken = signinResponse.token;\n accessTokenExpiryTime = signinResponse.token_expired;\n refreshTokenExpiryTime = signinResponse.refresh_expired;\n } catch (err) {\n if (err?.response?.data?.message) {\n err.message = `${err?.response?.data?.message} (${err.message})`;\n }\n throw err;\n }\n efiauth.setTokens(accessToken, 'disabled');\n efiauth.setTokenExpiryTime(accessTokenExpiryTime, refreshTokenExpiryTime);\n const newUser = await fetchUserProfile();\n if (isPushNotificationEnabled() === 'granted') {\n getFirebaseToken(newUser.lead_id);\n }\n storePersistedName(newUser.name);\n trackUserLogin(username, newUser.lead_id, newUser.name);\n setUser(newUser);\n // delete acquisiton related state\n deleteDummyState();\n deleteAcquisitionState();\n };\n\n const loginByPhone = async (\n accessToken,\n phoneNumber,\n accessTokenExpiryTime,\n refreshTokenExpiryTime\n ) => {\n efiauth.setTokens(accessToken, 'disabled');\n efiauth.setTokenExpiryTime(accessTokenExpiryTime, refreshTokenExpiryTime);\n\n const newUser = await fetchUserProfile();\n if (isPushNotificationEnabled() === 'granted') {\n getFirebaseToken(newUser.lead_id);\n }\n\n storePersistedName(newUser.name);\n trackUserLogin(phoneNumber, newUser.lead_id, newUser.name);\n setUser(newUser);\n };\n\n const acquireUser = async (payload) => {\n let accessToken;\n try {\n const res = await completeSignup(payload);\n accessToken = res.token;\n // WIP REFACTOR handle non farmers analytics user props\n } catch (err) {\n if (err?.response?.data?.message) {\n err.message = `${err?.response?.data?.message} (${err.message})`;\n }\n throw err;\n }\n efiauth.setTokens(accessToken, 'disabled');\n const newUser = await fetchUserProfile();\n if (isPushNotificationEnabled() === 'granted') {\n getFirebaseToken(newUser.lead_id);\n }\n storePersistedName(newUser.name);\n setUser(newUser);\n trackCompleteSignUp(newUser?.lead_id, newUser?.name);\n };\n\n const editUser = async (payload) => {\n let accessToken;\n try {\n const res = await editProfile(payload);\n accessToken = res.token;\n // WIP REFACTOR handle non farmers analytics user props\n trackUpdateData(res?.leads?.id, res?.leads?.name);\n clevertapEventUpdateProfile({\n name: payload?.name || '',\n position: payload?.position || '',\n province: payload?.locations.province_name || '',\n city: payload?.locations.city_name || '',\n district: payload?.locations.district_name || '',\n subDistrict: payload?.locations.subdistrict_name || ''\n });\n } catch (err) {\n if (err?.response?.data?.message) {\n err.message = `${err?.response?.data?.message} (${err.message})`;\n }\n throw err;\n }\n efiauth.setTokens(accessToken, 'disabled');\n const newUser = await fetchUserProfile();\n storePersistedName(newUser.name);\n setUser(newUser);\n };\n\n const signUp = async (payload) => {\n let accessToken;\n let accessTokenExpiryTime;\n let refreshTokenExpiryTime;\n try {\n const res = await signup(payload);\n accessToken = res.token;\n accessTokenExpiryTime = res.token_expired;\n refreshTokenExpiryTime = res.refresh_expired;\n trackSignUp(payload.phone, payload);\n } catch (err) {\n if (err?.response?.data?.message) {\n err.message = `${err?.response?.data?.message} (${err.message})`;\n }\n throw err;\n }\n efiauth.setTokens(accessToken, 'disabled');\n efiauth.setTokenExpiryTime(accessTokenExpiryTime, refreshTokenExpiryTime);\n const newUser = await fetchUserProfile();\n if (isPushNotificationEnabled() === 'granted') {\n getFirebaseToken(newUser.lead_id);\n }\n setDummyState();\n storePersistedName('Hai, Pembudidaya!');\n setUser(newUser);\n };\n\n const logout = () => {\n efiauth.doLogout();\n removeCookie(isNotifBlocked);\n removeCookie(isSubscribeCT);\n setUser(null);\n };\n\n // WIP REFACTOR to flag from BE\n const isFarmer = user?.is_farmer;\n const isFarmerRegistered = user?.name !== null;\n\n const isGuestMode = useMemo(() => {\n return !isFetchLeadLoading && !user;\n }, [user, isFetchLeadLoading]);\n\n const fetchUserProfile = async () => {\n setIsFetchLeadLoading(true);\n try {\n const leads = await fetchLeadProfile();\n const location = leads.location;\n const leadId = leads?.lead_id;\n const leadName = leads?.name;\n const leadPhone = leads?.phone;\n setLeadsState(leads);\n clevertapEventUserLogin({\n identity: leads.uuid || '',\n name: leads.name || '',\n phone: leads.phone || '',\n email: leads.email || '',\n verified: leads.is_verified,\n position: leads.position || '',\n province: leads.location.province_name || '',\n city: leads.location.city_name || '',\n district: leads.location.district_name || '',\n subDistrict: leads.location.subdistrict_name || '',\n cultivationType: leads.farm || ''\n });\n setLocationState({\n ...location,\n name: leads.address\n });\n if (leadId) trackAlreadyLoggedIn(leadId, leadName, leadPhone);\n return leads;\n } catch (err) {\n if (err?.response?.data?.message) {\n err.message = `${err?.response?.data?.message}`;\n }\n throw err;\n } finally {\n setIsFetchLeadLoading(false);\n }\n };\n\n const isUserInternal = !!user?.fbd;\n const isInternalMode = user?.fbd?.is_internal_mode;\n\n const setInternalModeUser = useCallback(\n (is_internal_mode) => {\n setUser({\n ...user,\n fbd: {\n ...user.fbd,\n is_internal_mode\n }\n });\n },\n [user]\n );\n\n return {\n isFetchLeadLoading,\n isInitialized,\n error,\n user,\n login,\n logout,\n loginByPhone,\n isLoggedIn,\n acquireUser,\n editUser,\n signUp,\n isFarmer,\n isFarmerRegistered,\n isGuestMode,\n isUserInternal,\n isInternalMode,\n greetingPopup,\n setGreetingPopup,\n setInternalModeUser\n };\n};\n\nconst AuthContext = createContainer(useAuth);\nexport default AuthContext;\n","const UTM_CAMPAIGN_KEY = 'utm-campaign';\nconst UTM_ROUTE_KEY = 'utm-route';\n\nexport const storeUtmCampaign = (content) => {\n localStorage.setItem(UTM_CAMPAIGN_KEY, content);\n};\n\nexport const getUtmCampaign = () => {\n return localStorage.getItem(UTM_CAMPAIGN_KEY);\n};\n\nexport const removeUtmCampaign = () => {\n localStorage.removeItem(UTM_CAMPAIGN_KEY);\n};\n\nexport const storeUtmRoute = (content) => {\n localStorage.setItem(UTM_ROUTE_KEY, content);\n};\n\nexport const getUtmRoute = () => {\n return localStorage.getItem(UTM_ROUTE_KEY);\n};\n\nexport const removeUtmRoute = () => {\n localStorage.removeItem(UTM_ROUTE_KEY);\n};\n","const DASHBOARD_UVP_CONSULTATION_KEY = 'has-opened-uvp-consultation';\nconst DASHBOARD_COACHMARK_KEY = 'has-opened-dashboard-coachmark';\n\nexport const storeCoachmarkDashboardFlag = () => {\n localStorage.setItem(DASHBOARD_COACHMARK_KEY, true);\n};\n\nexport const getCoachmarkDashboardFlag = () => {\n return localStorage.getItem(DASHBOARD_COACHMARK_KEY);\n};\n\nexport const removeCoachmarkDashboardFlag = () => {\n localStorage.removeItem(DASHBOARD_COACHMARK_KEY);\n};\n\nexport const storeDashboardUVPFlag = () => {\n localStorage.setItem(DASHBOARD_UVP_CONSULTATION_KEY, true);\n};\n\nexport const getDashboardUVPFlag = () => {\n return localStorage.getItem(DASHBOARD_UVP_CONSULTATION_KEY);\n};\n","import { useMemo } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nfunction useQueryString(): URLSearchParams {\n const { search } = useLocation();\n return useMemo(() => new URLSearchParams(search), [search]);\n}\n\nexport default useQueryString;\n","import dayjs from 'dayjs';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport utc from 'dayjs/plugin/utc';\nimport timezone from 'dayjs/plugin/timezone';\n\nimport 'dayjs/locale/id';\n\ndayjs.extend(relativeTime);\ndayjs.extend(timezone);\ndayjs.extend(utc);\ndayjs.locale('id');\n\ntype IDate = string | number | Date | dayjs.Dayjs | null;\n\nconst DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss';\nconst DEFAULT_DATE_FORMAT = 'DD MMMM YYYY';\nconst BACK_END_DATE_FORMAT = 'YYYY-MM-DD';\n\nexport function now(format: string = DATE_TIME_FORMAT): string {\n return dayjs().format(format);\n}\n\nexport function fromNow(date?: IDate): string {\n return dayjs(date).fromNow();\n}\n\nexport function transformToDefaultFormat(date?: IDate): string {\n return dayjs(date).format(DEFAULT_DATE_FORMAT);\n}\n\nexport function transformToISOFormat(date?: IDate): string {\n return dayjs(date).toISOString();\n}\n\n/**\n * Return the date in ISO8601 with current time.\n * @param date The date\n * @returns The date in ISO8601 with current time\n *\n * @example\n * ```\n * const actionTime = transformToISOWithCurrentTimeFormat(new Date());\n * console.log(actionTime);\n * // 2022-09-29T15:54:16+07:00\n * ```\n */\nexport function transformToISOWithCurrentTimeFormat(date?: IDate): string {\n if (!date) return dayjs().format();\n\n const startOfDay = dayjs(date).startOf('day');\n\n return dayjs(startOfDay)\n .add(\n dayjs.duration({\n hours: dayjs().hour(),\n minutes: dayjs().minute(),\n seconds: dayjs().second()\n })\n )\n .format();\n}\n\nexport function transformToUTC(date?: IDate): string {\n return dayjs(date).utc().local().format();\n}\n\nexport function transformToBackEndFormat(date?: IDate): string {\n return dayjs(date).format(BACK_END_DATE_FORMAT);\n}\n\nexport function convertStartDate(date?: IDate): string {\n return dayjs(date).locale('id').format('dddd, D MMMM YYYY • HH:mm');\n}\n\nexport function convertEndDate(date?: IDate): string {\n return dayjs(date).locale('id').format('HH:mm');\n}\n","export function isEmpty(obj: Record | null = {}): boolean {\n return !!obj && Object.keys(obj).length === 0 && obj.constructor === Object;\n}\n\nexport function insertArrayAt(array: T[], index: number, value: T): T[] {\n return [...array.slice(0, index), value, ...array.slice(index)];\n}\n\nexport function escapeRegExp(text: string): string {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\n","import { useCallback, useState, createContext, ReactNode, FC } from 'react';\n\nimport PopupAlert from 'components/reusable/PopupAlert';\n\ninterface IAlertProviderProps {\n children: ReactNode;\n}\n\ninterface IAlertContext {\n message: string;\n showAlert: boolean;\n handleShowAlert: (msg: string, type: string) => void;\n}\n\nexport const defaultValueAlertContext = {\n message: '',\n showAlert: false,\n handleShowAlert: () => {}\n};\n\nexport const AlertContext = createContext(\n defaultValueAlertContext\n);\n\nexport const AlertProvider: FC = ({\n children,\n ...props\n}) => {\n const [showAlert, setShowAlert] = useState(false);\n const [message, setMessage] = useState('');\n const [typeAlert, setTypeAlert] = useState('');\n const [showIcon, setShowIcon] = useState(false);\n\n const handleShowAlert = useCallback((msg, type, icon = true) => {\n setShowAlert(true);\n setMessage(msg);\n setTypeAlert(type);\n setShowIcon(icon);\n }, []);\n\n const handleCloseAlert = useCallback(() => {\n setShowAlert(false);\n setMessage('');\n setTypeAlert('');\n setShowIcon(false);\n }, []);\n\n const value = {\n handleShowAlert,\n message,\n showAlert\n };\n\n return (\n \n \n {children}\n \n );\n};\n","// eslint-disable-next-line @typescript-eslint/ban-types\nexport function debounce(\n callback: T,\n wait: number\n): (...args: any[]) => void {\n let timeout: number;\n\n return function (this: any, ...args: any[]): void {\n clearTimeout(timeout);\n timeout = window.setTimeout(() => callback.apply(this, args), wait);\n };\n}\n","export default __webpack_public_path__ + \"static/media/icon-calculator.be0e39dd.png\";","export default __webpack_public_path__ + \"static/media/icon-shrimp.f9b7f87f.png\";","export default __webpack_public_path__ + \"static/media/icon-consultation.dcd336a5.png\";","import { generateDayFromNowTo } from 'libs/helpers';\n\nexport const isNotifBlocked = '_hasBlocknotif';\nexport const isSubscribeCT = '_hasSubscribeCT';\nexport const notifCookiesExpires = (days = 7) => generateDayFromNowTo(days);\n","export function formatNumber(amount: unknown, defaultValue = '0'): string {\n if (typeof amount !== 'number' && typeof amount !== 'string') {\n return defaultValue;\n }\n\n let validAmount: number;\n\n if (typeof amount === 'number') {\n validAmount = amount;\n } else {\n validAmount = parseInt(amount);\n }\n\n if (isNaN(validAmount)) return defaultValue;\n\n return validAmount.toLocaleString(['ban', 'id']);\n}\n","export default __webpack_public_path__ + \"static/media/icon-cross-circle-white.90041760.svg\";","import { FC, memo, useCallback, useEffect } from 'react';\nimport styled from 'styled-components';\nimport CircleCheckIcon from 'assets/icons/icon-check-circle.svg';\nimport CircleCrossIcon from 'assets/icons/icon-cross-circle-white.svg';\nimport Typography from 'components/reusable/Typography';\n\ninterface IPopupAlertProps {\n isOpen: boolean | false;\n onClose: () => void;\n message?: string | null;\n variant: string;\n showIcon?: boolean;\n}\n\ninterface IPopupAlertStyleProps {\n isOpen: boolean | false;\n variant: string;\n}\n\nconst Alert = styled.div`\n display: ${({ isOpen }) => (isOpen ? 'flex' : 'none')};\n flex-direction: row;\n align-items: center;\n z-index: 13;\n position: fixed;\n height: 56px;\n left: 16px;\n top: 40px;\n background: ${({ variant }) =>\n variant === 'danger' ? '#D44140' : '#038767'};\n width: 92%;\n border-radius: 8px;\n transition: visibility 0s, opacity 0.5s linear;\n`;\n\nconst Wrapper = styled.div`\n padding: 24px 0 24px 24px;\n`;\n\nconst PopupAlert: FC = ({\n isOpen,\n onClose,\n message,\n variant,\n showIcon = true\n}) => {\n const handleClosePopupAlert = useCallback(() => {\n setTimeout(() => {\n onClose();\n }, 2000);\n }, [onClose]);\n\n useEffect(() => {\n if (isOpen) handleClosePopupAlert();\n }, [isOpen, handleClosePopupAlert]);\n\n return (\n \n {showIcon && (\n \n \n \n )}\n \n {message}\n \n \n );\n};\n\nexport default memo(PopupAlert);\n","import TagManager from 'react-gtm-module';\nimport { ConfigEnv } from './env';\nimport { isTrustedWebActivity } from 'libs/twaChecker';\nimport clevertap from 'clevertap-web-sdk';\nimport { phoneInvertNormalize } from './helpers';\n\nexport const initializeGtm = () => {\n const tagManagerArgs = {\n gtmId: ConfigEnv.analytics.gtmId\n };\n return TagManager.initialize(tagManagerArgs);\n};\n\n/* eslint-disable */\nexport const initializeFbPixel = () => {\n if (typeof fbq === 'undefined') {\n !(function (f, b, e, v, n, t, s) {\n if (f.fbq) return;\n n = f.fbq = function () {\n n.callMethod\n ? n.callMethod.apply(n, arguments)\n : n.queue.push(arguments);\n };\n if (!f._fbq) f._fbq = n;\n n.push = n;\n n.loaded = !0;\n n.version = '2.0';\n n.queue = [];\n t = b.createElement(e);\n t.async = !0;\n t.src = v;\n s = b.getElementsByTagName(e)[0];\n s.parentNode.insertBefore(t, s);\n })(\n window,\n document,\n 'script',\n 'https://connect.facebook.net/en_US/fbevents.js'\n );\n fbq('init', ConfigEnv.analytics.fbPixelId);\n fbq('track', 'PageView');\n }\n};\n\nexport const initializeAppsFlyer = () => {\n !(function (t, e, n, s, a, c, i, o, p) {\n (t.AppsFlyerSdkObject = a),\n (t.AF =\n t.AF ||\n function () {\n (t.AF.q = t.AF.q || []).push(\n [Date.now()].concat(Array.prototype.slice.call(arguments))\n );\n }),\n (t.AF.id = t.AF.id || i),\n (t.AF.plugins = {}),\n (o = e.createElement(n)),\n (p = e.getElementsByTagName(n)[0]),\n (o.async = 1),\n (o.src =\n 'https://websdk.appsflyer.com?' +\n (c.length > 0 ? 'st=' + c.split(',').sort().join(',') + '&' : '') +\n (i.length > 0 ? 'af_id=' + i : '')),\n p.parentNode.insertBefore(o, p);\n })(window, document, 'script', 0, 'AF', 'pba', {\n pba: { webAppId: ConfigEnv.analytics.appsFlyerId }\n });\n};\n\nexport const initializeCleverTap = () => {\n // configure projectId and region.\n clevertap.init(ConfigEnv.clevertap.projectId, ConfigEnv.clevertap.region);\n // share IP data\n clevertap.privacy.push({ useIP: true });\n // configure apps project is SPA or not.\n clevertap.spa = true;\n\n if (process.env.REACT_APP_ENV !== 'production') {\n // https://developer.clevertap.com/docs/web-quickstart-guide#debugging\n clevertap.setLogLevel(3);\n }\n};\n/* eslint-enable */\n\nlet checkTraffic = isTrustedWebActivity();\n\nlet traffic_route = {\n traffic_route: checkTraffic ? 'trusted-web-activity' : 'browser-app'\n};\n\nexport const trackEvent = (eventName, eventProperties) => {\n if (window) {\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n event: eventName,\n eventProps: {\n ...eventProperties,\n ...traffic_route\n }\n });\n window.fbq('trackCustom', eventName, eventProperties);\n window.AF('pba', 'event', {\n eventType: 'EVENT',\n eventValue: eventProperties,\n eventName: `af_${eventName}`\n });\n }\n};\n\nexport const trackAFUserId = (userId) => {\n window.AF('pba', 'setCustomerUserId', userId);\n};\n\nexport const trackerLandingPage = {\n trackButtonMasuk: () => {\n trackEvent('btn_login_clicked');\n },\n trackTopButtonDaftar: () => {\n trackEvent('btn_top_register_clicked');\n },\n trackFeature: (feature) => {\n trackEvent('landing_page_features', {\n landing_page_features: feature\n });\n },\n trackBottomButtonDaftar: () => {\n trackEvent('btn_bottom_register_clicked');\n },\n trackTestimonialButtonDaftar: () => {\n trackEvent('btn_testimonial_register_clicked');\n },\n trackConsultationClicked: () => {\n trackEvent('btn_consultation_clicked');\n },\n trackTestimoni: () => {\n trackEvent('slide_testimoni');\n },\n trackConsultationCardClicked: () => {\n trackEvent('card_consultation_pressed');\n },\n trackDeeplink: (campaign) => {\n trackEvent('deeplink_triggered', {\n utm_campaign: campaign\n });\n }\n};\n\nexport const trackerDashboard = {\n trackConsultationChatStarted: () => {\n trackEvent('tawkto_consultation_cultivation_started');\n },\n trackBannerClick: (bannerId) => {\n trackEvent('chosen_banner', {\n banner_id: bannerId\n });\n },\n trackCloseSheetNotif: () => {\n trackEvent('btn_close_sheet_notif');\n },\n trackTabChanges: (pathName) => {\n let tabName;\n\n if (pathName === '/') {\n tabName = 'Beranda';\n } else if (pathName === '/cultivation') {\n tabName = 'Budidaya';\n } else if (pathName === '/settings') {\n tabName = 'Akun';\n }\n\n trackEvent('tab_change', {\n tab_name: tabName\n });\n },\n trackLogout: () => {\n trackEvent('logout');\n },\n trackHelp: (page = '') => {\n trackEvent('btn_help_clicked', {\n page: page\n });\n },\n trackMarketplaceCardClicked: () => {\n trackEvent('card_marketplace_pressed');\n },\n trackWAConsultationClicked: (consultant_phone) => {\n trackEvent('button_consultation_direct_whatsapp', {\n consultant_phone: consultant_phone\n });\n }\n};\n\nexport const trackerLaporanHarian = {\n trackBack: () => {\n trackEvent('back_from_daily_report');\n }\n};\n\nexport const trackerLaporanSiklus = {\n trackBack: () => {\n trackEvent('back_from_cyle');\n },\n trackGrowth: (value) => {\n trackEvent('btn_growth', {\n growth: value\n });\n },\n trackFeedig: (value) => {\n trackEvent('btn_feedig', {\n feedig: value\n });\n }\n};\n\nexport const trackerQuestionnaire = {\n trackIsFarmers: () => {\n trackEvent('click_is_farmers');\n },\n trackIsNotFarmers: () => {\n trackEvent('click_is_not_farmers');\n },\n trackInterest: () => {\n trackEvent('click_interest');\n },\n trackReferral: () => {\n trackEvent('click_referral');\n }\n};\n\nexport const trackerFeatureStopperSheets = {\n trackIsFarmerToggle: () => {\n trackEvent('close_is_farmer_sheet');\n },\n trackIsNotFarmerToggle: () => {\n trackEvent('close_is_not_farmer_sheet');\n }\n};\n\nexport const trackBackAcquisitionForm = () => {\n trackEvent('back_from_acquisition_form');\n};\n\nexport const trackAcquisitionState = () => {\n trackEvent('acquisition_state_saved');\n};\n\nexport const trackIsiDataDiri = () => {\n trackEvent('click_isi_data_diri');\n};\n\nexport const trackButtonUpdateData = () => {\n trackEvent('click_update_data');\n};\n\nexport const trackPlanClicked = (planName) => {\n trackEvent('wa_plan_clicked', {\n plan_name: planName\n });\n};\n\nexport const trackUtm = (utmParams) => {\n if (utmParams !== null) trackEvent('utm_tracked', utmParams);\n};\n\nexport const trackSelectBlock = () => {\n trackEvent('select_block');\n};\n\nexport const trackSelectPond = () => {\n trackEvent('select_pond');\n};\n\nexport const trackDetailKolam = () => {\n trackEvent('detail_pond');\n};\n\nexport const trackLaporanSiklus = () => {\n trackEvent('click_laporan_per_siklus');\n};\n\nexport const trackPengaturan = () => {\n trackEvent('click_settings');\n};\n\nexport const trackExpandRecommendation = () => {\n trackEvent('expand_recommendation');\n};\n\nexport const trackNotificationReceived = () => {\n trackEvent('notification_received');\n};\n\nexport const trackNotificationClicked = () => {\n trackEvent('notification_clicked');\n};\n\nexport const trackNotifHomepage = () => {\n trackEvent('notif_homepage');\n};\n\nexport const trackNotifPengaturan = () => {\n trackEvent('notif_pengaturan');\n};\n\n// Event Tracker Panen Udang\nexport const trackFabShrimpForm = () => {\n trackEvent('fab_shrimp_form');\n};\n\nexport const trackNextShrimpForm = () => {\n trackEvent('btn_next_step_shrimp_form_clicked');\n};\n\nexport const trackGoToHarvestHistory = () => {\n trackEvent('btn_to_harvest_history_clicked');\n};\n\nexport const trackChangeNumberShrimpForm = () => {\n trackEvent('input_change_number_clicked');\n};\n\nexport const trackChangeLocationShrimpForm = () => {\n trackEvent('btn_change_location_clicked');\n};\n\nexport const trackSubmitShrimpFormData = (payload) => {\n trackEvent('shrimp_form_submitted', {\n shrimp_form_data: payload\n });\n};\n\nexport const trackSlideBenefitPanenUdang = () => {\n trackEvent('slide_benefit_panen_udang');\n};\n\nexport const trackTertarikPanenUdang = () => {\n trackEvent('btn_tertarik_panen_udang');\n};\n\nexport const trackCloseBenefitPanenUdang = () => {\n trackEvent('btn_close_popup_benefit_panen_udang');\n};\n\nexport const trackBannerPanenUdang = () => {\n trackEvent('slide_banner_panen_udang');\n};\n\nexport const trackShrimpHarvest = (category) => {\n trackEvent('chosen_panen_udang_category', {\n chosen_panen_udang_category: category\n });\n};\n\nexport const trackChooseHistory = (transaction_id) => {\n trackEvent('chosen_history_panen_udang', {\n transaction_id: transaction_id\n });\n};\n\nexport const closeHistory = (transaction_id) => {\n trackEvent('close_history_panen_udang', {\n transaction_id: transaction_id\n });\n};\n\nexport const trackSharePanenUdang = () => {\n trackEvent('btn_share_panen_udang');\n};\n\nexport const trackSharePanenUdangSocialMedia = (social_media) => {\n trackEvent(`btn_share_panen_udang_${social_media}`);\n};\n\nexport const trackShrimpHarvestCardClicked = () => {\n trackEvent('card_sell_shrimp_pressed');\n};\n\nexport const trackPanenUdangNonVerifiedFarmer = () => {\n trackEvent('open_panen_udang_non_verified_sheet');\n};\n\nexport const trackPanenUdangNonVerifiedFarmerClicked = (feature_name) => {\n trackEvent('btn_panen_udang_feature_clicked', { feature_name });\n};\n\nexport const trackPanenUdangNonVerifiedUpdateProfile = () => {\n trackEvent('btn_panen_udang_update_profile');\n};\n\n// End Event Tracker Panen Udang\n\n// Tracker Marketplace / Toko Budidaya\nexport const trackBackFromTokoBudidaya = () => {\n trackEvent('back_from_toko_budidaya');\n};\n\nexport const trackSearchInputHomepage = (keyword) => {\n trackEvent('search_input_homepage', {\n keyword\n });\n};\n\nexport const trackChosenProductPakan = (product_id) => {\n trackEvent('chosen_product_pakan', {\n product_id\n });\n};\n\nexport const trackChosenProductNonPakan = (product_id) => {\n trackEvent('chosen_product_nonpakan', {\n product_id\n });\n};\n\nexport const trackChosenProductCategory = (category_name) => {\n trackEvent('chosen_product_category', {\n category_name\n });\n};\n\nexport const trackBackFromPCP = () => {\n trackEvent('back_from_pcp');\n};\n\nexport const trackSearchInputPCP = (keyword) => {\n trackEvent('search_input_pcp', {\n keyword\n });\n};\n\nexport const trackChosenProduct = (product_id) => {\n trackEvent('chosen_product', {\n product_id\n });\n};\n\nexport const trackOrderPCP = (product_id) => {\n trackEvent('order_pcp', {\n product_id\n });\n};\n\nexport const trackOrderPDP = (product_id) => {\n trackEvent('order_pdp', {\n product_id\n });\n};\n\nexport const trackBackFromOrderDetail = () => {\n trackEvent('back_from_order_detail');\n};\n\nexport const trackChosenPayment = (duration_name) => {\n trackEvent('chosen_payment', { duration_name });\n};\n\nexport const trackFinishedPayment = (duration_name) => {\n trackEvent('finished_payment', { duration_name });\n};\n\nexport const trackDetailProduct = (product_id) => {\n trackEvent('see_detail_product', {\n product_id\n });\n};\n\nexport const trackCartPage = () => {\n trackEvent('click_cart');\n};\n\nexport const trackClickPayment = () => {\n trackEvent('click_payment_button');\n};\n\nexport const trackPaymentPage = () => {\n trackEvent('see_payment_page');\n};\n\nexport const trackProductRecommendation = (\n product_recommendation_id,\n entry_point\n) => {\n trackEvent('chosen_product_recommendation', {\n product_recommendation_id,\n entry_point\n });\n};\n\nexport const trackDirectToTokbud = () => {\n trackEvent('direct_to_tokbud_recommendation_efarm');\n};\n\nexport const trackProductPersonalize = (product_id, model_name) => {\n trackEvent('chosen_product_personalize', {\n product_id,\n model_name\n });\n};\n\nexport const trackProductGeneral = (product_id, model_name) => {\n trackEvent('chosen_product_general', {\n product_id,\n model_name\n });\n};\n// End Tracker Marketplace / Toko Budidaya\n\n/**\n * clevertapEventPush\n * Fungsi untuk push event ke dashboard clevertap.\n * eventName dan eventProperties di set bebas di components.\n *\n * @param {string} eventName | nama event untuk dijadikan segment.\n * @param {object} eventProperties | object event yang akan di jadikan data tracking.\n */\nexport const clevertapEventPush = ({ eventName, eventProperties }) => {\n clevertap.event.push(eventName, eventProperties);\n};\n\n/**\n * clevertapEventUserLogin\n * Fungsi untuk push data user ketika sudah login.\n * Event : Page Load\n *\n * @param {*}\n * @param {string} {identity} | UUID pengguna\n * @param {string} {name} | nama pengguna\n * @param {string} {phone} | telepon pengguna\n * @param {string} {email} | email pengguna\n * @param {boolean} {verified} | status pengguna\n * @param {string} {position} | posisi pengguna\n * @param {string} {province} | provinsi pengguna\n * @param {string} {city} | kota pengguna\n * @param {string} {district} | kelurahan pengguna\n * @param {string} {subDistrict} | desa pengguna\n * @param {string} {cultivationType} | type cultivation pengguna\n */\nexport const clevertapEventUserLogin = ({\n identity,\n name,\n phone,\n email,\n verified,\n position,\n province,\n city,\n district,\n subDistrict,\n cultivationType\n}) => {\n clevertap.onUserLogin.push({\n Site: {\n Identity: identity,\n Email: email,\n Name: name,\n Phone: phoneInvertNormalize(phone),\n Verified: verified,\n Position: position,\n Province: province,\n City: city,\n District: district,\n 'Sub-District': subDistrict,\n 'Cultivation Type': cultivationType\n }\n });\n};\n\n/**\n * eventEditProfile\n * Fungsi untuk push event update profile\n */\nexport const clevertapEventUpdateProfile = ({\n name,\n position,\n province,\n city,\n district,\n subDistrict\n}) => {\n clevertap.profile.push({\n Site: {\n Name: name,\n Position: position,\n Province: province,\n City: city,\n District: district,\n 'Sub-District': subDistrict\n }\n });\n};\n\n/**\n * clevertapGrantPermission\n * Fungsi untuk memunculkan clevertap popup grant permission.\n * Contoh payload\n *\n * {\n * titleText: 'Would you like to receive Push Notifications?',\n * bodyText:\n * 'We promise to only send you relevant content and give you updates on your transactions',\n * okButtonText: 'Sign me up!',\n * rejectButtonText: 'No thanks',\n * okButtonColor: '#f28046'\n * }\n */\nexport const clevertapGrantPermission = (webPushPayload) => {\n // {\n // titleText: 'Would you like to receive Push Notifications?',\n // bodyText:\n // 'We promise to only send you relevant content and give you updates on your transactions',\n // okButtonText: 'Sign me up!',\n // rejectButtonText: 'No thanks',\n // okButtonColor: '#f28046'\n // }\n clevertap.notifications.push({\n ...webPushPayload,\n serviceWorkerPath: '/service-worker.js'\n });\n};\n","export default __webpack_public_path__ + \"static/media/icon-shop.b31a1469.png\";","export default __webpack_public_path__ + \"static/media/icon-play.d49af8dd.png\";","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n const { innerWidth: width, innerHeight: height } = window;\n return {\n width,\n height\n };\n}\n\nexport default function useWindowDimensions() {\n const [windowDimensions, setWindowDimensions] = useState(\n getWindowDimensions()\n );\n\n useEffect(() => {\n function handleResize() {\n setWindowDimensions(getWindowDimensions());\n }\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n return windowDimensions;\n}\n","export default __webpack_public_path__ + \"static/media/logo-efarm.a64ea944.webp\";","export default __webpack_public_path__ + \"static/media/icon-check-circle.ebf13a9b.svg\";","import { getLeadsState } from 'store/leads';\n\nexport const disableTargeting = () => {\n // Survicate: Disable automatic targeting\n // referensi:\n // 1. https://help.survicate.com/en/articles/3937822-show-your-survey-after-a-javascript-event\n // 2. https://developers.survicate.com/javascript/configuration/?_gl=1*1x4x1mb*_ga*MTI3NzYzOTEyOS4xNjQzOTYzNTA2*_ga_ZRE7VLNMPF*MTY0OTIzNTA5NC4yNS4xLjE2NDkyMzY5NDEuMA..#disable-automatic-targeting\n (function (opts) {\n opts.disableTargeting = true;\n })((window._sva = window._sva || {}));\n};\n\nexport const getSurveyId = ({ surveyName }) => {\n const surveyIds = JSON.parse(process.env.REACT_APP_SURVICATE_ID) || {};\n return surveyIds[surveyName] || '';\n};\n\nexport const displaySurvey = ({\n surveyId = '',\n options = {\n forceDisplay: true,\n displayMethod: 'immediately'\n }\n}) => {\n const survicate = window._sva;\n if (!survicate) return false;\n\n const {\n lead_id = '',\n email = '',\n name = '',\n phone = ''\n } = getLeadsState() || {};\n\n if (survicate) {\n survicate.setVisitorTraits({\n email,\n name,\n phone,\n lead_id\n });\n survicate.showSurvey(surveyId, options);\n\n return true;\n }\n};\n\nexport const questionAnswered = (callback) => {\n const survicate = window._sva;\n if (survicate) {\n survicate.addEventListener(\n 'question_answered',\n (surveyId, questionId, answer) => {\n callback({ surveyId, questionId, answer });\n }\n );\n }\n};\n\nexport const closeSurvey = (callback) => {\n const survicate = window._sva;\n if (survicate) {\n survicate.addEventListener('survey_closed', (surveyId) =>\n callback(surveyId)\n );\n }\n};\n\nexport const getStateSurvey = () => {\n const survicate = window._sva || {};\n const { getState = () => {} } = survicate;\n\n if (!getState()) return false;\n const { visit = {}, visitor = {} } = getState() || {};\n return {\n visit,\n visitor\n };\n};\n","/* eslint-disable indent */\nimport axios from 'axios';\nimport mem from 'mem/dist';\nimport {\n storeCoachmarkDashboardFlag,\n getCoachmarkDashboardFlag\n} from 'store/dashboard';\nimport {\n deletePersistedHistory,\n deletePersistedHistoryDetail,\n deleteStateBenefitShrimp\n} from 'store/shrimpHarvest';\nimport {\n removePersistedName,\n removePersistedTokens,\n removePersistedExpiryTokenTime,\n loadPersistedExpiryTokenTime,\n storePersistedTokens,\n storePersistedExpiryTokenTime,\n loadPersistedTokens\n} from 'store/auth';\nimport { deleteLeadsState } from 'store/leads';\nimport { deleteLocationState } from 'store/location';\nimport { deleteDummyState, deleteAcquisitionState } from 'store/acquisition';\nimport packageJson from 'package-json';\n\nimport { removeToolsbudToken } from '@cultivation-records/store/reportExternal';\n\nconst DEFAULT_OVERHEAD_SECOND = 10;\n\nlet authsUrl = process.env.REACT_APP_BACKEND_URL;\nlet accessToken = null;\nlet accessTokenExpiryTime = null;\nlet refreshToken = null;\nlet refreshTokenExpiryTime = null;\n\nexport class InvalidTokenError extends Error {}\nexport class AuthServiceError extends Error {}\n\n// \n\nexport const initialize = (config = {}) => {\n authsUrl = config.authsUrl;\n};\n\nexport const getAccessToken = () => {\n return accessToken;\n};\n\nexport const setAccessToken = (newAccessToken) => {\n accessToken = newAccessToken;\n};\n\nexport const getRefreshToken = () => {\n return refreshToken;\n};\n\nexport const setRefreshToken = (newRefreshToken) => {\n refreshToken = newRefreshToken;\n};\n\nexport const getAccessTokenExpiryTime = () => {\n return accessTokenExpiryTime;\n};\n\nexport const setAccessTokenExpiryTime = (newAccessTokenExpiryTime) => {\n accessTokenExpiryTime = newAccessTokenExpiryTime;\n};\n\nexport const getRefreshTokenExpiryTime = () => {\n return refreshTokenExpiryTime;\n};\n\nexport const setRefreshTokenExpiryTime = (newRefreshTokenExpiryTime) => {\n refreshTokenExpiryTime = newRefreshTokenExpiryTime;\n};\n\nexport const checkExpired = (\n overheadSecond = DEFAULT_OVERHEAD_SECOND,\n expiryTime\n) => {\n const now = new Date().getTime() / 1000;\n return now + overheadSecond > expiryTime;\n};\n\nexport const setTokens = (accessToken, refreshToken) => {\n if (!isRefreshTokenEnabled) {\n setAccessToken(accessToken);\n setRefreshToken(refreshToken);\n\n storePersistedTokens({\n access_token: getAccessToken(),\n refresh_token: getRefreshToken()\n });\n }\n};\n\nexport const setTokenExpiryTime = (\n accessTokenExpiryTime,\n refreshTokenExpiryTime\n) => {\n if (isRefreshTokenEnabled) {\n setAccessTokenExpiryTime(accessTokenExpiryTime);\n setRefreshTokenExpiryTime(refreshTokenExpiryTime);\n\n storePersistedExpiryTokenTime({\n token_expired: accessTokenExpiryTime,\n refresh_expired: refreshTokenExpiryTime\n });\n }\n};\n\n// \n\n// \n\n/**\n * create axios instance menggunakan fungsi ini.\n * fungsi ini otomatis masukin token ke headers dan otomatis refresh token kalau expired sehingga tak perlu handle sendiri manual\n * parameter `setHeaders` wajib ada. merupakan fungsi yang menerima object `headers` dan jwt `token`. di fungsi ini siakan set sendiri tokennya mau dipasang di header apa.\n */\n\nexport const isRefreshTokenEnabled =\n process.env.REACT_APP_IS_REFRESH_TOKEN_ENABLED === 'true';\n\nconst TOKEN_STATIC_CUSTOMER = process.env.REACT_APP_STATIC_TOKEN_CRM;\n\nexport const isLoggedIn =\n loadPersistedTokens() || loadPersistedExpiryTokenTime();\nexport const createAxios = (opts = {}) => {\n const instance = axios.create({\n ...opts,\n headers: {\n 'Content-Type': 'application/json',\n 'X-Client-Id': 'efarm',\n 'X-Client-Version': packageJson.version\n },\n withCredentials: isRefreshTokenEnabled\n });\n\n const onBeforeRequest = async (config) => {\n if (isRefreshTokenEnabled) await refreshIfExpired();\n const headers = config?.headers || {};\n if (typeof opts.setHeaders !== 'undefined')\n opts?.setHeaders(headers, getAccessToken());\n config.headers = headers;\n return config;\n };\n\n const onRequestError = (err) => {\n return Promise.reject(err);\n };\n\n instance.interceptors.request.use(onBeforeRequest, onRequestError);\n return instance;\n};\n\nexport const createAxiosCustomer = (opts = {}) => {\n const instance = axios.create({\n ...opts,\n headers: {\n 'X-App-token': TOKEN_STATIC_CUSTOMER,\n 'X-Client-Id': 'toko_budidaya'\n }\n });\n\n const onBeforeRequest = async (config) => {\n if (isRefreshTokenEnabled) await refreshIfExpired();\n const headers = config?.headers || {};\n\n if (typeof opts.setHeaders !== 'undefined')\n opts?.setHeaders(headers, getAccessToken());\n config.headers = headers;\n return config;\n };\n\n const onRequestError = (err) => {\n return Promise.reject(err);\n };\n\n instance.interceptors.request.use(onBeforeRequest, onRequestError);\n return instance;\n};\n\nconst fetchApiRequest = async (endpoint) => {\n const res = await axios.post(`${authsUrl}${endpoint}`, null, {\n withCredentials: true\n });\n return res?.data?.data;\n};\n\n/**\n * refresh token expired ke auth-svc\n */\nconst maxCacheAge = 10000;\nconst refreshIfExpired = mem(\n async (overheadSecond = DEFAULT_OVERHEAD_SECOND) => {\n // pakai memo supaya request refresh token di cache, max 10 detik, biar gaada call berulang\n if (refreshToken === 'disabled') return;\n\n const accessTokenExpiryTime = loadPersistedExpiryTokenTime();\n const isAccessTokenExpired = checkExpired(\n overheadSecond,\n accessTokenExpiryTime?.token_expired\n );\n if (!isAccessTokenExpired) return;\n\n try {\n const res = await fetchApiRequest('/users/refresh');\n setTokenExpiryTime(res.token_expired, res.refresh_expired);\n return res;\n } catch (error) {\n if (error.response) {\n if (error.response.status === 401) {\n error.message = new InvalidTokenError(\n 'Sesi Anda sudah habis. Silakan login ulang.'\n );\n doLogout();\n } else {\n error.message = new AuthServiceError(\n `HTTP ${error?.response?.status}`\n );\n }\n }\n throw error;\n }\n },\n {\n maxAge: maxCacheAge\n }\n);\n\nexport const doLogout = async () => {\n try {\n await fetchApiRequest('/users/signout');\n } catch (error) {\n error.message = new AuthServiceError(`HTTP ${error?.response?.status}`);\n } finally {\n const coachmarkDashboardFlag = getCoachmarkDashboardFlag();\n if (coachmarkDashboardFlag) storeCoachmarkDashboardFlag();\n removePersistedExpiryTokenTime();\n removePersistedTokens();\n removePersistedName();\n removeToolsbudToken();\n deleteLeadsState();\n deleteLocationState();\n deleteDummyState();\n deleteAcquisitionState();\n deletePersistedHistory();\n deletePersistedHistoryDetail();\n deleteStateBenefitShrimp();\n window.location.replace('/');\n }\n};\n\n// \n","import { getItem, setItem } from './skeleton';\n\nconst TOKENS_STORAGE_KEY = 'sfdu_token';\nconst EXPIRY_TIME_TOKENS_STORAGE_KEY = 'expiry_time_sfdu_token';\nconst NAME_STORAGE_KEY = 'farmer_name';\n\nexport const loadPersistedExpiryTokenTime = () => {\n const expiryTimes =\n getItem(EXPIRY_TIME_TOKENS_STORAGE_KEY) !== undefined &&\n getItem(EXPIRY_TIME_TOKENS_STORAGE_KEY) !== ''\n ? JSON.parse(getItem(EXPIRY_TIME_TOKENS_STORAGE_KEY))\n : null;\n return expiryTimes;\n};\n\nexport const storePersistedExpiryTokenTime = (expiryTimes) => {\n const expiryTimesJson = JSON.stringify(expiryTimes);\n setItem(EXPIRY_TIME_TOKENS_STORAGE_KEY, expiryTimesJson);\n};\n\nexport const removePersistedExpiryTokenTime = () => {\n localStorage.removeItem(EXPIRY_TIME_TOKENS_STORAGE_KEY);\n};\n\nexport const loadPersistedTokens = () => {\n try {\n const tokensJson = localStorage.getItem(TOKENS_STORAGE_KEY);\n const tokens = JSON.parse(tokensJson);\n return tokens;\n } catch (e) {\n console.error(e);\n }\n};\n\nexport const storePersistedTokens = (tokens) => {\n const tokensJson = JSON.stringify(tokens);\n localStorage.setItem(TOKENS_STORAGE_KEY, tokensJson);\n};\n\nexport const removePersistedTokens = () => {\n localStorage.removeItem(TOKENS_STORAGE_KEY);\n};\n\nexport const loadPersistedName = () => {\n const name = localStorage.getItem(NAME_STORAGE_KEY);\n return name;\n};\n\nexport const storePersistedName = (name) => {\n localStorage.setItem(NAME_STORAGE_KEY, name);\n};\n\nexport const removePersistedName = () => {\n localStorage.removeItem(NAME_STORAGE_KEY);\n};\n\nexport const storeDeviceToken = (device_id) => {\n localStorage.setItem('efarm@device_id', device_id);\n};\n\nexport const getDeviceToken = () => {\n return localStorage.getItem('efarm@device_id');\n};\n","import React from 'react';\nimport { Container } from 'reactstrap';\nimport logo from 'assets/logo-text.png';\n\nconst LoadingScreen = () => (\n \n \n \n);\n\nexport default LoadingScreen;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAACICAMAAAAMGWXoAAACVVBMVEUAAADG7eT5/fzd9PAsvJ0vvZ+w5dpOx6yf4NJezLFTyKhezLMsvJwuvJ41vqE0vqC+6uCJ2cgyvqBhzbWL2shiz60zvqBSya4vvZ5z0r5/1sOC18Tr+fZGxKc7wKMzvqBIxak9wqSi4dNy07U8waRq0bI6wKNLxapZyrFNxqx00r1Hxalt0LpEw6day7I5wKJHxKlfzLRx0r03v6JgzLRs0Lo6wKJ71cEpu5tExKhKxqtSyK6w5thn0LAwvZ45wKNjzbU2v6FSyK4nuppQx62k4tBXybCu5dVnz7eK2cg6waRAwqZ/1sTK7uRt0blAw6ZGxalAwqZHxKlBwqZPx6xRyK1y0r0wvZ5dy7PU8One9u8zvp+A170nu5llzrdu0btfzLNAwqY1v6Epu5x41Lg9waWH2sCo5NJTyK49waO+6t1lzrbR8OdCw6Z01L9TyK5+17w+waVv0buf39Gd4cyp49K359k3wKJJxao5wKJEw6dNxqyv5NVUyK6K2sgzvqA0vqAsvJ1GxKmF2b+J28FezLSS3cYou5tAwqVXybGz5deD2MUqu5uE2b8tvJ1pz7h31MBby7Ok4tA4v6FXrqBLxquV3sg5wKGg4NBhza1TyK+e4c1x0rxxuq5TyK6c4MstvJ07wKJBw6WC18Wf4NEwvZ45wKKW3siKx72E2cBcy7OWz8Ris6Z/171pz7iq49RPx615vbN+w7cmuppNx6Ilupopu5w/oZIsvJ0wvaBQyKRczKtUyaZYy6hgzaxBpZQ+oZFLwqBIvZ1FtJlKp5hCrZY8oJHmllv9AAAAs3RSTlMABgIM/fkLyw4MBUu49evnFhT2jRj87n/8MCYcCBXK8qPBEu7o9NKMdYYhuDm+UtiTVz/lYjRbK/fFr5Uw+fDgPtyOfXt1W1QlIPnKZSUY0cu5s6xya2SMaBkQ1tCrXE5E8uDg39u2Y2FANSsds3wy2dZGO4tdPfCoop2cTDwz/Mvu3MGspKDMjIJFP9bIpHtybGs2/cOVaEHwxYJX46WalSF6TiPIs6ielYyD8uOWLNjRvnFo6aMAACEoSURBVHja7J3rUxNXFMDPLrtpaEp4FJLwaCBYHoFABINAKM+iQrEgrxYrBUq1YtXhMQoULEq1Vmttq07tw06d2sdMO9NPN3snROBvKyKQZs/d3WzIoh3z++CHsLvZ7P72nHvPvXeFBP+B87iPffDWW6+X+zIhQYJ44VlIpWQTsauSg/iR3p2cnGxO4iHBCwhXmkoksk3Go5chXiT98uEXX1zpOfZJw+BYZ8KuFwzO7pBIGKnuERc3sV4iT6E0pXmh0gwJXiCGRIlEINyJn1hSWFgi9nkgwQtDzimJyGjNiatYYVrPQIL/I1zm0uS9d1gcZXKLB7BTIoe6DRKLeLMhwf8Ns8V93mttWnasRE19MphdBNOTaZBYpICDBP8rTL4ukZJNpA2IHGmHnQ8I+SMZysYZ2+Z7DBJLmrsFCRTh0tLenr108dIGR778+Pfjac/+MXxtUSQS0csXyXArg7GbUGVUxKJ2SMCCP/fxxfvXhk/uK2rM2qSx6MeTw9ceHpp9+1naZS6gyI/oxJq5zNgx+I1RYpH+Z/8QPnfwx994cG2qaH0tFJARWl1v/Ofagx+O8/BsKBWwHlFGrHyWWN8aJlZxOiSIIO3Sw6mix6GAIqG1xqnrF8/BM6ATlQyiw5kMueOMXUWLYWKldkCCMHmzF4Yb1wKarGZN3Z/Ng71mIkhiojwPuF6COZBjlFhSRjUk2CbtyEf7kFWKbhV9dDoN9hS+n8SGGwAGKEH0c4ZFrJREjXRHq9O3G1cDOghl3b57HPaQzGkSE8KTjFd2AmfCKjBMrLqEWE9JOnI1KxTQSWh9+O4eRq2zNonEgOTNhQ3a5SGLznPGiSVUQQIAfvZaYygQC1lXL3GwR4xeJlGDa0rpFfImfQcYJ9bKt5AAzl3YtxqIkVDR9bdhb6gUSCx05cImtc6I2mqPBxJiGQp/6fbjwC5Ym7q4N0FrkMTCqZ3+We354NZIj0Qc/g5IiGUo713Yh7Kg3qD1cE/KWq9SohOJCL0e2KGwtHhzoJHmu3wmSIhlKG98tB7YNY+vzoLxtOkTi1IhtWLCHDk5vfLRL/6GQY8ZICGWoRyZWg3EgdDJ0zwYTQkS66s3VXhkt9SaAMHzsEOiV2gQ/GmUBmNOh4cMr8TfQGK9D88FiTqWjKRDRYG40Xg/CWIlL7k2e/LevXuTS7lmXlks8kzEMj2Zrzp29OjYvZra5LxYxErOmbQcPbrx69Jje/h4U2f2vZ+PvnN0bDI70wTPPUkXGgNxZP3+exADhTUTJeVXXp9rWl5ebpo70VXQbinjnhOx+NyWgYX6E9am5bqVlbrl/NevVOwf8hTqEstc2eAcbxJXVpabrMUV+ydqkkEX6TOlC12tc5szZuuW50649g/WFOqZxn129PDBgwcPj57N5CAMn5fHcVyeEWkm6WFWIK48/ku3WemWEqctSDaQnv4jSYSKrf47ZfyzFyvXN+9NoZtnRYgkbZ0jze9qazFFK5b5sEvc3FmStnZvcpZYohajcHSxOIMS6cneGzy9TtTW5a6OKnBlWuznvTZxhVIaFG3e/tLsLbcqbyz89F2Fq+K78ndvVm18qMnBd7couTOWq6HyA+TVrs26ri8bdtzsSdm86ojg+GI1F1+xuO4NMtM4PsrNJ0u8wtNzwzT1Vpk0BqE/3QwLMxUCLoGQlK7SXIiCztIukX0KNL/cp2WnqaVhWqSRu1n9M5u/v4GGPxOs5SNmrWO5SHjppNddphblDzUG4s76Qx1mZd8Yp0RSrEDlz1fzuFcYu1gHW1tbT53q+XPePoLCIYKvnrcRRMTiwWptsdLdSgehxQPpmgHT7qVhqxCOetW3BOSN9uUzL2vbky8epJHH6vsV1IhcMiBR51lQ5G5RwACyDvHR5hn3AUrUmXNnxlGshu2lFdTRvOgBVXIarEQLq53TEKusnBJFBNeoesQc6QlKRJUUf7byUzufoeR03+8AFvnqXVcOqNEiWzLgUoy4X+4LGELRaYgG3uKkRAuJOltQgTRmsX6hJLxwJ9VuUrun09FMrXfceFlZrIwWqHURVWxq55BTIEYxrtDq49iZa3Bcec0J7S+EjlT5n/2q2dAXlDVV7Er19qlQwBhOzoI26W35JCpS7/Cww9+7EqsgMmCUKN7VwrYMEg0SvcEpi+XpdmntL9xQ7CCOFiO1mYhtaYBJ+9xBVKBu3uxEEfQwqOCm8pF9hfHBa6sBgwjdPq7daC+PerFNyiPOELGIoxTYdPcHSZQIN3kFsaT8n/1EE/ou2yxuwkqiJOjvxq2MPvUkKs1VwwKR41IJWdx5+SHeYieiB48DhrF2X6s2cstJoqcunDBe3ZVYn8gnvLMbKEsVOhYuzlUrRSzxmEC0oTdMgOFuitGfAu3vlnuFmnaIRSilKMbO6Jm7uwIsLu0LGEjjRQ2vPiN6cAzwhohF2pjxqp4SHfg5JJbOH8fwyi4SHVB/ZDY0zVOigeRNb0kh+Hookm1D3woMzt0OBYxkSnXm3xLySoMMX1zE+jqapX/p/UQXc9W7E0uyVqM6wU0H0UWwIaIF3y5of2tKS7oXT4g0q06x1I5Y/IXHAUNZu8+plBnqiV6aawwRy1aDg0VDkOiC2pFYOqmQ1zmHLus8mCSWQhiLjWgTHIJ+dBibcnHKTnEby/hKA6boEijBLVCim/JCA8Ri9YN8ItFJL7c7sST5xK2ZVP3HOuAJh1wXiYbvGcvhBJ/iTcNxvBkQeahHGHdCVxUHDQeVF8kr/8ExZIRY+MUdZcVEJ1Jr7m7Ewu9SyukhMVC+k8VKcchli1WN35KyX7E6VCyhQAuII40Bw8lSKpPWHJDYTlFaJwoCVdCruNsAsdCF5Buogj5bA3aSJD89qWkyCrEkSeXvwhCE4RapwhlQQRQFqjAG5tg+Rm6Uj8YjlixOs9Jdw233NlzCuhoKGM8wu5hl7iMsaGpvyZ0zZ85Ulu53NlGCoQNGiPWJvFthJUyoaHvd+coG082pGYJslO1nTbGocPnyZUE5IveaYIcRdi52eOfbK8+MnfHd7GsW1MLehKCid0TE4gtwR6IW2BwW5Jsy1vqebgzsAeuHgIVPlJgDsuGJG2aP20slfOHSDBDruyQ0yI2h4/0Dlo7Owpc3SOvsmKm0f9JjC+7cpaBPQ6wMZ8nB0d9GK+0VVoWqcH5LuGfTwzxE30gutx3SOn29InZmK+yZepVCJqHBlRW6kxG+Z9hChEpgU4KON57DDFjGExo+B5jcaYJJbc+ECDoZ4z2OqviLJcn617legmm25/DyjFlYM1SwHTjo96piiX7L9peYatoOKPUstxmg2AlaP5one6lhMSvshXMWRpwuGDg8MnKwfcF1wEGfnnXZOOMdF0w4rGsvx25hGc/6XUAwX8wxjQu+/Ds4Jy3w8Y9YVyIHVKpwGqF/KnTB+Zwhl6AtlnckIihm+1cIg/pt98pOMJwoycT1ymO4MjW2fYEx4nlLJr9tZU6l22VdGQwP0yBdEFhB3O/hUJfQEFDHELUs1de5fyuv5UjNnUyxuJc1UKm8ky8ixVokiGNloIi5sotK6mL1LMnHt911BGPN3q5tUlyjsnOAqZ1mRhvOzx7IN0EEpuyRpc05WSjBsX+uRURnZUGzGgyqYYVQgi36EmSwusLN1cAiqQC/I40llu0VDb5+LWqxzE4JHb4a1Mhst6qKNb2EI52bEoRwWPHBEza9wlSlSIwuXaaX5ZVFcZxGiu5FdDcpisQoij5YCxjA6r7bt4cbQ5GfXefljysO4KIP2ExaJRR8sVjapHiUxZJaOyOigFWrsIOprhAnFMWamwFM4XmCKVHq0lG/CZjk+VHdvAagJp8gxAlQwNQb3YvvOdyVL5Df27ThgAFkXZ9NSkq7OByZZU/KRwzH0FNG+kzAhptHm3IxiCW99Rtsg7vXH7wB/+HTFMZ7tbQwWzqUxKJtPDDw2PC25zkAZqOnNRsUsITPNtw9HUFmqlxi1v+p4GJt3O2Vn7GAZP3SiKb74wtPey1vD0fErPWLsiywiN+zPgMYhaf3SnosYl2OXqx3VpjFT23YYkmn2A0WfoEQ9nD4WStysx2Ui+GoPc1su2eMgiKefMXWnuoTJ42jhvF9IzLh8Dlmj3P1GodqDTgKKVEje8uxlNphsFi+FdzT0isWTiuYliaF1jtuTJ8o0/HazHkeFomeKQtgrkeD03cAU0o179t7RmTCtYewxfGpQBiUC8dS9MyGXfqARLI8GYtY+bfCc941xcLJbBdiNXmUbmcXwSsvUFNGs433L3Xn/hZFFcbxM8MugQgL24LLsrgX7i6XBUQMiFtyswcRgcQ0IOVSYKmgKFKWlZS3njQsK7FMLUu7HmdcbqGi/l3tssCw+56ZM2cHfOr7Az0hu8zOfHjf97zve97zCg7S54gfoeBN94UtnIoKtAiab4fXYmfOdI2UywjwhfF1gW3T4MEWKizmi44LQbbnWihgGeoBWJKAKwQ1jk52sOiD3jPIfQWbKphivN3BF+sIC3MIbAPHixIEesIhqYruMGvWohFr+qiU1Q80ZUcD1iA55JhVZXlKMOeHAlaPtE3pDDV4J23xaggVrBIeSaIkYsVWUrYIG4qRrMIBRH/Gxn0E/7AGkILCmyHilCwWyKMCi7Jqmuq1Ir/6U4L+IQxJshQKDGY6IgdrAQtGA3SwLAZCBO7pyRiM40MBS/7DHUqAzQbE7OiROCSr/GhosZL3UooLQG0iTCRAf0n1hAcP318LpdUtcjsWtDRIaQwAXwiOFOVDLOuvOow1uEJ4D+hgRWwkv4Ux/WRbQRJHBwv+ZrIaKsBPn+EJ3Qa42SrfhJ6OYYyVfAB8xJ3hSEnFqcGXUhHkC6GnEQzAE/6Rdn8tNNVdZ/WF7mAWxDdDSmsLQS+XbOAT7WaMVyF4F1JPKYG1P9DPlcp2m4i2qmb3pa5NEVSwoE+BiryN4YqOxPWIrD3f3IOB7OjUcYFwJoeSuBLqgmrAIFAjmL416nWfSuu93Hd3H3j36e+QJDcO1oEbJKicxfl2afO9tnSDuIGHYEn6NDnQu5gVm1s9xv2vnmyNSuK0Dl4Lhwi18CRPfIY4KstU0OrQEXv3zm8Hb/EDUlatjuYLN+votvj72ftrpKnp+FkYv838gpbFuaA5KbAsq77+xqGb+Vu2uUc2xsC75q+FsYIliCPJSBGsyKAjoCjv57Nd+qp3NmSH08EyVsqD9RKcmsOj92F6a7T+1q3IdZGxt2757s/gtdwtZ0tHXsqzEW+DrpbUbbybNkEjT1BOfvInwWODSdRfpu4/X/ValUq8upjUZRkSDpz+wKwEjp2ngAWagY0ndyAGsECxVdYxHnd1xNLA2n6eDSxSOea0IbXn9vrb6f77o5/UYVGUOkFh+2elHrOChdyUHKkpj57qCvv4/nPWb42SOUjFQCsP2RXADQOLQiJYouj/6tPSt7yaNFadyOUQG1iWHpXUYvPO9ggKWEPyof4VGGO/Li3QQK+8ICwZTCXtsoKECQBLVR3AxYFkg3KdEDX+xkzGo8fz80+9mp9//Og+u1L6pWYxkG1gU5OJBJZ4YotPX7/4+++lXrl9Ki39PXNL/iCIhc7Q1+Kbo7FamZsHlcASDMUsYP25B32NGQWb0N/eyg5WpAO2SShlcwWwbARpJroez8/NPfDr2YO5p/PMbKVJ6/kbB7AWTWYiABbt7F12sLhqj+onSZmPdSFZHqxvwbt9FItKsSa5IiBYMHhXUwkUzyJJzlcF0MoLwWLLNjx+Ovfw4SJXT8bvTUxM3HvEiNY3Q6sF1jtOzWBdJx28GiTndQ9WK0FnT1olsAQvWGdErEExBShEsAYMoG7tXOEpbQLoHQUq+4aBiUdP5x4s6cnEnbr+xsb+c3f//oapszm+b5XASh9AmsGyExaaTLOx4KpzV9IiKjsBWHsZLRbgnkm2dp4BLEobj75TYS5WugkBXQVgKZmrZWs1d+9uI79UDbw6xmL2/rm8GmAJeO8htAZgCaSWEi5faeQZaPB0+pe82sECnppFtjYehQoWygUlkVEedGIoluH64tVztWyuHj6ZeI9Hkrhj3eqTFtM1ElgGrFZw/1MRWgWwRuBajJhJ31RdqNoriRncfwCsvA4ehQ5WHMjXVljQooKHHQm2SgRVEx8KV3+XBYdqF2dDAGtTIQ5NYkyWCa0RWGEyYUdWuhmrk/Ga9IetDawsHJIEXG4vRkgDWLD67cmU7fBpDmcBC8ZXD5fAmvurEY7XGotnBys2tPOcxcLRbB6tClify4IFZcq350WLMHUEtTHOt2bfyAaWQADraxGHQJVYvquLQwAskM1kC98dTplBfmIb0uIK5x8sa2KYeARPygwrWOvWM94zwZeaz8ks5hBaK7BeCFOIaU1d21rybB6Q6Qa3mh2sKwJhVdjuwawSjU0ZlZxSR5nwbRiiirfLtQfmBo8GKrQggoa+YXaE43cRUcMfxzMG73wJubQrYCEgAe//r6grr3C430qUDK9msLg3KGBBcabs2oyW9Bi9SDFZkR9qBytKr/oPTvDdIFverrODpsBdD3qBCBZ7+H6CA1ulQIUapBvojvCB5Aj3ILJiL3eriLTS6pT6q/HWaNvx7W8uyXDBq73pTS99bq/+Ov9QQwBU2sGKfUEggEUXF1fc2XryVYNc1KWPYgUrnAgW3D6Kxejo6K1e6Sb92rr1tPeOXdjb1DK6raPIBLycVCtk+4gRjuBKtL/5uNgQ9G1wCCNTgvTxA8lg9SFZNX6VQkFr+nDNio9VC+sxPx7KPj+0LEuyT3FO8q3QDtafDGABRdTnZmyMJnpFtxesT7WDZdoLI6+oL316u+MLv7z/+372qR3JTk7u+Ah5sBgbSTNAVA9mxLGWdGa6x6UI66CSa+7/PkW+wWvqn+6jAXF/drmgssnyvwiWf3NqSTSxn4cVrJdga74JWXPAd484EZNg2wzsIIUi7uMoLEYorkmgjAJhKkKn1R2bePLQn3G/wyOkiNbRffHEMH427WJNI3XcYAv/vwILIWt+HqkDkQTWBVawUAZhu+FzAsv3u+HOtw5zcHk6G0libpvZtwf9cefe3IInPEZ/XHVjh9OmpwJM3nTavq/OvU5fe+D9lucJ1gv0BCldlQbwLsbBVQGLvHmHRaQOUpVgZSeArXkDXAtlVxVbo9/MJ76A9eqde08ePJvoRyp0cPi7Ty52p7wcHx//8sspv/WOXe4nhvyXPACLzOcIFvcTqaTDrCyR0IS844JGsPJ2wG1MPvJjtYL1qgqwyPOPRjvLKZ1YLK3Jy7sEueG7f937W9ZV7OnnA6zR6439w+fq6s4N9zfKviYxBt5Pi1aw3tU4eI1ZcLORmIv+SNUIVtUO0tw8QdeGWHR1OwZgqfyI1/TAEH8kt0cTqu8fFWBdXYbn3DnZGKhu4i7zKb1WF8zwlXKIQb9qAmtEZYANRVmD1KKyNwXtYJF6SKsG2MAS5DqD6BkHTFUGklNZmooWqlNIhd4bH7/DTNYlHex7bEeqFL5g0as1gUWfEhzZGYdo6vxAAK6QBJahWAEsAQCU7DfpQK44pEomThtYqH0SU2QrkI+GDjM0fVLAejZ+x4rYtKlCgAuffFVm4p1MUBJlBqsU5jZzg5x1quMaLSZphdsju0hgbR9iAetAMvn8Byy61ZDRkPXtLQAWm7dvoNZyXeDWgC322i1W3fizh+OXEVX0+fyGzVRv6NxgwNd9XvkzLWCRqrwZwBoZT2RzjEuAhAFmsDAEy19awUA6N9Vm8YM7xVQfWEMawAJ/MZQduMxDQaaPIRWqGX8ICtR0FcVgKGNWnLIXvObQ4UWwsBawNnvguJtEGJgn2AvCFN5ETziiDf1BAOs8M1jkQEdsLqKZqwQsaAQLTmyGHzMJyescLcjyT7ui6+6Thfwpx2qyyH18nZz8Q4gqMWK8CNZuZrBo02RcpgCw/MV8myvfJFeuLSTuu0qqApkCVrCkfclABqWRN0ltR0TsBathobYHwLpNAwsWc8kSQejOOIJ06hNeBSF3FhKo94YQmwbIe8Bs9iii/+YsbzUv1ufOaAXLnyeC5mBl20mUeXGLoz7dnQu30vP1WQmk01iItUJjQQhgReSQW2iPbNjEE4OEyuoenX978iaEwFAQNrCKQc5E/QBp/nt6H1V3I6JqzwSl5ENpVgTtM8ac1iInH9hUUNR+okK3VPYtRZrBiniVRHVCy1tFlkiOs1qtASs+c1XLtvyiBs66wJeVMw3UntxPunpb9mqAVb+Itk3GXuy351vCA+6Pc6DWvTHaf0U+i6UNLBgCw6y7kt6jD7eNr0NUDd3zdz/4i9ScV2EHX+e8ooEW55BthUxoOnl2S9TN84lFNzujLnnboKQDa3znP2gHC43KNWGm3nbkXLny7c3zRiHg9BlzQoXjSslur1yO9AQ/5EA54aBtBoBF3bCacGoRF/nzx8yFOe62qJuJN24U3YzaklXim3EhXdFCjJV8QQtYKFHBZOlqKaaG7gtnfubUhFg+PRuv6b96+ejPvb29H/92sdern4/2XT1XBvhSPv9TepKi+QNjebnxA50oghNBNQbvMIKBQws2HVDqAiZL107uIDVWMrQmC8eH4ClN5HPEEg4cKP/ALAbz1xNLAUubyRKOmJCyjs6q2hdPwfOvxT7A+ZSU+OnZmamFcym8X2dmp6fjveXCn7+7Wgbyp2pOLBZ8IjxE//ziDG1gWQqVwWo3gUQbXelJYJcOBSzSDNrty/WOKAOly508xcHBgYHs7FWr4ipZon9FQMw9WbNf0RxanzfZMPdUYZzDjBevXqmXC5yxzqxCi7aSDqy0Qk1+YXVgVoltMs3G+vdpc2nJYKF2PQ5BJ3hfLN8UIlgwBIZD/CgK652im6xhmsGamwNUAV2UMVlJzZhdOeGg0ZEdLNRhVrJIutwQ5ifs9LuIH8gTtuk1TwgWt20rZpYnE2RvWcCCo/hhrztNx+jh+0yvYhmQvzs+/0j1Pgqo4ibMKnEbOKSfCSx4mA+UcPpLkPqmSbB1IgSqmFSw3gI/7Y+x/Fr3ow5TRR6GZqeMp6CqXfrVrCcpxF6cokPxHQCU+RD8w/JdzaeYPc7iUOkCmzaw0GtK4BxPBHkkmjy/8vCAFjpYg3qBlG6QbBazN3Tz/jK/qBGsCBfZYUQgui7Hq6hE9yFZDXdPse0ohLrxE1ucJZbyi6PsBW1gcXYsr707fHkkgeW6Ti7d8MTjFLDAfEaYIJXEtStH8LKlqaJyATb6MakAVN2UOvzYz+5NqZPl6vAUq8GCSrLrWB5gRaJ0vpkmsFD9RoU4jkOIe3ESq5Y4Ere8JNnFAhZvJ2feJQ2+JDLcIHMbGJ0NWpPpAk4dHrLBHmVBsmqIlVhrnxp7Bc4aB+JaY7BaCcbN0pFgGsFCg1ISkDhHJax0UlB5WebRFW4myiioBwt12ShgIVO1TfX9EUeX6ak1w80UbOrSC+QIl66w3hk1o60+GYaBVuNYmiqupi7GUp9wjtoQ9XQmt3y7d2oFC3X2YKwUoIa9qNIbGjJXPjPrGRHkseTFuUXQ6BckLrfJg1XJc10yKBF2sBFJO1ipoGdRU/Q9k/LVcMBV8WXfSbufqTugqYrIzFNl7mNWOvjKKq1goQGXR1AqhnH5PSquS78rGwXoVokogJKOrEwlImhNBvHC2UI1N8iW5Vz5IpfIusUe9jjACFed+KPqDhKYTemtKTvI+XNXZcfGuqWXUZgcs6rqANqW56E+QFfgA+ryPnVtYCFn616ROGtxSZYMZT8tYJ0jF7iYyIwELIC2GTlFbCj0YCFg+xdUottAvT9XogIf+w53wsrM/AgNCvp58DFFSK0O7lM5O21qOu3wJ7949fu+FGlnKlXdZWr7YdtybCIWZAvTNhd4gMXu/f5GEQawANGtTfqAGUUCruhAkvgi937psYOrimnJjURQfMFolV5crv6dotVPMnMK9R5xeYs9SfxARpVHaYbROx1O4EOz3XlGkWU+lvKhjbiEQ6pVxzLvccYrppMHXr7MkDjJ3pATo/PBFfigsWg2OM4WEEJPflNtRsn69U0fHVnvVScKSXFRWc0V5Yu1blFXeL0omL32dwp1AcwL/h815Gwr4uRcQUNXq9v103qffqAnkMItXZd+dLt8LxiVUtLgQnYZdAtF1MDp76LH1lRdyZEdbeWlz0qa1/vUhhhEPJbaGMXyeooz1KTZMTa/Hl6cn+VKT03QT4oiFkXP5OmYCseJDfnFCs3769Y598R6v65DIYtLys7NrP5s9+7PNkTVc6Quw45q15GY6EkR+/gTJ6Nj0l3V8Krgtfml+jo4yk9zllq3o6LcLGLRK++FmMtT010Z7dlO+tuu4xkDUDjy5icOMSiWsjLUoKl9BxGzOKflUGfHFp9qrx0aaOB49F/Qv+3d32tScRQA8HNzk0D2Q+huGhZrZpOpo6huGMpWaHcTFAoKFBlj2BxDmQ/6EEkQhrCglz0I4mBBkBS0PVy9lM77t6X1En2vsvu9X6nvOJ8/QC5yOHzvueecrzC7vtZ/qoOTeUnaXFu3C/CPCBv7R5LUvybhJDL4g65SPAnl0d1xBwzZI+qcrLjfA+KU/bqis/TdGNndGgtPFhCvViYNf80hRcOtMRAbAiBOCTrdEdeM/0pDbDHXrVkA8Ypsele9YJylKDKPq2YKELfIBtKXG0DBUtVYx1USELfIo7t6AFRSbHOW1pwFxK97Dp27T+i4igxP8CLmK65dfkre1Q60XFE3q3qWp4jndq7ZJttkwqJXyjCpwXfch1hn4Jo1b/aERVzm1W2Z1ktjvZ1ztqk2+UpoSrLm6bTMCVfjgLhmD5qtYZEEudBrmdD7lnUB4pt3gph1TYBp8WP6pNXxNEOAOOe/q7PthAGhXBHpQkv7IGO64l6CnNQNLgITqWxaMx5a3UIUi6L8S7wiZ+5WgJXkYdpY1upo6UYOEPecAYWwIAA7yVLFc+6q1lm4ksVSO/+E5eePFMK2E5iylGuZ84zjnGmZqoydDPxK7B9tPpEk6evr/OqE7lok5nJyNRPudUZFlZh5V4r/H13piM7SW8ePweyZqj99d8MOY3ApXi5WMuEuOfTVGazqqxyXMap491EZZW4LxsUVL0drOwV3vS5qv4j1uruw8yUq71kwqvg3MrDUeRgvVy50+qCcLfVl5TenoRxWrC6KkYEVtANCVB4rQ7WnPwFCdHaHr3Sf3AWEKN2fU4b4fhsb6xA1a0DRpz7Db3TI9OQE6XMCEKK36NPNV3mMK2S6A4swsXAFEDLnxczfGwJnvHhuR+Zt3VL/DKspnx8QYmB5aVtVft/ip04/tFkBITackcDNWCy26ov4XWDMT3pPbQCQGqbaAAAAAElFTkSuQmCC\"","import { QueryClient } from 'react-query';\n\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n retry: false,\n refetchOnWindowFocus: false,\n cacheTime: 5 * 60 * 1000,\n keepPreviousData: true\n }\n }\n});\n\nexport default queryClient;\n","import { Button } from 'reactstrap';\nimport useWindowDimensions from 'hooks/useWindowDimensions';\nimport logoeFarm from 'assets/logo-efarm.webp';\nimport config from 'config';\nimport classNames from 'classnames';\nimport { isDownloadPromptVisible } from 'libs/helpers';\nimport { useRouteMatch } from 'react-router-dom';\n\nconst DownloadPrompt = () => {\n const isInProhibitedPage = config.downloadBar.prohibitedRoutes.some(\n (route) => useRouteMatch(route)?.isExact || false\n );\n const windowDimension = useWindowDimensions();\n const viewportWidth = windowDimension.width;\n return (\n isDownloadPromptVisible &&\n !isInProhibitedPage && (\n
\n
\n \"logo\n
\n
\n 395 ? 'size-font-200' : 'size-font-100',\n 'font-weight-medium'\n )}\n >\n Download aplikasi eFarm, yuk!\n
\n 395 ? 'size-font-100' : 'size-font-10'\n )}\n >\n Biar bisa buka dan akses semua fiturnya dengan mudah.\n
\n \n
\n \n \n \n
\n \n )\n );\n};\n\nDownloadPrompt.displayName = 'DownloadPrompt';\nexport default DownloadPrompt;\n","import styled from 'styled-components';\n\nexport const Wrapper = styled.div`\n align-items: center;\n background-color: #4a4a4a;\n border-radius: 8px;\n bottom: 24px;\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.16);\n color: #ffffff;\n display: flex;\n justify-content: space-between;\n left: 0;\n max-width: calc(100vw - 32px);\n margin: 0 auto;\n overflow: hidden;\n padding: 12px 16px;\n position: fixed;\n right: 0;\n width: 100%;\n z-index: 9999999;\n\n .btn-secondary {\n background-color: transparent;\n border-color: transparent;\n border: 0px;\n margin-left: 16px;\n\n &:hover,\n &:active,\n &:focus {\n box-shadow: none !important;\n border: 0px !important;\n background-color: transparent !important;\n border-color: transparent !important;\n }\n }\n\n @media screen and (min-width: 500px) {\n max-width: 480px;\n }\n`;\n\nexport const Dismiss = styled.div`\n color: #ae7ee9;\n cursor: pointer;\n font-weight: bold;\n`;\n","import { FC, memo, useContext, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { CSSTransition } from 'react-transition-group';\nimport { Button } from 'reactstrap';\n\n// local path\nimport { Wrapper, Dismiss } from './styles';\nimport './snackbar.scss';\n\n// global path\nimport { SnackbarContext } from 'contexts/SnackbarContext';\nimport Typography from 'components/reusable/Typography';\n\ninterface SnackbarProps {\n hideCloseButton?: boolean;\n hideConfirmButton?: boolean;\n}\n\nconst Snackbar: FC = ({ hideCloseButton = false }) => {\n const { isDisplayed, isHideConfirmButton, message, onClose, onConfirm } =\n useContext(SnackbarContext);\n\n const snackbarRef = useRef(null);\n const container = document.getElementById('snackbarPortal') as HTMLElement;\n\n return createPortal(\n \n \n \n {message}\n \n\n {!hideCloseButton && ×}\n\n {!isHideConfirmButton && }\n \n ,\n container\n );\n};\n\nexport default memo(Snackbar);\n","import { lazy } from 'react';\nimport { IClevertapPopupProps } from '../interfaces';\n\n// Lazy render\nconst PopupBox = lazy(() => import('./PopupBox'));\nconst PopupBanner = lazy(() => import('./PopupBanner'));\nconst PopupInterstitial = lazy(() => import('./PopupInterstitial'));\nconst PopupInterstitialFullscreen = lazy(\n () => import('./PopupInterstitialFullscreen')\n);\nconst PopupInterstitialImage = lazy(() => import('./PopupInterstitialImage'));\nconst PopupInterstitialImageFullscreen = lazy(\n () => import('./PopupInterstitialImageFullscreen')\n);\nconst PopupInterstitialImageOnly = lazy(\n () => import('./PopupInterstitialImageOnly')\n);\nconst PopupBannerImage = lazy(() => import('./PopupBannerImage'));\n\nexport default function ClevertapPopup(props: IClevertapPopupProps) {\n const {\n notificationObject: { templateType }\n } = props;\n\n return (\n <>\n {templateType === 'interstitial' && }\n {templateType === 'interstitial-fullscreen' && (\n \n )}\n {templateType === 'interstitial-image' && (\n \n )}\n {templateType === 'interstitial-image-fullscreen' && (\n \n )}\n {templateType === 'interstitial-image-only' && (\n \n )}\n {templateType === 'box' && }\n {templateType === 'banner' && }\n {templateType === 'banner-image' && }\n \n );\n}\n","export const interstitialType = [\n 'interstitial',\n 'interstitial-fullscreen',\n 'interstitial-image',\n 'interstitial-image-fullscreen',\n 'interstitial-image-only'\n];\nexport const bannerType = ['banner', 'banner-image'];\n\nexport const validTemplateType = ['box', ...interstitialType, ...bannerType];\n\nexport const regexPattern = {\n imgSrcPattern: /src=['\"](.*?)['\"]/i,\n bannerStylePattern: /\\.CT_Banner(?!\\w).[^{]*{([^}]*)}/i,\n bannerBtnPattern:\n /]*class=['\"]jsCT_CTA CT_BannerCTA['\"][^>]*>(.*?)<\\/a>/i,\n interstitialStylePattern: /\\.CT_Interstitial(?!\\w).[^{]*{([^}]*)}/i,\n interstitialBtnPattern:\n /]*class=['\"]jsCT_CTA CT_InterstitialCTA['\"][^>]*>(.*?)<\\/a>/i\n};\n\nexport const defaultPopupStyle = {\n backgroundColor: '',\n textColor: '',\n buttonColor: '',\n buttonTextColor: '',\n buttonText: 'Kunjungi'\n};\n","import {\n bannerType,\n defaultPopupStyle,\n interstitialType,\n regexPattern\n} from '../constant';\nimport {\n ICTPopupMessage,\n IGetImageSourceProps,\n IGetPopupStyleProps,\n IGetTemplateType,\n PopupTemplateType\n} from '../interfaces';\n\nexport function getImageSource(props: IGetImageSourceProps) {\n const { html } = props;\n return html.match(regexPattern.imgSrcPattern)?.[1];\n}\n\nexport function getPopupStyle(props: IGetPopupStyleProps) {\n const { html, templateType } = props;\n const {\n interstitialBtnPattern,\n interstitialStylePattern,\n bannerBtnPattern,\n bannerStylePattern\n } = regexPattern;\n\n const style = defaultPopupStyle;\n\n switch (templateType) {\n case 'interstitial':\n // get styles\n html\n .match(interstitialStylePattern)?.[0]\n .split(';')\n .filter((x) => x.includes('background-color:') || x.includes('color:'))\n .forEach((x) => {\n const [properties, value] = x.split(':');\n if (properties === 'background-color') {\n style.backgroundColor = value;\n }\n if (properties === 'color') {\n style.textColor = value;\n }\n });\n\n // get Button text\n style.buttonText = html.match(interstitialBtnPattern)?.[1] ?? 'Kunjungi';\n break;\n case 'banner':\n // get styles\n html\n .match(bannerStylePattern)?.[0]\n .split(';')\n .filter((x) => x.includes('background-color:') || x.includes('color:'))\n .forEach((x) => {\n const [properties, value] = x.split(':');\n if (properties === 'background-color') {\n style.backgroundColor = value;\n }\n if (properties === 'color') {\n style.textColor = value;\n }\n });\n\n // get Button text\n style.buttonText = html.match(bannerBtnPattern)?.[1] ?? 'Kunjungi';\n break;\n default:\n }\n return style;\n}\n\nexport function getTemplateType(props: IGetTemplateType) {\n const { templateType, kv } = props;\n switch (templateType) {\n case 'box':\n return 'box';\n case 'banner':\n if (bannerType.includes((kv?.template as string)?.toLowerCase()))\n return kv?.template as PopupTemplateType;\n return 'banner';\n case 'interstitial':\n if (interstitialType.includes((kv?.template as string)?.toLowerCase()))\n return kv?.template as PopupTemplateType;\n return 'interstitial';\n default:\n return templateType;\n }\n}\n\nexport function normalizeKV(props: ICTPopupMessage['msgContent']['kv']) {\n // Normalize url if the url is empty string\n if (props?.url === '') {\n props.url = 'doNothing';\n }\n return props;\n}\n","import { ICTExtends, IOnActionVisitUrl, IPopupObject } from '../interfaces';\n\nexport function onActionVisitUrl(props: IOnActionVisitUrl) {\n const { url, onNewTab } = props;\n if (!url) return false;\n if (url === 'doNothing') return true;\n if (onNewTab) {\n window.open(url);\n } else {\n window.location.href = url;\n }\n return true;\n}\n\nexport const onActionClicked = (\n clevertap: ICTExtends,\n popupObject: IPopupObject\n) => {\n const { msgId, pivotId, data } = popupObject;\n const success = onActionVisitUrl({\n url: data?.url as string,\n onNewTab: Boolean(data?.onNewTab)\n });\n if (success && !data?.['localTest']) {\n clevertap.renderNotificationClicked?.({ msgId, pivotId });\n }\n};\n","import clevertap from 'clevertap-web-sdk';\nimport {\n ICTExtends,\n ICTPopupMessage,\n IClevertapContext,\n IClevertapContextProps,\n IPopupObject\n} from '../interfaces';\nimport { createContext, useEffect, useState } from 'react';\nimport ClevertapPopup from '../components/PopupModal';\nimport {\n getImageSource,\n getPopupStyle,\n getTemplateType,\n normalizeKV,\n onActionClicked\n} from '../helpers';\nimport { validTemplateType } from '../constant';\nimport { ConfigEnv } from 'libs/env';\n\n// import msgJSON from '../constant/mock-popup-message.json';\n\nexport const ClevertapContext = createContext(\n null\n);\n\nexport function ClevertapProvider({ children, ...props }: IClevertapContext) {\n const {\n clevertap: { customPopupFeature }\n } = ConfigEnv;\n return (\n <>\n {customPopupFeature ? (\n {children}\n ) : (\n \n {children}\n \n )}\n \n );\n}\n\nfunction ClevertapPopupProvider({ children, ...props }: IClevertapContext) {\n const clevertapExt: ICTExtends = clevertap;\n const [notificationObj, setNotificationObj] = useState(\n null\n );\n const [popupOpen, setPopupOpen] = useState(false);\n clevertapExt.notificationCallback = (message: ICTPopupMessage) => {\n const {\n msgContent: { type, html, title, description, templateType, kv },\n msgId,\n pivotId\n } = message;\n\n // get ImageSrc if present\n const notifObject: IPopupObject = {\n msgId,\n pivotId,\n title,\n description,\n type,\n templateType: getTemplateType({ templateType, kv }),\n imgSrc: getImageSource({ templateType, html }),\n data: normalizeKV(kv),\n style: getPopupStyle({ templateType, html })\n };\n\n setNotificationObj(notifObject);\n // trigger Popup Viewed Event when the template valid\n if (\n validTemplateType.includes(notifObject.templateType) &&\n !kv?.['localTest']\n )\n clevertapExt.renderNotificationViewed?.({ msgId, pivotId });\n };\n\n clevertapExt.onActionClicked = onActionClicked;\n\n const value = {\n isActive: true,\n notificationObject: notificationObj\n };\n\n const togglePopup = () => {\n setPopupOpen(!popupOpen);\n setNotificationObj(null);\n };\n\n useEffect(() => {\n if (notificationObj) {\n setPopupOpen(true);\n }\n }, [notificationObj]);\n\n // un-comment this line below for local testing purposses\n // useEffect(() => {\n // clevertapExt.notificationCallback?.(msgJSON.interstitial as any);\n // }, []);\n\n return (\n \n {children}\n {notificationObj && (\n \n )}\n \n );\n}\n","import AuthContext from '@auth/context/auth';\nimport classNames from 'classnames';\nimport config from 'config';\nimport FlagsProvider from 'contexts/FlagContext';\nimport { SnackbarProvider } from 'contexts/SnackbarContext';\nimport { defaultValuesFlagsContext } from 'libs/flags';\nimport queryClient from 'libs/queryClient';\nimport { lazy, useEffect, useMemo } from 'react';\nimport { QueryClientProvider } from 'react-query';\nimport {\n BrowserRouter as Router,\n Redirect,\n Route,\n Switch,\n useHistory,\n useLocation,\n useRouteMatch\n} from 'react-router-dom';\nimport { getDummyState } from '../store/acquisition';\n// Assets\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport 'assets/styles/onefish.scss';\n// Init tag manager\nimport DownloadPrompt from 'components/reusable/DownloadPrompt';\nimport { Snackbar } from 'components/reusable/snackbar';\nimport { AlertProvider } from 'contexts/AlertContext';\nimport { getAnalytics } from 'firebase/analytics';\nimport { isDownloadPromptVisible, useFlags } from 'libs/helpers';\nimport {\n initializeAppsFlyer,\n initializeCleverTap,\n initializeFbPixel,\n initializeGtm\n} from '../libs/analytics';\nimport { firebase } from '../libs/firebase';\nimport { ClevertapProvider } from 'features/clevertap-popup/context/index';\nimport useQueryString from 'hooks/useQueryString';\nimport { getToolsbudToken } from '@cultivation-records/store/reportExternal';\n\n// Pages\nconst NewDashboard = lazy(() => import('components/dashboard/NewDashboard'));\nconst Otp = lazy(() => import('@auth/pages/otp'));\nconst LocationPicker = lazy(() => import('pages/LocationPicker'));\nconst Maps = lazy(() => import('@maps/Maps'));\nconst SuccessPage = lazy(() => import('pages/SuccessPage'));\nconst Questionnaire = lazy(() => import('@auth/pages/questionnaire'));\nconst LoginUsername = lazy(() => import('@auth/pages/login-username'));\nconst LoginPhone = lazy(() => import('@auth/pages/login-phone'));\nconst RegisterPhone = lazy(() => import('@auth/pages/register'));\n\n// lazy\nconst MaintenancePage = lazy(() => import('pages/MaintenancePage'));\nconst Onboarding = lazy(() => import('@app-onboarding/pages/onboarding'));\nconst MyPondsRouter = lazy(() => import('@my-ponds/routers'));\nconst CultivationRecordsRouter = lazy(() =>\n import('@cultivation-records/routers')\n);\nconst CultivationRecordsExternalRouter = lazy(() =>\n import('@cultivation-records/routers/routesExternal')\n);\nconst MarketplaceRouterGuestMode = lazy(() =>\n import('@marketplace/routes/routesGuestMode')\n);\nconst CultivationGPTRouter = lazy(() => import('@cultivation-gpt/routers'));\n\nconst App = () => {\n getAnalytics(firebase);\n initializeGtm();\n initializeFbPixel();\n initializeAppsFlyer();\n initializeCleverTap();\n\n return (\n \n \n \n \n \n \n \n \n \n (\n <>\n \n \n )}\n />\n (\n <>\n \n \n )}\n />\n (\n <>\n \n \n \n )}\n />\n (\n <>\n \n \n \n )}\n />\n (\n <>\n \n \n \n )}\n />\n (\n <>\n \n \n \n )}\n />\n (\n <>\n \n \n )}\n />\n (\n <>\n \n \n )}\n />\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nconst MaintenancePageProvider = ({ children }) => {\n const isMaintenanceEnabled =\n process.env.REACT_APP_MAINTENANCE_MODE === 'true';\n if (isMaintenanceEnabled) {\n return (\n <>\n } />\n \n \n );\n } else {\n return children;\n }\n};\n\nconst LoginGate = () => {\n const history = useHistory();\n const location = useLocation();\n const params = useMemo(() => {\n return location?.search;\n }, [location]);\n const utmRoute = new URLSearchParams(params).get('utm_route');\n\n const queryString = useQueryString();\n const token = queryString.get('token');\n const toolsbudToken = getToolsbudToken();\n\n const {\n isMyPondsEnabled,\n isCultivationRecordsEnabled,\n isMarketplaceUsingGuestMode,\n isInternalModeEnabled\n } = useFlags();\n const isInProhibitedPage = config?.downloadBar?.prohibitedRoutes?.some(\n // eslint-disable-next-line react-hooks/rules-of-hooks\n (route) => useRouteMatch(route)\n );\n\n const auth = AuthContext.useContainer();\n const dummyStorageState = getDummyState();\n const isDummy = dummyStorageState || auth?.user?.is_trial;\n const leadsName = auth?.user?.name;\n const acquisitionName = leadsName || 'Hai, pembudidaya!';\n\n useEffect(() => {\n //check if deeplink has marketplace utm route\n if (location?.pathname === '/') {\n if (utmRoute?.includes('/marketplace')) {\n history.push(utmRoute);\n }\n }\n }, []);\n\n useEffect(() => {\n if (auth.isInternalMode === true && !auth.isLoggedIn) {\n auth.setGreetingPopup(true);\n } else {\n auth.setGreetingPopup(false);\n }\n }, [auth.isLoggedIn]);\n\n const handleHidePopup = () => {\n auth.setGreetingPopup(false);\n };\n\n const isMarketplace = useMemo(() => {\n return location?.pathname?.includes('/marketplace');\n }, [location]);\n\n const isCultivation = useMemo(() => {\n return location?.pathname?.includes('/cultivation');\n }, [location]);\n\n if (\n isMarketplaceUsingGuestMode &&\n isMarketplace &&\n !auth?.user &&\n !auth.isFetchLeadLoading\n ) {\n return ;\n }\n\n if (\n isCultivation &&\n !auth?.user &&\n !auth.isFetchLeadLoading &&\n (!!token || !!toolsbudToken)\n ) {\n return ;\n }\n\n return (\n \n {auth.user || isDummy ? (\n <>\n \n\n {isMyPondsEnabled && }\n {isCultivationRecordsEnabled && }\n \n \n ) : (\n \n )}\n \n \n \n );\n};\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://cra.link/PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://cra.link/PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n // console.log(\n // 'New content is available and will be used when all ' +\n // 'tabs for this page are closed. See https://cra.link/PWA.'\n // );\n registration.waiting.postMessage({ type: 'SKIP_WAITING' });\n // Alert user when there are new updates\n alert(\n 'Terdapat update terbaru terkait aplikasi, silakan klik OK untuk reload'\n );\n window.location.reload(true);\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n // console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' }\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n}\n","const reportWebVitals = (onPerfEntry) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import { init } from '@sentry/react';\nimport { BrowserTracing } from '@sentry/tracing';\nimport { isLocalhost } from './helpers';\n\n// Sentry init\nexport default () => {\n const environment = process.env.REACT_APP_ENV;\n const sentryDsn = process.env.REACT_APP_SENTRY_DSN;\n\n if (!isLocalhost) {\n init({\n dsn: sentryDsn,\n integrations: [new BrowserTracing()],\n environment,\n tracesSampleRate: 1.0\n });\n }\n};\n","import React, { Suspense } from 'react';\nimport ReactDOM from 'react-dom';\nimport LoadingScreen from 'pages/LoadingScreen';\nimport App from 'components/App';\nimport * as efiauth from 'libs/efiauth';\nimport * as serviceWorkerRegistration from './serviceWorkerRegistration';\nimport reportWebVitals from 'reportWebVitals';\nimport { disableTargeting } from 'libs/survicate';\nimport CacheBuster from 'react-cache-buster';\nimport packageJson from '../package.json';\nimport classNames from 'classnames';\nimport sentry from 'libs/errorMonitoring';\n\n// Polyfill\nimport 'core-js/es/reflect/own-keys';\nimport 'core-js/es/object/values';\nimport 'core-js/es/object/from-entries';\nimport 'core-js/es/object/entries';\nimport 'core-js/es/object/keys';\nimport 'core-js/es/array/includes';\nimport 'promise-polyfill';\nimport 'proxy-polyfill';\nimport 'url-search-params-polyfill';\n\nsentry();\n\nlet appVersion = packageJson.version;\nwindow.appVersion = appVersion;\nconst isProduction = process.env.NODE_ENV === 'production';\n\n// const isDownloadPromptVisible =\n// isAndroid() && isUsingBrowser() && isTrustedWebActivity() === false;\n\n// const App = lazy(() => componentLoader(() => import('components/App')));\n\nefiauth.initialize({\n authsUrl: process.env.REACT_APP_BACKEND_URL\n});\n\n// Survicate: Disable automatic targeting\ndisableTargeting();\n\nReactDOM.render(\n }\n >\n \n }>\n
\n \n
\n
\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://cra.link/PWA\nserviceWorkerRegistration.register();\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n","const userAgent = navigator.userAgent;\nconst platform =\n navigator?.userAgentData?.platform || navigator?.platform || 'unknown';\n\nexport const isiOS = () => {\n return (\n [\n 'iPad Simulator',\n 'iPhone Simulator',\n 'iPod Simulator',\n 'iPad',\n 'iPhone',\n 'iPod'\n ].includes(platform) ||\n // iPad on iOS 13 detection\n (userAgent.includes('Mac') && 'ontouchend' in document)\n );\n};\n\nexport const isAndroid = () => {\n return /Android/i.test(userAgent);\n};\n\nexport const isUsingBrowser = () => {\n return typeof window !== 'undefined';\n};\n","import React from 'react';\nimport dayjs from 'dayjs';\nimport { FlagsContext } from '../contexts/FlagContext';\nimport { isTrustedWebActivity } from 'libs/twaChecker';\nimport { isAndroid, isUsingBrowser } from 'utils/userAgent';\nimport parsePhoneNumber from 'libphonenumber-js';\nimport config from '../config';\nimport { removeUtmCampaign, removeUtmRoute } from 'store/utm';\nimport {\n belajar_budidaya,\n DEEP_LINK_CREATE_FARM,\n kalkulator_budidaya,\n konsultasi_budidaya,\n rencana_panen,\n toko_budidaya\n} from 'config/features';\nimport { trackerLandingPage } from 'libs/analytics';\n\nconst FORM_COMPLAINT = process.env.REACT_APP_FORM_COMPLAINT;\n\nexport const isDownloadPromptVisible =\n isAndroid() && isUsingBrowser() && isTrustedWebActivity() === false;\n\nexport const preventGoBack = () => {\n history.pushState(null, null, document.URL);\n window.addEventListener('popstate', function () {\n history.pushState(null, null, document.URL);\n });\n};\n\nexport const goToRegister = (history) => {\n history.push('/login/phone');\n};\n\nexport const getQueryParams = () => {\n const searchParams = new URLSearchParams(window.location.search);\n const params = Object.fromEntries(searchParams.entries());\n return Object.keys(params).length === 0 && params.constructor === Object\n ? null\n : params;\n};\n\nexport const redirectToWhatsapp = (message, number) => {\n const customNumber = `https://api.whatsapp.com/send?phone=${encodeURIComponent(\n number\n )}`;\n return `${number ? customNumber : config.whatsapp.url}&text=${message}`;\n};\n\nexport const handleComplaint = (leads_name, leads_id, token) => {\n const backUrl = encodeURIComponent(window.location.href);\n const source = 'Toko Budidaya';\n const urlFormComplaint = `${FORM_COMPLAINT}?back_url=${backUrl}&customer_name=${leads_name}&leads_id=${leads_id}&source=${source}${\n token ? `&token=${token}` : ''\n }`;\n window.location.href = urlFormComplaint;\n};\n\nexport const setLandingPagePricingThemeBasedOnPlan = (plan) => {\n switch (plan) {\n case 'Panen Maksimal': {\n return {\n icon: 'white',\n bg: 'bg-aqua-600',\n color: 'color-brand-primary-white',\n recommended: false,\n chip: {\n bg: 'bg-observatory-100',\n color: 'color-observatory-500'\n },\n btn: {\n bg: 'bg-observatory-500',\n color: 'color-brand-primary-white'\n }\n };\n }\n case 'Untung Berlipat': {\n return {\n icon: 'white',\n bg: 'bg-observatory-500',\n color: 'color-brand-primary-white',\n recommended: false,\n chip: {\n bg: 'bg-observatory-100',\n color: 'color-observatory-500'\n },\n btn: {\n bg: 'bg-brand-primary-white',\n color: 'color-observatory-500'\n }\n };\n }\n }\n};\n\nexport const cycleToInterval = (cycle) => {\n const start = dayjs(cycle.tanggal).format('D MMM YYYY');\n const end = cycle.final_harvest\n ? `${dayjs(cycle.final_harvest.tanggal).format('D MMM YYYY')} (Panen)`\n : 'Sekarang';\n return `${start} — ${end}`;\n};\n\nexport const formatNumber = (number) => {\n return Number(number).toLocaleString(['ban', 'id']);\n};\n\nexport const useFlags = () => {\n const context = React.useContext(FlagsContext);\n return context;\n};\n\nexport const flaggedWaterParams = (parameters, flag) => {\n if (!flag) {\n return parameters\n .map((el) => {\n if (el.label !== 'Nitrit' && el.label !== 'Amonia') {\n return el;\n }\n })\n .filter((el) => typeof el !== 'undefined');\n } else {\n return parameters;\n }\n};\n\nexport const validationRegexes = (inputValue, type) => {\n const textRegex = '^[a-zA-Z ]*$';\n const numberRegex = '^[0-9]*$';\n let phoneNumber;\n switch (type) {\n case 'phone':\n phoneNumber = parsePhoneNumber(inputValue, 'ID');\n if (inputValue !== '' && phoneNumber && inputValue.charAt(0) === '0')\n return phoneNumber.isValid();\n break;\n case 'text':\n return !new RegExp(textRegex, 'gm').test(inputValue);\n default:\n return !new RegExp(numberRegex, 'gm').test(inputValue);\n }\n};\n\nexport const closeTooltip = () => {\n let tooltipClass = document.getElementsByClassName('hovertext');\n for (let i = 0; i < tooltipClass.length; i++) {\n tooltipClass[i].style.display = 'none';\n }\n};\n\nexport const numberize = (value) => {\n if (Array.isArray(value)) {\n return value.map((item) => numberize(item));\n }\n\n if (value === null) {\n return value;\n }\n\n if (typeof value === 'object') {\n const result = {};\n for (const [key, item] of Object.entries(value)) {\n result[key] = numberize(item);\n }\n return result;\n }\n\n if (typeof value === 'string') {\n // https://stackoverflow.com/questions/175739/built-in-way-in-javascript-to-check-if-a-string-is-a-valid-number#comment32052139_175787\n return +value === +value ? Number(value) : value;\n } else {\n return value;\n }\n};\n\nexport const groupCycleIdentity = (selectedCycle, selectedPond) => {\n const cycle = [];\n cycle.push(\n {\n title: 'Komoditas',\n desc: selectedCycle?.komoditas\n },\n {\n title: 'Jenis Budidaya',\n desc:\n selectedCycle?.jenis_budidaya?.replace(/_/g, ' ') || 'Tidak ada data'\n },\n {\n title: 'Tanggal Tebar',\n desc: dayjs(selectedCycle?.tanggal).locale('id').format('DD MMMM YYYY')\n },\n {\n title: 'Tanggal Panen',\n desc: selectedCycle?.final_harvest\n ? dayjs(selectedCycle?.final_harvest.tanggal).format('DD MMMM YYYY')\n : 'Belum Panen'\n },\n {\n title: 'Jumlah Benih',\n desc: selectedCycle?.jumlah_benih?.toLocaleString(['ban', 'id'])\n },\n {\n title: 'Asal Benih',\n desc: selectedCycle?.asal_benih\n },\n {\n title: 'Rataan Ukuran Benih',\n desc: selectedCycle?.ukuran_benih + ' cm'\n },\n {\n title: 'Rataan Berat Benih',\n desc: selectedCycle?.berat_benih + ' gr'\n },\n {\n title: 'Berat Total Benih',\n desc: selectedCycle?.berat_benih * selectedCycle?.jumlah_benih + ' kg'\n },\n {\n title: 'Padat Tebar',\n desc: selectedPond?.area\n ? (selectedCycle?.jumlah_benih / selectedPond?.area).toFixed(2) + '/m²'\n : 'Tidak ada data'\n },\n {\n title: 'Luas Kolam',\n desc: selectedPond?.area ? selectedPond?.area + ' m²' : 'Tidak ada data'\n },\n {\n title: 'Dosis Awal Akualisan',\n desc: selectedCycle?.starting_aqualisan_dose\n ? selectedCycle?.starting_aqualisan_dose + ' Liter/m³'\n : 'Tidak ada data'\n }\n );\n return cycle;\n};\n\nexport const ObjectString = (Object.byString = (o, s) => {\n s = s.replace(/\\[(\\w+)\\]/g, '.$1'); // convert indexes to properties\n s = s.replace(/^\\./, ''); // strip a leading dot\n var a = s.split('.');\n for (var i = 0, n = a.length; i < n; ++i) {\n var k = a[i];\n if (k in o) {\n o = o[k];\n } else {\n return;\n }\n }\n return o;\n});\n\nexport const generateRangeDate = (start_date, end_date) => {\n let formatedStartDate, formatedEndDate;\n let startDateYear = dayjs(start_date).year();\n let endDateYear = dayjs(end_date).year();\n\n if (startDateYear === endDateYear) {\n formatedStartDate = dayjs(start_date).locale('id').format('DD MMM');\n formatedEndDate = dayjs(end_date).locale('id').format('DD MMM YYYY');\n return `${formatedStartDate} - ${formatedEndDate}`;\n }\n\n formatedStartDate = dayjs(start_date).locale('id').format('DD MMM YYYY');\n formatedEndDate = dayjs(end_date).locale('id').format('DD MMM YYYY');\n return `${formatedStartDate} - ${formatedEndDate}`;\n};\n\nexport const formatRupiah = (currencyIndonesian) => {\n if (!Number(currencyIndonesian)) {\n return '';\n }\n\n const format = currencyIndonesian.toString().split('').reverse().join('');\n const convert = format.match(/\\d{1,3}/g);\n const rupiah = `${convert.join('.').split('').reverse().join('')}`;\n return rupiah;\n};\n\nexport const formatCurrency = (number) => {\n const formatter = new Intl.NumberFormat('id');\n return formatter.format(number);\n};\n\nexport const phoneReplaceNormalize = (phone) => {\n phone = String(phone).trim();\n if (phone.startsWith('+62')) {\n phone = '0' + phone.slice(3);\n } else if (phone.startsWith('62')) {\n phone = '0' + phone.slice(2);\n }\n return phone.replace(/[- .]/g, '');\n};\n\nexport const phoneInvertNormalize = (phone) => {\n if (phone.startsWith('0')) {\n return '+62' + phone.slice(1);\n }\n if (phone.startsWith('62')) {\n return '+' + phone;\n }\n return phone;\n};\n\nexport const getUrlFeatureByUtmCampaign = (utmCampaign) => {\n let redirectUrl = '/';\n\n if (utmCampaign === belajar_budidaya) redirectUrl = '/learn-cultivation/list';\n if (utmCampaign === konsultasi_budidaya) redirectUrl = '/consultation/wa';\n if (utmCampaign === rencana_panen) redirectUrl = '/shrimp-harvest';\n if (utmCampaign === kalkulator_budidaya)\n redirectUrl = '/cultivation-calculator';\n if (utmCampaign === toko_budidaya) redirectUrl = '/marketplace';\n if (utmCampaign === DEEP_LINK_CREATE_FARM) {\n redirectUrl = '/my-ponds/farms/create';\n }\n\n return redirectUrl;\n};\n\nexport const goToFeature = (history, utmCampaign, utmRoute) => {\n const redirectUrl = getUrlFeatureByUtmCampaign(utmCampaign);\n\n trackerLandingPage.trackDeeplink(utmCampaign);\n removeUtmCampaign();\n removeUtmRoute();\n history.push(utmRoute || redirectUrl);\n};\n\nexport const generateDayFromNowTo = (days = 1) => {\n const dt = new Date();\n dt.setDate(dt.getDate() + days);\n return dt;\n};\n\n//TO DO : FOR testing purpose in Staging & UAT. Using in Prod Will be discuss before deployment\nexport const isShowedMarketplaceIconByProvince = (province) => {\n if (!province) return false;\n const excludeProvinces = config.marketplace.excludeProvince;\n\n return !excludeProvinces.some(\n // 0 -> it means exclude for all provinces\n (excludeProvince) =>\n excludeProvince === '0' || province.toString() === excludeProvince\n );\n};\n\nexport const isLocalhost =\n location.hostname === 'localhost' ||\n location.hostname === '127.0.0.1' ||\n process.env.NODE_ENV === 'development';\n\nexport const debounce = (callback, time = 300) => {\n let debounceTimer;\n\n const debouncer = (...args) => {\n clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n callback(...args);\n }, time);\n };\n\n return debouncer;\n};\n","import SecureLS from 'secure-ls';\n\nconst secureStorage = new SecureLS({ encodingType: 'aes' });\nconst isProduction = process.env.NODE_ENV === 'production';\n\nexport const setItem = (key: string, value: string): void => {\n isProduction\n ? secureStorage.set(key, value)\n : localStorage.setItem(key, value);\n};\n\nexport const getItem = (key: string): Type | string | null => {\n if (!isProduction) {\n return localStorage.getItem(key);\n }\n\n try {\n return secureStorage.get(key);\n } catch (e) {\n const value = localStorage.getItem(key);\n secureStorage.set(key, value);\n return secureStorage.get(key);\n }\n};\n\nexport const removeItem = (key: string): void => {\n isProduction ? secureStorage.remove(key) : localStorage.removeItem(key);\n};\n","export default __webpack_public_path__ + \"static/media/benefit-1.457a5b5d.svg\";","export default __webpack_public_path__ + \"static/media/benefit-2.48f21400.svg\";","export default __webpack_public_path__ + \"static/media/benefit-3.a2da481e.svg\";","export default __webpack_public_path__ + \"static/media/mamang.c6a943de.webp\";","export default __webpack_public_path__ + \"static/media/sapto.eecac878.webp\";","export default __webpack_public_path__ + \"static/media/syarifa.d2deb74d.webp\";","export default __webpack_public_path__ + \"static/media/chat-via-wa.2db603f8.svg\";","export default __webpack_public_path__ + \"static/media/free-consultation.2446bbcf.svg\";","export default __webpack_public_path__ + \"static/media/with-expert.42eb5600.svg\";","import imgBenefit from 'assets/img/shrimp-harvest/benefit-1.svg';\nimport imgBenefit2 from 'assets/img/shrimp-harvest/benefit-2.svg';\nimport imgBenefit3 from 'assets/img/shrimp-harvest/benefit-3.svg';\nimport mamang from 'assets/img/dashboard/consultation/mamang.webp';\nimport sapto from 'assets/img/dashboard/consultation/sapto.webp';\nimport syarifa from 'assets/img/dashboard/consultation/syarifa.webp';\nimport consultationChatViaApp from 'assets/img/dashboard/consultation/chat-via-wa.svg';\nimport consultationFreeConsultation from 'assets/img/dashboard/consultation/free-consultation.svg';\nimport consultationWithExpert from 'assets/img/dashboard/consultation/with-expert.svg';\n\n// WIP REFACTOR MOVE WANUMBER TO FIREBASE\nconst waNumber = '6281359593535';\nconst joinNumber = '6281385545425';\n\nconst config = {\n water: {\n parameters: [\n {\n label: 'pH',\n chartValues: [\n {\n limits: [\n {\n value: 8,\n name: 'Ambang Batas'\n },\n 7.5\n ],\n range: [7, 9.5],\n title: 'Pagi',\n name: 'pH Pagi',\n yKey: 'ph_pagi'\n },\n {\n limits: [\n {\n value: 8.4,\n name: 'Ambang Batas'\n },\n 8\n ],\n range: [7, 9.5],\n title: 'Sore',\n name: 'pH Sore',\n yKey: 'ph_sore'\n },\n {\n limits: [\n {\n value: 0.5,\n name: 'Batas Atas'\n }\n ],\n title: 'Range pH',\n name: 'Range pH',\n yKey: 'fluktuasi_ph'\n }\n ]\n },\n {\n label: 'Nitrit',\n limits: [\n {\n value: 0.5,\n name: 'Batas Atas Nitrit'\n }\n ],\n chartValues: 'nitrite',\n name: 'Nitrit'\n },\n {\n label: 'DO',\n chartValues: [\n {\n title: 'Pagi',\n limits: [\n {\n value: 4,\n name: 'Batas Bawah DO'\n }\n ],\n name: 'DO Pagi',\n yKey: 'do_pagi'\n },\n {\n title: 'Sore',\n limits: [\n {\n value: 4,\n name: 'Batas Bawah DO'\n }\n ],\n name: 'DO Sore',\n yKey: 'do_sore'\n }\n ]\n },\n {\n label: 'Salinitas',\n limits: [\n {\n value: 25,\n name: 'Batas Atas Salinitas'\n },\n 15\n ],\n chartValues: 'salinty',\n name: 'Salinitas'\n },\n {\n label: 'Suhu',\n chartValues: [\n {\n title: 'Pagi',\n limits: [\n {\n value: 30,\n name: 'Ambang Batas'\n },\n 27\n ],\n yKey: 'suhu_pagi',\n name: 'Suhu Pagi'\n },\n {\n title: 'Sore',\n limits: [\n {\n value: 30,\n name: 'Ambang Batas'\n },\n 27\n ],\n yKey: 'suhu_sore',\n name: 'Suhu Sore'\n }\n ]\n },\n {\n label: 'Amonia',\n name: 'Amonia',\n limits: [\n {\n value: 0.1,\n name: 'Batas Atas Amonia'\n }\n ],\n chartValues: 'ammonia'\n },\n {\n label: 'Alkalinitas',\n name: 'Alkalinitas',\n limits: [\n {\n value: 150,\n name: 'Ambang Batas'\n },\n 100\n ],\n chartValues: 'total_alkalinitas'\n },\n {\n label: 'Mg',\n name: 'Mg',\n limits: [\n {\n value: 4000,\n name: 'Ambang Batas'\n },\n 2000\n ],\n chartValues: 'mg'\n },\n {\n label: 'Ca',\n name: 'Ca',\n limits: [\n {\n value: 3000,\n name: 'Ambang Batas'\n },\n 1500\n ],\n chartValues: 'ca'\n }\n ]\n },\n feedLog: {\n parameters: [\n {\n title: 'Kumulasi',\n value: 'amount_kg',\n dataKey: 'feed_cumulative',\n name: 'Kumulasi Pakan',\n dashboardKey: 'computed'\n },\n {\n title: 'Harian',\n value: 'berat_total',\n dataKey: 'feeding',\n name: 'Pengeluaran Pakan/Hari',\n dashboardKey: 'data'\n }\n ]\n },\n growth: {\n parameters: [\n {\n title: 'ABW',\n name: 'Rataan Pertumbuhan Harian',\n value: 'weight_gram',\n dataKey: 'abw',\n dashboardKey: 'computed'\n },\n {\n title: 'ADG',\n name: 'Rataan Pertumbuhan Harian',\n value: 'adg',\n dataKey: 'abw',\n dashboardKey: 'computed'\n }\n ]\n },\n chart: {\n pie: {\n markerColors: [\n 'rgb(53, 159, 133)',\n 'rgb(255, 228, 0)',\n 'rgb(212, 65, 64)',\n 'rgb(93, 199, 227)',\n 'rgb(192, 87, 23)'\n ]\n }\n },\n form: {\n checkbox: {\n source: [\n { id: '1', label: 'Webinar', value: 'webinar' },\n { id: '2', label: 'Youtube', value: 'youtube' },\n { id: '3', label: 'Instagram', value: 'instagram' },\n { id: '4', label: 'Tiktok', value: 'tiktok' },\n { id: '5', label: 'Facebook', value: 'facebook' },\n { id: '6', label: 'WA / Telegram / FB Group', value: 'wa_group' },\n { id: '7', label: 'WA', value: 'wa' },\n { id: '8', label: 'Google', value: 'google' },\n { id: '9', label: 'Majalah', value: 'majalah' },\n { id: '10', label: 'Berita online', value: 'online_news' },\n { id: '11', label: 'Kunjungan team eFishery', value: 'offline_visit' },\n { id: '12', label: 'Acara yang diadakan eFishery', value: 'event' },\n { id: '13', label: 'Lainnya', value: 'other' }\n ]\n },\n radio: {\n roles: [\n 'Saya tidak bekerja / tidak memiliki tambak udang',\n 'Pemilik',\n 'Manager',\n 'Admin',\n 'Teknisi',\n 'Anak Kolam',\n 'Bakul',\n 'Agen',\n 'Lainnya'\n ]\n },\n options: {\n role: [\n {\n label: 'Owner/pemilik',\n value: 'Owner/pemilik'\n },\n {\n label: 'Teknisi',\n value: 'Teknisi'\n },\n {\n label: 'Manager Tambak',\n value: 'Manager Tambak'\n },\n {\n label: 'Bakul',\n value: 'Bakul'\n },\n {\n label: 'Processing',\n value: 'Processing'\n },\n {\n label: 'Akademisi',\n value: 'Akademisi'\n },\n {\n label: 'Pelaku industri',\n value: 'Pelaku industri'\n },\n {\n label: 'Lainnya',\n value: 'Lainnya'\n }\n ],\n seedCount: [\n '>200 ekor /m2',\n '>100-200 ekor /m2',\n '50-120 ekor /m2',\n '<50 ekor /m2'\n ],\n feedPrice: ['', 'Pakan alami', '<10.000', '11.000-40.000', '>40.000'],\n harvestSize: ['', '10-50', '50-100', '100-200', '200-1000', '1000-2000'],\n cultivationType: [\n {\n label: 'Ya',\n value: 'udang'\n },\n {\n label: 'Tidak',\n value: 'lainnya'\n }\n ]\n }\n },\n whatsapp: {\n url: `https://api.whatsapp.com/send?phone=${waNumber}`,\n joinNumberUrl: `https://api.whatsapp.com/send?phone=${joinNumber}`,\n joinNumber\n },\n harvestShrimpBenefit: [\n {\n image: imgBenefit,\n text: 'Anda bisa mendapatkan insentif yang menarik dari kami!'\n },\n {\n image: imgBenefit2,\n text: 'Dapatkan gratis layanan \\n konsultasi budidaya'\n },\n {\n image: imgBenefit3,\n text: 'Anda bisa mendapatkan gratis layanan pendampingan'\n }\n ],\n harvestShrimpBanner: [\n {\n text: 'Dapatkan diskon hingga 40% Feeder dan probiotik udang untuk tingkatkan produktivitas kolam'\n },\n {\n text: 'Dapatkan gratis layanan \\nkonsultasi budidaya'\n },\n {\n text: 'Anda bisa mendapatkan gratis \\nlayanan pendampingan'\n }\n ],\n login: {\n benefits: [\n 'Laporan kualitas air harian (fisika & kimia)',\n 'Informasi dan rekomendasi tiap kolam',\n 'Laporan budidaya 1 siklus',\n 'Konsultasi budidaya'\n ]\n },\n sellShrimp: {\n form: {\n harvestType: [\n {\n label: 'Parsial',\n value: 'PARTIAL'\n },\n {\n label: 'Total',\n value: 'TOTAL'\n }\n ],\n source: [\n 'Youtube',\n 'WA / Telegram',\n 'FB',\n 'Tiktok',\n 'Google',\n 'Tim lapangan eFishery'\n ],\n questions: {\n 'Saya sudah memiliki kontrak dengan pembeli lain': null,\n 'Saya tertarik jika udang saya dibeli oleh eFishery': null,\n 'Saya memiliki tim sortir': null,\n 'Saya memiliki tim panen': null,\n 'Saya memiliki tim logistik': null\n }\n }\n },\n questionnaire: {\n interest: [\n 'Ingin belajar budidaya',\n 'Ingin mendapat update seputar pasar udang',\n 'Ingin mendapat update tentang produk sarana budidaya udang',\n 'Lainnya'\n ]\n },\n downloadBar: {\n prohibitedRoutes: [\n '/summary/all',\n '/acquisition-form',\n '/profile/edit',\n '/shrimp-harvest**',\n '/cycle',\n '/summary/:id/:id',\n '/cultivation-calculator**',\n '/my-ponds**',\n '/marketplace**',\n '/location-picker',\n '/event-cultivation/list',\n '/event-cultivation/ticket-list',\n '/event-cultivation/detail**',\n '/cultivation/records/**',\n '/cultivation/daily-report/**',\n '/cultivation/**',\n '/join-mentoring-member',\n '/acquisition-form/success'\n ]\n },\n marketplace: {\n excludeProvince:\n process.env.REACT_APP_MARKETPLACE_EXCLUDE_PROVINCE_ID?.split(',') ?? [],\n excludeCategory: []\n },\n dashboard: {\n consultationValues: [\n {\n title: 'Konsultasi Gratis',\n desc: 'Diskusi semuanya tentang budidaya tanpa pungutan biaya apapun.',\n img: consultationFreeConsultation\n },\n {\n title: 'Langsung dengan Ahlinya',\n desc: 'Konsultasi budidaya mulai dari pH air hingga penyakit udang dengan pakarnya.',\n img: consultationWithExpert\n },\n {\n title: 'Chat via WhatsApp',\n desc: 'Ahli kami akan selalu siap melayani kamu.',\n img: consultationChatViaApp\n }\n ],\n consultationTesti: [\n {\n name: 'Sapto Triyadi',\n location: 'Kebumen',\n img: sapto,\n testi:\n 'Jadi paham cara mengobati penyakit WFD serta berhasil menurunkan dari adanya infeksi penyakit WFD.'\n },\n {\n name: 'Syarifa Mayly',\n location: 'Sumatera Utara',\n img: syarifa,\n testi:\n 'Setelah melakukan konsultasi masalah kematian udang karena kres plankton, kini paham untuk mengatasi dan mengembalikan kondisi air menjadi stabil agar stres pada udang menurun.'\n },\n {\n name: 'Mamang',\n location: 'Sumenep Madura',\n img: mamang,\n testi:\n 'Melakukan konsultasi intens sehingga bisa lolos dari mortality, panennya pun menjadi memuaskan dibandingkan penambak daerah sekitar yang banyak terjadi gagal panen.'\n }\n ],\n consultationMessage:\n 'Halo, saya ingin bertanya seputar budidaya udang atau produk eFishery terkait tambak udang'\n },\n tawkTo: {\n propertyId: process.env.REACT_APP_TAWK_TO_PROPERTY_ID,\n widgetId: process.env.REACT_APP_TAWK_TO_WIDGET_ID\n },\n playStoreLink:\n 'https://play.google.com/store/apps/details?id=com.efishery.farmerapps&referrer=utm_source%3Dbtn_install_web_farmefishery_22%2520Juni%252022%26utm_medium%3Dbtn_install_web_farmefishery_22%2520Juni%252022%26utm_term%3Dbtn_install_web_farmefishery_22%2520Juni%252022%26utm_content%3Dbtn_install_web_farmefishery_22%2520Juni%252022%26utm_campaign%3Dbtn_install_web_farmefishery_22%2520Juni%252022%26anid%3Dadmob'\n};\n\nexport default config;\n","export const FlagsEnv = {\n isDev: process.env.REACT_APP_ENV === 'development',\n isStaging: process.env.REACT_APP_ENV === 'staging',\n isProduction: process.env.REACT_APP_ENV === 'production',\n isUat: process.env.REACT_APP_ENV === 'uat'\n};\n\nexport const ConfigEnv = {\n firebase: {\n apiKey: process.env.REACT_APP_FIREBASE_API_KEY ?? 'null',\n authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN ?? 'null',\n projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID ?? 'null',\n storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET ?? 'null',\n messagingSenderId:\n process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID ?? 'null',\n appId: process.env.REACT_APP_FIREBASE_APP_ID ?? 'null',\n measurementId: process.env.REACT_APP_FIREBASE_MEASUREMENT_ID ?? 'null'\n },\n analytics: {\n gtmId: process.env.REACT_APP_GTM_ID ?? '',\n fbPixelId: process.env.REACT_APP_FB_PIXEL_ID ?? '',\n appsFlyerId: process.env.REACT_APP_APPS_FLYER_ID ?? ''\n },\n clevertap: {\n projectId: process.env.REACT_APP_CLEVERTAP_PROJECT_ID ?? '',\n region: process.env.REACT_APP_CLEVERTAP_REGION ?? '',\n customPopupFeature: process.env.REACT_APP_FEATURE_CLEVERTAP_POPUP === '1'\n }\n};\n","const ACQUSISITION_STATE_STORAGE_KEY = 'acquisition-state';\nconst ACQUSISITION_DUMMY_STORAGE_KEY = 'is_dummy';\n\nexport const getAcquisitionState = () => {\n const state =\n JSON.parse(localStorage.getItem(ACQUSISITION_STATE_STORAGE_KEY)) || '';\n return state;\n};\n\nexport const setAcquisitionState = (state) => {\n localStorage.setItem(ACQUSISITION_STATE_STORAGE_KEY, JSON.stringify(state));\n};\n\nexport const editAcquisitionState = (key, value) => {\n const state = getAcquisitionState();\n state[key] = value;\n setAcquisitionState(state);\n};\n\nexport const deleteAcquisitionState = () => {\n localStorage.removeItem(ACQUSISITION_STATE_STORAGE_KEY);\n};\n\nexport const getDummyState = () => {\n const state = localStorage.getItem(ACQUSISITION_DUMMY_STORAGE_KEY);\n return state === 'true';\n};\n\nexport const setDummyState = () => {\n localStorage.setItem(ACQUSISITION_DUMMY_STORAGE_KEY, 'true');\n};\n\nexport const deleteDummyState = () => {\n localStorage.removeItem(ACQUSISITION_DUMMY_STORAGE_KEY);\n};\n","import Firebase from 'firebase/compat/app';\nimport { ConfigEnv } from './env';\nimport { getMessaging } from 'firebase/messaging/sw';\nimport { getToken } from 'firebase/messaging';\nimport { postDevices } from 'api/backend';\nimport { trackNotificationReceived } from './analytics';\nimport { isPushNotificationSupported } from './notification';\n\nconst firebaseConfig = ConfigEnv.firebase;\nexport const firebase = Firebase.initializeApp(firebaseConfig);\n\nlet messaging;\nif (isPushNotificationSupported()) {\n messaging = getMessaging(firebase);\n}\n\nexport const getFirebaseToken = async (lead_id) => {\n try {\n const currentToken = await getToken(messaging, {\n vapidKey: process.env.REACT_APP_FIREBASE_VAPID_KEY\n });\n if (currentToken) {\n await postDevices(lead_id, currentToken);\n return true;\n } else {\n console.log(`firebaseTokenError: ${currentToken}`);\n return false;\n }\n } catch (err) {\n console.log(`firebaseTokenError: ${err}`);\n return false;\n }\n};\n\nexport const onMessageListener = () =>\n new Promise((resolve) => {\n messaging.onMessage((payload) => {\n trackNotificationReceived();\n resolve(payload);\n });\n });\n","import {\n fetchAndActivate,\n getAll,\n getRemoteConfig\n} from 'firebase/remote-config';\nimport { firebase } from '../libs/firebase';\n\nexport const defaultValuesFlagsContext = {\n isWaterParameterEnabled: true,\n isRecommendationEnabled: true,\n isCycleIdentityEnabled: true,\n isSREnabled: true,\n isTotalFeedEnabled: true,\n isFCREnabled: true,\n isGrowthEnabled: true,\n isFeedLogsEnabled: true,\n isDiseaseEnabled: true,\n isHarvestEnabled: true,\n isSaprodiEnabled: true,\n isAmoniaAndNitriteEnabled: true,\n isLandingPageEnabled: true,\n isAcquisitionFormEnabled: true,\n isUsingNewDashboardVersion2: true,\n isVideoCanLike: true,\n isVideoCanComment: true,\n isSellShrimpEnabled: true,\n isCultivationCalculatorEnabled: true,\n isMarketplaceEnabled: true,\n isSurveyCalculatorEnabled: true,\n isMyPondsEnabled: false,\n isSurvicateCanClose: false,\n isDownloadPromptEnabled: false,\n isHarvestShrimpEnabledV2: false,\n isCultivationEventEnabled: false,\n isCultivationEventTutorialVideoEnabled: false,\n isCultivationHomePageEnabled: false,\n isProductRecommendationEnabled: false,\n isRelatedEventEnabled: false,\n isShipmentCostAndAddressEnabled: false,\n isCultivationRecordsEnabled: false,\n isOtpByWAEnabled: false,\n isListPromoEnabled: false,\n isNewConsultationEnabled: false,\n isUsingNewHistoryOrder: false,\n isMaintenanceEnabled: false,\n isReportPerCycleEnabled: false,\n isConsultationRegisterPremiumEnabled: false,\n isNotificationEnabled: true,\n isNonVerifiedFarmerInterceptorEnabled: false,\n isMarketplaceUsingGuestMode: false,\n isReportDetailsEnabled: false,\n isProductBestSellingEFarmEnabled: false,\n is3plInfoEnable: false,\n isABTestingProductEnabled: false,\n isJoinMentoringMemberPageEnabled: false,\n isRefreshTokenEnabled:\n process.env.REACT_APP_IS_REFRESH_TOKEN_ENABLED === 'true',\n isProductBundlingEnabled: false,\n isInternalModeEnabled: false,\n tokbudCsNumber: '-',\n expiryDurationPayment: '1440',\n isPaymentGatewayEnabled: false,\n isConfirmOrderCompleteEnabled: false,\n isComplaintFormEnabled: false,\n isFeedbackCustomerEnabled: true,\n //hapus kalau sudah aman di prod\n isGetWithLeadIdFarmsCultivation: false,\n isComplaintRequestTokenEnabled: false\n};\n\nexport const remoteConfig = () => {\n try {\n return getRemoteConfig(firebase);\n } catch (err) {\n if (err.response) {\n err.message = `Error get remote config ${err.response.status}`;\n }\n throw err;\n }\n};\n\nexport const fetchFlags = async () => {\n let newFlags = {};\n try {\n await fetchAndActivate(remoteConfig());\n const remoteFlags = getAll(remoteConfig());\n\n const keyWithObjectValues = [\n 'categoryDailyReports',\n 'isReportDetailsCategoryEnabled'\n ];\n const keyWithStringValues = ['tokbudCsNumber', 'expiryDurationPayment'];\n\n for (const [key, config] of Object.entries(remoteFlags)) {\n if (keyWithObjectValues.includes(key)) {\n newFlags[key] = config._value ? JSON.parse(config._value) : {};\n } else if (keyWithStringValues.includes(key)) {\n newFlags[key] = config._value;\n } else {\n newFlags[key] = config.asString() === 'true';\n }\n }\n return newFlags;\n } catch (error) {\n if (error.response) {\n error.message = `Error fetching flag HTTP ${error.response.status}`;\n }\n throw error;\n }\n};\n","import * as efiauth from 'libs/efiauth';\nimport axios from 'axios';\nimport packageJson from 'package-json';\n\nimport { getToolsbudToken } from '@cultivation-records/store/reportExternal';\n\nconst baseUrlCultivationService = process.env.REACT_APP_CULTIVATION_API_URL;\n\nconst setHeaderCultivation = {\n baseURL: baseUrlCultivationService,\n setHeaders: (headers, token) => {\n const toolsbudToken = getToolsbudToken();\n\n headers['Authorization'] = `Bearer ${\n toolsbudToken ? toolsbudToken : token\n }`;\n headers['X-Client-Id'] = toolsbudToken ? 'TOOLS_BUDIDAYA_V1' : 'EFARM';\n }\n};\n\nexport const apiCultivation = efiauth.createAxios(setHeaderCultivation);\n\nconst instanceTokenOpts = {\n setHeaders: (headers, token) => {\n headers['Authorization'] = `Bearer ${token}`;\n }\n};\n\nexport const instanceWithToken = efiauth.createAxios(\n efiauth.isRefreshTokenEnabled ? {} : instanceTokenOpts\n);\n\nexport const instanceWithTokenCustomer = efiauth.createAxiosCustomer(\n efiauth.isRefreshTokenEnabled ? {} : instanceTokenOpts\n);\n\nexport const instanceWithoutToken = axios.create({\n baseURL: process.env.REACT_APP_BACKEND_URL,\n headers: {\n 'X-Client-Id': 'efarm',\n 'X-Client-Version': packageJson.version\n }\n});\n\nexport const instanceCustomHeaders = (method, endpoint, headers, payload) => {\n let config = {\n method,\n url: `${process.env.REACT_APP_BACKEND_URL}${endpoint}`,\n headers,\n withCredentials: efiauth.isRefreshTokenEnabled\n };\n if (payload) Object.assign(config, { data: payload });\n return axios(config);\n};\n\nexport const request = async (requester) => {\n try {\n const res = await requester();\n return res?.data?.data;\n } catch (err) {\n if (err.response) {\n err.message = `Error HTTP ${err.response.status}`;\n if (err.response.status === 401) {\n efiauth.doLogout();\n }\n }\n throw err;\n }\n};\nexport const requestWithData = async (requester) => {\n try {\n const res = await requester();\n return res?.data;\n } catch (err) {\n if (err.response) {\n err.message = `Error HTTP ${err.response.status}`;\n if (err.response.status === 401) {\n efiauth.doLogout();\n }\n }\n throw err;\n }\n};\n","import { getItem, setItem, removeItem } from './skeleton';\nconst LEADS_STATE_STORAGE_KEY = 'leads-state';\n\nexport const getLeadsState = () => {\n const state =\n getItem(LEADS_STATE_STORAGE_KEY) !== undefined &&\n getItem(LEADS_STATE_STORAGE_KEY) !== ''\n ? JSON.parse(getItem(LEADS_STATE_STORAGE_KEY))\n : '';\n return state;\n};\n\nexport const setLeadsState = (state) => {\n setItem(LEADS_STATE_STORAGE_KEY, JSON.stringify(state));\n};\n\nexport const editLeadsState = (key, value) => {\n const state = getLeadsState();\n state[key] = value;\n setLeadsState(state);\n};\n\nexport const deleteLeadsState = () => {\n removeItem(LEADS_STATE_STORAGE_KEY);\n};\n\nexport const loadPersistedName = () => {\n const state = getLeadsState();\n return state === '' ? 'Hai, Pembudidaya' : state?.name;\n};\n","export const isPushNotificationSupported = () => {\n return 'serviceWorker' in navigator && 'PushManager' in window;\n};\n\nexport const isPushNotificationEnabled = () => {\n if (isPushNotificationSupported()) {\n let state = Notification.permission;\n switch (state) {\n case 'granted':\n return 'granted';\n case 'denied':\n return 'denied';\n default:\n return 'default';\n }\n }\n};\n","import { trackEvent, trackAFUserId } from 'libs/analytics';\n\nexport const trackUserLogin = (username, leadsId, leadsName) => {\n trackEvent('login', {\n username,\n lead_id: leadsId,\n lead_name: leadsName\n });\n trackAFUserId(leadsId);\n};\n\nexport const trackSignUp = (phoneNumber, questionnaire) => {\n trackEvent('sign_up_incomplete', {\n lead_phone: phoneNumber,\n questionnaire\n });\n trackAFUserId(phoneNumber);\n};\n\nexport const trackCompleteSignUp = (leadsId, leadsName) => {\n trackEvent('sign_up', {\n lead_id: leadsId,\n lead_name: leadsName\n });\n trackAFUserId(leadsId);\n};\n\nexport const trackUpdateData = (leadsId, leadsName) => {\n trackEvent('update_data', {\n lead_id: leadsId,\n lead_name: leadsName\n });\n trackAFUserId(leadsId);\n};\n\nexport const trackAlreadyLoggedIn = (leadsId, leadsName, phone) => {\n trackEvent('already_logged_in', {\n lead_id: leadsId,\n lead_name: leadsName,\n phone\n });\n trackAFUserId(leadsId);\n};\n\nexport const trackOtpRequested = (phone, media) => {\n trackEvent('otp_requested', {\n phone: `62${phone}`,\n media\n });\n};\n\nexport const trackOtpValid = (phone) => {\n trackEvent('otp_valid', {\n phone: `62${phone}`\n });\n};\n\nexport const trackOtpResend = (phone, media) => {\n trackEvent('otp_sent', {\n phone: `62${phone}`,\n media\n });\n};\n\nexport const trackUserLoginPhone = (phone) => {\n trackEvent('login_phone', {\n phone\n });\n};\n\nexport const trackerSignUpJourney = {\n trackLoginWithUsername: () => {\n trackEvent('btn_login_with_username');\n },\n trackLoginWithPhone: () => {\n trackEvent('btn_login_with_phone');\n },\n trackUseReferral: () => {\n trackEvent('btn_use_referral');\n },\n trackAttemptOTP: (value) => {\n trackEvent('attempt_otp', {\n try: value\n });\n }\n};\n","export default __webpack_public_path__ + \"static/media/icon-calendar.e888850a.png\";","import { lazy } from 'react';\nimport iconShop from 'assets/icons/new-dashboard/icon-shop.png';\nimport iconPlay from 'assets/icons/new-dashboard/icon-play.png';\nimport iconCalculator from 'assets/icons/new-dashboard/icon-calculator.png';\nimport iconShrimp from 'assets/icons/new-dashboard/icon-shrimp.png';\nimport iconCalendar from 'assets/icons/new-dashboard/icon-calendar.png';\nimport iconConsultation from 'assets/icons/new-dashboard/icon-consultation.png';\n\nconst LearnCultivationCard = lazy(() =>\n import('components/home/new-dashboard/LearnCultivationCard')\n);\nconst EventCultivationCard = lazy(() =>\n import('components/home/new-dashboard/EventCultivationCard')\n);\nconst SellShrimpCard = lazy(() =>\n import('components/home/new-dashboard/SellShrimpCard')\n);\n\nconst ConsultationCard = lazy(() =>\n import('components/home/new-dashboard/ConsultationCard')\n);\n\nexport const featureCard = [\n {\n id: 'sell-shrimp-card',\n title: 'Rencana Panen',\n className: 'px-2',\n path: '/shrimp-harvest',\n icon: (\n \"Rencana\n ),\n oldComponent: \n },\n {\n id: 'marketplace-card',\n title: 'Toko Budidaya',\n path: '/marketplace',\n className: 'pr-0',\n icon: \"Toko,\n oldComponent: null\n },\n {\n id: 'consultation-card',\n title: 'Konsultasi',\n path: '/consultation/wa',\n className: 'pl-0',\n icon: (\n \n ),\n oldComponent: \n },\n {\n id: 'learn-cultivation-card',\n title: 'Belajar Budidaya',\n path: '/learn-cultivation/list',\n className: 'pr-0',\n icon: (\n \"Belajar\n ),\n oldComponent: \n },\n {\n id: 'cultivation-calculator-card',\n title: 'Kalkulator',\n icon: (\n \"Rencana\n ),\n path: '/cultivation-calculator',\n oldComponent: null\n },\n {\n id: 'event-cultivation-card',\n title: 'Acara Budidaya',\n path: '/event-cultivation/list',\n className: 'pr-0',\n icon: (\n \"Acara\n ),\n oldComponent: \n }\n // {\n // id: \"financial-records\",\n // title: \"Pencatatan Keuangan\",\n // path: \"/learn-cultivation/list\",\n // className: \"pr-0\",\n // icon: \"Pencatatan,\n // oldComponent: \n // }\n];\n\nexport const belajar_budidaya = 'belajar_budidaya';\nexport const konsultasi_budidaya = 'konsultasi_budidaya';\nexport const rencana_panen = 'rencana_panen';\nexport const kalkulator_budidaya = 'kalkulator_budidaya';\nexport const toko_budidaya = 'toko_budidaya';\nexport const dl_konsultasi_budidaya = 'dl_konsultasi_budidaya';\nexport const DEEP_LINK_CREATE_FARM = 'buat_tambak';\n","export const EFI_TOOLSBUD_TOKEN = '_efiToolsbudToken';\n\nexport function setToolsbudToken(token: string) {\n sessionStorage.setItem(EFI_TOOLSBUD_TOKEN, token);\n}\n\nexport function getToolsbudToken() {\n return sessionStorage.getItem(EFI_TOOLSBUD_TOKEN);\n}\n\nexport function removeToolsbudToken() {\n return sessionStorage.removeItem(EFI_TOOLSBUD_TOKEN);\n}\n"],"sourceRoot":""}