From f865ca6e46ab297967f3a2cfc8ddf6362097c16d Mon Sep 17 00:00:00 2001
From: Eugen Ciur <eugen@papermerge.com>
Date: Sat, 25 Sep 2021 06:03:01 +0200
Subject: [PATCH] refactoring of frontend

---
 app/adapters/application.js          |   9 -
 app/components/document.hbs          |   1 +
 app/components/document/detailed.hbs |   4 -
 app/components/documents.js          |   2 +-
 app/components/documents/filter.js   |   2 +-
 app/components/jumbo.hbs             |   4 -
 app/components/nav-bar.hbs           |   6 +
 app/models/document.js               |   5 +-
 app/models/folder.js                 |   7 +-
 app/models/node.js                   |   3 +-
 app/router.js                        |  16 ++
 app/routes/document.js               |   1 -
 app/routes/folder.js                 |  18 ++
 app/routes/index.js                  |  12 +-
 app/serializers/application.js       |   5 -
 app/styles/app.css                   |   4 +-
 app/templates/about.hbs              |  12 +-
 app/templates/automates/add.hbs      |   1 +
 app/templates/automates/automate.hbs |   3 +
 app/templates/automates/index.hbs    |   4 +
 app/templates/contact.hbs            |  26 +-
 app/templates/folder.hbs             |   5 +
 app/templates/index.hbs              |   8 +-
 app/templates/not-found.hbs          |   1 +
 app/templates/tags/add.hbs           |   1 +
 app/templates/tags/index.hbs         |   3 +
 app/templates/tags/tag.hbs           |   1 +
 package-lock.json                    | 365 +++++++++++++++++++++++++++
 package.json                         |   2 +-
 public/api/folder.json               |  32 +++
 30 files changed, 491 insertions(+), 72 deletions(-)
 delete mode 100644 app/adapters/application.js
 delete mode 100644 app/components/jumbo.hbs
 create mode 100644 app/routes/folder.js
 delete mode 100644 app/serializers/application.js
 create mode 100644 app/templates/automates/add.hbs
 create mode 100644 app/templates/automates/automate.hbs
 create mode 100644 app/templates/automates/index.hbs
 create mode 100644 app/templates/folder.hbs
 create mode 100644 app/templates/not-found.hbs
 create mode 100644 app/templates/tags/add.hbs
 create mode 100644 app/templates/tags/index.hbs
 create mode 100644 app/templates/tags/tag.hbs
 create mode 100644 public/api/folder.json

diff --git a/app/adapters/application.js b/app/adapters/application.js
deleted file mode 100644
index 9e22e85..0000000
--- a/app/adapters/application.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import JSONAPIAdapter from '@ember-data/adapter/json-api';
-
-export default class ApplicationAdapter extends JSONAPIAdapter {
-  namespace = 'api';
-
-  buildURL(...args) {
-    return `${super.buildURL(...args)}.json`;
-  }
-}
\ No newline at end of file
diff --git a/app/components/document.hbs b/app/components/document.hbs
index 2c335ef..0be43c2 100644
--- a/app/components/document.hbs
+++ b/app/components/document.hbs
@@ -5,6 +5,7 @@
     />
 
   <div class="details">
+    {{@doc.type}}
     <h3>
         <LinkTo @route="document" @model={{@doc}}>
             {{@doc.title}}
diff --git a/app/components/document/detailed.hbs b/app/components/document/detailed.hbs
index 40f50df..dfb6219 100644
--- a/app/components/document/detailed.hbs
+++ b/app/components/document/detailed.hbs
@@ -1,7 +1,3 @@
-<Jumbo>
-  <h2>{{@doc.title}}</h2>
-</Jumbo>
-
 <div class="document detailed">
   <Document::Image
     src={{@doc.image}}
