Skip to content
Snippets Groups Projects
node.js 1.79 KiB
Newer Older
  • Learn to ignore specific revisions
  • Eugen Ciur's avatar
    Eugen Ciur committed
    import ApplicationAdapter from './application';
    
    import { inject as service } from '@ember/service';
    
    Eugen Ciur's avatar
    Eugen Ciur committed
    
    
    Eugen Ciur's avatar
    Eugen Ciur committed
    
    
    Eugen Ciur's avatar
    Eugen Ciur committed
    export default class NodeAdapter extends ApplicationAdapter {
    
    Eugen Ciur's avatar
    Eugen Ciur committed
    
    
      async getChildren({node_id, page}) {
        let url,
          nodes,
          folders,
          docs,
          pagination = {},
          node_ids;
    
    Eugen Ciur's avatar
    Eugen Ciur committed
    
        url = this.buildURL('nodes', node_id);
    
        if (page) {
          url = `${url}?page[number]=${page}`
        }
    
        nodes = await fetch(url, {
          method: 'GET',
    
          headers: this.headers,
    
        }).then(response => response.json());
    
    
        pagination = {
          next: nodes.links.next, // url to next page
          prev: nodes.links.prev, // url to prev page
          first: nodes.links.first, // url to first page
          last: nodes.links.last, // url to last page
          page: nodes.meta.pagination.page, // current page number
          pages: nodes.meta.pagination.pages, // total number of pages
          count: nodes.meta.pagination.count, // total number of items
        }
    
        node_ids = nodes.data.map(node => {
    
          let normalized_node;
    
          if (node.type === "folders") {
            normalized_node = this.store.normalize('folder', node);
          } else if (node.type === "Document") {
            normalized_node = this.store.normalize('document', node);
          }
    
    
          this.store.push(normalized_node);
    
          return node.id;
    
    Eugen Ciur's avatar
    Eugen Ciur committed
        });
    
        folders = this.store.peekAll('folder').filter(
          folder => node_ids.includes(folder.id)
        );
        docs = this.store.peekAll('document').filter(
          doc => node_ids.includes(doc.id)
        );
    
        return {
          children: folders.concat(docs),
          pagination: pagination
        };
    
    Eugen Ciur's avatar
    Eugen Ciur committed
      }
    
    
      async getFolder(node_id) {
        let record;
    
        record = this.store.peekRecord('folder', node_id);
        if (record) {
          return record;
        }
    
        return this.store.findRecord('folder', node_id);
      }