diff options
Diffstat (limited to 'viewer/src/store')
-rw-r--r-- | viewer/src/store/galleryStore.ts | 190 | ||||
-rw-r--r-- | viewer/src/store/index.ts | 10 | ||||
-rw-r--r-- | viewer/src/store/uiStore.ts | 30 |
3 files changed, 115 insertions, 115 deletions
diff --git a/viewer/src/store/galleryStore.ts b/viewer/src/store/galleryStore.ts index 352a266..0cffdd9 100644 --- a/viewer/src/store/galleryStore.ts +++ b/viewer/src/store/galleryStore.ts | |||
@@ -18,105 +18,105 @@ | |||
18 | */ | 18 | */ |
19 | 19 | ||
20 | import { createModule, mutation, action } from "vuex-class-component"; | 20 | import { createModule, mutation, action } from "vuex-class-component"; |
21 | import IndexFactory from '@/services/indexfactory'; | 21 | import IndexFactory from "@/services/indexfactory"; |
22 | import Navigation from '@/services/navigation'; | 22 | import Navigation from "@/services/navigation"; |
23 | 23 | ||
24 | const VuexModule = createModule({ | 24 | const VuexModule = createModule({ |
25 | namespaced: "galleryStore", | 25 | namespaced: "galleryStore", |
26 | strict: true | 26 | strict: true |
27 | }) | 27 | }) |
28 | 28 | ||
29 | export default class GalleryStore extends VuexModule { | 29 | export default class GalleryStore extends VuexModule { |
30 | 30 | ||
31 | config: Gallery.Config | null = null; | 31 | config: Gallery.Config | null = null; |
32 | galleryIndex: Gallery.Index | null = null; | 32 | galleryIndex: Gallery.Index | null = null; |
33 | tagsIndex: Tag.Index = {}; | 33 | tagsIndex: Tag.Index = {}; |
34 | tagsCategories: Tag.Category[] = []; | 34 | tagsCategories: Tag.Category[] = []; |
35 | currentPath: string = "/"; | 35 | currentPath: string = "/"; |
36 | currentSearch: Tag.Search[] = []; | 36 | currentSearch: Tag.Search[] = []; |
37 | 37 | ||
38 | // --- | 38 | // --- |
39 | 39 | ||
40 | @mutation private setConfig(config: Gallery.Config) { | 40 | @mutation private setConfig(config: Gallery.Config) { |
41 | this.config = config; | 41 | this.config = config; |
42 | } | 42 | } |
43 | 43 | ||
44 | @mutation setGalleryIndex(galleryIndex: Gallery.Index) { | 44 | @mutation setGalleryIndex(galleryIndex: Gallery.Index) { |
45 | this.galleryIndex = Object.freeze(galleryIndex); | 45 | this.galleryIndex = Object.freeze(galleryIndex); |
46 | } | 46 | } |
47 | 47 | ||
48 | @mutation private setTagsIndex(tagsIndex: Tag.Index) { | 48 | @mutation private setTagsIndex(tagsIndex: Tag.Index) { |
49 | this.tagsIndex = Object.freeze(tagsIndex); | 49 | this.tagsIndex = Object.freeze(tagsIndex); |
50 | } | 50 | } |
51 | 51 | ||
52 | @mutation private setTagsCategories(tagsCategories: Tag.Category[]) { | 52 | @mutation private setTagsCategories(tagsCategories: Tag.Category[]) { |
53 | this.tagsCategories = tagsCategories; | 53 | this.tagsCategories = tagsCategories; |
54 | } | 54 | } |
55 | 55 | ||
56 | @mutation setCurrentPath(currentPath: string) { | 56 | @mutation setCurrentPath(currentPath: string) { |
57 | this.currentPath = currentPath; | 57 | this.currentPath = currentPath; |
58 | } | 58 | } |
59 | 59 | ||
60 | @mutation setCurrentSearch(currentSearch: Tag.Search[]) { | 60 | @mutation setCurrentSearch(currentSearch: Tag.Search[]) { |
61 | this.currentSearch = currentSearch; | 61 | this.currentSearch = currentSearch; |
62 | } | 62 | } |
63 | 63 | ||
64 | // --- | 64 | // --- |
65 | 65 | ||
66 | get currentItemPath(): Gallery.Item[] { | 66 | get currentItemPath(): Gallery.Item[] { |
67 | const root = this.galleryIndex?.tree; | 67 | const root = this.galleryIndex?.tree; |
68 | if (root) | 68 | if (root) |
69 | return Navigation.searchCurrentItemPath(root, this.currentPath); | 69 | return Navigation.searchCurrentItemPath(root, this.currentPath); |
70 | return []; | 70 | return []; |
71 | } | 71 | } |
72 | 72 | ||
73 | get currentItem(): Gallery.Item | null { | 73 | get currentItem(): Gallery.Item | null { |
74 | const path = this.currentItemPath; | 74 | const path = this.currentItemPath; |
75 | return path.length > 0 ? path[path.length - 1] : null; | 75 | return path.length > 0 ? path[path.length - 1] : null; |
76 | } | 76 | } |
77 | 77 | ||
78 | get galleryTitle(): string { | 78 | get galleryTitle(): string { |
79 | return this.galleryIndex?.properties.galleryTitle ?? "ldgallery"; | 79 | return this.galleryIndex?.properties.galleryTitle ?? "ldgallery"; |
80 | } | 80 | } |
81 | 81 | ||
82 | // --- | 82 | // --- |
83 | 83 | ||
84 | // Fetches the gallery's JSON config | 84 | // Fetches the gallery's JSON config |
85 | @action async fetchConfig() { | 85 | @action async fetchConfig() { |
86 | return fetch(`${process.env.VUE_APP_DATA_URL}config.json`, { cache: "no-cache" }) | 86 | return fetch(`${process.env.VUE_APP_DATA_URL}config.json`, { cache: "no-cache" }) |
87 | .then(response => response.json()) | 87 | .then(response => response.json()) |
88 | .then(this.setConfig); | 88 | .then(this.setConfig); |
89 | } | 89 | } |
90 | 90 | ||
91 | // Fetches the gallery's JSON metadata | 91 | // Fetches the gallery's JSON metadata |
92 | @action async fetchGalleryItems() { | 92 | @action async fetchGalleryItems() { |
93 | const root = this.config?.galleryRoot ?? ''; | 93 | const root = this.config?.galleryRoot ?? ""; |
94 | return fetch(`${process.env.VUE_APP_DATA_URL}${root}index.json`, { cache: "no-cache" }) | 94 | return fetch(`${process.env.VUE_APP_DATA_URL}${root}index.json`, { cache: "no-cache" }) |
95 | .then(response => response.json()) | 95 | .then(response => response.json()) |
96 | .then(this.setGalleryIndex) | 96 | .then(this.setGalleryIndex) |
97 | .then(this.indexTags) | 97 | .then(this.indexTags) |
98 | .then(this.indexTagCategories); | 98 | .then(this.indexTagCategories); |
99 | } | 99 | } |
100 | 100 | ||
101 | // Indexes the gallery | 101 | // Indexes the gallery |
102 | @action async indexTags() { | 102 | @action async indexTags() { |
103 | const root = this.galleryIndex?.tree ?? null; | 103 | const root = this.galleryIndex?.tree ?? null; |
104 | const index = IndexFactory.generateTags(root); | 104 | const index = IndexFactory.generateTags(root); |
105 | this.setTagsIndex(index); | 105 | this.setTagsIndex(index); |
106 | return index; | 106 | return index; |
107 | } | 107 | } |
108 | 108 | ||
109 | // Indexes the proposed categories | 109 | // Indexes the proposed categories |
110 | @action async indexTagCategories() { | 110 | @action async indexTagCategories() { |
111 | const categories = IndexFactory.generateCategories(this.tagsIndex, this.galleryIndex?.properties.tagCategories); | 111 | const categories = IndexFactory.generateCategories(this.tagsIndex, this.galleryIndex?.properties.tagCategories); |
112 | this.setTagsCategories(categories); | 112 | this.setTagsCategories(categories); |
113 | return categories; | 113 | return categories; |
114 | } | 114 | } |
115 | 115 | ||
116 | // Searches for tags | 116 | // Searches for tags |
117 | @action async search(filters: string[]) { | 117 | @action async search(filters: string[]) { |
118 | const results = filters.flatMap(filter => IndexFactory.searchTags(this.tagsIndex, filter, true)); | 118 | const results = filters.flatMap(filter => IndexFactory.searchTags(this.tagsIndex, filter, true)); |
119 | this.setCurrentSearch(results); | 119 | this.setCurrentSearch(results); |
120 | return results; | 120 | return results; |
121 | } | 121 | } |
122 | } | 122 | } |
diff --git a/viewer/src/store/index.ts b/viewer/src/store/index.ts index 956d4fd..d5339e8 100644 --- a/viewer/src/store/index.ts +++ b/viewer/src/store/index.ts | |||
@@ -17,12 +17,12 @@ | |||
17 | -- along with this program. If not, see <https://www.gnu.org/licenses/>. | 17 | -- along with this program. If not, see <https://www.gnu.org/licenses/>. |
18 | */ | 18 | */ |
19 | 19 | ||
20 | import Vue from 'vue' | 20 | import Vue from "vue" |
21 | import Vuex from 'vuex' | 21 | import Vuex from "vuex" |
22 | import { extractVuexModule } from "vuex-class-component"; | 22 | import { extractVuexModule } from "vuex-class-component"; |
23 | import { createProxy } from "vuex-class-component"; | 23 | import { createProxy } from "vuex-class-component"; |
24 | import UIStore from '@/store/uiStore'; | 24 | import UIStore from "@/store/uiStore"; |
25 | import GalleryStore from '@/store/galleryStore'; | 25 | import GalleryStore from "@/store/galleryStore"; |
26 | 26 | ||
27 | Vue.use(Vuex) | 27 | Vue.use(Vuex) |
28 | 28 | ||
@@ -37,7 +37,7 @@ const store = new Vuex.Store({ | |||
37 | Vue.use((vue) => vue.prototype.$uiStore = createProxy(store, UIStore)); | 37 | Vue.use((vue) => vue.prototype.$uiStore = createProxy(store, UIStore)); |
38 | Vue.use((vue) => vue.prototype.$galleryStore = createProxy(store, GalleryStore)); | 38 | Vue.use((vue) => vue.prototype.$galleryStore = createProxy(store, GalleryStore)); |
39 | 39 | ||
40 | declare module 'vue/types/vue' { | 40 | declare module "vue/types/vue" { |
41 | interface Vue { | 41 | interface Vue { |
42 | $uiStore: UIStore, | 42 | $uiStore: UIStore, |
43 | $galleryStore: GalleryStore | 43 | $galleryStore: GalleryStore |
diff --git a/viewer/src/store/uiStore.ts b/viewer/src/store/uiStore.ts index 2bd315c..892d35e 100644 --- a/viewer/src/store/uiStore.ts +++ b/viewer/src/store/uiStore.ts | |||
@@ -20,27 +20,27 @@ | |||
20 | import { createModule, mutation, action } from "vuex-class-component"; | 20 | import { createModule, mutation, action } from "vuex-class-component"; |
21 | 21 | ||
22 | const VuexModule = createModule({ | 22 | const VuexModule = createModule({ |
23 | namespaced: "uiStore", | 23 | namespaced: "uiStore", |
24 | strict: true | 24 | strict: true |
25 | }) | 25 | }) |
26 | 26 | ||
27 | export default class UIStore extends VuexModule { | 27 | export default class UIStore extends VuexModule { |
28 | 28 | ||
29 | fullscreen: boolean = false; | 29 | fullscreen: boolean = false; |
30 | fullWidth: boolean = window.innerWidth < Number(process.env.VUE_APP_FULLWIDTH_LIMIT); | 30 | fullWidth: boolean = window.innerWidth < Number(process.env.VUE_APP_FULLWIDTH_LIMIT); |
31 | searchMode: boolean = false; | 31 | searchMode: boolean = false; |
32 | 32 | ||
33 | // --- | 33 | // --- |
34 | 34 | ||
35 | @mutation toggleFullscreen(value?: boolean) { | 35 | @mutation toggleFullscreen(value?: boolean) { |
36 | this.fullscreen = value ?? !this.fullscreen; |