diff --git a/app/components/documents.js b/app/components/documents.js
index e73b1d5..386f372 100644
--- a/app/components/documents.js
+++ b/app/components/documents.js
@@ -3,4 +3,4 @@ import { tracked } from '@glimmer/tracking';
 
 export default class DocumentsComponent extends Component {
   @tracked query = '';
-}
\ No newline at end of file
+}
diff --git a/app/components/documents/filter.js b/app/components/documents/filter.js
index b7398db..ed61339 100644
--- a/app/components/documents/filter.js
+++ b/app/components/documents/filter.js
@@ -10,4 +10,4 @@ export default class documentssFilterComponent extends Component {
 
     return docs;
   }
-}
\ No newline at end of file
+}
diff --git a/app/components/jumbo.hbs b/app/components/jumbo.hbs
deleted file mode 100644
index bfabf6f..0000000
--- a/app/components/jumbo.hbs
+++ /dev/null
@@ -1,4 +0,0 @@
-<div class="jumbo">
-  <div class="right tomster"></div>
-  {{yield}}
-</div>
\ No newline at end of file
diff --git a/app/components/nav-bar.hbs b/app/components/nav-bar.hbs
index f415e83..bfe4c88 100644
--- a/app/components/nav-bar.hbs
+++ b/app/components/nav-bar.hbs
@@ -2,6 +2,12 @@
   <LinkTo @route="index" class="menu-index">
     <h1>Papermerge</h1>
   </LinkTo>
+  <LinkTo @route="tags" class="menu-contact">
+    Tags
+  </LinkTo>
+  <LinkTo @route="automates" class="menu-contact">
+    Automates
+  </LinkTo>
   <div class="links">
     <LinkTo @route="about" class="menu-about">
       About
diff --git a/app/models/document.js b/app/models/document.js
index 5c1145a..30a0590 100644
--- a/app/models/document.js
+++ b/app/models/document.js
@@ -1,6 +1,5 @@
 import { attr } from '@ember-data/model';
-import NodeModel from "./node";
-
+import NodeModel from './node';
 
 export default class DocumentModel extends NodeModel {
   @attr image;
@@ -8,4 +7,4 @@ export default class DocumentModel extends NodeModel {
   get type() {
     return 'document';
   }
-}
\ No newline at end of file
+}
diff --git a/app/models/folder.js b/app/models/folder.js
index 6fdcdb4..8722631 100644
--- a/app/models/folder.js
+++ b/app/models/folder.js
@@ -1,11 +1,8 @@
 import { attr } from '@ember-data/model';
-import NodeModel from "./node";
-
+import NodeModel from './node';
 
 export default class FolderModel extends NodeModel {
-
   get type() {
     return 'folder';
   }
-
-}
\ No newline at end of file
+}
diff --git a/app/models/node.js b/app/models/node.js
index c84cd1f..8080a05 100644
--- a/app/models/node.js
+++ b/app/models/node.js
@@ -1,8 +1,7 @@
 import Model, { attr } from '@ember-data/model';
 
-
 export default class NodeModel extends Model {
   @attr title;
   @attr parent;
   @attr type;
-}
\ No newline at end of file
+}
diff --git a/app/router.js b/app/router.js
index 4150042..96b4ec7 100644
--- a/app/router.js
+++ b/app/router.js
@@ -11,5 +11,21 @@ Router.map(function () {
   this.route('about');
   this.route('contact', { path: '/getting-in-touch' });
   this.route('document', { path: '/document/:document_id' });
+
+  this.route('folder', { path: '/folder/' });
   this.route('folder', { path: '/folder/:folder_id' });
+
+  this.route('tags', function () {
+    this.route('add');
+    this.route('tag', { path: '/:tag_id' });
+    this.route('index', { path: '/' });
+  });
+
+  this.route('automates', function () {
+    this.route('add');
+    this.route('automate', { path: '/:automate_id' });
+    this.route('index', { path: '/' });
+  });
+
+  this.route('not-found', { path: '/*path' });
 });
