Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/modules / ___dist / chain-able / test / TransformChain.js
Size: Mime:
"use strict";

const log = require('fliplog');

const _require = require("../src"),
      Chain = _require.Chain,
      toArr = _require.toArr;

let ChainInc = class ChainInc extends Chain {
  getSetIncrement(names) {
    toArr(names).map(name => this.method(name).initial(0).getSet() // .define()
    .onSet(() => this.tap(name, x => x + 1)).onCall(() => this.tap(name, x => x + 1)).build());
    return this;
  }

};

const last = arr => arr.slice(0).pop();

let TodoStore = class TodoStore extends ChainInc {
  constructor(parent) {
    super(parent);
    this.set('todos', []).getSetIncrement(['completed', 'pending', 'total']).transform('todos', todos => {
      this.total(+1) && last(todos).completed ? this.completed(+1) : this.pending(+1);
      return todos;
    });
  }

  add(task, completed = false) {
    const todo = {
      task,
      completed,
      assignee: null
    };
    const todos = this.get('todos').concat([todo]);
    return this.set('todos', todos);
  }

}; // class SomeComponent extends React.Component {
//   store = new TodoStore(this)
//   addTasks = task => this.store
//     .add({eh: true})
//     .add({eh: false})
//     .add({moose: 'eh!'}, true)
//
//   render() {
//     const {completed, pending, total, todos} = this.store.entries()
//     return (
//       <ul>{todos.map(todo =>
//         <li>{completed}/{total} Tasts Completed</li>
//         <li>{pending}/{total} Tasts Pending</li>
//       }</ul>
//     )
//   }
// }

test('todostore', () => {
  const _todos = new TodoStore();

  _todos.add({
    eh: true
  });

  _todos.add({
    eh: false
  });

  _todos.add({
    moose: 'eh!'
  }, true);

  const _todos$entries = _todos.entries(),
        completed = _todos$entries.completed,
        pending = _todos$entries.pending,
        total = _todos$entries.total,
        todos = _todos$entries.todos;

  expect({
    todos,
    completed: +completed,
    pending: +pending,
    total: +total
  }).toEqual({
    todos: [{
      task: {
        eh: true
      },
      completed: false,
      assignee: null
    }, {
      task: {
        eh: false
      },
      completed: false,
      assignee: null
    }, {
      task: {
        moose: 'eh!'
      },
      completed: true,
      assignee: null
    }],
    completed: 1,
    pending: 2,
    total: 3
  });
});