From c6dd8058b0c5384762305ba622fa1fa164f8fee9 Mon Sep 17 00:00:00 2001
From: dcz <dcz@ipipan.waw.pl>
Date: Wed, 13 Jul 2022 22:20:42 +0200
Subject: [PATCH] Remove empty unified frame functionality. Frame list refresh
 event.

---
 .../entries/js/components/LexicalUnitEdit.js  | 35 +++++++++++++------
 .../js/components/UnificationFramesList.js    | 18 +++++++++-
 unifier/urls.py                               |  1 +
 unifier/views.py                              | 19 ++++++++++
 4 files changed, 62 insertions(+), 11 deletions(-)

diff --git a/entries/static/entries/js/components/LexicalUnitEdit.js b/entries/static/entries/js/components/LexicalUnitEdit.js
index fd19ca0..f98b792 100644
--- a/entries/static/entries/js/components/LexicalUnitEdit.js
+++ b/entries/static/entries/js/components/LexicalUnitEdit.js
@@ -26,7 +26,7 @@ const FramePreview = {
     },
     refreshEntriesList() {
       this.$emit('refreshEntriesList')
-    }
+    },
   },
   mounted () {
     Split(['#frame-preview-left-pane', '#frame-preview-right-pane'], {
@@ -104,7 +104,7 @@ Object.assign(LexicalUnitEdit, {
     }
   },
   components: {InfoTooltip, Spinner, FramePreview, SlowalFrameComponent, ExamplesComponent, SemanticsSchemataComponent},
-  emits: ['goToDisplay', 'refresh', 'swapFrames', 'refreshEntriesList'],
+  emits: ['goToDisplay', 'refresh', 'swapFrames', 'refreshEntriesList', 'clearUnifiedFrameView'],
   watch: {
     forceRefresh(newVal, oldVal) {
       this.loadFrame();
@@ -647,7 +647,6 @@ Object.assign(LexicalUnitEdit, {
             show_info('Status ramy został zmieniony');
             this.$emit('refreshEntriesList');
             this.loadFrame();
-            // this.slowalFrameSelected(this.active_slowal_frame.id);
           }.bind(this),
           error: function (request, errorType, errorMessage) {
             show_error(errorType + ' (' + errorMessage + ')');
@@ -789,6 +788,7 @@ Object.assign(LexicalUnitEdit, {
           timeout: 60000,
           success: function (response) {
             show_info('Zaznaczona rama została przeniosiona.');
+            this.active_slowal_frame = null;
             this.loadFrame();
             this.internalForceRefresh += 1;
           }.bind(this),
@@ -819,6 +819,23 @@ Object.assign(LexicalUnitEdit, {
     schemataSelected(schemas) {
       this.selectedSchemas = schemas;
     },
+    deleteUnifiedFrames() {
+      if (!confirm(gettext("Czy na pewno chcesz zunifikowanÄ… ramÄ™?"))) return false;
+      $.ajax({
+        type: 'post',
+        url: '/' + lang + `/unifier/delete_unified_frame/${this.unified_frame.id}/`,
+        dataType: 'json',
+        timeout: 60000,
+        success: function (response) {
+          show_info('Zunifikowana rama została usunięta.');
+          this.$emit('refreshEntriesList');
+          this.$emit("swapFrames", null);
+        }.bind(this),
+        error: function (request, errorType, errorMessage) {
+          show_error(errorType + ' (' + errorMessage + ')');
+        }
+      });
+    },
   },
   mounted() {
     this.changeStatusButtonTitleToDefault();
@@ -868,6 +885,7 @@ Object.assign(LexicalUnitEdit, {
             <td id="remove-arg" @click="removeArgument" style="padding: 10px 15px 10px 15px; color: #000000;">Usuń argum.</td>
             <td id="change-windows" style="padding: 10px 15px 10px 15px; color: #000000;" @click="removeSelectionalPreference">Usuń prefer.</td>
             <td id="change-windows" style="padding: 10px 15px 10px 15px; color: #000000;" @click="swapUnifiedFrames">Zamień okna</td>
+            <td v-if="frames.length == 0" id="change-windows" style="padding: 10px 15px 10px 15px; color: #000000;" @click="deleteUnifiedFrames">Usuń</td>
           </tr>
         </table>
         <spinner />
@@ -883,9 +901,9 @@ Object.assign(LexicalUnitEdit, {
               <td
                 class="argument py-2 px-1 border-top border-left border-secondary role-column"
                     :class="getArgumentCSS(argument)"
-                  @click="unifiedFrameArgumentSelected(argument)"
-                  @mouseover="unifiedFrameArgumentHovered(argument)"
-                  @mouseleave="unifiedFrameArgumentHovered(null)"
+                    @click="unifiedFrameArgumentSelected(argument)"
+                    @mouseover="unifiedFrameArgumentHovered(argument)"
+                    @mouseleave="unifiedFrameArgumentHovered(null)"
                 >
                 {{ argument.role_type }}
                 
@@ -976,11 +994,8 @@ Object.assign(LexicalUnitEdit, {
             <td id="show-slowal-frame" style="padding: 10px 15px 10px 15px; color: #000000;" @click="changeShowVerifiedFrames(true)">
                 Pokaż wszystkie
             </td>
-            <td id="reollback-slowal-frame" style="padding: 10px 15px 10px 15px; color: #000000;">
-                Przywróć
-            </td>
             <td id="move-slowal-frame" style="padding: 10px 15px 10px 15px; color: #000000;"
-                @click="extract_frame_to_preview_frame()">
+                @click="extract_frame_to_preview_frame">
                 Przerzuć
             </td>
           </tr>
diff --git a/entries/static/entries/js/components/UnificationFramesList.js b/entries/static/entries/js/components/UnificationFramesList.js
index 693e30c..e0059fd 100644
--- a/entries/static/entries/js/components/UnificationFramesList.js
+++ b/entries/static/entries/js/components/UnificationFramesList.js
@@ -1,15 +1,31 @@
 export default {
+  props: {
+    initialUnifiedFrameId: Number,
+    unificationEntriesListRefreshKey: Number,
+  },
   data () {
     return {
       gettext: window.gettext,
       canViewAssignment: has_permission("users.view_assignment")
     }
   },
+  watch: {
+    unificationEntriesListRefreshKey() {
+      // TODO: reload data and click in selected row
+      // this.datatableObject.ajax.reload();
+      setup_frames_list({
+        table: this.$refs.table,
+        unifiedFrameSelected: (unifiedFrameId) => { this.$emit('unifiedFrameSelected', unifiedFrameId); },
+        selectEntryId: this.initialEntryId,
+      });
+    }
+  },
   emits: ['unifiedFrameSelected'],
   mounted () {
     setup_frames_list({
       table: this.$refs.table,
-      unifiedFrameSelected: (unifiedFrameId) => { this.$emit('unifiedFrameSelected', unifiedFrameId); }
+      unifiedFrameSelected: (unifiedFrameId) => { this.$emit('unifiedFrameSelected', unifiedFrameId); },
+      selectEntryId: this.initialUnifiedFrameId,
     });
   },
   template: `
diff --git a/unifier/urls.py b/unifier/urls.py
index 6fd291e..5ae8ec0 100644
--- a/unifier/urls.py
+++ b/unifier/urls.py
@@ -23,5 +23,6 @@ urlpatterns = [
     path('remove_selectional_preference/', views.remove_selectional_preference, name='remove_selectional_preference'),
     path('build_unified_frame_xml/', views.build_unified_frame_xml, name='build_unified_frame_xml'),
     path('frame_assign/<int:lu_id>/', views.frame_assign, name='frame_assign'),
+    path('delete_unified_frame/<int:unified_frame_id>/', views.delete_unified_frame, name='delete_unified_frame'),
 
 ]
diff --git a/unifier/views.py b/unifier/views.py
index 119cac2..45d7b4d 100644
--- a/unifier/views.py
+++ b/unifier/views.py
@@ -475,3 +475,22 @@ def frame_assign(request, lu_id):
     }
 
     return JsonResponse(ret)
+
+def removeUnifiedFrameMappingsAndAssigments(unified_frame_id):
+    #odpianie z ramy zunifikowanej
+    unifiedFrame2SlowalFrameMappings = UnifiedFrame2SlowalFrameMapping.objects.filter(unified_frame_id=unified_frame_id)
+    for unifiedFrame2SlowalFrameMapping in unifiedFrame2SlowalFrameMappings:
+        unifiedFrameArgumentSlowalFrameMappings = UnifiedFrameArgumentSlowalFrameMapping.objects.filter(unified_frame_mapping=unifiedFrame2SlowalFrameMapping)
+        unifiedFrameArgumentSlowalFrameMappings.delete()
+        unifiedFrame2SlowalFrameMapping.delete()
+    Assignment.delete(subject_id=unified_frame_id)
+
+@ajax(login_required=True, method='post')
+@transaction.atomic
+def delete_unified_frame(request, unified_frame_id):
+
+    removeUnifiedFrameMappingsAndAssigments(unified_frame_id)
+    UnifiedFrameArgument.objects.filter(unified_frame_id=unified_frame_id).delete()
+    UnifiedFrame.objects.get(id=unified_frame_id).delete()
+
+    return {}
-- 
GitLab