コード例 #1
0
ファイル: mori.js プロジェクト: phuongy/point-break
export function whereDeepFn(map, collection) {

	map = mori.toClj(map);

	// create a reducing function that will test each attribute
	let reduce = (map) => mori.reduceKV(
		(func, mapKey, mapValue) => {
			return mori.comp(func, (record) => {

				if (record === false ) return false;

				let recordValue = mori.get(record, mapKey);

				if (mori.isCollection(mapValue)) {
					return (reduce(mapValue)(recordValue) === true ? record : false);
				}

				if ( record && mori.equals(recordValue, mapValue) ) {
					return record;
				}

				return false;
			})
		},
		result => {
			return (result !== false ? true : false);
		},
		map
	);

	return mori.into( mori.empty(collection), mori.filter(reduce(map), collection) );
}
コード例 #2
0
 /**
  * Adds the results to the existing search results for the
  * respective search term. Creates a new entry if none is
  * available.
  *
  * @param  {Array} results
  */
 receiveSearchResultsFrom(results) {
     const TERM = results._term,
         SOURCE = results._source,
     // check if term exists in state
         EXISTS = _m.get(this.state.results, TERM) !== null;
     // if not, make it a new seq
     let old = EXISTS ? _m.get(this.state.results, TERM) : _m.vector(),
     // convert results in vector
         newResults = _m.toClj(results);
     // add a _source field so the view can display where this result came from
     newResults = _m.map(res => _m.assoc(res, '_source', SOURCE), newResults);
     // add a _url field so that we can link inside yourturn
     newResults = _m.map(
         res => _m.assoc(
                     res,
                     '_url',
                     getLocalUrlForService(SOURCE, _m.get(res, Services[SOURCE].id))),
         newResults);
     // append results in seq
     old = _m.into(old, newResults);
     // sort seq by matched_rank desc
     old = _m.sortBy(res => _m.get(res, 'matched_rank'), sortDesc, old);
     // PROFIT
     this.setState({
         results: _m.assoc(this.state.results, TERM, old)
     });
 }
コード例 #3
0
  it('Should Dispatch CART:ADD when clicking on add to cart button', function(){
    var addToCartButton = utils.findDOMNodeWithClass(dom, 'button'),
        buttonNode = React.findDOMNode(addToCartButton);

    TestUtils.Simulate.click(buttonNode);
    DispatcherMock.emit.callCount.should.equal(2);
    var firstCall = DispatcherMock.emit.getCall(0);
    firstCall.args[0].should.equal('CART:ADD');
    _.equals(_.toClj(productMock), firstCall.args[1]).should.be.true;
  });
コード例 #4
0
 getInitialState: function() {
   return {
     //current page (either 'catalog', 'cart', 'checkout' or 'thank-you')
     page: 'catalog',
     //all products in the catalog
     catalog: _.toClj(data.products),
     //products in the cart
     cart: _.vector(),
     //user details
     customerdetails: _.hashMap()
   };
 },
コード例 #5
0
ファイル: index.js プロジェクト: smallhelm/hairball
    put: function(path, value){
      path = normalizePath(path);
      value = mori.toClj(value);

      var new_i = path.length === 0 ? value : mori.assocIn(i, path, value);
      var old_i = i;
      i = new_i;//mutate before calling onChange
      if(onChange){
        onChange(new_i, old_i, path, value);
      }
      return new_i;
    },