diff --git a/app/routes/document.js b/app/routes/document.js
index 84d7ae6..bf3e230 100644
--- a/app/routes/document.js
+++ b/app/routes/document.js
@@ -2,7 +2,6 @@ import Route from '@ember/routing/route';
 import { inject as service } from '@ember/service';
 
 export default class RentalRoute extends Route {
-
   @service store;
 
   async model(params) {
diff --git a/app/routes/folder.js b/app/routes/folder.js
new file mode 100644
index 0000000..ff6bcc5
--- /dev/null
+++ b/app/routes/folder.js
@@ -0,0 +1,18 @@
+import Route from '@ember/routing/route';
+
+export default class FolderRoute extends Route {
+  async model(params) {
+    let url, response, nodes;
+
+    if (params.folder_id) {
+      url = `/api/folder/${params.folder_id}`;
+    } else {
+      url = '/api/folder/';
+    }
+    response = await fetch(url);
+
+    nodes = await response.json();
+
+    return { nodes };
+  }
+}
diff --git a/app/routes/index.js b/app/routes/index.js
index d24bebe..be1231b 100644
--- a/app/routes/index.js
+++ b/app/routes/index.js
@@ -1,12 +1,14 @@
 import Route from '@ember/routing/route';
-import { inject as service } from '@ember/service';
-
 
 export default class IndexRoute extends Route {
 
-  @service store;
-
   async model() {
-    return this.store.findAll('document');
+    let response = await fetch('/api/folder.json');;
+    let { data } = await response.json();
+
+    return data.map((model) => {
+      let { id, type, attributes } = model;
+      return { id, type, ...attributes };
+    });
   }
 }
diff --git a/app/serializers/application.js b/app/serializers/application.js
deleted file mode 100644
index 4756f2c..0000000
--- a/app/serializers/application.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import JSONAPISerializer from '@ember-data/serializer/json-api';
-
-export default class ApplicationSerializer extends JSONAPISerializer {
-    
-}
\ No newline at end of file
diff --git a/app/styles/app.css b/app/styles/app.css
index 414c9dd..58fae31 100644
--- a/app/styles/app.css
+++ b/app/styles/app.css
@@ -79,9 +79,7 @@ p {
 
 .menu {
   height: 4em;
-  background-color: #677ae4;
-  background-color: #05526A;
-  background-color: #e46855;
+  background-color: #4c4b4b;
 }
 
 .menu h1 {
diff --git a/app/templates/about.hbs b/app/templates/about.hbs
index 1ad233a..a9988f0 100644
--- a/app/templates/about.hbs
+++ b/app/templates/about.hbs
@@ -1,7 +1,5 @@
-<Jumbo>
-  <h2>About Papermerge</h2>
-  <p>
-    The Papermerge website is a delightful project created to explore Ember.
-  </p>
-  <LinkTo @route="contact" class="button">Contact Us</LinkTo>
-</Jumbo>
\ No newline at end of file
+<h2>About Papermerge</h2>
+<p>
+  The Papermerge website is a delightful project created to explore Ember.
+</p>
+<LinkTo @route="contact" class="button">Contact Us</LinkTo>
diff --git a/app/templates/automates/add.hbs b/app/templates/automates/add.hbs
new file mode 100644
index 0000000..61cd364
--- /dev/null
+++ b/app/templates/automates/add.hbs
@@ -0,0 +1 @@
+<h1>New Automate</h1>
\ No newline at end of file
diff --git a/app/templates/automates/automate.hbs b/app/templates/automates/automate.hbs
new file mode 100644
index 0000000..d6f4c22
--- /dev/null
+++ b/app/templates/automates/automate.hbs
@@ -0,0 +1,3 @@
+<h1>Automate</h1>
+
+<LinkTo @route="automates.add" class="btn btn-success">New</LinkTo>
\ No newline at end of file
diff --git a/app/templates/automates/index.hbs b/app/templates/automates/index.hbs
new file mode 100644
index 0000000..d0abf2a
--- /dev/null
+++ b/app/templates/automates/index.hbs
@@ -0,0 +1,4 @@
+<h1>Automates Index</h1>
+
+
+<LinkTo @route="automates.add" class="btn btn-success">New</LinkTo>
\ No newline at end of file
diff --git a/app/templates/contact.hbs b/app/templates/contact.hbs
index 1ff4d8e..44ab50c 100644
--- a/app/templates/contact.hbs
+++ b/app/templates/contact.hbs
@@ -1,16 +1,14 @@
-<Jumbo>
-  <h2>Contact Us</h2>
+<h2>Contact Us</h2>
+<p>
+  Papermerge Representatives would love to help you<br>
+  choose a destination or answer any questions you may have.
+</p>
+<address>
+  Papermerge HQ
   <p>
-    Papermerge Representatives would love to help you<br>
-    choose a destination or answer any questions you may have.
+    Löwenberger str 4,<br>
+    10315 Berlin
   </p>
-  <address>
-    Papermerge HQ
-    <p>
-      Löwenberger str 4,<br>
-      10315 Berlin
-    </p>
-    <a href="mailto:eugen@papermerge.com">eugen@papermerge.com</a>
-  </address>
-  <LinkTo @route="about" class="button">About</LinkTo>
-</Jumbo>
\ No newline at end of file
+  <a href="mailto:eugen@papermerge.com">eugen@papermerge.com</a>
+</address>
+<LinkTo @route="about" class="button">About</LinkTo>
diff --git a/app/templates/folder.hbs b/app/templates/folder.hbs
new file mode 100644
index 0000000..130b508
--- /dev/null
+++ b/app/templates/folder.hbs
@@ -0,0 +1,5 @@
+{{#each @model as |node|}}
+  <div>
+    {{node.attributes.title}}
+  </div>
+{{/each}}
\ No newline at end of file
diff --git a/app/templates/index.hbs b/app/templates/index.hbs
index ecc1703..e8d7eaf 100644
--- a/app/templates/index.hbs
+++ b/app/templates/index.hbs
@@ -1,8 +1,2 @@
-<Jumbo>
-  <h2>Welcome to Papermerge!</h2>
-  <p>We hope you find exactly what you're looking for in a place to stay.</p>
-  <LinkTo @route="about" class="button">About Us</LinkTo>
-</Jumbo>
-
-
+<h1>Index </h1>
 <Documents @docs={{@model}} />
\ No newline at end of file
diff --git a/app/templates/not-found.hbs b/app/templates/not-found.hbs
new file mode 100644
index 0000000..ec865af
--- /dev/null
+++ b/app/templates/not-found.hbs
@@ -0,0 +1 @@
+<h1>Page Not Found</h1>
\ No newline at end of file
diff --git a/app/templates/tags/add.hbs b/app/templates/tags/add.hbs
new file mode 100644
index 0000000..04307c4
--- /dev/null
+++ b/app/templates/tags/add.hbs
@@ -0,0 +1 @@
+<h1>New Tag</h1>
\ No newline at end of file
diff --git a/app/templates/tags/index.hbs b/app/templates/tags/index.hbs
new file mode 100644
index 0000000..6e7c72e
--- /dev/null
+++ b/app/templates/tags/index.hbs
@@ -0,0 +1,3 @@
+<h1>Tags Index</h1>
+
+<LinkTo @route="tags.add" class="btn btn-success">New</LinkTo>
diff --git a/app/templates/tags/tag.hbs b/app/templates/tags/tag.hbs
new file mode 100644
index 0000000..b116094
--- /dev/null
+++ b/app/templates/tags/tag.hbs
@@ -0,0 +1 @@
+<h1>Tags</h1>
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 3eac716..6e354c8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2761,6 +2761,85 @@
         "semver": "^7.3.2"
       }
     },
+    "@embroider/shared-internals": {
+      "version": "0.40.0",
+      "resolved": "https://registry.npmjs.org/@embroider/shared-internals/-/shared-internals-0.40.0.tgz",
+      "integrity": "sha512-Ovr/i0Qgn6W6jdGXMvYJKlRoRpyBY9uhYozDSFKlBjeEmRJ0Plp7OST41+O5Td6Pqp+Rv2jVSnGzhA/MpC++NQ==",
+      "dev": true,
+      "requires": {
+        "ember-rfc176-data": "^0.3.17",
+        "fs-extra": "^7.0.1",
+        "lodash": "^4.17.10",
+        "pkg-up": "^3.1.0",
+        "resolve-package-path": "^1.2.2",
+        "semver": "^7.3.2",
+        "typescript-memoize": "^1.0.0-alpha.3"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+          "dev": true,
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+          "dev": true,
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "p-limit": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+          "dev": true,
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "p-try": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+          "dev": true
+        },
+        "pkg-up": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
+          "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==",
+          "dev": true,
+          "requires": {
+            "find-up": "^3.0.0"
+          }
+        },
+        "resolve-package-path": {
+          "version": "1.2.7",
+          "resolved": "https://registry.npmjs.org/resolve-package-path/-/resolve-package-path-1.2.7.tgz",
+          "integrity": "sha512-fVEKHGeK85bGbVFuwO9o1aU0n3vqQGrezPc51JGu9UTXpFQfWq5qCeKxyaRUSvephs+06c5j5rPq/dzHGEo8+Q==",
+          "dev": true,
+          "requires": {
+            "path-root": "^0.1.1",
+            "resolve": "^1.10.0"
+          }
+        }
+      }
+    },
     "@eslint/eslintrc": {
       "version": "0.4.3",
       "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
@@ -3095,6 +3174,12 @@
       "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
       "dev": true
     },
+    "@miragejs/pretender-node-polyfill": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/@miragejs/pretender-node-polyfill/-/pretender-node-polyfill-0.1.2.tgz",
+      "integrity": "sha512-M/BexG/p05C5lFfMunxo/QcgIJnMT2vDVCd00wNqK2ImZONIlEETZwWJu1QtLxtmYlSHlCFl3JNzp0tLe7OJ5g==",
+      "dev": true
+    },
     "@nodelib/fs.scandir": {
       "version": "2.1.5",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -9540,6 +9625,71 @@
       "integrity": "sha1-IMtop5D+D94kiN39jvu332/nZvI=",
       "dev": true
     },
+    "ember-cli-mirage": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/ember-cli-mirage/-/ember-cli-mirage-2.2.0.tgz",
+      "integrity": "sha512-w+DrFEGuuLyHzJwOVkG0yOLvgwYezaMBNvvZJQzQkv1W3CsdhllkY1ZauYgL0dhrmYJwRFtp8DnaPQwBTDCSfA==",
+      "dev": true,
+      "requires": {
+        "@embroider/macros": "^0.40.0",
+        "broccoli-file-creator": "^2.1.1",
+        "broccoli-funnel": "^3.0.3",
+        "broccoli-merge-trees": "^4.2.0",
+        "ember-auto-import": "^1.2.19",
+        "ember-cli-babel": "^7.5.0",
+        "ember-get-config": "^0.2.4 || ^0.3.0",
+        "ember-inflector": "^2.0.0 || ^3.0.0 || ^4.0.0",
+        "lodash-es": "^4.17.11",
+        "miragejs": "^0.1.31"
+      },
+      "dependencies": {
+        "@embroider/macros": {
+          "version": "0.40.0",
+          "resolved": "https://registry.npmjs.org/@embroider/macros/-/macros-0.40.0.tgz",
+          "integrity": "sha512-ygChvFoebSi/N8b+A+XFncd454gLYBYHancrtY0AE/h6Y1HouoqQvji/IfaLisGoeuwUWuI9rCBv97COweu/rA==",
+          "dev": true,
+          "requires": {
+            "@embroider/shared-internals": "0.40.0",
+            "assert-never": "^1.1.0",
+            "ember-cli-babel": "^7.23.0",
+            "lodash": "^4.17.10",
+            "resolve": "^1.8.1",
+            "semver": "^7.3.2"
+          }
+        },
+        "broccoli-merge-trees": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-4.2.0.tgz",
+          "integrity": "sha512-nTrQe5AQtCrW4enLRvbD/vTLHqyW2tz+vsLXQe4IEaUhepuMGVKJJr+I8n34Vu6fPjmPLwTjzNC8izMIDMtHPw==",
+          "dev": true,
+          "requires": {
+            "broccoli-plugin": "^4.0.2",
+            "merge-trees": "^2.0.0"
+          }
+        },
+        "broccoli-plugin": {
+          "version": "4.0.7",
+          "resolved": "https://registry.npmjs.org/broccoli-plugin/-/broccoli-plugin-4.0.7.tgz",
+          "integrity": "sha512-a4zUsWtA1uns1K7p9rExYVYG99rdKeGRymW0qOCNkvDPHQxVi3yVyJHhQbM3EZwdt2E0mnhr5e0c/bPpJ7p3Wg==",
+          "dev": true,
+          "requires": {
+            "broccoli-node-api": "^1.7.0",
+            "broccoli-output-wrapper": "^3.2.5",
+            "fs-merger": "^3.2.1",
+            "promise-map-series": "^0.3.0",
+            "quick-temp": "^0.1.8",
+            "rimraf": "^3.0.2",
+            "symlink-or-copy": "^1.3.1"
+          }
+        },
+        "promise-map-series": {
+          "version": "0.3.0",
+          "resolved": "https://registry.npmjs.org/promise-map-series/-/promise-map-series-0.3.0.tgz",
+          "integrity": "sha512-3npG2NGhTc8BWBolLLf8l/92OxMGaRLbqvIh9wjCHhDXNvk4zsxaTaCpiCunW09qWPrN2zeNSNwRLVBrQQtutA==",
+          "dev": true
+        }
+      }
+    },
     "ember-cli-normalize-entity-name": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/ember-cli-normalize-entity-name/-/ember-cli-normalize-entity-name-1.0.0.tgz",
