@formio/js 5.0.0-dev.5807.065a0ba → 5.0.0-dev.5810.b51094a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5643,7 +5643,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexpo
5643
5643
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
5644
5644
 
5645
5645
  "use strict";
5646
- eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst Field_1 = __importDefault(__webpack_require__(/*! ../field/Field */ \"./lib/cjs/components/_classes/field/Field.js\"));\nconst lodash_1 = __importDefault(__webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\"));\nconst core_1 = __webpack_require__(/*! @formio/core */ \"./node_modules/@formio/core/lib/index.js\");\nclass Multivalue extends Field_1.default {\n /**\n * Normalize values coming into updateValue.\n * @param {*} value - The value to normalize before setting.\n * @param {object} flags - Flags to use when normalizing the value.\n * @param {*} emptyValue - The empty value for the field.\n * @returns {*} - The normalized value.\n */\n normalizeValue(value, flags = {}, emptyValue = this.emptyValue) {\n const underlyingValueShouldBeArray = core_1.Utils.getModelType(this.component) === 'array' || this.component.storeas === 'array' || Array.isArray(emptyValue);\n if (this.component.multiple) {\n if (Array.isArray(value)) {\n if (underlyingValueShouldBeArray) {\n if (value.length === 0 || !Array.isArray(value[0])) {\n return [value];\n }\n }\n if (value.length === 0) {\n return [emptyValue];\n }\n return super.normalizeValue(value, flags);\n }\n else {\n return super.normalizeValue(value == null ? [emptyValue] : [value], flags);\n }\n }\n else {\n if (Array.isArray(value) && !underlyingValueShouldBeArray) {\n if (this.component.storeas === 'string') {\n return super.normalizeValue(value.join(this.delimiter || ''), flags);\n }\n return super.normalizeValue(value[0] || emptyValue, flags);\n }\n else {\n return super.normalizeValue(value, flags);\n }\n }\n }\n get dataValue() {\n return this.normalizeValue(super.dataValue);\n }\n set dataValue(value) {\n super.dataValue = value;\n }\n get defaultValue() {\n let value = super.defaultValue;\n if (this.component.multiple) {\n if (lodash_1.default.isArray(value)) {\n value = !value.length ? [super.emptyValue] : value;\n }\n else {\n value = [value];\n }\n }\n return value;\n }\n get addAnother() {\n return this.t(this.component.addAnother || 'Add Another');\n }\n /**\n * @returns {Field} - The created field.\n */\n render() {\n let dataValue = this.normalizeValue(this.dataValue);\n return this.component.hasOwnProperty('multiple') && this.component.multiple\n ? super.render(this.renderTemplate('multiValueTable', {\n rows: dataValue.map(this.renderRow.bind(this)).join(''),\n disabled: this.disabled,\n addAnother: this.addAnother,\n }))\n : super.render(`<div ${this._referenceAttributeName}=\"element\">\n ${this.renderElement(this.component.type !== 'hidden' ? dataValue : '')}\n </div>`);\n }\n renderElement() {\n return '';\n }\n /**\n * Renders a single row for multi-value components.\n * @param {any} value - The value associated with the row to render.\n * @param {number} index - The index of the row in the multi-value list.\n * @returns {any} Returns the HTML string representation of the row.\n */\n renderRow(value, index) {\n return this.renderTemplate('multiValueRow', {\n index,\n disabled: this.disabled,\n element: `${this.renderElement(value, index)}`,\n });\n }\n /**\n * @param {HTMLElement} dom - The DOM element to which the component will attach.\n * @returns {Promise} - Promise that resolves when all asynchronous tasks that have finished.\n */\n attach(dom) {\n const superAttach = super.attach(dom);\n this.loadRefs(dom, {\n addButton: 'multiple',\n input: 'multiple',\n removeRow: 'multiple',\n mask: 'multiple',\n select: 'multiple',\n });\n const promises = [];\n this.refs.input.forEach((element, index) => {\n promises.push(this.attachElement.call(this, element, index));\n });\n if (!this.component.multiple) {\n return Promise.all(promises);\n }\n this.refs.removeRow.forEach((removeButton, index) => {\n this.addEventListener(removeButton, 'click', (event) => {\n event.preventDefault();\n this.removeValue(index);\n });\n });\n // If single value field.\n this.refs.addButton.forEach((addButton) => {\n this.addEventListener(addButton, 'click', (event) => {\n event.preventDefault();\n this.addValue();\n });\n });\n return superAttach.then(() => {\n return Promise.all(promises);\n });\n }\n /**\n * Remove all event handlers.\n */\n detach() {\n if (this.refs.input && this.refs.input.length) {\n this.refs.input.forEach((input) => {\n if (input.mask) {\n input.mask.destroy ? input.mask.destroy() : input.mask.remove();\n }\n if (input.widget) {\n input.widget.destroy();\n }\n });\n }\n if (this.refs.mask && this.refs.mask.length) {\n this.refs.mask.forEach((input) => {\n if (input.mask) {\n input.mask.destroy ? input.mask.destroy() : input.mask.remove();\n }\n });\n }\n super.detach();\n }\n /**\n * Attach inputs to the element.\n * @param {HTMLElement} element - The element to attach.\n * @param {number} index - The index of the element to attach.\n */\n attachElement(element, index) {\n this.addEventListener(element, this.inputInfo.changeEvent, () => {\n // Delay update slightly to give input mask a chance to run.\n const textCase = lodash_1.default.get(this.component, 'case', 'mixed');\n if (textCase !== 'mixed') {\n const { selectionStart, selectionEnd, } = element;\n if (textCase === 'uppercase' && element.value) {\n element.value = element.value.toUpperCase();\n }\n if (textCase === 'lowercase' && element.value) {\n element.value = element.value.toLowerCase();\n }\n if (element.selectionStart && element.selectionEnd) {\n element.selectionStart = selectionStart;\n element.selectionEnd = selectionEnd;\n }\n }\n try {\n this.saveCaretPosition(element, index);\n }\n catch (err) {\n console.warn('An error occurred while trying to save caret position', err);\n }\n // If a mask is present, delay the update to allow mask to update first.\n if (element.mask) {\n setTimeout(() => {\n return this.updateValue(null, {\n modified: (this.component.type !== 'hidden')\n }, index);\n }, 1);\n }\n else {\n return this.updateValue(null, {\n modified: (this.component.type !== 'hidden')\n }, index);\n }\n });\n if (!this.attachMultiMask(index)) {\n const applyMask = () => {\n this.setInputMask(element);\n const valueMask = this.component.inputMask;\n const displayMask = this.component.displayMask;\n if (valueMask && displayMask && displayMask !== valueMask && this.refs.valueMaskInput) {\n this.setInputMask(this.refs.valueMaskInput, valueMask);\n }\n };\n if (this.inputInfo.changeEvent === 'blur') {\n this.addEventListener(element, this.inputInfo.changeEvent, () => {\n applyMask();\n this.dataValue = this.refs.input[0].value;\n if (this.checkComponentValidity()) {\n this.updateComponentValue(this.refs.input[0].value);\n }\n });\n }\n else {\n applyMask();\n }\n }\n }\n /**\n * Event handler for selecting a mask from a dropdown.\n * @param {Event} event - Event triggered by changing the selected option in mask.\n */\n onSelectMaskHandler(event) {\n this.updateMask(event.target.maskInput, this.getMaskPattern(event.target.value));\n }\n /**\n * Retrieves the mask pattern for a given mask name\n * @param {string} maskName - The name of the mask to retrieve.\n * @returns {any} The mask pattern associated with the given mask name.\n */\n getMaskPattern(maskName) {\n if (!this.multiMasks) {\n this.multiMasks = {};\n }\n if (this.multiMasks[maskName]) {\n return this.multiMasks[maskName];\n }\n const mask = this.component.inputMasks.find(inputMask => inputMask.label === maskName);\n this.multiMasks[maskName] = mask ? mask.mask : this.component.inputMasks[0].mask;\n return this.multiMasks[maskName];\n }\n /**\n * Attaches a selectable mask to an input field based on its configuration.\n * @param {number} index - The index of the select or input in component array.\n * @returns {boolean} - Returns true if the mask was successfully attached\n */\n attachMultiMask(index) {\n if (!(this.isMultipleMasksField && this.component.inputMasks.length && this.refs.input.length)) {\n return false;\n }\n const maskSelect = this.refs.select[index];\n maskSelect.onchange = this.onSelectMaskHandler.bind(this);\n maskSelect.maskInput = this.refs.mask[index];\n this.setInputMask(maskSelect.maskInput, this.component.inputMasks[0].mask);\n return true;\n }\n /**\n * @param {any} input - The input element on which the mask is to be applied.\n * @param {string} mask - The mask pattern to apply to the input element. Exit early and remove previous mask if no mask.\n */\n updateMask(input, mask) {\n if (!mask) {\n if (input.mask) {\n input.mask.destroy();\n }\n if (!this.component.placeholder) {\n input.removeAttribute('placeholder');\n }\n input.value = '';\n return;\n }\n this.setInputMask(input, mask, !this.component.placeholder);\n this.updateValue();\n }\n /**\n * Adds a new empty value to the data array.\n * @param {any} value -A value to be added to the data array.\n */\n addNewValue(value) {\n if (value === undefined) {\n value = this.component.defaultValue ?\n this.component.defaultValue : this.emptyValue;\n // If default is an empty aray, default back to empty value.\n if (Array.isArray(value) && value.length === 0) {\n value = this.emptyValue;\n }\n }\n let dataValue = this.dataValue || [];\n if (!Array.isArray(dataValue)) {\n dataValue = [dataValue];\n }\n if (Array.isArray(value)) {\n dataValue = dataValue.concat(value);\n }\n else {\n dataValue.push(value);\n }\n this.dataValue = dataValue;\n }\n /**\n * Adds a new empty value to the data array, and add a new row to contain it.\n */\n addValue() {\n this.addNewValue();\n this.redraw();\n this.checkConditions();\n if (!this.isEmpty(this.dataValue)) {\n this.restoreValue();\n }\n if (this.root) {\n this.root.onChange();\n }\n }\n}\nexports[\"default\"] = Multivalue;\n\n\n//# sourceURL=webpack://Formio/./lib/cjs/components/_classes/multivalue/Multivalue.js?");
5646
+ eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst Field_1 = __importDefault(__webpack_require__(/*! ../field/Field */ \"./lib/cjs/components/_classes/field/Field.js\"));\nconst lodash_1 = __importDefault(__webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\"));\nconst core_1 = __webpack_require__(/*! @formio/core */ \"./node_modules/@formio/core/lib/index.js\");\nclass Multivalue extends Field_1.default {\n /**\n * Normalize values coming into updateValue.\n * @param {*} value - The value to normalize before setting.\n * @param {object} flags - Flags to use when normalizing the value.\n * @param {*} emptyValue - The empty value for the field.\n * @returns {*} - The normalized value.\n */\n normalizeValue(value, flags = {}, emptyValue = this.emptyValue) {\n const underlyingValueShouldBeArray = core_1.Utils.getModelType(this.component) === 'array' || this.component.storeas === 'array' || Array.isArray(emptyValue);\n if (this.component.multiple) {\n if (Array.isArray(value)) {\n if (underlyingValueShouldBeArray) {\n if (value.length === 0 || !Array.isArray(value[0])) {\n return [value];\n }\n }\n if (value.length === 0) {\n return [emptyValue];\n }\n return super.normalizeValue(value, flags);\n }\n else {\n return super.normalizeValue(value == null ? [emptyValue] : [value], flags);\n }\n }\n else {\n if (Array.isArray(value) && !underlyingValueShouldBeArray) {\n if (this.component.storeas === 'string') {\n return super.normalizeValue(value.join(this.delimiter || ''), flags);\n }\n if (this.component.type === 'hidden' && value.length > 1) {\n return super.normalizeValue(value, flags);\n }\n return super.normalizeValue(value[0] || emptyValue, flags);\n }\n else {\n return super.normalizeValue(value, flags);\n }\n }\n }\n get dataValue() {\n return this.normalizeValue(super.dataValue);\n }\n set dataValue(value) {\n super.dataValue = value;\n }\n get defaultValue() {\n let value = super.defaultValue;\n if (this.component.multiple) {\n if (lodash_1.default.isArray(value)) {\n value = !value.length ? [super.emptyValue] : value;\n }\n else {\n value = [value];\n }\n }\n return value;\n }\n get addAnother() {\n return this.t(this.component.addAnother || 'Add Another');\n }\n /**\n * @returns {Field} - The created field.\n */\n render() {\n let dataValue = this.normalizeValue(this.dataValue);\n return this.component.hasOwnProperty('multiple') && this.component.multiple\n ? super.render(this.renderTemplate('multiValueTable', {\n rows: dataValue.map(this.renderRow.bind(this)).join(''),\n disabled: this.disabled,\n addAnother: this.addAnother,\n }))\n : super.render(`<div ${this._referenceAttributeName}=\"element\">\n ${this.renderElement(this.component.type !== 'hidden' ? dataValue : '')}\n </div>`);\n }\n renderElement() {\n return '';\n }\n /**\n * Renders a single row for multi-value components.\n * @param {any} value - The value associated with the row to render.\n * @param {number} index - The index of the row in the multi-value list.\n * @returns {any} Returns the HTML string representation of the row.\n */\n renderRow(value, index) {\n return this.renderTemplate('multiValueRow', {\n index,\n disabled: this.disabled,\n element: `${this.renderElement(value, index)}`,\n });\n }\n /**\n * @param {HTMLElement} dom - The DOM element to which the component will attach.\n * @returns {Promise} - Promise that resolves when all asynchronous tasks that have finished.\n */\n attach(dom) {\n const superAttach = super.attach(dom);\n this.loadRefs(dom, {\n addButton: 'multiple',\n input: 'multiple',\n removeRow: 'multiple',\n mask: 'multiple',\n select: 'multiple',\n });\n const promises = [];\n this.refs.input.forEach((element, index) => {\n promises.push(this.attachElement.call(this, element, index));\n });\n if (!this.component.multiple) {\n return Promise.all(promises);\n }\n this.refs.removeRow.forEach((removeButton, index) => {\n this.addEventListener(removeButton, 'click', (event) => {\n event.preventDefault();\n this.removeValue(index);\n });\n });\n // If single value field.\n this.refs.addButton.forEach((addButton) => {\n this.addEventListener(addButton, 'click', (event) => {\n event.preventDefault();\n this.addValue();\n });\n });\n return superAttach.then(() => {\n return Promise.all(promises);\n });\n }\n /**\n * Remove all event handlers.\n */\n detach() {\n if (this.refs.input && this.refs.input.length) {\n this.refs.input.forEach((input) => {\n if (input.mask) {\n input.mask.destroy ? input.mask.destroy() : input.mask.remove();\n }\n if (input.widget) {\n input.widget.destroy();\n }\n });\n }\n if (this.refs.mask && this.refs.mask.length) {\n this.refs.mask.forEach((input) => {\n if (input.mask) {\n input.mask.destroy ? input.mask.destroy() : input.mask.remove();\n }\n });\n }\n super.detach();\n }\n /**\n * Attach inputs to the element.\n * @param {HTMLElement} element - The element to attach.\n * @param {number} index - The index of the element to attach.\n */\n attachElement(element, index) {\n this.addEventListener(element, this.inputInfo.changeEvent, () => {\n // Delay update slightly to give input mask a chance to run.\n const textCase = lodash_1.default.get(this.component, 'case', 'mixed');\n if (textCase !== 'mixed') {\n const { selectionStart, selectionEnd, } = element;\n if (textCase === 'uppercase' && element.value) {\n element.value = element.value.toUpperCase();\n }\n if (textCase === 'lowercase' && element.value) {\n element.value = element.value.toLowerCase();\n }\n if (element.selectionStart && element.selectionEnd) {\n element.selectionStart = selectionStart;\n element.selectionEnd = selectionEnd;\n }\n }\n try {\n this.saveCaretPosition(element, index);\n }\n catch (err) {\n console.warn('An error occurred while trying to save caret position', err);\n }\n // If a mask is present, delay the update to allow mask to update first.\n if (element.mask) {\n setTimeout(() => {\n return this.updateValue(null, {\n modified: (this.component.type !== 'hidden')\n }, index);\n }, 1);\n }\n else {\n return this.updateValue(null, {\n modified: (this.component.type !== 'hidden')\n }, index);\n }\n });\n if (!this.attachMultiMask(index)) {\n const applyMask = () => {\n this.setInputMask(element);\n const valueMask = this.component.inputMask;\n const displayMask = this.component.displayMask;\n if (valueMask && displayMask && displayMask !== valueMask && this.refs.valueMaskInput) {\n this.setInputMask(this.refs.valueMaskInput, valueMask);\n }\n };\n if (this.inputInfo.changeEvent === 'blur') {\n this.addEventListener(element, this.inputInfo.changeEvent, () => {\n applyMask();\n this.dataValue = this.refs.input[0].value;\n if (this.checkComponentValidity()) {\n this.updateComponentValue(this.refs.input[0].value);\n }\n });\n }\n else {\n applyMask();\n }\n }\n }\n /**\n * Event handler for selecting a mask from a dropdown.\n * @param {Event} event - Event triggered by changing the selected option in mask.\n */\n onSelectMaskHandler(event) {\n this.updateMask(event.target.maskInput, this.getMaskPattern(event.target.value));\n }\n /**\n * Retrieves the mask pattern for a given mask name\n * @param {string} maskName - The name of the mask to retrieve.\n * @returns {any} The mask pattern associated with the given mask name.\n */\n getMaskPattern(maskName) {\n if (!this.multiMasks) {\n this.multiMasks = {};\n }\n if (this.multiMasks[maskName]) {\n return this.multiMasks[maskName];\n }\n const mask = this.component.inputMasks.find(inputMask => inputMask.label === maskName);\n this.multiMasks[maskName] = mask ? mask.mask : this.component.inputMasks[0].mask;\n return this.multiMasks[maskName];\n }\n /**\n * Attaches a selectable mask to an input field based on its configuration.\n * @param {number} index - The index of the select or input in component array.\n * @returns {boolean} - Returns true if the mask was successfully attached\n */\n attachMultiMask(index) {\n if (!(this.isMultipleMasksField && this.component.inputMasks.length && this.refs.input.length)) {\n return false;\n }\n const maskSelect = this.refs.select[index];\n maskSelect.onchange = this.onSelectMaskHandler.bind(this);\n maskSelect.maskInput = this.refs.mask[index];\n this.setInputMask(maskSelect.maskInput, this.component.inputMasks[0].mask);\n return true;\n }\n /**\n * @param {any} input - The input element on which the mask is to be applied.\n * @param {string} mask - The mask pattern to apply to the input element. Exit early and remove previous mask if no mask.\n */\n updateMask(input, mask) {\n if (!mask) {\n if (input.mask) {\n input.mask.destroy();\n }\n if (!this.component.placeholder) {\n input.removeAttribute('placeholder');\n }\n input.value = '';\n return;\n }\n this.setInputMask(input, mask, !this.component.placeholder);\n this.updateValue();\n }\n /**\n * Adds a new empty value to the data array.\n * @param {any} value -A value to be added to the data array.\n */\n addNewValue(value) {\n if (value === undefined) {\n value = this.component.defaultValue ?\n this.component.defaultValue : this.emptyValue;\n // If default is an empty aray, default back to empty value.\n if (Array.isArray(value) && value.length === 0) {\n value = this.emptyValue;\n }\n }\n let dataValue = this.dataValue || [];\n if (!Array.isArray(dataValue)) {\n dataValue = [dataValue];\n }\n if (Array.isArray(value)) {\n dataValue = dataValue.concat(value);\n }\n else {\n dataValue.push(value);\n }\n this.dataValue = dataValue;\n }\n /**\n * Adds a new empty value to the data array, and add a new row to contain it.\n */\n addValue() {\n this.addNewValue();\n this.redraw();\n this.checkConditions();\n if (!this.isEmpty(this.dataValue)) {\n this.restoreValue();\n }\n if (this.root) {\n this.root.onChange();\n }\n }\n}\nexports[\"default\"] = Multivalue;\n\n\n//# sourceURL=webpack://Formio/./lib/cjs/components/_classes/multivalue/Multivalue.js?");
5647
5647
 
5648
5648
  /***/ }),
