Home Reference Source Test Repository

src/components/search/search_state.js

import assign from "lodash/object/assign";
import Arkham from "../../core/arkham";
import Events from "../../core/mixins/events";

let state = {
  isActive: false,
  isTyping: false,
  isFocused: false,
  results: [],
  query: ""
};

let SearchState = {};

// Mixin Pattern
// merge { } with { on, off, trigger }
// SearchState.on, SearchState.off, SearchState.trigger etc.....
assign(SearchState, Events);

//Arkham.on('overlay:click', () => {
//  state.isActive = false;
//
//  SearchState.trigger("change:isActive", state);
//});

Arkham.on("search.start", () => {
  state.isActive = true;

  SearchState.trigger("change:isActive", state);
});

Arkham.on("search.start", () => {
  state.isFocused = true;

  SearchState.trigger("change:isFocused", state);
});

Arkham.on("search.end overlay:click", () => {
  state.isActive = false;
  state.results = [];

  SearchState.trigger("change:isActive", state);
});

Arkham.on("search.fetch", (data) => {
  state.isTyping = true;
  state.query = data.query;

  SearchState.trigger("change:isTyping", state);
});

Arkham.on("search.fetched", (data) => {
  state.results = data.results.slice(0, 5);
  state.isTyping = false;

  SearchState.trigger("change:results", state);
});

export default SearchState;