mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-06 07:49:52 +03:00
@@ -43,7 +43,7 @@
|
|||||||
"react-dom": "latest",
|
"react-dom": "latest",
|
||||||
"react-dropzone": "^14.2.3",
|
"react-dropzone": "^14.2.3",
|
||||||
"react-icons": "^4.12.0",
|
"react-icons": "^4.12.0",
|
||||||
"react-router-dom": "6.18.0",
|
"react-router-dom": "^6.20.0",
|
||||||
"react-toastify": "^9.1.3",
|
"react-toastify": "^9.1.3",
|
||||||
"sockette": "^2.0.6",
|
"sockette": "^2.0.6",
|
||||||
"typesafe-i18n": "^5.26.2",
|
"typesafe-i18n": "^5.26.2",
|
||||||
@@ -68,7 +68,7 @@
|
|||||||
"eslint-plugin-react-hooks": "^4.6.0",
|
"eslint-plugin-react-hooks": "^4.6.0",
|
||||||
"preact": "^10.19.2",
|
"preact": "^10.19.2",
|
||||||
"prettier": "^3.1.0",
|
"prettier": "^3.1.0",
|
||||||
"rollup-plugin-visualizer": "^5.9.2",
|
"rollup-plugin-visualizer": "^5.9.3",
|
||||||
"terser": "^5.24.0",
|
"terser": "^5.24.0",
|
||||||
"vite": "^5.0.2",
|
"vite": "^5.0.2",
|
||||||
"vite-plugin-imagemin": "^0.6.1",
|
"vite-plugin-imagemin": "^0.6.1",
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
import { useMatch, useResolvedPath } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom';
|
||||||
|
|
||||||
export const useRouterTab = () => {
|
export const useRouterTab = () => {
|
||||||
const routerTabPath = useResolvedPath(':tab');
|
const loc = useLocation().pathname;
|
||||||
const routerTabPathMatch = useMatch(routerTabPath.pathname);
|
const routerTab = loc.substring(0, loc.lastIndexOf('/')) ? loc : false;
|
||||||
|
|
||||||
const routerTab = routerTabPathMatch?.params?.tab || false;
|
|
||||||
return { routerTab } as const;
|
return { routerTab } as const;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -22,8 +22,12 @@ const AccessPoint: FC = () => {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<RouterTabs value={routerTab}>
|
<RouterTabs value={routerTab}>
|
||||||
<Tab value="status" label={LL.STATUS_OF(LL.ACCESS_POINT(1))} />
|
<Tab value="/ap/status" label={LL.STATUS_OF(LL.ACCESS_POINT(1))} />
|
||||||
<Tab value="settings" label={LL.SETTINGS_OF(LL.ACCESS_POINT(1))} disabled={!authenticatedContext.me.admin} />
|
<Tab
|
||||||
|
value="/ap/settings"
|
||||||
|
label={LL.SETTINGS_OF(LL.ACCESS_POINT(1))}
|
||||||
|
disabled={!authenticatedContext.me.admin}
|
||||||
|
/>
|
||||||
</RouterTabs>
|
</RouterTabs>
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path="status" element={<APStatusForm />} />
|
<Route path="status" element={<APStatusForm />} />
|
||||||
@@ -36,7 +40,7 @@ const AccessPoint: FC = () => {
|
|||||||
</RequireAdmin>
|
</RequireAdmin>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route path="/*" element={<Navigate replace to="status" />} />
|
<Route path="*" element={<Navigate replace to="/ap/status" />} />
|
||||||
</Routes>
|
</Routes>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ const Mqtt: FC = () => {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<RouterTabs value={routerTab}>
|
<RouterTabs value={routerTab}>
|
||||||
<Tab value="status" label={LL.STATUS_OF('MQTT')} />
|
<Tab value="/mqtt/status" label={LL.STATUS_OF('MQTT')} />
|
||||||
<Tab value="settings" label={LL.SETTINGS_OF('MQTT')} disabled={!authenticatedContext.me.admin} />
|
<Tab value="/mqtt/settings" label={LL.SETTINGS_OF('MQTT')} disabled={!authenticatedContext.me.admin} />
|
||||||
</RouterTabs>
|
</RouterTabs>
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path="status" element={<MqttStatusForm />} />
|
<Route path="status" element={<MqttStatusForm />} />
|
||||||
@@ -34,7 +34,7 @@ const Mqtt: FC = () => {
|
|||||||
</RequireAdmin>
|
</RequireAdmin>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route path="/*" element={<Navigate replace to="status" />} />
|
<Route path="*" element={<Navigate replace to="/mqtt/status" />} />
|
||||||
</Routes>
|
</Routes>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -44,9 +44,13 @@ const NetworkConnection: FC = () => {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<RouterTabs value={routerTab}>
|
<RouterTabs value={routerTab}>
|
||||||
<Tab value="status" label={LL.STATUS_OF(LL.NETWORK(1))} />
|
<Tab value="/network/status" label={LL.STATUS_OF(LL.NETWORK(1))} />
|
||||||
<Tab value="scan" label={LL.NETWORK_SCAN()} disabled={!authenticatedContext.me.admin} />
|
<Tab value="/network/scan" label={LL.NETWORK_SCAN()} disabled={!authenticatedContext.me.admin} />
|
||||||
<Tab value="settings" label={LL.SETTINGS_OF(LL.NETWORK(1))} disabled={!authenticatedContext.me.admin} />
|
<Tab
|
||||||
|
value="/network/settings"
|
||||||
|
label={LL.SETTINGS_OF(LL.NETWORK(1))}
|
||||||
|
disabled={!authenticatedContext.me.admin}
|
||||||
|
/>
|
||||||
</RouterTabs>
|
</RouterTabs>
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path="status" element={<NetworkStatusForm />} />
|
<Route path="status" element={<NetworkStatusForm />} />
|
||||||
@@ -66,7 +70,7 @@ const NetworkConnection: FC = () => {
|
|||||||
</RequireAdmin>
|
</RequireAdmin>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route path="/*" element={<Navigate replace to="status" />} />
|
<Route path="*" element={<Navigate replace to="/network/status" />} />
|
||||||
</Routes>
|
</Routes>
|
||||||
</WiFiConnectionContext.Provider>
|
</WiFiConnectionContext.Provider>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ const NetworkTime: FC = () => {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<RouterTabs value={routerTab}>
|
<RouterTabs value={routerTab}>
|
||||||
<Tab value="status" label={LL.STATUS_OF('NTP')} />
|
<Tab value="/ntp/status" label={LL.STATUS_OF('NTP')} />
|
||||||
<Tab value="settings" label={LL.SETTINGS_OF('NTP')} disabled={!authenticatedContext.me.admin} />
|
<Tab value="/ntp/settings" label={LL.SETTINGS_OF('NTP')} disabled={!authenticatedContext.me.admin} />
|
||||||
</RouterTabs>
|
</RouterTabs>
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path="status" element={<NTPStatusForm />} />
|
<Route path="status" element={<NTPStatusForm />} />
|
||||||
@@ -33,7 +33,7 @@ const NetworkTime: FC = () => {
|
|||||||
</RequireAdmin>
|
</RequireAdmin>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route path="/*" element={<Navigate replace to="status" />} />
|
<Route path="*" element={<Navigate replace to="/ntp/status" />} />
|
||||||
</Routes>
|
</Routes>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import { Table, Header, HeaderRow, HeaderCell, Body, Row, Cell } from '@table-li
|
|||||||
import { useTheme } from '@table-library/react-table-library/theme';
|
import { useTheme } from '@table-library/react-table-library/theme';
|
||||||
import { useContext, useState } from 'react';
|
import { useContext, useState } from 'react';
|
||||||
|
|
||||||
import { unstable_useBlocker as useBlocker } from 'react-router-dom';
|
import { useBlocker } from 'react-router-dom';
|
||||||
import GenerateToken from './GenerateToken';
|
import GenerateToken from './GenerateToken';
|
||||||
import UserForm from './UserForm';
|
import UserForm from './UserForm';
|
||||||
import type { FC } from 'react';
|
import type { FC } from 'react';
|
||||||
|
|||||||
@@ -17,13 +17,13 @@ const Security: FC = () => {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<RouterTabs value={routerTab}>
|
<RouterTabs value={routerTab}>
|
||||||
<Tab value="users" label={LL.MANAGE_USERS()} />
|
<Tab value="/security/users" label={LL.MANAGE_USERS()} />
|
||||||
<Tab value="settings" label={LL.SETTINGS_OF(LL.SECURITY(1))} />
|
<Tab value="/security/settings" label={LL.SETTINGS_OF(LL.SECURITY(1))} />
|
||||||
</RouterTabs>
|
</RouterTabs>
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path="users" element={<ManageUsersForm />} />
|
<Route path="users" element={<ManageUsersForm />} />
|
||||||
<Route path="settings" element={<SecuritySettingsForm />} />
|
<Route path="settings" element={<SecuritySettingsForm />} />
|
||||||
<Route path="/*" element={<Navigate replace to="users" />} />
|
<Route path="*" element={<Navigate replace to="/security/users" />} />
|
||||||
</Routes>
|
</Routes>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -23,10 +23,10 @@ const System: FC = () => {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<RouterTabs value={routerTab}>
|
<RouterTabs value={routerTab}>
|
||||||
<Tab value="status" label={LL.STATUS_OF(LL.SYSTEM(1))} />
|
<Tab value="/system/status" label={LL.STATUS_OF(LL.SYSTEM(1))} />
|
||||||
<Tab value="log" label={LL.LOG_OF(LL.SYSTEM(2))} />
|
<Tab value="/system/log" label={LL.LOG_OF(LL.SYSTEM(2))} />
|
||||||
<Tab value="ota" label={LL.SETTINGS_OF('OTA')} disabled={!me.admin} />
|
<Tab value="/system/ota" label={LL.SETTINGS_OF('OTA')} disabled={!me.admin} />
|
||||||
<Tab value="upload" label={LL.UPLOAD_DOWNLOAD()} disabled={!me.admin} />
|
<Tab value="/system/upload" label={LL.UPLOAD_DOWNLOAD()} disabled={!me.admin} />
|
||||||
</RouterTabs>
|
</RouterTabs>
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path="status" element={<SystemStatusForm />} />
|
<Route path="status" element={<SystemStatusForm />} />
|
||||||
@@ -47,7 +47,7 @@ const System: FC = () => {
|
|||||||
</RequireAdmin>
|
</RequireAdmin>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route path="/*" element={<Navigate replace to="status" />} />
|
<Route path="*" element={<Navigate replace to="/system/status" />} />
|
||||||
</Routes>
|
</Routes>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -20,15 +20,15 @@ const Dashboard: FC = () => {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<RouterTabs value={routerTab}>
|
<RouterTabs value={routerTab}>
|
||||||
<Tab value="devices" label={LL.DEVICES()} />
|
<Tab value="/dashboard/devices" label={LL.DEVICES()} />
|
||||||
<Tab value="sensors" label={LL.SENSORS()} />
|
<Tab value="/dashboard/sensors" label={LL.SENSORS()} />
|
||||||
<Tab value="status" label="Status" />
|
<Tab value="/dashboard/status" label="Status" />
|
||||||
</RouterTabs>
|
</RouterTabs>
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path="devices" element={<DashboardDevices />} />
|
<Route path="devices" element={<DashboardDevices />} />
|
||||||
<Route path="sensors" element={<DashboardSensors />} />
|
<Route path="sensors" element={<DashboardSensors />} />
|
||||||
<Route path="status" element={<DashboardStatus />} />
|
<Route path="status" element={<DashboardStatus />} />
|
||||||
<Route path="/*" element={<Navigate replace to="devices" />} />
|
<Route path="*" element={<Navigate replace to="/dashboard/devices" />} />
|
||||||
</Routes>
|
</Routes>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,28 +1,83 @@
|
|||||||
import { Tab } from '@mui/material';
|
import CommentIcon from '@mui/icons-material/CommentTwoTone';
|
||||||
import { Navigate, Route, Routes } from 'react-router-dom';
|
import EastIcon from '@mui/icons-material/East';
|
||||||
import HelpInformation from './HelpInformation';
|
import GitHubIcon from '@mui/icons-material/GitHub';
|
||||||
|
import MenuBookIcon from '@mui/icons-material/MenuBookTwoTone';
|
||||||
|
import { Box, List, ListItem, ListItemAvatar, ListItemText, Link, Typography } from '@mui/material';
|
||||||
import type { FC } from 'react';
|
import type { FC } from 'react';
|
||||||
|
import { SectionContent, useLayoutTitle } from 'components';
|
||||||
import { RouterTabs, useRouterTab, useLayoutTitle } from 'components';
|
|
||||||
|
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
|
|
||||||
const Help: FC = () => {
|
const Help: FC = () => {
|
||||||
const { LL } = useI18nContext();
|
const { LL } = useI18nContext();
|
||||||
const { routerTab } = useRouterTab();
|
|
||||||
|
|
||||||
useLayoutTitle(LL.HELP_OF(''));
|
useLayoutTitle(LL.HELP_OF(''));
|
||||||
|
|
||||||
|
const uploadURL = window.location.origin + '/system/upload';
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<SectionContent title={LL.SUPPORT_INFORMATION()} titleGutter>
|
||||||
<RouterTabs value={routerTab}>
|
<List>
|
||||||
<Tab value="information" label={LL.HELP_OF('EMS-ESP')} />
|
<ListItem>
|
||||||
</RouterTabs>
|
<ListItemAvatar>
|
||||||
<Routes>
|
<MenuBookIcon style={{ fontSize: 24, color: 'lightblue', verticalAlign: 'middle' }} />
|
||||||
<Route path="information" element={<HelpInformation />} />
|
</ListItemAvatar>
|
||||||
<Route path="/*" element={<Navigate replace to="information" />} />
|
<ListItemText>
|
||||||
</Routes>
|
{LL.HELP_INFORMATION_1()}
|
||||||
</>
|
<EastIcon style={{ fontSize: 24, color: 'lightblue', verticalAlign: 'middle' }} />
|
||||||
|
|
||||||
|
<Link target="_blank" href="https://emsesp.github.io/docs" color="primary">
|
||||||
|
{LL.CLICK_HERE()}
|
||||||
|
</Link>
|
||||||
|
</ListItemText>
|
||||||
|
</ListItem>
|
||||||
|
|
||||||
|
<ListItem>
|
||||||
|
<ListItemAvatar>
|
||||||
|
<CommentIcon style={{ fontSize: 24, color: 'lightblue', verticalAlign: 'middle' }} />
|
||||||
|
</ListItemAvatar>
|
||||||
|
<ListItemText>
|
||||||
|
{LL.HELP_INFORMATION_2()}
|
||||||
|
<EastIcon style={{ fontSize: 24, color: 'lightblue', verticalAlign: 'middle' }} />
|
||||||
|
|
||||||
|
<Link target="_blank" href="https://discord.gg/3J3GgnzpyT" color="primary">
|
||||||
|
{LL.CLICK_HERE()}
|
||||||
|
</Link>
|
||||||
|
</ListItemText>
|
||||||
|
</ListItem>
|
||||||
|
|
||||||
|
<ListItem>
|
||||||
|
<ListItemAvatar>
|
||||||
|
<GitHubIcon style={{ fontSize: 24, color: 'lightblue', verticalAlign: 'middle' }} />
|
||||||
|
</ListItemAvatar>
|
||||||
|
<ListItemText>
|
||||||
|
{LL.HELP_INFORMATION_3()}
|
||||||
|
<EastIcon style={{ fontSize: 24, color: 'lightblue', verticalAlign: 'middle' }} />
|
||||||
|
<Link target="_blank" href="https://github.com/emsesp/EMS-ESP32/issues/new/choose" color="primary">
|
||||||
|
{LL.CLICK_HERE()}
|
||||||
|
</Link>
|
||||||
|
<br />
|
||||||
|
<i>({LL.HELP_INFORMATION_4()}</i>
|
||||||
|
<Link href={uploadURL} color="primary">
|
||||||
|
{LL.UPLOAD()}
|
||||||
|
</Link>
|
||||||
|
)
|
||||||
|
</ListItemText>
|
||||||
|
</ListItem>
|
||||||
|
</List>
|
||||||
|
|
||||||
|
<Box border={1} p={1} mt={4} color="orange">
|
||||||
|
<Typography align="center" variant="subtitle1" color="orange">
|
||||||
|
<b>{LL.HELP_INFORMATION_5()}</b>
|
||||||
|
</Typography>
|
||||||
|
<Typography align="center">
|
||||||
|
<Link target="_blank" href="https://github.com/emsesp/EMS-ESP32" color="primary">
|
||||||
|
{'github.com/emsesp/EMS-ESP32'}
|
||||||
|
</Link>
|
||||||
|
</Typography>
|
||||||
|
<Typography color="white" align="center">
|
||||||
|
@proddy @MichaelDvP
|
||||||
|
</Typography>
|
||||||
|
</Box>
|
||||||
|
</SectionContent>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,85 +0,0 @@
|
|||||||
import CommentIcon from '@mui/icons-material/CommentTwoTone';
|
|
||||||
import EastIcon from '@mui/icons-material/East';
|
|
||||||
import GitHubIcon from '@mui/icons-material/GitHub';
|
|
||||||
import MenuBookIcon from '@mui/icons-material/MenuBookTwoTone';
|
|
||||||
import { Typography, Box, List, ListItem, ListItemText, Link, ListItemAvatar } from '@mui/material';
|
|
||||||
import type { FC } from 'react';
|
|
||||||
|
|
||||||
import { SectionContent } from 'components';
|
|
||||||
|
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
|
||||||
|
|
||||||
const HelpInformation: FC = () => {
|
|
||||||
const { LL } = useI18nContext();
|
|
||||||
|
|
||||||
const uploadURL = window.location.origin + '/system/upload';
|
|
||||||
|
|
||||||
return (
|
|
||||||
<SectionContent title={LL.SUPPORT_INFORMATION()} titleGutter>
|
|
||||||
<List>
|
|
||||||
<ListItem>
|
|
||||||
<ListItemAvatar>
|
|
||||||
<MenuBookIcon style={{ fontSize: 24, color: 'lightblue', verticalAlign: 'middle' }} />
|
|
||||||
</ListItemAvatar>
|
|
||||||
<ListItemText>
|
|
||||||
{LL.HELP_INFORMATION_1()}
|
|
||||||
<EastIcon style={{ fontSize: 24, color: 'lightblue', verticalAlign: 'middle' }} />
|
|
||||||
|
|
||||||
<Link target="_blank" href="https://emsesp.github.io/docs" color="primary">
|
|
||||||
{LL.CLICK_HERE()}
|
|
||||||
</Link>
|
|
||||||
</ListItemText>
|
|
||||||
</ListItem>
|
|
||||||
|
|
||||||
<ListItem>
|
|
||||||
<ListItemAvatar>
|
|
||||||
<CommentIcon style={{ fontSize: 24, color: 'lightblue', verticalAlign: 'middle' }} />
|
|
||||||
</ListItemAvatar>
|
|
||||||
<ListItemText>
|
|
||||||
{LL.HELP_INFORMATION_2()}
|
|
||||||
<EastIcon style={{ fontSize: 24, color: 'lightblue', verticalAlign: 'middle' }} />
|
|
||||||
|
|
||||||
<Link target="_blank" href="https://discord.gg/3J3GgnzpyT" color="primary">
|
|
||||||
{LL.CLICK_HERE()}
|
|
||||||
</Link>
|
|
||||||
</ListItemText>
|
|
||||||
</ListItem>
|
|
||||||
|
|
||||||
<ListItem>
|
|
||||||
<ListItemAvatar>
|
|
||||||
<GitHubIcon style={{ fontSize: 24, color: 'lightblue', verticalAlign: 'middle' }} />
|
|
||||||
</ListItemAvatar>
|
|
||||||
<ListItemText>
|
|
||||||
{LL.HELP_INFORMATION_3()}
|
|
||||||
<EastIcon style={{ fontSize: 24, color: 'lightblue', verticalAlign: 'middle' }} />
|
|
||||||
<Link target="_blank" href="https://github.com/emsesp/EMS-ESP32/issues/new/choose" color="primary">
|
|
||||||
{LL.CLICK_HERE()}
|
|
||||||
</Link>
|
|
||||||
<br />
|
|
||||||
<i>({LL.HELP_INFORMATION_4()}</i>
|
|
||||||
<Link href={uploadURL} color="primary">
|
|
||||||
{LL.UPLOAD()}
|
|
||||||
</Link>
|
|
||||||
)
|
|
||||||
</ListItemText>
|
|
||||||
</ListItem>
|
|
||||||
</List>
|
|
||||||
|
|
||||||
<Box border={1} p={1} mt={4} color="orange">
|
|
||||||
<Typography align="center" variant="subtitle1" color="orange">
|
|
||||||
<b>{LL.HELP_INFORMATION_5()}</b>
|
|
||||||
</Typography>
|
|
||||||
<Typography align="center">
|
|
||||||
<Link target="_blank" href="https://github.com/emsesp/EMS-ESP32" color="primary">
|
|
||||||
{'github.com/emsesp/EMS-ESP32'}
|
|
||||||
</Link>
|
|
||||||
</Typography>
|
|
||||||
<Typography color="white" align="center">
|
|
||||||
@proddy @MichaelDvP
|
|
||||||
</Typography>
|
|
||||||
</Box>
|
|
||||||
</SectionContent>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default HelpInformation;
|
|
||||||
@@ -18,17 +18,17 @@ const Settings: FC = () => {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<RouterTabs value={routerTab}>
|
<RouterTabs value={routerTab}>
|
||||||
<Tab value="application" label={LL.APPLICATION_SETTINGS()} />
|
<Tab value="/settings/application" label={LL.APPLICATION_SETTINGS()} />
|
||||||
<Tab value="customization" label={LL.CUSTOMIZATIONS()} />
|
<Tab value="/settings/customization" label={LL.CUSTOMIZATIONS()} />
|
||||||
<Tab value="scheduler" label={LL.SCHEDULER()} />
|
<Tab value="/settings/scheduler" label={LL.SCHEDULER()} />
|
||||||
<Tab value="customentities" label={LL.CUSTOM_ENTITIES(0)} />
|
<Tab value="/settings/customentities" label={LL.CUSTOM_ENTITIES(0)} />
|
||||||
</RouterTabs>
|
</RouterTabs>
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path="application" element={<SettingsApplication />} />
|
<Route path="application" element={<SettingsApplication />} />
|
||||||
<Route path="customization" element={<SettingsCustomization />} />
|
<Route path="customization" element={<SettingsCustomization />} />
|
||||||
<Route path="scheduler" element={<SettingsScheduler />} />
|
<Route path="scheduler" element={<SettingsScheduler />} />
|
||||||
<Route path="customentities" element={<SettingsEntities />} />
|
<Route path="customentities" element={<SettingsEntities />} />
|
||||||
<Route path="/*" element={<Navigate replace to="application" />} />
|
<Route path="*" element={<Navigate replace to="/settings/application" />} />
|
||||||
</Routes>
|
</Routes>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import { Table, Header, HeaderRow, HeaderCell, Body, Row, Cell } from '@table-li
|
|||||||
import { useTheme } from '@table-library/react-table-library/theme';
|
import { useTheme } from '@table-library/react-table-library/theme';
|
||||||
import { useRequest } from 'alova';
|
import { useRequest } from 'alova';
|
||||||
import { useState, useEffect, useCallback } from 'react';
|
import { useState, useEffect, useCallback } from 'react';
|
||||||
import { unstable_useBlocker as useBlocker, useLocation } from 'react-router-dom';
|
import { useBlocker, useLocation } from 'react-router-dom';
|
||||||
import { toast } from 'react-toastify';
|
import { toast } from 'react-toastify';
|
||||||
|
|
||||||
import EntityMaskToggle from './EntityMaskToggle';
|
import EntityMaskToggle from './EntityMaskToggle';
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { useTheme } from '@table-library/react-table-library/theme';
|
|||||||
// eslint-disable-next-line import/named
|
// eslint-disable-next-line import/named
|
||||||
import { updateState, useRequest } from 'alova';
|
import { updateState, useRequest } from 'alova';
|
||||||
import { useState, useCallback } from 'react';
|
import { useState, useCallback } from 'react';
|
||||||
import { unstable_useBlocker as useBlocker } from 'react-router-dom';
|
import { useBlocker } from 'react-router-dom';
|
||||||
|
|
||||||
import { toast } from 'react-toastify';
|
import { toast } from 'react-toastify';
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import { useTheme } from '@table-library/react-table-library/theme';
|
|||||||
// eslint-disable-next-line import/named
|
// eslint-disable-next-line import/named
|
||||||
import { updateState, useRequest } from 'alova';
|
import { updateState, useRequest } from 'alova';
|
||||||
import { useState, useEffect, useCallback } from 'react';
|
import { useState, useEffect, useCallback } from 'react';
|
||||||
import { unstable_useBlocker as useBlocker } from 'react-router-dom';
|
import { useBlocker } from 'react-router-dom';
|
||||||
import { toast } from 'react-toastify';
|
import { toast } from 'react-toastify';
|
||||||
import SettingsSchedulerDialog from './SettingsSchedulerDialog';
|
import SettingsSchedulerDialog from './SettingsSchedulerDialog';
|
||||||
import * as EMSESP from './api';
|
import * as EMSESP from './api';
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { useRequest, type Method } from 'alova';
|
import { useRequest, type Method } from 'alova';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { unstable_useBlocker as useBlocker } from 'react-router-dom';
|
import { useBlocker } from 'react-router-dom';
|
||||||
import { toast } from 'react-toastify';
|
import { toast } from 'react-toastify';
|
||||||
|
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
|
|||||||
@@ -1187,10 +1187,10 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@remix-run/router@npm:1.11.0":
|
"@remix-run/router@npm:1.13.0":
|
||||||
version: 1.11.0
|
version: 1.13.0
|
||||||
resolution: "@remix-run/router@npm:1.11.0"
|
resolution: "@remix-run/router@npm:1.13.0"
|
||||||
checksum: 629ec578b9dfd3c5cb5de64a0798dd7846ec5ba0351aa66f42b1c65efb43da8f30366be59b825303648965b0df55b638c110949b24ef94fd62e98117fdfb0c0f
|
checksum: bb173a012d2036c5ee69babfe30c73975b970c2e5a0edaba138c302ae80d255e238e462e77365ab4efe819b6397e1a7f3a416d6200d17f9655f0ca1c51c4f45e
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -1775,9 +1775,9 @@ __metadata:
|
|||||||
react-dom: "npm:latest"
|
react-dom: "npm:latest"
|
||||||
react-dropzone: "npm:^14.2.3"
|
react-dropzone: "npm:^14.2.3"
|
||||||
react-icons: "npm:^4.12.0"
|
react-icons: "npm:^4.12.0"
|
||||||
react-router-dom: "npm:6.18.0"
|
react-router-dom: "npm:^6.20.0"
|
||||||
react-toastify: "npm:^9.1.3"
|
react-toastify: "npm:^9.1.3"
|
||||||
rollup-plugin-visualizer: "npm:^5.9.2"
|
rollup-plugin-visualizer: "npm:^5.9.3"
|
||||||
sockette: "npm:^2.0.6"
|
sockette: "npm:^2.0.6"
|
||||||
terser: "npm:^5.24.0"
|
terser: "npm:^5.24.0"
|
||||||
typesafe-i18n: "npm:^5.26.2"
|
typesafe-i18n: "npm:^5.26.2"
|
||||||
@@ -7020,27 +7020,27 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"react-router-dom@npm:6.18.0":
|
"react-router-dom@npm:^6.20.0":
|
||||||
version: 6.18.0
|
version: 6.20.0
|
||||||
resolution: "react-router-dom@npm:6.18.0"
|
resolution: "react-router-dom@npm:6.20.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@remix-run/router": "npm:1.11.0"
|
"@remix-run/router": "npm:1.13.0"
|
||||||
react-router: "npm:6.18.0"
|
react-router: "npm:6.20.0"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
react: ">=16.8"
|
react: ">=16.8"
|
||||||
react-dom: ">=16.8"
|
react-dom: ">=16.8"
|
||||||
checksum: b0e72603d73172b6c6662afe2faed326753d5bbd9905aa560e3dade7996fc13d19e34e3ed668d2849efd685e2db2f711129c84b1439870e92c9cc91ddc343cf5
|
checksum: 4b6741c545cedf5a5c4f996deb953679dcc985425e0664e27b97fdb9ab1387cbe1a6a12bfc7f7c38ec40b15759b4bf6396930ec26540a4a81ae16d154fd35049
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"react-router@npm:6.18.0":
|
"react-router@npm:6.20.0":
|
||||||
version: 6.18.0
|
version: 6.20.0
|
||||||
resolution: "react-router@npm:6.18.0"
|
resolution: "react-router@npm:6.20.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@remix-run/router": "npm:1.11.0"
|
"@remix-run/router": "npm:1.13.0"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
react: ">=16.8"
|
react: ">=16.8"
|
||||||
checksum: a00c8f347b7ffee575f4a7731782e688e3fca458ca5bd970fb41cef66a6851853caa24464155ab438d5879f367b1223a539642a405a865913ffe7e63e53b1245
|
checksum: 2cdac5ad8b7a7bc230173b26768bcf3f6a9abc0a19983fa7b76b9ffdbeb44bfbd88fcc2033e9062defafef144db207859eb3162a9c9742d70cfce4e7166ff1e5
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -7326,22 +7326,22 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"rollup-plugin-visualizer@npm:^5.9.2":
|
"rollup-plugin-visualizer@npm:^5.9.3":
|
||||||
version: 5.9.2
|
version: 5.9.3
|
||||||
resolution: "rollup-plugin-visualizer@npm:5.9.2"
|
resolution: "rollup-plugin-visualizer@npm:5.9.3"
|
||||||
dependencies:
|
dependencies:
|
||||||
open: "npm:^8.4.0"
|
open: "npm:^8.4.0"
|
||||||
picomatch: "npm:^2.3.1"
|
picomatch: "npm:^2.3.1"
|
||||||
source-map: "npm:^0.7.4"
|
source-map: "npm:^0.7.4"
|
||||||
yargs: "npm:^17.5.1"
|
yargs: "npm:^17.5.1"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
rollup: 2.x || 3.x
|
rollup: 2.x || 3.x || 4.x
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
rollup:
|
rollup:
|
||||||
optional: true
|
optional: true
|
||||||
bin:
|
bin:
|
||||||
rollup-plugin-visualizer: dist/bin/cli.js
|
rollup-plugin-visualizer: dist/bin/cli.js
|
||||||
checksum: 9cc5b140cdb384cd16538537ed41b8ecc97a21ee1fe7974775c6fbbb7522ed1733da7c47ab8b619c9b4f190de5de3b2ad34303afe94f943c41f2ce2ec621b6cb
|
checksum: 569acbdf9401fb5e23456d889b1094e95a003331c63428732f94418eda59850fd74994587353f58c833a535cc24cdef56c06872996f76f98802ff22939ebbf0d
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user