{"version":3,"sources":["utils/index.ts","features/new-efarm/api/apiService.ts","components/reusable/Typography/index.tsx","store/location.js","api/backend.js","store/shrimpHarvest.js","contexts/FlagContext.js","utils/getDeviceType.ts","components/reusable/snackbar/styles.tsx","components/reusable/snackbar/Snackbar.tsx","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","utils/debounce.ts","assets/icons/new-dashboard/icon-calculator.png","assets/icons/new-dashboard/icon-shrimp.png","contexts/AlertContext.tsx","features/new-efarm/contexts/useAuthContext.tsx","features/new-efarm/enums/config-env.ts","features/new-efarm/hooks/useNotifcation.ts","features/new-efarm/api/notification.ts","assets/icons/new-dashboard/icon-consultation.png","utils/cookies.js","utils/transform.ts","hooks/useWindowDimensions.js","assets/icons/icon-check-circle.svg","assets/icons/icon-cross-circle-white.svg","components/reusable/PopupAlert.tsx","libs/analytics.js","libs/efiauth.js","assets/icons/new-dashboard/icon-shop.png","assets/icons/new-dashboard/icon-play.png","components/reusable/DownloadPrompt.js","assets/logo-efarm.webp","libs/survicate.js","store/auth.js","pages/LoadingScreen.js","assets/logo-text.png","libs/queryClient.js","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","store/leads.js","assets/icons/new-dashboard/icon-calendar.png","config/features.js","contexts/SnackbarContext.tsx","features/authentication/api/skeleton.js","features/cultivation-records/store/reportExternal.ts","libs/notification.js","features/authentication/tracking/index.js"],"names":["createAxios","baseURL","api","axios","create","interceptors","request","use","config","headers","window","internalToken","loadPersistedTokens","access_token","error","Promise","reject","response","status","originalRequest","_retry","post","process","refresh_token","then","res","setTokens","data","catch","deleteToken","messaging","finally","localStorage","clear","location","replace","apiFarmService","apiPatrickFarmService","apiCultivation","apiMarketPlace","apiAuthWithToken","Typography","styled","div","props","block","variant","weight","color","height","LOCATION_STATE_STORAGE_KEY","getLocationState","state","JSON","parse","getItem","defaultAddress","province_name","city_name","district_name","subdistrict_name","isRequiredAddressDetail","name","setLocationState","setItem","stringify","deleteLocationState","removeItem","instanceWithToken","requester","a","message","efiauth","fetchLeadProfile","get","fetchSummary","fetchAllBlock","params","fetchAllPonds","blockName","fetchPonds","pondName","fetchCycle","cycleId","postDevices","lead_id","device_token","device_type","getDeviceType","patchSwitchInternalMode","patch","SHRIMP_HARVEST_FORM_STORAGE_KEY","storeStateBenefitShrimp","getStateBenefitShrimp","deleteStateBenefitShrimp","storeFormShrimpState","getFormShrimpState","deleteFormShrimpState","persistHistoryState","payload","getPersistedHistory","deletePersistedHistory","persistHistoryDetailState","deletePersistedHistoryDetail","FlagsContext","createContext","FlagsProvider","defaults","children","useState","flags","setFlags","useEffect","remoteConfig","defaultConfig","handleRemoteConfig","useCallback","fetchFlags","newFlags","currentFlags","Provider","value","userAgent","navigator","vendor","opera","test","MSStream","Wrapper","Dismiss","Snackbar","hideCloseButton","useContext","SnackbarContext","isDisplayed","isHideConfirmButton","onClose","onConfirm","snackbarRef","useRef","container","document","getElementById","createPortal","CSSTransition","in","classNames","nodeRef","timeout","unmountOnExit","ref","onClick","Button","memo","KEY_IS_TWA","isTrustedWebActivity","sessionStorage","referrer","trim","length","referrerUrl","URL","protocol","hostname","instance","instanceCustomHeaders","signin","tempToken","Authorization","completeSignup","editProfile","put","signup","withCredentials","AuthContext","createContainer","initialState","isInitialized","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","tokens","login","username","password","getTempToken","app_token","signinResponse","accessToken","token","accessTokenExpiryTime","token_expired","refreshTokenExpiryTime","refresh_expired","fetchUserProfile","newUser","isPushNotificationEnabled","getFirebaseToken","storePersistedName","trackUserLogin","deleteDummyState","deleteAcquisitionState","loginByPhone","phoneNumber","acquireUser","editUser","trackUpdateData","leads","id","clevertapEventUpdateProfile","position","province","locations","city","district","subDistrict","signUp","trackSignUp","phone","setDummyState","logout","isFarmer","is_farmer","isFarmerRegistered","isGuestMode","useMemo","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","DEFAULT_DATE_FORMAT","now","format","fromNow","date","transformToDefaultFormat","transformToISOFormat","toISOString","transformToBackEndFormat","convertStartDate","convertEndDate","isEmpty","obj","Object","keys","constructor","insertArrayAt","array","index","slice","escapeRegExp","text","debounce","callback","wait","args","clearTimeout","setTimeout","apply","defaultValueAlertContext","showAlert","handleShowAlert","AlertContext","AlertProvider","setShowAlert","setMessage","typeAlert","setTypeAlert","showIcon","setShowIcon","msg","type","icon","handleCloseAlert","isOpen","AuthProvider","setToken","tokenInternal","setTokenInternal","notification","isNotificationActive","setIsNotificationActive","set","hasFisrtSetNotificationStore","hasFirstSetNotification","setHasFirstSetNotification","handleSetToken","refreshToken","clearLocalStorage","useAuth","FIREBASE","apiKey","authDomain","projectId","storageBucket","messagingSenderId","appId","measurementId","firebase","Firebase","initializeApp","getMessaging","useNotification","onDisplaySnackbar","onDisplay","isLoadingToggleNotification","setIsLoadingToggleNotification","isSupported","isGranted","Notification","permission","isDenied","isNotSet","isActive","requestPermission","onGranted","storeFirebaseToken","getToken","vapidKey","deviceToken","removeFirebaseToken","notifCookiesExpires","days","generateDayFromNowTo","formatNumber","amount","validAmount","defaultValue","parseInt","isNaN","toLocaleString","getWindowDimensions","width","innerWidth","innerHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize","addEventListener","removeEventListener","Alert","PopupAlert","handleClosePopupAlert","src","CircleCrossIcon","CircleCheckIcon","alt","loading","className","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","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","authsUrl","InvalidTokenError","Error","AuthServiceError","getAccessToken","setAccessToken","newAccessToken","setRefreshToken","newRefreshToken","setAccessTokenExpiryTime","newAccessTokenExpiryTime","setRefreshTokenExpiryTime","newRefreshTokenExpiryTime","checkExpired","overheadSecond","expiryTime","getTime","storePersistedTokens","setTokenExpiryTime","storePersistedExpiryTokenTime","TOKEN_STATIC_CUSTOMER","loadPersistedExpiryTokenTime","opts","packageJson","onBeforeRequest","refreshIfExpired","setHeaders","onRequestError","err","createAxiosCustomer","fetchApiRequest","endpoint","mem","doLogout","maxAge","removePersistedExpiryTokenTime","removePersistedTokens","removePersistedName","removeToolsbudToken","deleteLeadsState","DownloadPrompt","isInProhibitedPage","downloadBar","prohibitedRoutes","some","route","useRouteMatch","isExact","viewportWidth","isDownloadPromptVisible","logoeFarm","href","playStoreLink","target","rel","displayName","disableTargeting","_sva","getSurveyId","surveyName","displaySurvey","surveyId","options","forceDisplay","displayMethod","survicate","setVisitorTraits","showSurvey","questionAnswered","questionId","answer","closeSurvey","getStateSurvey","getState","visit","visitor","TOKENS_STORAGE_KEY","EXPIRY_TIME_TOKENS_STORAGE_KEY","NAME_STORAGE_KEY","NOTIFICATION","HAS_FIRST_SET_NOTIFICATION","undefined","expiryTimes","expiryTimesJson","tokensJson","console","hasFisrtSetNotification","LoadingScreen","Container","queryClient","QueryClient","defaultOptions","queries","retry","refetchOnWindowFocus","cacheTime","keepPreviousData","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","clevertapExt","notificationObj","setNotificationObj","popupOpen","setPopupOpen","notificationCallback","msgContent","title","description","notifObject","imgSrc","renderNotificationViewed","openState","toggleClose","NewEfarm","MaintenancePageProvider","App","getAnalytics","client","isLocalhost","registerValidSW","swUrl","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","waiting","postMessage","alert","reload","onUpdate","onSuccess","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","dsn","integrations","BrowserTracing","environment","tracesSampleRate","appVersion","ReactDOM","render","currentVersion","isEnabled","isVerboseMode","loadingComponent","StrictMode","fallback","origin","fetch","contentType","indexOf","ready","unregister","log","checkValidServiceWorker","serviceWorkerRegistration","userAgentData","platform","preventGoBack","history","pushState","searchParams","fromEntries","entries","redirectToWhatsapp","number","customNumber","encodeURIComponent","whatsapp","handleComplaint","leads_name","leads_id","backUrl","urlFormComplaint","cycleToInterval","cycle","start","tanggal","end","final_harvest","Number","useFlags","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","utmRoute","dt","setDate","getDate","isShowedMarketplaceIconByProvince","marketplace","excludeProvince","debounceTimer","time","debouncer","secureStorage","SecureLS","encodingType","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","ACQUSISITION_STATE_STORAGE_KEY","ACQUSISITION_DUMMY_STORAGE_KEY","getAcquisitionState","setAcquisitionState","getDummyState","firebaseConfig","isPushNotificationSupported","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","isMyPondsEnabled","isSurvicateCanClose","isDownloadPromptEnabled","isHarvestShrimpEnabledV2","isCultivationEventEnabled","isCultivationEventTutorialVideoEnabled","isCultivationHomePageEnabled","isProductRecommendationEnabled","isRelatedEventEnabled","isShipmentCostAndAddressEnabled","isCultivationRecordsEnabled","isOtpByWAEnabled","isListPromoEnabled","isNewConsultationEnabled","isUsingNewHistoryOrder","isMaintenanceEnabled","isReportPerCycleEnabled","isConsultationRegisterPremiumEnabled","isNotificationEnabled","isNonVerifiedFarmerInterceptorEnabled","isMarketplaceUsingGuestMode","isReportDetailsEnabled","isProductBestSellingEFarmEnabled","is3plInfoEnable","isABTestingProductEnabled","isJoinMentoringMemberPageEnabled","isProductBundlingEnabled","isInternalModeEnabled","tokbudCsNumber","expiryDurationPayment","isPaymentGatewayEnabled","isConfirmOrderCompleteEnabled","isComplaintFormEnabled","isFeedbackCustomerEnabled","isGetWithLeadIdFarmsCultivation","isComplaintRequestTokenEnabled","getRemoteConfig","fetchAndActivate","remoteFlags","getAll","keyWithObjectValues","keyWithStringValues","_value","asString","LEADS_STATE_STORAGE_KEY","LearnCultivationCard","EventCultivationCard","SellShrimpCard","ConsultationCard","featureCard","path","iconShrimp","oldComponent","iconShop","iconConsultation","iconPlay","iconCalculator","iconCalendar","windowTimeout","defaultValuesSnackbarContext","confirmStateClicked","SnackbarProvider","setIsDisplayed","setHideConfirmButton","setConfirmStateClicked","handleClose","handleDisplay","prevState","setHeaderCultivation","toolsbudToken","getToolsbudToken","instanceTokenOpts","instanceWithTokenCustomer","instanceWithoutToken","method","assign","EFI_TOOLSBUD_TOKEN","setToolsbudToken","leadsId","leadsName","lead_name","lead_phone","trackOtpRequested","media","trackOtpValid","trackOtpResend","trackUserLoginPhone","trackerSignUpJourney","trackLoginWithUsername","trackLoginWithPhone","trackUseReferral","trackAttemptOTP","try"],"mappings":"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","file":"static/js/main.22ae0c42.chunk.js","sourcesContent":["export * from './cookies';\nexport * from './date';\nexport * from './debounce';\nexport * from './operation';\nexport * from './transform';\n","import axios from 'axios';\nimport { deleteToken } from 'firebase/messaging';\n\nimport { setTokens } from 'libs/efiauth';\nimport { loadPersistedTokens } from 'store/auth';\n\nimport { messaging } from '@new-efarm/hooks/useNotifcation';\n\nconst hostAuth = process.env.REACT_APP_AUTH_SERVICE_URL;\n\nconst createAxios = (baseURL?: string) => {\n const api = axios.create({\n baseURL\n });\n api.interceptors.request.use(\n (config) => {\n config.headers['X-Client-Id'] = 'EFARM';\n config.headers['Authorization'] = `Bearer ${\n window.internalToken || loadPersistedTokens()?.access_token\n }`;\n\n return config;\n },\n (error) => Promise.reject(error)\n );\n api.interceptors.response.use(\n (response) => response,\n (error) => {\n if (error.response.status === 401) {\n const originalRequest = error.config;\n originalRequest._retry = true;\n\n axios\n .post(\n `${hostAuth}/auth/refresh`,\n {\n refresh_token: loadPersistedTokens()?.refresh_token\n },\n {\n headers: {\n 'X-Client-Id': 'EFARM'\n }\n }\n )\n .then((res) => {\n setTokens(res.data.data.access_token, res.data.data.refresh_token);\n return api(originalRequest);\n })\n .catch(() => {\n deleteToken(messaging).finally(() => {\n localStorage.clear();\n window.location.replace('/');\n });\n });\n }\n\n return Promise.reject(error);\n }\n );\n\n return api;\n};\n\nexport const apiFarmService = createAxios(process.env.REACT_APP_BACKEND_URL);\n\nexport const apiPatrickFarmService = createAxios(\n `${process.env.REACT_APP_PATRICK_API_URL}/farm`\n);\n\nexport const apiCultivation = createAxios(\n process.env.REACT_APP_CULTIVATION_API_URL\n);\n\nexport const apiGPT = createAxios(\n process.env.REACT_APP_CULTIVATION_GPT_API_URL\n);\n\nexport const apiMarketPlace = createAxios(\n process.env.REACT_APP_MARKETPLACE_URL\n);\n\nexport const apiAuthWithToken = createAxios(\n process.env.REACT_APP_AUTH_SERVICE_URL\n);\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","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","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 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 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","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 { apiFarmService } from '@new-efarm/api/apiService';\n\nimport * as api from './skeleton';\n\nconst instance = api.instanceWithoutToken;\nconst request = api.request;\nconst instanceCustomHeaders = api.instanceCustomHeaders;\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 apiFarmService.post('/users/complete-signup', payload);\n\nexport const editProfile = (payload) => {\n return apiFarmService.put('/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 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 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);\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 try {\n await completeSignup(payload);\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 };\n\n const editUser = async (payload) => {\n try {\n const res = await editProfile(payload);\n const { data } = res?.data ?? {};\n // WIP REFACTOR handle non farmers analytics user props\n trackUpdateData(data.leads?.id, data.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 };\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\nexport const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss';\nexport const DEFAULT_DATE_FORMAT = 'DD MMMM YYYY';\nexport const 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","// 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\";","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","import {\n createContext,\n ReactNode,\n useCallback,\n useState,\n useContext,\n useEffect\n} from 'react';\n\nimport {\n loadPersistedTokens,\n notification,\n hasFisrtSetNotification as hasFisrtSetNotificationStore\n} from 'store/auth';\nimport { setTokens } from 'libs/efiauth';\n\ninterface ValueAuthContext {\n setToken: (token: string, refreshToken: string) => void;\n token: Partial<{\n access_token: string;\n refresh_token: string;\n }>;\n clearLocalStorage: () => void;\n setTokenInternal: (token: string) => void;\n tokenInternal: string;\n isNotificationActive: boolean;\n setIsNotificationActive: React.Dispatch>;\n hasFirstSetNotification: boolean;\n setHasFirstSetNotification: React.Dispatch>;\n}\n\nconst AuthContext = createContext>({});\n\ninterface AuthProviderProps {\n children: ReactNode;\n}\n\nexport const AuthProvider = ({ children }: AuthProviderProps) => {\n const [token, setToken] = useState(loadPersistedTokens() ?? {});\n\n const [tokenInternal, setTokenInternal] = useState('');\n useEffect(() => {\n window.internalToken = tokenInternal;\n }, [tokenInternal]);\n\n const [isNotificationActive, setIsNotificationActive] = useState(\n notification.get()\n );\n useEffect(() => {\n notification.set(isNotificationActive);\n }, [isNotificationActive]);\n\n const [hasFirstSetNotification, setHasFirstSetNotification] = useState(\n hasFisrtSetNotificationStore.get()\n );\n useEffect(() => {\n hasFisrtSetNotificationStore.set(hasFirstSetNotification);\n }, [hasFirstSetNotification]);\n\n const handleSetToken = useCallback((token: string, refreshToken: string) => {\n setTokens(token, refreshToken);\n setToken({\n access_token: token,\n refresh_token: refreshToken\n });\n }, []);\n\n const clearLocalStorage = useCallback(() => {\n localStorage.clear();\n setToken({});\n setTokenInternal('');\n }, []);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useAuth = () => useContext(AuthContext) as ValueAuthContext;\n","export const 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","import { useCallback, useMemo, useState, useContext } from 'react';\nimport Firebase from 'firebase/compat/app';\nimport { getToken, deleteToken } from 'firebase/messaging';\nimport { getMessaging } from 'firebase/messaging/sw';\n\nimport { SnackbarContext } from 'contexts/SnackbarContext';\n\nimport { postDevices } from '@new-efarm/api/notification';\nimport { FIREBASE } from '@new-efarm/enums/config-env';\nimport { useAuth } from '@new-efarm/contexts/useAuthContext';\n\nexport const firebase = Firebase.initializeApp(FIREBASE);\nexport const messaging = getMessaging(firebase);\n\nexport const useNotification = () => {\n const {\n isNotificationActive,\n setIsNotificationActive,\n hasFirstSetNotification,\n setHasFirstSetNotification\n } = useAuth();\n\n const { onDisplay: onDisplaySnackbar } = useContext(SnackbarContext);\n const [isLoadingToggleNotification, setIsLoadingToggleNotification] =\n useState(false);\n\n const notification = useMemo(\n () => ({\n isSupported: 'serviceWorker' in navigator && 'PushManager' in window,\n isGranted: Notification.permission === 'granted',\n isDenied: Notification.permission === 'denied',\n isNotSet:\n Notification.permission !== 'granted' &&\n Notification.permission !== 'denied',\n isActive: isNotificationActive,\n hasFirstSetNotification: hasFirstSetNotification\n }),\n [isNotificationActive, hasFirstSetNotification]\n );\n\n const requestPermission = useCallback((onGranted: () => void) => {\n Notification.requestPermission().then((permission) => {\n if (permission === 'granted') {\n onGranted();\n }\n });\n }, []);\n\n const storeFirebaseToken = useCallback(\n async (lead_id) => {\n try {\n setIsLoadingToggleNotification(true);\n const token = await getToken(messaging, {\n vapidKey: process.env.REACT_APP_FIREBASE_VAPID_KEY\n });\n if (token) {\n await postDevices(lead_id, token);\n setIsNotificationActive(true);\n onDisplaySnackbar('Berhasil mengaktifkan notifikasi');\n\n if (!notification.hasFirstSetNotification) {\n setHasFirstSetNotification(true);\n }\n }\n } catch (err) {\n //error\n } finally {\n setIsLoadingToggleNotification(false);\n }\n },\n [\n setIsNotificationActive,\n notification.hasFirstSetNotification,\n setHasFirstSetNotification,\n onDisplaySnackbar\n ]\n );\n\n const removeFirebaseToken = useCallback(async () => {\n try {\n setIsLoadingToggleNotification(true);\n await deleteToken(messaging);\n\n setIsNotificationActive(false);\n onDisplaySnackbar('Notifikasi dinonaktifkan');\n } catch (err) {\n //\n } finally {\n setIsLoadingToggleNotification(false);\n }\n }, [setIsNotificationActive, onDisplaySnackbar]);\n\n return {\n notification,\n storeFirebaseToken,\n requestPermission,\n removeFirebaseToken,\n isLoadingToggleNotification\n };\n};\n","import getDeviceType from 'utils/getDeviceType';\n\nimport { apiFarmService } from './apiService';\n\nexport const postDevices = (leadId: string, deviceToken: string) =>\n apiFarmService.post('/leads/devices', {\n lead_id: leadId,\n device_token: deviceToken,\n device_type: getDeviceType()\n });\n","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","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/icon-check-circle.ebf13a9b.svg\";","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","/* 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 setAccessToken(accessToken);\n setRefreshToken(refreshToken);\n\n storePersistedTokens({\n access_token: accessToken,\n refresh_token: refreshToken\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 }\n};\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 { 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","export default __webpack_public_path__ + \"static/media/logo-efarm.a64ea944.webp\";","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","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';\nconst NOTIFICATION = 'notification';\nconst HAS_FIRST_SET_NOTIFICATION = 'has_first_set_notification';\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\nexport const notification = {\n set: (value) => {\n localStorage.setItem(NOTIFICATION, JSON.stringify(value));\n },\n get: () => JSON.parse(localStorage.getItem(NOTIFICATION) || 'false')\n};\n\nexport const hasFisrtSetNotification = {\n set: (value) => {\n localStorage.setItem(HAS_FIRST_SET_NOTIFICATION, JSON.stringify(value));\n },\n get: () =>\n JSON.parse(localStorage.getItem(HAS_FIRST_SET_NOTIFICATION) || 'false')\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,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\"","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 { 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 useHistory,\n useLocation,\n useRouteMatch\n} from 'react-router-dom';\nimport { getDummyState } from '../store/acquisition';\n\n// Assets\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport 'react-date-range/dist/styles.css';\nimport 'react-date-range/dist/theme/default.css';\nimport 'assets/styles/onefish.scss';\nimport 'assets/styles/components/date_range.scss';\nimport 'assets/styles/components/_table.scss';\nimport 'assets/styles/components/_floating-bar.scss';\n\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\n//new eFarm - Route\nconst NewEfarm = lazy(() => import('@new-efarm/routes'));\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\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 console.log('auth.user', auth.user);\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\nimport './styles.css';\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 { 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 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","import { useState, createContext, FC, ReactNode, useCallback } from 'react';\nimport { node } from 'prop-types';\n\nimport { Snackbar } from 'components/reusable/snackbar';\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\nlet windowTimeout: ReturnType;\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 [confirmStateClicked, setConfirmStateClicked] = useState(0);\n\n const handleClose = useCallback(() => {\n setIsDisplayed(false);\n setHideConfirmButton(true);\n\n clearTimeout(windowTimeout);\n }, []);\n\n const handleDisplay = useCallback(\n (message: string, isHideConfirmButton = true) => {\n setMessage(message);\n setIsDisplayed(true);\n setHideConfirmButton(isHideConfirmButton);\n\n if (isHideConfirmButton) {\n windowTimeout = setTimeout(() => {\n handleClose();\n }, 2000);\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};\n\nSnackbarProvider.propTypes = {\n children: node.isRequired\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","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","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"],"sourceRoot":""}