diff --git a/demos/_unit-test/dropdown-html.php b/demos/_unit-test/dropdown-html.php
index e8ca7c066a..ad751fabe0 100644
--- a/demos/_unit-test/dropdown-html.php
+++ b/demos/_unit-test/dropdown-html.php
@@ -49,6 +49,13 @@
'dropdownOptions' => ['allowAdditions' => true],
]);
+$form->addControl('dropdown_multi_json', [
+ Form\Control\Dropdown::class,
+ 'caption' => 'Dropdown multiple JSON',
+ 'multiple' => true,
+ 'values' => $htmlValues,
+], ['type' => 'json']);
+
$lookupModel = new Model();
$lookupModel->addField('id', ['type' => 'string']);
$lookupModel->addField('name', ['type' => 'string']);
@@ -83,16 +90,35 @@
'multiple' => true,
'model' => $lookupModel,
'settings' => ['allowAdditions' => true],
-]); */
+]);
+
+$form->addControl('lookup_multi_json', [
+ Form\Control\Lookup::class,
+ 'caption' => 'Lookup multiple JSON',
+ 'multiple' => true,
+ 'model' => $lookupModel,
+]/* , ['type' => 'json'] *-/);
+$form->entity->getField('lookup_multi_json')->type = 'json'; */
foreach (array_keys($form->entity->getFields()) as $k) {
- $form->entity->set($k, $makeTestStringFx('d'));
+ $form->entity->set(
+ $k,
+ str_contains($k, 'json')
+ ? [$makeTestStringFx('d')]
+ : $makeTestStringFx('d')
+ );
}
$initData = $form->entity->get();
$form->onSubmit(static function (Form $form) use ($app, $initData, $makeTestStringFx) {
- $makeExpectedDataFx = static fn ($fx) => array_map(static fn ($k) => $fx($k), array_combine(array_keys($initData), array_keys($initData)));
+ $makeExpectedDataFx = static fn ($fx) => array_map(static function ($k) use ($fx) {
+ $res = $fx($k);
+
+ return str_contains($k, 'json')
+ ? explode(',', $res)
+ : $res;
+ }, array_combine(array_keys($initData), array_keys($initData)));
// TODO remove once https://github.com/fomantic/Fomantic-UI/pull/3205 is merged
foreach ($form->entity->get() as $k => $v) {
@@ -104,7 +130,7 @@
$view->invokeInit();
$view->text->addParagraph($app->encodeJson($form->entity->get()));
$view->text->addParagraph('match init: ' . ($form->entity->get() === $initData));
- $view->text->addParagraph('match u add: ' . ($form->entity->get() === $makeExpectedDataFx(static fn ($k) => (str_contains($k, 'multi') ? $initData[$k] . ',' : '') . $makeTestStringFx('u'))));
+ $view->text->addParagraph('match u add: ' . ($form->entity->get() === $makeExpectedDataFx(static fn ($k) => (str_contains($k, 'multi') ? $makeTestStringFx('d') . ',' : '') . $makeTestStringFx('u'))));
$view->text->addParagraph('match empty: ' . ($form->entity->get() === $makeExpectedDataFx(static fn () => '')));
$view->text->addParagraph('match u only: ' . ($form->entity->get() === $makeExpectedDataFx(static fn () => $makeTestStringFx('u'))));
diff --git a/js/src/VueComponent/Multiline/MultilineRowComponent.js b/js/src/VueComponent/Multiline/MultilineRowComponent.js
index d324469bc0..370cf6016f 100644
--- a/js/src/VueComponent/Multiline/MultilineRowComponent.js
+++ b/js/src/VueComponent/Multiline/MultilineRowComponent.js
@@ -3,10 +3,9 @@ import MultilineCell from './MultilineCellComponent';
/**
* This will create a table td element using SuiTableCell.
- * The td element is created only if column as set isVisible = true;
+ * The td element is created only if column as set isVisible = true.
* The td element will add a multiline cell element.
- * the multiline cell will set it's own template component depending on the fieldType.
- * getValue
+ * The multiline cell will set it's own template component depending on the fieldType.
*/
export default {
name: 'AtkMultilineRow',
diff --git a/public/js/atk-vue-multiline.js b/public/js/atk-vue-multiline.js
index 5143b91c00..a3721bbd8c 100644
--- a/public/js/atk-vue-multiline.js
+++ b/public/js/atk-vue-multiline.js
@@ -653,10 +653,9 @@ __webpack_require__.r(__webpack_exports__);
/**
* This will create a table td element using SuiTableCell.
- * The td element is created only if column as set isVisible = true;
+ * The td element is created only if column as set isVisible = true.
* The td element will add a multiline cell element.
- * the multiline cell will set it's own template component depending on the fieldType.
- * getValue
+ * The multiline cell will set it's own template component depending on the fieldType.
*/
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
name: 'AtkMultilineRow',
diff --git a/public/js/atk-vue-multiline.js.map b/public/js/atk-vue-multiline.js.map
index 2ae4562883..16a32cac93 100644
--- a/public/js/atk-vue-multiline.js.map
+++ b/public/js/atk-vue-multiline.js.map
@@ -1 +1 @@
-{"version":3,"file":"js/atk-vue-multiline.js","mappings":"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","sources":["webpack://atk/./src/VueComponent/Multiline/MultilineBodyComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineCellComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineHeaderComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineReadonlyComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineRowComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineTextareaComponent.js","webpack://atk/./src/VueComponent/Share/AtkDatePickerComponent.js","webpack://atk/./src/VueComponent/Share/AtkLookupComponent.js","webpack://atk/./node_modules/core-js/modules/esnext.async-iterator.some.js","webpack://atk/./node_modules/core-js/modules/esnext.iterator.some.js"],"sourcesContent":["import MultilineRow from './MultilineRowComponent';\n\nexport default {\n name: 'AtkMultilineBody',\n template: `\n \n \n `,\n props: ['fieldDefs', 'rowData', 'deletables', 'errors'],\n data: function () {\n return { fields: this.fieldDefs };\n },\n created: function () {},\n components: {\n AtkMultilineRow: MultilineRow,\n },\n computed: {\n rows: function () {\n return this.rowData;\n },\n },\n emits: ['onTabLastRow'],\n methods: {\n onTabLastColumn: function (rowIndex) {\n if (rowIndex + 1 === this.rowData.length) {\n this.$emit('onTabLastRow');\n }\n },\n isDeletableRow: function (row) {\n return this.deletables.includes(row.__atkml);\n },\n getRowErrors: function (rowId) {\n return this.errors[rowId] ?? [];\n },\n },\n};\n","import MultilineReadonly from './MultilineReadonlyComponent';\nimport MultilineTextarea from './MultilineTextareaComponent';\nimport AtkDatePicker from '../Share/AtkDatePickerComponent';\nimport AtkLookup from '../Share/AtkLookupComponent';\n\nexport default {\n name: 'AtkMultilineCell',\n template: `\n `,\n components: {\n AtkMultilineReadonly: MultilineReadonly,\n AtkMultilineTextarea: MultilineTextarea,\n AtkDatePicker: AtkDatePicker,\n AtkLookup: AtkLookup,\n },\n props: ['cellData', 'fieldValue'],\n data: function () {\n return {\n fieldName: this.cellData.name,\n type: this.cellData.type,\n inputName: '-' + this.cellData.name,\n inputValue: this.fieldValue,\n };\n },\n emits: ['updateValue'],\n methods: {\n getComponent: function () {\n return this.cellData.definition.component;\n },\n getComponentProps: function () {\n if (this.getComponent() === 'AtkMultilineReadonly') {\n return { readOnlyValue: this.fieldValue };\n }\n\n return this.cellData.definition.componentProps;\n },\n onInput: function (value) {\n this.inputValue = value;\n this.$emit('updateValue', this.fieldName, this.inputValue);\n },\n },\n};\n","import $ from 'external/jquery';\nimport atk from 'atk';\nimport MultilineBody from './MultilineBodyComponent';\nimport MultilineHeader from './MultilineHeaderComponent';\n\nexport default {\n name: 'AtkMultiline',\n template: `\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
`,\n props: {\n data: Object,\n },\n data: function () {\n const tableDefault = {\n basic: false,\n celled: false,\n collapsing: false,\n stackable: false,\n inverted: false,\n };\n\n return {\n form: this.data.formName,\n valueJson: this.data.inputValue,\n name: this.data.inputName,\n rowData: [],\n fieldData: this.data.fields || [],\n eventFields: this.data.eventFields || [],\n deletables: [],\n hasChangeCb: this.data.hasChangeCb,\n errors: {},\n caption: this.data.caption || null,\n tableProp: { ...tableDefault, ...this.data.tableProps },\n };\n },\n components: {\n AtkMultilineHeader: MultilineHeader,\n AtkMultilineBody: MultilineBody,\n },\n mounted: function () {\n this.rowData = this.buildRowData(this.valueJson ?? '[]');\n this.updateInputValue();\n\n atk.eventBus.on(this.$root.$el.parentElement.id + '-update-row', (payload) => {\n this.onUpdate(payload.rowId, payload.fieldName, payload.value);\n });\n\n atk.eventBus.on(this.$root.$el.parentElement.id + '-toggle-delete', (payload) => {\n const i = this.deletables.indexOf(payload.rowId);\n if (i !== -1) {\n this.deletables.splice(i, 1);\n } else {\n this.deletables.push(payload.rowId);\n }\n });\n\n atk.eventBus.on(this.$root.$el.parentElement.id + '-toggle-delete-all', (payload) => {\n this.deletables = [];\n if (payload.isOn) {\n for (const row of this.rowData) {\n this.deletables.push(row.__atkml);\n }\n }\n });\n\n atk.eventBus.on(this.$root.$el.parentElement.id + '-multiline-rows-error', (payload) => {\n this.errors = { ...payload.errors };\n });\n },\n methods: {\n onTabLastRow: function () {\n if (!this.isLimitReached && this.data.addOnTab) {\n this.onAdd();\n }\n },\n onAdd: function () {\n const newRow = this.createRow(this.data.fields);\n this.rowData.push(newRow);\n this.updateInputValue();\n if (this.data.afterAdd && typeof this.data.afterAdd === 'function') {\n this.data.afterAdd(JSON.parse(this.valueJson));\n }\n this.fetchExpression(newRow.__atkml);\n this.fetchOnUpdateAction();\n },\n onDelete: function () {\n for (const atkmlId of this.deletables) {\n this.deleteRow(atkmlId);\n }\n this.deletables = [];\n this.updateInputValue();\n this.fetchOnUpdateAction();\n if (this.data.afterDelete && typeof this.data.afterDelete === 'function') {\n this.data.afterDelete(JSON.parse(this.valueJson));\n }\n },\n onUpdate: function (atkmlId, fieldName, value) {\n this.updateFieldInRow(atkmlId, fieldName, value);\n this.clearError(atkmlId, fieldName);\n this.updateInputValue();\n\n if (!this.onUpdate.debouncedFx) {\n this.onUpdate.debouncedFx = atk.createDebouncedFx(() => {\n this.onUpdate.debouncedFx = null;\n this.fetchExpression(atkmlId);\n this.fetchOnUpdateAction(fieldName);\n }, 250);\n }\n this.onUpdate.debouncedFx.call(this);\n },\n /**\n * Creates a new row of data and\n * set values to default if available.\n */\n createRow: function (fields) {\n const row = {};\n for (const field of fields) {\n row[field.name] = field.default;\n }\n row.__atkml = this.getUUID();\n\n return row;\n },\n deleteRow: function (atkmlId) {\n this.rowData.splice(this.rowData.findIndex((row) => row.__atkml === atkmlId), 1);\n delete this.errors[atkmlId];\n },\n /**\n * Update the value of the field in rowData.\n */\n updateFieldInRow: function (atkmlId, fieldName, value) {\n for (const row of this.rowData) {\n if (row.__atkml === atkmlId) {\n row[fieldName] = value;\n }\n }\n },\n clearError: function (atkmlId, fieldName) {\n if (atkmlId in this.errors) {\n const errors = this.errors[atkmlId].filter((error) => error.name !== fieldName);\n this.errors[atkmlId] = [...errors];\n if (errors.length === 0) {\n delete this.errors[atkmlId];\n }\n }\n },\n /**\n * Update Multi-line Form input with all rowData values\n * as JSON string.\n */\n updateInputValue: function () {\n this.valueJson = JSON.stringify(this.rowData);\n },\n /**\n * Build rowData from JSON string.\n */\n buildRowData: function (jsonValue) {\n const rows = JSON.parse(jsonValue);\n for (const row of rows) {\n row.__atkml = this.getUUID();\n }\n\n return rows;\n },\n /**\n * Check if one of the field use expression.\n */\n hasExpression: function () {\n return this.fieldData.some((field) => field.isExpr);\n },\n /**\n * Send on change action to server.\n */\n fetchOnUpdateAction: function (fieldName = null) {\n if (this.hasChangeCb && (fieldName === null || this.eventFields.includes(fieldName))) {\n $(this.$refs.addButton.$el).api({\n on: 'now',\n url: this.data.url,\n method: 'POST',\n data: { __atkml_action: 'on-change', rows: this.valueJson },\n });\n }\n },\n postData: async function (row) {\n const data = { ...row };\n const context = this.$refs.addButton.$el;\n data.__atkml_action = 'update-row';\n try {\n return await atk.apiService.suiFetch(this.data.url, { data: data, method: 'POST', stateContext: context });\n } catch (e) {\n console.error(e);\n }\n },\n /**\n * Get expressions values from server.\n */\n fetchExpression: async function (atkmlId) {\n if (this.hasExpression()) {\n const row = this.findRow(atkmlId);\n // server will return expression field/value if defined\n if (row) {\n const resp = await this.postData(row);\n if (resp.expressions) {\n const fields = Object.keys(resp.expressions);\n for (const field of fields) {\n this.updateFieldInRow(atkmlId, field, resp.expressions[field]);\n }\n this.updateInputValue();\n }\n }\n }\n },\n findRow: function (atkmlId) {\n return this.rowData.find((row) => row.__atkml === atkmlId);\n },\n getInputElement: function () {\n return this.$refs.atkmlInput;\n },\n /**\n * UUID v4 generator.\n */\n getUUID: function () {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replaceAll(/[xy]/g, (c) => {\n const r = Math.floor(Math.random() * 16);\n const v = c === 'x' ? r : r & (0x3 | 0x8); // eslint-disable-line no-bitwise\n\n return v.toString(16);\n });\n },\n },\n computed: {\n getSpan: function () {\n return this.fieldData.length - 1;\n },\n getDeletables: function () {\n return this.deletables;\n },\n /**\n * Return Delete all checkbox state base on\n * deletables entries.\n */\n getMainToggleState: function () {\n let res = 'off';\n if (this.deletables.length > 0) {\n res = this.deletables.length === this.rowData.length\n ? 'on'\n : 'indeterminate';\n }\n\n return res;\n },\n isDeleteDisable: function () {\n return this.deletables.length === 0;\n },\n isLimitReached: function () {\n if (this.data.rowLimit === 0) {\n return false;\n }\n\n return this.data.rowLimit < this.rowData.length + 1;\n },\n },\n};\n","import atk from 'atk';\n\nexport default {\n name: 'AtkMultilineHeader',\n template: `\n \n \n \n \n \n {{getErrorMsg(column)}}\n \n \n \n {{caption}}\n \n \n \n \n \n \n {{column.caption}}
\n \n {{getErrorMsg(column)}}\n
\n \n \n `,\n props: ['fields', 'selectionState', 'errors', 'caption'],\n data: function () {\n return { columns: this.fields, isDeleteAll: false };\n },\n methods: {\n filterVisibleColumns: function (columns) {\n return columns.filter((v) => v.isVisible);\n },\n onToggleDeleteAll: function () {\n this.$nextTick(() => {\n atk.eventBus.emit(this.$root.$el.parentElement.id + '-toggle-delete-all', { isOn: this.$refs.check.checked });\n });\n },\n getTextAlign: function (column) {\n let align = 'left';\n if (!column.isEditable) {\n switch (column.type) {\n case 'smallint':\n case 'integer':\n case 'bigint':\n case 'float':\n case 'atk4_money': {\n align = 'right';\n\n break;\n }\n }\n }\n\n return align;\n },\n getVisibleColumns: function () {\n let count = 1; // add deletable column;\n for (const field of this.columns) {\n count = field.isVisible ? count + 1 : count;\n }\n\n return count;\n },\n hasError: function () {\n return Object.keys(this.errors).length > 0;\n },\n hasCaption: function () {\n return this.caption;\n },\n getErrorMsg: function (column) {\n if (this.hasError()) {\n const rows = Object.keys(this.errors);\n for (const row of rows) {\n const error = this.errors[row].filter((col) => col.name === column.name);\n if (error.length > 0) {\n return error[0].msg;\n }\n }\n }\n\n return null;\n },\n },\n computed: {\n isIndeterminate: function () {\n return this.selectionState === 'indeterminate';\n },\n isChecked: function () {\n return this.selectionState === 'on';\n },\n },\n};\n","/**\n * Simply display a readonly value.\n */\nexport default {\n name: 'AtkMultilineReadonly',\n template: '{{readOnlyValue}}
',\n props: ['readOnlyValue'],\n};\n","import atk from 'atk';\nimport MultilineCell from './MultilineCellComponent';\n\n/**\n * This will create a table td element using SuiTableCell.\n * The td element is created only if column as set isVisible = true;\n * The td element will add a multiline cell element.\n * the multiline cell will set it's own template component depending on the fieldType.\n * getValue\n */\nexport default {\n name: 'AtkMultilineRow',\n template: `\n \n \n \n \n \n \n \n `,\n props: ['fields', 'rowId', 'isDeletable', 'rowValues', 'errors'],\n data: function () {\n return { columns: this.fields };\n },\n components: {\n AtkMultilineCell: MultilineCell,\n },\n computed: {\n /**\n * toDelete is bind by v-model, thus we need a setter for\n * computed property to work.\n * When isDeletable is pass, will set checkbox according to it's value.\n */\n toDelete: {\n get: function () {\n return this.isDeletable;\n },\n set: function (v) {\n return v;\n },\n },\n },\n emits: ['onTabLastColumn'],\n methods: {\n filterVisibleColumns: function (columns) {\n return columns.filter((v) => v.isVisible);\n },\n onTab: function (columnIndex) {\n if (columnIndex === this.columns.filter((column) => column.isEditable).length - 1) {\n this.$emit('onTabLastColumn');\n }\n },\n hasColumnError: function (column) {\n return this.errors.some((v) => column.name === v.name);\n },\n onToggleDelete: function (e) {\n atk.eventBus.emit(this.$root.$el.parentElement.id + '-toggle-delete', { rowId: this.rowId });\n },\n onUpdateValue: function (fieldName, value) {\n atk.eventBus.emit(this.$root.$el.parentElement.id + '-update-row', { rowId: this.rowId, fieldName: fieldName, value: value });\n },\n getValue: function (column) {\n return this.rowValues[column.name] || column.default;\n },\n },\n};\n","export default {\n name: 'AtkMultilineTextarea',\n template: '',\n props: ['modelValue'],\n emits: ['update:modelValue'],\n methods: {\n onInput: function (event) {\n this.$emit('update:modelValue', event.target.value);\n },\n },\n};\n","/* global flatpickr */ // loaded after main JS\n\n/**\n * Wrapper for vue-flatpickr-component component.\n *\n * https://github.com/ankurk91/vue-flatpickr-component\n *\n * Properties:\n * config: Any of Flatpickr options\n */\nexport default {\n name: 'AtkDatePicker',\n template: `\n `,\n props: ['config', 'modelValue'],\n data: function () {\n const config = { ...this.config };\n\n if (config.defaultDate && !this.modelValue) {\n config.defaultDate = new Date();\n } else if (this.modelValue) {\n config.defaultDate = this.modelValue;\n }\n\n if (!config.locale) {\n config.locale = flatpickr.l10ns.default;\n }\n\n return {\n flatPickr: config,\n };\n },\n emits: ['setDefault'],\n mounted: function () {\n // if value is not set but default date is, then emit proper string value to parent\n if (!this.modelValue && this.flatPickr.defaultDate) {\n this.onUpdate(\n this.flatPickr.defaultDate instanceof Date\n ? flatpickr.formatDate(this.config.defaultDate, this.config.dateFormat)\n : this.flatPickr.defaultDate\n );\n }\n },\n methods: {\n getFlatpickrValue: function (value) {\n return value;\n },\n onUpdate: function (value) {\n this.$emit('update:modelValue', value);\n },\n },\n};\n","/**\n * Wrapper for Fomantic-UI dropdown component into a lookup component.\n *\n * Properties:\n * config:\n * reference: the reference field name associate with model or hasOne name. This field name will be sent along with URL callback parameter as of 'field=name'.\n * Note: The remaining config object may contain any or SuiDropdown { props: value } pair.\n *\n * modelValue: The selected value.\n * optionalValue: The initial list of options for the dropdown.\n */\nexport default {\n name: 'AtkLookup',\n template: `\n `,\n props: ['config', 'modelValue', 'optionalValue'],\n data: function () {\n const {\n url, reference, ...otherConfig\n } = this.config;\n otherConfig.selection = true;\n\n return {\n dropdownProps: otherConfig,\n url: url || null,\n field: reference,\n query: '',\n temp: '',\n };\n },\n mounted: function () {\n if (this.optionalValue) {\n this.dropdownProps.options = Array.isArray(this.optionalValue) ? this.optionalValue : [this.optionalValue];\n }\n },\n emits: ['update:modelValue'],\n methods: {\n getDropdownValue: function (value) {\n return this.dropdownProps.options.find((item) => item.value === value);\n },\n onUpdate: function (value) {\n this.$emit('update:modelValue', value.value);\n },\n },\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $some = require('../internals/async-iterator-iteration').some;\n\n// `AsyncIterator.prototype.some` method\n// https://github.com/tc39/proposal-async-iterator-helpers\n$({ target: 'AsyncIterator', proto: true, real: true }, {\n some: function some(predicate) {\n return $some(this, predicate);\n }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.iterator.some');\n"],"names":["MultilineRow","name","template","props","data","fields","fieldDefs","created","components","AtkMultilineRow","computed","rows","rowData","emits","methods","onTabLastColumn","rowIndex","length","$emit","isDeletableRow","row","deletables","includes","__atkml","getRowErrors","rowId","errors","MultilineReadonly","MultilineTextarea","AtkDatePicker","AtkLookup","AtkMultilineReadonly","AtkMultilineTextarea","fieldName","cellData","type","inputName","inputValue","fieldValue","getComponent","definition","component","getComponentProps","readOnlyValue","componentProps","onInput","value","$","atk","MultilineBody","MultilineHeader","Object","tableDefault","basic","celled","collapsing","stackable","inverted","form","formName","valueJson","fieldData","eventFields","hasChangeCb","caption","tableProp","tableProps","AtkMultilineHeader","AtkMultilineBody","mounted","buildRowData","updateInputValue","eventBus","on","$root","$el","parentElement","id","payload","onUpdate","i","indexOf","splice","push","isOn","onTabLastRow","isLimitReached","addOnTab","onAdd","newRow","createRow","afterAdd","JSON","parse","fetchExpression","fetchOnUpdateAction","onDelete","atkmlId","deleteRow","afterDelete","updateFieldInRow","clearError","debouncedFx","createDebouncedFx","call","field","default","getUUID","findIndex","filter","error","stringify","jsonValue","hasExpression","some","isExpr","arguments","undefined","$refs","addButton","api","url","method","__atkml_action","postData","context","apiService","suiFetch","stateContext","e","console","findRow","resp","expressions","keys","find","getInputElement","atkmlInput","replaceAll","c","r","Math","floor","random","v","toString","getSpan","getDeletables","getMainToggleState","res","isDeleteDisable","rowLimit","columns","isDeleteAll","filterVisibleColumns","isVisible","onToggleDeleteAll","$nextTick","emit","check","checked","getTextAlign","column","align","isEditable","getVisibleColumns","count","hasError","hasCaption","getErrorMsg","col","msg","isIndeterminate","selectionState","isChecked","MultilineCell","AtkMultilineCell","toDelete","get","isDeletable","set","onTab","columnIndex","hasColumnError","onToggleDelete","onUpdateValue","getValue","rowValues","event","target","config","defaultDate","modelValue","Date","locale","flatpickr","l10ns","flatPickr","formatDate","dateFormat","getFlatpickrValue","reference","otherConfig","selection","dropdownProps","query","temp","optionalValue","options","Array","isArray","getDropdownValue","item"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"js/atk-vue-multiline.js","mappings":"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","sources":["webpack://atk/./src/VueComponent/Multiline/MultilineBodyComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineCellComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineHeaderComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineReadonlyComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineRowComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineTextareaComponent.js","webpack://atk/./src/VueComponent/Share/AtkDatePickerComponent.js","webpack://atk/./src/VueComponent/Share/AtkLookupComponent.js","webpack://atk/./node_modules/core-js/modules/esnext.async-iterator.some.js","webpack://atk/./node_modules/core-js/modules/esnext.iterator.some.js"],"sourcesContent":["import MultilineRow from './MultilineRowComponent';\n\nexport default {\n name: 'AtkMultilineBody',\n template: `\n \n \n `,\n props: ['fieldDefs', 'rowData', 'deletables', 'errors'],\n data: function () {\n return { fields: this.fieldDefs };\n },\n created: function () {},\n components: {\n AtkMultilineRow: MultilineRow,\n },\n computed: {\n rows: function () {\n return this.rowData;\n },\n },\n emits: ['onTabLastRow'],\n methods: {\n onTabLastColumn: function (rowIndex) {\n if (rowIndex + 1 === this.rowData.length) {\n this.$emit('onTabLastRow');\n }\n },\n isDeletableRow: function (row) {\n return this.deletables.includes(row.__atkml);\n },\n getRowErrors: function (rowId) {\n return this.errors[rowId] ?? [];\n },\n },\n};\n","import MultilineReadonly from './MultilineReadonlyComponent';\nimport MultilineTextarea from './MultilineTextareaComponent';\nimport AtkDatePicker from '../Share/AtkDatePickerComponent';\nimport AtkLookup from '../Share/AtkLookupComponent';\n\nexport default {\n name: 'AtkMultilineCell',\n template: `\n `,\n components: {\n AtkMultilineReadonly: MultilineReadonly,\n AtkMultilineTextarea: MultilineTextarea,\n AtkDatePicker: AtkDatePicker,\n AtkLookup: AtkLookup,\n },\n props: ['cellData', 'fieldValue'],\n data: function () {\n return {\n fieldName: this.cellData.name,\n type: this.cellData.type,\n inputName: '-' + this.cellData.name,\n inputValue: this.fieldValue,\n };\n },\n emits: ['updateValue'],\n methods: {\n getComponent: function () {\n return this.cellData.definition.component;\n },\n getComponentProps: function () {\n if (this.getComponent() === 'AtkMultilineReadonly') {\n return { readOnlyValue: this.fieldValue };\n }\n\n return this.cellData.definition.componentProps;\n },\n onInput: function (value) {\n this.inputValue = value;\n this.$emit('updateValue', this.fieldName, this.inputValue);\n },\n },\n};\n","import $ from 'external/jquery';\nimport atk from 'atk';\nimport MultilineBody from './MultilineBodyComponent';\nimport MultilineHeader from './MultilineHeaderComponent';\n\nexport default {\n name: 'AtkMultiline',\n template: `\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
`,\n props: {\n data: Object,\n },\n data: function () {\n const tableDefault = {\n basic: false,\n celled: false,\n collapsing: false,\n stackable: false,\n inverted: false,\n };\n\n return {\n form: this.data.formName,\n valueJson: this.data.inputValue,\n name: this.data.inputName,\n rowData: [],\n fieldData: this.data.fields || [],\n eventFields: this.data.eventFields || [],\n deletables: [],\n hasChangeCb: this.data.hasChangeCb,\n errors: {},\n caption: this.data.caption || null,\n tableProp: { ...tableDefault, ...this.data.tableProps },\n };\n },\n components: {\n AtkMultilineHeader: MultilineHeader,\n AtkMultilineBody: MultilineBody,\n },\n mounted: function () {\n this.rowData = this.buildRowData(this.valueJson ?? '[]');\n this.updateInputValue();\n\n atk.eventBus.on(this.$root.$el.parentElement.id + '-update-row', (payload) => {\n this.onUpdate(payload.rowId, payload.fieldName, payload.value);\n });\n\n atk.eventBus.on(this.$root.$el.parentElement.id + '-toggle-delete', (payload) => {\n const i = this.deletables.indexOf(payload.rowId);\n if (i !== -1) {\n this.deletables.splice(i, 1);\n } else {\n this.deletables.push(payload.rowId);\n }\n });\n\n atk.eventBus.on(this.$root.$el.parentElement.id + '-toggle-delete-all', (payload) => {\n this.deletables = [];\n if (payload.isOn) {\n for (const row of this.rowData) {\n this.deletables.push(row.__atkml);\n }\n }\n });\n\n atk.eventBus.on(this.$root.$el.parentElement.id + '-multiline-rows-error', (payload) => {\n this.errors = { ...payload.errors };\n });\n },\n methods: {\n onTabLastRow: function () {\n if (!this.isLimitReached && this.data.addOnTab) {\n this.onAdd();\n }\n },\n onAdd: function () {\n const newRow = this.createRow(this.data.fields);\n this.rowData.push(newRow);\n this.updateInputValue();\n if (this.data.afterAdd && typeof this.data.afterAdd === 'function') {\n this.data.afterAdd(JSON.parse(this.valueJson));\n }\n this.fetchExpression(newRow.__atkml);\n this.fetchOnUpdateAction();\n },\n onDelete: function () {\n for (const atkmlId of this.deletables) {\n this.deleteRow(atkmlId);\n }\n this.deletables = [];\n this.updateInputValue();\n this.fetchOnUpdateAction();\n if (this.data.afterDelete && typeof this.data.afterDelete === 'function') {\n this.data.afterDelete(JSON.parse(this.valueJson));\n }\n },\n onUpdate: function (atkmlId, fieldName, value) {\n this.updateFieldInRow(atkmlId, fieldName, value);\n this.clearError(atkmlId, fieldName);\n this.updateInputValue();\n\n if (!this.onUpdate.debouncedFx) {\n this.onUpdate.debouncedFx = atk.createDebouncedFx(() => {\n this.onUpdate.debouncedFx = null;\n this.fetchExpression(atkmlId);\n this.fetchOnUpdateAction(fieldName);\n }, 250);\n }\n this.onUpdate.debouncedFx.call(this);\n },\n /**\n * Creates a new row of data and\n * set values to default if available.\n */\n createRow: function (fields) {\n const row = {};\n for (const field of fields) {\n row[field.name] = field.default;\n }\n row.__atkml = this.getUUID();\n\n return row;\n },\n deleteRow: function (atkmlId) {\n this.rowData.splice(this.rowData.findIndex((row) => row.__atkml === atkmlId), 1);\n delete this.errors[atkmlId];\n },\n /**\n * Update the value of the field in rowData.\n */\n updateFieldInRow: function (atkmlId, fieldName, value) {\n for (const row of this.rowData) {\n if (row.__atkml === atkmlId) {\n row[fieldName] = value;\n }\n }\n },\n clearError: function (atkmlId, fieldName) {\n if (atkmlId in this.errors) {\n const errors = this.errors[atkmlId].filter((error) => error.name !== fieldName);\n this.errors[atkmlId] = [...errors];\n if (errors.length === 0) {\n delete this.errors[atkmlId];\n }\n }\n },\n /**\n * Update Multi-line Form input with all rowData values\n * as JSON string.\n */\n updateInputValue: function () {\n this.valueJson = JSON.stringify(this.rowData);\n },\n /**\n * Build rowData from JSON string.\n */\n buildRowData: function (jsonValue) {\n const rows = JSON.parse(jsonValue);\n for (const row of rows) {\n row.__atkml = this.getUUID();\n }\n\n return rows;\n },\n /**\n * Check if one of the field use expression.\n */\n hasExpression: function () {\n return this.fieldData.some((field) => field.isExpr);\n },\n /**\n * Send on change action to server.\n */\n fetchOnUpdateAction: function (fieldName = null) {\n if (this.hasChangeCb && (fieldName === null || this.eventFields.includes(fieldName))) {\n $(this.$refs.addButton.$el).api({\n on: 'now',\n url: this.data.url,\n method: 'POST',\n data: { __atkml_action: 'on-change', rows: this.valueJson },\n });\n }\n },\n postData: async function (row) {\n const data = { ...row };\n const context = this.$refs.addButton.$el;\n data.__atkml_action = 'update-row';\n try {\n return await atk.apiService.suiFetch(this.data.url, { data: data, method: 'POST', stateContext: context });\n } catch (e) {\n console.error(e);\n }\n },\n /**\n * Get expressions values from server.\n */\n fetchExpression: async function (atkmlId) {\n if (this.hasExpression()) {\n const row = this.findRow(atkmlId);\n // server will return expression field/value if defined\n if (row) {\n const resp = await this.postData(row);\n if (resp.expressions) {\n const fields = Object.keys(resp.expressions);\n for (const field of fields) {\n this.updateFieldInRow(atkmlId, field, resp.expressions[field]);\n }\n this.updateInputValue();\n }\n }\n }\n },\n findRow: function (atkmlId) {\n return this.rowData.find((row) => row.__atkml === atkmlId);\n },\n getInputElement: function () {\n return this.$refs.atkmlInput;\n },\n /**\n * UUID v4 generator.\n */\n getUUID: function () {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replaceAll(/[xy]/g, (c) => {\n const r = Math.floor(Math.random() * 16);\n const v = c === 'x' ? r : r & (0x3 | 0x8); // eslint-disable-line no-bitwise\n\n return v.toString(16);\n });\n },\n },\n computed: {\n getSpan: function () {\n return this.fieldData.length - 1;\n },\n getDeletables: function () {\n return this.deletables;\n },\n /**\n * Return Delete all checkbox state base on\n * deletables entries.\n */\n getMainToggleState: function () {\n let res = 'off';\n if (this.deletables.length > 0) {\n res = this.deletables.length === this.rowData.length\n ? 'on'\n : 'indeterminate';\n }\n\n return res;\n },\n isDeleteDisable: function () {\n return this.deletables.length === 0;\n },\n isLimitReached: function () {\n if (this.data.rowLimit === 0) {\n return false;\n }\n\n return this.data.rowLimit < this.rowData.length + 1;\n },\n },\n};\n","import atk from 'atk';\n\nexport default {\n name: 'AtkMultilineHeader',\n template: `\n \n \n \n \n \n {{getErrorMsg(column)}}\n \n \n \n {{caption}}\n \n \n \n \n \n \n {{column.caption}}
\n \n {{getErrorMsg(column)}}\n
\n \n \n `,\n props: ['fields', 'selectionState', 'errors', 'caption'],\n data: function () {\n return { columns: this.fields, isDeleteAll: false };\n },\n methods: {\n filterVisibleColumns: function (columns) {\n return columns.filter((v) => v.isVisible);\n },\n onToggleDeleteAll: function () {\n this.$nextTick(() => {\n atk.eventBus.emit(this.$root.$el.parentElement.id + '-toggle-delete-all', { isOn: this.$refs.check.checked });\n });\n },\n getTextAlign: function (column) {\n let align = 'left';\n if (!column.isEditable) {\n switch (column.type) {\n case 'smallint':\n case 'integer':\n case 'bigint':\n case 'float':\n case 'atk4_money': {\n align = 'right';\n\n break;\n }\n }\n }\n\n return align;\n },\n getVisibleColumns: function () {\n let count = 1; // add deletable column;\n for (const field of this.columns) {\n count = field.isVisible ? count + 1 : count;\n }\n\n return count;\n },\n hasError: function () {\n return Object.keys(this.errors).length > 0;\n },\n hasCaption: function () {\n return this.caption;\n },\n getErrorMsg: function (column) {\n if (this.hasError()) {\n const rows = Object.keys(this.errors);\n for (const row of rows) {\n const error = this.errors[row].filter((col) => col.name === column.name);\n if (error.length > 0) {\n return error[0].msg;\n }\n }\n }\n\n return null;\n },\n },\n computed: {\n isIndeterminate: function () {\n return this.selectionState === 'indeterminate';\n },\n isChecked: function () {\n return this.selectionState === 'on';\n },\n },\n};\n","/**\n * Simply display a readonly value.\n */\nexport default {\n name: 'AtkMultilineReadonly',\n template: '{{readOnlyValue}}
',\n props: ['readOnlyValue'],\n};\n","import atk from 'atk';\nimport MultilineCell from './MultilineCellComponent';\n\n/**\n * This will create a table td element using SuiTableCell.\n * The td element is created only if column as set isVisible = true.\n * The td element will add a multiline cell element.\n * The multiline cell will set it's own template component depending on the fieldType.\n */\nexport default {\n name: 'AtkMultilineRow',\n template: `\n \n \n \n \n \n \n \n `,\n props: ['fields', 'rowId', 'isDeletable', 'rowValues', 'errors'],\n data: function () {\n return { columns: this.fields };\n },\n components: {\n AtkMultilineCell: MultilineCell,\n },\n computed: {\n /**\n * toDelete is bind by v-model, thus we need a setter for\n * computed property to work.\n * When isDeletable is pass, will set checkbox according to it's value.\n */\n toDelete: {\n get: function () {\n return this.isDeletable;\n },\n set: function (v) {\n return v;\n },\n },\n },\n emits: ['onTabLastColumn'],\n methods: {\n filterVisibleColumns: function (columns) {\n return columns.filter((v) => v.isVisible);\n },\n onTab: function (columnIndex) {\n if (columnIndex === this.columns.filter((column) => column.isEditable).length - 1) {\n this.$emit('onTabLastColumn');\n }\n },\n hasColumnError: function (column) {\n return this.errors.some((v) => column.name === v.name);\n },\n onToggleDelete: function (e) {\n atk.eventBus.emit(this.$root.$el.parentElement.id + '-toggle-delete', { rowId: this.rowId });\n },\n onUpdateValue: function (fieldName, value) {\n atk.eventBus.emit(this.$root.$el.parentElement.id + '-update-row', { rowId: this.rowId, fieldName: fieldName, value: value });\n },\n getValue: function (column) {\n return this.rowValues[column.name] || column.default;\n },\n },\n};\n","export default {\n name: 'AtkMultilineTextarea',\n template: '',\n props: ['modelValue'],\n emits: ['update:modelValue'],\n methods: {\n onInput: function (event) {\n this.$emit('update:modelValue', event.target.value);\n },\n },\n};\n","/* global flatpickr */ // loaded after main JS\n\n/**\n * Wrapper for vue-flatpickr-component component.\n *\n * https://github.com/ankurk91/vue-flatpickr-component\n *\n * Properties:\n * config: Any of Flatpickr options\n */\nexport default {\n name: 'AtkDatePicker',\n template: `\n `,\n props: ['config', 'modelValue'],\n data: function () {\n const config = { ...this.config };\n\n if (config.defaultDate && !this.modelValue) {\n config.defaultDate = new Date();\n } else if (this.modelValue) {\n config.defaultDate = this.modelValue;\n }\n\n if (!config.locale) {\n config.locale = flatpickr.l10ns.default;\n }\n\n return {\n flatPickr: config,\n };\n },\n emits: ['setDefault'],\n mounted: function () {\n // if value is not set but default date is, then emit proper string value to parent\n if (!this.modelValue && this.flatPickr.defaultDate) {\n this.onUpdate(\n this.flatPickr.defaultDate instanceof Date\n ? flatpickr.formatDate(this.config.defaultDate, this.config.dateFormat)\n : this.flatPickr.defaultDate\n );\n }\n },\n methods: {\n getFlatpickrValue: function (value) {\n return value;\n },\n onUpdate: function (value) {\n this.$emit('update:modelValue', value);\n },\n },\n};\n","/**\n * Wrapper for Fomantic-UI dropdown component into a lookup component.\n *\n * Properties:\n * config:\n * reference: the reference field name associate with model or hasOne name. This field name will be sent along with URL callback parameter as of 'field=name'.\n * Note: The remaining config object may contain any or SuiDropdown { props: value } pair.\n *\n * modelValue: The selected value.\n * optionalValue: The initial list of options for the dropdown.\n */\nexport default {\n name: 'AtkLookup',\n template: `\n `,\n props: ['config', 'modelValue', 'optionalValue'],\n data: function () {\n const {\n url, reference, ...otherConfig\n } = this.config;\n otherConfig.selection = true;\n\n return {\n dropdownProps: otherConfig,\n url: url || null,\n field: reference,\n query: '',\n temp: '',\n };\n },\n mounted: function () {\n if (this.optionalValue) {\n this.dropdownProps.options = Array.isArray(this.optionalValue) ? this.optionalValue : [this.optionalValue];\n }\n },\n emits: ['update:modelValue'],\n methods: {\n getDropdownValue: function (value) {\n return this.dropdownProps.options.find((item) => item.value === value);\n },\n onUpdate: function (value) {\n this.$emit('update:modelValue', value.value);\n },\n },\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $some = require('../internals/async-iterator-iteration').some;\n\n// `AsyncIterator.prototype.some` method\n// https://github.com/tc39/proposal-async-iterator-helpers\n$({ target: 'AsyncIterator', proto: true, real: true }, {\n some: function some(predicate) {\n return $some(this, predicate);\n }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.iterator.some');\n"],"names":["MultilineRow","name","template","props","data","fields","fieldDefs","created","components","AtkMultilineRow","computed","rows","rowData","emits","methods","onTabLastColumn","rowIndex","length","$emit","isDeletableRow","row","deletables","includes","__atkml","getRowErrors","rowId","errors","MultilineReadonly","MultilineTextarea","AtkDatePicker","AtkLookup","AtkMultilineReadonly","AtkMultilineTextarea","fieldName","cellData","type","inputName","inputValue","fieldValue","getComponent","definition","component","getComponentProps","readOnlyValue","componentProps","onInput","value","$","atk","MultilineBody","MultilineHeader","Object","tableDefault","basic","celled","collapsing","stackable","inverted","form","formName","valueJson","fieldData","eventFields","hasChangeCb","caption","tableProp","tableProps","AtkMultilineHeader","AtkMultilineBody","mounted","buildRowData","updateInputValue","eventBus","on","$root","$el","parentElement","id","payload","onUpdate","i","indexOf","splice","push","isOn","onTabLastRow","isLimitReached","addOnTab","onAdd","newRow","createRow","afterAdd","JSON","parse","fetchExpression","fetchOnUpdateAction","onDelete","atkmlId","deleteRow","afterDelete","updateFieldInRow","clearError","debouncedFx","createDebouncedFx","call","field","default","getUUID","findIndex","filter","error","stringify","jsonValue","hasExpression","some","isExpr","arguments","undefined","$refs","addButton","api","url","method","__atkml_action","postData","context","apiService","suiFetch","stateContext","e","console","findRow","resp","expressions","keys","find","getInputElement","atkmlInput","replaceAll","c","r","Math","floor","random","v","toString","getSpan","getDeletables","getMainToggleState","res","isDeleteDisable","rowLimit","columns","isDeleteAll","filterVisibleColumns","isVisible","onToggleDeleteAll","$nextTick","emit","check","checked","getTextAlign","column","align","isEditable","getVisibleColumns","count","hasError","hasCaption","getErrorMsg","col","msg","isIndeterminate","selectionState","isChecked","MultilineCell","AtkMultilineCell","toDelete","get","isDeletable","set","onTab","columnIndex","hasColumnError","onToggleDelete","onUpdateValue","getValue","rowValues","event","target","config","defaultDate","modelValue","Date","locale","flatpickr","l10ns","flatPickr","formatDate","dateFormat","getFlatpickrValue","reference","otherConfig","selection","dropdownProps","query","temp","optionalValue","options","Array","isArray","getDropdownValue","item"],"sourceRoot":""}
\ No newline at end of file
diff --git a/public/js/atk-vue-multiline.min.js.map b/public/js/atk-vue-multiline.min.js.map
index 875bcf42cd..fe473fe679 100644
--- a/public/js/atk-vue-multiline.min.js.map
+++ b/public/js/atk-vue-multiline.min.js.map
@@ -1 +1 @@
-{"version":3,"file":"js/atk-vue-multiline.min.js","mappings":"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","sources":["webpack://atk/./src/VueComponent/Multiline/MultilineCellComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineReadonlyComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineTextareaComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineHeaderComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineBodyComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineRowComponent.js","webpack://atk/./src/VueComponent/Share/AtkDatePickerComponent.js","webpack://atk/./src/VueComponent/Share/AtkLookupComponent.js","webpack://atk/./node_modules/core-js/modules/esnext.async-iterator.some.js","webpack://atk/./node_modules/core-js/modules/esnext.iterator.some.js"],"sourcesContent":["import MultilineReadonly from './MultilineReadonlyComponent';\nimport MultilineTextarea from './MultilineTextareaComponent';\nimport AtkDatePicker from '../Share/AtkDatePickerComponent';\nimport AtkLookup from '../Share/AtkLookupComponent';\n\nexport default {\n name: 'AtkMultilineCell',\n template: `\n `,\n components: {\n AtkMultilineReadonly: MultilineReadonly,\n AtkMultilineTextarea: MultilineTextarea,\n AtkDatePicker: AtkDatePicker,\n AtkLookup: AtkLookup,\n },\n props: ['cellData', 'fieldValue'],\n data: function () {\n return {\n fieldName: this.cellData.name,\n type: this.cellData.type,\n inputName: '-' + this.cellData.name,\n inputValue: this.fieldValue,\n };\n },\n emits: ['updateValue'],\n methods: {\n getComponent: function () {\n return this.cellData.definition.component;\n },\n getComponentProps: function () {\n if (this.getComponent() === 'AtkMultilineReadonly') {\n return { readOnlyValue: this.fieldValue };\n }\n\n return this.cellData.definition.componentProps;\n },\n onInput: function (value) {\n this.inputValue = value;\n this.$emit('updateValue', this.fieldName, this.inputValue);\n },\n },\n};\n","/**\n * Simply display a readonly value.\n */\nexport default {\n name: 'AtkMultilineReadonly',\n template: '{{readOnlyValue}}
',\n props: ['readOnlyValue'],\n};\n","export default {\n name: 'AtkMultilineTextarea',\n template: '',\n props: ['modelValue'],\n emits: ['update:modelValue'],\n methods: {\n onInput: function (event) {\n this.$emit('update:modelValue', event.target.value);\n },\n },\n};\n","import atk from 'atk';\n\nexport default {\n name: 'AtkMultilineHeader',\n template: `\n \n \n \n \n \n {{getErrorMsg(column)}}\n \n \n \n {{caption}}\n \n \n \n \n \n \n {{column.caption}}
\n \n {{getErrorMsg(column)}}\n
\n \n \n `,\n props: ['fields', 'selectionState', 'errors', 'caption'],\n data: function () {\n return { columns: this.fields, isDeleteAll: false };\n },\n methods: {\n filterVisibleColumns: function (columns) {\n return columns.filter((v) => v.isVisible);\n },\n onToggleDeleteAll: function () {\n this.$nextTick(() => {\n atk.eventBus.emit(this.$root.$el.parentElement.id + '-toggle-delete-all', { isOn: this.$refs.check.checked });\n });\n },\n getTextAlign: function (column) {\n let align = 'left';\n if (!column.isEditable) {\n switch (column.type) {\n case 'smallint':\n case 'integer':\n case 'bigint':\n case 'float':\n case 'atk4_money': {\n align = 'right';\n\n break;\n }\n }\n }\n\n return align;\n },\n getVisibleColumns: function () {\n let count = 1; // add deletable column;\n for (const field of this.columns) {\n count = field.isVisible ? count + 1 : count;\n }\n\n return count;\n },\n hasError: function () {\n return Object.keys(this.errors).length > 0;\n },\n hasCaption: function () {\n return this.caption;\n },\n getErrorMsg: function (column) {\n if (this.hasError()) {\n const rows = Object.keys(this.errors);\n for (const row of rows) {\n const error = this.errors[row].filter((col) => col.name === column.name);\n if (error.length > 0) {\n return error[0].msg;\n }\n }\n }\n\n return null;\n },\n },\n computed: {\n isIndeterminate: function () {\n return this.selectionState === 'indeterminate';\n },\n isChecked: function () {\n return this.selectionState === 'on';\n },\n },\n};\n","import $ from 'external/jquery';\nimport atk from 'atk';\nimport MultilineBody from './MultilineBodyComponent';\nimport MultilineHeader from './MultilineHeaderComponent';\n\nexport default {\n name: 'AtkMultiline',\n template: `\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
`,\n props: {\n data: Object,\n },\n data: function () {\n const tableDefault = {\n basic: false,\n celled: false,\n collapsing: false,\n stackable: false,\n inverted: false,\n };\n\n return {\n form: this.data.formName,\n valueJson: this.data.inputValue,\n name: this.data.inputName,\n rowData: [],\n fieldData: this.data.fields || [],\n eventFields: this.data.eventFields || [],\n deletables: [],\n hasChangeCb: this.data.hasChangeCb,\n errors: {},\n caption: this.data.caption || null,\n tableProp: { ...tableDefault, ...this.data.tableProps },\n };\n },\n components: {\n AtkMultilineHeader: MultilineHeader,\n AtkMultilineBody: MultilineBody,\n },\n mounted: function () {\n this.rowData = this.buildRowData(this.valueJson ?? '[]');\n this.updateInputValue();\n\n atk.eventBus.on(this.$root.$el.parentElement.id + '-update-row', (payload) => {\n this.onUpdate(payload.rowId, payload.fieldName, payload.value);\n });\n\n atk.eventBus.on(this.$root.$el.parentElement.id + '-toggle-delete', (payload) => {\n const i = this.deletables.indexOf(payload.rowId);\n if (i !== -1) {\n this.deletables.splice(i, 1);\n } else {\n this.deletables.push(payload.rowId);\n }\n });\n\n atk.eventBus.on(this.$root.$el.parentElement.id + '-toggle-delete-all', (payload) => {\n this.deletables = [];\n if (payload.isOn) {\n for (const row of this.rowData) {\n this.deletables.push(row.__atkml);\n }\n }\n });\n\n atk.eventBus.on(this.$root.$el.parentElement.id + '-multiline-rows-error', (payload) => {\n this.errors = { ...payload.errors };\n });\n },\n methods: {\n onTabLastRow: function () {\n if (!this.isLimitReached && this.data.addOnTab) {\n this.onAdd();\n }\n },\n onAdd: function () {\n const newRow = this.createRow(this.data.fields);\n this.rowData.push(newRow);\n this.updateInputValue();\n if (this.data.afterAdd && typeof this.data.afterAdd === 'function') {\n this.data.afterAdd(JSON.parse(this.valueJson));\n }\n this.fetchExpression(newRow.__atkml);\n this.fetchOnUpdateAction();\n },\n onDelete: function () {\n for (const atkmlId of this.deletables) {\n this.deleteRow(atkmlId);\n }\n this.deletables = [];\n this.updateInputValue();\n this.fetchOnUpdateAction();\n if (this.data.afterDelete && typeof this.data.afterDelete === 'function') {\n this.data.afterDelete(JSON.parse(this.valueJson));\n }\n },\n onUpdate: function (atkmlId, fieldName, value) {\n this.updateFieldInRow(atkmlId, fieldName, value);\n this.clearError(atkmlId, fieldName);\n this.updateInputValue();\n\n if (!this.onUpdate.debouncedFx) {\n this.onUpdate.debouncedFx = atk.createDebouncedFx(() => {\n this.onUpdate.debouncedFx = null;\n this.fetchExpression(atkmlId);\n this.fetchOnUpdateAction(fieldName);\n }, 250);\n }\n this.onUpdate.debouncedFx.call(this);\n },\n /**\n * Creates a new row of data and\n * set values to default if available.\n */\n createRow: function (fields) {\n const row = {};\n for (const field of fields) {\n row[field.name] = field.default;\n }\n row.__atkml = this.getUUID();\n\n return row;\n },\n deleteRow: function (atkmlId) {\n this.rowData.splice(this.rowData.findIndex((row) => row.__atkml === atkmlId), 1);\n delete this.errors[atkmlId];\n },\n /**\n * Update the value of the field in rowData.\n */\n updateFieldInRow: function (atkmlId, fieldName, value) {\n for (const row of this.rowData) {\n if (row.__atkml === atkmlId) {\n row[fieldName] = value;\n }\n }\n },\n clearError: function (atkmlId, fieldName) {\n if (atkmlId in this.errors) {\n const errors = this.errors[atkmlId].filter((error) => error.name !== fieldName);\n this.errors[atkmlId] = [...errors];\n if (errors.length === 0) {\n delete this.errors[atkmlId];\n }\n }\n },\n /**\n * Update Multi-line Form input with all rowData values\n * as JSON string.\n */\n updateInputValue: function () {\n this.valueJson = JSON.stringify(this.rowData);\n },\n /**\n * Build rowData from JSON string.\n */\n buildRowData: function (jsonValue) {\n const rows = JSON.parse(jsonValue);\n for (const row of rows) {\n row.__atkml = this.getUUID();\n }\n\n return rows;\n },\n /**\n * Check if one of the field use expression.\n */\n hasExpression: function () {\n return this.fieldData.some((field) => field.isExpr);\n },\n /**\n * Send on change action to server.\n */\n fetchOnUpdateAction: function (fieldName = null) {\n if (this.hasChangeCb && (fieldName === null || this.eventFields.includes(fieldName))) {\n $(this.$refs.addButton.$el).api({\n on: 'now',\n url: this.data.url,\n method: 'POST',\n data: { __atkml_action: 'on-change', rows: this.valueJson },\n });\n }\n },\n postData: async function (row) {\n const data = { ...row };\n const context = this.$refs.addButton.$el;\n data.__atkml_action = 'update-row';\n try {\n return await atk.apiService.suiFetch(this.data.url, { data: data, method: 'POST', stateContext: context });\n } catch (e) {\n console.error(e);\n }\n },\n /**\n * Get expressions values from server.\n */\n fetchExpression: async function (atkmlId) {\n if (this.hasExpression()) {\n const row = this.findRow(atkmlId);\n // server will return expression field/value if defined\n if (row) {\n const resp = await this.postData(row);\n if (resp.expressions) {\n const fields = Object.keys(resp.expressions);\n for (const field of fields) {\n this.updateFieldInRow(atkmlId, field, resp.expressions[field]);\n }\n this.updateInputValue();\n }\n }\n }\n },\n findRow: function (atkmlId) {\n return this.rowData.find((row) => row.__atkml === atkmlId);\n },\n getInputElement: function () {\n return this.$refs.atkmlInput;\n },\n /**\n * UUID v4 generator.\n */\n getUUID: function () {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replaceAll(/[xy]/g, (c) => {\n const r = Math.floor(Math.random() * 16);\n const v = c === 'x' ? r : r & (0x3 | 0x8); // eslint-disable-line no-bitwise\n\n return v.toString(16);\n });\n },\n },\n computed: {\n getSpan: function () {\n return this.fieldData.length - 1;\n },\n getDeletables: function () {\n return this.deletables;\n },\n /**\n * Return Delete all checkbox state base on\n * deletables entries.\n */\n getMainToggleState: function () {\n let res = 'off';\n if (this.deletables.length > 0) {\n res = this.deletables.length === this.rowData.length\n ? 'on'\n : 'indeterminate';\n }\n\n return res;\n },\n isDeleteDisable: function () {\n return this.deletables.length === 0;\n },\n isLimitReached: function () {\n if (this.data.rowLimit === 0) {\n return false;\n }\n\n return this.data.rowLimit < this.rowData.length + 1;\n },\n },\n};\n","import MultilineRow from './MultilineRowComponent';\n\nexport default {\n name: 'AtkMultilineBody',\n template: `\n \n \n `,\n props: ['fieldDefs', 'rowData', 'deletables', 'errors'],\n data: function () {\n return { fields: this.fieldDefs };\n },\n created: function () {},\n components: {\n AtkMultilineRow: MultilineRow,\n },\n computed: {\n rows: function () {\n return this.rowData;\n },\n },\n emits: ['onTabLastRow'],\n methods: {\n onTabLastColumn: function (rowIndex) {\n if (rowIndex + 1 === this.rowData.length) {\n this.$emit('onTabLastRow');\n }\n },\n isDeletableRow: function (row) {\n return this.deletables.includes(row.__atkml);\n },\n getRowErrors: function (rowId) {\n return this.errors[rowId] ?? [];\n },\n },\n};\n","import atk from 'atk';\nimport MultilineCell from './MultilineCellComponent';\n\n/**\n * This will create a table td element using SuiTableCell.\n * The td element is created only if column as set isVisible = true;\n * The td element will add a multiline cell element.\n * the multiline cell will set it's own template component depending on the fieldType.\n * getValue\n */\nexport default {\n name: 'AtkMultilineRow',\n template: `\n \n \n \n \n \n \n \n `,\n props: ['fields', 'rowId', 'isDeletable', 'rowValues', 'errors'],\n data: function () {\n return { columns: this.fields };\n },\n components: {\n AtkMultilineCell: MultilineCell,\n },\n computed: {\n /**\n * toDelete is bind by v-model, thus we need a setter for\n * computed property to work.\n * When isDeletable is pass, will set checkbox according to it's value.\n */\n toDelete: {\n get: function () {\n return this.isDeletable;\n },\n set: function (v) {\n return v;\n },\n },\n },\n emits: ['onTabLastColumn'],\n methods: {\n filterVisibleColumns: function (columns) {\n return columns.filter((v) => v.isVisible);\n },\n onTab: function (columnIndex) {\n if (columnIndex === this.columns.filter((column) => column.isEditable).length - 1) {\n this.$emit('onTabLastColumn');\n }\n },\n hasColumnError: function (column) {\n return this.errors.some((v) => column.name === v.name);\n },\n onToggleDelete: function (e) {\n atk.eventBus.emit(this.$root.$el.parentElement.id + '-toggle-delete', { rowId: this.rowId });\n },\n onUpdateValue: function (fieldName, value) {\n atk.eventBus.emit(this.$root.$el.parentElement.id + '-update-row', { rowId: this.rowId, fieldName: fieldName, value: value });\n },\n getValue: function (column) {\n return this.rowValues[column.name] || column.default;\n },\n },\n};\n","/* global flatpickr */ // loaded after main JS\n\n/**\n * Wrapper for vue-flatpickr-component component.\n *\n * https://github.com/ankurk91/vue-flatpickr-component\n *\n * Properties:\n * config: Any of Flatpickr options\n */\nexport default {\n name: 'AtkDatePicker',\n template: `\n `,\n props: ['config', 'modelValue'],\n data: function () {\n const config = { ...this.config };\n\n if (config.defaultDate && !this.modelValue) {\n config.defaultDate = new Date();\n } else if (this.modelValue) {\n config.defaultDate = this.modelValue;\n }\n\n if (!config.locale) {\n config.locale = flatpickr.l10ns.default;\n }\n\n return {\n flatPickr: config,\n };\n },\n emits: ['setDefault'],\n mounted: function () {\n // if value is not set but default date is, then emit proper string value to parent\n if (!this.modelValue && this.flatPickr.defaultDate) {\n this.onUpdate(\n this.flatPickr.defaultDate instanceof Date\n ? flatpickr.formatDate(this.config.defaultDate, this.config.dateFormat)\n : this.flatPickr.defaultDate\n );\n }\n },\n methods: {\n getFlatpickrValue: function (value) {\n return value;\n },\n onUpdate: function (value) {\n this.$emit('update:modelValue', value);\n },\n },\n};\n","/**\n * Wrapper for Fomantic-UI dropdown component into a lookup component.\n *\n * Properties:\n * config:\n * reference: the reference field name associate with model or hasOne name. This field name will be sent along with URL callback parameter as of 'field=name'.\n * Note: The remaining config object may contain any or SuiDropdown { props: value } pair.\n *\n * modelValue: The selected value.\n * optionalValue: The initial list of options for the dropdown.\n */\nexport default {\n name: 'AtkLookup',\n template: `\n `,\n props: ['config', 'modelValue', 'optionalValue'],\n data: function () {\n const {\n url, reference, ...otherConfig\n } = this.config;\n otherConfig.selection = true;\n\n return {\n dropdownProps: otherConfig,\n url: url || null,\n field: reference,\n query: '',\n temp: '',\n };\n },\n mounted: function () {\n if (this.optionalValue) {\n this.dropdownProps.options = Array.isArray(this.optionalValue) ? this.optionalValue : [this.optionalValue];\n }\n },\n emits: ['update:modelValue'],\n methods: {\n getDropdownValue: function (value) {\n return this.dropdownProps.options.find((item) => item.value === value);\n },\n onUpdate: function (value) {\n this.$emit('update:modelValue', value.value);\n },\n },\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $some = require('../internals/async-iterator-iteration').some;\n\n// `AsyncIterator.prototype.some` method\n// https://github.com/tc39/proposal-async-iterator-helpers\n$({ target: 'AsyncIterator', proto: true, real: true }, {\n some: function some(predicate) {\n return $some(this, predicate);\n }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.iterator.some');\n"],"names":["name","template","components","AtkMultilineReadonly","props","AtkMultilineTextarea","emits","methods","onInput","event","this","$emit","target","value","AtkDatePicker","AtkLookup","data","fieldName","cellData","type","inputName","inputValue","fieldValue","getComponent","definition","component","getComponentProps","readOnlyValue","componentProps","columns","fields","isDeleteAll","filterVisibleColumns","filter","v","isVisible","onToggleDeleteAll","$nextTick","atk","eventBus","emit","$root","$el","parentElement","id","isOn","$refs","check","checked","getTextAlign","column","align","isEditable","getVisibleColumns","count","field","hasError","Object","keys","errors","length","hasCaption","caption","getErrorMsg","rows","row","error","col","msg","computed","isIndeterminate","selectionState","isChecked","form","formName","valueJson","rowData","fieldData","eventFields","deletables","hasChangeCb","tableProp","basic","celled","collapsing","stackable","inverted","tableProps","AtkMultilineHeader","MultilineHeader","AtkMultilineBody","fieldDefs","created","AtkMultilineRow","AtkMultilineCell","MultilineCell","toDelete","get","isDeletable","set","onTab","columnIndex","hasColumnError","some","onToggleDelete","e","rowId","onUpdateValue","getValue","rowValues","default","onTabLastColumn","rowIndex","isDeletableRow","includes","__atkml","getRowErrors","mounted","buildRowData","updateInputValue","on","payload","onUpdate","i","indexOf","splice","push","onTabLastRow","isLimitReached","addOnTab","onAdd","newRow","createRow","afterAdd","JSON","parse","fetchExpression","fetchOnUpdateAction","onDelete","atkmlId","deleteRow","afterDelete","updateFieldInRow","clearError","debouncedFx","createDebouncedFx","call","getUUID","findIndex","stringify","jsonValue","hasExpression","isExpr","arguments","undefined","$","addButton","api","url","method","__atkml_action","postData","async","context","apiService","suiFetch","stateContext","console","findRow","resp","expressions","find","getInputElement","atkmlInput","replaceAll","c","r","Math","floor","random","toString","getSpan","getDeletables","getMainToggleState","res","isDeleteDisable","rowLimit","config","defaultDate","modelValue","Date","locale","flatpickr","l10ns","flatPickr","formatDate","dateFormat","getFlatpickrValue","reference","otherConfig","selection","dropdownProps","query","temp","optionalValue","options","Array","isArray","getDropdownValue","item","$some","proto","real","predicate"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"js/atk-vue-multiline.min.js","mappings":"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","sources":["webpack://atk/./src/VueComponent/Multiline/MultilineCellComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineReadonlyComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineTextareaComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineHeaderComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineBodyComponent.js","webpack://atk/./src/VueComponent/Multiline/MultilineRowComponent.js","webpack://atk/./src/VueComponent/Share/AtkDatePickerComponent.js","webpack://atk/./src/VueComponent/Share/AtkLookupComponent.js","webpack://atk/./node_modules/core-js/modules/esnext.async-iterator.some.js","webpack://atk/./node_modules/core-js/modules/esnext.iterator.some.js"],"sourcesContent":["import MultilineReadonly from './MultilineReadonlyComponent';\nimport MultilineTextarea from './MultilineTextareaComponent';\nimport AtkDatePicker from '../Share/AtkDatePickerComponent';\nimport AtkLookup from '../Share/AtkLookupComponent';\n\nexport default {\n name: 'AtkMultilineCell',\n template: `\n `,\n components: {\n AtkMultilineReadonly: MultilineReadonly,\n AtkMultilineTextarea: MultilineTextarea,\n AtkDatePicker: AtkDatePicker,\n AtkLookup: AtkLookup,\n },\n props: ['cellData', 'fieldValue'],\n data: function () {\n return {\n fieldName: this.cellData.name,\n type: this.cellData.type,\n inputName: '-' + this.cellData.name,\n inputValue: this.fieldValue,\n };\n },\n emits: ['updateValue'],\n methods: {\n getComponent: function () {\n return this.cellData.definition.component;\n },\n getComponentProps: function () {\n if (this.getComponent() === 'AtkMultilineReadonly') {\n return { readOnlyValue: this.fieldValue };\n }\n\n return this.cellData.definition.componentProps;\n },\n onInput: function (value) {\n this.inputValue = value;\n this.$emit('updateValue', this.fieldName, this.inputValue);\n },\n },\n};\n","/**\n * Simply display a readonly value.\n */\nexport default {\n name: 'AtkMultilineReadonly',\n template: '{{readOnlyValue}}
',\n props: ['readOnlyValue'],\n};\n","export default {\n name: 'AtkMultilineTextarea',\n template: '',\n props: ['modelValue'],\n emits: ['update:modelValue'],\n methods: {\n onInput: function (event) {\n this.$emit('update:modelValue', event.target.value);\n },\n },\n};\n","import atk from 'atk';\n\nexport default {\n name: 'AtkMultilineHeader',\n template: `\n \n \n \n \n \n {{getErrorMsg(column)}}\n \n \n \n {{caption}}\n \n \n \n \n \n \n {{column.caption}}
\n \n {{getErrorMsg(column)}}\n
\n \n \n `,\n props: ['fields', 'selectionState', 'errors', 'caption'],\n data: function () {\n return { columns: this.fields, isDeleteAll: false };\n },\n methods: {\n filterVisibleColumns: function (columns) {\n return columns.filter((v) => v.isVisible);\n },\n onToggleDeleteAll: function () {\n this.$nextTick(() => {\n atk.eventBus.emit(this.$root.$el.parentElement.id + '-toggle-delete-all', { isOn: this.$refs.check.checked });\n });\n },\n getTextAlign: function (column) {\n let align = 'left';\n if (!column.isEditable) {\n switch (column.type) {\n case 'smallint':\n case 'integer':\n case 'bigint':\n case 'float':\n case 'atk4_money': {\n align = 'right';\n\n break;\n }\n }\n }\n\n return align;\n },\n getVisibleColumns: function () {\n let count = 1; // add deletable column;\n for (const field of this.columns) {\n count = field.isVisible ? count + 1 : count;\n }\n\n return count;\n },\n hasError: function () {\n return Object.keys(this.errors).length > 0;\n },\n hasCaption: function () {\n return this.caption;\n },\n getErrorMsg: function (column) {\n if (this.hasError()) {\n const rows = Object.keys(this.errors);\n for (const row of rows) {\n const error = this.errors[row].filter((col) => col.name === column.name);\n if (error.length > 0) {\n return error[0].msg;\n }\n }\n }\n\n return null;\n },\n },\n computed: {\n isIndeterminate: function () {\n return this.selectionState === 'indeterminate';\n },\n isChecked: function () {\n return this.selectionState === 'on';\n },\n },\n};\n","import $ from 'external/jquery';\nimport atk from 'atk';\nimport MultilineBody from './MultilineBodyComponent';\nimport MultilineHeader from './MultilineHeaderComponent';\n\nexport default {\n name: 'AtkMultiline',\n template: `\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
`,\n props: {\n data: Object,\n },\n data: function () {\n const tableDefault = {\n basic: false,\n celled: false,\n collapsing: false,\n stackable: false,\n inverted: false,\n };\n\n return {\n form: this.data.formName,\n valueJson: this.data.inputValue,\n name: this.data.inputName,\n rowData: [],\n fieldData: this.data.fields || [],\n eventFields: this.data.eventFields || [],\n deletables: [],\n hasChangeCb: this.data.hasChangeCb,\n errors: {},\n caption: this.data.caption || null,\n tableProp: { ...tableDefault, ...this.data.tableProps },\n };\n },\n components: {\n AtkMultilineHeader: MultilineHeader,\n AtkMultilineBody: MultilineBody,\n },\n mounted: function () {\n this.rowData = this.buildRowData(this.valueJson ?? '[]');\n this.updateInputValue();\n\n atk.eventBus.on(this.$root.$el.parentElement.id + '-update-row', (payload) => {\n this.onUpdate(payload.rowId, payload.fieldName, payload.value);\n });\n\n atk.eventBus.on(this.$root.$el.parentElement.id + '-toggle-delete', (payload) => {\n const i = this.deletables.indexOf(payload.rowId);\n if (i !== -1) {\n this.deletables.splice(i, 1);\n } else {\n this.deletables.push(payload.rowId);\n }\n });\n\n atk.eventBus.on(this.$root.$el.parentElement.id + '-toggle-delete-all', (payload) => {\n this.deletables = [];\n if (payload.isOn) {\n for (const row of this.rowData) {\n this.deletables.push(row.__atkml);\n }\n }\n });\n\n atk.eventBus.on(this.$root.$el.parentElement.id + '-multiline-rows-error', (payload) => {\n this.errors = { ...payload.errors };\n });\n },\n methods: {\n onTabLastRow: function () {\n if (!this.isLimitReached && this.data.addOnTab) {\n this.onAdd();\n }\n },\n onAdd: function () {\n const newRow = this.createRow(this.data.fields);\n this.rowData.push(newRow);\n this.updateInputValue();\n if (this.data.afterAdd && typeof this.data.afterAdd === 'function') {\n this.data.afterAdd(JSON.parse(this.valueJson));\n }\n this.fetchExpression(newRow.__atkml);\n this.fetchOnUpdateAction();\n },\n onDelete: function () {\n for (const atkmlId of this.deletables) {\n this.deleteRow(atkmlId);\n }\n this.deletables = [];\n this.updateInputValue();\n this.fetchOnUpdateAction();\n if (this.data.afterDelete && typeof this.data.afterDelete === 'function') {\n this.data.afterDelete(JSON.parse(this.valueJson));\n }\n },\n onUpdate: function (atkmlId, fieldName, value) {\n this.updateFieldInRow(atkmlId, fieldName, value);\n this.clearError(atkmlId, fieldName);\n this.updateInputValue();\n\n if (!this.onUpdate.debouncedFx) {\n this.onUpdate.debouncedFx = atk.createDebouncedFx(() => {\n this.onUpdate.debouncedFx = null;\n this.fetchExpression(atkmlId);\n this.fetchOnUpdateAction(fieldName);\n }, 250);\n }\n this.onUpdate.debouncedFx.call(this);\n },\n /**\n * Creates a new row of data and\n * set values to default if available.\n */\n createRow: function (fields) {\n const row = {};\n for (const field of fields) {\n row[field.name] = field.default;\n }\n row.__atkml = this.getUUID();\n\n return row;\n },\n deleteRow: function (atkmlId) {\n this.rowData.splice(this.rowData.findIndex((row) => row.__atkml === atkmlId), 1);\n delete this.errors[atkmlId];\n },\n /**\n * Update the value of the field in rowData.\n */\n updateFieldInRow: function (atkmlId, fieldName, value) {\n for (const row of this.rowData) {\n if (row.__atkml === atkmlId) {\n row[fieldName] = value;\n }\n }\n },\n clearError: function (atkmlId, fieldName) {\n if (atkmlId in this.errors) {\n const errors = this.errors[atkmlId].filter((error) => error.name !== fieldName);\n this.errors[atkmlId] = [...errors];\n if (errors.length === 0) {\n delete this.errors[atkmlId];\n }\n }\n },\n /**\n * Update Multi-line Form input with all rowData values\n * as JSON string.\n */\n updateInputValue: function () {\n this.valueJson = JSON.stringify(this.rowData);\n },\n /**\n * Build rowData from JSON string.\n */\n buildRowData: function (jsonValue) {\n const rows = JSON.parse(jsonValue);\n for (const row of rows) {\n row.__atkml = this.getUUID();\n }\n\n return rows;\n },\n /**\n * Check if one of the field use expression.\n */\n hasExpression: function () {\n return this.fieldData.some((field) => field.isExpr);\n },\n /**\n * Send on change action to server.\n */\n fetchOnUpdateAction: function (fieldName = null) {\n if (this.hasChangeCb && (fieldName === null || this.eventFields.includes(fieldName))) {\n $(this.$refs.addButton.$el).api({\n on: 'now',\n url: this.data.url,\n method: 'POST',\n data: { __atkml_action: 'on-change', rows: this.valueJson },\n });\n }\n },\n postData: async function (row) {\n const data = { ...row };\n const context = this.$refs.addButton.$el;\n data.__atkml_action = 'update-row';\n try {\n return await atk.apiService.suiFetch(this.data.url, { data: data, method: 'POST', stateContext: context });\n } catch (e) {\n console.error(e);\n }\n },\n /**\n * Get expressions values from server.\n */\n fetchExpression: async function (atkmlId) {\n if (this.hasExpression()) {\n const row = this.findRow(atkmlId);\n // server will return expression field/value if defined\n if (row) {\n const resp = await this.postData(row);\n if (resp.expressions) {\n const fields = Object.keys(resp.expressions);\n for (const field of fields) {\n this.updateFieldInRow(atkmlId, field, resp.expressions[field]);\n }\n this.updateInputValue();\n }\n }\n }\n },\n findRow: function (atkmlId) {\n return this.rowData.find((row) => row.__atkml === atkmlId);\n },\n getInputElement: function () {\n return this.$refs.atkmlInput;\n },\n /**\n * UUID v4 generator.\n */\n getUUID: function () {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replaceAll(/[xy]/g, (c) => {\n const r = Math.floor(Math.random() * 16);\n const v = c === 'x' ? r : r & (0x3 | 0x8); // eslint-disable-line no-bitwise\n\n return v.toString(16);\n });\n },\n },\n computed: {\n getSpan: function () {\n return this.fieldData.length - 1;\n },\n getDeletables: function () {\n return this.deletables;\n },\n /**\n * Return Delete all checkbox state base on\n * deletables entries.\n */\n getMainToggleState: function () {\n let res = 'off';\n if (this.deletables.length > 0) {\n res = this.deletables.length === this.rowData.length\n ? 'on'\n : 'indeterminate';\n }\n\n return res;\n },\n isDeleteDisable: function () {\n return this.deletables.length === 0;\n },\n isLimitReached: function () {\n if (this.data.rowLimit === 0) {\n return false;\n }\n\n return this.data.rowLimit < this.rowData.length + 1;\n },\n },\n};\n","import MultilineRow from './MultilineRowComponent';\n\nexport default {\n name: 'AtkMultilineBody',\n template: `\n \n \n `,\n props: ['fieldDefs', 'rowData', 'deletables', 'errors'],\n data: function () {\n return { fields: this.fieldDefs };\n },\n created: function () {},\n components: {\n AtkMultilineRow: MultilineRow,\n },\n computed: {\n rows: function () {\n return this.rowData;\n },\n },\n emits: ['onTabLastRow'],\n methods: {\n onTabLastColumn: function (rowIndex) {\n if (rowIndex + 1 === this.rowData.length) {\n this.$emit('onTabLastRow');\n }\n },\n isDeletableRow: function (row) {\n return this.deletables.includes(row.__atkml);\n },\n getRowErrors: function (rowId) {\n return this.errors[rowId] ?? [];\n },\n },\n};\n","import atk from 'atk';\nimport MultilineCell from './MultilineCellComponent';\n\n/**\n * This will create a table td element using SuiTableCell.\n * The td element is created only if column as set isVisible = true.\n * The td element will add a multiline cell element.\n * The multiline cell will set it's own template component depending on the fieldType.\n */\nexport default {\n name: 'AtkMultilineRow',\n template: `\n \n \n \n \n \n \n \n `,\n props: ['fields', 'rowId', 'isDeletable', 'rowValues', 'errors'],\n data: function () {\n return { columns: this.fields };\n },\n components: {\n AtkMultilineCell: MultilineCell,\n },\n computed: {\n /**\n * toDelete is bind by v-model, thus we need a setter for\n * computed property to work.\n * When isDeletable is pass, will set checkbox according to it's value.\n */\n toDelete: {\n get: function () {\n return this.isDeletable;\n },\n set: function (v) {\n return v;\n },\n },\n },\n emits: ['onTabLastColumn'],\n methods: {\n filterVisibleColumns: function (columns) {\n return columns.filter((v) => v.isVisible);\n },\n onTab: function (columnIndex) {\n if (columnIndex === this.columns.filter((column) => column.isEditable).length - 1) {\n this.$emit('onTabLastColumn');\n }\n },\n hasColumnError: function (column) {\n return this.errors.some((v) => column.name === v.name);\n },\n onToggleDelete: function (e) {\n atk.eventBus.emit(this.$root.$el.parentElement.id + '-toggle-delete', { rowId: this.rowId });\n },\n onUpdateValue: function (fieldName, value) {\n atk.eventBus.emit(this.$root.$el.parentElement.id + '-update-row', { rowId: this.rowId, fieldName: fieldName, value: value });\n },\n getValue: function (column) {\n return this.rowValues[column.name] || column.default;\n },\n },\n};\n","/* global flatpickr */ // loaded after main JS\n\n/**\n * Wrapper for vue-flatpickr-component component.\n *\n * https://github.com/ankurk91/vue-flatpickr-component\n *\n * Properties:\n * config: Any of Flatpickr options\n */\nexport default {\n name: 'AtkDatePicker',\n template: `\n `,\n props: ['config', 'modelValue'],\n data: function () {\n const config = { ...this.config };\n\n if (config.defaultDate && !this.modelValue) {\n config.defaultDate = new Date();\n } else if (this.modelValue) {\n config.defaultDate = this.modelValue;\n }\n\n if (!config.locale) {\n config.locale = flatpickr.l10ns.default;\n }\n\n return {\n flatPickr: config,\n };\n },\n emits: ['setDefault'],\n mounted: function () {\n // if value is not set but default date is, then emit proper string value to parent\n if (!this.modelValue && this.flatPickr.defaultDate) {\n this.onUpdate(\n this.flatPickr.defaultDate instanceof Date\n ? flatpickr.formatDate(this.config.defaultDate, this.config.dateFormat)\n : this.flatPickr.defaultDate\n );\n }\n },\n methods: {\n getFlatpickrValue: function (value) {\n return value;\n },\n onUpdate: function (value) {\n this.$emit('update:modelValue', value);\n },\n },\n};\n","/**\n * Wrapper for Fomantic-UI dropdown component into a lookup component.\n *\n * Properties:\n * config:\n * reference: the reference field name associate with model or hasOne name. This field name will be sent along with URL callback parameter as of 'field=name'.\n * Note: The remaining config object may contain any or SuiDropdown { props: value } pair.\n *\n * modelValue: The selected value.\n * optionalValue: The initial list of options for the dropdown.\n */\nexport default {\n name: 'AtkLookup',\n template: `\n `,\n props: ['config', 'modelValue', 'optionalValue'],\n data: function () {\n const {\n url, reference, ...otherConfig\n } = this.config;\n otherConfig.selection = true;\n\n return {\n dropdownProps: otherConfig,\n url: url || null,\n field: reference,\n query: '',\n temp: '',\n };\n },\n mounted: function () {\n if (this.optionalValue) {\n this.dropdownProps.options = Array.isArray(this.optionalValue) ? this.optionalValue : [this.optionalValue];\n }\n },\n emits: ['update:modelValue'],\n methods: {\n getDropdownValue: function (value) {\n return this.dropdownProps.options.find((item) => item.value === value);\n },\n onUpdate: function (value) {\n this.$emit('update:modelValue', value.value);\n },\n },\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $some = require('../internals/async-iterator-iteration').some;\n\n// `AsyncIterator.prototype.some` method\n// https://github.com/tc39/proposal-async-iterator-helpers\n$({ target: 'AsyncIterator', proto: true, real: true }, {\n some: function some(predicate) {\n return $some(this, predicate);\n }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.iterator.some');\n"],"names":["name","template","components","AtkMultilineReadonly","props","AtkMultilineTextarea","emits","methods","onInput","event","this","$emit","target","value","AtkDatePicker","AtkLookup","data","fieldName","cellData","type","inputName","inputValue","fieldValue","getComponent","definition","component","getComponentProps","readOnlyValue","componentProps","columns","fields","isDeleteAll","filterVisibleColumns","filter","v","isVisible","onToggleDeleteAll","$nextTick","atk","eventBus","emit","$root","$el","parentElement","id","isOn","$refs","check","checked","getTextAlign","column","align","isEditable","getVisibleColumns","count","field","hasError","Object","keys","errors","length","hasCaption","caption","getErrorMsg","rows","row","error","col","msg","computed","isIndeterminate","selectionState","isChecked","form","formName","valueJson","rowData","fieldData","eventFields","deletables","hasChangeCb","tableProp","basic","celled","collapsing","stackable","inverted","tableProps","AtkMultilineHeader","MultilineHeader","AtkMultilineBody","fieldDefs","created","AtkMultilineRow","AtkMultilineCell","MultilineCell","toDelete","get","isDeletable","set","onTab","columnIndex","hasColumnError","some","onToggleDelete","e","rowId","onUpdateValue","getValue","rowValues","default","onTabLastColumn","rowIndex","isDeletableRow","includes","__atkml","getRowErrors","mounted","buildRowData","updateInputValue","on","payload","onUpdate","i","indexOf","splice","push","onTabLastRow","isLimitReached","addOnTab","onAdd","newRow","createRow","afterAdd","JSON","parse","fetchExpression","fetchOnUpdateAction","onDelete","atkmlId","deleteRow","afterDelete","updateFieldInRow","clearError","debouncedFx","createDebouncedFx","call","getUUID","findIndex","stringify","jsonValue","hasExpression","isExpr","arguments","undefined","$","addButton","api","url","method","__atkml_action","postData","async","context","apiService","suiFetch","stateContext","console","findRow","resp","expressions","find","getInputElement","atkmlInput","replaceAll","c","r","Math","floor","random","toString","getSpan","getDeletables","getMainToggleState","res","isDeleteDisable","rowLimit","config","defaultDate","modelValue","Date","locale","flatpickr","l10ns","flatPickr","formatDate","dateFormat","getFlatpickrValue","reference","otherConfig","selection","dropdownProps","query","temp","optionalValue","options","Array","isArray","getDropdownValue","item","$some","proto","real","predicate"],"sourceRoot":""}
\ No newline at end of file
diff --git a/src/Form.php b/src/Form.php
index be9b2f33d9..9adf4ef92d 100644
--- a/src/Form.php
+++ b/src/Form.php
@@ -13,7 +13,6 @@
use Atk4\Data\Reference\ContainsMany;
use Atk4\Data\ValidationException;
use Atk4\Ui\Form\Control;
-use Atk4\Ui\Js\Jquery;
use Atk4\Ui\Js\JsBlock;
use Atk4\Ui\Js\JsChain;
use Atk4\Ui\Js\JsConditionalForm;
@@ -453,6 +452,10 @@ protected function loadPost(): void
try {
if ($control instanceof Control\Dropdown || $control instanceof Control\Lookup || $control instanceof Control\Radio) { // this condition is definitely unacceptable, also should Control::set() be in the catch?
+ if (($control instanceof Control\Dropdown || $control instanceof Control\Lookup) && $control->multiple && $control->entityField->getField()->type === 'json') {
+ $postRawValue = $this->getApp()->encodeJson(explode(',', $postRawValue));
+ }
+
$control->set($this->getApp()->uiPersistence->typecastAttributeLoadField($control->entityField->getField(), $postRawValue));
} else {
$control->set($this->getApp()->uiPersistence->typecastLoadField($control->entityField->getField(), $postRawValue));
diff --git a/src/Form/Control/Dropdown.php b/src/Form/Control/Dropdown.php
index 60e25326d4..8b2c40cfd1 100644
--- a/src/Form/Control/Dropdown.php
+++ b/src/Form/Control/Dropdown.php
@@ -110,20 +110,10 @@ public function getValue()
return $this->entityField !== null
? ($this->multiple && $this->entityField->getField()->type === 'json' && is_array($this->entityField->get())
? implode(', ', $this->entityField->get())
- : $this->entityField->get())
+ : $this->getApp()->uiPersistence->typecastAttributeSaveField($this->entityField->getField(), $this->entityField->get()))
: parent::getValue();
}
- #[\Override]
- public function set($value = null)
- {
- if ($this->multiple && $this->entityField !== null && $this->entityField->getField()->type === 'json' && is_string($value)) {
- $value = explode(',', $value);
- }
-
- return parent::set($value);
- }
-
/**
* Set JS dropdown() specific option;.
*
diff --git a/src/Form/Control/Lookup.php b/src/Form/Control/Lookup.php
index 15bb04924d..ff1378fa8c 100644
--- a/src/Form/Control/Lookup.php
+++ b/src/Form/Control/Lookup.php
@@ -143,9 +143,12 @@ protected function init(): void
#[\Override]
public function getValue()
{
+ // dropdown input tag accepts CSV formatted list of IDs
return $this->entityField !== null
- ? $this->getApp()->uiPersistence->typecastAttributeSaveField($this->entityField->getField(), $this->entityField->get())
- : ($this->content ?? '');
+ ? ($this->multiple && $this->entityField->getField()->type === 'json' && is_array($this->entityField->get())
+ ? implode(', ', $this->entityField->get())
+ : $this->getApp()->uiPersistence->typecastAttributeSaveField($this->entityField->getField(), $this->entityField->get()))
+ : parent::getValue();
}
/**
diff --git a/tests-behat/dropdown.feature b/tests-behat/dropdown.feature
index a451baee1e..fc865ea82d 100644
--- a/tests-behat/dropdown.feature
+++ b/tests-behat/dropdown.feature
@@ -34,6 +34,7 @@ Feature: Dropdown
When I select "uTitle \"' <" in lookup "dropdown_single2"
When I select "uTitle \"' <" in lookup "dropdown_multi"
When I select "uTitle \"' <" in lookup "dropdown_multi2"
+ When I select "uTitle \"' <" in lookup "dropdown_multi_json"
When I press button "Save"
Then Modal is open with text "match u add: 1"
When I click close modal
@@ -41,6 +42,7 @@ Feature: Dropdown
When I select "" in lookup "dropdown_single2"
When I select "" in lookup "dropdown_multi"
When I select "" in lookup "dropdown_multi2"
+ When I select "" in lookup "dropdown_multi_json"
When I press button "Save"
Then Modal is open with text "match empty: 1"
When I click close modal
@@ -48,6 +50,7 @@ Feature: Dropdown
When I select "uTitle \"' <" in lookup "dropdown_single2"
When I select "uTitle \"' <" in lookup "dropdown_multi"
When I select "uTitle \"' <" in lookup "dropdown_multi2"
+ When I select "uTitle \"' <" in lookup "dropdown_multi_json"
When I press button "Save"
Then Modal is open with text "match u only: 1"