Add gear store

This commit is contained in:
Matt Isenhower
2022-09-15 22:30:40 -07:00
parent 213683cea0
commit 01a9690f11
5 changed files with 46 additions and 12 deletions

View File

@@ -1,6 +1,6 @@
import fs from 'fs/promises';
import { createPinia, setActivePinia } from 'pinia';
import { useGearStore, useSchedulesStore } from '../../../src/stores/data.mjs';
import { useGearDataStore, useSchedulesDataStore } from '../../../src/stores/data.mjs';
import prefixedConsole from '../../common/prefixedConsole.mjs';
import Tweet from '../Tweet.mjs';
import TwitterClient from '../TwitterClient.mjs';
@@ -24,8 +24,8 @@ export default class TweetGenerator
setActivePinia(createPinia());
useSchedulesStore().setData(JSON.parse(await fs.readFile('dist/data/schedules.json')));
useGearStore().setData(JSON.parse(await fs.readFile('dist/data/gear.json')));
useSchedulesDataStore().setData(JSON.parse(await fs.readFile('dist/data/schedules.json')));
useGearDataStore().setData(JSON.parse(await fs.readFile('dist/data/gear.json')));
this._piniaInitialized = true;
}

View File

@@ -39,13 +39,13 @@ function defineEndpointStore(id, endpoint, transform = null) {
});
}
export const useSchedulesStore = defineEndpointStore('schedules', '/data/schedules.json', d => d.data);
export const useGearStore = defineEndpointStore('gear', '/data/gear.json', d => d.data);
export const useSchedulesDataStore = defineEndpointStore('schedules', '/data/schedules.json', d => d.data);
export const useGearDataStore = defineEndpointStore('gear', '/data/gear.json', d => d.data);
export const useDataStore = defineStore('data', () => {
const stores = {
schedules: useSchedulesStore(),
gear: useGearStore(),
schedules: useSchedulesDataStore(),
gear: useGearDataStore(),
};
function updateAll() {

31
src/stores/gear.mjs Normal file
View File

@@ -0,0 +1,31 @@
import { acceptHMRUpdate, defineStore } from "pinia";
import { computed } from "vue";
import { useGearDataStore } from "./data.mjs";
import { useTimeStore } from "./time.mjs";
function whenCurrent(node) {
const time = useTimeStore();
return time.isCurrent(node?.saleEndTime)
? node
: null;
}
function currentNodes(nodes) {
return nodes?.filter(n => whenCurrent(n));
}
export const useGearStore = defineStore('gear', () => {
const gear = useGearDataStore();
const gesotown = computed(() => gear.data?.gesotown);
const dailyDropBrand = computed(() => whenCurrent(gesotown.value?.pickupBrand));
const dailyDropGear = computed(() => currentNodes(gesotown.value?.pickupBrand.brandGears));
const normalGear = computed(() => currentNodes(gesotown.value?.limitedGears));
return { dailyDropBrand, dailyDropGear, normalGear };
});
if (import.meta.hot) {
import.meta.hot.accept(acceptHMRUpdate(useGearStore, import.meta.hot));
}

View File

@@ -1,6 +1,6 @@
import { acceptHMRUpdate, defineStore } from "pinia";
import { computed } from "vue";
import { useSchedulesStore } from "./data.mjs";
import { useSchedulesDataStore } from "./data.mjs";
import { useTimeStore } from "./time.mjs";
// Schedule store definition (used for each type of schedule)
@@ -24,24 +24,24 @@ function defineScheduleStore(id, options) {
// Regular Battle
export const useRegularSchedulesStore = defineScheduleStore('regular', {
nodes: () => useSchedulesStore().data?.regularSchedules.nodes,
nodes: () => useSchedulesDataStore().data?.regularSchedules.nodes,
settings: node => node.regularMatchSetting,
});
// Anarchy Battle
export const useAnarchySeriesSchedulesStore = defineScheduleStore('anarchy/series', {
nodes: () => useSchedulesStore().data?.bankaraSchedules.nodes,
nodes: () => useSchedulesDataStore().data?.bankaraSchedules.nodes,
settings: node => node.bankaraMatchSettings.find(s => s.mode === 'CHALLENGE'),
});
export const useAnarchyOpenSchedulesStore = defineScheduleStore('anarchy/open', {
nodes: () => useSchedulesStore().data?.bankaraSchedules.nodes,
nodes: () => useSchedulesDataStore().data?.bankaraSchedules.nodes,
settings: node => node.bankaraMatchSettings.find(s => s.mode === 'OPEN'),
});
// Salmon Run
export const useSalmonRunSchedulesStore = defineScheduleStore('salmonRun', {
nodes: () => useSchedulesStore().data?.coopGroupingSchedule.regularSchedules.nodes,
nodes: () => useSchedulesDataStore().data?.coopGroupingSchedule.regularSchedules.nodes,
settings: node => node.setting,
});

View File

@@ -17,8 +17,11 @@ import MainLayout from '@/layouts/MainLayout.vue'
import { useDataStore } from '../stores/data';
import { onMounted } from 'vue';
import ScheduleBox from '../components/ScheduleBox.vue';
import { useGearStore } from '../stores/gear.mjs';
const data = useDataStore();
onMounted(() => data.updateAll());
const gear = useGearStore();
</script>