From 5f170a8c3167f06ee90b1318ea003e8b6fcf0e26 Mon Sep 17 00:00:00 2001 From: Anshul Date: Sun, 25 Jan 2026 02:58:52 +0530 Subject: [PATCH 1/2] persist state of import analysis table columns --- .../components/features/import/ImportFlow.vue | 4 ++- .../import/analysis/ImportAnalysisTable.vue | 25 ++++++++++++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/extralit-frontend/components/features/import/ImportFlow.vue b/extralit-frontend/components/features/import/ImportFlow.vue index 6249bc3e0..7e0f21fde 100644 --- a/extralit-frontend/components/features/import/ImportFlow.vue +++ b/extralit-frontend/components/features/import/ImportFlow.vue @@ -11,7 +11,9 @@ diff --git a/extralit-frontend/components/features/import/analysis/ImportAnalysisTable.vue b/extralit-frontend/components/features/import/analysis/ImportAnalysisTable.vue index 81f23e14a..4d82a34c8 100644 --- a/extralit-frontend/components/features/import/analysis/ImportAnalysisTable.vue +++ b/extralit-frontend/components/features/import/analysis/ImportAnalysisTable.vue @@ -93,16 +93,32 @@ export default { type: Boolean, default: false, }, + initialDocumentActions: { + type: Object as () => Record, + default: () => ({}), + }, }, emits: ["update", "analysis-complete"], data() { return { - localDocumentActions: {} as Record, + // Initialize from prop to persist state when navigating back/forward + localDocumentActions: { ...this.initialDocumentActions } as Record, }; }, + mounted() { + // Restore document actions from parent state when component is remounted + if (this.initialDocumentActions && Object.keys(this.initialDocumentActions).length > 0) { + this.localDocumentActions = { ...this.initialDocumentActions }; + // Emit update to sync state with parent + this.$nextTick(() => { + this.emitUpdate(); + }); + } + }, + computed: { summaryData() { if (this.analysisResult) { @@ -330,8 +346,11 @@ export default { analysisResult: { handler(newData: ImportAnalysisResponse) { if (newData) { - // Reset local document actions when new analysis data arrives - this.localDocumentActions = {}; + // Only reset local document actions if there are no persisted actions from parent + // This preserves user modifications when navigating back/forward between steps + if (!this.initialDocumentActions || Object.keys(this.initialDocumentActions).length === 0) { + this.localDocumentActions = {}; + } // Emit the analysis complete event this.$emit('analysis-complete', newData); // Emit initial update From 84a131a707dfe7c11f5a4fbc330a89255f53347a Mon Sep 17 00:00:00 2001 From: Anshul Date: Fri, 30 Jan 2026 13:38:26 +0530 Subject: [PATCH 2/2] added custom configs --- .../base/base-render-table/RenderTable.vue | 19 ++++++++++++++++++- .../base-simple-table/BaseSimpleTable.vue | 1 + 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/extralit-frontend/components/base/base-render-table/RenderTable.vue b/extralit-frontend/components/base/base-render-table/RenderTable.vue index ff6874489..63c8dec81 100644 --- a/extralit-frontend/components/base/base-render-table/RenderTable.vue +++ b/extralit-frontend/components/base/base-render-table/RenderTable.vue @@ -110,6 +110,11 @@ export default { type: Array as () => Question[], default: () => [], }, + // Allows parent components to specify formatters, cellClick handlers, frozen, etc. + columnConfigs: { + type: Array as () => Array>, + default: () => [], + }, }, model: { @@ -193,10 +198,22 @@ export default { columnsConfig() { if (!this.tableJSON?.schema) return []; + // Create a map of custom column configs by field name for quick lookup + const customConfigMap = new Map>(); + if (this.columnConfigs && this.columnConfigs.length > 0) { + this.columnConfigs.forEach((config: Record) => { + if (config.field) { + customConfigMap.set(config.field, config); + } + }); + } + var configs = this.tableJSON.schema.fields.map((column: DataFrameField) => { const commonConfig = this.generateColumnConfig(column.name); const editableConfig = this.generateColumnEditableConfig(column.name); - return { ...commonConfig, ...editableConfig }; + // Merge with custom config if provided (custom config takes precedence) + const customConfig = customConfigMap.get(column.name) || {}; + return { ...commonConfig, ...editableConfig, ...customConfig }; }); if (!this.editable) { diff --git a/extralit-frontend/components/base/base-simple-table/BaseSimpleTable.vue b/extralit-frontend/components/base/base-simple-table/BaseSimpleTable.vue index 15a62bbc4..dbe62f056 100644 --- a/extralit-frontend/components/base/base-simple-table/BaseSimpleTable.vue +++ b/extralit-frontend/components/base/base-simple-table/BaseSimpleTable.vue @@ -6,6 +6,7 @@ :editable="editable" :hasValidValues="hasValidValues" :questions="questions" + :columnConfigs="columns" @table-built="$emit('table-built')" @row-click="(e, row) => $emit('row-click', e, row)" @cell-edited="(cell) => $emit('cell-edited', cell)"