aotds-docks/src/lib/store/api.ts

32 lines
790 B
TypeScript
Raw Normal View History

2023-03-21 19:42:45 +00:00
import ship from "./ship";
2023-04-15 21:11:17 +00:00
import { browser } from "$app/environment";
2023-04-24 15:47:38 +00:00
import { writable } from "svelte/store";
2023-03-21 19:42:45 +00:00
export type Api = ReturnType<typeof ship.createStore>;
export const createApi = () => {
2023-05-04 20:45:40 +00:00
const options: Partial<{ preloadedState: object }> = {};
2023-04-15 21:11:17 +00:00
2023-05-04 20:45:40 +00:00
const preloadedState = browser && localStorage.getItem("ship");
if (preloadedState) options.preloadedState = JSON.parse(preloadedState);
2023-04-22 14:37:49 +00:00
2023-05-04 20:45:40 +00:00
const api = ship.createStore(options);
2023-04-15 21:11:17 +00:00
2023-05-04 20:45:40 +00:00
const svelteStore = writable();
if (preloadedState) {
svelteStore.set(JSON.parse(preloadedState));
}
2023-04-24 15:47:38 +00:00
2023-04-15 21:11:17 +00:00
if (browser) {
api.subscribe(() => {
2023-04-24 15:47:38 +00:00
const state = api.getState();
svelteStore.set(state);
localStorage.setItem("ship", JSON.stringify(state));
2023-04-15 21:11:17 +00:00
});
}
2023-04-24 15:47:38 +00:00
api.svelteStore = svelteStore;
2023-04-15 21:11:17 +00:00
return api;
2023-03-21 19:42:45 +00:00
};