X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fcomponents%2Fpages%2FTechniques.js;fp=resources%2Fjs%2Fcomponents%2Fpages%2FTechniques.js;h=ddecf5603e7752130588f2edad28fe90d9db3ebe;hb=2c5535946aa15278c6e969c9a9b24d32a45e5b12;hp=4bc0066baefd69654ac06f4ed678fc24230f89f8;hpb=de9be1288c2b3214e007c8d67d6b19e756cf08ba;p=alttp.git diff --git a/resources/js/components/pages/Techniques.js b/resources/js/components/pages/Techniques.js index 4bc0066..ddecf56 100644 --- a/resources/js/components/pages/Techniques.js +++ b/resources/js/components/pages/Techniques.js @@ -13,17 +13,35 @@ import i18n from '../../i18n'; const Techniques = ({ namespace, type }) => { const [error, setError] = React.useState(null); + const [filter, setFilter] = React.useState({}); const [loading, setLoading] = React.useState(true); const [techniques, setTechniques] = React.useState([]); + React.useEffect(() => { + const savedFilter = localStorage.getItem(`content.filter.${type}`); + if (savedFilter) { + setFilter(JSON.parse(savedFilter)); + } else { + setFilter(filter => filter ? {} : filter); + } + }, [type]); + + const updateFilter = React.useCallback(newFilter => { + localStorage.setItem(`content.filter.${type}`, JSON.stringify(newFilter)); + setFilter(newFilter); + }, [type]); + React.useEffect(() => { const ctrl = new AbortController(); - setLoading(true); + if (!techniques.length) { + setLoading(true); + } window.document.title = i18n.t(`${namespace}.heading`); axios .get(`/api/content`, { params: { type, + ...filter, }, signal: ctrl.signal }) @@ -33,14 +51,16 @@ const Techniques = ({ namespace, type }) => { setTechniques(response.data.sort(compareTranslation('title', i18n.language))); }) .catch(error => { - setError(error); - setLoading(false); - setTechniques([]); + if (!axios.isCancel(error)) { + setError(error); + setLoading(false); + setTechniques([]); + } }); return () => { ctrl.abort(); }; - }, [namespace, type]); + }, [filter, namespace, type]); React.useEffect(() => { window.document.title = i18n.t(`${namespace}.heading`); @@ -60,7 +80,13 @@ const Techniques = ({ namespace, type }) => { } return - + ; };