From 432f46f411ffb3b95c1011e8385e8312e38f2a17 Mon Sep 17 00:00:00 2001
From: Eugen Ciur <eugen@papermerge.com>
Date: Sun, 31 Oct 2021 13:36:29 +0100
Subject: [PATCH] Create a folder use POST /api/nodes endpoint

---
 app/adapters/application.js        | 15 +++++++++++++++
 app/adapters/node.js               |  1 +
 app/components/modal/new_folder.js | 18 ++++++++++++------
 app/models/node.js                 |  2 +-
 4 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/app/adapters/application.js b/app/adapters/application.js
index 14f50f8..fa01ec2 100644
--- a/app/adapters/application.js
+++ b/app/adapters/application.js
@@ -11,6 +11,21 @@ export default class ApplicationAdapter extends JSONAPIAdapter {
     return `${super.buildURL(...args)}/`;
   }
 
+  pathForType(modelName) {
+    let ret = super.pathForType(modelName);
+
+    // `nodes` is polymorphic endpoint
+    // with POST /api/nodes/ we can create a Folder
+    // or a Document
+    if (modelName == 'folder') {
+      return 'nodes';
+    } else if (modeName == 'document') {
+      return 'nodes';
+    }
+
+    return ret;
+  }
+
   @computed('session.data.authenticated.token', 'session.isAuthenticated')
   get headers() {
     let _headers = {},
diff --git a/app/adapters/node.js b/app/adapters/node.js
index 6dffdad..01326e2 100644
--- a/app/adapters/node.js
+++ b/app/adapters/node.js
@@ -9,4 +9,5 @@ export default class NodeAdapter extends ApplicationAdapter {
 
     return ret;
   }
+
 }
diff --git a/app/components/modal/new_folder.js b/app/components/modal/new_folder.js
index f611540..d1d49fd 100644
--- a/app/components/modal/new_folder.js
+++ b/app/components/modal/new_folder.js
@@ -9,17 +9,23 @@ import { Modal } from 'bootstrap';
 export default class NewFolderComponent extends Component {
   @tracked title = '';
   @service store;
+  @service currentUser;
 
   @action
   onSubmit() {
-    let new_folder;
 
-    new_folder = this.store.createRecord('node');
-    new_folder.title = this.title;
-    new_folder.save();
+    this.currentUser.user.home_folder.then((home_folder) => {
+      let new_folder;
+
+      new_folder = this.store.createRecord('folder');
+      new_folder.title = this.title;
+      new_folder.parent = home_folder;
+      new_folder.save();
+
+      this.args.onClose();
+      this.title = '';
+    });
 
-    this.args.onClose();
-    this.title = '';
   }
 
   @action
diff --git a/app/models/node.js b/app/models/node.js
index af9489c..c8dc044 100644
--- a/app/models/node.js
+++ b/app/models/node.js
@@ -3,7 +3,7 @@ import Model, { attr, hasMany, belongsTo } from '@ember-data/model';
 export default class NodeModel extends Model {
   @attr title;
   @attr model;
-  @belongsTo('folder', { inverse: null }) parent;
+  @belongsTo('node', { inverse: 'descendants', polymorphic: true }) parent;
   @hasMany('node', { polymorphic: true }) descendants;
 
   get is_folder() {
-- 
GitLab