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) ); }
/** * 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) }); }
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; });
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() }; },
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; },
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);
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(); }); });
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); }
atom.updateIn(s.todos, function(list){ return _.toClj(todoList); });
return Object.keys(initialState).reduce((acc, k) => { const reducerState = {}; reducerState[k] = _.toClj(initialState[k]); return Object.assign({}, acc, reducerState); }, {});
before(function(){ subject = rewire('../../../components/shopping_cart/catalog_item'); revert = subject.__set__('Dispatcher', DispatcherMock); dom = utils.renderWithProps(subject, { product: _.toClj(productMock) }); });
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};
it('getProducts should return available products', function(){ atom.assocIn(p.products, _.toClj(fakeProducts)); var products = subject.getProducts(atom.getState()); _.count(products).should.equal(3); });
beforeEach(function(){ //empty the atom atom.swap(_.toClj({})); });
function createInitialState() { return mori.toClj({}); }
get_state: () => mori.toClj({}),
data.entity.forEach((entity)=>{ console.debug('puting object' + entity.id); entity = _.updateIn(_.toClj(entity), ['files'], _.vals); db.gist.put(_.toJs(entity)); });
}, 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