]> git.localhorst.tv Git - alttp.git/blob - resources/js/components/pages/AosGenerate.js
first half of AoS generator
[alttp.git] / resources / js / components / pages / AosGenerate.js
1 import axios from 'axios';
2 import React, { useCallback, useEffect, useState } from 'react';
3
4 import Generate from '../aos-generate/Generate';
5 import ErrorBoundary from '../common/ErrorBoundary';
6 import ErrorMessage from '../common/ErrorMessage';
7 import Loading from '../common/Loading';
8 import i18n from '../../i18n';
9
10 const AosGenerate = () => {
11         const [error, setError] = useState(null);
12         const [loading, setLoading] = useState(true);
13         const [presets, setPresets] = useState([]);
14
15         const loadPresets = useCallback(ctrl => {
16                 axios
17                         .get('/api/aos-presets', { signal: ctrl.signal })
18                         .then(response => {
19                                 setError(null);
20                                 setLoading(false);
21                                 setPresets(response.data);
22                         })
23                         .catch(error => {
24                                 setError(error);
25                                 setLoading(false);
26                                 setPresets([]);
27                         });
28         }, []);
29
30         useEffect(() => {
31                 setLoading(true);
32                 const ctrl = new AbortController();
33                 loadPresets(ctrl);
34                 return () => {
35                         ctrl.abort();
36                 };
37         }, []);
38
39         useEffect(() => {
40                 window.document.title = i18n.t('aosGenerate.heading');
41         }, [i18n.language]);
42
43         if (loading) {
44                 return <Loading />;
45         }
46
47         if (error) {
48                 return <ErrorMessage error={error} />;
49         }
50
51         return <ErrorBoundary>
52                 <Generate presets={presets} />
53         </ErrorBoundary>;
54 };
55
56 export default AosGenerate;