{"version":3,"file":"job-getstarted-online.page.js","sources":["../../../appV2/job/job-getstarted-online.page.js"],"sourcesContent":["import { createApp } from 'vue';\nimport PrimeVue from 'primevue/config';\nimport ConfirmationService from 'primevue/confirmationservice';\nimport ConfirmDialog from 'primevue/confirmdialog';\nimport ToastService from 'primevue/toastservice';\nimport Toast from 'primevue/toast';\nimport Dialog from 'primevue/dialog';\n\nimport ProgressSpinner from 'primevue/progressspinner';\nimport Tooltip from 'primevue/tooltip';\n\nimport 'primeicons/primeicons.css';\nimport Button from \"primevue/button\";\nimport InputText from 'primevue/inputtext';\nimport Select from 'primevue/select';\nimport InputNumber from 'primevue/inputnumber';\nimport Textarea from 'primevue/textarea';\nimport QuDatePicker from '../component/qu-datepicker.comp.vue';\nimport { Form } from '@primevue/forms';\nimport Tabs from 'primevue/tabs';\nimport TabList from 'primevue/tablist';\nimport Tab from 'primevue/tab';\nimport TabPanels from 'primevue/tabpanels';\nimport TabPanel from 'primevue/tabpanel';\nimport 'intl-tel-input/build/css/intlTelInput.css';\nimport intlTelInput from 'intl-tel-input';\nimport AutoComplete from 'primevue/autocomplete';\nimport RadioButton from \"primevue/radiobutton\";\nimport SplitButton from 'primevue/splitbutton';\nimport Checkbox from 'primevue/checkbox';\nimport BaseEditComp from \"../component/base-edit.comp.js\";\nimport Divider from 'primevue/divider';\n\nimport SRUtilExt from \"../misc/sr-utilV2.ext.js\";\nimport SRErrorExt from \"../misc/sr-errorV2.ext.js\";\nimport SRUIExt from \"../misc/sr-uiV2.ext.js\";\nimport axios from 'axios';\n\nvar google = null;\nvar map = null;\nvar marker = null;\nvar geocoder = null;\n\nlet vmData = {\n server: serverData, // serverData is defined in the view.\n selectedCategory: {},\n nextSelectedCategory: {},\n showCategory: false,\n IsBusy: false,\n\n showTypeSection: false,\n showClassSection: false,\n showAddressSection: false,\n showCreateSection: false,\n\n haveTypeSection: false,\n haveClassSection: false,\n haveAddressSection: false,\n haveCreateSection: false,\n\n needClassSection: false,\n needAddressSection: false,\n\n isMezzanine: false,\n\n\n BuildingClassList: [],\n WindSpeeds: [],\n PostCodeLookupList: [],\n PostCodeLookup: '',\n PostCodeItem: null,\n AddressLookupList: [],\n AddressLookup: '',\n SelectedType: null,\n SelectedTypeMsg: \"\",\n SelectedClass: null,\n SelectedClassMsg: \"\",\n ClassName: \"\",\n BuildingType: \"\",\n AddressId: \"\",\n WindSpeedId: \"\",\n WindSpeedName: \"\",\n AskAddress: true,\n CreateMessage: \"\",\n CreateEngCertMessage: \"\",\n UseSetWindSpeed: false,\n LoadingPostcode: false,\n LoadingAddress: false,\n HavePostcode: false,\n HaveAddress: false,\n HaveManualAddress: false,\n ManualAddress: null,\n WindCheckToken: null,\n inputTimer: null,\n Templates: [],\n SelectedTemplate: null,\n timeoutCount: 15,\n showingTermsDlg: false,\n showingTimeoutDlg: false\n}\n\n\nlet appConfig = {\n el: '#main-body',\n components: {\n \"p-progress-spinner\": ProgressSpinner,\n \"p-confirm-dialog\": ConfirmDialog,\n \"p-toast\": Toast,\n \"p-button\": Button,\n \"p-input-text\": InputText,\n \"p-select\": Select,\n \"p-input-number\": InputNumber,\n \"p-dialog\": Dialog,\n \"p-form\": Form,\n \"p-tabs\": Tabs,\n \"p-tablist\": TabList,\n \"p-tab\": Tab,\n \"p-tabpanels\": TabPanels,\n \"p-tabpanel\": TabPanel,\n \"p-textarea\": Textarea,\n \"qu-datepicker\": QuDatePicker,\n \"p-autocomplete\": AutoComplete,\n \"p-radio\": RadioButton,\n \"p-split-button\": SplitButton,\n \"p-checkbox\": Checkbox,\n \"p-divider\": Divider\n },\n data() {\n return vmData\n },\n computed:\n {\n canAskAddress: function () {\n return !this.server.KioskId || (this.server.KioskId && this.SelectedType );\n },\n haveAddress: function () {\n return !this.server.KioskId || (this.server.KioskId && this.AddressId != \"\");\n },\n filteredBuildingCategoryTypes: function () {\n if (!this.server) {\n return [];\n }\n return this.server.BuildingCategoryTypes.filter(function (item) {\n if (item.Id == '27') {\n return false;\n }\n return true;\n });\n }\n },\n methods: {\n buildBuildingClassList: function () {\n if (!this.server) {\n return [];\n }\n this.BuildingClassList = this.server.BuildingClasses.filter(function (item) {\n return true;\n });\n },\n\n selectTopCategory: function (e, item, isTrial) {\n if (item) {\n let defaultLevelId = item.DefaultLevelId;\n\n for (let i = 0; i < item.SubCategories.length; i++) {\n let level = item.SubCategories[i];\n if (level.LevelId === item.DefaultLevelId) {\n this.AskAddress = item.AskAddress;\n sessionStorage.setItem('JobBuildingCategory1Id', item.Id);\n sessionStorage.setItem('JobBuildingCategory2Id', level.Id);\n sessionStorage.setItem(\"JobBuildingTemplate\", \"\");\n\n this.BuildingType = level.Name + \" \" + item.Name;\n this.SelectedType = item;\n this.SelectedTypeMsg = \"You are going to design a \" + this.BuildingType + \".\";\n this.SelectedClassMsg = \"How do you plan to use your \" + this.BuildingType + \"?\";\n this.updateCreateMessage();\n\n this.haveTypeSection = true;\n this.showTypeSection = false;\n\n this.isMezzanine = item.Name === \"Mezzanine\";\n if (this.isMezzanine) {\n this.selectWindSpeed(this.server.WindSpeeds[0]);\n }\n this.selectClass(null, this.server.BuildingClasses[0]);\n this.Templates = item.Templates;\n\n break;\n }\n }\n\n window.tutorialVM.showTutorialStep(\"ADDRESS\");\n }\n },\n\n selectTemplate: function (e, item) {\n this.SelectedTemplate = item;\n sessionStorage.setItem(\"JobBuildingTemplate\", item ? item.JobId : \"\");\n },\n\n afterLeave: function () {\n if (this.nextSelectedCategory !== null) {\n this.selectedCategory = this.nextSelectedCategory;\n this.nextSelectedCategory = null;\n this.showCategory = true;\n }\n else {\n this.selectedCategory = null;\n this.showCategory = false;\n }\n },\n selectCategory: function (e, item) {\n this.IsBusy = true;\n\n sessionStorage.setItem('JobBuildingCategory2Id', item.Id);\n this.BuildingType = item.Name + \" \" + this.selectedCategory.Name;\n this.SelectedTypeMsg = \"You are going to design a \" + this.BuildingType + \".\";\n this.SelectedClassMsg = \"How do you plan to use your \" + this.BuildingType + \"?\";\n\n // Does this item have a list of building class ids? If it does then we need to show the classifications. Otherwise we can just move straight to the address.\n if (item.BuildingClassIds) {\n this.BuildingClassIds = item.BuildingClassIds.split(\",\");\n this.displayClassSection();\n }\n else {\n this.showClassSection = false;\n this.ClassName = \"\";\n this.displayAddressSection();\n }\n\n\n },\n selectClass: function (e, item) {\n this.ClassName = item.Name;\n this.SelectedClass = item;\n this.SelectedClassMsg = \"Your \" + this.BuildingType + \" will be a class \" + item.Name + \".\";\n this.updateCreateMessage();\n\n sessionStorage.setItem('JobBuildingClassId', item.Id);\n },\n\n\n updateCreateMessage: function () {\n if (!this.BuildingType || !this.AddressId) {\n this.CreateMessage = \"\";\n return;\n }\n\n this.CreateMessage = \"You want a \";\n if (this.ClassName) {\n this.CreateMessage += \" class \" + this.ClassName + \" \";\n }\n this.CreateMessage += this.BuildingType;\n this.CreateMessage += \" at \" + this.AddressLookup;\n this.CreateMessage += \".\";\n },\n\n subCategories: function () {\n if (this.selectedCategory === null) {\n return [];\n }\n else {\n return this.selectedCategory.SubCategories;\n }\n },\n canShowClass: function (item) {\n return (this.BuildingClassIds) && (this.BuildingClassIds.indexOf(item.Id) !== -1);\n },\n showImage: function (baseUrl, path) {\n return baseUrl + \"/images/\" + path;\n },\n resetAddressLookup: function () {\n // Just in case the blur is caused by user clicking on list, don't clear the list immediately. \n // Give a chance to be processed.\n setTimeout(() => {\n this.AddressLookupList = [];\n this.LoadingAddress = false;\n if (!this.AddressLookup) {\n this.AddressId = \"\";\n sessionStorage.setItem('JobAddressId', \"\");\n }\n this.updateCreateMessage();\n }, 300);\n\n },\n debouncedAddressAutoComplete: null, // Set up in the mounted function\n\n addressAutoComplete: function (event, autoSelect = false) {\n if (!this.AddressLookup) {\n return;\n }\n if (this.AddressLookup.length < 3) {\n this.AddressLookupList = [];\n this.LoadingAddress = false;\n this.HaveAddress = false;\n }\n else {\n this.LoadingAddress = true;\n axios.get('/api/v1/address/addresssearch?address=' + encodeURI(this.AddressLookup)).then((response) => {\n this.AddressLookupList = response.data;\n this.LoadingAddress = false;\n if (autoSelect && (this.AddressLookupList.length == 1)) {\n this.selectAddress(this.AddressLookupList[0]);\n }\n }, (error) => {\n this.AddressLookupList = [];\n this.LoadingAddress = false;\n this.HaveAddress = false;\n });\n }\n },\n\n getDefaultHeight: function () {\n let result = 2.66; // 2.4m height + 6m width + 1/2 of gable at 10%\n switch (this.SelectedType.Name) {\n case \"Shed\":\n result = 3.4; // 3m height + 9m width + 1/2 of gable at 10%\n break;\n case \"Barn\":\n result = 4.07; // 3.6m height + 6m width + 1/2 of gable at 17.5%\n break;\n }\n return result;\n },\n\n selectAddressDataEntered: function (event) {\n this.selectAddress(event.value);\n },\n\n selectAddress: function (item) {\n this.AddressLookup = item.Address;\n this.AddressId = item.Id;\n this.LoadingAddress = false;\n this.HaveAddress = true;\n this.PostCodeLookup = \"\";\n this.PostCodeItem = null;\n this.HavePostcode = true;\n this.HaveManualAddress = false;\n this.ManualAddress = null;\n this.AddressLookupList = [];\n\n sessionStorage.setItem('JobAddressId', this.AddressId);\n sessionStorage.removeItem('JobWindSpeedId');\n sessionStorage.removeItem('JobPostCode');\n sessionStorage.removeItem('JobState');\n sessionStorage.removeItem('JobSuburb');\n sessionStorage.setItem(\"OnlineAddress\", this.AddressLookup);\n\n this.getWindCheckToken();\n\n this.updateCreateMessage();\n\n window.tutorialVM.showTutorialStep(\"DESIGN\");\n },\n\n getWindCheckToken: function () {\n const defaultHeight = 3;\n let url = \"/api/v1/job/windchecktoken?addressid=\" + this.AddressId + \"&latitude=-999&longitude=-999&height=\" + defaultHeight;\n axios.get(url).then((response) => {\n this.WindCheckToken = response.data;\n sessionStorage.setItem(\"JobCheckWindToken\", response.data);\n }, (error) => {\n SRErrorExt.showErrorToAlert(this, error);\n });\n },\n createJob: function () {\n if (!this.CreateMessage) {\n SRUtilExt.showAlert(this, \"Wait\", \"You must select a building type and enter an address.\", \"\", false, this.server.KioskId);\n return;\n }\n\n window.tutorialVM.finishTutorial(false);\n sessionStorage.setItem('JobOnlineQuote', \"true\");\n if (!this.AddressId && !this.ManualAddress && !this.WindSpeedId && this.AskAddress) {\n SRUtilExt.showAlert(this, \"Oops\", \"You need to enter a valid address or choose a windspeed.\");\n }\n else {\n sessionStorage.setItem('JobAddressId', this.AddressId);\n sessionStorage.removeItem('JobWindSpeedId');\n sessionStorage.removeItem('JobPostCode');\n sessionStorage.removeItem('JobState');\n sessionStorage.removeItem('JobSuburb');\n sessionStorage.setItem(\"OnlineAddress\", this.AddressLookup);\n\n // We have to wait to make sure we have a checkwind token before we move on.\n var interval = setInterval(() => {\n if (this.WindCheckToken) {\n clearInterval(interval);\n this.WindCheckToken = false;\n this.openNewJob();\n }\n }, 200);\n }\n },\n\n openNewJob: function () {\n this.IsBusy = true;\n var tempId = SRUtilExt.getTempId().substring(9, 18);\n var newUrl = \"/job/design/newbuilding/\" + tempId;\n window.location.href = newUrl;\n },\n setupTutorial: function () {\n window.tutorialVM.isOnlineDesigner = true;\n window.tutorialVM.tutorial.Name = \"tutGetStartedOnline\";\n window.tutorialVM.addTutorialStep({ Id: \"START\", Text: \"Hi there! What are you looking for? Which type of building would you like to get a quote for?\", ElementId: \"buildingTypes\", Position: \"bottom\" });\n window.tutorialVM.addTutorialStep({ Id: \"ADDRESS\", Text: \"Great! And, where do you need this building delivered? \", ElementId: \"addressDiv\", Position: \"top\" });\n window.tutorialVM.addTutorialStep({ Id: \"DESIGN\", Text: \"Easy peezy, one instant price coming right up! Click Start Design to continue.\", ElementId: \"startBtn\", Position: \"bottom\" });\n window.tutorialVM.showTutorialStep(\"START\");\n },\n setupKioskInputs: function () {\n if (this.server.KioskId) {\n var selfKiosk = this;\n document.onkeydown = function (e) {\n selfKiosk.startInputTimer();\n };\n document.onmousedown = function (e) {\n selfKiosk.startInputTimer()\n };\n\n this.startInputTimer();\n this.checkKioskInput = true;\n }\n },\n startInputTimer: function () {\n if (!this.server.KioskId || this.server.IsHomeKiosk) {\n return;\n }\n\n this.clearInputTimer();\n this.inputTimer = setTimeout(() => {\n this.startKeepDesigningInterval();\n this.showingTimeoutDlg = true;\n\n\n\n /*\n // Simply clear the address and the design selection\n this.AddressLookup = \"\";\n this.AddressLookupList = [];\n this.startInputTimer();\n */\n }, 30000);\n },\n clearInputTimer: function () {\n if (this.inputTimer) {\n clearTimeout(this.inputTimer);\n this.inputTimer = null;\n }\n },\n startKeepDesigningInterval: function () {\n this.timeoutCount = 15;\n this.keepDesigningInterval = setInterval(() =>{\n this.timeoutCount--;\n if (this.timeoutCount == 0) {\n this.restartDesign();\n }\n }, 1000);\n },\n keepDesigning: function () {\n clearInterval(this.keepDesigningInterval);\n this.keepDesigningInterval = null;\n this.showingTimeoutDlg = false;\n\n this.startInputTimer();\n },\n restartDesign: function () {\n this.isDirty = false;\n clearInterval(this.keepDesigningInterval);\n this.keepDesigningInterval = null;\n window.location.href = \"/job/qiosk\";\n },\n getImageUrl: function (imagePath) {\n var url = \"/api/v1/hostpicture/?id=\" + encodeURIComponent(imagePath);\n return url;\n },\n showTerms: function () {\n this.showingTermsDlg = true;\n },\n hideTerms: function () {\n this.showingTermsDlg = false;\n },\n\n initView: function () {\n this.server.IsHostedDesigner = true;\n this.showTypeSection = true;\n this.showClassSection = false;\n this.showAddressSection = false;\n this.selectedCategory = null;\n this.nextSelectedCategory = null;\n this.showCategory = false;\n this.LoadingPostcode = false;\n this.LoadingAddress = false;\n\n\n if (this.server.KioskId) {\n sessionStorage.removeItem('JobAddressId');\n sessionStorage.removeItem('OnlineAddress');\n }\n\n this.AddressId = sessionStorage.getItem(\"JobAddressId\");\n this.AddressLookup = sessionStorage.getItem(\"OnlineAddress\");\n this.addressAutoComplete(null,true);\n if (this.AddressId) {\n this.getWindCheckToken();\n }\n\n this.debouncedAddressAutoComplete = SRUtilExt.debounce(this.addressAutoComplete, 300);\n\n // Clear details of any existing jobs. \n let keys = Object.keys(sessionStorage);\n for (let key of keys) {\n if (key.startsWith(\"JobDetails\")) {\n sessionStorage.removeItem(key);\n }\n }\n\n\n sessionStorage.setItem('JobDetails', \"\");\n sessionStorage.setItem('JobAddressId', \"\");\n sessionStorage.setItem('JobWindSpeedId', \"\");\n sessionStorage.setItem('JobSuburb', \"\");\n sessionStorage.setItem('JobState', \"\");\n sessionStorage.setItem('JobPostCode', \"\");\n sessionStorage.setItem('JobBuildingCategory1Id', \"\");\n sessionStorage.setItem('JobBuildingCategory2Id', \"\");\n sessionStorage.setItem(\"JobBuildingClassId\", \"\");\n this.$nextTick(function () {\n if (SRUtilExt.isWindows() && !this.server.ShowVideoTutorial) {\n this.setupTutorial();\n }\n else {\n var hideBtnEl = document.getElementById(\"helpBtn\");\n if (hideBtnEl) {\n hideBtnEl.style.display = 'none';\n }\n }\n });\n this.setupKioskInputs();\n }\n },\n mounted: function () {\n this.initView();\n }\n}\n\nlet app = createApp(appConfig);\napp.use(PrimeVue, {\n theme: 'none'\n});\napp.use(ConfirmationService);\napp.use(ToastService);\napp.directive('tooltip', Tooltip); // Register the tooltip directive globally\napp.mount(\"#main\");"],"names":["vmData","appConfig","ProgressSpinner","ConfirmDialog","Toast","Button","InputText","Select","InputNumber","Dialog","Form","Tabs","TabList","Tab","TabPanels","TabPanel","Textarea","QuDatePicker","AutoComplete","RadioButton","SplitButton","Checkbox","Divider","item","e","isTrial","i","level","baseUrl","path","event","autoSelect","axios","response","error","result","url","SRErrorExt","SRUtilExt","interval","tempId","newUrl","selfKiosk","imagePath","keys","key","hideBtnEl","app","createApp","PrimeVue","ConfirmationService","ToastService","Tooltip"],"mappings":"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"}