aboutsummaryrefslogtreecommitdiff
path: root/viewer/src/store/galleryStore.ts
diff options
context:
space:
mode:
Diffstat (limited to 'viewer/src/store/galleryStore.ts')
-rw-r--r--viewer/src/store/galleryStore.ts36
1 files changed, 26 insertions, 10 deletions
diff --git a/viewer/src/store/galleryStore.ts b/viewer/src/store/galleryStore.ts
index 0cffdd9..5d599aa 100644
--- a/viewer/src/store/galleryStore.ts
+++ b/viewer/src/store/galleryStore.ts
@@ -23,16 +23,15 @@ import Navigation from "@/services/navigation";
23 23
24const VuexModule = createModule({ 24const VuexModule = createModule({
25 namespaced: "galleryStore", 25 namespaced: "galleryStore",
26 strict: true 26 strict: true,
27}) 27});
28 28
29export default class GalleryStore extends VuexModule { 29export default class GalleryStore extends VuexModule {
30
31 config: Gallery.Config | null = null; 30 config: Gallery.Config | null = null;
32 galleryIndex: Gallery.Index | null = null; 31 galleryIndex: Gallery.Index | null = null;
33 tagsIndex: Tag.Index = {}; 32 tagsIndex: Tag.Index = {};
34 tagsCategories: Tag.Category[] = []; 33 tagsCategories: Tag.Category[] = [];
35 currentPath: string = "/"; 34 currentPath: string | null = null;
36 currentSearch: Tag.Search[] = []; 35 currentSearch: Tag.Search[] = [];
37 36
38 // --- 37 // ---
@@ -65,8 +64,7 @@ export default class GalleryStore extends VuexModule {
65 64
66 get currentItemPath(): Gallery.Item[] { 65 get currentItemPath(): Gallery.Item[] {
67 const root = this.galleryIndex?.tree; 66 const root = this.galleryIndex?.tree;
68 if (root) 67 if (root && this.currentPath) return Navigation.searchCurrentItemPath(root, this.currentPath);
69 return Navigation.searchCurrentItemPath(root, this.currentPath);
70 return []; 68 return [];
71 } 69 }
72 70
@@ -79,23 +77,30 @@ export default class GalleryStore extends VuexModule {
79 return this.galleryIndex?.properties.galleryTitle ?? "ldgallery"; 77 return this.galleryIndex?.properties.galleryTitle ?? "ldgallery";
80 } 78 }
81 79
80 get resourceRoot(): string {
81 return process.env.VUE_APP_DATA_URL + this.config!.galleryRoot;
82 }
83
82 // --- 84 // ---
83 85
84 // Fetches the gallery's JSON config 86 // Fetches the gallery's JSON config
85 @action async fetchConfig() { 87 @action async fetchConfig() {
86 return fetch(`${process.env.VUE_APP_DATA_URL}config.json`, { cache: "no-cache" }) 88 await fetch(`${process.env.VUE_APP_DATA_URL}${GalleryStore.getUrlConfig()}`, { cache: "no-cache" })
87 .then(response => response.json()) 89 .then(GalleryStore.responseToJson)
88 .then(this.setConfig); 90 .then(this.setConfig);
91 return this.config!;
89 } 92 }
90 93
91 // Fetches the gallery's JSON metadata 94 // Fetches the gallery's JSON metadata
92 @action async fetchGalleryItems() { 95 @action async fetchGalleryItems() {
93 const root = this.config?.galleryRoot ?? ""; 96 const root = this.config?.galleryRoot ?? "";
94 return fetch(`${process.env.VUE_APP_DATA_URL}${root}index.json`, { cache: "no-cache" }) 97 const index = this.config?.galleryIndex ?? "index.json";
95 .then(response => response.json()) 98 await fetch(`${process.env.VUE_APP_DATA_URL}${root}${index}`, { cache: "no-cache" })
99 .then(GalleryStore.responseToJson)
96 .then(this.setGalleryIndex) 100 .then(this.setGalleryIndex)
97 .then(this.indexTags) 101 .then(this.indexTags)
98 .then(this.indexTagCategories); 102 .then(this.indexTagCategories);
103 return this.galleryIndex!;
99 } 104 }
100 105
101 // Indexes the gallery 106 // Indexes the gallery
@@ -119,4 +124,15 @@ export default class GalleryStore extends VuexModule {
119 this.setCurrentSearch(results); 124 this.setCurrentSearch(results);
120 return results; 125 return results;
121 } 126 }
127
128 private static getUrlConfig() {
129 let search = window.location.search;
130 if (search.length > 1) return search.substr(1) + ".json";
131 return "config.json";
132 }
133
134 private static responseToJson(response: Response) {
135 if (!response.ok) throw new Error(`${response.status}: ${response.statusText}`);
136 return response.json();
137 }
122} 138}