feat(directory): fetch optimization
This commit is contained in:
@@ -215,7 +215,7 @@
|
|||||||
opacity: 0.3;
|
opacity: 0.3;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 1024px) {
|
@media (max-width: 1280px) {
|
||||||
.operator .spine-container {
|
.operator .spine-container {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ 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';
|
||||||
@@ -34,11 +35,12 @@ export default function Root(props) {
|
|||||||
appbarExtraArea,
|
appbarExtraArea,
|
||||||
headerIcon
|
headerIcon
|
||||||
} = useHeader()
|
} = useHeader()
|
||||||
const { version } = useConfig()
|
const { version, fetchConfig, fetchVersion } = useConfig()
|
||||||
const [drawerDestinations, setDrawerDestinations] = useState(null)
|
const [drawerDestinations, setDrawerDestinations] = useState(null)
|
||||||
const currentYear = useMemo(() => new Date().getFullYear(), [])
|
const currentYear = useMemo(() => new Date().getFullYear(), [])
|
||||||
const [headerTabs, setHeaderTabs] = useState(null)
|
const [headerTabs, setHeaderTabs] = useState(null)
|
||||||
const { i18n } = useI18n()
|
const { i18n } = useI18n()
|
||||||
|
const { fetchBackgrounds } = useBackgrounds()
|
||||||
|
|
||||||
const renderHeaderTabs = (tabs) => {
|
const renderHeaderTabs = (tabs) => {
|
||||||
setHeaderTabs(tabs?.map((item) => {
|
setHeaderTabs(tabs?.map((item) => {
|
||||||
@@ -120,6 +122,12 @@ export default function Root(props) {
|
|||||||
}
|
}
|
||||||
}, [tabs])
|
}, [tabs])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
fetchConfig()
|
||||||
|
fetchVersion()
|
||||||
|
fetchBackgrounds()
|
||||||
|
}, [])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<header className='header'>
|
<header className='header'>
|
||||||
@@ -209,6 +217,8 @@ function LanguageDropdown() {
|
|||||||
const { language, setLanguage } = useLanguage()
|
const { language, setLanguage } = useLanguage()
|
||||||
const { i18n, i18nValues } = useI18n()
|
const { i18n, i18nValues } = useI18n()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Dropdown
|
<Dropdown
|
||||||
text={i18n(language)}
|
text={i18n(language)}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { useEffect } from 'react';
|
import { useCallback } from 'react';
|
||||||
import { atom, useAtom } from 'jotai';
|
import { atom, useAtom } from 'jotai';
|
||||||
|
|
||||||
const fetcher = (...args) => fetch(...args).then(res => res.json())
|
const fetcher = (...args) => fetch(...args).then(res => res.json())
|
||||||
@@ -9,12 +9,17 @@ export function useBackgrounds() {
|
|||||||
const [backgrounds, setBackgrounds] = useAtom(backgroundsAtom);
|
const [backgrounds, setBackgrounds] = useAtom(backgroundsAtom);
|
||||||
const [currentBackground, setCurrentBackground] = useAtom(currentBackgroundAtom)
|
const [currentBackground, setCurrentBackground] = useAtom(currentBackgroundAtom)
|
||||||
|
|
||||||
useEffect(() => {
|
const fetchBackgrounds = useCallback(async () => {
|
||||||
fetcher('/_assets/backgrounds.json').then(data => {
|
const res = await fetch('/_assets/backgrounds.json')
|
||||||
setBackgrounds(data)
|
const data = await res.json()
|
||||||
setCurrentBackground(data[0])
|
setBackgrounds(data)
|
||||||
})
|
setCurrentBackground(data[0])
|
||||||
}, []);
|
}, [])
|
||||||
|
|
||||||
return { backgrounds, currentBackground, setCurrentBackground };
|
return {
|
||||||
|
backgrounds,
|
||||||
|
currentBackground,
|
||||||
|
setCurrentBackground,
|
||||||
|
fetchBackgrounds
|
||||||
|
};
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
import { useEffect } from 'react';
|
import { useCallback } from 'react';
|
||||||
import { atom, useAtom } from 'jotai';
|
import { atom, useAtom } from 'jotai';
|
||||||
|
|
||||||
const fetcher = (...args) => fetch(...args).then(res => res.json())
|
|
||||||
const configAtom = atom([]);
|
const configAtom = atom([]);
|
||||||
const operatorsAtom = atom([]);
|
const operatorsAtom = atom([]);
|
||||||
const versionAtom = atom({});
|
const versionAtom = atom({});
|
||||||
@@ -11,19 +10,22 @@ export function useConfig() {
|
|||||||
const [version, setVersion] = useAtom(versionAtom);
|
const [version, setVersion] = useAtom(versionAtom);
|
||||||
const [operators, setOperators] = useAtom(operatorsAtom);
|
const [operators, setOperators] = useAtom(operatorsAtom);
|
||||||
|
|
||||||
useEffect(() => {
|
const fetchConfig = useCallback(async () => {
|
||||||
fetcher('/_assets/directory.json').then(data => {
|
const res = await fetch('/_assets/directory.json')
|
||||||
setConfig(data);
|
const data = await res.json()
|
||||||
let operatorsList = []
|
setConfig(data);
|
||||||
data.operators.forEach((item) => {
|
let operatorsList = []
|
||||||
operatorsList = [...operatorsList, ...item]
|
data.operators.forEach((item) => {
|
||||||
})
|
operatorsList = [...operatorsList, ...item]
|
||||||
setOperators(operatorsList)
|
|
||||||
})
|
})
|
||||||
fetcher('/_assets/version.json').then(data => {
|
setOperators(operatorsList)
|
||||||
setVersion(data);
|
}, [])
|
||||||
})
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
return { config, version, operators };
|
const fetchVersion = useCallback(async () => {
|
||||||
|
const res = await fetch('/_assets/version.json')
|
||||||
|
const data = await res.json()
|
||||||
|
setVersion(data);
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
return { config, version, operators, fetchConfig, fetchVersion };
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user