@@ -10321,6 +10471,37 @@
         }
       }
     },
+    "ember-get-config": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/ember-get-config/-/ember-get-config-0.3.0.tgz",
+      "integrity": "sha512-0e2pKzwW5lBZ4oJnvu9qHOht4sP1MWz/m3hyz8kpSoMdrlZVf62LDKZ6qfKgy8drcv5YhCMYE6QV7MhnqlrzEQ==",
+      "dev": true,
+      "requires": {
+        "broccoli-file-creator": "^1.1.1",
+        "ember-cli-babel": "^7.0.0"
+      },
+      "dependencies": {
+        "broccoli-file-creator": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/broccoli-file-creator/-/broccoli-file-creator-1.2.0.tgz",
+          "integrity": "sha512-l9zthHg6bAtnOfRr/ieZ1srRQEsufMZID7xGYRW3aBDv3u/3Eux+Iawl10tAGYE5pL9YB4n5X4vxkp6iNOoZ9g==",
+          "dev": true,
+          "requires": {
+            "broccoli-plugin": "^1.1.0",
+            "mkdirp": "^0.5.1"
+          }
+        },
+        "mkdirp": {
+          "version": "0.5.5",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+          "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+          "dev": true,
+          "requires": {
+            "minimist": "^1.2.5"
+          }
+        }
+      }
+    },
     "ember-inflector": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/ember-inflector/-/ember-inflector-4.0.2.tgz",
