Skip to content

Commit b99efb4

Browse files
committed
fix: fixed categories and views not being stored/loaded from server-side settings
1 parent 5993db3 commit b99efb4

File tree

5 files changed

+25
-25
lines changed

5 files changed

+25
-25
lines changed

src/stores/settings.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { defineStore } from 'pinia';
22
import moment, { Moment } from 'moment';
33
import { getClient } from '~/util/awclient';
4+
import { Category, defaultCategories } from '~/util/classes';
5+
import { View, defaultViews } from '~/stores/views';
46

57
// Backoffs for NewReleaseNotification
68
export const SHORT_BACKOFF_PERIOD = 24 * 60 * 60;
@@ -20,6 +22,8 @@ interface State {
2022
newReleaseCheckData: Record<string, any>;
2123
userSatisfactionPollData: Record<string, any>;
2224
always_active_pattern: string;
25+
classes: Category[];
26+
views: View[];
2327

2428
// Whether to show certain WIP features
2529
devmode: boolean;
@@ -52,6 +56,8 @@ export const useSettingsStore = defineStore('settings', {
5256
userSatisfactionPollData: {},
5357

5458
always_active_pattern: '',
59+
classes: defaultCategories,
60+
views: defaultViews,
5561

5662
// Developer settings
5763
// NOTE: PRODUCTION might be undefined (in tests, for example)

src/stores/views.ts

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import { defineStore } from 'pinia';
2+
import { useSettingsStore } from './settings';
23

34
interface IElement {
45
type: string;
56
size?: number;
67
props?: Record<string, unknown>;
78
}
89

9-
interface View {
10+
export interface View {
1011
id: string;
1112
name: string;
1213
elements: IElement[];
@@ -66,8 +67,8 @@ const androidViews = [
6667
},
6768
];
6869

69-
// FIXME: Decide depending on what kind of device is being viewed, not from which device it is being viewed.
70-
const defaultViews = !process.env.VUE_APP_ON_ANDROID ? desktopViews : androidViews;
70+
// FIXME: Decide depending on what kind of device is being viewed, not from which device it is being viewed from.
71+
export const defaultViews = !process.env.VUE_APP_ON_ANDROID ? desktopViews : androidViews;
7172

7273
interface State {
7374
views: View[];
@@ -82,21 +83,14 @@ export const useViewsStore = defineStore('views', {
8283
},
8384
actions: {
8485
async load() {
85-
let views: View[];
86-
if (typeof localStorage !== 'undefined') {
87-
const views_json: string = localStorage.views;
88-
if (views_json && views_json.length >= 1) {
89-
views = JSON.parse(views_json);
90-
}
91-
}
92-
if (!views) {
93-
views = defaultViews;
94-
}
86+
const settingsStore = useSettingsStore();
87+
await settingsStore.ensureLoaded();
88+
const views = settingsStore.views;
9589
this.loadViews(views);
9690
},
9791
async save() {
98-
localStorage.views = JSON.stringify(this.views);
99-
// After save, reload views from localStorage
92+
const settingsStore = useSettingsStore();
93+
settingsStore.update({ views: this.views });
10094
await this.load();
10195
},
10296
loadViews(views: View[]) {

src/util/classes.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import _ from 'lodash';
22
import { IEvent } from './interfaces';
3+
import { useSettingsStore } from '~/stores/settings';
34

45
const level_sep = '>';
56
const CLASSIFY_KEYS = ['app', 'title'];
@@ -163,11 +164,13 @@ function areWeTesting() {
163164

164165
export function saveClasses(classes: Category[]) {
165166
if (areWeTesting()) {
167+
// TODO: move this into settings store?
166168
console.log('Not saving classes in test mode');
167169
return;
168170
}
169-
localStorage.classes = JSON.stringify(classes.map(cleanCategory));
170-
console.log('Saved classes', localStorage.classes);
171+
const settingsStore = useSettingsStore();
172+
settingsStore.update({ classes: classes.map(cleanCategory) });
173+
console.log('Saved classes', settingsStore.classes);
171174
}
172175

173176
export function cleanCategory(cat: Category): Category {
@@ -186,12 +189,8 @@ export function cleanCategory(cat: Category): Category {
186189
}
187190

188191
export function loadClasses(): Category[] {
189-
const classes_json = localStorage.classes;
190-
if (classes_json && classes_json.length >= 1) {
191-
return JSON.parse(classes_json).map(cleanCategory);
192-
} else {
193-
return defaultCategories;
194-
}
192+
const settingsStore = useSettingsStore();
193+
return settingsStore.classes;
195194
}
196195

197196
function pickDeepest(categories: Category[]) {

src/views/activity/Activity.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,7 @@ export default {
463463
464464
const viewsStore = useViewsStore();
465465
viewsStore.addView({ id: this.new_view.id, name: this.new_view.name, elements: [] });
466+
viewsStore.save();
466467
467468
// Hide the modal manually
468469
this.$nextTick(() => {

src/views/settings/CategorizationSettings.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,11 +122,11 @@ export default {
122122
exportClasses: function () {
123123
console.log('Exporting categories...');
124124
125-
if (localStorage.classes === undefined) {
125+
if (this.categoryStore.classes === undefined) {
126126
alert('No classes saved, nothing to export!');
127127
}
128128
const export_data = {
129-
categories: JSON.parse(localStorage.classes),
129+
categories: this.categoryStore.classes,
130130
};
131131
// Pretty-format it for easier reading
132132
const text = JSON.stringify(export_data, null, 2);

0 commit comments

Comments
 (0)