refactor(directory): use constants to adapt github actions

This commit is contained in:
Haoyu Xu
2023-08-23 19:29:23 +08:00
parent 92355da364
commit d19ec3aac6
6 changed files with 23 additions and 79 deletions

View File

@@ -75,7 +75,7 @@ export default function Error() {
spinePlayer.animationState.addAnimation(0, "Relax", true, 0); spinePlayer.animationState.addAnimation(0, "Relax", true, 0);
} }
} }
}, [voiceOn]) }, [spinePlayer, voiceOn])
useEffect(() => { useEffect(() => {
voiceOnRef.current = voiceOn voiceOnRef.current = voiceOn

View File

@@ -11,27 +11,25 @@ import {
NavLink, NavLink,
useNavigate, useNavigate,
ScrollRestoration, ScrollRestoration,
useLocation,
} from "react-router-dom"; } from "react-router-dom";
import classes from '@/scss/root/Root.module.scss' import classes from '@/scss/root/Root.module.scss'
import header from '@/scss/root/header.module.scss' import header from '@/scss/root/header.module.scss'
import footer from '@/scss/root/footer.module.scss' import footer from '@/scss/root/footer.module.scss'
import drawer from '@/scss/root/drawer.module.scss' import drawer from '@/scss/root/drawer.module.scss'
import routes from '@/routes' import routes from '@/routes'
import { useConfig } from '@/state/config';
import { useHeader } from '@/state/header'; import { useHeader } from '@/state/header';
import { useAppbar } from '@/state/appbar'; import { useAppbar } from '@/state/appbar';
import { import {
useI18n, useI18n,
useLanguage, useLanguage,
} from '@/state/language' } from '@/state/language'
import { useBackgrounds } from '@/state/background';
import Dropdown from '@/component/dropdown'; import Dropdown from '@/component/dropdown';
import Popup from '@/component/popup'; import Popup from '@/component/popup';
import ReturnButton from '@/component/return_button'; import ReturnButton from '@/component/return_button';
import Border from '@/component/border'; import Border from '@/component/border';
import CharIcon from '@/component/char_icon'; import CharIcon from '@/component/char_icon';
import ToTopButton from '@/component/totop_button'; import ToTopButton from '@/component/totop_button';
import VERSION from '#/version.json'
const currentYear = new Date().getFullYear() const currentYear = new Date().getFullYear()
@@ -46,8 +44,6 @@ export default function Root() {
const { const {
extraArea, extraArea,
} = useAppbar() } = useAppbar()
const { fetchConfig, fetchVersion } = useConfig()
const { fetchBackgrounds } = useBackgrounds()
const headerTabs = useMemo(() => { const headerTabs = useMemo(() => {
return ( return (
@@ -74,12 +70,6 @@ export default function Root() {
} }
}, [setCurrentTab, tabs]) }, [setCurrentTab, tabs])
useEffect(() => {
fetchConfig()
fetchVersion()
fetchBackgrounds()
}, [fetchBackgrounds, fetchConfig, fetchVersion])
return ( return (
<> <>
<header className={header.header}> <header className={header.header}>
@@ -141,7 +131,6 @@ export default function Root() {
function FooterElement() { function FooterElement() {
const { i18n } = useI18n() const { i18n } = useI18n()
const { version } = useConfig()
const navigate = useNavigate() const navigate = useNavigate()
return useMemo(() => { return useMemo(() => {
@@ -177,12 +166,12 @@ function FooterElement() {
<span>Spine Runtimes © 2013 - 2019 Esoteric Software LLC</span> <span>Spine Runtimes © 2013 - 2019 Esoteric Software LLC</span>
<span>Assets © 2017 - {currentYear} Arknights/Hypergryph Co., Ltd</span> <span>Assets © 2017 - {currentYear} Arknights/Hypergryph Co., Ltd</span>
<span>Source Code © 2021 - {currentYear} Halyul</span> <span>Source Code © 2021 - {currentYear} Halyul</span>
<span>Directory @ {version.directory}</span> <span>Directory @ {VERSION.directory}</span>
<span>Showcase @ {version.showcase}</span> <span>Showcase @ {VERSION.showcase}</span>
</section> </section>
</footer> </footer>
) )
}, [i18n, navigate, version.directory, version.showcase]) }, [i18n, navigate])
} }
function DrawerDestinations({ toggleDrawer }) { function DrawerDestinations({ toggleDrawer }) {

View File

@@ -1,5 +1,4 @@
import React, { import React, {
useState,
useEffect, useEffect,
useMemo useMemo
} from 'react' } from 'react'
@@ -8,6 +7,7 @@ import { useHeader } from '@/state/header';
import { useAppbar } from '@/state/appbar'; import { useAppbar } from '@/state/appbar';
import useUmami from '@/state/insights' import useUmami from '@/state/insights'
import Border from '@/component/border'; import Border from '@/component/border';
import CHANGELOGS from '#/changelogs.json'
export default function Changelogs() { export default function Changelogs() {
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
@@ -22,29 +22,25 @@ export default function Changelogs() {
const { const {
setExtraArea, setExtraArea,
} = useAppbar() } = useAppbar()
const [changelogs, setChangelogs] = useState([])
useEffect(() => { useEffect(() => {
setTitle('changelogs') setTitle('changelogs')
setExtraArea([]) setExtraArea([])
setFastNavigation([]) setFastNavigation([])
setHeaderIcon(null) setHeaderIcon(null)
fetch('/_assets/changelogs.json').then(res => res.json()).then(data => {
setChangelogs(data)
})
}, [setExtraArea, setFastNavigation, setHeaderIcon, setTitle]) }, [setExtraArea, setFastNavigation, setHeaderIcon, setTitle])
useEffect(() => { useEffect(() => {
setTabs(changelogs.map((item) => { setTabs(CHANGELOGS.map((item) => {
return { return {
key: item[0].key key: item[0].key
} }
})) }))
}, [changelogs, setTabs]) }, [setTabs])
const content = useMemo(() => { const content = useMemo(() => {
return ( return (
changelogs.map((v) => { CHANGELOGS.map((v) => {
return ( return (
v.map((item) => { v.map((item) => {
return ( return (
@@ -68,7 +64,7 @@ export default function Changelogs() {
) )
}) })
) )
}, [changelogs, currentTab]) }, [currentTab])
return ( return (
<section> <section>

View File

@@ -17,7 +17,6 @@ import {
} from '@/state/language' } from '@/state/language'
import { useHeader } from '@/state/header'; import { useHeader } from '@/state/header';
import { useAppbar } from '@/state/appbar'; import { useAppbar } from '@/state/appbar';
import { useBackgrounds } from '@/state/background';
import VoiceElement from '@/component/voice'; import VoiceElement from '@/component/voice';
import useUmami from '@/state/insights' import useUmami from '@/state/insights'
import spine from '!/libs/spine-player' import spine from '!/libs/spine-player'
@@ -26,6 +25,7 @@ import Border from '@/component/border';
import { useI18n } from '@/state/language'; import { useI18n } from '@/state/language';
import Switch from '@/component/switch'; import Switch from '@/component/switch';
import { atom, useAtom } from 'jotai' import { atom, useAtom } from 'jotai'
import BACKGROUNDS from '#/backgrounds.json';
const musicMapping = JSON.parse(import.meta.env.VITE_MUSIC_MAPPING) const musicMapping = JSON.parse(import.meta.env.VITE_MUSIC_MAPPING)
const getVoiceFoler = (lang) => { const getVoiceFoler = (lang) => {
@@ -34,7 +34,7 @@ const getVoiceFoler = (lang) => {
return `${folderObject.main}/${voiceFolder.name}` return `${folderObject.main}/${voiceFolder.name}`
} }
const defaultSpineAnimation = 'Idle' const defaultSpineAnimation = 'Idle'
const backgroundAtom = atom(null) const backgroundAtom = atom(BACKGROUNDS[0])
const getPartialName = (type, input) => { const getPartialName = (type, input) => {
let part; let part;
@@ -80,7 +80,6 @@ export default function Operator() {
const { i18n } = useI18n() const { i18n } = useI18n()
const [spinePlayer, setSpinePlayer] = useState(null) const [spinePlayer, setSpinePlayer] = useState(null)
const [voiceLang, _setVoiceLang] = useState(null) const [voiceLang, _setVoiceLang] = useState(null)
const { backgrounds } = useBackgrounds()
const [currentBackground, setCurrentBackground] = useAtom(backgroundAtom) const [currentBackground, setCurrentBackground] = useAtom(backgroundAtom)
const [voiceConfig, setVoiceConfig] = useState(null) const [voiceConfig, setVoiceConfig] = useState(null)
const [subtitleLang, setSubtitleLang] = useState(null) const [subtitleLang, setSubtitleLang] = useState(null)
@@ -114,10 +113,6 @@ export default function Operator() {
setFastNavigation([]) setFastNavigation([])
}, [setExtraArea, setFastNavigation]) }, [setExtraArea, setFastNavigation])
useEffect(() => {
if (backgrounds.length > 0) setCurrentBackground(backgrounds[0])
}, [backgrounds, setCurrentBackground])
useEffect(() => { useEffect(() => {
setSpineData(null) setSpineData(null)
const config = operators.find((item) => item.link === key) const config = operators.find((item) => item.link === key)
@@ -374,7 +369,7 @@ export default function Operator() {
el: <MusicElement /> el: <MusicElement />
}, { }, {
name: 'backgrounds', name: 'backgrounds',
options: backgrounds.map((item) => { options: BACKGROUNDS.map((item) => {
return { return {
name: item, name: item,
onClick: () => { onClick: () => {

View File

@@ -1,19 +0,0 @@
import { useCallback } from 'react';
import { atom, useAtom } from 'jotai';
const backgroundsAtom = atom([]);
export function useBackgrounds() {
const [backgrounds, setBackgrounds] = useAtom(backgroundsAtom);
const fetchBackgrounds = useCallback(async () => {
const res = await fetch('/_assets/backgrounds.json')
const data = await res.json()
setBackgrounds(data)
}, [setBackgrounds])
return {
backgrounds,
fetchBackgrounds
};
}

View File

@@ -1,31 +1,14 @@
import { useCallback } from 'react'; import CONFIG from '#/directory.json';
import { atom, useAtom } from 'jotai';
const configAtom = atom([]); let operators = []
const operatorsAtom = atom([]); CONFIG.operators.forEach((item) => {
const versionAtom = atom({}); operators = [...operators, ...item]
});
const OPERATORS = operators;
export function useConfig() { export function useConfig() {
const [config, setConfig] = useAtom(configAtom); const config = CONFIG;
const [version, setVersion] = useAtom(versionAtom); const operators = OPERATORS;
const [operators, setOperators] = useAtom(operatorsAtom);
return { config, operators };
const fetchConfig = useCallback(async () => {
const res = await fetch('/_assets/directory.json')
const data = await res.json()
setConfig(data);
let operatorsList = []
data.operators.forEach((item) => {
operatorsList = [...operatorsList, ...item]
})
setOperators(operatorsList)
}, [setConfig, setOperators])
const fetchVersion = useCallback(async () => {
const res = await fetch('/_assets/version.json')
const data = await res.json()
setVersion(data);
}, [setVersion])
return { config, version, operators, fetchConfig, fetchVersion };
} }