5649
5649
 
@@ -6952,7 +6952,7 @@ eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {
6952
6952
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
6953
6953
 
6954
6954
  "use strict";
6955
- eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst lodash_1 = __importDefault(__webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\"));\nconst utils_1 = __webpack_require__(/*! ../../../utils/utils */ \"./lib/cjs/utils/utils.js\");\nconst calculateSingleSelectData = (context, defaultValue) => {\n const { instance, data } = context;\n const rawDefaultValue = instance.downloadedResources.find(resource => lodash_1.default.get(resource, data.valueProperty) === defaultValue);\n const options = { data: {}, noeval: true };\n instance.interpolate(data.template, {\n item: rawDefaultValue,\n }, options);\n return options.data.item;\n};\nconst calculateSelectData = (context) => {\n const { instance } = context;\n const defaultValue = instance.getValue();\n if (instance.component.multiple) {\n const multiSelectData = {};\n (defaultValue !== null && defaultValue !== void 0 ? defaultValue : []).forEach((defaultValueItem) => {\n multiSelectData[defaultValueItem] = calculateSingleSelectData(context, defaultValueItem);\n });\n return multiSelectData;\n }\n else {\n return calculateSingleSelectData(context, defaultValue);\n }\n};\nconst setSelectData = (context) => {\n // Wait before downloadedResources will be set\n setTimeout(() => {\n var _a, _b;\n const { instance, data } = context;\n const selectDataComponent = (_a = instance === null || instance === void 0 ? void 0 : instance.root) === null || _a === void 0 ? void 0 : _a.getComponent('selectData');\n // clear selectData if conditions are not met or clearing default value\n if (selectDataComponent && (!selectDataComponent.visible || !data.defaultValue)) {\n selectDataComponent.setValue(null, { resetValue: true });\n return;\n }\n // nothing can set if don't have downloaded resources\n if (!selectDataComponent || !instance.getValue() || !((_b = instance.downloadedResources) === null || _b === void 0 ? void 0 : _b.length)) {\n return;\n }\n const shouldCalculateUrlData = data.dataSrc === 'url' && data.data.url && data.valueProperty;\n const shouldCalculateResourceData = data.dataSrc === 'resource' && data.data.resource && data.valueProperty;\n const newValue = shouldCalculateUrlData || shouldCalculateResourceData ? calculateSelectData(context) : null;\n selectDataComponent.setValue(newValue, { resetValue: newValue === null });\n }, 0);\n};\nexports[\"default\"] = [\n {\n key: 'dataSrc',\n data: {\n values: [\n { label: 'Values', value: 'values' },\n { label: 'URL', value: 'url' },\n { label: 'Resource', value: 'resource' },\n { label: 'Custom', value: 'custom' },\n { label: 'Raw JSON', value: 'json' },\n ],\n },\n },\n {\n type: 'textfield',\n weight: 10,\n input: true,\n key: 'indexeddb.database',\n label: 'Database name',\n tooltip: 'The name of the indexeddb database.',\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'indexeddb'] },\n },\n },\n {\n type: 'textfield',\n input: true,\n key: 'indexeddb.table',\n label: 'Table name',\n weight: 16,\n tooltip: 'The name of table in the indexeddb database.',\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'indexeddb'] },\n }\n },\n {\n type: 'textarea',\n as: 'json',\n editor: 'ace',\n weight: 18,\n input: true,\n key: 'indexeddb.filter',\n label: 'Row Filter',\n tooltip: 'Filter table items that match the object.',\n defaultValue: {},\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'indexeddb'] },\n },\n },\n {\n type: 'textarea',\n as: 'json',\n editor: 'ace',\n weight: 10,\n input: true,\n key: 'data.json',\n label: 'Data Source Raw JSON',\n tooltip: 'A valid JSON array to use as a data source.',\n description: '<div>Example: <pre>[\"apple\", \"banana\", \"orange\"].</pre></div> <div>Example 2: <pre>[{\"name\": \"John\", \"email\": \"john.doe@test.com\"}, {\"name\": \"Jane\", \"email\": \"jane.doe@test.com\"}].</pre></div>',\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'json'] },\n },\n },\n {\n type: 'checkbox',\n input: true,\n label: 'Lazy Load Data',\n key: 'lazyLoad',\n tooltip: 'When set, this will not fire off the request to the URL until this control is within focus. This can improve performance if you have many Select dropdowns on your form where the API\\'s will only fire when the control is activated.',\n weight: 11,\n conditional: {\n json: {\n and: [\n {\n in: [\n { var: 'data.dataSrc' },\n [\n 'resource',\n 'url',\n ],\n ],\n },\n {\n '!==': [\n { var: 'data.widget' },\n 'html5'\n ]\n }\n ]\n },\n },\n },\n {\n type: 'datagrid',\n input: true,\n label: 'Data Source Values',\n key: 'data.values',\n tooltip: 'Values to use as the data source. Labels are shown in the select field. Values are the corresponding values saved with the submission.',\n weight: 10,\n reorder: true,\n defaultValue: [{ label: '', value: '' }],\n components: [\n {\n label: 'Label',\n key: 'label',\n input: true,\n type: 'textfield',\n },\n {\n label: 'Value',\n key: 'value',\n input: true,\n type: 'textfield',\n allowCalculateOverride: true,\n calculateValue: 'value = _.camelCase(row.label);',\n },\n ],\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'values'] },\n },\n },\n {\n type: 'select',\n input: true,\n dataSrc: 'url',\n data: {\n url: '/form?type=resource&limit=1000000&select=_id,title',\n },\n authenticate: true,\n template: '<span>{{ item.title }}</span>',\n valueProperty: '_id',\n clearOnHide: false,\n label: 'Resource',\n key: 'data.resource',\n lazyLoad: false,\n weight: 10,\n tooltip: 'The resource to be used with this field.',\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'resource'] },\n },\n },\n {\n type: 'textfield',\n input: true,\n label: 'Data Path',\n key: 'selectValues',\n weight: 12,\n description: 'The object path to the iterable items.',\n tooltip: 'The property within the source data, where iterable items reside. For example: results.items or results[0].items',\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'url'] },\n },\n },\n {\n type: 'select',\n input: true,\n label: 'Value Property',\n key: 'valueProperty',\n skipMerge: true,\n clearOnHide: true,\n tooltip: 'The field to use as the value.',\n weight: 11,\n refreshOn: 'data.resource',\n template: '<span>{{ item.label }}</span>',\n valueProperty: 'key',\n dataSrc: 'url',\n lazyLoad: false,\n onSetItems(component, form) {\n const newItems = form.type === 'resource'\n ? [{\n label: '{Entire Object}',\n key: 'data',\n }]\n : [];\n (0, utils_1.eachComponent)(form.components, (component, path) => {\n if (component.input) {\n newItems.push({\n label: component.label || component.key,\n key: `data.${path}`\n });\n }\n });\n return newItems;\n },\n onChange(context) {\n if (context && context.flags && context.flags.modified) {\n const valueProp = context.instance.data.valueProperty;\n const templateProp = valueProp ? valueProp : 'data';\n const template = `<span>{{ item.${templateProp} }}</span>`;\n const searchField = valueProp ? `${valueProp}__regex` : '';\n context.instance.root.getComponent('template').setValue(template);\n context.instance.root.getComponent('searchField').setValue(searchField);\n }\n },\n data: {\n url: '/form/{{ data.data.resource }}',\n },\n conditional: {\n json: {\n and: [\n { '===': [{ var: 'data.dataSrc' }, 'resource'] },\n { '!==': [{ var: 'data.reference' }, true] },\n { var: 'data.data.resource' },\n ],\n },\n },\n },\n {\n type: 'select',\n input: true,\n label: 'Storage Type',\n key: 'dataType',\n clearOnHide: true,\n tooltip: 'The type to store the data. If you select something other than autotype, it will force it to that type.',\n weight: 12,\n template: '<span>{{ item.label }}</span>',\n dataSrc: 'values',\n data: {\n values: [\n { label: 'Autotype', value: 'auto' },\n { label: 'String', value: 'string' },\n { label: 'Number', value: 'number' },\n { label: 'Boolean', value: 'boolean' },\n { label: 'Object', value: 'object' },\n ],\n },\n },\n {\n type: 'textfield',\n input: true,\n key: 'idPath',\n weight: 12,\n label: 'ID Path',\n placeholder: 'id',\n tooltip: 'Path to the select option id.'\n },\n {\n type: 'textfield',\n input: true,\n label: 'Select Fields',\n key: 'selectFields',\n tooltip: 'The properties on the resource to return as part of the options. Separate property names by commas. If left blank, all properties will be returned.',\n placeholder: 'Comma separated list of fields to select.',\n weight: 14,\n conditional: {\n json: {\n and: [\n { '===': [{ var: 'data.dataSrc' }, 'resource'] },\n { '===': [{ var: 'data.valueProperty' }, ''] },\n ],\n },\n },\n },\n {\n type: 'checkbox',\n input: true,\n key: 'disableLimit',\n label: 'Disable limiting response',\n tooltip: 'When enabled the request will not include the limit and skip options in the query string',\n weight: 15,\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'url'] },\n },\n },\n {\n type: 'textfield',\n input: true,\n key: 'searchField',\n label: 'Search Query Name',\n weight: 16,\n description: 'Name of URL query parameter',\n tooltip: 'The name of the search querystring parameter used when sending a request to filter results with. The server at the URL must handle this query parameter.',\n conditional: {\n json: {\n in: [\n { var: 'data.dataSrc' },\n [\n 'url',\n 'resource',\n ],\n ],\n },\n },\n },\n {\n type: 'number',\n input: true,\n key: 'searchDebounce',\n label: 'Search request delay',\n weight: 16,\n description: 'The delay (in seconds) before the search request is sent.',\n tooltip: 'The delay in seconds before the search request is sent, measured from the last character input in the search field.',\n validate: {\n min: 0,\n customMessage: '',\n json: '',\n max: 1,\n },\n delimiter: false,\n requireDecimal: false,\n encrypted: false,\n defaultValue: 0.3,\n conditional: {\n json: {\n in: [\n { var: 'data.dataSrc' },\n [\n 'url',\n 'resource',\n ],\n ],\n },\n },\n },\n {\n type: 'number',\n input: true,\n key: 'minSearch',\n weight: 17,\n label: 'Minimum Search Length',\n tooltip: 'The minimum amount of characters they must type before a search is made.',\n defaultValue: 0,\n conditional: {\n json: {\n and: [\n { '===': [{ var: 'data.dataSrc' }, 'url'] },\n { '!=': [{ var: 'data.searchField' }, ''] },\n ],\n },\n },\n },\n {\n type: 'textfield',\n input: true,\n key: 'filter',\n label: 'Filter Query',\n weight: 18,\n description: 'The filter query for results.',\n tooltip: 'Use this to provide additional filtering using query parameters.',\n conditional: {\n json: {\n in: [\n { var: 'data.dataSrc' },\n [\n 'url',\n 'resource',\n ],\n ],\n },\n },\n },\n {\n type: 'textfield',\n input: true,\n key: 'sort',\n label: 'Sort Query',\n weight: 18,\n description: 'The sort query for results',\n tooltip: 'Use this to provide additional sorting using query parameters',\n conditional: {\n json: {\n in: [\n { var: 'data.dataSrc' },\n [\n 'url',\n 'resource',\n ],\n ],\n },\n },\n },\n {\n type: 'number',\n input: true,\n key: 'limit',\n label: 'Limit',\n weight: 18,\n description: 'Maximum number of items to view per page of results.',\n tooltip: 'Use this to limit the number of items to request or view.',\n clearOnHide: false,\n conditional: {\n json: {\n and: [\n { in: [\n { var: 'data.dataSrc' },\n [\n 'url',\n 'resource'\n ],\n ] },\n { '!==': [{ var: 'data.disableLimit' }, true] }\n ]\n },\n },\n },\n {\n type: 'textarea',\n input: true,\n key: 'data.custom',\n label: 'Custom Values',\n editor: 'ace',\n rows: 10,\n weight: 14,\n placeholder: \"values = data['mykey'] or values = Promise.resolve(['myValue'])\",\n tooltip: 'Write custom code to return the value options or a promise with value options. The form data object is available.',\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'custom'] },\n },\n },\n {\n type: 'select',\n input: true,\n key: 'refreshOn',\n label: 'Refresh Options On',\n weight: 19,\n tooltip: 'Refresh data when another field changes.',\n dataSrc: 'custom',\n valueProperty: 'value',\n data: {\n custom(context) {\n var values = [];\n values.push({ label: 'Any Change', value: 'data' });\n context.utils.eachComponent(context.instance.options.editForm.components, function (component, path) {\n if (component.key !== context.data.key) {\n values.push({\n label: component.label || component.key,\n value: path\n });\n }\n });\n return values;\n }\n },\n conditional: {\n json: {\n in: [\n { var: 'data.dataSrc' },\n [\n 'url',\n 'resource',\n 'values',\n 'custom'\n ],\n ],\n },\n },\n },\n {\n type: 'select',\n input: true,\n key: 'refreshOnBlur',\n label: 'Refresh Options On Blur',\n weight: 19,\n tooltip: 'Refresh data when another field is blured.',\n dataSrc: 'custom',\n valueProperty: 'value',\n data: {\n custom(context) {\n var values = [];\n values.push({ label: 'Any Change', value: 'data' });\n context.utils.eachComponent(context.instance.options.editForm.components, function (component, path) {\n if (component.key !== context.data.key) {\n values.push({\n label: component.label || component.key,\n value: path\n });\n }\n });\n return values;\n }\n },\n conditional: {\n json: {\n in: [\n { var: 'data.dataSrc' },\n [\n 'url',\n 'resource',\n 'values'\n ],\n ],\n },\n },\n },\n {\n type: 'checkbox',\n input: true,\n weight: 20,\n key: 'clearOnRefresh',\n label: 'Clear Value On Refresh Options',\n defaultValue: false,\n tooltip: 'When the Refresh On field is changed, clear this components value.',\n conditional: {\n json: {\n in: [\n { var: 'data.dataSrc' },\n [\n 'url',\n 'resource',\n 'values',\n 'custom'\n ],\n ],\n },\n },\n },\n {\n type: 'checkbox',\n input: true,\n weight: 21,\n key: 'searchEnabled',\n label: 'Enable Static Search',\n defaultValue: true,\n tooltip: 'When checked, the select dropdown will allow for searching within the static list of items provided.',\n },\n {\n type: 'checkbox',\n input: true,\n weight: 21,\n key: 'noRefreshOnScroll',\n label: 'Disable Options Refresh When Scrolling',\n defaultValue: false,\n tooltip: 'When checked, the select with search input won\\'t perform new api requests when scrolling through the list of options.',\n conditional: {\n json: {\n and: [\n { in: [\n { var: 'data.dataSrc' },\n [\n 'url',\n 'resource'\n ],\n ] },\n { '===': [{ var: 'data.searchEnabled' }, true] }\n ]\n },\n },\n },\n {\n label: 'Search Threshold',\n mask: false,\n tableView: true,\n alwaysEnabled: false,\n type: 'number',\n input: true,\n key: 'selectThreshold',\n validate: {\n min: 0,\n customMessage: '',\n json: '',\n max: 1,\n },\n delimiter: false,\n requireDecimal: false,\n encrypted: false,\n defaultValue: 0.3,\n weight: 22,\n tooltip: 'At what point does the match algorithm give up. A threshold of 0.0 requires a perfect match, a threshold of 1.0 would match anything.',\n },\n {\n type: 'checkbox',\n input: true,\n weight: 23,\n key: 'addResource',\n label: 'Add Resource',\n tooltip: 'Allows to create a new resource while entering a submission.',\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'resource'] },\n },\n },\n {\n type: 'textfield',\n label: 'Add Resource Label',\n key: 'addResourceLabel',\n tooltip: 'Set the text of the Add Resource button.',\n placeholder: 'Add Resource',\n weight: 24,\n input: true,\n conditional: {\n json: {\n and: [\n { '===': [{ var: 'data.dataSrc' }, 'resource'] },\n { '!!': { var: 'data.addResource' } },\n ],\n },\n },\n },\n {\n type: 'checkbox',\n input: true,\n weight: 25,\n key: 'reference',\n label: 'Save as reference',\n tooltip: 'Using this option will save this field as a reference and link its value to the value of the origin record.',\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'resource'] },\n },\n },\n {\n type: 'checkbox',\n input: true,\n weight: 27,\n key: 'readOnlyValue',\n label: 'Read Only Value',\n tooltip: 'Check this if you would like to show just the value when in Read Only mode.',\n },\n {\n type: 'textarea',\n as: 'json',\n editor: 'ace',\n weight: 28,\n input: true,\n key: 'customOptions',\n label: 'Choices.js options',\n tooltip: 'A raw JSON object to use as options for the Select component (Choices JS).',\n defaultValue: {},\n },\n {\n type: 'checkbox',\n input: true,\n weight: 29,\n key: 'useExactSearch',\n label: 'Use exact search',\n tooltip: 'Disables search algorithm threshold.',\n },\n {\n key: 'defaultValue',\n onSetItems(component) {\n setSelectData(component.evalContext());\n },\n onChange(context) {\n if (context && context.flags && context.flags.modified) {\n setSelectData(context);\n }\n },\n },\n {\n key: 'selectData',\n conditional: {\n json: {\n and: [\n { var: 'data.valueProperty' },\n { '===': [{ var: 'data.lazyLoad' }, true] },\n { '!==': [{ var: 'data.widget' }, 'html5'] },\n {\n or: [\n { '===': [{ var: 'data.dataSrc' }, 'url'] },\n {\n and: [\n { '===': [{ var: 'data.dataSrc' }, 'resource'] },\n // 'data' means entire object from resource will be used\n { '!==': [{ var: 'data.valueProperty' }, 'data'] },\n ],\n }\n ]\n }\n ]\n },\n },\n },\n {\n key: 'template',\n onChange(context) {\n if (context && context.flags && context.flags.modified) {\n const defaultValueComponent = context.instance.root.getComponent('defaultValue');\n if (!defaultValueComponent) {\n return;\n }\n setSelectData(defaultValueComponent.evalContext());\n }\n },\n },\n];\n\n\n//# sourceURL=webpack://Formio/./lib/cjs/components/select/editForm/Select.edit.data.js?");
6955
+ eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst lodash_1 = __importDefault(__webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\"));\nconst utils_1 = __webpack_require__(/*! ../../../utils/utils */ \"./lib/cjs/utils/utils.js\");\nconst calculateSingleSelectData = (context, defaultValue) => {\n const { instance, data } = context;\n const rawDefaultValue = instance.downloadedResources.find(resource => lodash_1.default.get(resource, data.valueProperty) === defaultValue);\n const options = { data: {}, noeval: true };\n instance.interpolate(data.template, {\n item: rawDefaultValue,\n }, options);\n return options.data.item;\n};\nconst calculateSelectData = (context) => {\n const { instance } = context;\n const defaultValue = instance.getValue();\n if (instance.component.multiple) {\n const multiSelectData = {};\n (defaultValue !== null && defaultValue !== void 0 ? defaultValue : []).forEach((defaultValueItem) => {\n multiSelectData[defaultValueItem] = calculateSingleSelectData(context, defaultValueItem);\n });\n return multiSelectData;\n }\n else {\n return calculateSingleSelectData(context, defaultValue);\n }\n};\nconst setSelectData = (context) => {\n // Wait before downloadedResources will be set\n setTimeout(() => {\n var _a;\n const { instance, data } = context;\n const selectDataComponent = instance === null || instance === void 0 ? void 0 : instance.root.getComponent('selectData');\n // nothing can set if don't have downloaded resources\n if (!selectDataComponent || !instance.getValue() || !((_a = instance.downloadedResources) === null || _a === void 0 ? void 0 : _a.length)) {\n return;\n }\n // if valueProperty is not provided, we have entire object\n const shouldCalculateUrlData = data.dataSrc === 'url' && data.data.url && data.valueProperty;\n const shouldCalculateResourceData = data.dataSrc === 'resource' && data.data.resource && data.valueProperty;\n const newValue = shouldCalculateUrlData || shouldCalculateResourceData ? calculateSelectData(context) : undefined;\n selectDataComponent.setValue(newValue);\n }, 0);\n};\nexports[\"default\"] = [\n {\n key: 'dataSrc',\n data: {\n values: [\n { label: 'Values', value: 'values' },\n { label: 'URL', value: 'url' },\n { label: 'Resource', value: 'resource' },\n { label: 'Custom', value: 'custom' },\n { label: 'Raw JSON', value: 'json' },\n ],\n },\n },\n {\n type: 'textfield',\n weight: 10,\n input: true,\n key: 'indexeddb.database',\n label: 'Database name',\n tooltip: 'The name of the indexeddb database.',\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'indexeddb'] },\n },\n },\n {\n type: 'textfield',\n input: true,\n key: 'indexeddb.table',\n label: 'Table name',\n weight: 16,\n tooltip: 'The name of table in the indexeddb database.',\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'indexeddb'] },\n }\n },\n {\n type: 'textarea',\n as: 'json',\n editor: 'ace',\n weight: 18,\n input: true,\n key: 'indexeddb.filter',\n label: 'Row Filter',\n tooltip: 'Filter table items that match the object.',\n defaultValue: {},\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'indexeddb'] },\n },\n },\n {\n type: 'textarea',\n as: 'json',\n editor: 'ace',\n weight: 10,\n input: true,\n key: 'data.json',\n label: 'Data Source Raw JSON',\n tooltip: 'A valid JSON array to use as a data source.',\n description: '<div>Example: <pre>[\"apple\", \"banana\", \"orange\"].</pre></div> <div>Example 2: <pre>[{\"name\": \"John\", \"email\": \"john.doe@test.com\"}, {\"name\": \"Jane\", \"email\": \"jane.doe@test.com\"}].</pre></div>',\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'json'] },\n },\n },\n {\n type: 'checkbox',\n input: true,\n label: 'Lazy Load Data',\n key: 'lazyLoad',\n tooltip: 'When set, this will not fire off the request to the URL until this control is within focus. This can improve performance if you have many Select dropdowns on your form where the API\\'s will only fire when the control is activated.',\n weight: 11,\n conditional: {\n json: {\n and: [\n {\n in: [\n { var: 'data.dataSrc' },\n [\n 'resource',\n 'url',\n ],\n ],\n },\n {\n '!==': [\n { var: 'data.widget' },\n 'html5'\n ]\n }\n ]\n },\n },\n },\n {\n type: 'datagrid',\n input: true,\n label: 'Data Source Values',\n key: 'data.values',\n tooltip: 'Values to use as the data source. Labels are shown in the select field. Values are the corresponding values saved with the submission.',\n weight: 10,\n reorder: true,\n defaultValue: [{ label: '', value: '' }],\n components: [\n {\n label: 'Label',\n key: 'label',\n input: true,\n type: 'textfield',\n },\n {\n label: 'Value',\n key: 'value',\n input: true,\n type: 'textfield',\n allowCalculateOverride: true,\n calculateValue: 'value = _.camelCase(row.label);',\n },\n ],\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'values'] },\n },\n },\n {\n type: 'select',\n input: true,\n dataSrc: 'url',\n data: {\n url: '/form?type=resource&limit=1000000&select=_id,title',\n },\n authenticate: true,\n template: '<span>{{ item.title }}</span>',\n valueProperty: '_id',\n clearOnHide: false,\n label: 'Resource',\n key: 'data.resource',\n lazyLoad: false,\n weight: 10,\n tooltip: 'The resource to be used with this field.',\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'resource'] },\n },\n },\n {\n type: 'textfield',\n input: true,\n label: 'Data Path',\n key: 'selectValues',\n weight: 12,\n description: 'The object path to the iterable items.',\n tooltip: 'The property within the source data, where iterable items reside. For example: results.items or results[0].items',\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'url'] },\n },\n },\n {\n type: 'select',\n input: true,\n label: 'Value Property',\n key: 'valueProperty',\n skipMerge: true,\n clearOnHide: true,\n tooltip: 'The field to use as the value.',\n weight: 11,\n refreshOn: 'data.resource',\n template: '<span>{{ item.label }}</span>',\n valueProperty: 'key',\n dataSrc: 'url',\n lazyLoad: false,\n onSetItems(component, form) {\n const newItems = form.type === 'resource'\n ? [{\n label: '{Entire Object}',\n key: 'data',\n }]\n : [];\n (0, utils_1.eachComponent)(form.components, (component, path) => {\n if (component.input) {\n newItems.push({\n label: component.label || component.key,\n key: `data.${path}`\n });\n }\n });\n return newItems;\n },\n onChange(context) {\n if (context && context.flags && context.flags.modified) {\n const valueProp = context.instance.data.valueProperty;\n const templateProp = valueProp ? valueProp : 'data';\n const template = `<span>{{ item.${templateProp} }}</span>`;\n const searchField = valueProp ? `${valueProp}__regex` : '';\n context.instance.root.getComponent('template').setValue(template);\n context.instance.root.getComponent('searchField').setValue(searchField);\n }\n },\n data: {\n url: '/form/{{ data.data.resource }}',\n },\n conditional: {\n json: {\n and: [\n { '===': [{ var: 'data.dataSrc' }, 'resource'] },\n { '!==': [{ var: 'data.reference' }, true] },\n { var: 'data.data.resource' },\n ],\n },\n },\n },\n {\n type: 'select',\n input: true,\n label: 'Storage Type',\n key: 'dataType',\n clearOnHide: true,\n tooltip: 'The type to store the data. If you select something other than autotype, it will force it to that type.',\n weight: 12,\n template: '<span>{{ item.label }}</span>',\n dataSrc: 'values',\n data: {\n values: [\n { label: 'Autotype', value: 'auto' },\n { label: 'String', value: 'string' },\n { label: 'Number', value: 'number' },\n { label: 'Boolean', value: 'boolean' },\n { label: 'Object', value: 'object' },\n ],\n },\n },\n {\n type: 'textfield',\n input: true,\n key: 'idPath',\n weight: 12,\n label: 'ID Path',\n placeholder: 'id',\n tooltip: 'Path to the select option id.'\n },\n {\n type: 'textfield',\n input: true,\n label: 'Select Fields',\n key: 'selectFields',\n tooltip: 'The properties on the resource to return as part of the options. Separate property names by commas. If left blank, all properties will be returned.',\n placeholder: 'Comma separated list of fields to select.',\n weight: 14,\n conditional: {\n json: {\n and: [\n { '===': [{ var: 'data.dataSrc' }, 'resource'] },\n { '===': [{ var: 'data.valueProperty' }, ''] },\n ],\n },\n },\n },\n {\n type: 'checkbox',\n input: true,\n key: 'disableLimit',\n label: 'Disable limiting response',\n tooltip: 'When enabled the request will not include the limit and skip options in the query string',\n weight: 15,\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'url'] },\n },\n },\n {\n type: 'textfield',\n input: true,\n key: 'searchField',\n label: 'Search Query Name',\n weight: 16,\n description: 'Name of URL query parameter',\n tooltip: 'The name of the search querystring parameter used when sending a request to filter results with. The server at the URL must handle this query parameter.',\n conditional: {\n json: {\n in: [\n { var: 'data.dataSrc' },\n [\n 'url',\n 'resource',\n ],\n ],\n },\n },\n },\n {\n type: 'number',\n input: true,\n key: 'searchDebounce',\n label: 'Search request delay',\n weight: 16,\n description: 'The delay (in seconds) before the search request is sent.',\n tooltip: 'The delay in seconds before the search request is sent, measured from the last character input in the search field.',\n validate: {\n min: 0,\n customMessage: '',\n json: '',\n max: 1,\n },\n delimiter: false,\n requireDecimal: false,\n encrypted: false,\n defaultValue: 0.3,\n conditional: {\n json: {\n in: [\n { var: 'data.dataSrc' },\n [\n 'url',\n 'resource',\n ],\n ],\n },\n },\n },\n {\n type: 'number',\n input: true,\n key: 'minSearch',\n weight: 17,\n label: 'Minimum Search Length',\n tooltip: 'The minimum amount of characters they must type before a search is made.',\n defaultValue: 0,\n conditional: {\n json: {\n and: [\n { '===': [{ var: 'data.dataSrc' }, 'url'] },\n { '!=': [{ var: 'data.searchField' }, ''] },\n ],\n },\n },\n },\n {\n type: 'textfield',\n input: true,\n key: 'filter',\n label: 'Filter Query',\n weight: 18,\n description: 'The filter query for results.',\n tooltip: 'Use this to provide additional filtering using query parameters.',\n conditional: {\n json: {\n in: [\n { var: 'data.dataSrc' },\n [\n 'url',\n 'resource',\n ],\n ],\n },\n },\n },\n {\n type: 'textfield',\n input: true,\n key: 'sort',\n label: 'Sort Query',\n weight: 18,\n description: 'The sort query for results',\n tooltip: 'Use this to provide additional sorting using query parameters',\n conditional: {\n json: {\n in: [\n { var: 'data.dataSrc' },\n [\n 'url',\n 'resource',\n ],\n ],\n },\n },\n },\n {\n type: 'number',\n input: true,\n key: 'limit',\n label: 'Limit',\n weight: 18,\n description: 'Maximum number of items to view per page of results.',\n tooltip: 'Use this to limit the number of items to request or view.',\n clearOnHide: false,\n conditional: {\n json: {\n and: [\n { in: [\n { var: 'data.dataSrc' },\n [\n 'url',\n 'resource'\n ],\n ] },\n { '!==': [{ var: 'data.disableLimit' }, true] }\n ]\n },\n },\n },\n {\n type: 'textarea',\n input: true,\n key: 'data.custom',\n label: 'Custom Values',\n editor: 'ace',\n rows: 10,\n weight: 14,\n placeholder: \"values = data['mykey'] or values = Promise.resolve(['myValue'])\",\n tooltip: 'Write custom code to return the value options or a promise with value options. The form data object is available.',\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'custom'] },\n },\n },\n {\n type: 'select',\n input: true,\n key: 'refreshOn',\n label: 'Refresh Options On',\n weight: 19,\n tooltip: 'Refresh data when another field changes.',\n dataSrc: 'custom',\n valueProperty: 'value',\n data: {\n custom(context) {\n var values = [];\n values.push({ label: 'Any Change', value: 'data' });\n context.utils.eachComponent(context.instance.options.editForm.components, function (component, path) {\n if (component.key !== context.data.key) {\n values.push({\n label: component.label || component.key,\n value: path\n });\n }\n });\n return values;\n }\n },\n conditional: {\n json: {\n in: [\n { var: 'data.dataSrc' },\n [\n 'url',\n 'resource',\n 'values',\n 'custom'\n ],\n ],\n },\n },\n },\n {\n type: 'select',\n input: true,\n key: 'refreshOnBlur',\n label: 'Refresh Options On Blur',\n weight: 19,\n tooltip: 'Refresh data when another field is blured.',\n dataSrc: 'custom',\n valueProperty: 'value',\n data: {\n custom(context) {\n var values = [];\n values.push({ label: 'Any Change', value: 'data' });\n context.utils.eachComponent(context.instance.options.editForm.components, function (component, path) {\n if (component.key !== context.data.key) {\n values.push({\n label: component.label || component.key,\n value: path\n });\n }\n });\n return values;\n }\n },\n conditional: {\n json: {\n in: [\n { var: 'data.dataSrc' },\n [\n 'url',\n 'resource',\n 'values'\n ],\n ],\n },\n },\n },\n {\n type: 'checkbox',\n input: true,\n weight: 20,\n key: 'clearOnRefresh',\n label: 'Clear Value On Refresh Options',\n defaultValue: false,\n tooltip: 'When the Refresh On field is changed, clear this components value.',\n conditional: {\n json: {\n in: [\n { var: 'data.dataSrc' },\n [\n 'url',\n 'resource',\n 'values',\n 'custom'\n ],\n ],\n },\n },\n },\n {\n type: 'checkbox',\n input: true,\n weight: 21,\n key: 'searchEnabled',\n label: 'Enable Static Search',\n defaultValue: true,\n tooltip: 'When checked, the select dropdown will allow for searching within the static list of items provided.',\n },\n {\n type: 'checkbox',\n input: true,\n weight: 21,\n key: 'noRefreshOnScroll',\n label: 'Disable Options Refresh When Scrolling',\n defaultValue: false,\n tooltip: 'When checked, the select with search input won\\'t perform new api requests when scrolling through the list of options.',\n conditional: {\n json: {\n and: [\n { in: [\n { var: 'data.dataSrc' },\n [\n 'url',\n 'resource'\n ],\n ] },\n { '===': [{ var: 'data.searchEnabled' }, true] }\n ]\n },\n },\n },\n {\n label: 'Search Threshold',\n mask: false,\n tableView: true,\n alwaysEnabled: false,\n type: 'number',\n input: true,\n key: 'selectThreshold',\n validate: {\n min: 0,\n customMessage: '',\n json: '',\n max: 1,\n },\n delimiter: false,\n requireDecimal: false,\n encrypted: false,\n defaultValue: 0.3,\n weight: 22,\n tooltip: 'At what point does the match algorithm give up. A threshold of 0.0 requires a perfect match, a threshold of 1.0 would match anything.',\n },\n {\n type: 'checkbox',\n input: true,\n weight: 23,\n key: 'addResource',\n label: 'Add Resource',\n tooltip: 'Allows to create a new resource while entering a submission.',\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'resource'] },\n },\n },\n {\n type: 'textfield',\n label: 'Add Resource Label',\n key: 'addResourceLabel',\n tooltip: 'Set the text of the Add Resource button.',\n placeholder: 'Add Resource',\n weight: 24,\n input: true,\n conditional: {\n json: {\n and: [\n { '===': [{ var: 'data.dataSrc' }, 'resource'] },\n { '!!': { var: 'data.addResource' } },\n ],\n },\n },\n },\n {\n type: 'checkbox',\n input: true,\n weight: 25,\n key: 'reference',\n label: 'Save as reference',\n tooltip: 'Using this option will save this field as a reference and link its value to the value of the origin record.',\n conditional: {\n json: { '===': [{ var: 'data.dataSrc' }, 'resource'] },\n },\n },\n {\n type: 'checkbox',\n input: true,\n weight: 27,\n key: 'readOnlyValue',\n label: 'Read Only Value',\n tooltip: 'Check this if you would like to show just the value when in Read Only mode.',\n },\n {\n type: 'textarea',\n as: 'json',\n editor: 'ace',\n weight: 28,\n input: true,\n key: 'customOptions',\n label: 'Choices.js options',\n tooltip: 'A raw JSON object to use as options for the Select component (Choices JS).',\n defaultValue: {},\n },\n {\n type: 'checkbox',\n input: true,\n weight: 29,\n key: 'useExactSearch',\n label: 'Use exact search',\n tooltip: 'Disables search algorithm threshold.',\n },\n {\n key: 'defaultValue',\n onSetItems(component) {\n setSelectData(component.evalContext());\n },\n onChange(context) {\n if (context && context.flags && context.flags.modified) {\n setSelectData(context);\n }\n },\n },\n {\n key: 'selectData',\n conditional: {\n json: { 'and': [\n { '!==': [{ var: 'data.valueProperty' }, null] },\n { '!==': [{ var: 'data.valueProperty' }, ''] },\n ] },\n },\n },\n {\n key: 'template',\n onChange(context) {\n if (context && context.flags && context.flags.modified) {\n const defaultValueComponent = context.instance.root.getComponent('defaultValue');\n if (!defaultValueComponent) {\n return;\n }\n setSelectData(defaultValueComponent.evalContext());\n }\n },\n },\n];\n\n\n//# sourceURL=webpack://Formio/./lib/cjs/components/select/editForm/Select.edit.data.js?");
6956
6956
 
6957
6957
  /***/ }),
6958
6958