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

48 lines
1.2 KiB
JavaScript

import * as R from 'remeda';
import Dexie, { liveQuery } from 'dexie';
import { writable, derived } from 'svelte/store';
import { genNextBattle } from './genNextBattle.js';
const seedCampaign = {
battles: [],
};
export function genApi(options = {}) {
const storage = new Dexie('Campaigns', options.dexie ?? {});
storage.version(1).stores({
campaigns: '++id,name',
});
const campaigns = writable([]);
storage.campaigns.toArray().then((c) => campaigns.set(c));
const activeCampaignId = writable();
const activeCampaign = derived(
[activeCampaignId, campaigns],
async ([id, campaigns], set) => {
const x = campaigns.find((c) => c.id === id);
set(x);
},
);
return {
campaigns,
activeCampaign,
storage,
event: {
addCampaign: (name) =>
storage.campaigns.add({
name,
...seedCampaign,
battles: [genNextBattle()],
}),
deleteCampaign: (id) => storage.campaigns.delete(id),
setActiveCampaign: async (id) => {
activeCampaignId.set(id);
},
},
};
}