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
|
|
|
},
|
|
|
|
};
|
|
|
|
}
|