codevise/pageflow

View on GitHub
package/src/editor/collections/PagesCollection.js

Summary

Maintainability
B
6 hrs
Test Coverage
import Backbone from 'backbone';
import _ from 'underscore';

import {Page} from '../models/Page';
import {SubsetCollection} from './SubsetCollection';

export const PagesCollection = Backbone.Collection.extend({
  model: Page,

  url: '/pages',

  comparator: function(pageA, pageB) {
    if (pageA.storylinePosition() > pageB.storylinePosition()) {
      return 1;
    }
    else if (pageA.storylinePosition() < pageB.storylinePosition()) {
      return -1;
    }
    else if (pageA.chapterPosition() > pageB.chapterPosition()) {
      return 1;
    }
    else if (pageA.chapterPosition() < pageB.chapterPosition()) {
      return -1;
    }
    else if (pageA.get('position') > pageB.get('position')) {
      return 1;
    }
    else if (pageA.get('position') < pageB.get('position')) {
      return -1;
    }
    else {
      return 0;
    }
  },

  getByPermaId: function(permaId) {
    return this.findWhere({perma_id: parseInt(permaId, 10)});
  },

  persisted: function() {
    if (!this._persisted) {
      this._persisted = new SubsetCollection({
        parent: this,
        sortOnParentSort: true,

        filter: function(page) {
          return !page.isNew();
        },
      });

      this.listenTo(this, 'change:id', function(model) {
        setTimeout(_.bind(function() {
          this._persisted.add(model);
        }, this), 0);
      });
    }

    return this._persisted;
  },
});