diff --git a/app/twitter/generators/TweetGenerator.mjs b/app/twitter/generators/TweetGenerator.mjs index 56ea161..fa1bfab 100644 --- a/app/twitter/generators/TweetGenerator.mjs +++ b/app/twitter/generators/TweetGenerator.mjs @@ -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; } diff --git a/src/stores/data.mjs b/src/stores/data.mjs index c485695..fa34da6 100644 --- a/src/stores/data.mjs +++ b/src/stores/data.mjs @@ -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() { diff --git a/src/stores/gear.mjs b/src/stores/gear.mjs new file mode 100644 index 0000000..1f81772 --- /dev/null +++ b/src/stores/gear.mjs @@ -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)); +} diff --git a/src/stores/schedules.mjs b/src/stores/schedules.mjs index 1cd4557..5160fb6 100644 --- a/src/stores/schedules.mjs +++ b/src/stores/schedules.mjs @@ -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, }); diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index 15f906e..834137e 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -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(); +