From af98c8d016b9f0f0f14b4687e2503a758a4bae3b Mon Sep 17 00:00:00 2001
From: dcz <dcz@ipipan.waw.pl>
Date: Tue, 5 Jul 2022 14:33:44 +0200
Subject: [PATCH] Refresh entries list on status change

---
 entries/static/entries/js/components/Entries.js |  6 +++++-
 .../entries/js/components/LexicalUnitDisplay.js |  2 +-
 .../entries/js/components/LexicalUnitEdit.js    |  9 +++++++--
 .../js/components/UnificationComponent.js       |  6 ++++++
 .../UnificationEntriesForFramesList.js          | 12 ++++++++++++
 .../js/components/UnificationRightPane.js       |  1 +
 .../js/components/UnificationSwitchableList.js  | 17 +++++++++++++----
 7 files changed, 45 insertions(+), 8 deletions(-)

diff --git a/entries/static/entries/js/components/Entries.js b/entries/static/entries/js/components/Entries.js
index 27ef80b..336a0e4 100644
--- a/entries/static/entries/js/components/Entries.js
+++ b/entries/static/entries/js/components/Entries.js
@@ -47,7 +47,11 @@ export default {
   template: `
     <div id="entries-list" class="col h-100 w-100 px-0">
       <div id="entries-list-div" class="col p-0 h-100 w-100 overflow-auto">
-        <unification-entries-list :unificationEntriesListRefreshKey="unificationEntriesListRefreshKey" :initialLexicalUnitId="lexicalUnitId" :initialEntryId="entryId" @lexical-unit-selected="lexicalUnitSelected" />
+        <unification-entries-list 
+          :unificationEntriesListRefreshKey="unificationEntriesListRefreshKey" 
+          :initialLexicalUnitId="lexicalUnitId" 
+          :initialEntryId="entryId" 
+          @lexical-unit-selected="lexicalUnitSelected" />
       </div>
     </div>
     <div id="entry-display" class="col h-100 p-0">
diff --git a/entries/static/entries/js/components/LexicalUnitDisplay.js b/entries/static/entries/js/components/LexicalUnitDisplay.js
index f1b37ae..f64ba1a 100644
--- a/entries/static/entries/js/components/LexicalUnitDisplay.js
+++ b/entries/static/entries/js/components/LexicalUnitDisplay.js
@@ -9,7 +9,7 @@ export default {
   data() {
     return { frame: null, unifiedFrame: undefined, gettext: window.gettext, hasPermission: window.has_permission }
   },
-  emits: ['refresh', "refreshEntriesList"],
+  emits: ['refresh', 'refreshEntriesList'],
   methods: {
     goToEdit (unifiedFrameId, entryId, lexicalUnitId) {
       window.location = `/${lang}/entries/unification?unified_frame_id=${unifiedFrameId}&entry_id=${entryId}&lexical_unit_id=${lexicalUnitId}`;
diff --git a/entries/static/entries/js/components/LexicalUnitEdit.js b/entries/static/entries/js/components/LexicalUnitEdit.js
index 16a3642..cc4ad98 100644
--- a/entries/static/entries/js/components/LexicalUnitEdit.js
+++ b/entries/static/entries/js/components/LexicalUnitEdit.js
@@ -16,13 +16,16 @@ const FramePreview = {
     };
   },
   components: {LexicalUnitEdit, UnificationSwitchableList},
-  emits: ['changeFrame', 'changePreviewToEdit'],
+  emits: ['changeFrame', 'changePreviewToEdit', 'refreshEntriesList'],
   methods: {
     changePreviewToEditLocal (unifiedFrameId) {
       this.$emit('changePreviewToEdit', unifiedFrameId);
     },
     unifiedFrameSelected (unifiedFrameId) {
       this.$emit('changeFrame', unifiedFrameId);
+    },
+    refreshEntriesList() {
+      this.$emit('refreshEntriesList')
     }
   },
   mounted () {
@@ -46,6 +49,7 @@ const FramePreview = {
           :unifiedFrameId="unifiedFrameId"
           :forceRefresh="forceRefresh"
           @change-preview-to-edit="changePreviewToEditLocal"
+          @refresh-entries-list="refreshEntriesList"
         />
         <div v-else class="h-100">
           Brak ramy do wyświetlenia
@@ -93,7 +97,7 @@ Object.assign(LexicalUnitEdit, {
     }
   },
   components: {InfoTooltip, Spinner, FramePreview},
-  emits: ['goToDisplay', 'refresh', 'swapFrames', 'changePreviewToEdit'],
+  emits: ['goToDisplay', 'refresh', 'swapFrames', 'changePreviewToEdit', 'refreshEntriesList'],
   watch: {
     forceRefresh(newVal, oldVal) {
       this.loadFrame();
@@ -666,6 +670,7 @@ Object.assign(LexicalUnitEdit, {
           timeout: 60000,
           success: function (response) {
             show_info('Status ramy został zmieniony');
+            this.$emit('refreshEntriesList');
             this.loadFrame();
           }.bind(this),
           error: function (request, errorType, errorMessage) {
diff --git a/entries/static/entries/js/components/UnificationComponent.js b/entries/static/entries/js/components/UnificationComponent.js
index 29f9c79..2915477 100644
--- a/entries/static/entries/js/components/UnificationComponent.js
+++ b/entries/static/entries/js/components/UnificationComponent.js
@@ -9,6 +9,7 @@ export default {
       unifiedFrameId: null,
       isEdit: false,
       gettext: window.gettext,
+      unificationEntriesListRefreshKey: 1,
     };
   },
   components: {UnificationSwitchableList, UnificationRightPane},
@@ -22,6 +23,9 @@ export default {
       this.isEdit = true;
       this.unifiedFrameId = unifiedFrameId;
     },
+    refreshEntriesList() {
+      this.unificationEntriesListRefreshKey++;
+    }
   },
   setup() {
     const lexicalUnit = new URL(location.href).searchParams.get('lexical_unit_id');
@@ -50,6 +54,7 @@ export default {
     <div id="entries-list" class="col h-100 w-100 px-0">
         <div id="entries-list-div" class="col p-0 h-100 w-100 overflow-auto">
             <unification-switchable-list
+              :unificationEntriesListRefreshKey="unificationEntriesListRefreshKey"
               :initialLexicalUnitId="initialLexicalUnitId"
               :initialEntryId="initialEntryId"
               @lexical-unit-selected="lexicalUnitSelected"
@@ -63,6 +68,7 @@ export default {
           :lexicalUnitId="lexicalUnitId" 
           :initialUnifiedFrameId="unifiedFrameId"
           :initialIsEdit="isEdit"
+          @refresh-entries-list="refreshEntriesList"
         />
     </div>
   `
diff --git a/entries/static/entries/js/components/UnificationEntriesForFramesList.js b/entries/static/entries/js/components/UnificationEntriesForFramesList.js
index ccf5cfd..9b062f0 100644
--- a/entries/static/entries/js/components/UnificationEntriesForFramesList.js
+++ b/entries/static/entries/js/components/UnificationEntriesForFramesList.js
@@ -2,6 +2,7 @@ export default {
   props: {
     initialLexicalUnitId: Number,
     initialEntryId: Number,
+    unificationEntriesListRefreshKey: Number,
   },
   data () {
     return {
@@ -9,6 +10,17 @@ export default {
       canViewAssignment: has_permission("users.view_assignment")
     }
   },
+  watch: {
+    unificationEntriesListRefreshKey() {
+      // TODO: reload data and click in selected row
+      // this.datatableObject.ajax.reload();
+      setup_entries_for_frames_list({
+        table: this.$refs.table,
+        lexicalUnitSelected: (lexicalUnitUnifiedFrameId) => { this.$emit('unifiedFrameSelected', lexicalUnitUnifiedFrameId); },
+        selectEntryId: this.initialEntryId
+      });
+    }
+  },
   emits: ['unifiedFrameSelected'],
   mounted () {
     setup_entries_for_frames_list({
diff --git a/entries/static/entries/js/components/UnificationRightPane.js b/entries/static/entries/js/components/UnificationRightPane.js
index 30ea24b..8982f5d 100644
--- a/entries/static/entries/js/components/UnificationRightPane.js
+++ b/entries/static/entries/js/components/UnificationRightPane.js
@@ -70,6 +70,7 @@ export default {
         :initialRightPaneTab="unifiedFrameId !== previewedUnifiedFrameId ? 'frame_preview' : null"
         @go-to-display="goToDisplay"
         @swap-frames="swapFrames"
+        @refresh-entries-list="refreshEntriesList"
       />
     </div>
   `
diff --git a/entries/static/entries/js/components/UnificationSwitchableList.js b/entries/static/entries/js/components/UnificationSwitchableList.js
index fdffc95..170daf2 100644
--- a/entries/static/entries/js/components/UnificationSwitchableList.js
+++ b/entries/static/entries/js/components/UnificationSwitchableList.js
@@ -6,6 +6,7 @@ export default {
   props: {
     initialLexicalUnitId: Number,
     initialEntryId: Number,
+    unificationEntriesListRefreshKey: Number,
   },
   data () {
     return {
@@ -13,19 +14,27 @@ export default {
       isFrameView: false
     }
   },
-  emits: ['lexicalUnitSelected', 'unifiedFrameSelected'],
+  emits: ['lexicalUnitSelected', 'unifiedFrameSelected', 'refreshEntriesList'],
   methods: {
     lexicalUnitSelected (entryId, lexicalUnitId) {
       this.$emit('lexicalUnitSelected', entryId, lexicalUnitId);
     },
     unifiedFrameSelected (unifiedFrameId) {
       this.$emit('unifiedFrameSelected', unifiedFrameId);
-    }
+    },
   },
   components: {UnificationEntriesList, UnificationEntriesForFramesList, UnificationFramesList},
   template: `
     <label class="float-left mt-2"><input type="checkbox" v-model="isFrameView" /> {{ gettext('RAMY') }}</label>
-    <div v-if="!isFrameView"><unification-entries-for-frames-list :initialLexicalUnitId="initialLexicalUnitId" :initialEntryId="initialEntryId" @unified-frame-selected="unifiedFrameSelected" /></div>
-    <div v-else><unification-frames-list @unified-frame-selected="unifiedFrameSelected" /></div>
+    <div v-if="!isFrameView"><unification-entries-for-frames-list 
+      :unificationEntriesListRefreshKey="unificationEntriesListRefreshKey" 
+      :initialLexicalUnitId="initialLexicalUnitId" 
+      :initialEntryId="initialEntryId" 
+      @unified-frame-selected="unifiedFrameSelected" 
+    /></div>
+    <div v-else><unification-frames-list 
+      :unificationEntriesListRefreshKey="unificationEntriesListRefreshKey" 
+      @unified-frame-selected="unifiedFrameSelected" 
+    /></div>
   `
 };
-- 
GitLab