under-falling-skies/src/lib/store/api.js

45 lines
1.1 KiB
JavaScript
Raw Normal View History

2023-01-12 19:20:54 +00:00
import Dexie, { liveQuery } from 'dexie';
2023-01-12 21:42:34 +00:00
import { writable, derived } from 'svelte/store';
2023-01-12 19:20:54 +00:00
const seedCampaign = {
battles: [],
};
export function genApi(options = {}) {
const storage = new Dexie('Campaigns', options.dexie ?? {});
storage.version(1).stores({
campaigns: '++id,name',
});
const campaigns = liveQuery(async () => {
const c = [];
await storage.campaigns
.toCollection()
.each(({ id, name }) => c.push({ id, name }));
return c;
});
2023-01-12 21:42:34 +00:00
const activeCampaignId = writable();
const activeCampaign = derived(activeCampaignId, async (id, set) => {
const x = await storage.campaigns.get({ id });
console.log({ x });
set(x);
});
2023-01-12 19:20:54 +00:00
return {
campaigns,
2023-01-12 21:42:34 +00:00
activeCampaign,
2023-01-12 19:20:54 +00:00
storage,
event: {
addCampaign: (name) =>
storage.campaigns.add({ name, ...seedCampaign }),
deleteCampaign: (id) => storage.campaigns.delete(id),
2023-01-12 21:42:34 +00:00
setActiveCampaign: async (id) => {
activeCampaignId.set(id);
},
2023-01-12 19:20:54 +00:00
},
};
}