Spaces:
Running
Running
File size: 3,154 Bytes
66e0c05 d7291ef 66e0c05 d25db6b d7291ef ce534b9 66e0c05 d7291ef d25db6b 66e0c05 d7291ef 66e0c05 d7291ef ce534b9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
import { createBrowserRouter, RouterProvider } from 'react-router-dom';
import { AlertContext, type AlertContextProps, type AlertParams, LanguageContext, type LanguageContextProps } from '@ifrc-go/ui/contexts';
import { useCallback, useMemo, useState } from 'react';
import { unique } from '@togglecorp/fujs';
import RootLayout from './layouts/RootLayout';
import UploadPage from './pages/UploadPage';
import AnalyticsPage from './pages/AnalyticsPage';
import ExplorePage from './pages/ExplorePage';
import HelpPage from './pages/HelpPage';
import MapDetailPage from './pages/MapDetailPage';
import DemoPage from './pages/DemoPage';
import DevPage from './pages/DevPage';
const router = createBrowserRouter([
{
element: <RootLayout />, // header sticks here
children: [
{ path: '/', element: <UploadPage /> },
{ path: '/upload', element: <UploadPage /> },
{ path: '/analytics', element: <AnalyticsPage /> },
{ path: '/explore', element: <ExplorePage /> },
{ path: '/help', element: <HelpPage /> },
{ path: '/demo', element: <DemoPage /> },
{ path: '/dev', element: <DevPage /> },
{ path: '/map/:mapId', element: <MapDetailPage /> },
],
},
]);
function Application() {
// ALERTS
const [alerts, setAlerts] = useState<AlertParams[]>([]);
const addAlert = useCallback((alert: AlertParams) => {
setAlerts((prevAlerts) => unique(
[...prevAlerts, alert],
(a) => a.name,
) ?? prevAlerts);
}, [setAlerts]);
const removeAlert = useCallback((name: AlertParams['name']) => {
setAlerts((prevAlerts) => {
const i = prevAlerts.findIndex((a) => a.name === name);
if (i === -1) {
return prevAlerts;
}
const newAlerts = [...prevAlerts];
newAlerts.splice(i, 1);
return newAlerts;
});
}, [setAlerts]);
const updateAlert = useCallback((name: AlertParams['name'], paramsWithoutName: Omit<AlertParams, 'name'>) => {
setAlerts((prevAlerts) => {
const i = prevAlerts.findIndex((a) => a.name === name);
if (i === -1) {
return prevAlerts;
}
const newAlerts = [...prevAlerts];
newAlerts[i] = {
...newAlerts[i],
...paramsWithoutName,
};
return newAlerts;
});
}, [setAlerts]);
const alertContextValue = useMemo<AlertContextProps>(
() => ({
alerts,
addAlert,
removeAlert,
updateAlert,
}),
[alerts, addAlert, removeAlert, updateAlert],
);
// LANGUAGE
const languageContextValue = useMemo<LanguageContextProps>(
() => ({
languageNamespaceStatus: {},
setLanguageNamespaceStatus: () => {},
currentLanguage: 'en',
setCurrentLanguage: () => {},
strings: {},
setStrings: () => {},
registerNamespace: () => {},
}),
[],
);
return (
<AlertContext.Provider value={alertContextValue}>
<LanguageContext.Provider value={languageContextValue}>
<RouterProvider router={router} />
</LanguageContext.Provider>
</AlertContext.Provider>
);
}
export default function App() {
return <Application />;
}
|