From 5f170a8c3167f06ee90b1318ea003e8b6fcf0e26 Mon Sep 17 00:00:00 2001 From: Anshul Date: Sun, 25 Jan 2026 02:58:52 +0530 Subject: [PATCH 1/3] 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/3] 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)" From 03a1d063fe05c1670c416a523b0c19f5a33f04c0 Mon Sep 17 00:00:00 2001 From: Anshul Date: Sun, 1 Mar 2026 12:00:40 +0530 Subject: [PATCH 3/3] copilot changes applied --- .../components/features/import/ImportFlow.vue | 2 ++ .../import/analysis/ImportAnalysisTable.vue | 15 +++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/extralit-frontend/components/features/import/ImportFlow.vue b/extralit-frontend/components/features/import/ImportFlow.vue index 8aca28089..e015cd9bb 100644 --- a/extralit-frontend/components/features/import/ImportFlow.vue +++ b/extralit-frontend/components/features/import/ImportFlow.vue @@ -245,6 +245,7 @@ export default { dataframeData: data.dataframeData || null, rawContent: data.rawContent || "", }; + this.uploadData.documentActions = {}; this.clearError(); }, @@ -254,6 +255,7 @@ export default { unmatchedFiles: data.unmatchedFiles || [], totalFiles: data.totalFiles || 0, }; + this.uploadData.documentActions = {}; this.clearError(); }, diff --git a/extralit-frontend/components/features/import/analysis/ImportAnalysisTable.vue b/extralit-frontend/components/features/import/analysis/ImportAnalysisTable.vue index 8e7015366..4929a5ba9 100644 --- a/extralit-frontend/components/features/import/analysis/ImportAnalysisTable.vue +++ b/extralit-frontend/components/features/import/analysis/ImportAnalysisTable.vue @@ -463,11 +463,18 @@ export default { analysisResult: { handler(newData: ImportAnalysisResponse) { if (newData) { - // 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 = {}; + // Filter persisted actions to only keys present in the new analysis, + // discarding stale entries from a previous Bib/PDF set + const validKeys = new Set(Object.keys(newData.documents ?? {})); + const filtered: Record = {}; + if (this.initialDocumentActions) { + for (const [key, status] of Object.entries(this.initialDocumentActions)) { + if (validKeys.has(key)) { + filtered[key] = status as ImportStatus; + } + } } + this.localDocumentActions = filtered; // Emit the analysis complete event this.$emit('analysis-complete', newData); // Emit initial update