{"version":3,"file":"multiemployeeselector.min.js","mappings":"YAAA,MAAMA,CAAsB,CAC1B,YACEC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA,CACA,KAAK,gBAAkBL,EACvB,KAAK,gBAAkBC,EACvB,KAAK,WAAa,SAAS,eAAeD,CAAe,EACzD,KAAK,SAAWE,EAChB,KAAK,UAAYC,EACjB,KAAK,YAAcC,EACnB,KAAK,iBAAmBC,EAExB,KAAK,cAAgBF,EAAa,OAAS,EAC3C,KAAK,uBAAyB,SAAS,eACrC,6BAA6BH,CAAe,EAC9C,EACA,KAAK,gBAAkB,SAAS,eAC9B,qBAAqBA,CAAe,EACtC,EACA,KAAK,aAAe,SAAS,eAAe,WAAWA,CAAe,EAAE,CAC1E,CAEA,MAAO,CACL,KAAK,aAAa,EAClB,KAAK,iBAAiB,KAAK,SAAS,EACpC,IAAIM,EAAkB,EAAE,KAAK,eAAe,EAC5CA,EAAgB,GAAG,iBAAmBC,GAAM,CAC1C,MAAMC,EAASD,EAAE,OAAO,KAAK,QAC7B,KAAK,uBAAuBC,EAAO,QAAQ,eAAgBA,EAAO,QAAQ,YAAaA,EAAO,EAAE,CAClG,CAAC,EACDF,EAAgB,GAAG,SAAWC,GAAM,CAClC,KAAK,WAAW,EAChB,KAAK,UAAU,CACjB,CAAC,EACD,KAAK,aAAa,iBAAiB,QAAUA,GAAM,CACjDA,EAAE,eAAe,EACjB,KAAK,YAAY,CACnB,CAAC,EACD,KAAK,wBAAwB,CAC/B,CACA,iBAAiBE,EAAW,CAC1BA,EAAU,QAAQ,CAACC,EAAUC,IAAU,CACrC,MAAMC,EAAW,GAAG,KAAK,eAAe,IAAID,CAAK,GAC3CE,EAAa,GAAG,KAAK,sBAAsB,IAAIF,CAAK,GACpDG,EAAiBJ,EAAS,eAC1BK,EAAcL,EAAS,YACvBM,EAAU,GAAGN,EAAS,IAAI,KAAKI,CAAc,IAEnD,IAAIN,EAAS,IAAI,OAAOQ,EAASL,CAAK,EACtCH,EAAO,GAAKI,EACZJ,EAAO,aAAa,OAAQK,CAAU,EACtCL,EAAO,aAAa,sBAAuBM,CAAc,EACzDN,EAAO,aAAa,mBAAoBO,CAAW,EAEnD,KAAK,gBAAgB,IAAIP,CAAM,CACjC,CAAC,EACqB,EAAE,KAAK,eAAe,EAC5B,QAAQ,CACtB,eAAiBS,GAAS,EAAEA,EAAK,OAAO,EAAE,KAAK,EAC/C,kBAAoBA,GAAS,EAAEA,EAAK,OAAO,EAAE,KAAK,EAClD,YAAa,KAAK,YAClB,WAAY,GACZ,MAAO,MACT,CAAC,CACH,CACA,yBAAyB,CACvB,KAAK,WAAW,iBAAiB,mBAAqBC,GAAU,CAC9DA,EAAM,OAAO,aAAe,EAAE,KAAK,eAAe,EAAE,QAAQ,MAAM,EAAE,KAAKC,GAAQ,CAACA,EAAK,QAAQ,CACjG,CAAC,EACD,KAAK,WAAW,iBAAiB,iBAAmBD,GAAU,CAC5D,MAAM,mBAAmBA,EAAM,OAAO,OAAO,IAAIA,EAAM,OAAO,WAAW,aAAc,CACrF,OAAQ,MACR,QAAS,CACP,eAAgB,kBAClB,CACF,CAAC,EACE,KAAKE,GAAYA,EAAS,KAAK,CAAC,EAChC,KAAKH,GAAQ,CACZ,KAAK,UAAYA,EACjB,KAAK,cAAgBA,EAAK,OAAS,EACnC,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,iBAAiBA,CAAI,CAC5B,CAAC,EACA,MAAOI,GAAU,CAChB,QAAQ,MAAM,SAAUA,CAAK,CAC/B,CAAC,CACL,CAAC,CACH,CACA,eAAgB,CAGd,IAFA,KAAK,WAAW,MAAQ,GACxB,SAAS,eAAe,WAAW,KAAK,eAAe,EAAE,EAAE,UAAY,GAChE,KAAK,gBAAgB,QAAQ,OAAS,GAC3C,KAAK,gBAAgB,OAAO,CAAC,CAEjC,CACA,WAAY,CACV,IAAIC,EAAS,GACb,EAAE,KAAK,eAAe,EACnB,IAAI,EACJ,QAASX,GAAU,CAElB,IAAIY,EAAY,SAAS,eACvB,GAAG,KAAK,eAAe,IAAIZ,CAAK,SAClC,EACA,GAAIY,GAAaA,EAAU,UAAU,SAAS,eAAe,EAAG,CAE9D,IAAIC,EAASD,EAAU,iBAAiB,OAAO,EAE3CE,EAAQ,GAAGd,CAAK,IACpBa,EAAO,QAAQ,SAAUE,EAAO,CAE9BD,GAASC,EAAM,MAAQ,GACzB,CAAC,EAEDJ,GAAUG,EAAM,MAAM,EAAG,EAAE,EAAI,GACjC,CACF,CAAC,EACH,KAAK,WAAW,MAAQH,EAAO,MAAM,EAAG,EAAE,CAC5C,CACA,cAAc,CAEZ,KAAK,uBAAuB,UAAY,GACxC,KAAK,UAAU,QAAQ,CAACZ,EAAUC,IAAU,CAC1C,MAAMgB,EAAUjB,EAAS,MAAQA,EAAS,MAAQ,GAC5CkB,EAAoBlB,EAAS,gBAAkBA,EAAS,gBAAkB,GAC1EmB,EAAO,KAAK,SACf,QAAQ,gBAAiB,GAAG,KAAK,eAAe,IAAIlB,CAAK,EAAE,EAC3D,QAAQ,kBAAmB,GAAG,KAAK,eAAe,IAAIA,CAAK,EAAE,EAC7D,QAAQ,YAAaD,EAAS,IAAI,EAClC,QAAQ,sBAAuBA,EAAS,cAAc,EACtD,QAAQ,mBAAoBA,EAAS,WAAW,EAChD,QAAQ,sBAAuBiB,EAAU,oBAAsB,EAAE,EACjE,QAAQ,gCAAiCC,EAAoB,oBAAsB,EAAE,EACrF,QAAQ,oBAAqBD,EAAU,WAAa,EAAE,EACtD,QAAQ,8BAA+BC,EAAoB,WAAa,EAAE,EAE7E,KAAK,uBAAuB,mBAAmB,YAAaC,CAAI,EAChE,KAAK,cAAc,CACrB,CAAC,CACH,CACA,YAAa,CACX,IAAIC,EAAW,EAAE,KAAK,eAAe,EAAE,IAAI,EAC3C,MAAMC,EAAY,MAAM,KAAK,KAAK,gBAAgB,OAAO,EAAE,IACxDvB,GAAWA,EAAO,KACrB,EACA,IAAIwB,EAAU,EACdD,EAAU,QAASpB,GAAU,CAC3B,MAAMC,EAAW,GAAG,KAAK,eAAe,IAAID,CAAK,GAC3CsB,EAAc,GAAGrB,CAAQ,UACzBsB,EAAW,SAAS,eAAeD,CAAW,EAC9CE,EAAaL,EAAS,SAASnB,CAAK,EAQ1C,GANMwB,EACJD,EAAS,UAAU,OAAO,QAAQ,EAElCA,EAAS,UAAU,IAAI,QAAQ,EAG3BC,EAAY,CAChB,MAAMzB,EAAW,KAAK,UAAUC,CAAK,EACrC,IAAIyB,EAAU,SAAS,eAAe,GAAGxB,CAAQ,UAAU,EAC3DwB,EAAQ,QAAQ,MAAQJ,EACxBI,EAAQ,UAAY,GAAGJ,CAAO,KAAKtB,GAAU,MAAQ0B,EAAQ,QAAQ,MAAQ,KAAK,gBAAgB,GAElG,SAAS,eAAe,WAAW,KAAK,eAAe,EAAE,EAAE,UAAY,IAAIJ,CAAO,IAClFA,IACItB,GAAY,MACd,KAAK,uBAAuBA,EAAS,eAAgBA,EAAS,YAAaE,CAAQ,CAEvF,CACF,CAAC,CACH,CACA,uBAAuBE,EAAgBC,EAAaH,EAAU,CAC5D,EAAE,KAAK,CACL,IAAK,oBAAoBE,CAAc,IAAIC,CAAW,QACtD,OAAQ,MACR,QAAS,SAAUE,EAAM,CACvB,MAAMoB,EAAa,SAAS,eAAe,GAAGzB,CAAQ,QAAQ,EACxD0B,EAAa,SAAS,eAAe,GAAG1B,CAAQ,QAAQ,EAC1DK,GAAQ,OACNoB,GAAgBpB,EAAK,OAAO,KAAK,IACnCoB,EAAW,MAAQpB,EAAK,MACxBoB,EAAW,SAAW,IAEpBC,GAAgBrB,EAAK,OAAO,KAAK,IACnCqB,EAAW,MAAQrB,EAAK,MACxBqB,EAAW,SAAW,IAG5B,EACA,MAAO,SAAUjB,EAAO,CACtB,QAAQ,MAAM,wBAAyBA,CAAK,CAC9C,CACF,CAAC,CACH,CACA,aAAc,CACZ,KAAK,gBACL,MAAMT,EAAW,GAAG,KAAK,eAAe,IAAI,KAAK,aAAa,GACxDC,EAAa,GAAG,KAAK,eAAe,IAAI,KAAK,aAAa,GAC1DL,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,KAAO,KAAK,iBACnBA,EAAO,MAAQ,KAAK,cACpBA,EAAO,GAAKI,EACZJ,EAAO,KAAOK,EACdL,EAAO,SAAW,GAClB,KAAK,gBAAgB,QAAQA,CAAM,EACnC,MAAMqB,EAAO,KAAK,SACf,QAAQ,gBAAiBjB,CAAQ,EACjC,QAAQ,kBAAmBC,CAAU,EACrC,QAAQ,YAAa,EAAE,EACvB,QAAQ,sBAAuB,EAAE,EACjC,QAAQ,mBAAoB,EAAE,EAC9B,QAAQ,sBAAuB,EAAE,EACjC,QAAQ,gCAAiC,EAAE,EAC3C,QAAQ,oBAAqB,EAAE,EAC/B,QAAQ,8BAA+B,EAAE,EAE5C,KAAK,uBAAuB,mBAAmB,aAAcgB,CAAI,EACjE,KAAK,cAAc,EAEnB,MAAMU,EAAY,SAAS,eAAe,GAAG3B,CAAQ,OAAO,EACtD4B,EAAsB,SAAS,eACnC,GAAG5B,CAAQ,iBACb,EACM6B,EAAe,SAAS,eAAe,GAAG7B,CAAQ,UAAU,EAE5D8B,EAAiB9B,GAAa,CAClC,MAAM+B,EAAOJ,EAAU,MAAM,KAAK,EAC5BzB,EAAiB0B,EAAoB,MAAM,KAAK,EAEtDC,EAAa,QAAQ,KAASE,GAAc,KAAK,iBACjD,MAAMC,EAAe9B,EACjB,GAAG6B,CAAI,KAAK7B,CAAc,IAC1B6B,EACJnC,EAAO,KAASoC,GAA0B,KAAK,iBAC/C,EAAE,KAAK,eAAe,EAAE,QAAQ,QAAQ,CAC1C,EAGAL,EAAU,iBAAiB,QAASG,CAAa,EACjDF,EAAoB,iBAAiB,QAASE,CAAa,EAC3D,KAAK,WAAW,EAChB,KAAK,UAAU,CACjB,CACA,eAAgB,CACd,SAAS,iBAAiB,sBAAsB,EAAE,QAAShB,GAAU,CACnEA,EAAM,iBAAiB,OAASnB,GAAM,CACpC,MAAMsC,EAAStC,EAAE,OACXkB,EAAQoB,EAAO,MACfF,EAAOE,EAAO,KAEdC,EAAWrB,EAAM,KAAK,EAAE,SAAW,EACzC,IAAIsB,EAAoB,SAAS,eAAe,GAAGJ,CAAI,OAAO,EAC1DI,GAAqB,OACnBD,EACFC,EAAkB,MAAM,YAAY,UAAW,OAAQ,WAAW,EAElEA,EAAkB,MAAM,YACtB,UACA,QACA,WACF,GAGJ,KAAK,UAAU,CACjB,CAAC,CACH,CAAC,CACH,CACF,CAEA,OAAO,gBAAkB,CACvB,GAAG,OAAO,gBACV,sBAAAhD,CACF,C","sources":["webpack://falck.frontend/./src/components/multiemployeeselector.js"],"sourcesContent":["class MultiEmployeeSelector {\n constructor(\n formElementGuid,\n formElementName,\n template,\n employeeData,\n placeholderText,\n newEmployeeLabel\n ) {\n this.formElementGuid = formElementGuid;\n this.formElementName = formElementName;\n this.valueInput = document.getElementById(formElementGuid);\n this.template = template;\n this.employees = employeeData;\n this.placeholder = placeholderText;\n this.newEmployeeLabel = newEmployeeLabel;\n\n this.employeeCount = employeeData.length - 1;\n this.employeeInputContainer = document.getElementById(\n `employee-inputs-container-${formElementGuid}`\n );\n this.selectorElement = document.getElementById(\n `employee-dropdown-${formElementGuid}`\n );\n this.addNewButton = document.getElementById(`add-new-${formElementGuid}`);\n }\n\n load() {\n this.renderInputs();\n this.populateSelector(this.employees);\n let selectContainer = $(this.selectorElement);\n selectContainer.on(\"select2:select\", (e) => {\n const option = e.params.data.element;\n this.setExtraEmploymentData(option.dataset.personalNumber, option.dataset.countryCode, option.id);\n });\n selectContainer.on(\"change\", (e) => {\n this.showInputs();\n this.setValues();\n });\n this.addNewButton.addEventListener(\"click\", (e) => {\n e.preventDefault();\n this.addEmployee();\n });\n this.addReloadEventListeners();\n }\n populateSelector(employees) {\n employees.forEach((employee, index) => {\n const choiceId = `${this.formElementGuid}_${index}`;\n const choiceName = `${this.formElementElementName}_${index}`;\n const personalNumber = employee.personalNumber;\n const countryCode = employee.countryCode;\n const caption = `${employee.name} (${personalNumber})`;\n\n var option = new Option(caption, index);\n option.id = choiceId;\n option.setAttribute('name', choiceName);\n option.setAttribute('data-personalNumber', personalNumber);\n option.setAttribute('data-countryCode', countryCode);\n\n this.selectorElement.add(option);\n });\n let selectContainer = $(this.selectorElement);\n selectContainer.select2({\n templateResult: (data) => $(data.element).text(),\n templateSelection: (data) => $(data.element).text(),\n placeholder: this.placeholder,\n allowClear: true,\n width: '100%'\n });\n }\n addReloadEventListeners(){\n this.valueInput.addEventListener('OnCheckSelection', (event) => {\n event.detail.hasSelection = $(this.selectorElement).select2('data').some(item => !item.disabled);\n });\n this.valueInput.addEventListener('OnRepopulation', (event) => {\n fetch(`/api/km/manager/${event.detail.manager}/${event.detail.countryCode}/employees`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n })\n .then(response => response.json())\n .then(data => {\n this.employees = data;\n this.employeeCount = data.length - 1;\n this.clearSelected();\n this.renderInputs();\n this.populateSelector(data);\n })\n .catch((error) => {\n console.error('Error:', error);\n });\n });\n } \n clearSelected() {\n this.valueInput.value = \"\"; \n document.getElementById(`counter_${this.formElementGuid}`).innerHTML = '';\n while (this.selectorElement.options.length > 0) {\n this.selectorElement.remove(0);\n }\n }\n setValues() {\n let values = \"\";\n $(this.selectorElement)\n .val() // Taking selected values\n .forEach((index) => {\n // get containing div\n let inputsDiv = document.getElementById(\n `${this.formElementGuid}_${index}_inputs`\n );\n if (inputsDiv && inputsDiv.classList.contains(\"manual-inputs\")) {\n // get all inputs\n let inputs = inputsDiv.querySelectorAll(\"input\");\n // create value string starting with the index\n let value = `${index};`;\n inputs.forEach(function (input) {\n // append each input value in the container to the value string\n value += input.value + \";\";\n });\n // add delimited to value collection representing each selected input container\n values += value.slice(0, -1) + \"|\";\n }\n });\n this.valueInput.value = values.slice(0, -1);\n }\n renderInputs(){ \n // Render existing employees\n this.employeeInputContainer.innerHTML = \"\";\n this.employees.forEach((employee, index) => {\n const hasName = employee.name && employee.name != '';\n const hasPersonalNumber = employee.personalNumber && employee.personalNumber != '';\n const html = this.template\n .replace(/{{choiceId}}/g, `${this.formElementGuid}_${index}`)\n .replace(/{{choiceName}}/g, `${this.formElementName}_${index}`)\n .replace(/{{name}}/g, employee.name)\n .replace(/{{personalNumber}}/g, employee.personalNumber)\n .replace(/{{countryCode}}/g, employee.countryCode)\n .replace(/{{nameValidation}}/g, hasName ? \"ValidationSuccess\" : \"\")\n .replace(/{{personalNumberValidation}}/g, hasPersonalNumber ? \"ValidationSuccess\" : \"\")\n .replace(/{{nameReadOnly}}/g, hasName ? \"readonly\" : \"\")\n .replace(/{{personalNumberReadOnly}}/g, hasPersonalNumber ? \"readonly\" : \"\");\n\n this.employeeInputContainer.insertAdjacentHTML(\"beforeend\", html);\n this.addValidation();\n });\n }\n showInputs() {\n var selected = $(this.selectorElement).val();\n const allValues = Array.from(this.selectorElement.options).map(\n (option) => option.value\n );\n let counter = 1;\n allValues.forEach((index) => {\n const choiceId = `${this.formElementGuid}_${index}`;\n const inputsDivId = `${choiceId}_inputs`;\n const inputDiv = document.getElementById(inputsDivId);\n const isSelected = selected.includes(index);\n\n if (!!isSelected) {\n inputDiv.classList.remove(\"hidden\");\n } else {\n inputDiv.classList.add(\"hidden\");\n }\n\n if (!!isSelected) { // Set heading of selected heading and update counter\n const employee = this.employees[index];\n let heading = document.getElementById(`${choiceId}_heading`);\n heading.dataset.index = counter;\n heading.innerHTML = `${counter}. ${employee?.name ?? heading.dataset.name ?? this.newEmployeeLabel}`;\n\n document.getElementById(`counter_${this.formElementGuid}`).innerHTML = `(${counter})`;\n counter++;\n if (employee != null) {\n this.setExtraEmploymentData(employee.personalNumber, employee.countryCode, choiceId);\n }\n }\n });\n }\n setExtraEmploymentData(personalNumber, countryCode, choiceId) {\n $.ajax({\n url: `/api/km/employee/${personalNumber}/${countryCode}/info`,\n method: \"GET\",\n success: function (data) {\n const emailInput = document.getElementById(`${choiceId}_email`);\n const phoneInput = document.getElementById(`${choiceId}_phone`);\n if (data != null) {\n if (emailInput && !!data.email?.trim()) {\n emailInput.value = data.email;\n emailInput.disabled = true;\n }\n if (phoneInput && !!data.phone?.trim()) {\n phoneInput.value = data.phone;\n phoneInput.disabled = true;\n }\n }\n },\n error: function (error) {\n console.error(\"Error fetching email:\", error);\n },\n });\n }\n addEmployee() {\n this.employeeCount++;\n const choiceId = `${this.formElementGuid}_${this.employeeCount}`;\n const choiceName = `${this.formElementName}_${this.employeeCount}`;\n const option = document.createElement(\"option\");\n option.text = this.newEmployeeLabel;\n option.value = this.employeeCount;\n option.id = choiceId;\n option.name = choiceName;\n option.selected = true;\n this.selectorElement.prepend(option);\n const html = this.template\n .replace(/{{choiceId}}/g, choiceId)\n .replace(/{{choiceName}}/g, choiceName)\n .replace(/{{name}}/g, \"\")\n .replace(/{{personalNumber}}/g, \"\")\n .replace(/{{countryCode}}/g, \"\")\n .replace(/{{nameValidation}}/g, \"\")\n .replace(/{{personalNumberValidation}}/g, \"\")\n .replace(/{{nameReadOnly}}/g, \"\")\n .replace(/{{personalNumberReadOnly}}/g, \"\");\n\n this.employeeInputContainer.insertAdjacentHTML(\"afterbegin\", html);\n this.addValidation();\n\n const nameInput = document.getElementById(`${choiceId}_name`);\n const personalNumberInput = document.getElementById(\n `${choiceId}_personalNumber`\n );\n const headingInput = document.getElementById(`${choiceId}_heading`);\n // Function to update the heading\n const updateHeading = (choiceId) => {\n const name = nameInput.value.trim();\n const personalNumber = personalNumberInput.value.trim();\n // Will be used in showInputs to se the actual text\n headingInput.dataset.name = !!name ? name : this.newEmployeeLabel;\n const optionText = !!personalNumber\n ? `${name} (${personalNumber})`\n : name;\n option.text = !!optionText ? optionText : this.newEmployeeLabel;\n $(this.selectorElement).trigger(\"change\");\n };\n\n // Add event listeners to inputs\n nameInput.addEventListener(\"input\", updateHeading);\n personalNumberInput.addEventListener(\"input\", updateHeading);\n this.showInputs();\n this.setValues();\n }\n addValidation() {\n document.querySelectorAll(\".manual-inputs input\").forEach((input) => {\n input.addEventListener(\"blur\", (e) => {\n const target = e.target;\n const value = target.value;\n const name = target.name;\n\n const hasValue = value.trim().length !== 0;\n let validationElement = document.getElementById(`${name}_desc`);\n if (validationElement != null) {\n if (hasValue) {\n validationElement.style.setProperty(\"display\", \"none\", \"important\");\n } else {\n validationElement.style.setProperty(\n \"display\",\n \"block\",\n \"important\"\n );\n }\n }\n this.setValues();\n });\n });\n }\n}\n\nwindow.FalckComponents = {\n ...window.FalckComponents,\n MultiEmployeeSelector: MultiEmployeeSelector,\n};\n"],"names":["MultiEmployeeSelector","formElementGuid","formElementName","template","employeeData","placeholderText","newEmployeeLabel","selectContainer","e","option","employees","employee","index","choiceId","choiceName","personalNumber","countryCode","caption","data","event","item","response","error","values","inputsDiv","inputs","value","input","hasName","hasPersonalNumber","html","selected","allValues","counter","inputsDivId","inputDiv","isSelected","heading","emailInput","phoneInput","nameInput","personalNumberInput","headingInput","updateHeading","name","optionText","target","hasValue","validationElement"],"sourceRoot":""}