katja's git: oeffisearch

fast and simple tripplanner

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 
import { createStore } from 'zustand/vanilla';
import { persist, createJSONStorage } from 'zustand/middleware'

import { db, initDataStorage } from './dataStorage.js';
import { getDefaultLanguage } from './translate.js';
import { getDefaultProfile } from './hafasClient.js';

export let   settingsState;
export const settings = createStore()(
	persist(
		(set, get) => ({
			language: getDefaultLanguage(),
			profile: getDefaultProfile(),
			products: {},
			accessibility: 'none',
			walkingSpeed: 'normal',
			transferTime: 0,
			loyaltyCard: 'NONE',
			ageGroup: 'E',
			journeysViewMode: 'canvas',
			bikeFriendly: false,
			combineDateTime: false,
			showVia: false,
			showPrices: true,
			showDS100: true,
			disableCanvasBlur: false,

			setJourneysViewMode: (journeysViewMode) => set({ journeysViewMode }),
			setLanguage:         (language)         => set({ language }),
			setProfile:          (profile)          => set({ profile }),
			setTransferTime:     (transferTime)     => set({ transferTime }),
			setAgeGroup:         (ageGroup)         => set({ ageGroup }),
			setLoyaltyCard:      (loyaltyCard)      => set({ loyaltyCard }),
			setAccessibility:    (accessibility)    => set({ accessibility }),
			setWalkingSpeed:     (walkingSpeed)     => set({ walkingSpeed }),
			setShowVia:          (showVia)          => set({ showVia }),

			toggleCombineDateTime: ()    => set((state) => ({ combineDateTime: !state.combineDateTime })),
			toggleShowPrices:      ()    => set((state) => ({ showPrices:      !state.showPrices })),
			toggleShowDS100:       ()    => set((state) => ({ showDS100:       !state.showDS100 })),
			toggleShowVia:         ()    => set((state) => ({ showVia:         !state.showVia })),
			toggleBikeFriendly:    ()    => set((state) => ({ bikeFriendly:    !state.bikeFriendly })),
			toggleProduct:         (key) => set((state) => {
				state.products[key] = !state.products[key];
				return { products: state.products };
			})
		}),
		{
			name: 'settings'
		}
	)
)

export const initSettingsState = async () => {
	settingsState = settings.getState();

	settings.subscribe(state => {
		settingsState = state;
	});
};