types .model("AuthorsStore", { authors: types.map(Author) }) .views(self => ({ get blog() { return getParent(self); }, get allAuthors() { return self.authors.values(); }, get currentAuthor() { if (!self.blog.auth.isAuthor || !self.blog.auth.user) { return null; } const authorName = self.blog.auth.user.authorName; return self.allAuthors.find(author => author.id === authorName) || null; } }))
types .model("UIStore", { collapsedSidebar: false, languages: types.map(Language) }) .views(self => ({ get blog() { return getParent(self); }, get allLanguages() { return self.languages.values(); } })) .actions(self => ({ toggleSidebar() { self.collapsedSidebar = !self.collapsedSidebar; }, closeSidebar() { self.collapsedSidebar = false; }, openSidebar() { self.collapsedSidebar = true; } }))
types .model("CategoriesStore", { categories: types.map(Category), areCategoriesLoaded: types.boolean }) .views(self => ({ get blog() { return getParent(self); }, get allCategories() { return self.categories.values(); } })) .actions(self => { const fetchCategories = flow(function* fetchCategories() { try { const querySnapshot = yield firestore.collection("categories").get(); querySnapshot.forEach(doc => { const category = doc.data(); self.categories.put(category); }); self.areCategoriesLoaded = true; } catch (e) {} }); return { fetchCategories }; })
types .model("PostsStore", { posts: types.map(Post), arePostsLoaded: types.boolean, sortBy: types.enumeration("sortBy", [