@@ -12138,6 +12319,12 @@
       "integrity": "sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ==",
       "dev": true
     },
+    "fake-xml-http-request": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/fake-xml-http-request/-/fake-xml-http-request-2.1.2.tgz",
+      "integrity": "sha512-HaFMBi7r+oEC9iJNpc3bvcW7Z7iLmM26hPDmlb0mFwyANSsOQAtJxbdWsXITKOzZUyMYK0zYCv3h5yDj9TsiXg==",
+      "dev": true
+    },
     "fast-deep-equal": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -13609,6 +13796,12 @@
       "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
       "dev": true
     },
+    "inflected": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/inflected/-/inflected-2.1.0.tgz",
+      "integrity": "sha512-hAEKNxvHf2Iq3H60oMBHkB4wl5jn3TPF3+fXek/sRwAB5gP9xWs4r7aweSF95f99HFoz69pnZTcu8f0SIHV18w==",
+      "dev": true
+    },
     "inflection": {
       "version": "1.13.1",
       "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.1.tgz",
@@ -14366,6 +14559,12 @@
       "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
       "dev": true
     },
+    "lodash-es": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+      "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+      "dev": true
+    },
     "lodash._baseassign": {
       "version": "3.2.0",
       "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
@@ -14444,6 +14643,12 @@
       "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=",
       "dev": true
     },
