From 1b2933b9e6f2f6d6664ddd814401d1f09ba78e7b Mon Sep 17 00:00:00 2001
From: Eugen Ciur <eugen@papermerge.com>
Date: Sun, 7 Nov 2021 13:37:16 +0100
Subject: [PATCH] load home folder model dynamically

---
 app/base/routing.js                   |  4 +++-
 app/components/nav/sidebar.hbs        |  5 +++--
 app/components/nav/sidebar.js         |  6 ------
 app/components/nodes/filter.hbs       |  1 -
 app/components/nodes/filter.js        | 13 -------------
 app/controllers/login.js              |  1 -
 app/routes/application.js             | 13 +++++++++++--
 app/routes/authenticated/nodes.js     | 17 ++++++++++++-----
 app/services/current-user.js          | 13 +++++++++++--
 app/services/session.js               |  1 +
 app/templates/authenticated.hbs       |  2 +-
 app/templates/authenticated/nodes.hbs |  2 ++
 12 files changed, 44 insertions(+), 34 deletions(-)
 delete mode 100644 app/components/nodes/filter.hbs
 delete mode 100644 app/components/nodes/filter.js

diff --git a/app/base/routing.js b/app/base/routing.js
index 3078d32..81cf9f3 100644
--- a/app/base/routing.js
+++ b/app/base/routing.js
@@ -3,8 +3,10 @@ import { inject as service } from '@ember/service';
 
 export default class BaseRoute extends Route {
   @service session;
+  @service currentUser;
 
-  beforeModel(transition) {
+  async beforeModel(transition) {
     this.session.requireAuthentication(transition, 'login');
+    await this.currentUser.loadCurrentUser();
   }
 }
diff --git a/app/components/nav/sidebar.hbs b/app/components/nav/sidebar.hbs
index 38e2ef3..01d0dc7 100644
--- a/app/components/nav/sidebar.hbs
+++ b/app/components/nav/sidebar.hbs
@@ -1,7 +1,8 @@
 <div class="d-flex flex-column flex-shrink-0 p-3 text-white bg-dark sidebar-open" >
+    {{this.args.homeFolder}}
     <LinkTo
         @route="authenticated.nodes"
-        @model="{{this.home_id}}"
+        @model="{{@home_folder.id}}"
         class="d-flex brand text-white text-decoration-none">
           <img
             src="/assets/images/logo_bbg.svg"
@@ -14,7 +15,7 @@
       <li class="nav-item">
         <LinkTo
           @route="authenticated.nodes"
-          @model="{{this.home_id}}"
+          @model="{{@home_folder.id}}"
           class="nav-link text-white {{this.active}}" aria-current="page">
           <i class="fa fa-home me-2"></i>Home
         </LinkTo>
diff --git a/app/components/nav/sidebar.js b/app/components/nav/sidebar.js
index 036499f..837dc2e 100644
--- a/app/components/nav/sidebar.js
+++ b/app/components/nav/sidebar.js
@@ -3,14 +3,8 @@ import { inject as service } from '@ember/service';
 
 
 export default class SidebarComponent extends Component {
-  @service session;
-  @service currentUser;
   @service router;
 
-  get home_id() {
-    return 75;
-  }
-
   get active() {
     /*
     Returns "active" for "authenticated.nodes" route regardless
diff --git a/app/components/nodes/filter.hbs b/app/components/nodes/filter.hbs
deleted file mode 100644
index b40a822..0000000
--- a/app/components/nodes/filter.hbs
+++ /dev/null
@@ -1 +0,0 @@
-{{yield this.results}}
\ No newline at end of file
diff --git a/app/components/nodes/filter.js b/app/components/nodes/filter.js
deleted file mode 100644
index 26d70ec..0000000
--- a/app/components/nodes/filter.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import Component from '@glimmer/component';
-
-export default class NodesFilterComponent extends Component {
-  get results() {
-    let { docs, query } = this.args;
-
-    if (query) {
-      docs = docs.filter((doc) => doc.title.includes(query));
-    }
-
-    return docs;
-  }
-}
diff --git a/app/controllers/login.js b/app/controllers/login.js
index b16ecbe..bca9016 100644
--- a/app/controllers/login.js
+++ b/app/controllers/login.js
@@ -25,5 +25,4 @@ export default class LoginController extends Controller {
       this.transitionToRoute('authenticated.index');
     }
   }
-
 }
diff --git a/app/routes/application.js b/app/routes/application.js
index 56b9f8f..312374a 100644
--- a/app/routes/application.js
+++ b/app/routes/application.js
@@ -1,5 +1,14 @@
-import Route from '@ember/routing/route';
+import BaseRoute from 'papermerge/base/routing';
+import { inject as service } from '@ember/service';
 
 
-export default class ApplicationRoute extends Route {
+export default class ApplicationRoute extends BaseRoute {
+  @service currentUser;
+
+  async model() {
+    if (this.currentUser.isAuthenticated) {
+      console.log("ApplicationRoute: current user is authenticated");
+      return this.currentUser.user.home_folder;
+    }
+  }
 }
diff --git a/app/routes/authenticated/nodes.js b/app/routes/authenticated/nodes.js
index 7466d22..b1cfdfa 100644
--- a/app/routes/authenticated/nodes.js
+++ b/app/routes/authenticated/nodes.js
@@ -5,6 +5,7 @@ import RSVP from 'rsvp';
 
 export default class FolderRoute extends Route {
   @service store;
+  @service currentUser;
 
   queryParams = {
     extranode_id: {
@@ -12,19 +13,24 @@ export default class FolderRoute extends Route {
     }
   };
 
-  model(params) {
+  async model(params) {
     let adapter;
 
     adapter = this.store.adapterFor('node');
+    await this.currentUser.loadCurrentUser();
 
     if (params.extranode_id) {
       return RSVP.hash({
         node: adapter.findNode(params.node_id),
-        extranode: adapter.findNode(params.extranode_id)
+        extranode: adapter.findNode(params.extranode_id),
+        home_folder: this.currentUser.user.home_folder
       });
     }
 
-    return adapter.findNode(params.node_id);
+    return RSVP.hash({
+      node: adapter.findNode(params.node_id),
+      home_folder: this.currentUser.user.home_folder
+    });
   }
 
   setupController(controller, model) {
@@ -32,12 +38,13 @@ export default class FolderRoute extends Route {
 
     if (model.extranode) {
       _controller.set('dualpanel_mode', true);
-      _controller.set('mainnode', model.node);
       _controller.set('extranode', model.extranode);
     } else {
       _controller.set('dualpanel_mode', false);
-      _controller.set('mainnode', model);
       _controller.set('extranode', undefined);
     }
+
+    _controller.set('mainnode', model.node);
+    _controller.set('home_folder', model.home_folder);
   }
 }
diff --git a/app/services/current-user.js b/app/services/current-user.js
index 16bbbdf..2f39228 100644
--- a/app/services/current-user.js
+++ b/app/services/current-user.js
@@ -6,10 +6,19 @@ export default class CurrentUserService extends Service {
   @service session;
   @service store;
 
+  user = null;
+
   async loadCurrentUser() {
+
     if (this.session.isAuthenticated) {
-      let user = await this.store.queryRecord('user', { me: true });
-      this.set('user', user);
+      let user = await this.store.queryRecord(
+        'user', { me: true }
+      );
+      this.user = user;
     }
   }
+
+  get isAuthenticated() {
+    return this.session.isAuthenticated;
+  }
 }
diff --git a/app/services/session.js b/app/services/session.js
index 25d70a7..6c71db0 100644
--- a/app/services/session.js
+++ b/app/services/session.js
@@ -1,6 +1,7 @@
 import { inject as service } from '@ember/service';
 import BaseSessionService from 'ember-simple-auth/services/session';
 
+
 export default class SessionService extends BaseSessionService {
   @service currentUser;
 
diff --git a/app/templates/authenticated.hbs b/app/templates/authenticated.hbs
index e125124..7327b96 100644
--- a/app/templates/authenticated.hbs
+++ b/app/templates/authenticated.hbs
@@ -1,5 +1,5 @@
 <main>
-  <Nav::Sidebar />
+  <Nav::Sidebar @home_folder={{@model}} />
   <div class="w-100 central-bar">
     <Nav::Topbar />
     <div class="container-fluid mx-2 my-1">
diff --git a/app/templates/authenticated/nodes.hbs b/app/templates/authenticated/nodes.hbs
index 81f376e..fedbd64 100644
--- a/app/templates/authenticated/nodes.hbs
+++ b/app/templates/authenticated/nodes.hbs
@@ -1,3 +1,5 @@
+
+
 <div class="panels d-flex row">
   <Commander
     @node={{this.mainnode}}
-- 
GitLab