33 lines
773 B
JavaScript
33 lines
773 B
JavaScript
|
import Dexie, { liveQuery } from 'dexie';
|
||
|
import { writable } from 'svelte/store';
|
||
|
|
||
|
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;
|
||
|
});
|
||
|
|
||
|
return {
|
||
|
campaigns,
|
||
|
storage,
|
||
|
event: {
|
||
|
addCampaign: (name) =>
|
||
|
storage.campaigns.add({ name, ...seedCampaign }),
|
||
|
deleteCampaign: (id) => storage.campaigns.delete(id),
|
||
|
},
|
||
|
};
|
||
|
}
|