+    "lodash.camelcase": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+      "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+      "dev": true
+    },
     "lodash.castarray": {
       "version": "4.4.0",
       "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
@@ -14456,6 +14661,12 @@
       "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
       "dev": true
     },
+    "lodash.compact": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/lodash.compact/-/lodash.compact-3.0.1.tgz",
+      "integrity": "sha1-VAzjg3dFl1gHRx4WtKK6IeclbKU=",
+      "dev": true
+    },
     "lodash.debounce": {
       "version": "4.0.8",
       "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
@@ -14490,6 +14701,30 @@
       "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=",
       "dev": true
     },
+    "lodash.forin": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/lodash.forin/-/lodash.forin-4.4.0.tgz",
+      "integrity": "sha1-XT8grlZAEfvog4H32YlJyclRlzE=",
+      "dev": true
+    },
+    "lodash.get": {
+      "version": "4.4.2",
+      "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+      "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+      "dev": true
+    },
+    "lodash.has": {
+      "version": "4.5.2",
+      "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz",
+      "integrity": "sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=",
+      "dev": true
+    },
+    "lodash.invokemap": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz",
+      "integrity": "sha1-F0jNpdiw74NpxOs+xUwh/rofLWI=",
+      "dev": true
+    },
     "lodash.isarguments": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
