Spaces:
Running
Running
File size: 3,253 Bytes
e521cc0 d7291ef 66e0c05 1686de5 ba5edb0 584e61f ba5edb0 ce534b9 e521cc0 66e0c05 1686de5 66e0c05 ba5edb0 d25db6b 66e0c05 d7291ef ba5edb0 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 109 110 111 112 |
import { createHashRouter, 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/MapDetailsPage';
import AdminPage from './pages/AdminPage/AdminPage';
import { FilterProvider } from './contexts/FilterContext';
import { AdminProvider } from './contexts/AdminContext';
const router = createHashRouter([
{
element: <RootLayout />,
children: [
{ path: '/', element: <UploadPage /> },
{ path: '/upload', element: <UploadPage /> },
{ path: '/analytics', element: <AnalyticsPage /> },
{ path: '/explore', element: <ExplorePage /> },
{ path: '/help', element: <HelpPage /> },
{ path: '/admin', element: <AdminPage /> },
{ path: '/map/:mapId', element: <MapDetailPage /> },
],
},
]);
function Application() {
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],
);
const languageContextValue = useMemo<LanguageContextProps>(
() => ({
languageNamespaceStatus: {},
setLanguageNamespaceStatus: () => {},
currentLanguage: 'en',
setCurrentLanguage: () => {},
strings: {},
setStrings: () => {},
registerNamespace: () => {},
}),
[],
);
return (
<AlertContext.Provider value={alertContextValue}>
<LanguageContext.Provider value={languageContextValue}>
<AdminProvider>
<FilterProvider>
<RouterProvider router={router} />
</FilterProvider>
</AdminProvider>
</LanguageContext.Provider>
</AlertContext.Provider>
);
}
export default function App() {
return <Application />;
}
|