46 lines
1.1 KiB
JavaScript
46 lines
1.1 KiB
JavaScript
// Application state store
|
|
import { writable } from 'svelte/store';
|
|
|
|
export const currentScreen = writable('idle'); // idle | home | restaurants | attractions
|
|
export const selectedIndex = writable(-1);
|
|
export const restaurants = writable([]);
|
|
export const attractions = writable([]);
|
|
export const currentTime = writable(new Date());
|
|
export const wsConnected = writable(false);
|
|
|
|
// Input handling
|
|
export const inputState = writable({
|
|
up: false,
|
|
down: false,
|
|
left: false,
|
|
right: false,
|
|
select: false,
|
|
back: false,
|
|
});
|
|
|
|
// Navigation stack for back button
|
|
const navigationStack = writable(['idle']);
|
|
|
|
export function pushScreen(screen) {
|
|
navigationStack.update((stack) => [...stack, screen]);
|
|
currentScreen.set(screen);
|
|
selectedIndex.set(0);
|
|
}
|
|
|
|
export function popScreen() {
|
|
navigationStack.update((stack) => {
|
|
if (stack.length > 1) {
|
|
stack.pop();
|
|
currentScreen.set(stack[stack.length - 1]);
|
|
}
|
|
return stack;
|
|
});
|
|
selectedIndex.set(0);
|
|
}
|
|
|
|
export function resetNavigation() {
|
|
navigationStack.set(['idle']);
|
|
currentScreen.set('idle');
|
|
selectedIndex.set(0);
|
|
}
|