{"version":3,"file":"es6.js","sources":["../../../../../Static/src/scripts/es6/helpers/FileUpload.js","../../../../../Static/src/scripts/es6/helpers/DateTime.js","../../../../../Static/src/scripts/es6/modules/eSigning/explosives/ExplosivePrecursorFormValidation.js","../../../../../Static/src/scripts/es6/modules/eSigning/machine/MachineAgrementFormValidation.js","../../../../../Static/src/scripts/es6/modules/eSigning/distillate/DistillateFormValidation.js","../../../../../Static/src/scripts/es6/helpers/LocalStorage.js","../../../../../Static/src/scripts/es6/helpers/QueryParams.js","../../../../../Static/src/scripts/es6/modules/eSigning/machine/MachineAgreementReview.js","../../../../../Static/src/scripts/es6/modules/eSigning/explosives/ExplosivePrecursorReview.js","../../../../../Static/src/scripts/es6/modules/eSigning/distillate/DistillateReview.js","../../../../../Static/src/scripts/es6/modules/eSigning/shared/RecieverForm.js","../../../../../Static/src/scripts/es6/helpers/Api.js","../../../../../Static/src/scripts/es6/modules/eSigning/shared/AgreementSteps.js","../../../../../Static/src/scripts/es6/helpers/BrowserSettings.js","../../../../../Static/src/scripts/es6/repositories/AgreementRepository.js","../../../../../Static/src/scripts/es6/repositories/ReOrderRepository.js","../../../../../Static/src/scripts/es6/components/table/TableElements.js","../../../../../Static/src/scripts/es6/components/table/TableEvents.js","../../../../../Static/src/scripts/es6/helpers/DataParser.js","../../../../../Static/src/scripts/es6/components/table/Table.js","../../../../../Static/src/scripts/es6/helpers/Routes.js","../../../../../Static/src/scripts/es6/components/dropdown/DropDown.js","../../../../../Static/src/scripts/es6/repositories/DiscountToolRepository.js","../../../../../Static/src/scripts/es6/modules/discountTool/DiscountToolService.js","../../../../../Static/src/scripts/es6/es6.js","../../../../../Static/src/scripts/es6/modules/eSigning/machine/MachineAgreementForm.js","../../../../../Static/src/scripts/es6/modules/eSigning/explosives/ExplosivePrecursorForm.js","../../../../../Static/src/scripts/es6/modules/eSigning/distillate/DistillateForm.js","../../../../../Static/src/scripts/es6/modules/myOrders/ReOrder.js","../../../../../Static/src/scripts/es6/modules/discountTool/DiscountTool.js","../../../../../Static/src/scripts/es6/modules/transportAuction/TransportAuction.js"],"sourcesContent":["/**\r\n * Fileupload Helper class\r\n */\r\nexport default class FileUpload {\r\n /**\r\n * File input - List files to upload & escape if wrong file format\r\n * @param {*} inputFieldId\r\n */\r\n fileInputOnChange = (inputFieldId) => {\r\n const self = this;\r\n document.getElementById(inputFieldId).addEventListener('change', function (e) {\r\n if (e.target.files && e.target.files[0]) {\r\n const findContainer = this.closest('div').querySelector('ul');\r\n const fileNameContainer = findContainer.getAttribute('id');\r\n findContainer.innerHTML = '';\r\n\r\n if (!this.classList.contains('valid')) {\r\n e.target.files = null;\r\n return;\r\n }\r\n\r\n for (let int = 0; int < e.target.files.length; int++) {\r\n const createListElement = document.createElement('li');\r\n const listelement = document\r\n .getElementById(fileNameContainer)\r\n .appendChild(createListElement);\r\n const fileSize = self.returnFileSize(e.target.files[int].size);\r\n listelement.innerHTML = `${e.target.files[int].name} (${fileSize})`;\r\n }\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * FileSize\r\n * @param number\r\n * @returns {string}\r\n */\r\n returnFileSize = (number) => {\r\n if (number < 1024) {\r\n return number + ' bytes';\r\n } else if (number >= 1024 && number < 1048576) {\r\n return (number / 1024).toFixed(1) + ' KB';\r\n } else if (number >= 1048576) {\r\n return (number / 1048576).toFixed(1) + ' MB';\r\n }\r\n };\r\n\r\n /**\r\n * Get document meta data etc.\r\n * @param {*} fileList\r\n * @returns\r\n */\r\n getDocumentList = async (fileList) => {\r\n const getDocument = (file) => {\r\n const reader = new FileReader();\r\n return new Promise((resolve) => {\r\n reader.onload = (ev) => {\r\n const fileContent = ev.target.result.split(',')[1];\r\n const fileDoc = {\r\n documentName: file.name.replace('.pdf', ''),\r\n documentType: file.type.replace('application/', ''),\r\n document: fileContent,\r\n };\r\n resolve(fileDoc);\r\n };\r\n reader.readAsDataURL(file);\r\n });\r\n };\r\n\r\n const promises = [];\r\n for (let fileListInt = 0; fileListInt < fileList.length; fileListInt++) {\r\n promises.push(getDocument(fileList[fileListInt]));\r\n }\r\n\r\n return await Promise.all(promises);\r\n };\r\n}\r\n","export default class DateTime { \r\n /**\r\n * @description Add month to date\r\n * @param {*} date\r\n * @param {*} months\r\n * @returns {string}\r\n */\r\n addMonths(date, months) {\r\n var d = date.getDate();\r\n date.setMonth(date.getMonth() + months);\r\n\r\n if (date.getDate() != d) {\r\n date.setDate(0);\r\n }\r\n\r\n return date.toLocaleString('sv-SE').slice(0, 10);\r\n }\r\n}","/**\r\n * Validation class for Explosive Precursors form\r\n * */\r\nexport default class ExplosivePrecursorFormValidation {\r\n /**\r\n * Init\r\n */\r\n constructor() {\r\n // Document Ready for jQuery validation\r\n if (document.readyState === 'loading') {\r\n document.addEventListener('DOMContentLoaded', this.ready);\r\n } else {\r\n this.ready();\r\n }\r\n }\r\n\r\n /**\r\n * Callback - Init methods when page been loaded\r\n * @return void\r\n */\r\n ready = () => {\r\n this.validationForm();\r\n this.validationReciever();\r\n };\r\n\r\n /**\r\n * Jquery Validation for agreement\r\n * @return void\r\n */\r\n validationForm = () => {\r\n $('#explosivePrecursorsForm').validate({\r\n rules: {\r\n customerName: {\r\n required: true,\r\n pattern: '^[0-9a-zA-ZÅÄÖåäöd.-]{2,25}(?: +[0-9a-zA-ZÅÄÖåäö]{2,25})+$',\r\n },\r\n customerAddress: {\r\n required: true,\r\n minlength: 4,\r\n },\r\n customerZipCodeAndCity: {\r\n required: true,\r\n pattern: '^[0-9a-zA-Zd.-]{2,20}(?: +[a-zA-ZÅÄÖåäö0-9]{2,40})+$',\r\n },\r\n customerOrganizationNumber: {\r\n required: true,\r\n pattern: '^[0-9d.-]{7}[0-9]{4}$',\r\n },\r\n },\r\n messages: {\r\n customerName: {\r\n required: explosivesTranslation.customerNameRequired,\r\n pattern: explosivesTranslation.customerNamePattern,\r\n },\r\n customerAddress: {\r\n required: explosivesTranslation.customerAddressRequired,\r\n minlength: explosivesTranslation.customerAddressMinLength,\r\n },\r\n customerZipCodeAndCity: {\r\n required: explosivesTranslation.customerZipCodeAndCityRequired,\r\n pattern: explosivesTranslation.customerZipCodeAndCityPattern,\r\n },\r\n customerOrganizationNumber: {\r\n required: explosivesTranslation.customerOrganizationNumberRequired,\r\n pattern: explosivesTranslation.customerOrganizationNumberPattern,\r\n },\r\n },\r\n submitHandler: function () {\r\n this.checkForm();\r\n },\r\n });\r\n };\r\n\r\n /**\r\n * Checking if fields are valid.\r\n * Adding/Removing disabled class if/or not\r\n * @param {*} steps\r\n * @return void\r\n */\r\n checkForm(steps) {\r\n switch (steps) {\r\n case 'form':\r\n if ($('#explosivePrecursorsForm').valid()) {\r\n if (\r\n document.querySelectorAll('.explosiveForm:checked').length > 0 &&\r\n document.querySelectorAll('.explosivesProduct:checked').length > 0\r\n ) {\r\n document.getElementById('Step1Next').classList.remove('disabled');\r\n }\r\n } else {\r\n document.getElementById('Step1Next').classList.add('disabled');\r\n }\r\n break;\r\n case 'reciever':\r\n if ($('#explosiveAgreementReciever').valid()) {\r\n if (\r\n document.querySelector('#ReceiverPersonalNumber').value.length > 0 &&\r\n document.querySelector('#ReceiverEmail').value.length > 0\r\n ) {\r\n document.getElementById('Step2Next').classList.remove('disabled');\r\n }\r\n } else {\r\n document.getElementById('Step2Next').classList.add('disabled');\r\n }\r\n break;\r\n default:\r\n $('#explosivePrecursorsForm').valid();\r\n }\r\n }\r\n\r\n /**\r\n * Jquery Validation for reciever form\r\n * @return void\r\n */\r\n validationReciever() {\r\n $('#explosiveAgreementReciever').validate({\r\n rules: {\r\n ReceiverPersonalNumber: {\r\n required: true,\r\n pattern: '^[0-9]{12}$',\r\n },\r\n ReceiverEmail: {\r\n required: true,\r\n email: true,\r\n },\r\n },\r\n messages: {\r\n ReceiverPersonalNumber: {\r\n required: explosivesTranslation.personalNumberRequired,\r\n pattern: explosivesTranslation.personalNumberRegexPersonal,\r\n },\r\n ReceiverEmail: {\r\n required: explosivesTranslation.receiverEmailRequired,\r\n email: explosivesTranslation.receiverEmailFormat,\r\n },\r\n },\r\n submitHandler: function () {},\r\n });\r\n }\r\n}\r\n","/**\r\n * Validation class for Machine Agreement form\r\n * */\r\nexport default class MachineAgrementFormValidation {\r\n /**\r\n * Init\r\n */\r\n constructor() {\r\n // Document Ready for jQuery validation\r\n if (document.readyState === 'loading') {\r\n document.addEventListener('DOMContentLoaded', this.ready);\r\n } else {\r\n this.ready();\r\n }\r\n }\r\n\r\n /**\r\n * Callback - Init methods when page been loaded\r\n */\r\n ready = () => {\r\n this.validationForm();\r\n this.validationReciever();\r\n };\r\n\r\n /**\r\n * Changing jQuery validation rules\r\n * @param {*} template\r\n */\r\n changeRegexRules(template) {\r\n this.removeValidationRule();\r\n this.addValidationRule(template);\r\n }\r\n\r\n /**\r\n * Removing Template rules\r\n */\r\n removeValidationRule() {\r\n $('#agreementNumber').rules('remove', 'regex');\r\n $('#agreementNumber').rules('remove', 'required');\r\n }\r\n\r\n /**\r\n * Adding new jQuery validation rule depending on selected template\r\n * @param {*} template\r\n */\r\n addValidationRule = (template) => {\r\n this.validationMethods({ agreementNumber: template, type: 'form' });\r\n\r\n $('#agreementNumber').rules('add', {\r\n required: true,\r\n regex: true,\r\n messages: {\r\n required: machineAgreementTranslation.agreementNumberRequired,\r\n regex: template.msg,\r\n },\r\n }); \r\n };\r\n \r\n /**\r\n * Jquery Validation for agreement\r\n * @return void\r\n */\r\n validationForm = () => {\r\n this.validationMethods({ type: 'multifiles' });\r\n $(\"form[name='machineagreement']\").validate({\r\n rules: {\r\n agreementFile: {\r\n required: true,\r\n validateFileTtype: true,\r\n }\r\n },\r\n messages: {\r\n agreementFile: {\r\n required: machineAgreementTranslation.agreementFileRequired,\r\n validateFileTtype: machineAgreementTranslation.agreementFileValidateFileTtype,\r\n }\r\n },\r\n submitHandler: function () {\r\n this.checkForm();\r\n },\r\n });\r\n };\r\n\r\n /**\r\n * Jquery Validation for reciever form\r\n * @return void\r\n */\r\n validationReciever() {\r\n this.validationMethods({\r\n agreementNumber: {\r\n regx: /^(19|20)?[0-9]{8}?[0-9]{4}$/,\r\n },\r\n type: 'reciever',\r\n });\r\n\r\n $(\"form[name='machineagreementReciever']\").validate({\r\n rules: {\r\n ReceiverPersonalNumber: {\r\n regexPersonal: true,\r\n },\r\n ReceiverEmail: {\r\n required: true,\r\n email: true,\r\n },\r\n ReceiverPhoneNumber: {\r\n pattern: /^\\+(467)([0-9]{8})$/, // Regex for Swedish Mobile number\r\n required: true\r\n }\r\n },\r\n messages: {\r\n ReceiverPersonalNumber: {\r\n regexPersonal: machineAgreementTranslation.personalNumberRegexPersonal,\r\n },\r\n ReceiverEmail: {\r\n required: machineAgreementTranslation.receiverEmailRequired,\r\n email: machineAgreementTranslation.receiverEmailFormat,\r\n },\r\n ReceiverPhoneNumber: {\r\n required: machineAgreementTranslation.mobileRequired,\r\n pattern: machineAgreementTranslation.mobilePattern,\r\n }\r\n },\r\n submitHandler: function () {},\r\n });\r\n }\r\n\r\n /**\r\n * Checking if fields are valid\r\n * Adding/Removing disabled class if/or not\r\n * @param {*} steps\r\n */\r\n checkForm(steps) {\r\n switch (steps) {\r\n case 'form':\r\n if ($('#machineagreementForm').valid()) {\r\n document.getElementById('Step1Next').classList.remove('disabled');\r\n } else {\r\n document.getElementById('Step1Next').classList.add('disabled');\r\n }\r\n break;\r\n case 'reciever':\r\n if ($('#machineagreementReciever').valid()) {\r\n document.getElementById('Step2Next').classList.remove('disabled');\r\n } else {\r\n document.getElementById('Step2Next').classList.add('disabled');\r\n }\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Validation Methods for jquery validation\r\n * @param {*} params\r\n */\r\n validationMethods = (params) => {\r\n switch (params.type) {\r\n case 'form':\r\n $.validator.methods.regex = function (value, element) {\r\n return this.optional(element) || params.agreementNumber.regx.test(value);\r\n };\r\n break;\r\n case 'reciever':\r\n $.validator.methods.regexPersonal = function (value, element) {\r\n return this.optional(element) || params.agreementNumber.regx.test(value);\r\n };\r\n break;\r\n case 'multifiles':\r\n $.validator.addMethod(\r\n 'validateFileTtype',\r\n (val, elem) => {\r\n let files = $('#' + elem.id)[0].files;\r\n for (let fileIndex = 0; fileIndex < files.length; fileIndex++) {\r\n const fname = files[fileIndex].name.toLowerCase();\r\n const re = /(\\.pdf)$/i;\r\n\r\n if (!re.exec(fname)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n },\r\n machineAgreementTranslation.agreementFileValidateFileTtype\r\n );\r\n break;\r\n }\r\n };\r\n}\r\n","/**\r\n * Validation class for Distillate form\r\n * */\r\nexport default class DistillateFormValidation {\r\n /**\r\n * Init\r\n */\r\n constructor() {\r\n // Document Ready for jQuery validation\r\n if (document.readyState === 'loading') {\r\n document.addEventListener('DOMContentLoaded', this.ready);\r\n } else {\r\n this.ready();\r\n }\r\n }\r\n\r\n /**\r\n * Callback - Init methods when page been loaded\r\n * @return void\r\n */\r\n ready = () => {\r\n this.validationForm();\r\n this.validationReciever();\r\n };\r\n\r\n /**\r\n * Jquery Validation for agreement\r\n * @return void\r\n */\r\n validationForm = (targetValue) => {\r\n $('#distillateForm').validate({\r\n rules: {\r\n customerName: {\r\n required: true,\r\n pattern: '^[0-9a-zA-ZÅÄÖåäöd.-]{2,25}(?: +[0-9a-zA-ZÅÄÖåäö]{2,25})+$',\r\n },\r\n customerAddress: {\r\n required: true,\r\n minlength: 4,\r\n },\r\n customerZipCodeAndCity: {\r\n required: true,\r\n pattern: '^[0-9a-zA-Zd.-]{2,20}(?: +[a-zA-ZÅÄÖåäö0-9]{2,40})+$',\r\n },\r\n customerOrganizationNumber: {\r\n required: true,\r\n pattern: '^[0-9d.-]{7}[0-9]{4}$',\r\n },\r\n },\r\n messages: {\r\n customerName: {\r\n required: distillateTranslation.customerNameRequired,\r\n pattern: distillateTranslation.customerNamePattern,\r\n },\r\n customerAddress: {\r\n required: distillateTranslation.customerAddressRequired,\r\n minlength: distillateTranslation.customerAddressMinLength,\r\n },\r\n customerZipCodeAndCity: {\r\n required: distillateTranslation.customerZipCodeAndCityRequired,\r\n pattern: distillateTranslation.customerZipCodeAndCityPattern,\r\n },\r\n customerOrganizationNumber: {\r\n required: distillateTranslation.customerOrganizationNumberRequired,\r\n pattern: distillateTranslation.customerOrganizationNumberPattern,\r\n },\r\n },\r\n submitHandler: function () {\r\n this.checkForm();\r\n },\r\n });\r\n };\r\n\r\n /**\r\n * Checking if fields are valid.\r\n * Adding/Removing disabled class if/or not\r\n * @param {*} steps\r\n * @return void\r\n */\r\n checkForm(steps) {\r\n switch (steps) {\r\n case 'form':\r\n if ($('#distillateForm').valid()) {\r\n if (document.querySelectorAll('.distillateForm:checked').length > 0) {\r\n document.getElementById('Step1Next').classList.remove('disabled');\r\n }\r\n } else {\r\n document.getElementById('Step1Next').classList.add('disabled');\r\n }\r\n break;\r\n case 'reciever':\r\n if ($('#distillateReciever').valid()) {\r\n if (\r\n document.querySelector('#ReceiverPersonalNumber').value.length > 0 &&\r\n document.querySelector('#ReceiverEmail').value.length > 0\r\n ) {\r\n document.getElementById('Step2Next').classList.remove('disabled');\r\n }\r\n } else {\r\n document.getElementById('Step2Next').classList.add('disabled');\r\n }\r\n break;\r\n default:\r\n $('#distillateForm').valid();\r\n }\r\n }\r\n\r\n /**\r\n * Jquery Validation for reciever form\r\n * @return void\r\n */\r\n validationReciever() {\r\n $('#distillateReciever').validate({\r\n rules: {\r\n ReceiverPersonalNumber: {\r\n required: true,\r\n pattern: '^[0-9]{12}$',\r\n },\r\n ReceiverEmail: {\r\n required: true,\r\n email: true,\r\n },\r\n },\r\n messages: {\r\n ReceiverPersonalNumber: {\r\n required: distillateTranslation.personalNumberRequired,\r\n pattern: distillateTranslation.personalNumberRegexPersonal,\r\n },\r\n ReceiverEmail: {\r\n required: distillateTranslation.receiverEmailRequired,\r\n email: distillateTranslation.receiverEmailFormat,\r\n },\r\n },\r\n submitHandler: function () {},\r\n });\r\n }\r\n}\r\n","/**\r\n * Local storage Helper class\r\n */\r\nexport default class LocalStorage {\r\n /**\r\n * Set Local storage\r\n * @param {*} key\r\n * @param {*} data\r\n * @returns items by key\r\n */\r\n setItem(key, data) {\r\n window.localStorage.setItem(`${key}`, JSON.stringify(data));\r\n return this.getItem(`${key}`);\r\n }\r\n\r\n /**\r\n * Get storage items by key\r\n * @param {*} key\r\n * @returns\r\n */\r\n getItem(key) {\r\n return JSON.parse(window.localStorage.getItem(`${key}`));\r\n }\r\n\r\n /**\r\n * Remove storage by key\r\n * @param {*} key\r\n * @returns items by key\r\n */\r\n removeItem(key) {\r\n window.localStorage.removeItem(key);\r\n return this.getItem(key);\r\n }\r\n\r\n /**\r\n * Get Storage key by index\r\n * @param {*} index\r\n * @returns\r\n */\r\n getKey(index) {\r\n return window.localStorage.key(`${index}`);\r\n }\r\n}\r\n","export default class QueryParams {\r\n constructor() {\r\n }\r\n\r\n /**\r\n * Get Query parameters and values from url\r\n * @returns {} Query parameters as object\r\n */\r\n getQueryParamsAsObject() {\r\n const queryElements = window.location.search.slice(window.location.search.indexOf('?') + 1).split('&');\r\n return queryElements.reduce((params, queryElements) => {\r\n const splitQueryElements = queryElements.indexOf('=');\r\n\r\n if (splitQueryElements < 0) {\r\n return Object.assign(params, {});\r\n }\r\n\r\n const objectKey = queryElements.slice(0, splitQueryElements);\r\n const objectValue = queryElements.slice(splitQueryElements + 1);\r\n\r\n return Object.assign(params, {\r\n [objectKey]: decodeURIComponent(objectValue),\r\n });\r\n }, {});\r\n }\r\n}\r\n","import LocalStorage from '../../../helpers/LocalStorage';\r\nimport QueryParams from '../../../helpers/QueryParams';\r\nimport DateTime from '../../../helpers/DateTime';\r\nimport MachineAgrementFormValidation from './MachineAgrementFormValidation';\r\n\r\n/**\r\n * Machine Agreement review class\r\n */\r\nexport default class MachineAgreementReview {\r\n constructor() {\r\n this.dateTime = new DateTime();\r\n this.validThroughDate = this.dateTime.addMonths(new Date(), 12).toString();\r\n this.queryParams = new QueryParams();\r\n this.query = this.queryParams.getQueryParamsAsObject();\r\n this.actionsForWebSales();\r\n this.validation = new MachineAgrementFormValidation();\r\n this.storage = new LocalStorage();\r\n this.payload = {};\r\n }\r\n\r\n /**\r\n * @description Skipping step one in creating an agreement\r\n * when user/sales come from web sales CRM\r\n * @returns void\r\n */\r\n actionsForWebSales() {\r\n if (Object.getOwnPropertyNames(this.query).length > 0 && this.query.agreement !== '') {\r\n document.querySelector('#step1View').classList.add('hidden');\r\n document.querySelector('#step2View').classList.remove('hidden');\r\n document.querySelector('#Step2Back').classList.add('hidden');\r\n document.querySelector('#Step2Back').parentNode.classList.add('hidden');\r\n }\r\n }\r\n\r\n /**\r\n * @description Set Reciever data when fields change\r\n * @returns void\r\n */\r\n recieverEventListerner() {\r\n for (const formItem of document.getElementsByClassName('.machineAgreementData')) {\r\n formItem.addEventListener('change', this.storeData);\r\n }\r\n }\r\n\r\n /**\r\n * @description Store data from payload\r\n * @returns void\r\n */\r\n storeData() {\r\n let fields = '.machineAgreementData';\r\n\r\n if (Object.getOwnPropertyNames(this.query).length > 0 && this.query.agreement !== '') {\r\n this.setPayloadByQueryParams();\r\n fields = '.step2';\r\n } else {\r\n this.setRecieverFieldsFromInput();\r\n }\r\n\r\n for (const item of document.querySelectorAll(fields)) {\r\n this.payload[item.id] = item.value ? item.value : null;\r\n }\r\n\r\n this.storage.setItem('machineAgreement', this.payload);\r\n this.validation.checkForm('reciever');\r\n\r\n \r\n }\r\n\r\n /**\r\n * @description getting userid and name from markup when accessing the app from external\r\n * @returns {string}\r\n */\r\n setCustomerByMarkup() { \r\n let customerName = document.querySelector('#customer-popup .customer-name').innerText;\r\n let customerId = document.getElementById('customerNumberElementId').value; \r\n return `${customerId} - ${customerName}`;\r\n }\r\n\r\n /**\r\n * @description Setting payload from Helper\r\n * @param {Object} payLoadData\r\n * @returns void\r\n */\r\n preparePayLoad(payLoadData) {\r\n this.payload[Object.keys(payLoadData)[0]] = payLoadData[Object.keys(payLoadData)[0]];\r\n this.storeData();\r\n }\r\n\r\n /**\r\n * @description Auto fill and click on form elements for web sales\r\n * @returns void\r\n */\r\n setPayloadByQueryParams() {\r\n\r\n let agreementName = !isNaN(this.query.agreement.charAt(0))\r\n ? 'MachinePurchasingAgreement'\r\n : 'MachineServiceAgreement';\r\n\r\n const templateId = document\r\n .querySelector(`a[data-template=\"${agreementName}\"]`)\r\n .parentNode.getAttribute('data-value');\r\n\r\n const templateName = document.querySelector(\r\n `a[data-template=\"${agreementName}\"]`\r\n ).innerText;\r\n\r\n document.querySelector('#reviewAgrementTemplate').innerHTML = templateName;\r\n this.payload.signingTemplateId = templateId;\r\n\r\n // Agreement number\r\n // ---------------------------------------------\r\n document.querySelector('#reviewAgreementNumber').textContent = this.query.agreement;\r\n this.payload.agreementNumber = this.query.agreement;\r\n\r\n // Receiver Name\r\n // ---------------------------------------------\r\n document.querySelector('.review_receiver_name').innerHTML = document.querySelector('#ReceiverName').value;\r\n\r\n // Agreement name\r\n this.payload.agreementName = agreementName;\r\n\r\n // PDF Document generated by system\r\n // ---------------------------------------------\r\n document.querySelector('#reviewAgreementDocuments').textContent = document.querySelector('#pdfDocumentName').value;\r\n this.payload.documents = [\r\n {\r\n documentName: document.querySelector('#pdfDocumentName').value,\r\n documentType: 'pdf',\r\n document: document.querySelector('#pdfDocument').value,\r\n },\r\n ];\r\n\r\n // Customer number - fetching data from markup.\r\n // ---------------------------------------------\r\n document.querySelector('#reviewCustomerNumberName').innerText = this.setCustomerByMarkup(); \r\n\r\n // End date\r\n // ---------------------------------------------------------------------\r\n this.payload.validThroughDate = this.validThroughDate;\r\n this.storage.setItem('machineAgreement', this.payload);\r\n }\r\n\r\n /**\r\n * @description Set Review data from Form\r\n * @returns void\r\n */\r\n setRecieverFieldsFromInput() {\r\n // Agreement template\r\n // ---------------------------------------------\r\n if (document.querySelector('.machine-templates.selected')) {\r\n document.querySelector('#reviewAgrementTemplate').innerHTML = document.querySelector(\r\n '.machine-templates.selected'\r\n ).innerHTML;\r\n this.payload.signingTemplateId = document\r\n .querySelector('.machine-templates.selected')\r\n .getAttribute('data-value');\r\n }\r\n\r\n // Agreement number\r\n // ---------------------------------------------\r\n if (document.querySelector('#agreementNumber').value) {\r\n document.querySelector('#reviewAgreementNumber').innerHTML =\r\n document.querySelector('#agreementNumber').value;\r\n this.payload.agreementNumber = document.querySelector('#agreementNumber').value;\r\n }\r\n\r\n // Receiever Name\r\n // ---------------------------------------------\r\n document.querySelector('.review_receiver_name').innerHTML =\r\n document.querySelector('#ReceiverName').value;\r\n\r\n // Agreement name \r\n this.payload.agreementName = document.querySelector('#selectTemplate a').innerHTML;\r\n\r\n // PDF Document\r\n // ---------------------------------------------\r\n if (document.querySelector('#agreementFile').files) {\r\n let pdfDocuments = '';\r\n const input = document.querySelector('#agreementFile');\r\n for (const doc of input.files) {\r\n pdfDocuments += `${doc.name}
`;\r\n }\r\n document.querySelector('#reviewAgreementDocuments').innerHTML = pdfDocuments;\r\n }\r\n\r\n // End date\r\n // ---------------------------------------------------------------------\r\n this.payload.validThroughDate = this.validThroughDate;\r\n \r\n // Set Payload\r\n // ---------------------------------------------------------------------\r\n this.storage.setItem('machineAgreement', this.payload);\r\n }\r\n\r\n /**\r\n * @description Get payLoad data\r\n * @returns {} Object\r\n */\r\n getPayload() {\r\n return this.payload;\r\n }\r\n\r\n}\r\n","import LocalStorage from '../../../helpers/LocalStorage';\r\nimport ExplosivePrecursorFormValidation from './ExplosivePrecursorFormValidation';\r\nimport RecieverForm from '../shared/RecieverForm';\r\nimport formFields from './json/formFields.json';\r\n\r\n/**\r\n * Explosive Precursors review class\r\n */\r\nexport default class ExplosivePrecursorReview {\r\n constructor(validThroughDate) {\r\n this.storageName = 'explosivePrecursors';\r\n this.validation = new ExplosivePrecursorFormValidation();\r\n this.storage = new LocalStorage();\r\n this.RecieverForm = new RecieverForm('explosives');\r\n this.validThroughDate = validThroughDate;\r\n this.payload = {};\r\n this.formFields = formFields;\r\n this.InitEventListerners();\r\n }\r\n\r\n /**\r\n * Event Listerners\r\n */\r\n InitEventListerners() {\r\n this.recieverEventListerner('.step2');\r\n this.recieverEventListerner('.step1');\r\n\r\n // Store data when form change\r\n for (const formItem of document.querySelectorAll('.explosiveForm')) {\r\n formItem.addEventListener('change', () => {\r\n this.storeData();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Set Reciever data when fields change\r\n * @param {*} step \r\n */\r\n recieverEventListerner(step) {\r\n for (let item of document.querySelectorAll(step)) {\r\n item.addEventListener('change', () => {\r\n this.setRecieverFieldsFromInput();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Store data\r\n */\r\n storeData() {\r\n this.setRecieverFieldsFromInput();\r\n\r\n for (const item of document.querySelectorAll('.explosiveForm')) {\r\n if (item.type !== 'checkbox') {\r\n this.payload[item.id] = item.value ? item.value : null;\r\n }\r\n }\r\n this.storage.setItem(this.storageName, this.payload);\r\n this.validation.checkForm('reciever');\r\n }\r\n\r\n /**\r\n * Setting payload from Helper\r\n * @param {*} payLoadData\r\n */\r\n preparePayLoad(payLoadData) {\r\n const attrKey = Object.keys(payLoadData)[0];\r\n const attrValue = payLoadData[attrKey];\r\n this.payload[attrKey] = attrValue;\r\n this.storeData();\r\n }\r\n\r\n /**\r\n * Set Review data for payload from Form input/Interaction\r\n */\r\n setRecieverFieldsFromInput() {\r\n for (let key in this.formFields) {\r\n const fieldElementId = formFields[key].fields.id;\r\n const fieldElement = document.querySelector(fieldElementId);\r\n\r\n if (formFields[key].type === 'checkbox') {\r\n if (fieldElement.checked) {\r\n document\r\n .querySelector(formFields[key].fields.selectedClass)\r\n .classList.remove('hidden');\r\n\r\n document.querySelector(formFields[key].fields.reviewId).innerHTML =\r\n 'check_box';\r\n\r\n if (\r\n document.querySelectorAll(`${formFields[key].fields.groupClass}:checked`)\r\n .length < 2\r\n ) {\r\n document\r\n .querySelector(formFields[key].fields.nextSelectedClass)\r\n .classList.add('hidden');\r\n }\r\n }\r\n\r\n this.payload[key] = fieldElement.checked;\r\n }\r\n\r\n if (formFields[key].type === 'text') {\r\n document.querySelector(formFields[key].fields.reviewId).innerHTML =\r\n fieldElement.value;\r\n this.payload[key] = fieldElement.value;\r\n }\r\n }\r\n\r\n // Email\r\n // ---------------------------------------------\r\n this.payload.emailAddress = document.querySelector('#emailAddress').value;\r\n\r\n // End date\r\n // ---------------------------------------------------------------------\r\n this.payload.validThroughDate = this.validThroughDate;\r\n\r\n this.storage.setItem(this.storageName, this.payload);\r\n }\r\n\r\n /**\r\n * Get payLoad data\r\n * @returns {} Object\r\n */\r\n getPayload() {\r\n return this.payload;\r\n }\r\n}\r\n","import LocalStorage from '../../../helpers/LocalStorage';\r\nimport DistillateFormValidation from './DistillateFormValidation';\r\nimport RecieverForm from '../shared/RecieverForm';\r\nimport formFields from './json/formFields.json';\r\n\r\n/**\r\n * Distillate review class\r\n */\r\nexport default class DistillateReview {\r\n constructor(validThroughDate) {\r\n this.storageName = 'distillate';\r\n this.validation = new DistillateFormValidation();\r\n this.storage = new LocalStorage();\r\n this.RecieverForm = new RecieverForm('distillate');\r\n this.validThroughDate = validThroughDate;\r\n this.payload = {};\r\n this.formFields = formFields;\r\n this.InitEventListerners();\r\n }\r\n\r\n /**\r\n * Event Listerners\r\n */\r\n InitEventListerners() {\r\n this.listenFormInteraction('.step2');\r\n this.listenFormInteraction('.step1');\r\n }\r\n\r\n /**\r\n * Listen to form interaction\r\n * @param {*} step\r\n */\r\n listenFormInteraction(step) {\r\n for (let item of document.querySelectorAll(step)) {\r\n item.addEventListener('change', () => {\r\n this.setDataFromInput();\r\n this.storeData();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Store data\r\n */\r\n storeData() {\r\n this.setDataFromInput();\r\n for (const item of document.querySelectorAll('.distillateForm')) {\r\n if(item.type !== 'checkbox') {\r\n this.payload[item.id] = item.value ? item.value : null;\r\n }\r\n }\r\n \r\n this.storage.setItem(this.storageName, this.payload);\r\n }\r\n\r\n /**\r\n * Setting payload from Helper\r\n * @param {*} payLoadData\r\n */\r\n preparePayLoad(payLoadData) {\r\n this.payload[Object.keys(payLoadData)[0]] = payLoadData[Object.keys(payLoadData)[0]];\r\n this.storeData();\r\n }\r\n\r\n /**\r\n * Set Review data for payload from Form input/Interaction\r\n */\r\n setDataFromInput() {\r\n this.payload.deliveryAddresses = [];\r\n let reviewAddressData = ``;\r\n\r\n for (let key in JSON.parse(JSON.stringify(this.formFields))) {\r\n if (formFields[key].type === 'checkbox') {\r\n document.querySelectorAll('.form-addresses:checked').forEach((checkbox, i) => {\r\n let delivery = {\r\n 'address': checkbox.getAttribute('data-address-number'),\r\n 'zipCity': checkbox.getAttribute('data-zipcity')\r\n }\r\n\r\n this.payload.deliveryAddresses[i] = delivery;\r\n\r\n reviewAddressData += `${checkbox.getAttribute('data-address')}, \r\n ${checkbox.getAttribute('data-zipcity')}
`;\r\n });\r\n\r\n document.querySelector(formFields[key].fields.reviewId).innerHTML =\r\n reviewAddressData;\r\n this.validateNextStep();\r\n }\r\n\r\n if (formFields[key].type === 'text') {\r\n document.querySelector(formFields[key].fields.reviewId).innerHTML =\r\n document.querySelector(formFields[key].fields.id).value;\r\n\r\n this.payload[key] = document.querySelector(formFields[key].fields.id).value;\r\n }\r\n }\r\n\r\n // AddressId\r\n // ---------------------------------------------\r\n if(this.payload.deliveryAddresses.length > 0) {\r\n this.payload.addressId = this.payload.deliveryAddresses[0].address;\r\n }\r\n \r\n // Email & End date\r\n // ---------------------------------------------\r\n this.payload.emailAddress = document.querySelector('#emailAddress').value;\r\n this.payload.validThroughDate = this.validThroughDate;\r\n }\r\n\r\n /**\r\n * Validate and enable/disable next step button\r\n */\r\n validateNextStep() {\r\n if (document.querySelector('.form-addresses:checked') !== null) {\r\n document.querySelector('#Step1Next').classList.remove('disabled');\r\n } else {\r\n document.querySelector('#Step1Next').classList.add('disabled');\r\n }\r\n }\r\n\r\n /**\r\n * Get payLoad data\r\n * @returns {} Object\r\n */\r\n getPayload() {\r\n return this.payload;\r\n }\r\n}\r\n","import DateTime from '../../../helpers/DateTime';\r\nimport ExplosivePrecursorFormValidation from '../explosives/ExplosivePrecursorFormValidation';\r\nimport MachineAgrementFormValidation from '../machine/MachineAgrementFormValidation';\r\nimport DistillateFormValidation from '../distillate/DistillateFormValidation';\r\nimport MachineAgreementReview from '../machine/MachineAgreementReview';\r\nimport ExplosivePrecursorReview from '../explosives/ExplosivePrecursorReview';\r\nimport DistillateReview from '../distillate/DistillateReview';\r\nimport recieverFields from './json/commonRecieverFields.json';\r\n\r\n/**\r\n * Shared Class for E-signing.\r\n * Populates Reciever dropdown and sets the Reciever data.\r\n */\r\nexport default class RecieverForm {\r\n /**\r\n * Constructor\r\n * @param {*} agreementType\r\n */\r\n constructor(agreementType) {\r\n this.reciever = {};\r\n this.validation = {};\r\n\r\n // Date Helper\r\n this.dateTime = new DateTime();\r\n this.validThroughDate = this.dateTime.addMonths(new Date(), 12).toString();\r\n\r\n // Agrement type\r\n this.agreementType = agreementType;\r\n\r\n // Json data for common fields\r\n this.recieverFields = recieverFields;\r\n\r\n // EventListerners\r\n this.initEventListerners();\r\n }\r\n\r\n /**\r\n * @description Inits the parent classes in seperate method\r\n * to avoid Stack overload\r\n * @param {string} classDefinition\r\n * @returns void\r\n */\r\n\r\n initParentClasses(classDefinition) {\r\n switch (this.agreementType) {\r\n case 'machines':\r\n if (classDefinition === 'reciever') {\r\n this.reciever = new MachineAgreementReview(this.validThroughDate);\r\n this.reciever.recieverEventListerner();\r\n }\r\n\r\n if (classDefinition === 'validation') {\r\n this.validation = new MachineAgrementFormValidation();\r\n }\r\n\r\n break;\r\n case 'explosives':\r\n if (classDefinition === 'reciever') {\r\n this.reciever = new ExplosivePrecursorReview(this.validThroughDate);\r\n }\r\n\r\n if (classDefinition === 'validation') {\r\n this.validation = new ExplosivePrecursorFormValidation();\r\n }\r\n\r\n break;\r\n case 'distillate':\r\n if (classDefinition === 'reciever') {\r\n this.reciever = new DistillateReview(this.validThroughDate);\r\n }\r\n\r\n if (classDefinition === 'validation') {\r\n this.validation = new DistillateFormValidation();\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Hide Personal number field\r\n * @param {*} recieverFields\r\n * @param {*} key\r\n */\r\n hidePersonalDataField(recieverFields, key) {\r\n // Hiding PersonalNumber field if there is data\r\n var parentDiv = document.getElementById(recieverFields[key].input).parentNode;\r\n if (\r\n recieverFields[key].input === 'ReceiverPersonalNumber' &&\r\n document.getElementById(recieverFields[key].input).value !== ''\r\n ) {\r\n document.getElementById(recieverFields[key].input).setAttribute('type', 'hidden');\r\n parentDiv.classList.add('hidden');\r\n } else if (recieverFields[key].input === 'ReceiverPersonalNumber') {\r\n document.getElementById(recieverFields[key].input).setAttribute('type', 'text');\r\n parentDiv.classList.remove('hidden');\r\n }\r\n }\r\n\r\n /**\r\n * @description Conceal Personal data\r\n * @param {*} recieverFields \r\n * @param {*} key \r\n */\r\n concealPersonalData(recieverFields, key) {\r\n if (\r\n recieverFields[key].reviewClass === '.review_receiver_personal_number' &&\r\n document.getElementById(recieverFields[key].input).value !== ''\r\n ) {\r\n document.querySelector(recieverFields[key].reviewClass).innerHTML = document\r\n .getElementById(recieverFields[key].input)\r\n .value.replace(/\\d(?=(?:\\D*\\d){0,3}$)/g, '*');\r\n }\r\n }\r\n\r\n /**\r\n * @description Event Listerners\r\n * @returns void\r\n */\r\n initEventListerners() {\r\n for (let item of document.querySelectorAll('.step2')) {\r\n item.addEventListener('blur', () => {\r\n this.signerFields(false);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @description Set DropDown data\r\n * @param {Object} result\r\n * @returns void\r\n */\r\n setRecieverDropDown = (result) => {\r\n if (!result) {\r\n return false;\r\n }\r\n\r\n const dropDown = document.querySelector('.receiverDropdown .dropdown');\r\n\r\n for (let item of result) {\r\n let listItem = document.createElement('li');\r\n let roles = item.RoleProfileName ? item.RoleProfileName : '';\r\n let cssClass = 'dropDownTrigger';\r\n\r\n listItem.setAttribute('class', cssClass);\r\n listItem.setAttribute('data-email', item.Email ? item.Email : '');\r\n listItem.setAttribute('data-name', item.Name ? item.Name : '');\r\n listItem.setAttribute(\r\n 'data-personalnumber',\r\n item.PersonalNumber ? item.PersonalNumber : ''\r\n );\r\n\r\n listItem.setAttribute(\r\n 'data-mobilephonenumber',\r\n item.MobilePhoneNumber ? item.MobilePhoneNumber : ''\r\n );\r\n\r\n listItem.textContent = item.Name ? `${roles} (${item.Name})` : '';\r\n listItem.addEventListener('click', (result) => {\r\n this.setRecieverfieldsFromDropDown(result);\r\n this.initParentClasses('validation');\r\n this.validation.checkForm('reciever');\r\n });\r\n\r\n dropDown.appendChild(listItem);\r\n }\r\n };\r\n\r\n /**\r\n * @description Set Reciever fields from selected reciever\r\n * @param {Object} evt\r\n * @returns void\r\n */\r\n setRecieverfieldsFromDropDown = (evt) => {\r\n for (let item of document.querySelectorAll('li.dropDownTrigger ')) {\r\n item.classList.remove('selected');\r\n }\r\n\r\n evt.target.classList.add('selected');\r\n\r\n document.querySelector('.receiverDropdown .showcase a').innerHTML = evt.target.innerHTML;\r\n document.querySelector('.receiverDropdown .dropdown').style.display = 'none';\r\n\r\n for (let item of document.querySelectorAll('div.agreementElement')) {\r\n item.classList.remove('disabled');\r\n }\r\n\r\n this.signerFields(true);\r\n\r\n // Signer - Email\r\n // ---------------------------------------------\r\n document.getElementById('Signer').value = evt.target.getAttribute('data-email') || '';\r\n };\r\n\r\n /**\r\n * @description Set Signer fields\r\n * @param {*} template\r\n * @returns void\r\n */\r\n signerFields(template) {\r\n this.initParentClasses('reciever');\r\n\r\n let element = template\r\n ? document.querySelector('.receiverDropdown .showcase li.selected')\r\n : '';\r\n\r\n // Common customer reciever fields\r\n // ---------------------------------------------\r\n for (let key in this.recieverFields) {\r\n if (element) {\r\n let attribute = {};\r\n document.getElementById(recieverFields[key].input).value = element.getAttribute(\r\n recieverFields[key].attribute\r\n );\r\n\r\n document.querySelector(recieverFields[key].reviewClass).innerHTML =\r\n element.getAttribute(recieverFields[key].attribute);\r\n\r\n attribute[recieverFields[key].payloadProp] = element.getAttribute(\r\n recieverFields[key].attribute\r\n );\r\n\r\n this.reciever.preparePayLoad(attribute);\r\n } else {\r\n let attribute = {};\r\n document.querySelector(recieverFields[key].reviewClass).innerHTML =\r\n document.getElementById(recieverFields[key].input).value;\r\n\r\n attribute[recieverFields[key].payloadProp] = document.getElementById(\r\n recieverFields[key].input\r\n ).value;\r\n\r\n this.reciever.preparePayLoad(attribute);\r\n }\r\n\r\n if (template) {\r\n this.hidePersonalDataField(recieverFields, key);\r\n }\r\n\r\n this.concealPersonalData(recieverFields, key);\r\n }\r\n\r\n // Customer number - TODO: Need check for query version.\r\n // ---------------------------------------------\r\n this.reciever.preparePayLoad({\r\n customerNumber: document.getElementById('customerNumberElementId').value,\r\n });\r\n\r\n // Agreement type\r\n // ---------------------------------------------\r\n this.reciever.preparePayLoad({\r\n AgreementType: this.agreementType,\r\n });\r\n\r\n // Check form\r\n // ---------------------------------------------\r\n this.initParentClasses('validation');\r\n this.validation.checkForm('reciever');\r\n }\r\n}\r\n","/**\r\n * API Helper class for fetching & posting data\r\n */\r\nexport default class Api {\r\n constructor() {}\r\n\r\n /**\r\n * Get Data from endpoint\r\n * @param {*} endpoint\r\n * @param {*} params\r\n * @returns {*} json object\r\n */\r\n async fetchData(endpoint, params) {\r\n const url = params ? `${endpoint}?${new URLSearchParams(params)}` : endpoint;\r\n document.querySelector('.div-receiver-loader').style.display = 'block';\r\n\r\n let json = await fetch(url, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-type': 'application/json;charset=UTF-8',\r\n },\r\n })\r\n .then((response) => {\r\n document.querySelector('.div-receiver-loader').style.display = 'none';\r\n return response.json().then((data) => ({\r\n status: response.status,\r\n body: data,\r\n }));\r\n })\r\n .catch((err) =>\r\n console.log(\r\n 'Request Failed',\r\n typeof err === 'object' && err !== null ? ', Result is not an object' : err\r\n )\r\n );\r\n\r\n return json;\r\n }\r\n\r\n /**\r\n * Post data to endpoint\r\n * @param {*} endpoint\r\n * @param {*} payload\r\n * @returns {*} json object\r\n */\r\n async postData(endpoint, payload) {\r\n let json = await fetch(endpoint, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-type': 'application/json',\r\n },\r\n body: JSON.stringify(payload),\r\n })\r\n .then((response) =>\r\n response.json().then((data) => ({\r\n status: response.status,\r\n body: data,\r\n }))\r\n )\r\n .catch((error) => {\r\n console.log(error); // Handle the error response object\r\n });\r\n return json;\r\n }\r\n}\r\n","import ExplosivePrecursorFormValidation from '../explosives/ExplosivePrecursorFormValidation';\r\nimport MachineAgrementFormValidation from '../machine/MachineAgrementFormValidation';\r\nimport DistillateFormValidation from '../distillate/DistillateFormValidation';\r\n\r\n/**\r\n * Shared class for Agreement Step Navigation\r\n * Stepping through the agreement process\r\n * when Validation is validated and valid\r\n */\r\nexport default class AgreementSteps {\r\n /**\r\n * Selecting validation methods depending on input parameter\r\n * @param {*} agreementType\r\n */\r\n constructor(agreementType) {\r\n switch (agreementType) {\r\n case 'machines':\r\n this.validation = new MachineAgrementFormValidation();\r\n break;\r\n\r\n case 'explosives':\r\n this.validation = new ExplosivePrecursorFormValidation();\r\n break;\r\n\r\n case 'distillate':\r\n this.validation = new DistillateFormValidation();\r\n break; \r\n }\r\n\r\n // Set navigation object\r\n this.steps = this.setStepNavigation();\r\n\r\n // Event Listerners\r\n this.initEventListerners();\r\n }\r\n\r\n /**\r\n * Set the Steps and views static.\r\n * The step values is part of a css class or id in the razor view.\r\n * For example: .step2, showStep2 or #Step2Next and #Step2Back\r\n * @return\r\n */\r\n setStepNavigation() {\r\n const formPage = 1;\r\n const selectReceiverPage = 2;\r\n const reviewDataPage = 3;\r\n\r\n const siteType = document.querySelector('#isInternal').value === 'true' ? true : false;\r\n\r\n return {\r\n init: {\r\n elements: formPage,\r\n selector: formPage,\r\n view: siteType ? selectReceiverPage : reviewDataPage,\r\n },\r\n proceed: {\r\n elements: selectReceiverPage,\r\n selector: selectReceiverPage,\r\n view: reviewDataPage,\r\n },\r\n back: {\r\n selector1: selectReceiverPage,\r\n view1: formPage,\r\n selctor2: reviewDataPage,\r\n view2: siteType ? selectReceiverPage : formPage,\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Event Listerner\r\n * @return void\r\n */\r\n initEventListerners() {\r\n // Step 1 - Form\r\n for (const formElements of document.querySelectorAll(`.step${this.steps.init.elements}`)) {\r\n document\r\n .getElementById(formElements.getAttribute('id'))\r\n .addEventListener('change', () => {\r\n this.validation.checkForm('form');\r\n });\r\n }\r\n // Step to reciever\r\n document\r\n .querySelector(`#Step${this.steps.init.selector}Next`)\r\n .addEventListener('click', () => {\r\n this.stepsViews(`showStep${this.steps.init.view}`);\r\n });\r\n\r\n // Step 2 - Reciever\r\n for (const formElements of document.querySelectorAll(\r\n `.step${this.steps.proceed.elements}`\r\n )) {\r\n document\r\n .getElementById(formElements.getAttribute('id'))\r\n .addEventListener('change', () => {\r\n this.validation.checkForm('reciever');\r\n });\r\n }\r\n\r\n // Step to Review & Sign\r\n document\r\n .querySelector(`#Step${this.steps.proceed.selector}Next`)\r\n .addEventListener('click', () => {\r\n this.stepsViews(`showStep${this.steps.proceed.view}`);\r\n });\r\n\r\n // Back from Reciever\r\n document\r\n .querySelector(`#Step${this.steps.back.selector1}Back`)\r\n .addEventListener('click', () => {\r\n this.stepsViews(`showStep${this.steps.back.view1}`);\r\n });\r\n\r\n // Back from Review & Sign\r\n document\r\n .querySelector(`#Step${this.steps.back.selctor2}Back`)\r\n .addEventListener('click', () => {\r\n this.stepsViews(`showStep${this.steps.back.view2}`);\r\n });\r\n }\r\n\r\n /**\r\n * Change views\r\n * @param {*} steps\r\n * @return void\r\n */\r\n stepsViews(steps) {\r\n let elements = document.querySelectorAll('.steps');\r\n elements.forEach((elements) => {\r\n elements.classList.add('hidden');\r\n });\r\n\r\n switch (steps) {\r\n case 'showStep1':\r\n document.getElementById('step1View').classList.remove('hidden');\r\n break;\r\n case 'showStep2':\r\n document.getElementById('step2View').classList.remove('hidden');\r\n break;\r\n case 'showStep3':\r\n document.getElementById('step3View').classList.remove('hidden');\r\n break;\r\n case 'showStep4':\r\n document.getElementById('step4View').classList.remove('hidden');\r\n break;\r\n }\r\n }\r\n}\r\n","/**\r\n * @description Class to check if the browser allows popups\r\n */\r\nexport default class BrowserSettings {\r\n /**\r\n * @description Check if the browser alow popups\r\n * @returns {boolean}\r\n */\r\n checkPopUpBlocker() {\r\n const newWindow = window.open('about:blank', '', 'width=1,height=1');\r\n if (\r\n !newWindow ||\r\n newWindow.closed ||\r\n typeof newWindow.closed === 'undefined' ||\r\n this.isPopupBlocked(newWindow)\r\n ) {\r\n return true;\r\n }\r\n newWindow.close();\r\n return false;\r\n }\r\n\r\n /**\r\n * @description Check if the popup is blocked\r\n * @param {*} newWindow\r\n * @returns {boolean}\r\n */\r\n isPopupBlocked(newWindow) {\r\n try {\r\n newWindow.focus();\r\n return false;\r\n } catch {\r\n return true;\r\n }\r\n }\r\n}\r\n","import Api from '../helpers/Api';\r\nimport LocalStorage from '../helpers/LocalStorage';\r\nimport FileUpload from '../helpers/FileUpload';\r\nimport QueryParams from '../helpers/QueryParams';\r\nimport AgreementSteps from '../modules/eSigning/shared/AgreementSteps';\r\nimport RecieverForm from '../modules/eSigning/shared/RecieverForm';\r\nimport BrowserSettings from '../helpers/BrowserSettings';\r\n/**\r\n * Agreement repository for Esigning\r\n */\r\nexport default class AgreementRepository {\r\n /**\r\n * Constructor\r\n * @param {*} agreementType\r\n */\r\n constructor(agreementType) {\r\n // Api fetch Reciever Data\r\n this.api = new Api();\r\n\r\n // Storage\r\n this.storage = new LocalStorage();\r\n\r\n // Steps & views\r\n this.steps = new AgreementSteps(agreementType);\r\n\r\n // Reciever Data for DropDown\r\n this.recieverForm = new RecieverForm(agreementType);\r\n\r\n // File upload Helper\r\n this.fileupload = new FileUpload();\r\n\r\n // Searching url Query Parameters\r\n this.queryParams = new QueryParams();\r\n\r\n // Endpoint you get from posting to to the api\r\n this.salesManSigningUrl;\r\n }\r\n\r\n /**\r\n * Fetch Reciever data from system\r\n * @async\r\n * @param {*} endPoint\r\n * @returns void\r\n */\r\n fetchRecieverDataAsync = async (endpoint) => {\r\n const response = await this.api.fetchData(endpoint, {\r\n customerNumber: document.getElementById('customerNumberElementId').value,\r\n });\r\n\r\n if (response.status === 200) {\r\n this.recieverForm.setRecieverDropDown(response.body);\r\n }\r\n };\r\n\r\n /**\r\n * Show loader icon and disable button\r\n * @returns void\r\n */\r\n showLoading = () => {\r\n const loaderIcon = document.querySelector(\"#agreement-loader\");\r\n const submitButton = document.querySelector(\".btnSaveAgreement\");\r\n submitButton.classList.add('disabled');\r\n loaderIcon.style.display = 'block';\r\n }\r\n\r\n /**\r\n * Remove loader icon and enable button\r\n * @returns void\r\n */\r\n removeLoading = () => {\r\n const loaderIcon = document.querySelector(\"#agreement-loader\");\r\n const submitButton = document.querySelector(\".btnSaveAgreement\");\r\n submitButton.classList.remove('disabled');\r\n loaderIcon.style.display = 'none';\r\n }\r\n\r\n /**\r\n * Show error dialog\r\n * @returns void\r\n */\r\n showGenericErrorDialog = () => {\r\n const dialog = document.querySelector('#informationDialog');\r\n const span = dialog.querySelector('span.popup-type');\r\n span.classList.add('warning');\r\n dialog.classList.remove('hidden');\r\n }\r\n\r\n /**\r\n * Post data to API\r\n * @async\r\n * @param {*} endpoint\r\n * @param {*} storageName\r\n * @returns void\r\n */\r\n commonPostAgreementDataAsync = async (endpoint, storageName) => {\r\n // Post data with payload\r\n const payload = this.storage.getItem(storageName);\r\n\r\n this.showLoading();\r\n const response = await this.api.postData(endpoint, payload);\r\n this.removeLoading();\r\n //Prepare for signing document.\r\n if (response && response.status === 200) {\r\n this.prepareSigningAsync(response.body, 'commonSigning');\r\n } else {\r\n this.showGenericErrorDialog();\r\n }\r\n };\r\n\r\n /**\r\n * Post data to Machine API\r\n * @async\r\n * @param {string} endpoint\r\n * @returns void\r\n */\r\n postMachineAgreementDataAsync = async (endpoint) => {\r\n const payload = this.storage.getItem('machineAgreement');\r\n const query = this.queryParams.getQueryParamsAsObject();\r\n\r\n if (Object.getOwnPropertyNames(query).length === 0) {\r\n payload.documents = await this.fileupload.getDocumentList(\r\n document.querySelector('#agreementFile').files\r\n );\r\n }\r\n\r\n this.showLoading();\r\n const response = await this.api.postData(endpoint, payload);\r\n this.removeLoading();\r\n\r\n const salesMan = response && response.body.Recipients.Signers.filter((x) => x.IsSalesMan)[0];\r\n this.salesManSigningUrl = salesMan && salesMan.SigningUrl;\r\n\r\n //Prepare for signing document.\r\n if (response && response.status === 200) {\r\n this.prepareSigningAsync(response.body);\r\n } else {\r\n this.showGenericErrorDialog();\r\n }\r\n };\r\n\r\n /**\r\n * Open new tab/window to Visma in browser and send sms.\r\n * @async\r\n * @param {*} response\r\n * @param {*} signingType\r\n * @returns void\r\n */\r\n prepareSigningAsync = async (response, signingType) => {\r\n if (signingType == 'commonSigning') {\r\n const browserSettings = new BrowserSettings();\r\n const browserIsBlocked = browserSettings.checkPopUpBlocker();\r\n\r\n // Visma window for signing\r\n if (document.querySelector('#isInternal').value !== 'true') {\r\n const newTab = window.open(response.SigningUrl, '_blank');\r\n\r\n if (!browserIsBlocked) {\r\n newTab.focus();\r\n }\r\n // Confirmation page - Set Signing url on button\r\n document\r\n .querySelector('#openSigningWindow')\r\n .setAttribute('href', response.SigningUrl);\r\n }\r\n }\r\n\r\n this.steps.stepsViews('showStep4');\r\n };\r\n}\r\n","import Api from '../helpers/Api';\r\n\r\nexport default class ReOrderRepository {\r\n constructor() {\r\n // Api fetch Reciever Data\r\n this.api = new Api();\r\n }\r\n\r\n /**\r\n * Post payload to Reorder\r\n * Redirect to E2 api\r\n * @param {*} payload\r\n * @returns\r\n */\r\n getReorderDataAsJsonAsync = async (payload) => {\r\n const result = await this.api.postData('/api/myorders/reorder', payload);\r\n \r\n if(result.status === 200) {\r\n const reDirectLink = document.querySelector('#my-orders-template').getAttribute('data-reorder');\r\n window.location.replace(reDirectLink);\r\n }\r\n };\r\n}\r\n","/**\r\n * Helper Class for creating table elements, with input fields etc.\r\n * Extends The Table Helper Class.\r\n */\r\n export default class TableElements {\r\n /**\r\n * @description Appending cell elements to table\r\n * @param {Object} params element object\r\n * @returns void\r\n */\r\n appendElements(params) {\r\n // Icons\r\n for (let type of params.icons) {\r\n params.cell.appendChild(\r\n this.addCellElements({\r\n elementType: type,\r\n id: params.dataId,\r\n })\r\n );\r\n }\r\n\r\n // Input field\r\n params.cell.appendChild(\r\n this.addCellElements({\r\n elementType: 'input',\r\n tableIndex: params.tableIndex,\r\n cellData: params.data,\r\n id: params.dataId,\r\n type: typeof params.tableProps !== undefined ? params.inputType : 'text',\r\n width: typeof params.tableProps !== undefined ? params.inputWidth : '90%',\r\n step: typeof params.tableProps !== undefined ? params.inputStep : false,\r\n stepValue: typeof params.tableProps !== undefined ? params.inputStepValue : 'any',\r\n initValue: typeof params.tableProps !== undefined ? params.initValue : '',\r\n })\r\n );\r\n\r\n // Span Text\r\n params.cell.appendChild(\r\n this.addCellElements({\r\n elementType: 'span',\r\n tableIndex: params.tableIndex,\r\n cellData: params.data,\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * @description Adding cell elements\r\n * @param {Object} params element attributes\r\n * @returns element table element, icons, span, input\r\n */\r\n addCellElements(params) {\r\n let element = {};\r\n switch (params.elementType) {\r\n case 'iEdit':\r\n element = document.createElement('i');\r\n element.setAttribute('data-icon-after', `edit`);\r\n element.setAttribute('class', 'hidden td_edit');\r\n element.setAttribute('id', `icon_edit_${params.id}`);\r\n break;\r\n\r\n case 'iSave':\r\n element = document.createElement('i');\r\n element.setAttribute('data-icon-after', `save`);\r\n element.setAttribute('class', 'hidden saveInput');\r\n element.setAttribute('id', `icon_save_${params.id}`);\r\n break;\r\n\r\n case 'iUndo':\r\n element = document.createElement('i');\r\n element.setAttribute('data-icon-after', `undo`);\r\n element.setAttribute('class', 'hidden td_undo');\r\n element.setAttribute('id', `icon_undo_${params.id}`);\r\n break;\r\n\r\n case 'input':\r\n element = document.createElement('input');\r\n element.setAttribute(\r\n 'id',\r\n `input_${params.tableIndex.rowIndex}_${params.tableIndex.columnIndex}`\r\n );\r\n element.setAttribute('data-init-value', params.initValue);\r\n element.setAttribute('value', params.initValue);\r\n element.setAttribute('data-id', params.id);\r\n element.setAttribute('class', 'hidden td_input');\r\n\r\n if ('type' in params) {\r\n element.setAttribute('type', params.type);\r\n }\r\n\r\n if ('width' in params) {\r\n element.setAttribute('style', `width: ${params.width}`);\r\n }\r\n\r\n if ('step' in params && params.step) {\r\n element.setAttribute('step', params.stepValue);\r\n }\r\n\r\n break;\r\n\r\n case 'span':\r\n element = document.createElement('span');\r\n element.setAttribute('class', 'td_span');\r\n element.setAttribute(\r\n 'id',\r\n `span_${params.tableIndex.rowIndex}_${params.tableIndex.columnIndex}`\r\n );\r\n element.innerText = params.cellData;\r\n break;\r\n }\r\n return element;\r\n }\r\n\r\n /**\r\n * @description Change edit icon and activate save button.\r\n * Adding/Removing css className on element.\r\n * @param {Object} evt event\r\n * @returns void\r\n */\r\n prepareSave(evt) {\r\n if (evt.parentNode.querySelector('[data-icon-after=\"save\"]') === null) {\r\n return false;\r\n }\r\n\r\n if (evt.value !== evt.getAttribute('data-init-value')) {\r\n evt.parentNode.querySelector('[data-icon-after=\"undo\"]').classList.add('hidden');\r\n evt.parentNode.querySelector('[data-icon-after=\"save\"]').classList.remove('hidden');\r\n evt.parentNode.querySelector('[data-icon-after=\"edit\"]').classList.add('hidden');\r\n evt.parentNode.querySelector('input').classList.add('changed');\r\n } else {\r\n evt.parentNode.querySelector('[data-icon-after=\"save\"]').classList.add('hidden');\r\n evt.parentNode.querySelector('[data-icon-after=\"edit\"]').classList.remove('hidden');\r\n evt.parentNode.querySelector('input').classList.add('changed');\r\n }\r\n\r\n if (document.querySelectorAll('#saveAll').length > 0) {\r\n document.querySelector('#saveAll').classList.remove('hidden');\r\n } else {\r\n document.querySelector('#saveAll').classList.add('hidden');\r\n }\r\n }\r\n\r\n /**\r\n * @description Deactivate input and activate span.\r\n * @param {string} id element to deactivate\r\n * @returns void\r\n */\r\n deActivateElement(id) {\r\n document.querySelector(`#${id} input`).classList.add('hidden');\r\n document.querySelector(`#${id} input`).blur();\r\n document.querySelector(`#${id} span`).classList.remove('hidden');\r\n document.querySelector(`#${id}`).classList.remove('editCell');\r\n }\r\n\r\n /**\r\n * @description Activate input and deactivate span.\r\n * @param {Object} targetElement event target element\r\n * @returns void\r\n */\r\n activateElement(targetElement) {\r\n targetElement.querySelector('input').classList.remove('hidden');\r\n targetElement.querySelector('input').focus();\r\n targetElement.querySelector('span').classList.add('hidden');\r\n targetElement.classList.add('editCell');\r\n }\r\n\r\n /**\r\n * @description Undo changes and reset to init value (Except edit will change to undo)\r\n * @param {Object} item element || event\r\n * @param string mode single || all\r\n * @returns void\r\n */\r\n resetInitValue(item, mode) {\r\n if (mode === 'single') {\r\n item.target.setAttribute('data-icon-after', 'save');\r\n item.target.parentNode\r\n .querySelector('[data-icon-after=\"save\"]')\r\n .classList.add('hidden');\r\n\r\n let icon = this.checkUndoValues(item.target.parentNode.querySelector('input'));\r\n\r\n item.target.parentNode\r\n .querySelector(`[data-icon-after=\"${icon}\"]`)\r\n .classList.remove('hidden');\r\n }\r\n\r\n if (mode === 'all') {\r\n for (let saveIcon of document.querySelectorAll(\r\n '.editable i[data-icon-after=\"cloud_done\"]'\r\n )) {\r\n saveIcon.setAttribute('data-icon-after', 'save');\r\n saveIcon.parentNode\r\n .querySelector('[data-icon-after=\"save\"]')\r\n .classList.add('hidden');\r\n\r\n let icon = this.checkUndoValues(saveIcon.parentNode.querySelector('input'));\r\n\r\n saveIcon.parentNode\r\n .querySelector(`[data-icon-after=\"${icon}\"]`)\r\n .classList.remove('hidden');\r\n\r\n document.querySelector('#saveAll i').setAttribute('data-icon-after', 'save');\r\n document.querySelector('#saveAll').classList.remove('savingDone');\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @description Simple check if values match initial value\r\n * @param {Object} element input element\r\n * @returns string undo || edit icon\r\n */\r\n checkUndoValues(element) {\r\n if (element.value !== element.getAttribute('data-init-value')) {\r\n return 'undo';\r\n } else {\r\n return 'edit';\r\n }\r\n }\r\n\r\n /**\r\n * @description Restore cell and cell elements to default state\r\n * @param {Object} params icon element and mode for single || all, response\r\n * @returns void\r\n */\r\n restoreElements(params) {\r\n params.element.target.parentNode.classList.remove('editCell');\r\n document.querySelector('input').blur();\r\n\r\n if (params.mode === 'all') {\r\n for (let item of document.querySelectorAll(\r\n '.saveInput[data-icon-after=\"cloud_queue\"]'\r\n )) {\r\n item.setAttribute('data-icon-after', 'cloud_done');\r\n\r\n this.delayedReset(item, params.mode);\r\n this.deActivateElement(item.parentNode.getAttribute('id'));\r\n }\r\n }\r\n\r\n if (params.mode === 'single') {\r\n params.element.target.parentNode\r\n .querySelector('.saveInput')\r\n .setAttribute('data-icon-after', 'cloud_done');\r\n\r\n this.delayedReset(params.element, params.mode);\r\n this.deActivateElement(params.element.target.parentNode.getAttribute('id'));\r\n }\r\n }\r\n\r\n /**\r\n * @description delay icon change to make it visible for user\r\n * @param {Object} element icon element to change\r\n * @param {string} mode single || all\r\n * @returns void\r\n */\r\n delayedReset(element, mode) {\r\n setTimeout(\r\n () => {\r\n this.resetInitValue(element, mode);\r\n },\r\n 3000,\r\n this\r\n );\r\n }\r\n}\r\n","/**\r\n * Helper Class for addin table events for icons, inputs and span.\r\n * Extends The Table Elements Helper Class.\r\n */\r\nimport TableElements from './TableElements';\r\nexport default class TableEvents extends TableElements {\r\n constructor() {\r\n super();\r\n this.timer = '';\r\n }\r\n\r\n /**\r\n * @description Make cell data editable\r\n * Adding event listener to elements (Span, icons && input)\r\n * @returns void\r\n */\r\n editableInputListener() {\r\n for (let item of document.querySelectorAll('.editable span')) {\r\n const inputId = item.parentNode.querySelector(`input`).getAttribute('id');\r\n const eventElements = ['.td_span', '.td_edit', '.td_undo'];\r\n\r\n for (let elementClass of eventElements) {\r\n this.sharedEventHandler({\r\n item: item.parentNode,\r\n id: item.parentNode.querySelector(elementClass).getAttribute('id'),\r\n type: elementClass,\r\n method: elementClass === '.td_undo' ? this.handleUndoEvent : this.handleEvents,\r\n });\r\n }\r\n\r\n this.inputEventHandler(inputId);\r\n }\r\n }\r\n\r\n /**\r\n * @description Event handling for edit icon and spans\r\n * Activate saving for input.\r\n * @param {Object} evt event object\r\n * @returns void\r\n */\r\n handleEvents(evt) {\r\n this.activateElement(evt.target.parentNode);\r\n }\r\n\r\n /**\r\n * @description Adding events\r\n * @param {Object} params {item, id, type & method callback}\r\n * @returns void\r\n */\r\n sharedEventHandler(params) {\r\n this.handleShared = params.method.bind(this);\r\n\r\n params.item\r\n .querySelector(`#${params.id}`)\r\n .addEventListener('click', this.handleShared, false);\r\n }\r\n\r\n /**\r\n * @description Handle event undo icon\r\n * @param {Object} evt event object\r\n * @returns void\r\n */\r\n handleUndoEvent(evt) {\r\n let initValue = evt.target.parentNode\r\n .querySelector('input')\r\n .getAttribute('data-init-value');\r\n\r\n evt.target.parentNode.querySelector('input').setAttribute('value', initValue);\r\n evt.target.parentNode.querySelector('input').value = initValue;\r\n evt.target.parentNode.querySelector('span').innerText = initValue;\r\n\r\n this.deActivateElement(evt.target.parentNode.getAttribute('id'));\r\n this.prepareSave(evt.target);\r\n }\r\n\r\n /**\r\n * @description Event for input element\r\n * Press: Preventing unfocus on input when typing\r\n * Keyup: Delay time with 1 second when typing, oterwise prepare saving\r\n * and deactivate element\r\n * Blur: Prepare saving and deactivate element\r\n * Keydown: Step, Up and down arrows for floats\r\n * @param {Object} item element || event\r\n * @returns void\r\n */\r\n inputEventHandler(item) {\r\n this.callbackKeyUp = this.handleKeyUp.bind(this);\r\n this.callbackPressDown = this.handleKeyPressKeyDown.bind(this);\r\n\r\n document.querySelector(`#${item}`).addEventListener('keypress', this.callbackPressDown);\r\n document.querySelector(`#${item}`).addEventListener('keydown', this.callbackPressDown);\r\n document.querySelector(`#${item}`).addEventListener('keyup', this.callbackKeyUp);\r\n document.querySelector(`#${item}`).addEventListener('blur', this.callbackKeyUp);\r\n }\r\n\r\n /**\r\n * @description Event Input Handle keyup\r\n * Set time out and set value to span element and input\r\n * @param {Object} evt event object\r\n * @returns void\r\n */\r\n handleKeyUp(evt) {\r\n this.timer = evt.target.getAttribute('id');\r\n const delayedTime = evt.type === 'blur' ? 0 : 1000;\r\n window.clearTimeout(this.timer);\r\n\r\n this.timer = window.setTimeout(() => {\r\n evt.target.parentNode.querySelector('span').innerHTML = evt.target.value;\r\n if (evt.target.value === '') {\r\n evt.target.value = evt.target.getAttribute('data-init-value');\r\n }\r\n\r\n evt.target.setAttribute('value', evt.target.value);\r\n this.deActivateElement(evt.target.parentNode.getAttribute('id'));\r\n this.prepareSave(evt.target);\r\n }, delayedTime);\r\n }\r\n\r\n /**\r\n * @description Event Input Handle keypress and keydown\r\n * Clear timeout when typing to keep focus on field when typing\r\n * @param {Object} evt object\r\n * @returns void\r\n */\r\n handleKeyPressKeyDown(evt) {\r\n window.clearTimeout(this.timer);\r\n }\r\n}\r\n","/**\r\n * Data parsing Helper class\r\n */\r\nexport default class DataParser {\r\n /**\r\n * @description Filter exclude unwanted data from back end\r\n * @param {Object} inputData data from back end\r\n * @param {Object} tableProps filter data by json properties\r\n * @param {string} mappedKeys key in object with array of accepted keys\r\n * @requires json object with properties/settings\r\n * @returns key value pairs\r\n */\r\n\r\n filterDataByKeys(inputData, jsonProps, mappedKeys) {\r\n let data = {};\r\n const props = jsonProps;\r\n\r\n for (let [itemIndex, itemValue] of inputData.entries()) {\r\n if (inputData[itemIndex][props.key] !== null) {\r\n let mergedData = [].concat(\r\n Object.entries(inputData[itemIndex]).slice(0, -1),\r\n Object.entries(inputData[itemIndex][props.key])\r\n );\r\n\r\n data[itemIndex] = mergedData.map((value, key) => {\r\n if (props[mappedKeys].includes(value[0])) {\r\n return ([key] = value);\r\n }\r\n });\r\n\r\n data[itemIndex] = data[itemIndex].filter((element) => {\r\n return element !== undefined;\r\n });\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n}\r\n","/**\r\n * Helper Class for creating tables, with input fields etc.\r\n */\r\nimport TableElements from './TableElements';\r\nimport TableEvents from './TableEvents';\r\nimport DataParser from '../../helpers/DataParser';\r\n\r\nexport default class Table {\r\n /**\r\n * @property {Object} TableElements helper class\r\n * @property {Object} TableEvents helper class\r\n * @returns void\r\n */\r\n constructor() {\r\n this.tableElements = new TableElements();\r\n this.tableEvents = new TableEvents();\r\n this.dataParser = new DataParser();\r\n }\r\n\r\n /**\r\n * @description Clear table from html structure and data\r\n * @param {Object} parent parent element\r\n * @returns void\r\n */\r\n removeAllChildNodes(parent) {\r\n while (parent.firstChild) {\r\n parent.removeChild(parent.firstChild);\r\n }\r\n }\r\n\r\n /**\r\n * @description Add and create Table header\r\n * if Property keys arguments exists, filter out unwanted data\r\n * @param {string} tableId static table id\r\n * @param {Object} data data from back end\r\n * @param {Object} tableProps json object with properties/settings\r\n * @returns void\r\n */\r\n addTableHead(tableId, data, tableProps) {\r\n document.querySelector(`${tableId}`).setAttribute('status', 'false');\r\n this.removeAllChildNodes(document.querySelector(tableId));\r\n\r\n const headerFilter =\r\n typeof tableProps !== undefined\r\n ? this.dataParser.filterDataByKeys(data, tableProps, 'mappedKeys')\r\n : data;\r\n const headerData = typeof tableProps !== undefined ? headerFilter[0] : data;\r\n const tableRow = document.querySelector(tableId);\r\n const tableHeader = document.createElement('thead');\r\n\r\n let tableIndex = { rowNumber: 0, columnIndex: 0 };\r\n\r\n for (let key of headerData) {\r\n let tableHeaderColumn = document.createElement('th');\r\n let tableHeaderText = document.createTextNode(this.convertCamelCase(key[0]));\r\n\r\n if (typeof tableProps !== undefined) {\r\n for (let active of Object.values(tableProps.activeKeys)) {\r\n if (active.key === key[0]) {\r\n tableHeaderColumn.setAttribute(\r\n 'class',\r\n `background-col-${tableIndex.columnIndex}`\r\n );\r\n }\r\n }\r\n }\r\n\r\n tableHeaderColumn.appendChild(tableHeaderText);\r\n tableHeader.appendChild(tableHeaderColumn);\r\n tableIndex.columnIndex++;\r\n }\r\n\r\n tableRow.appendChild(tableHeader);\r\n }\r\n\r\n /**\r\n * @description Create table with rows and inputs\r\n * @param {string} tableId static table id\r\n * @param {Object} data data from back end\r\n * @param {string} renderType Used when updating a row\r\n * @returns void\r\n */\r\n addTableBody(tableId, data, tableProps) {\r\n let tableIndex = { rowIndex: 0, columnIndex: 0 };\r\n let dataId = '';\r\n const tableElement = document.querySelector(tableId);\r\n const bodyFilter =\r\n typeof tableProps !== undefined\r\n ? this.dataParser.filterDataByKeys(data, tableProps, 'mappedKeys')\r\n : data;\r\n const bodyData = typeof tableProps !== undefined ? bodyFilter : data;\r\n\r\n for (let element in bodyData) {\r\n let row = tableElement.insertRow();\r\n row.setAttribute('id', `row_${tableIndex.rowIndex}`);\r\n\r\n for (let key in bodyData[element]) {\r\n if (\r\n typeof tableProps !== undefined &&\r\n tableIndex.columnIndex === tableProps.mappedKeys.length\r\n ) {\r\n tableIndex.columnIndex = 0;\r\n }\r\n\r\n let dataKey = bodyData[element][key][0];\r\n let dataValue = bodyData[element][key][1];\r\n let cell = row.insertCell();\r\n\r\n cell.setAttribute('id', `cell_${tableIndex.rowIndex}_${tableIndex.columnIndex}`);\r\n\r\n let inputType, inputWidth, inputStep, inputStepValue, inputNullValue;\r\n if (typeof tableProps !== undefined) {\r\n for (let active of Object.values(tableProps.activeKeys)) {\r\n if (active.key === dataKey) {\r\n inputType = active.type;\r\n inputWidth = active.width;\r\n inputStep = active.step;\r\n inputStepValue = active.stepValue;\r\n inputNullValue = active.nullValue;\r\n }\r\n }\r\n }\r\n\r\n if (dataKey === 'Id') {\r\n dataId = dataValue;\r\n cell.parentNode.setAttribute('data-id', dataId);\r\n }\r\n\r\n cell.setAttribute('update-id', `${dataKey}_${dataId}`);\r\n\r\n let initValue = '';\r\n if (typeof tableProps !== undefined) {\r\n initValue =\r\n dataValue === null || dataValue === 'null' ? inputNullValue : dataValue;\r\n }\r\n\r\n this.tableElements.appendElements({\r\n cell: cell,\r\n dataId: dataId,\r\n tableIndex: tableIndex,\r\n data: dataValue,\r\n settings: tableProps,\r\n inputType: inputType,\r\n inputWidth: inputWidth,\r\n inputStep: inputStep,\r\n inputStepValue: inputStepValue,\r\n initValue: initValue,\r\n icons: ['iEdit', 'iSave', 'iUndo'],\r\n });\r\n\r\n if (typeof tableProps !== undefined) {\r\n for (let active of Object.values(tableProps.activeKeys)) {\r\n if (active.key === dataKey) {\r\n cell.setAttribute(\r\n 'class',\r\n `background-col-${tableIndex.columnIndex} editable`\r\n );\r\n cell.querySelector('i').classList.remove('hidden');\r\n }\r\n }\r\n }\r\n tableIndex.columnIndex++;\r\n }\r\n tableIndex.rowIndex++;\r\n\r\n document.querySelector(`${tableId}`).setAttribute('status', 'true');\r\n }\r\n\r\n // Small cosmetic fix for position of save all button,\r\n // when rendering tables with alot of data.\r\n if (document.querySelector('.saveAll').length > 0) {\r\n if (tableIndex.rowIndex > 6) {\r\n document.querySelector('.saveAll').setAttribute('style', 'right: 36px !important;');\r\n } else {\r\n document.querySelector('.saveAll').removeAttribute('style');\r\n }\r\n }\r\n\r\n this.tableEvents.editableInputListener();\r\n }\r\n\r\n /**\r\n * @description Updating table data by id's after save\r\n * @param {Object} data data from back end\r\n * @param {Object} tableProps json object with properties/settings\r\n * @returns void\r\n */\r\n updateTableCells(data, tableProps) {\r\n const bodyFilter =\r\n typeof tableProps !== undefined\r\n ? this.dataParser.filterDataByKeys(data, tableProps, 'mappedKeys')\r\n : data;\r\n const bodyData = typeof tableProps !== undefined ? bodyFilter : data;\r\n\r\n for (let element in bodyData) {\r\n let dataId = '';\r\n for (let key in bodyData[element]) {\r\n let dataKey = bodyData[element][key][0];\r\n let dataValue = bodyData[element][key][1];\r\n\r\n if (dataKey === 'Id') {\r\n dataId = dataValue;\r\n } else {\r\n document.querySelector(`[update-id=\"${dataKey}_${dataId}\"] span`).innerText =\r\n dataValue;\r\n\r\n document\r\n .querySelector(`[update-id=\"${dataKey}_${dataId}\"] input`)\r\n .setAttribute('value', dataValue);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @description Convert string of camelCase text to two words.\r\n * @param {string} text\r\n * @returns {string} result converted string\r\n */\r\n convertCamelCase(text) {\r\n const regReplaceText = text.replace(/([A-Z])/g, ' $1');\r\n const result = regReplaceText.charAt(0).toUpperCase() + regReplaceText.slice(1);\r\n return result;\r\n }\r\n}\r\n","/**\r\n * Helper class for Api routes\r\n */\r\nexport default class Routes {\r\n /**\r\n * @description Populating variables in string with data\r\n * Ex. Setting parameter Id's for api-route/endpoint (Basic string interpolation)\r\n * @param {*} route\r\n * @property {object} parameters\r\n * @returns {string} new route\r\n */\r\n setRouteParameters(route, parameters) {\r\n if(parameters !== null){\r\n let tempLiterals = route.match(/\\{(.*?)\\}/g);\r\n tempLiterals.forEach((tempLiterals) => {\r\n let substitution = tempLiterals.substring(1, tempLiterals.length - 1);\r\n route = parameters[substitution]\r\n ? route.replace(tempLiterals, parameters[substitution])\r\n : null;\r\n });\r\n }\r\n \r\n return route;\r\n }\r\n}\r\n","/**\r\n * Drop down Helper class\r\n */\r\nexport default class Dropdown {\r\n /**\r\n * @requires Markup for drop downs LM2 style.\r\n * @requires Table Component class\r\n * @requires Routes Helper class\r\n * @requires Repository class\r\n * @requires JSon file with event properties - see discount tool\r\n * @requires Static table id\r\n * @requires Static dropdown id - see discount tool.\r\n * @param {*} params object with required objects and properties\r\n */\r\n constructor(params) {\r\n this.table = params.table;\r\n this.tableProps = params.tableProps;\r\n this.routes = params.routes;\r\n this.repository = params.repository;\r\n this.eventProps = params.eventProps;\r\n this.tableId = params.tableId;\r\n this.setListenerData(params.initElement);\r\n }\r\n\r\n /**\r\n * @description Init select element event listeners\r\n * Applying the Eventlistener properties/rules from json file.\r\n * @requires json object with properties/settings\r\n * @param {string} elementName element id/\r\n * @returns void\r\n */\r\n setListenerData(elementName) {\r\n for (let item in this.eventProps) {\r\n if (this.eventProps[item].element === elementName) {\r\n this.addListener({\r\n element: `${elementName} .dropdown`,\r\n targetElement: this.eventProps[item].targetElement,\r\n key: item,\r\n scope: this,\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @description Add Event listerner to dropdown\r\n * @param {Object} params object with properties and data\r\n * @returns void\r\n */\r\n addListener(params) {\r\n for (let item of document.querySelectorAll(`#${params.element} a`)) {\r\n let listener = function (event) {\r\n params.scope.getDropDownDataAsync(event, {\r\n element: `#${params.element} .dropdown`,\r\n targetElement: params.targetElement,\r\n key: params.key,\r\n scope: params.scope,\r\n });\r\n\r\n params.scope.handleDropDownOnClick({ event: event, element: params.element });\r\n };\r\n item.addEventListener('click', listener, false);\r\n }\r\n }\r\n\r\n /**\r\n * @desciption Replacing the LM2 dropdown element logic\r\n * Handling click events on dropdown list\r\n * @param {Object} params object with properties\r\n * @returns void\r\n */\r\n handleDropDownOnClick(params) {\r\n const parentItem = document.querySelector(`#${params.element}`).parentNode;\r\n this.resetDropDowns(`${params.element}`);\r\n\r\n for (let item of parentItem.querySelectorAll(`.dropdown li`)) {\r\n item.classList.remove('selected');\r\n }\r\n\r\n parentItem\r\n .querySelector(`input`)\r\n .setAttribute('value', params.event.target.getAttribute('data-id'));\r\n parentItem.querySelector(`.dropdown`).setAttribute('style', 'display:none;');\r\n parentItem.querySelector(`.placeholder`).textContent = params.event.target.innerText;\r\n\r\n params.event.target.parentNode.classList.add('selected');\r\n document.querySelector(`.lm__form-dropdown .error`).classList.add('hidden');\r\n this.table.removeAllChildNodes(document.querySelector(`#${this.tableId}`));\r\n }\r\n\r\n /**\r\n * @description Reset and set init value.\r\n * @param {Object} element element id and css class\r\n * @requires json object with properties\r\n * @returns void\r\n */\r\n resetDropDowns(element) {\r\n for (let item in this.eventProps) {\r\n if (\r\n element.replace(' .dropdown', '').trim() === this.eventProps[item].element &&\r\n this.eventProps[item].reset !== null\r\n ) {\r\n for (let resetItem of this.eventProps[item].reset) {\r\n document.querySelector(`#${resetItem} a`).textContent = document\r\n .querySelector(`#${resetItem} a`)\r\n .getAttribute('data-placeholder');\r\n document.querySelector(`#${resetItem}`).classList.add('disabled');\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @description Get Data from back end api\r\n * @param {Object} evt event\r\n * @param {Object} params key and scope\r\n * @requires module:routes routes helper class\r\n * @requires module:repository repository class\r\n * @requires json object with properties\r\n * @returns void\r\n */\r\n getDropDownDataAsync = async (evt, params) => {\r\n const eventId = evt.target.getAttribute('data-id');\r\n const response = await params.scope.repository.fetchDataAsync({\r\n route: params.scope.routes.setRouteParameters(\r\n `${params.scope.eventProps[params.key].route}${eventId}`,\r\n null\r\n ),\r\n });\r\n\r\n if (response && params.scope.eventProps[params.key].targetElementType === 'dropdown') {\r\n params.scope.setDropDownData(response, params);\r\n } else {\r\n params.scope.addTable(response);\r\n }\r\n };\r\n\r\n /**\r\n * @description Set DropDown data\r\n * @param {Object} response data from back end api\r\n * @param {Object} params key and scope\r\n * @returns void\r\n */\r\n setDropDownData(response, params) {\r\n const elementName = params.targetElement;\r\n const dropDown = document.querySelector(`#${elementName} .dropdown`);\r\n\r\n dropDown.innerHTML = '';\r\n\r\n try {\r\n for (let item of response.body) {\r\n let listItem = document.createElement('li');\r\n let listHref = document.createElement('a');\r\n\r\n listItem.setAttribute('data-value', item.Id ? item.Id : '');\r\n listHref.setAttribute('data-id', item.Id ? item.Id : '');\r\n listHref.setAttribute('href', 'javascript:void(0)');\r\n listHref.textContent = item.Name ? item.Name : '';\r\n\r\n listItem.appendChild(listHref);\r\n dropDown.appendChild(listItem);\r\n\r\n document.querySelector(`#${elementName}`).classList.remove('disabled');\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n return false;\r\n }\r\n\r\n this.setListenerData(elementName);\r\n }\r\n\r\n /**\r\n * @description Add Table and Generate table-data\r\n * @param {Object} response data from back end api\r\n * @requires module:Table\r\n * @returns void || boolean\r\n */\r\n addTable(response) {\r\n if (!response.body) {\r\n return false;\r\n }\r\n\r\n if (!response.responseValidate) {\r\n this.renderErrorMessage(response.body);\r\n return false;\r\n }\r\n\r\n try {\r\n this.table.addTableHead(`#${this.tableId}`, response.body, this.tableProps);\r\n this.table.addTableBody(`#${this.tableId}`, response.body, this.tableProps);\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n\r\n /**\r\n * Render Error message when Id is null and there is no data.\r\n * @param {Object} response\r\n * @returns void \r\n */\r\n renderErrorMessage(response) {\r\n document.querySelector('.lm__form-dropdown .error').classList.remove('hidden');\r\n document.querySelector('.lm__form-dropdown .error').innerText = response;\r\n }\r\n}\r\n","import Api from '../helpers/Api';\r\n/**\r\n * Repository layer for Discount Admin tool \r\n */\r\nexport default class DiscountToolRepository {\r\n /**\r\n * @property {Object} Api helper class, get/post data from/to back end\r\n */\r\n constructor() {\r\n this.api = new Api();\r\n this.errorMessage = \"result is not a object\";\r\n }\r\n\r\n /**\r\n * Post payload to Discount tool\r\n * @param {Object} params route && payload\r\n * @returns {Object} object response\r\n */\r\n postDataAsync = async (params) => {\r\n const response = await this.api.postData(params.route, params.payload);\r\n \r\n if(typeof response === 'object' && response !== null) {\r\n if(response.status === 200) {\r\n return response.body;\r\n }\r\n } else {\r\n console.log(`Post ${this.errorMessage}`);\r\n return false;\r\n }\r\n };\r\n\r\n /**\r\n * Get data for SelectBox\r\n * @param {Object} params route && payload\r\n * @returns {Object} object response\r\n */\r\n fetchDataAsync = async (params) => {\r\n const response = await this.api.fetchData(params.route, null);\r\n const responseBody = { ...response.body };\r\n\r\n if (responseBody[0].Id === 'null') {\r\n return {responseValidate: false, body: responseBody[0].Name}; \r\n }\r\n\r\n if(typeof response === 'object' && response !== null) {\r\n if(response.status === 200) {\r\n return {responseValidate: true, body: response.body}; \r\n }\r\n } else {\r\n console.log(`Fetch ${this.errorMessage}`);\r\n return false;\r\n }\r\n \r\n };\r\n}\r\n","import DiscountToolRepository from '../../repositories/DiscountToolRepository';\r\nimport Table from '../../components/table/Table';\r\nimport TableElements from '../../components/table/TableElements';\r\nimport tableProps from './json/tableProps.json';\r\nimport eventListenerProps from './json/eventListenerProps.json';\r\n\r\nexport default class DiscountToolService {\r\n /**\r\n * @property {Object} DiscountToolService Save data methods\r\n * @property {Object} Table helper class\r\n * @property {Object} tableElements helper class\r\n * @property {Object} DiscountToolRepository repository class\r\n * @property {Object} eventListenerProps json object with properties\r\n * @property {Object} tableProps json object with properties\r\n * @returns void\r\n */\r\n constructor() {\r\n this.repository = new DiscountToolRepository();\r\n this.table = new Table();\r\n this.tableElements = new TableElements();\r\n this.eventProps = eventListenerProps;\r\n this.tableProps = tableProps;\r\n\r\n this.saveAllDataEventHandler = {};\r\n this.saveDataEventHandler = {};\r\n\r\n this.initSaveAllEvents();\r\n }\r\n\r\n /**\r\n * @description Initialize event listeners on save buttons\r\n * @returns void\r\n */\r\n initSaveAllEvents() {\r\n this.saveAllDataEventHandler = this.prepareSaveAllInputs.bind(this);\r\n document.querySelector('#saveAll').addEventListener('click', this.saveAllDataEventHandler);\r\n }\r\n\r\n /**\r\n * @description Eventlistener for save\r\n * @param {Object} item event item from observer\r\n * @returns if observed class is set || void\r\n */\r\n addSaveEventListener(item) {\r\n this.saveDataEventHandler = this.prepareSaveInput.bind(this);\r\n\r\n if (item.parentNode.classList.contains('editable')) {\r\n if (item.parentNode.querySelector('.saveInput').classList.contains('observed')) {\r\n return;\r\n }\r\n\r\n let id = item.parentNode.querySelector('.saveInput').getAttribute('id');\r\n item.parentNode\r\n .querySelector(`#${id}`)\r\n .addEventListener('click', this.saveDataEventHandler);\r\n\r\n if (!item.parentNode.querySelector('.saveInput').classList.contains('observed')) {\r\n item.parentNode.querySelector('.saveInput').classList.add('observed');\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @description Save data for all inputs\r\n * @param {Object} evt event\r\n * @returns void\r\n */\r\n prepareSaveAllInputs = async (evt) => {\r\n let id, value;\r\n let saveObject = [];\r\n\r\n this.setErrors('reset');\r\n\r\n document.querySelector('#saveAll i').setAttribute('data-icon-after', 'cloud_queue');\r\n document.querySelector('#saveAll').classList.add('saving');\r\n\r\n for (let item of document.querySelectorAll('.editable .saveInput')) {\r\n item.setAttribute('data-icon-after', 'cloud_queue');\r\n id = item.parentNode.querySelector('input').getAttribute('data-id');\r\n value = item.parentNode.querySelector('input').getAttribute('value');\r\n if (item.parentNode.querySelector('input').classList.contains('changed')) {\r\n if (value.trim() === '') {\r\n value = '0';\r\n }\r\n saveObject.push({\r\n Id: id,\r\n Value: value,\r\n });\r\n\r\n item.parentNode.querySelector('input').classList.remove('changed');\r\n }\r\n }\r\n await this.saveDataAsync({ event: evt, save: saveObject, mode: 'all' });\r\n };\r\n\r\n /**\r\n * @description Save data from input/inputs\r\n * @param {Object} evt event\r\n * @returns void\r\n */\r\n prepareSaveInput = async (evt) => {\r\n let id, value;\r\n\r\n this.setErrors('reset');\r\n\r\n evt.target.setAttribute('data-icon-after', 'cloud_queue');\r\n id = evt.target.parentNode.querySelector('input').getAttribute('data-id');\r\n value = evt.target.parentNode.querySelector('input').getAttribute('value');\r\n if (value.trim() === '') {\r\n value = '0';\r\n }\r\n evt.target.parentNode.querySelector('input').classList.remove('changed');\r\n await this.saveDataAsync({\r\n event: evt,\r\n save: { Id: id, Value: value },\r\n mode: 'single',\r\n });\r\n };\r\n\r\n /**\r\n * @description Set error state for save buttons\r\n * @param {*} errorState\r\n */\r\n setErrors = (errorState) => {\r\n if (errorState === 'set') {\r\n\r\n document.querySelector('#saveAll').classList.remove('saving');\r\n document.querySelector('#saveAll i').setAttribute('data-icon-after', 'save');\r\n document.querySelector('#saveAll span').innerText = window.discountTranslate.saveAll;\r\n document.querySelector('#saveAll').classList.add('hidden');\r\n\r\n for (let item of document.querySelectorAll('.editable .saveInput')) {\r\n item.setAttribute('data-icon-after', 'error');\r\n }\r\n }\r\n\r\n if (errorState === 'reset') {\r\n document.querySelector('#saveAll i').setAttribute('data-icon-after', 'save');\r\n document.querySelector('#saveAll').classList.remove('error');\r\n document.querySelector('#saveAll span').innerText = window.discountTranslate.saveAll;\r\n }\r\n\r\n };\r\n\r\n /**\r\n * @description Posting data to backend & handling response object\r\n * @requires module:Table class\r\n * @param {Object} params evt: event, save: {Id, Value}, mode: single || all\r\n */\r\n saveDataAsync = async (params) => {\r\n\r\n const response = await this.repository.postDataAsync({\r\n route:\r\n params.mode === 'single'\r\n ? this.eventProps.saveSingleRoute\r\n : this.eventProps.saveAllRoute,\r\n payload: params.save,\r\n });\r\n\r\n if (typeof response === 'object') {\r\n let moreChangesExist = false;\r\n\r\n for (let item of document.querySelectorAll('.editable .saveInput')) {\r\n if (item.parentNode.querySelector('input').classList.contains('changed')) {\r\n moreChangesExist = true;\r\n }\r\n }\r\n\r\n if(!moreChangesExist) {\r\n document.querySelector('#saveAll').classList.remove('saving');\r\n document.querySelector('#saveAll i').setAttribute('data-icon-after', 'save');\r\n document.querySelector('#saveAll span').innerText = window.discountTranslate.saveAll;\r\n document.querySelector('#saveAll').classList.add('hidden');\r\n }\r\n\r\n\r\n this.tableElements.restoreElements({\r\n element: params.event,\r\n mode: params.mode,\r\n response: response,\r\n });\r\n\r\n this.table.updateTableCells(response, this.tableProps);\r\n } else {\r\n console.log(response);\r\n this.setErrors('set');\r\n }\r\n };\r\n}","/**\r\n * E-Signing Machine agreement\r\n */\r\nimport MachineAgreementForm from './modules/eSigning/machine/MachineAgreementForm';\r\nnew MachineAgreementForm();\r\n\r\n/**\r\n * E-Signing Explosives\r\n */\r\nimport ExplosivePrecursorForm from './modules/eSigning/explosives/ExplosivePrecursorForm';\r\nnew ExplosivePrecursorForm();\r\n\r\n/**\r\n * E-Signing Distillate\r\n */\r\n import DistillateForm from './modules/eSigning/distillate/DistillateForm';\r\n new DistillateForm();\r\n\r\n/**\r\n * My Orders - ReOrder\r\n */\r\nimport ReOrder from './modules/myOrders/ReOrder';\r\nnew ReOrder();\r\n\r\n/**\r\n * Discount Administration Tool\r\n */\r\nimport DiscountTool from './modules/discountTool/DiscountTool';\r\nnew DiscountTool();\r\n\r\n/**\r\n * Transport Auction\r\n */\r\nimport TransportAuction from './modules/transportAuction/TransportAuction';\r\nnew TransportAuction();\r\n\r\n","import FileUpload from '../../../helpers/FileUpload';\r\nimport RecieverForm from '../shared/RecieverForm';\r\nimport MachineAgrementFormValidation from './MachineAgrementFormValidation';\r\nimport MachineAgreementReview from './MachineAgreementReview';\r\nimport AgreementRepository from '../../../repositories/AgreementRepository';\r\n\r\n/**\r\n * Machine Agreement form\r\n */\r\nexport default class MachineAgreementForm {\r\n /**\r\n * Init\r\n */\r\n constructor() {\r\n // Prevents class being used outside of project scope to avoid errors\r\n if (document.getElementsByClassName('machine-agreement').length < 1) {\r\n return;\r\n }\r\n\r\n // Fetch Reciever data & populate customer drop down\r\n new MachineAgreementReview();\r\n\r\n // Reciever Data for DropDown\r\n new RecieverForm('machines');\r\n\r\n // Validation class\r\n this.validation = new MachineAgrementFormValidation();\r\n\r\n // EventListerners\r\n this.initEventListerners();\r\n\r\n // Repository\r\n this.repository = new AgreementRepository('machines');\r\n this.repository.fetchRecieverDataAsync('/api/e-signing/get-receivers-for-digital-signing');\r\n\r\n // File upload\r\n this.fileupload = new FileUpload();\r\n this.fileupload.fileInputOnChange('agreementFile');\r\n }\r\n\r\n /**\r\n * @description Submit Machine agreement data\r\n * @param {*} evt\r\n * @returns void\r\n */\r\n submitMachineAgreementData = () => {\r\n this.repository.postMachineAgreementDataAsync('/api/e-signing/agreements/machine');\r\n };\r\n\r\n /**\r\n * @description Get data from system\r\n * @returns void\r\n */\r\n initEventListerners() {\r\n // Validation\r\n document\r\n .querySelector('#agreementNumber')\r\n .addEventListener('focus', this.validation.agreementRegex);\r\n document.querySelector('#agreementNumber').dispatchEvent(new Event('focus'));\r\n\r\n // Select Agreement Template - set placeholder\r\n for (let item of document.querySelectorAll('#selectTemplate a')) {\r\n item.addEventListener(\r\n 'click',\r\n (evt) => {\r\n this.agreementTemplate(evt);\r\n },\r\n false\r\n );\r\n }\r\n\r\n //Fileupload\r\n document.querySelector('.btn_fileupload').addEventListener('click', () => {\r\n document.getElementById('agreementFile').click();\r\n });\r\n\r\n // Submit data\r\n document\r\n .querySelector('#postMachineAgreement')\r\n .addEventListener('click', this.submitMachineAgreementData);\r\n }\r\n\r\n /**\r\n * @description Change Placeholder if agreementtemplate change\r\n * @param {*} evt\r\n * @returns void\r\n */\r\n agreementTemplate(evt) {\r\n let template;\r\n const selectedTemplate = evt.target.getAttribute('data-template');\r\n\r\n switch (selectedTemplate) {\r\n case 'MachinePurchasingAgreement':\r\n template = {\r\n type: '12345AB',\r\n regx: /^\\d{5}\\w{2,}$/,\r\n msg: `${machineAgreementTranslation.agreementNumberFormat} 12345AB`,\r\n typeName: 'Avtalsnummer',\r\n };\r\n break;\r\n case 'MachineServiceAgreement':\r\n template = {\r\n type: 'ABCDE123XY4567890',\r\n regx: /^[A-HJ-NPR-Z0-9]{17}$/,\r\n msg: `${machineAgreementTranslation.agreementNumberFormat} ABCDE123XY4567890`,\r\n typeName: 'Vin-nummer',\r\n };\r\n\r\n break;\r\n default:\r\n template = {\r\n type: '12345AB',\r\n regx: /^\\d{5}\\w{2,}$/,\r\n msg: `${machineAgreementTranslation.agreementNumberFormat} 12345AB`,\r\n typeName: 'Avtalsnummer',\r\n };\r\n }\r\n\r\n document\r\n .getElementById('agreementTemplate')\r\n .setAttribute('data-selectedDataTemplate', template.type);\r\n document.getElementById('agreementNumber').value = '';\r\n document.getElementById('agreementNumber').setAttribute('placeholder', template.type);\r\n document.getElementById('agreementNumberFormat').innerHTML = `${template.typeName} (${template.type})`;\r\n document.getElementById('agreementNumber').classList.remove('disabled');\r\n document.querySelector('.btn_fileupload').classList.remove('disabled');\r\n\r\n this.validation.changeRegexRules(template);\r\n }\r\n}\r\n","import AgreementRepository from '../../../repositories/AgreementRepository';\r\nimport ExplosivePrecursorFormValidation from './ExplosivePrecursorFormValidation';\r\nimport ExplosivePrecursorReview from './ExplosivePrecursorReview';\r\nimport RecieverForm from '../shared/RecieverForm';\r\nimport BrowserSettings from '../../../helpers/BrowserSettings';\r\n/**\r\n * Explosive precursors Agreement form\r\n */\r\nexport default class ExplosivePrecursorForm {\r\n /**\r\n * Init\r\n */\r\n constructor() {\r\n // Prevents class being used outside of project scope to avoid errors\r\n if (document.getElementsByClassName('explosivePrecursors-agreement').length < 1) {\r\n return;\r\n }\r\n\r\n new ExplosivePrecursorReview();\r\n new RecieverForm('explosives');\r\n\r\n this.submitButton = document.querySelector('#submitExplosivePrecursorData');\r\n\r\n // Form Validation\r\n this.validation = new ExplosivePrecursorFormValidation();\r\n\r\n // Repository\r\n this.repository = new AgreementRepository('explosives');\r\n\r\n // Internal use - Reciever customer.\r\n // Fetch Reciever data & populate customer drop down\r\n this.receivers();\r\n\r\n // EventListerners\r\n this.initEventListeners();\r\n }\r\n\r\n /**\r\n * Init EventListnerners in form\r\n * @return void\r\n */\r\n initEventListeners() {\r\n this.eventListenerProducts();\r\n this.eventListenerDisabledFields();\r\n this.eventListenerFormItems({ queryElement: '.companyType', trigger: 'click' });\r\n this.eventListenerFormItems({ queryElement: '.explosiveForm', trigger: 'change' });\r\n\r\n // Save data to Api and trigger signing\r\n this.submitButton.addEventListener('click', this.submitExplosivePrecursorData);\r\n }\r\n\r\n /**\r\n * Submit explosive precursors\r\n * @return void\r\n */\r\n submitExplosivePrecursorData = () => {\r\n if (this.popupsIsBlocked()) {\r\n return;\r\n }\r\n\r\n this.repository.commonPostAgreementDataAsync(\r\n '/api/e-signing/agreements/explosive-precursors',\r\n 'explosivePrecursors'\r\n );\r\n };\r\n\r\n /**\r\n * EventListener - form\r\n * EventListener form fields\r\n * @params {*}\r\n * @return void\r\n */\r\n eventListenerFormItems(params) {\r\n for (let item of document.querySelectorAll(`${params.queryElement}`)) {\r\n item.addEventListener(\r\n `${params.trigger}`,\r\n () => {\r\n this.prepareValidation();\r\n },\r\n false\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * EventListener - If product is selected, unlock the form\r\n * EventListener product\r\n * @return void\r\n */\r\n eventListenerProducts() {\r\n for (let item of document.querySelectorAll('.lm__tick .explosivesProduct')) {\r\n item.addEventListener(\r\n 'click',\r\n () => {\r\n for (let xitem of document.querySelectorAll('.explosiveForm')) {\r\n xitem.classList.add('disabled');\r\n }\r\n\r\n if (document.querySelectorAll('.explosivesProduct:checked').length > 0) {\r\n for (let xitem of document.querySelectorAll('.explosiveForm')) {\r\n xitem.classList.remove('disabled');\r\n }\r\n\r\n document.querySelector('#errorProduct').classList.add('hidden');\r\n this.prepareValidation();\r\n } else {\r\n document.querySelector('#Step1Next').classList.add('disabled');\r\n }\r\n },\r\n false\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * EventListener - If no product is is selected\r\n * Show message if user click on form\r\n * Product error error message ()\r\n * @return void\r\n */\r\n eventListenerDisabledFields() {\r\n for (let item of document.querySelectorAll('.explosivesFormElements')) {\r\n item.addEventListener(\r\n 'click',\r\n () => {\r\n for (let item of document.querySelectorAll('.explosiveForm')) {\r\n if (item.classList.contains('disabled')) {\r\n document.querySelector('#errorProduct').classList.remove('hidden');\r\n }\r\n }\r\n },\r\n false\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * prepareValidation\r\n * If form is valid Enable or diable Next step button\r\n * @return void\r\n */\r\n prepareValidation() {\r\n let priority = [];\r\n document.querySelector('#Step1Next').classList.add('disabled');\r\n\r\n for (let prioItem of document.querySelectorAll('.validationPrio')) {\r\n if (prioItem.checked) {\r\n if (prioItem.classList.contains('explosivesProduct')) {\r\n priority.push('explosivesProduct');\r\n }\r\n\r\n if (prioItem.classList.contains('companyType')) {\r\n priority.push('companyType');\r\n }\r\n }\r\n }\r\n\r\n if (priority.includes('explosivesProduct') && priority.includes('companyType')) {\r\n this.validation.checkForm('form');\r\n }\r\n }\r\n\r\n /**\r\n * Internal site - Logic for Reciever form\r\n * @return void\r\n */\r\n receivers() {\r\n if (document.querySelector('#isInternal').value === 'true') {\r\n this.repository.fetchRecieverDataAsync(\r\n '/api/e-signing/get-receivers-for-digital-signing'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * @description Check if the browser alow popups\r\n */\r\n popupsIsBlocked() {\r\n const browser = new BrowserSettings();\r\n const isBlocked = browser.checkPopUpBlocker();\r\n\r\n if (isBlocked) {\r\n document.querySelector('#step1View').classList.add('hidden');\r\n document.querySelector('#step4View').classList.remove('hidden');\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n}\r\n","import AgreementRepository from '../../../repositories/AgreementRepository';\r\nimport DistillateFormValidation from './DistillateFormValidation';\r\nimport DistillateReview from './DistillateReview';\r\nimport RecieverForm from '../shared/RecieverForm';\r\n\r\n/**\r\n * Distillate Agreement form\r\n */\r\nexport default class DistillateForm {\r\n /**\r\n * Init\r\n */\r\n constructor() {\r\n // Prevents class being used outside of project scope to avoid errors\r\n if (document.getElementsByClassName('distillate-agreement').length < 1) {\r\n return;\r\n }\r\n\r\n new DistillateReview();\r\n new RecieverForm('distillate');\r\n\r\n this.submitButton = document.querySelector('#submitDistillateData');\r\n\r\n // Form Validation\r\n this.validation = new DistillateFormValidation();\r\n\r\n // Repository\r\n this.repository = new AgreementRepository('distillate');\r\n\r\n // Internal use - Reciever customer.\r\n // Fetch Reciever data & populate customer drop down\r\n this.recievers();\r\n\r\n // EventListerners\r\n this.initEventListerners();\r\n }\r\n\r\n /**\r\n * Init EventListnerners in form\r\n * @returns void\r\n */\r\n initEventListerners() {\r\n // Save data to Api and trigger signing\r\n this.submitButton.addEventListener('click', this.submitDistillateData);\r\n }\r\n\r\n /**\r\n * Submit explsovive precursors\r\n * @return void\r\n */\r\n submitDistillateData = () => {\r\n this.repository.commonPostAgreementDataAsync(\r\n '/api/e-signing/agreements/distillate',\r\n 'distillate'\r\n );\r\n };\r\n\r\n /**\r\n * Internal site - Logic for Reciever form\r\n * @returns void\r\n */\r\n recievers() {\r\n if (document.querySelector('#isInternal').value === 'true') {\r\n this.repository.fetchRecieverDataAsync('/api/e-signing/get-receivers-for-digital-signing');\r\n }\r\n }\r\n}\r\n","/**\r\n * ReOrder class for my orders\r\n */\r\nimport ReOrderRepository from '../../repositories/ReOrderRepository';\r\nexport default class ReOrder {\r\n constructor() {\r\n if (document.getElementsByClassName('lm2-js-my-orders').length < 1) return;\r\n\r\n this.orderHistoryObserver();\r\n this.repository = new ReOrderRepository();\r\n }\r\n\r\n /**\r\n * Mutation observer/Event listerners\r\n * Waiting for Order list to Load before\r\n * Adding event listerners to reorder buttons\r\n */\r\n orderHistoryObserver() {\r\n const observer = new MutationObserver((mutationList, observer) => {\r\n mutationList.forEach((mutation) => {\r\n if (mutation.type === 'childList') {\r\n for (let item of document.querySelectorAll('.re-order-item')) {\r\n item.addEventListener('click', (event) => {\r\n let payLoad = {};\r\n\r\n if (event.target.classList.contains('order-item-order')) {\r\n payLoad = {\r\n orderNumber: event.target.getAttribute('data-orderNr'),\r\n contentLinkId: event.target.getAttribute('data-contentlinkid')\r\n };\r\n }\r\n\r\n this.repository.getReorderDataAsJsonAsync(payLoad);\r\n });\r\n }\r\n }\r\n });\r\n });\r\n\r\n observer.observe(\r\n document.querySelector('#observeMyOrders'),\r\n {\r\n characterData: true,\r\n attributes: false,\r\n childList: true,\r\n subtree: true,\r\n },\r\n this.repository\r\n );\r\n }\r\n}\r\n","/**\r\n * Discount Administration Tool\r\n */\r\nimport Table from '../../components/table/Table';\r\nimport Routes from '../../helpers/Routes';\r\nimport DropDown from '../../components/dropdown/DropDown';\r\nimport DiscountToolRepository from '../../repositories/DiscountToolRepository';\r\nimport eventListenerProps from './json/eventListenerProps.json';\r\nimport tableProps from './json/tableProps.json';\r\nimport DiscountToolService from './DiscountToolService';\r\n\r\nexport default class DiscountTool {\r\n /**\r\n * @property {Object} DiscountToolService Save data methods\r\n * @property {Object} Table helper class\r\n * @property {Object} Routes helper class\r\n * @property {Object} DiscountToolRepository repository class\r\n * @property {Object} eventListenerProps json object with properties\r\n * @property {Object} tableProps json object with properties\r\n * @returns void\r\n */\r\n constructor() {\r\n if (document.getElementsByClassName('discount-tool').length < 1) return;\r\n\r\n this.table = new Table();\r\n this.routes = new Routes();\r\n this.repository = new DiscountToolRepository();\r\n this.service = new DiscountToolService();\r\n this.eventProps = eventListenerProps;\r\n this.tableProps = tableProps;\r\n\r\n this.initDropDowns();\r\n this.cellObserver();\r\n }\r\n\r\n /**\r\n * @description Initialize Drop downs\r\n * @returns void\r\n */\r\n initDropDowns() {\r\n new DropDown({\r\n table: this.table,\r\n tableProps: this.tableProps,\r\n routes: this.routes,\r\n repository: this.repository,\r\n eventProps: this.eventProps.dropdown,\r\n tableId: 'discountToolTable',\r\n initElement: 'productType',\r\n });\r\n }\r\n\r\n /**\r\n * @description Mutation observer for save icons\r\n * Waiting for user interaction and css classes to be set\r\n * Adding event listerners to cell icons\r\n * @returns void\r\n */\r\n cellObserver() {\r\n const observer = new MutationObserver((mutationList, observer) => {\r\n mutationList.forEach((mutation) => {\r\n if (mutation.attributeName === 'status') {\r\n if (\r\n document.querySelector('#discountToolTable').getAttribute('status') ===\r\n 'true'\r\n ) {\r\n for (let item of document.querySelectorAll('.saveInput')) {\r\n this.service.addSaveEventListener(item);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n\r\n observer.observe(\r\n document.querySelector('#discountToolTable'),\r\n {\r\n attributeFilter: ['status'],\r\n characterData: false,\r\n attributes: true,\r\n childList: false,\r\n subtree: true,\r\n },\r\n this.repository\r\n );\r\n }\r\n}\r\n","/**\r\n * Transport Auction\r\n */\r\nexport default class TransportAuction {\r\n constructor() {\r\n if (document.getElementsByClassName('dv__trp-auction').length < 1) {\r\n return;\r\n }\r\n \r\n this.changeLogoUrl();\r\n }\r\n\r\n /**\r\n * @description If transport page change URL for site logo\r\n */\r\n changeLogoUrl() {\r\n const url = document.querySelector('#transportAuctionRedirectUrl').value;\r\n const urlElement = document.querySelector('#lm2LogoUrl');\r\n\r\n if (url !== '') {\r\n urlElement.setAttribute('href', url);\r\n } \r\n }\r\n}\r\n"],"names":["FileUpload","constructor","__publicField","this","inputFieldId","self","document","getElementById","addEventListener","e","target","files","findContainer","closest","querySelector","fileNameContainer","getAttribute","innerHTML","classList","contains","int","length","createListElement","createElement","listelement","appendChild","fileSize","returnFileSize","size","name","number","toFixed","async","fileList","getDocument","file","reader","FileReader","Promise","resolve","onload","ev","fileContent","result","split","fileDoc","documentName","replace","documentType","type","readAsDataURL","promises","fileListInt","push","all","DateTime","addMonths","date","months","d","getDate","setMonth","getMonth","setDate","toLocaleString","slice","ExplosivePrecursorFormValidation","validationForm","validationReciever","$","validate","rules","customerName","required","pattern","customerAddress","minlength","customerZipCodeAndCity","customerOrganizationNumber","messages","explosivesTranslation","customerNameRequired","customerNamePattern","customerAddressRequired","customerAddressMinLength","customerZipCodeAndCityRequired","customerZipCodeAndCityPattern","customerOrganizationNumberRequired","customerOrganizationNumberPattern","submitHandler","checkForm","readyState","ready","steps","valid","querySelectorAll","remove","add","value","ReceiverPersonalNumber","ReceiverEmail","email","personalNumberRequired","personalNumberRegexPersonal","receiverEmailRequired","receiverEmailFormat","MachineAgrementFormValidation","template","validationMethods","agreementNumber","regex","machineAgreementTranslation","agreementNumberRequired","msg","agreementFile","validateFileTtype","agreementFileRequired","agreementFileValidateFileTtype","params","validator","methods","element","optional","regx","test","regexPersonal","addMethod","val","elem","id","fileIndex","fname","toLowerCase","exec","changeRegexRules","removeValidationRule","addValidationRule","ReceiverPhoneNumber","mobileRequired","mobilePattern","DistillateFormValidation","targetValue","distillateTranslation","LocalStorage","setItem","key","data","window","localStorage","JSON","stringify","getItem","parse","removeItem","getKey","index","QueryParams","getQueryParamsAsObject","location","search","indexOf","reduce","queryElements","splitQueryElements","Object","assign","objectKey","objectValue","decodeURIComponent","MachineAgreementReview","dateTime","validThroughDate","Date","toString","queryParams","query","actionsForWebSales","validation","storage","payload","getOwnPropertyNames","agreement","parentNode","recieverEventListerner","formItem","getElementsByClassName","storeData","fields","setPayloadByQueryParams","setRecieverFieldsFromInput","item","setCustomerByMarkup","innerText","preparePayLoad","payLoadData","keys","agreementName","isNaN","charAt","templateId","templateName","signingTemplateId","textContent","documents","pdfDocuments","input","doc","getPayload","ExplosivePrecursorReview","storageName","RecieverForm","formFields","InitEventListerners","step","attrKey","attrValue","fieldElementId","fieldElement","checked","selectedClass","reviewId","groupClass","nextSelectedClass","emailAddress","DistillateReview","listenFormInteraction","setDataFromInput","deliveryAddresses","reviewAddressData","forEach","checkbox","i","delivery","address","zipCity","validateNextStep","addressId","agreementType","dropDown","listItem","roles","RoleProfileName","cssClass","setAttribute","Email","Name","PersonalNumber","MobilePhoneNumber","setRecieverfieldsFromDropDown","initParentClasses","evt","style","display","signerFields","reciever","recieverFields","initEventListerners","classDefinition","hidePersonalDataField","parentDiv","concealPersonalData","reviewClass","attribute","payloadProp","customerNumber","AgreementType","Api","fetchData","endpoint","url","URLSearchParams","fetch","method","headers","then","response","json","status","body","catch","err","console","log","postData","error","AgreementSteps","setStepNavigation","siteType","init","elements","selector","view","proceed","back","selector1","view1","selctor2","view2","formElements","stepsViews","BrowserSettings","checkPopUpBlocker","newWindow","open","closed","isPopupBlocked","close","focus","AgreementRepository","api","recieverForm","setRecieverDropDown","loaderIcon","dialog","showLoading","removeLoading","prepareSigningAsync","showGenericErrorDialog","fileupload","getDocumentList","salesMan","Recipients","Signers","filter","x","IsSalesMan","salesManSigningUrl","SigningUrl","signingType","browserIsBlocked","newTab","ReOrderRepository","reDirectLink","TableElements","appendElements","icons","cell","addCellElements","elementType","dataId","tableIndex","cellData","tableProps","inputType","width","inputWidth","inputStep","stepValue","inputStepValue","initValue","rowIndex","columnIndex","prepareSave","deActivateElement","blur","activateElement","targetElement","resetInitValue","mode","icon","checkUndoValues","saveIcon","restoreElements","delayedReset","setTimeout","TableEvents","timer","editableInputListener","inputId","eventElements","elementClass","sharedEventHandler","handleUndoEvent","handleEvents","inputEventHandler","handleShared","bind","callbackKeyUp","handleKeyUp","callbackPressDown","handleKeyPressKeyDown","delayedTime","clearTimeout","DataParser","filterDataByKeys","inputData","jsonProps","mappedKeys","props","itemIndex","itemValue","entries","mergedData","concat","map","includes","Table","tableElements","tableEvents","dataParser","removeAllChildNodes","parent","firstChild","removeChild","addTableHead","tableId","headerFilter","headerData","tableRow","tableHeader","rowNumber","tableHeaderColumn","tableHeaderText","createTextNode","convertCamelCase","active","values","activeKeys","addTableBody","tableElement","bodyFilter","bodyData","row","insertRow","inputNullValue","dataKey","dataValue","insertCell","nullValue","settings","removeAttribute","updateTableCells","text","regReplaceText","toUpperCase","Routes","setRouteParameters","route","parameters","match","tempLiterals","substitution","substring","Dropdown","eventId","scope","repository","fetchDataAsync","routes","eventProps","targetElementType","setDropDownData","addTable","table","setListenerData","initElement","elementName","addListener","listener","event","getDropDownDataAsync","handleDropDownOnClick","parentItem","resetDropDowns","trim","reset","resetItem","listHref","Id","responseValidate","renderErrorMessage","DiscountToolRepository","errorMessage","responseBody","DiscountToolService","saveObject","setErrors","Value","saveDataAsync","save","errorState","discountTranslate","saveAll","postDataAsync","saveSingleRoute","saveAllRoute","moreChangesExist","eventListenerProps","saveAllDataEventHandler","saveDataEventHandler","initSaveAllEvents","prepareSaveAllInputs","addSaveEventListener","prepareSaveInput","postMachineAgreementDataAsync","fetchRecieverDataAsync","fileInputOnChange","agreementRegex","dispatchEvent","Event","agreementTemplate","click","submitMachineAgreementData","agreementNumberFormat","typeName","popupsIsBlocked","commonPostAgreementDataAsync","submitButton","receivers","initEventListeners","eventListenerProducts","eventListenerDisabledFields","eventListenerFormItems","queryElement","trigger","submitExplosivePrecursorData","prepareValidation","xitem","priority","prioItem","recievers","submitDistillateData","orderHistoryObserver","MutationObserver","mutationList","observer","mutation","payLoad","orderNumber","contentLinkId","getReorderDataAsJsonAsync","observe","characterData","attributes","childList","subtree","service","initDropDowns","cellObserver","DropDown","dropdown","attributeName","attributeFilter","changeLogoUrl","urlElement"],"mappings":"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"}