@@ -14502,6 +14737,36 @@
       "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
       "dev": true
     },
+    "lodash.isempty": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz",
+      "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=",
+      "dev": true
+    },
+    "lodash.isequal": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+      "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
+      "dev": true
+    },
+    "lodash.isfunction": {
+      "version": "3.0.9",
+      "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz",
+      "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==",
+      "dev": true
+    },
+    "lodash.isinteger": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
+      "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=",
+      "dev": true
+    },
+    "lodash.isplainobject": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+      "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
+      "dev": true
+    },
     "lodash.kebabcase": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
@@ -14519,6 +14784,24 @@
         "lodash.isarray": "^3.0.0"
       }
     },
+    "lodash.lowerfirst": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/lodash.lowerfirst/-/lodash.lowerfirst-4.3.1.tgz",
+      "integrity": "sha1-3jx7EuAsZSSgBZwvbLfFxSZVoT0=",
+      "dev": true
+    },
+    "lodash.map": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
+      "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=",
+      "dev": true
+    },
+    "lodash.mapvalues": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz",
+      "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=",
+      "dev": true
+    },
     "lodash.memoize": {
       "version": "4.1.2",
       "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@@ -14537,12 +14820,24 @@
       "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=",
       "dev": true
     },
+    "lodash.pick": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
+      "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=",
+      "dev": true
+    },
     "lodash.restparam": {
       "version": "3.6.1",
       "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
       "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
       "dev": true
     },
+    "lodash.snakecase": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
+      "integrity": "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40=",
+      "dev": true
+    },
     "lodash.template": {
       "version": "4.5.0",
       "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
@@ -14580,6 +14875,12 @@
       "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=",
       "dev": true
     },
+    "lodash.values": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-4.3.0.tgz",
+      "integrity": "sha1-o6bCsOvsxcLLocF+bmIP6BtT00c=",
+      "dev": true
+    },
     "log-symbols": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
@@ -15054,6 +15355,54 @@
         }
       }
     },
