{"version":3,"sources":["webpack:///./app/javascript/services/secureService.js","webpack:///./app/javascript/components/context/AppContext.js","webpack:///./app/javascript/services/dealershipService.js","webpack:///./app/javascript/services/posthogService.js","webpack:///./app/javascript/components/App.js","webpack:///./app/javascript/packs/index.jsx"],"names":["SecureService","constructor","defaultHeaders","credentials","generateAuthHeader","_","a","Config","authHeader","ts","Math","round","Date","getTime","toHash","key","secret","hash","sha256","toString","toUpperCase","scheme","AppContext","React","createContext","AppProvider","_ref","children","_React$useState","useState","global","dealership","uuid","name","first_name","last_name","contact_person","contact_person_id_number","contact_number","email","sole_proprietor_id_passport_number","company_structure","registration_number","location","dp_name_and_surname","has_vat_number","vat_number","is_incentivisable","is_lead_contactable","lead_email_notification","banking_details","bank","account_type","account_number","branch_name","branch_code","id_number","is_part_of_group","processPercentage","leads","update","lead","contextParams","_objectSpread","state","push","updateGlobal","profile","calculate","dealershipDetails","Object","keys","nonRequiredFields","criteria","filter","includes","bankingDetails","completedFields","map","pop","field","profileCompletionPercentage","length","data","assign","error","updateDetails","details","dealershipProfile","get","async","dealershipStringfied","Helpers","getInStorage","JSON","parse","DealershipService","getDealershipProfile","_id","err","console","log","letsPartnerUp","val","type","_React$useState2","_slicedToArray","setState","useEffect","params","newState","createElement","Provider","value","querystring","_Service","arguments","requestCallback","userId","fetch","services","replace","method","headers","this","Authorization","body","stringify","json","retrieveDealership","retrieve","duuid","createDealership","updateDealership","authDealership","auth","sendPasswordResetEmail","changePassword","createDealershipLead","createLead","getDealershipChartData","chartData","dealershipId","updateDealershipProfile","updateDealershipBankingDetails","updateDealershipDetails","updateDealershipMarketingDetails","getLeadStates","getLeads","updateLeadEmailNotification","checked","leadEmailNotification","sendQueryEmail","syncLeads","sync","inactivityTimer","resetInactivityTimer","clearTimeout","setTimeout","stopSessionRecording","posthog","startSessionRecording","resumeSessionRecording","sessionRecordingStarted","window","addEventListener","cleanupInactivityListeners","document","removeEventListener","reset","cssFontMontserrat","href","rel","getElementsByTagName","appendChild","cssFa","Bugsnag","start","apiKey","process","plugins","BugsnagPluginReact","appVersion","webVersion","releaseStage","onError","event","_event$errors","_event$errors$","errors","errorMessage","ErrorBoundary","getPlugin","createErrorBoundary","componentLoader","lazyComponent","attemptsLeft","undefined","Promise","resolve","reject","then","catch","QuickStartPage","lazy","MotorGetStartedPage","PaymentRecollectV3","DealershipGetStarted","DealershipSignIn","DealershipSignUp","DealershipHowItWorks","SyncPolicyPage","MotorLandingPage","MotorProofOfCoverPage","SalesAgentSignInPage","DealershipResetPassword","MotorDashboardPage","MotorVehicleDetailsPage","MotorPersonalDetailsPage","MotorQuotePage","MotorPaymentDetailsPage","MotorSuccessPage","DealershipDashboard","DealershipTrackLeads","DealershipProfile","DealershipNewPassword","ClaimGetStartedPage","ClaimNewPage","protectedRoutes","path","component","routes","App","useLocation","handleCrossDomainMsg","origin","msg","ucid","referrer_website","setInStorage","host","init","postHogAPIKey","api_host","postHogHostUrl","session_recording","maskInputFn","text","inputElement","_inputElement$classLi","classList","contains","repeat","getAuthUserId","identify","initializePostHog","forEach","hideMobileViewProgressIndicator","pathname","dealershipString","Redirect","validateUser","IntercomProvider","appId","initializeDelay","autoBoot","Router","Suspense","fallback","Switch","Route","exact","index","ReactDOM","render","PopupAlert"],"mappings":"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","file":"js/index~1f075a2e-b2dd15f1b6cf3f4a4385.chunk.js","sourcesContent":["import { Config } from '../utilities/config'\nimport sha256 from 'crypto-js/sha256'\n\nexport class SecureService {\n defaultHeaders = {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n credentials: 'include'\n }\n\n generateAuthHeader = _ => {\n let a = Config.authHeader\n let ts = Math.round(new Date().getTime() / 1000)\n let toHash = `${a.key}:${ts}:${a.secret}`\n let hash = sha256(toHash).toString().toUpperCase()\n let header = `${a.scheme} key=${a.key} timestamp=${ts} signature=${hash}`\n return header\n }\n\n}\n","import React from 'react';\nimport { DealershipService } from '../../services/dealershipService';\nimport { Helpers } from '../../utilities/helpers';\n\nexport const AppContext = React.createContext('App');\n\nexport const AppProvider = ({ children }) => {\n const [state, setState] = React.useState({\n global: {\n dealership: {\n uuid: '', // cant change\n name: '',\n first_name: '', // cant change\n last_name: '', // cant change\n contact_person: '',\n contact_person_id_number: '',\n contact_number: '',\n email: '',\n sole_proprietor_id_passport_number: '',\n company_structure: '',\n registration_number: '',\n location: '',\n dp_name_and_surname: '',\n has_vat_number: '',\n vat_number: '',\n is_incentivisable: false,\n is_lead_contactable: false,\n lead_email_notification: false,\n banking_details: {\n bank: '',\n account_type: '',\n account_number: '',\n branch_name: '', // can't change\n branch_code: '', // can't change\n },\n id_number: '', // excluded; duplicate\n is_part_of_group: false,\n // group_name: '', // can't change\n has_vat_number: false,\n },\n processPercentage: 0,\n leads: [],\n },\n leads: {\n update: (lead) => {\n const contextParams = { ...state.global };\n contextParams.leads.push(lead);\n\n updateGlobal({ ...contextParams });\n },\n },\n profile: {\n calculate: () => {\n try {\n const dealershipDetails = Object.keys(state.global.dealership);\n\n const nonRequiredFields = [\n 'uuid',\n 'first_name',\n 'last_name',\n 'id_number',\n 'is_incentivisable',\n 'is_lead_contactable',\n 'is_part_of_group',\n 'has_vat_number',\n 'vat_number',\n 'sole_proprietor_id_passport_number',\n ];\n const nonRequiredBankingFields = ['branch_name', 'branch_code'];\n\n const criteria = dealershipDetails.filter((key) => {\n return !nonRequiredFields.includes(key);\n });\n\n const bankingDetails = state.global.dealership['banking_details'];\n\n let completedFields = 0;\n\n criteria.map((key) => {\n if (key !== 'banking_details') {\n if (state.global.dealership[key] !== '') {\n completedFields++;\n }\n } else {\n criteria.pop()\n Object.keys(bankingDetails).map((field) => {\n if (bankingDetails[field] !== '') {\n completedFields++;\n }\n });\n }\n });\n\n let profileCompletionPercentage = Math.round(\n // (completedFields /\n // (criteria.length +\n // Object.keys(bankingDetails).length -\n // nonRequiredBankingFields.length)) *\n // 100\n (completedFields / criteria.length) * 100\n );\n\n profileCompletionPercentage =\n profileCompletionPercentage > 100\n ? 100\n : profileCompletionPercentage;\n\n const contextParams = { ...state.global };\n const data = Object.assign({}, contextParams, {\n processPercentage:\n completedFields === 0 ? 0 : profileCompletionPercentage,\n });\n\n updateGlobal({ ...data });\n } catch (error) {\n return null;\n }\n },\n updateDetails: (details) => {\n const contextParams = { ...state.global };\n const data = Object.assign({}, contextParams.dealership, details);\n\n updateGlobal({ dealership: data });\n state.profile.calculate();\n },\n },\n dealershipProfile: {\n get: async () => {\n try {\n const dealershipStringfied = await Helpers.getInStorage('dealership');\n const dealership = JSON.parse(dealershipStringfied);\n\n if (dealership) {\n const profile = await DealershipService.getDealershipProfile(\n dealership._id\n );\n const contextParams = { ...state.global };\n const data = Object.assign(\n {},\n contextParams.dealership,\n profile.data\n );\n\n updateGlobal({ dealership: data });\n state.profile.calculate();\n }\n } catch (err) {\n console.log('Something went wrong. Could not get user details.', err);\n }\n },\n },\n letsPartnerUp: {\n update: (val, type) => {\n const contextParams = { ...state.global };\n\n if (type === 'is_lead_contactable') {\n contextParams.dealership.is_lead_contactable = val;\n } else {\n contextParams.dealership.is_incentivisable = val;\n }\n\n updateGlobal({ dealership: contextParams.dealership });\n },\n },\n });\n\n React.useEffect(() => {\n state.dealershipProfile.get();\n }, []);\n\n const updateGlobal = (params) => {\n const contextParams = state.global;\n Object.assign(contextParams, params);\n const newState = Object.assign({}, contextParams.global, state);\n setState({ ...newState });\n };\n\n return {children};\n};\n","import { SecureService } from './secureService';\nimport { Config } from '../utilities/config';\nimport { Helpers } from '../utilities/helpers';\n\nconst { querystring } = Helpers;\n\nclass _Service extends SecureService {\n // create a callback request\n requestCallback = async (userId, params) => {\n const response = await fetch(\n Config.services.dealership.requestCallback.replace(':user_id', userId),\n {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n }\n );\n\n return response.json();\n };\n\n // retrieve dealership by uuid\n retrieveDealership = async (duuid) => {\n const response = await fetch(\n Config.services.dealership.retrieve.replace(':duuid', duuid),\n {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n }\n );\n\n return response.json();\n };\n\n // create dealership\n createDealership = async (params) => {\n const response = await fetch(Config.services.dealership.createDealership, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n });\n\n return response.json();\n };\n\n // create dealership (new platform)\n createDealership = async (params) => {\n const response = await fetch(Config.services.dealership.createDealership, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n });\n\n return response.json();\n };\n\n // update dealership\n updateDealership = async (params) => {\n const response = await fetch(Config.services.dealership.update, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n });\n\n return response.json();\n };\n\n // auth dealership by email and uuid and password\n authDealership = async (params) => {\n const response = await fetch(Config.services.dealership.auth, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n });\n\n return response.json();\n };\n\n // send password reset email\n sendPasswordResetEmail = async (params) => {\n const response = await fetch(\n Config.services.dealership.sendPasswordResetEmail,\n {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n }\n );\n return response.json();\n };\n\n // change password\n changePassword = async (params) => {\n const response = await fetch(Config.services.dealership.changePassword, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n });\n return response.json();\n };\n\n // create dealership lead\n createDealershipLead = async (params) => {\n const response = await fetch(Config.services.dealership.createLead, {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n });\n return response.json();\n };\n\n getDealershipChartData = async (dealershipId) => {\n const response = await fetch(\n Config.services.dealership.chartData.replace(':id', dealershipId),\n {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n }\n );\n\n return response.json();\n };\n\n getDealershipProfile = async (dealershipId) => {\n const response = await fetch(\n Config.services.dealership.profile.replace(':id', dealershipId),\n {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n }\n );\n\n return response.json();\n };\n\n updateDealershipProfile = async (dealershipId, params) => {\n const response = await fetch(\n Config.services.dealership.profile.replace(':id', dealershipId),\n {\n method: 'PUT',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n }\n );\n return response.json();\n };\n\n updateDealershipBankingDetails = async (dealershipId, params) => {\n const response = await fetch(\n Config.services.dealership.bankingDetails.replace(':id', dealershipId),\n {\n method: 'PUT',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n }\n );\n return response.json();\n };\n\n updateDealershipDetails = async (dealershipId, params) => {\n const response = await fetch(\n Config.services.dealership.details.replace(':id', dealershipId),\n {\n method: 'PUT',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n }\n );\n return response.json();\n };\n\n updateDealershipMarketingDetails = async (dealershipId, params) => {\n const response = await fetch(\n Config.services.dealership.key.replace(':id', dealershipId),\n {\n method: 'PUT',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n }\n );\n return response.json();\n };\n\n getLeadStates = async () => {\n const response = await fetch(Config.services.dealership.getLeadStates, {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n });\n\n return response.json();\n };\n\n getLeads = async (uuid) => {\n const response = await fetch(\n Config.services.dealership.getLeads.replace(':uuid', uuid),\n {\n method: 'GET',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n }\n );\n\n return response.json();\n };\n\n updateLeadEmailNotification = async (uuid, checked) => {\n const response = await fetch(\n Config.services.dealership.leadEmailNotification.replace(':uuid', uuid),\n {\n method: 'PUT',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify({ checked }),\n }\n );\n\n return response.json();\n };\n\n sendQueryEmail = async (params) => {\n const response = await fetch(\n Config.services.dealership.sendQueryEmail,\n {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n }\n );\n return response.json()\n };\n\n syncLeads = async (params) => {\n const response = await fetch(\n Config.services.dealership.sync,\n {\n method: 'POST',\n headers: {\n ...this.defaultHeaders,\n Authorization: this.generateAuthHeader(),\n },\n body: JSON.stringify(params),\n }\n );\n return response.json()\n };\n}\n\nconst DealershipService = new _Service();\nexport { DealershipService };\n","import posthog from 'posthog-js';\nimport { postHogAPIKey, postHogHostUrl } from '../utilities/config';\nimport { Helpers } from '../utilities/helpers';\n\nlet inactivityTimer;\nconst INACTIVITY_TIMEOUT = 1 * 60 * 1000;\n\nconst resetInactivityTimer = () => {\n clearTimeout(inactivityTimer);\n inactivityTimer = setTimeout(() => {\n stopSessionRecording();\n }, INACTIVITY_TIMEOUT);\n};\n\nconst stopSessionRecording = () => {\n posthog.stopSessionRecording();\n};\n\nconst startSessionRecording = () => {\n posthog.startSessionRecording();\n};\n\nconst resumeSessionRecording = () => {\n if (!posthog.sessionRecordingStarted) {\n startSessionRecording();\n }\n};\n\nconst initializePostHog = async () => {\n posthog.init(postHogAPIKey, {\n api_host: postHogHostUrl,\n session_recording: {\n maskInputFn: (text, inputElement) => {\n if (inputElement?.classList?.contains('sensitive-data-field')) {\n return '*'.repeat(text.length);\n }\n\n return text;\n },\n },\n });\n\n const userId = await Helpers.getAuthUserId();\n\n if (userId) {\n posthog.identify(userId);\n } else {\n posthog.reset()\n }\n\n // Set up event listeners after initializing PostHog\n document.addEventListener('mousemove', resetInactivityTimer);\n document.addEventListener('keypress', resetInactivityTimer);\n document.addEventListener('click', resetInactivityTimer);\n\n document.addEventListener('mousemove', resumeSessionRecording);\n document.addEventListener('keypress', resumeSessionRecording);\n document.addEventListener('click', resumeSessionRecording);\n\n // Start the inactivity timer\n resetInactivityTimer();\n};\n\nconst monitorUserActivity = () => {\n const events = ['mousemove', 'keypress', 'click'];\n\n events.forEach((event) => {\n document.addEventListener(event, resetInactivityTimer);\n });\n\n // Start the inactivity timer when monitoring begins\n resetInactivityTimer();\n};\n\nconst cleanupActivityMonitoring = () => {\n const events = ['mousemove', 'keypress', 'click'];\n\n events.forEach((event) => {\n document.removeEventListener(event, resetInactivityTimer);\n });\n\n clearTimeout(inactivityTimer);\n};\n\nconst cleanupInactivityListeners = () => {\n document.removeEventListener('mousemove', resetInactivityTimer);\n document.removeEventListener('keypress', resetInactivityTimer);\n document.removeEventListener('click', resetInactivityTimer);\n\n document.removeEventListener('mousemove', resumeSessionRecording);\n document.removeEventListener('keypress', resumeSessionRecording);\n document.removeEventListener('click', resumeSessionRecording);\n\n clearTimeout(inactivityTimer);\n posthog.reset()\n};\n\n// Cleanup listeners when no longer needed\nwindow.addEventListener('beforeunload', cleanupInactivityListeners);\n\nexport {\n initializePostHog,\n monitorUserActivity,\n stopSessionRecording,\n startSessionRecording,\n cleanupActivityMonitoring\n}","import React, { Suspense, lazy } from 'react';\nimport {\n BrowserRouter as Router,\n Route,\n Switch,\n Redirect,\n useLocation,\n useHistory,\n} from 'react-router-dom';\nimport { IntercomProvider } from 'react-use-intercom';\nconst APP_ID = process.env.INTERCOM_APP_ID;\nimport posthog from 'posthog-js'\nimport { postHogHostUrl, postHogAPIKey } from '../utilities/config';\nimport {webVersion} from '../utilities/config';\nimport { Helpers } from '../utilities/helpers';\nimport { AppProvider } from './context/AppContext';\nimport Bugsnag from '@bugsnag/js'\nimport BugsnagPluginReact from '@bugsnag/plugin-react'\nimport {\n initializePostHog,\n monitorUserActivity,\n stopSessionRecording,\n startSessionRecording,\n cleanupActivityMonitoring,\n} from '../services/posthogService';\n\nconst env = process.env.REACT_ENV || 'development' // options: 'development', 'test', 'production'.\nconst BUGSNAG_KEY = process.env.BUGSNAG_API_KEY\n// dynamically load stylesheets to improve initial load\n// load font (Montserrat)\nvar cssFontMontserrat = document.createElement('link');\ncssFontMontserrat.href = 'https://fonts.googleapis.com/css?family=Montserrat:ital,wght@0,400;0,500;0,600;1,700,900&display=swap';\ncssFontMontserrat.rel = 'stylesheet';\ncssFontMontserrat.type = 'text/css';\ndocument.getElementsByTagName('head')[0].appendChild(cssFontMontserrat);\n// load fontawesome\nvar cssFa = document.createElement('link');\ncssFa.href = 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css';\ncssFa.rel = 'stylesheet';\ncssFa.type = 'text/css';\ndocument.getElementsByTagName('head')[0].appendChild(cssFa);\n\nBugsnag.start({\n apiKey: BUGSNAG_KEY,\n plugins: [new BugsnagPluginReact()],\n appVersion: webVersion,\n releaseStage: env,\n onError: (event) => {\n if (event?.errors?.[0]?.errorMessage === 'ResizeObserver loop completed with undelivered notifications.') {\n return false\n }\n }\n})\n\n\nconst ErrorBoundary = Bugsnag.getPlugin('react').createErrorBoundary(React)\n\nconst componentLoader = (lazyComponent, attemptsLeft = 3) => {\n return new Promise((resolve, reject) => {\n lazyComponent()\n .then(resolve)\n .catch((error) => {\n setTimeout(() => {\n if (attemptsLeft === 1) {\n reject(error);\n return;\n }\n componentLoader(lazyComponent, attemptsLeft - 1).then(resolve, reject);\n }, 1500); // Retry after 1500 ms\n });\n });\n};\n\nconst QuickStartPage = lazy(() => componentLoader(() => import('./views/QuickStartPage'), 3));\nconst MotorGetStartedPage = lazy(() => componentLoader(() => import('./views/MotorGetStartedPage'), 3));\nconst PaymentRecollectV3 = lazy(() => componentLoader(() => import('./views/PaymentRecollectV3'), 3));\nconst DealershipGetStarted = lazy(() => componentLoader(() => import('./views/DealershipGetStarted'), 3));\nconst DealershipSignIn = lazy(() => componentLoader(() => import('./views/DealershipSignIn'), 3));\nconst DealershipSignUp = lazy(() => componentLoader(() => import('./views/DealershipSignUp'), 3));\nconst DealershipHowItWorks = lazy(() => componentLoader(() => import('./views/DealershipHowItWorks'), 3));\nconst SyncPolicyPage = lazy(() => componentLoader(() => import('./views/SyncPolicyPage'), 3));\nconst MotorLandingPage = lazy(() => componentLoader(() => import('./views/MotorLandingPage'), 3));\nconst MotorProofOfCoverPage = lazy(() => componentLoader(() => import('./views/MotorProofOfCoverPage'), 3));\nconst SalesAgentSignInPage = lazy(() => componentLoader(() => import('./views/SalesAgentSignInPage'), 3));\nconst DealershipResetPassword = lazy(() => componentLoader(() => import('./views/DealershipResetPassword'), 3));\nconst MotorDashboardPage = lazy(() => componentLoader(() => import('./views/MotorDashboardPage'), 3));\nconst MotorVehicleDetailsPage = lazy(() => componentLoader(() => import('./views/MotorVehicleDetailsPage'), 3));\nconst MotorPersonalDetailsPage = lazy(() => componentLoader(() => import('./views/MotorPersonalDetailsPage'), 3));\nconst MotorQuotePage = lazy(() => componentLoader(() => import('./views/MotorQuotePage'), 3));\nconst MotorPaymentDetailsPage = lazy(() => componentLoader(() => import('./views/MotorPaymentDetailsPage'), 3));\nconst MotorSuccessPage = lazy(() => componentLoader(() => import('./views/MotorSuccessPage'), 3));\nconst DealershipDashboard = lazy(() => componentLoader(() => import('./views/DealershipDashboard'), 3));\nconst DealershipTrackLeads = lazy(() => componentLoader(() => import('./views/DealershipTrackLeads'), 3));\nconst DealershipProfile = lazy(() => componentLoader(() => import('./views/DealershipProfile'), 3));\nconst DealershipNewPassword = lazy(() => componentLoader(() => import('./views/DealershipNewPassword'), 3));\nconst ClaimGetStartedPage = lazy(() => componentLoader(() => import('./views/ClaimGetStartedPage'), 3));\nconst ClaimNewPage = lazy(() => componentLoader(() => import('./views/ClaimNewPage'), 3));\nconst DealershipEmailSuccessPage = lazy(() => componentLoader(() => import('./views/DealershipEmailSuccessPage'), 3));\n\nconst protectedRoutes = [\n {\n path: '/dealership/dashboard',\n component: DealershipDashboard,\n },\n {\n path: '/dealership/track-leads',\n component: DealershipTrackLeads,\n },\n {\n path: ['/dealership/profile', '/dealership/details'],\n component: DealershipProfile,\n },\n {\n path: '/dealership/how-it-works',\n component: DealershipHowItWorks,\n },\n];\n\nconst routes = [\n {\n path: ['/dealership/sign-up', '/dealership/new'],\n component: DealershipSignUp,\n },\n {\n path: ['/dealership/sign-in', '/dealership/signin'],\n component: DealershipSignIn,\n },\n {\n path: ['/dealership/reset-password', '/dealership/new-password'],\n component: DealershipResetPassword,\n },\n {\n path: '/dealership/update-password',\n component: DealershipNewPassword,\n },\n {\n path: '/dealership/get-started',\n component: DealershipGetStarted,\n },\n {\n path: '/dealership/success-page',\n component: DealershipEmailSuccessPage,\n },\n];\n\nconst App = () => {\n const location = useLocation();\n\n const handleCrossDomainMsg = (event) => {\n const PERMITTED_DOMAIN = 'https://www.pineapple.co.za';\n if (event.origin === PERMITTED_DOMAIN) {\n var msg = event.data;\n if (msg && (msg.ucid || msg.referrer_website)) {\n msg.ucid && Helpers.setInStorage('ucid', `${msg.ucid}`, true)\n msg.referrer_website && !msg.referrer_website.includes('pineapple') && Helpers.setInStorage('referrerWebsite', `${msg.referrer_website}`, true)\n }\n }\n }\n\n React.useEffect(() => {\n window.addEventListener('message', handleCrossDomainMsg);\n if (\n !window.location.host.includes('127.0.0.1') && \n !window.location.host.includes('localhost')\n ) {\n initializePostHog()\n startSessionRecording();\n monitorUserActivity();\n }\n // returned function will be called on component unmount\n return () => {\n window.removeEventListener('message', handleCrossDomainMsg)\n if (\n !window.location.host.includes('127.0.0.1') &&\n !window.location.host.includes('localhost')\n ) {\n stopSessionRecording();\n cleanupActivityMonitoring();\n }\n }\n }, [])\n\n React.useEffect(() => {\n // setup scroll-based listeners\n window.addEventListener('scroll', Helpers.hideMobileViewProgressIndicator)\n\n async function validateUser() {\n if (location.pathname.includes('/dealership')) {\n const dealershipString = await Helpers.getInStorage('dealership');\n const dealership = JSON.parse(dealershipString || '{}');\n const isProtected =\n location.pathname.includes('/dealership/sign-in') ||\n location.pathname.includes('/dealership/sign-up');\n if (!isProtected) {\n if (!dealership || !dealership._id || !dealership.uuid) {\n // alert('You must be logged in to access this page. You will now be redirected to the Sign-In page.');\n ;\n }\n }\n }\n }\n\n validateUser();\n\n return () => {\n window.removeEventListener('scroll', Helpers.hideMobileViewProgressIndicator)\n }\n }, []);\n\n return (\n \n \n \n \n Loading...}>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {routes.map((routes, index) => (\n \n ))}\n {protectedRoutes.map((routes, index) => (\n \n ))}\n {/* End of new dealership platorm */}\n \n \n \n \n \n \n \n );\n};\n\nexport default App;\n\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport App from '../components/App'\nimport { BrowserRouter as Router, Route } from 'react-router-dom';\nimport PopupAlert from 'react-popup'\nimport 'core-js/stable';\nimport 'regenerator-runtime/runtime';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n ReactDOM.render(\n \n \n \n ,\n document.body.appendChild(document.createElement('div')),\n )\n})\n"],"sourceRoot":""}