diff options
Diffstat (limited to 'src/stores/RecipePreviewsStore.js')
-rw-r--r-- | src/stores/RecipePreviewsStore.js | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/stores/RecipePreviewsStore.js b/src/stores/RecipePreviewsStore.js new file mode 100644 index 000000000..e25936f15 --- /dev/null +++ b/src/stores/RecipePreviewsStore.js | |||
@@ -0,0 +1,50 @@ | |||
1 | import { action, computed, observable } from 'mobx'; | ||
2 | import { debounce } from 'lodash'; | ||
3 | |||
4 | import Store from './lib/Store'; | ||
5 | import CachedRequest from './lib/CachedRequest'; | ||
6 | import Request from './lib/Request'; | ||
7 | import { gaEvent } from '../lib/analytics'; | ||
8 | |||
9 | export default class RecipePreviewsStore extends Store { | ||
10 | @observable allRecipePreviewsRequest = new CachedRequest(this.api.recipePreviews, 'all'); | ||
11 | @observable featuredRecipePreviewsRequest = new CachedRequest(this.api.recipePreviews, 'featured'); | ||
12 | @observable searchRecipePreviewsRequest = new Request(this.api.recipePreviews, 'search'); | ||
13 | |||
14 | constructor(...args) { | ||
15 | super(...args); | ||
16 | |||
17 | // Register action handlers | ||
18 | this.actions.recipePreview.search.listen(this._search.bind(this)); | ||
19 | } | ||
20 | |||
21 | @computed get all() { | ||
22 | return this.allRecipePreviewsRequest.execute().result || []; | ||
23 | } | ||
24 | |||
25 | @computed get featured() { | ||
26 | return this.featuredRecipePreviewsRequest.execute().result || []; | ||
27 | } | ||
28 | |||
29 | @computed get searchResults() { | ||
30 | return this.searchRecipePreviewsRequest.result || []; | ||
31 | } | ||
32 | |||
33 | @computed get dev() { | ||
34 | return this.stores.recipes.all.filter(r => r.local); | ||
35 | } | ||
36 | |||
37 | // Actions | ||
38 | @action _search({ needle }) { | ||
39 | if (needle !== '') { | ||
40 | this.searchRecipePreviewsRequest.execute(needle); | ||
41 | |||
42 | this._analyticsSearch(needle); | ||
43 | } | ||
44 | } | ||
45 | |||
46 | // Helper | ||
47 | _analyticsSearch = debounce((needle) => { | ||
48 | gaEvent('Recipe', 'search', needle); | ||
49 | }, 3000); | ||
50 | } | ||