From dec59357a482bdf00edeeb90b7cc103e364afd75 Mon Sep 17 00:00:00 2001 From: Gregor Lasnibat Date: Mon, 20 May 2024 13:51:38 +0200 Subject: [PATCH] (dev) Inventory import - Automatic mapping [SCI-10610] --- .../modals/import/second_step.vue | 3 +- .../modals/import/second_step_table_row.vue | 42 ++++++++++++++++++- config/locales/en.yml | 4 ++ 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/app/javascript/vue/repositories/modals/import/second_step.vue b/app/javascript/vue/repositories/modals/import/second_step.vue index ae47fcbe4..9712889fb 100644 --- a/app/javascript/vue/repositories/modals/import/second_step.vue +++ b/app/javascript/vue/repositories/modals/import/second_step.vue @@ -86,6 +86,7 @@ :stepProps="stepProps" @selection:changed="handleChange" :availableFields="this.availableFields" + :autoMapping="this.autoMapping" /> @@ -153,7 +154,7 @@ export default { }, data() { return { - autoMapping: false, + autoMapping: true, updateWithEmptyCells: false, onlyAddNewItems: false, columnLabels: { diff --git a/app/javascript/vue/repositories/modals/import/second_step_table_row.vue b/app/javascript/vue/repositories/modals/import/second_step_table_row.vue index 331894128..a5f69c11e 100644 --- a/app/javascript/vue/repositories/modals/import/second_step_table_row.vue +++ b/app/javascript/vue/repositories/modals/import/second_step_table_row.vue @@ -23,8 +23,11 @@ @isOpen="handleIsOpen" :clearable="true" :size="'sm'" - placeholder="Do not import" + :placeholder="computeMatchNotFound ? + i18n.t('repositories.import_records.steps.step2.table.tableRow.placeholders.matchNotFound') : + i18n.t('repositories.import_records.steps.step2.table.tableRow.placeholders.doNotImport')" :title="this.selectedColumnType?.value" + :value="this.selectedColumnType?.key" > @@ -48,7 +51,9 @@ - + + @@ -83,6 +88,10 @@ export default { stepProps: { type: Object, required: true + }, + autoMapping: { + type: Boolean, + required: true } }, data() { @@ -99,7 +108,31 @@ export default { this.i18n.t('repositories.import_records.steps.step2.table.tableRow.systemGeneratedData.updatedOn')] }; }, + watch: { + autoMapping(newVal, oldVal) { + if (newVal === true) { + this.autoMap(); + } else { + this.clearAutoMap(); + } + } + }, + computed: { + computeMatchNotFound() { + return this.autoMapping && ((this.selectedColumnType && !this.selectedColumnType.key) || !this.selectedColumnType); + } + }, methods: { + autoMap() { + Object.entries(this.stepProps.availableFields).forEach(([key, value]) => { + if (this.item === value) { + this.changeSelected(key); + } + }); + }, + clearAutoMap() { + this.changeSelected(null); + }, changeSelected(e) { const value = this.stepProps.availableFields[e]; const selectedColumnType = { index: this.index, key: e, value }; @@ -112,6 +145,11 @@ export default { tableRows.style.overflow = 'hidden'; } else tableRows.style.overflow = 'auto'; } + }, + mounted() { + if (this.autoMapping) { + this.autoMap(); + } } }; diff --git a/config/locales/en.yml b/config/locales/en.yml index 727ebcfc5..e41f8c891 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -2240,7 +2240,11 @@ en: RepositoryStockValue: 'Stock' table: tableRow: + placeholders: + matchNotFound: 'Match not found' + doNotImport: 'Do not import' defaultColumnTitle: 'Default column. Mapped as identifier.' + matchNotFoundColumnTitle: 'Match not found.' userDefinedColumnTitle: 'Column name does not match. Column will be imported as ' importedColumnTitle: 'Column will be imported.' doNotImportColumnTitle: 'Column will not import.'