From be3e6d8bebcec3749a41eb38325c3f5a12040a88 Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Sun, 21 Mar 2021 22:51:05 +0100
Subject: [PATCH] add test stub for #62

---
 CHANGELOG.md                         |  2 ++
 src/core/js/edit_mode.js             | 34 ++++++++++++++++++++++++++++
 src/core/xsl/entity_palette.xsl      |  4 ++--
 test/core/js/modules/edit_mode.js.js | 11 +++++++++
 4 files changed, 49 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 60242d13..52fd5fb3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -25,6 +25,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ### Fixed
 
+* #62 - Newly created Properties and RecordTypes do not appear in edit mode
+  toolbox.
 * #156 - Edit mode for Safari 11
 * #160 - Entity preview for Safari 11
 * Several minor cosmetic flaws
diff --git a/src/core/js/edit_mode.js b/src/core/js/edit_mode.js
index c37dcb1b..ade186ef 100644
--- a/src/core/js/edit_mode.js
+++ b/src/core/js/edit_mode.js
@@ -1575,6 +1575,7 @@ var edit_mode = new function() {
 
             if (!edit_mode.has_errors(app.entity)) {
                 app.old = false;
+                edit_mode.update_toolbox(app.entity);
             }
             hintMessages.hintMessages(app.entity);
             edit_mode.unfreeze();
@@ -1593,6 +1594,39 @@ var edit_mode = new function() {
         return app;
     }
 
+    /**
+     * Add the newly inserted entity to the edit_mode toolbox or update the
+     * toolbox with the updated entity.
+     *
+     * @param {HTMLElement} entity
+     */
+    this.update_toolbox = function(entity) {
+        const role = getEntityRole(entity);
+        var short_role = "";
+        if (role == "Property") {
+            short_role = "p";
+        } else if (role == "RecordType") {
+            short_role = "rt";
+        } else {
+          // all others can be ignored
+          return;
+        }
+
+        const id = `caosdb-f-edit-${short_role}-${getEntityID(entity)}`;
+        const li = `<li class="caosdb-f-edit-drag
+            list-group-item
+            caosdb-v-edit-drag" id="${id}">${getEntityName(entity)}</li>`;
+
+        // replace existing or prepend new
+        const old_element = $(`#${id}`);
+        if (old_element.length > 0) {
+            old_element.replaceWith(li);
+        } else {
+            $(`.caosdb-f-edit-mode-drag-${role.toLowerCase()}-list`)
+                .prepend(li);
+        }
+    }
+
     this.has_errors = function(entity) {
         return $(entity).find(".alert.alert-danger").length > 0;
     }
diff --git a/src/core/xsl/entity_palette.xsl b/src/core/xsl/entity_palette.xsl
index 961a51dc..ffc44aad 100644
--- a/src/core/xsl/entity_palette.xsl
+++ b/src/core/xsl/entity_palette.xsl
@@ -18,7 +18,7 @@
             <button class="btn btn-default caosdb-f-edit-panel-new-button new-property caosdb-f-hide-on-empty-input" title="Create this Property." ><span class="glyphicon glyphicon-plus"></span></button>
           </span>
         </div>
-        <ul class="caosdb-v-edit-list">
+        <ul class="caosdb-v-edit-list caosdb-f-edit-mode-drag-property-list">
           <xsl:apply-templates select="./Property"/>
         </ul>
       </div>
@@ -34,7 +34,7 @@
               <button class="btn btn-default caosdb-f-edit-panel-new-button new-recordtype caosdb-f-hide-on-empty-input" title="Create this RecordType"><span class="glyphicon glyphicon-plus"></span></button>
           </span>
         </div>
-        <ul class="caosdb-v-edit-list">
+        <ul class="caosdb-v-edit-list caosdb-f-edit-mode-drag-recordtype-list">
           <xsl:apply-templates select="./RecordType"/>
         </ul>
       </div>
diff --git a/test/core/js/modules/edit_mode.js.js b/test/core/js/modules/edit_mode.js.js
index 8fde3bac..ec9dfc75 100644
--- a/test/core/js/modules/edit_mode.js.js
+++ b/test/core/js/modules/edit_mode.js.js
@@ -922,6 +922,17 @@ QUnit.test("fill_reference_drop_down", async function (assert) {
 
 });
 
+QUnit.test("update_toolbox", function(assert) {
+    assert.ok(edit_mode.update_toolbox, "available");
+    const toolbox = $(`<div>
+        <div class="caosdb-f-edit-mode-drag-recordtype-list"></div>
+        <div class="caosdb-f-edit-mode-drag-property-list">
+          <div id="caosdb-f-edit-p-15">oldproperty</div>
+        </div>
+      </div>`);
+    const entity = "";
+    edit_mode.update_toolbox(entity);
+}
 
 /**
  * Test the inner logic of retrieve_datatype_list.
-- 
GitLab