diff options
Diffstat (limited to 'src/stores/RecipePreviewsStore.ts')
-rw-r--r-- | src/stores/RecipePreviewsStore.ts | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/stores/RecipePreviewsStore.ts b/src/stores/RecipePreviewsStore.ts new file mode 100644 index 000000000..500f69b40 --- /dev/null +++ b/src/stores/RecipePreviewsStore.ts | |||
@@ -0,0 +1,60 @@ | |||
1 | import { action, computed, observable } from 'mobx'; | ||
2 | import { Actions } from 'src/actions/lib/actions'; | ||
3 | import { ApiInterface } from 'src/api'; | ||
4 | import Recipe from 'src/models/Recipe'; | ||
5 | import { Stores } from 'src/stores.types'; | ||
6 | |||
7 | import CachedRequest from './lib/CachedRequest'; | ||
8 | import Request from './lib/Request'; | ||
9 | import TypedStore from './lib/TypedStore'; | ||
10 | |||
11 | export default class RecipePreviewsStore extends TypedStore { | ||
12 | @observable allRecipePreviewsRequest = new CachedRequest( | ||
13 | this.api.recipePreviews, | ||
14 | 'all', | ||
15 | ); | ||
16 | |||
17 | @observable featuredRecipePreviewsRequest = new CachedRequest( | ||
18 | this.api.recipePreviews, | ||
19 | 'featured', | ||
20 | ); | ||
21 | |||
22 | @observable searchRecipePreviewsRequest = new Request( | ||
23 | this.api.recipePreviews, | ||
24 | 'search', | ||
25 | ); | ||
26 | |||
27 | constructor(stores: Stores, api: ApiInterface, actions: Actions) { | ||
28 | super(stores, api, actions); | ||
29 | |||
30 | // Register action handlers | ||
31 | this.actions.recipePreview.search.listen(this._search.bind(this)); | ||
32 | } | ||
33 | |||
34 | async setup(): Promise<void> { | ||
35 | // Not implemented | ||
36 | } | ||
37 | |||
38 | @computed get all(): Recipe[] { | ||
39 | return this.allRecipePreviewsRequest.execute().result || []; | ||
40 | } | ||
41 | |||
42 | @computed get featured(): Recipe[] { | ||
43 | return this.featuredRecipePreviewsRequest.execute().result || []; | ||
44 | } | ||
45 | |||
46 | @computed get searchResults(): Recipe[] { | ||
47 | return this.searchRecipePreviewsRequest.result || []; | ||
48 | } | ||
49 | |||
50 | @computed get dev(): Recipe[] { | ||
51 | return this.stores.recipes.all.filter(r => r.local); | ||
52 | } | ||
53 | |||
54 | // Actions | ||
55 | @action _search({ needle }): void { | ||
56 | if (needle !== '') { | ||
57 | this.searchRecipePreviewsRequest.execute(needle); | ||
58 | } | ||
59 | } | ||
60 | } | ||