コード例 #6
0
ファイル: index.js プロジェクト: phuongy/point-break
export const reducer = createReducer([ERROR_REMOVE, ERROR_CREATE], function(state, action) {

	switch (action.type) {
		case ERROR_CREATE:
			return mori.assoc(state, action.payload.id, mori.toClj(action.payload));
			break;
		case ERROR_REMOVE:
			return mori.dissoc(state, action.payload.id);
			break;
		default:
			return state;
	}

}, createInitialState);
コード例 #7
0
describe('Catalog', function(){

  var fakeProducts = _.toClj([
    { id: 1, name: 'p1' },
    { id: 2, name: 'p1' },
    { id: 3, name: 'p1' }
  ]);

  var CatalogStoreMock = {
    getProducts: function(){
      return fakeProducts;
    }
  };

  var CatalogItem = utils.generateMockComponent('catalog-item');
  var stateMock = _.hashMap();
  var subject, revert;

  before(function(){
    subject = rewire('../../../components/shopping_cart/catalog');
    revert = subject.__set__({
      CatalogStore: CatalogStoreMock,
      CatalogItem: CatalogItem
    });
  });

  after(function(){
    revert();
  });

  it('Should render one CatalogItem component for each product', function(){
    var dom = utils.renderWithState(subject, stateMock);
    var itemComponents = utils.findChildComponentArray(dom, CatalogItem);
    itemComponents.should.be.an.Array;
    itemComponents.should.have.length(3);
  });

  it('Should render loading text if catalog is empty', function(){
    var getProductsStub = sinon.stub(CatalogStoreMock, 'getProducts', function(){
      return _.vector();
    });
    var dom = utils.renderWithState(subject, stateMock);
    var loadingElement = utils.findDOMNodeWithClass(dom, 'catalog-loading');
    loadingElement.should.be.an.Object;
    getProductsStub.restore();

  });
});
コード例 #8
0
ファイル: surroundWithSea.js プロジェクト: chenglou/the-game
function surroundWithSea(map) {
  var seaTileConfig = M.toClj({
    units: {
      Sea: M.toJs(M.get(everyUnitDefaultConfigDebug, 'Sea')),
    },
    color: 'Gray',
  });
  var rowLength = M.count(M.first(map));

  var row = M.repeat(rowLength, seaTileConfig);

  var newMap = M.concat([row], butLast(M.rest(map)), [row]);

  // columns
  newMap = M.map(row => {
    return M.into(
      M.vector(),
      M.concat([seaTileConfig], butLast(M.rest(row)), [seaTileConfig])
    );
  }, newMap);

  return M.into(M.vector(), newMap);
}
コード例 #9
0
ファイル: todos.js プロジェクト: julianitor/redflow
 atom.updateIn(s.todos, function(list){
   return _.toClj(todoList);
 });
コード例 #10
0
ファイル: app.js プロジェクト: akilism/react-starter
 return Object.keys(initialState).reduce((acc, k) => {
   const reducerState = {};
   reducerState[k] = _.toClj(initialState[k]);
   return Object.assign({}, acc, reducerState);
 }, {});
コード例 #11
0
 before(function(){
   subject = rewire('../../../components/shopping_cart/catalog_item');
   revert = subject.__set__('Dispatcher', DispatcherMock);
   dom = utils.renderWithProps(subject, { product: _.toClj(productMock) });
 });
コード例 #12
0
ファイル: everyUnit.js プロジェクト: chenglou/the-game
var nameInDisplayOrder = {
  Grass: 1,
  Sea: 1,

  Village: 2,
  Road: 3,

  Meadow: 4,
  Tree: 4,

  Tombstone: 5,
  Watchtower: 6,
  Villager: 7,
  Cannon: 7,
};

var defaultConfig = M.toClj({
  Grass: {},
  Sea: {},
  Village: {gold: 7, wood: 0, rank: 0, hp: 1},
  Villager: {hasMoved: false, cooldown: 0, rank: 0},
  Road: {cooldown: 1},
  Meadow: {cooldown: 2},
  Tree: {},
  Tombstone: {},
  Watchtower: {},
  Cannon: {hasMoved: false},
});

module.exports = {nameInDisplayOrder, defaultConfig};
コード例 #13
0
 it('getProducts should return available products', function(){
   atom.assocIn(p.products, _.toClj(fakeProducts));
   var products = subject.getProducts(atom.getState());
   _.count(products).should.equal(3);
 });
コード例 #14
0
 beforeEach(function(){
   //empty the atom
   atom.swap(_.toClj({}));
 });
コード例 #15
0
ファイル: index.js プロジェクト: phuongy/point-break
function createInitialState() {
	return mori.toClj({});
}
コード例 #16
0
ファイル: app-store.js プロジェクト: Fortyseven/itch
 get_state: () => mori.toClj({}),
コード例 #17
0
ファイル: gists.js プロジェクト: jcouyang/evergist
 data.entity.forEach((entity)=>{
   console.debug('puting object' + entity.id);
   entity = _.updateIn(_.toClj(entity), ['files'], _.vals);
   db.gist.put(_.toJs(entity));
 });
コード例 #18
0
  },
  ui: {
    menuOpen: false,
    settingsOpen: false,
    settingsTab: 'autoack'
  }
};

var callCount = 0;
function onAtomChange(newState){
  //console.log('Atom changed', newState.toString());
  callCount++;
}

//cambiar referencia completa
atom.swap(_.toClj(valorInicial));

atom.addListener(onAtomChange);

//obtener datos
console.log('atom.getIn OK', atom.getIn(['page']) === 'events');
console.log('atom.getIn vector OK', atom.getIn(['data', 'filters', 0, 'filterString']) === 'domain:foo');

//modificar datos con assoc
atom.assocIn(['ui', 'menuOpen'], true);
atom.assocIn(['data', 'events', 4, 'active'], true);

console.log('atom.assocIn OK', atom.getIn(['ui', 'menuOpen']) === true);
console.log('atom.assocIn vector OK', atom.getIn(['data', 'events', 4, 'active']) === true);

//modificar datos con updateIn