From 70725f824e3ef99b574a0457a494c8daefeb4cd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Vo=C5=99=C3=AD=C5=A1ek?= Date: Wed, 12 Mar 2025 15:53:00 +0100 Subject: [PATCH 1/6] add dropdown JSON multiple test --- demos/_unit-test/dropdown-html.php | 24 +++++++++++++++++++++--- src/Form.php | 4 ++++ tests-behat/dropdown.feature | 3 +++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/demos/_unit-test/dropdown-html.php b/demos/_unit-test/dropdown-html.php index e8ca7c066a..ae6fcb43b5 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']); @@ -86,13 +93,24 @@ ]); */ 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 +122,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/src/Form.php b/src/Form.php index be9b2f33d9..b1212d32f1 100644 --- a/src/Form.php +++ b/src/Form.php @@ -453,6 +453,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/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" From d38bff878cbfd47182df54fc170b3c5e0cdfdbcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Vo=C5=99=C3=AD=C5=A1ek?= Date: Wed, 12 Mar 2025 15:54:03 +0100 Subject: [PATCH 2/6] fix lookup multiple json --- demos/_unit-test/dropdown-html.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/demos/_unit-test/dropdown-html.php b/demos/_unit-test/dropdown-html.php index ae6fcb43b5..f9753fe15d 100644 --- a/demos/_unit-test/dropdown-html.php +++ b/demos/_unit-test/dropdown-html.php @@ -90,7 +90,15 @@ '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( From 7efb94f7999934239a03906214a24a5ff797c95f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Vo=C5=99=C3=AD=C5=A1ek?= Date: Wed, 12 Mar 2025 15:46:17 +0100 Subject: [PATCH 3/6] fix lookup input tag value render --- src/Form/Control/Dropdown.php | 12 +----------- src/Form/Control/Lookup.php | 7 +++++-- 2 files changed, 6 insertions(+), 13 deletions(-) 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(); } /** From ef506e0b92f1df276268924c29674372895e2656 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Vo=C5=99=C3=AD=C5=A1ek?= Date: Wed, 12 Mar 2025 15:54:27 +0100 Subject: [PATCH 4/6] fix cs --- demos/_unit-test/dropdown-html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/_unit-test/dropdown-html.php b/demos/_unit-test/dropdown-html.php index f9753fe15d..ad751fabe0 100644 --- a/demos/_unit-test/dropdown-html.php +++ b/demos/_unit-test/dropdown-html.php @@ -98,7 +98,7 @@ 'multiple' => true, 'model' => $lookupModel, ]/* , ['type' => 'json'] *-/); -$form->entity->getField('lookup_multi_json')->type = 'json'; */ +$form->entity->getField('lookup_multi_json')->type = 'json'; */ foreach (array_keys($form->entity->getFields()) as $k) { $form->entity->set( From 690c273c1a8190e779696137687435d9a341b82b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Vo=C5=99=C3=AD=C5=A1ek?= Date: Wed, 12 Mar 2025 01:45:11 +0100 Subject: [PATCH 5/6] drop unused use --- src/Form.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Form.php b/src/Form.php index b1212d32f1..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; From 3ad463828c524717a39f4fc45f05cd862161ec77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Vo=C5=99=C3=AD=C5=A1ek?= Date: Wed, 12 Mar 2025 17:05:04 +0100 Subject: [PATCH 6/6] improve comment --- js/src/VueComponent/Multiline/MultilineRowComponent.js | 5 ++--- public/js/atk-vue-multiline.js | 5 ++--- public/js/atk-vue-multiline.js.map | 2 +- public/js/atk-vue-multiline.min.js.map | 2 +- 4 files changed, 6 insertions(+), 8 deletions(-) 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: '