{"version":3,"names":["stringIsEmpty","str","trim","length","stringContains","search","indexOf","arrayIsEmpty","anArray","stringIsTrue","stringVal","compareVal","toLowerCase","isEventForComponent","event","searchTerm","targets","composedPath","target","isInComponent","forEach","elem","_a","id","createSpacerSpan","cssClass","spaceSpan","document","createElement","className","innerHTML","openSlideOut","slideOutTitle","checkIsOpen","slideOut","querySelector","slideoutTitle","isOpen","closeSlideOut","fireReload","preventDefault","stopPropagation","reloadData","emptySlideOut","getElementById","appendToSlideOut","html","evt","createEvent","initEvent","window","dispatchEvent","findAndConvertColumnToMenutItem","colList","colName","undefined","colDef","find","col","name","label","_b","menuText","headerText","value","optionsEndpoint","filterType","buildFormData","form","filter","data","item","elements","len","idx","oElement","oDisabled","disabled","oName","postIfDisabled","getAttribute","encodeURIComponent","oValue","type","selectedIndex","opt","options","attributes","specified","text","j","jlen","selected","checked","join","formToJsonBody","formToFormData","FormData","isPropertyInError","errorProperties","propertyName","some","showAudit","modelType","module","Dialog","newDialog"],"sources":["src/utils/utils.ts"],"sourcesContent":["//-----------------------------------------------------------------------\r\n// <copyright company=\"Paladin\">\r\n//     Copyright (c) Paladin Data Systems 2024. All rights reserved.\r\n// </copyright>\r\n//-----------------------------------------------------------------------\r\n\r\nimport { DataListColumn, MenuItem } from \"../system/Types\";\r\n\r\n/**\r\n * Returns true if string parameter is null or contains no characters, false otherwise.\r\n */\r\nexport function stringIsEmpty(str: string) {\r\n  return !str || str.trim().length === 0;\r\n}\r\n\r\n/**\r\n * Helper function to determine if the given string contains the\r\n * given search string.\r\n * @param str The string to search\r\n * @param search The string to search for.\r\n * @returns\r\n */\r\nexport function stringContains(str: string, search: string) {\r\n  if (stringIsEmpty(str)) {\r\n    return false;\r\n  }\r\n\r\n  return str.indexOf(search) > -1;\r\n}\r\n\r\n/**\r\n * Returns true if passed in array is null or empty, false otherwise.\r\n */\r\nexport function arrayIsEmpty(anArray: any[]) {\r\n  return !anArray || anArray.length === 0;\r\n}\r\n\r\n/**\r\n * Utility function to convert the given string value to a boolean\r\n * @param stringVal\r\n * @returns true if stringValue is equal to (ignoring case) \"y\", or \"1\", or \"true\", or \"on\".\r\n * Otherwise returns false\r\n */\r\nexport function stringIsTrue(stringVal: string): boolean {\r\n  if (stringIsEmpty(stringVal)) {\r\n    return false;\r\n  }\r\n\r\n  const compareVal = stringVal.toLowerCase();\r\n\r\n  return compareVal === \"y\" || compareVal === \"1\" || compareVal === \"on\" || compareVal === \"true\";\r\n}\r\n\r\n/**\r\n * Utility function to determine if the given event contains the given search term\r\n * @param event\r\n * @param searchTerm\r\n * @returns\r\n */\r\nexport function isEventForComponent(event: Event, searchTerm: string): boolean {\r\n  const targets: any[] = event.composedPath().length ? event.composedPath() : [event.target];\r\n  let isInComponent = false;\r\n  targets.forEach(target => {\r\n    const elem = target as HTMLElement;\r\n    if (elem && elem.id?.toLowerCase().indexOf(searchTerm) > -1) {\r\n      isInComponent = true;\r\n      return;\r\n    }\r\n  });\r\n\r\n  return isInComponent;\r\n}\r\n\r\n/**\r\n  * Helper function to create an empty span to space out buttons.\r\n  * @returns\r\n  */\r\nexport function createSpacerSpan(cssClass: string): HTMLSpanElement {\r\n  const spaceSpan = document.createElement(\"span\");\r\n  spaceSpan.className = cssClass;\r\n  spaceSpan.innerHTML = \"&nbsp\";\r\n\r\n  return spaceSpan;\r\n}\r\n\r\n/**\r\n * Helper function to open the slideout component\r\n * @param slideOutTitle\r\n * @param checkIsOpen\r\n * @returns\r\n */\r\nexport function openSlideOut (slideOutTitle, checkIsOpen) {\r\n  const slideOut = document.querySelector(\"sg-slideout\") as HTMLSgSlideoutElement;\r\n  slideOut.slideoutTitle = slideOutTitle;\r\n  if (checkIsOpen && slideOut.isOpen) {\r\n    return;\r\n  }\r\n\r\n  slideOut.isOpen = true;\r\n}\r\n\r\n/**\r\n * Helper function to close the slideout component\r\n * @param fireReload\r\n */\r\nexport function closeSlideOut(fireReload?: boolean, event?: Event) {\r\n  if (event) {\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n\r\n  }\r\n  const slideOut = document.querySelector(\"sg-slideout\") as HTMLSgSlideoutElement;\r\n\r\n  slideOut.isOpen = false;\r\n\r\n  if (fireReload) {\r\n    reloadData();\r\n  }\r\n\r\n  emptySlideOut();\r\n}\r\n\r\n/**\r\n * Helper function to clear all html from the slideout component.\r\n */\r\nexport function  emptySlideOut() {\r\n  document.getElementById(\"slide-out-content\").innerHTML = '';\r\n  document.getElementById(\"slide-out-actions\").innerHTML = '';\r\n}\r\n\r\n/**\r\n * Helper function to append the given html to the content\r\n * section of the slideout\r\n * @param element\r\n */\r\nexport function appendToSlideOut(html: any) {\r\n  document.getElementById(\"slide-out-content\").innerHTML = html;\r\n}\r\n\r\n/**\r\n * Helper function to fire off an event that will trigger\r\n * a reload of the ajax-datalist component.\r\n */\r\nexport function reloadData() {\r\n  var evt = document.createEvent(\"Events\");\r\n  evt.initEvent(\"reloadEvent\", true, true);\r\n  window.dispatchEvent(evt);\r\n}\r\n\r\n/**\r\n * function to determine if the given list has a DataListColumn with the given name and if so\r\n * then convert it to a MenuItem.\r\n * Will return undefined if any of the parameters are not set or if a DataListColumn can not be found.\r\n */\r\nexport function findAndConvertColumnToMenutItem(colList: DataListColumn[], colName: string): MenuItem {\r\n  if (!colList || !colList.length || !colName) {\r\n    return undefined;\r\n  }\r\n\r\n  const colDef = colList.find(col => col.name === colName);\r\n\r\n  if (!colDef) {\r\n    return undefined;\r\n  }\r\n\r\n  return {\r\n    label: colDef.menuText ?? colDef.headerText ?? colDef.name,\r\n    value: colDef.name,\r\n    optionsEndpoint: colDef.optionsEndpoint,\r\n    filterType: colDef.filterType\r\n  }\r\n}\r\n\r\n/**\r\n * Converts the inputs in the given form to a standard\r\n * URL query string.\r\n */\r\nexport function buildFormData(form, filter?) {\r\n  const data: string[] = [];\r\n  let item = 0;\r\n  if (form && form.elements) {\r\n    const len = form.elements.length;\r\n    for (let idx = 0; idx < len; ++idx) {\r\n      const oElement = form.elements[idx];\r\n      const oDisabled = oElement.disabled;\r\n      let oName: string = oElement.name;\r\n\r\n      const postIfDisabled = \"true\" === oElement.getAttribute(\"data-postIfDisabled\");\r\n\r\n      // Do not submit fields that are disabled or\r\n      // do not have a name attribute value.\r\n      if ((!oDisabled || postIfDisabled) && oName) {\r\n        if (filter && !filter(oElement)) {\r\n          continue;\r\n        }\r\n\r\n        oName = `${encodeURIComponent(oName)}=`;\r\n        const oValue: string = encodeURIComponent(oElement.value);\r\n\r\n        switch (oElement.type) {\r\n          // Safari, Opera, FF all default opt.value from .text if  \r\n          // value attribute not specified in markup  \r\n        case 'select-one':\r\n          if (oElement.selectedIndex > -1) {\r\n            const opt = oElement.options[oElement.selectedIndex];\r\n            data[item++] =\r\n              oName +\r\n              encodeURIComponent((opt.attributes.value && opt.attributes.value.specified) ? opt.value : opt.text);\r\n          }\r\n          break;\r\n        case 'select-multiple':\r\n          if (oElement.selectedIndex > -1) {\r\n            for (let j = oElement.selectedIndex, jlen = oElement.options.length; j < jlen; ++j) {\r\n              const opt = oElement.options[j];\r\n              if (opt.selected) {\r\n                data[item++] = oName +\r\n                  encodeURIComponent(\r\n                    (opt.attributes.value && opt.attributes.value.specified) ? opt.value : opt.text);\r\n              }\r\n            }\r\n          }\r\n          break;\r\n        case 'radio':\r\n        case 'checkbox':\r\n          if (oElement.checked) {\r\n            data[item++] = `${oName}Y`;\r\n          }\r\n          break;\r\n        case 'file':\r\n        case undefined:\r\n        case 'reset':\r\n        case 'button':\r\n        case 'submit':\r\n          break;\r\n        default:\r\n          data[item++] = oName + oValue;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  return data.join(\"&\");\r\n}\r\n\r\n/**\r\n * Converts the inputs of the given form to a json object.\r\n * @param form\r\n * @param filter\r\n * @returns\r\n */\r\nexport function formToJsonBody(form, filter?) {\r\n  const data:any = {}\r\n  if (form && form.elements) {\r\n    const len = form.elements.length;\r\n    for (let idx = 0; idx < len; ++idx) {\r\n      const oElement = form.elements[idx];\r\n      const oDisabled = oElement.disabled;\r\n      let oName: string = oElement.id;\r\n\r\n      const postIfDisabled = \"true\" === oElement.getAttribute(\"data-postIfDisabled\");\r\n\r\n      // Do not submit fields that are disabled or\r\n      // do not have a name attribute value.\r\n      if ((!oDisabled || postIfDisabled) && oName) {\r\n        if (filter && !filter(oElement)) {\r\n          continue;\r\n        }\r\n        \r\n        const oValue: string = oElement.value;\r\n\r\n        switch (oElement.type) {\r\n          // Safari, Opera, FF all default opt.value from .text if  \r\n          // value attribute not specified in markup  \r\n          case 'select-one':\r\n            if (oElement.selectedIndex > -1) {\r\n              const opt = oElement.options[oElement.selectedIndex];\r\n              data[oName] = (opt.attributes.value && opt.attributes.value.specified) ? opt.value : opt.text;\r\n            }\r\n            break;\r\n          case 'select-multiple':\r\n            if (oElement.selectedIndex > -1) {\r\n              for (let j = oElement.selectedIndex, jlen = oElement.options.length; j < jlen; ++j) {\r\n                const opt = oElement.options[j];\r\n                if (opt.selected) {\r\n                  data[oName] = opt.attributes.value && opt.attributes.value.specified ? opt.value : opt.text;\r\n                }\r\n              }\r\n            }\r\n            break;\r\n          case 'radio':\r\n          case 'checkbox':\r\n            data[oName] = oElement.checked ? true: false\r\n            break;\r\n          case 'file':\r\n          case undefined:\r\n          case 'reset':\r\n          case 'button':\r\n          case 'submit':\r\n            break;\r\n          default:\r\n            data[oName] = oValue;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  return data;\r\n}\r\n\r\n/**\r\n * Converts the inputs on the given form to a form data object for serialization.\r\n * @param form\r\n * @returns\r\n */\r\nexport function formToFormData(form) : FormData {\r\n  return form ? new FormData(form) : undefined;\r\n}\r\n\r\n/**\r\n* Return true/false to indicate a property is in error\r\n* @param propertyName\r\n* @returns\r\n*/\r\nexport function isPropertyInError(errorProperties: string[], propertyName: string) {\r\n  if (!arrayIsEmpty(errorProperties) && errorProperties.some(item => item === propertyName)) {\r\n    return true;\r\n  }\r\n\r\n  return false;\r\n}\r\n\r\n/**\r\n * Onclick handler for an audit link\r\n */\r\nexport function showAudit() {\r\n  const modelType = document.querySelector(\"[name='ModelType']\") as HTMLInputElement;\r\n  const module = document.querySelector(\"[name='Module']\") as HTMLInputElement;\r\n  const id = document.querySelector(\"[name='id']\") as HTMLInputElement;\n  // this project doesn't know about dialog.js.  Adding ignore for the transpiler.\r\n  //@ts-ignore\r\n  Dialog.newDialog('#ShowAudit', { data: `ModelType=${modelType?.value}&Module=${module?.value}&id=${id?.value}`});\r\n}\r\n"],"mappings":"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","ignoreList":[]}