diff --git a/src/shared/components/ncTable/mixins/columnsTypes/selection.js b/src/shared/components/ncTable/mixins/columnsTypes/selection.js index 9f84802800..1ec310589f 100644 --- a/src/shared/components/ncTable/mixins/columnsTypes/selection.js +++ b/src/shared/components/ncTable/mixins/columnsTypes/selection.js @@ -20,13 +20,12 @@ export default class SelectionColumn extends AbstractSelectionColumn { } getLabel(id) { - const i = this.selectionOptions?.findIndex((obj) => obj.id === id) - return this.selectionOptions[i]?.label + return this.getOptionObject(id)?.label } - isDeletedLabel(value) { - const i = this.selectionOptions?.findIndex((obj) => obj.id === value) - return !!this.selectionOptions[i]?.deleted + getOptionObject(id) { + if (id === null || id === undefined) return null + return this.selectionOptions?.find((obj) => obj.id === id) || { id, label: String(id), deleted: true } } sort(mode, nextSorts) { diff --git a/src/shared/components/ncTable/mixins/columnsTypes/selectionMulti.js b/src/shared/components/ncTable/mixins/columnsTypes/selectionMulti.js index afc0374d8f..826ac43e4f 100644 --- a/src/shared/components/ncTable/mixins/columnsTypes/selectionMulti.js +++ b/src/shared/components/ncTable/mixins/columnsTypes/selectionMulti.js @@ -41,25 +41,15 @@ export default class SelectionMutliColumn extends AbstractSelectionColumn { } getObjects(values) { - // values is an array of option-ids as string - const objects = [] - values?.forEach(id => { - const optionsObject = this.getOptionObject(parseInt(id)) - // skip options that not exists anymore - if (optionsObject) { - objects.push(optionsObject) - } - }) - return objects + return (values || []) + .map(rawId => parseInt(rawId)) + .filter(id => !Number.isNaN(id)) + .map(id => this.getOptionObject(id)) } getOptionObject(id) { - const i = this.selectionOptions?.findIndex(obj => { - return obj.id === id - }) - if (i !== undefined) { - return this.selectionOptions[i] || null - } + if (id === null || id === undefined) return null + return this.selectionOptions?.find(obj => obj.id === id) || { id, label: String(id), deleted: true } } isSearchStringFound(cell, searchString) { diff --git a/src/shared/components/ncTable/partials/TableCellMultiSelection.vue b/src/shared/components/ncTable/partials/TableCellMultiSelection.vue index 3db06e618b..2ab5a3157b 100644 --- a/src/shared/components/ncTable/partials/TableCellMultiSelection.vue +++ b/src/shared/components/ncTable/partials/TableCellMultiSelection.vue @@ -6,8 +6,13 @@
@@ -19,7 +24,8 @@ @keydown.escape.stop="cancelEdit"> { - return !item.deleted || this.optionIdIsSelected(item.id) - }) || [] - - options.forEach(opt => { - if (opt.deleted) { - opt.label += ' ⚠️' - } - }) - return options + selectedOptionIds() { + return (this.value || []) + .map(item => parseInt(item)) + .filter(id => !Number.isNaN(id)) + }, + selectableOptions() { + const missingOptions = this.selectedOptionIds + .map(id => this.column.getOptionObject(id)) + .filter(opt => opt.deleted) + return [...this.options, ...missingOptions] + }, + displayObjects() { + return this.selectedOptionIds.map(id => this.column.getOptionObject(id)) }, editValues: { get() { @@ -122,15 +130,6 @@ export default { event.stopPropagation() }, - getObjects() { - return this.column.getObjects(this.value) - }, - - optionIdIsSelected(id) { - // Check if the given id is selected (in the value array) - return this.value && this.value.includes(id) - }, - getIdArrayFromObjects(objects) { const ids = [] objects.forEach(o => { @@ -141,7 +140,7 @@ export default { initEditValues() { if (this.value !== null) { - this.localEditValues = this.column.getObjects(this.value) + this.localEditValues = this.displayObjects } else { this.localEditValues = [] } @@ -215,4 +214,12 @@ ul { list-style-type: disc; padding-inline-start: calc(var(--default-grid-baseline) * 3); } + +.outdated-option-indicator { + cursor: help; +} + +.outdated-option-label { + opacity: 0.6; +} diff --git a/src/shared/components/ncTable/partials/TableCellSelection.vue b/src/shared/components/ncTable/partials/TableCellSelection.vue index 56b888c190..3af38dc738 100644 --- a/src/shared/components/ncTable/partials/TableCellSelection.vue +++ b/src/shared/components/ncTable/partials/TableCellSelection.vue @@ -5,7 +5,12 @@