+    "miragejs": {
+      "version": "0.1.42",
+      "resolved": "https://registry.npmjs.org/miragejs/-/miragejs-0.1.42.tgz",
+      "integrity": "sha512-35Gl2Pubkj/9Xk/D5/JcKJyspPWCNcpMkrlEpP0ArjQ4wKINQaFIgg5R/LW5v/yvsLpMjf9tzZuHtO3NDZeZow==",
+      "dev": true,
+      "requires": {
+        "@miragejs/pretender-node-polyfill": "^0.1.0",
+        "inflected": "^2.0.4",
+        "lodash.assign": "^4.2.0",
+        "lodash.camelcase": "^4.3.0",
+        "lodash.clonedeep": "^4.5.0",
+        "lodash.compact": "^3.0.1",
+        "lodash.find": "^4.6.0",
+        "lodash.flatten": "^4.4.0",
+        "lodash.forin": "^4.4.0",
+        "lodash.get": "^4.4.2",
+        "lodash.has": "^4.5.2",
+        "lodash.invokemap": "^4.6.0",
+        "lodash.isempty": "^4.4.0",
+        "lodash.isequal": "^4.5.0",
+        "lodash.isfunction": "^3.0.9",
+        "lodash.isinteger": "^4.0.4",
+        "lodash.isplainobject": "^4.0.6",
+        "lodash.lowerfirst": "^4.3.1",
+        "lodash.map": "^4.6.0",
+        "lodash.mapvalues": "^4.6.0",
+        "lodash.pick": "^4.4.0",
+        "lodash.snakecase": "^4.1.1",
+        "lodash.uniq": "^4.5.0",
+        "lodash.uniqby": "^4.7.0",
+        "lodash.values": "^4.3.0",
+        "pretender": "^3.4.7"
+      },
+      "dependencies": {
+        "lodash.assign": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+          "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
+          "dev": true
+        },
+        "lodash.flatten": {
+          "version": "4.4.0",
+          "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+          "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=",
+          "dev": true
+        }
+      }
+    },
     "mississippi": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
@@ -16297,6 +16646,16 @@
       "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
       "dev": true
     },
+    "pretender": {
+      "version": "3.4.7",
+      "resolved": "https://registry.npmjs.org/pretender/-/pretender-3.4.7.tgz",
+      "integrity": "sha512-jkPAvt1BfRi0RKamweJdEcnjkeu7Es8yix3bJ+KgBC5VpG/Ln4JE3hYN6vJym4qprm8Xo5adhWpm3HCoft1dOw==",
+      "dev": true,
+      "requires": {
+        "fake-xml-http-request": "^2.1.2",
+        "route-recognizer": "^0.3.3"
+      }
+    },
     "prettier": {
       "version": "2.4.1",
       "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz",
@@ -17024,6 +17383,12 @@
         "estree-walker": "^0.6.1"
       }
     },
+    "route-recognizer": {
+      "version": "0.3.4",
+      "resolved": "https://registry.npmjs.org/route-recognizer/-/route-recognizer-0.3.4.tgz",
+      "integrity": "sha512-2+MhsfPhvauN1O8KaXpXAOfR/fwe8dnUXVM+xw7yt40lJRfPVQxV6yryZm0cgRvAj5fMF/mdRZbL2ptwbs5i2g==",
+      "dev": true
+    },
     "rsvp": {
       "version": "4.8.5",
       "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
diff --git a/package.json b/package.json
index 573a972..1c502b6 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "papermerge",
-  "version": "0.0.0",
+  "version": "0.1.0",
   "private": true,
   "description": "Small description for papermerge goes here",
   "repository": "",
diff --git a/public/api/folder.json b/public/api/folder.json
new file mode 100644
index 0000000..95d082f
--- /dev/null
+++ b/public/api/folder.json
@@ -0,0 +1,32 @@
+{
+    "data": [
+        {
+            "type": "document",
+            "id": 1,
+            "attributes": {
+                "title": "invoice.pdf"
+            }
+        },
+        {
+            "type": "document",
+            "id": 2,
+            "attributes": {
+                "title": "payment_1.pdf"
+            }
+        },
+        {
+            "type": "document",
+            "id": 3,
+            "attributes": {
+                "title": "payment_2.pdf"
+            }
+        },
+        {
+            "type": "folder",
+            "id": 4,
+            "attributes": {
+                "title": "My Documents"
+            }
+        }
+    ]
+}
\ No newline at end of file
-- 
GitLab