diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index 4edbf6b..4c12eb5 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -24,8 +24,6 @@ jobs: node-version: lts/* cache: yarn - name: Install dependencies - env: - NODE_OPTIONS: --max-old-space-size=8192 run: yarn install --immutable --network-timeout=300000 - name: Build run: yarn build --base=${{ env.base_path }} diff --git a/jest.config.ts b/jest.config.ts index c5af96a..66fb5db 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -10,22 +10,22 @@ const config: JestConfigWithTsJest = { extensionsToTreatAsEsm: [".ts", ".tsx"], setupFilesAfterEnv: ["/src/jest.setup.ts"], transform: { - '^.+\\.tsx?$': [ - 'ts-jest', + "^.+\\.tsx?$": [ + "ts-jest", { diagnostics: { - ignoreCodes: [1343] + ignoreCodes: [1343], }, astTransformers: { before: [ { - path: 'ts-jest-mock-import-meta', - options: { metaObjectReplacement: { env: { BASE_URL: "/" } } } - } - ] - } - } - ] - } + path: "ts-jest-mock-import-meta", + options: { metaObjectReplacement: { env: { BASE_URL: "/" } } }, + }, + ], + }, + }, + ], + }, }; export default config; diff --git a/package.json b/package.json index 85f8adf..ef163cb 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,6 @@ "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-prettier": "^5.2.5", "eslint-plugin-unused-imports": "^4.1.4", - "eslint-plugin-yaml": "^1.1.2", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "jest-fetch-mock": "^3.0.3", @@ -75,7 +74,7 @@ "scripts": { "start": "vite serve", "build": "vite build", - "lint": "ESLINT_USE_FLAT_CONFIG=false eslint --ignore-path .gitignore --ignore-pattern testdata/ --ext .ts,.tsx,.yml,.yaml .", + "lint": "ESLINT_USE_FLAT_CONFIG=false eslint --ignore-path .gitignore --ignore-pattern testdata/ --ext .ts,.tsx .", "fix": "yarn lint --fix", "test": "yarn jest", "test:watch": "yarn jest --watch" @@ -88,15 +87,13 @@ "import", "prettier", "unused-imports", - "@typescript-eslint", - "yaml" + "@typescript-eslint" ], "extends": [ "eslint:recommended", "plugin:@typescript-eslint/recommended", "plugin:@typescript-eslint/stylistic", - "plugin:import/typescript", - "plugin:yaml/legacy" + "plugin:import/typescript" ], "parser": "@typescript-eslint/parser", "parserOptions": { @@ -135,8 +132,7 @@ ] ] } - ], - "unused-imports/no-unused-imports-ts": 2 + ] } }, "prettier": { diff --git a/src/App.test.tsx b/src/App.test.tsx index 0c76a4c..111b63d 100644 --- a/src/App.test.tsx +++ b/src/App.test.tsx @@ -1,6 +1,6 @@ import { render, screen } from "@testing-library/react"; -import { BrowserRouter } from "react-router-dom"; import fetchMock from "jest-fetch-mock"; +import { BrowserRouter } from "react-router-dom"; fetchMock.enableMocks(); jest.mock("./synapse/authProvider", () => ({ diff --git a/src/App.tsx b/src/App.tsx index 2aa2efa..2b5ed3b 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,11 +1,12 @@ +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { merge } from "lodash"; import polyglotI18nProvider from "ra-i18n-polyglot"; - import { Admin, CustomRoutes, Resource, resolveBrowserLocale } from "react-admin"; - import { Route } from "react-router-dom"; import AdminLayout from "./components/AdminLayout"; +import ServerNotificationsPage from "./components/etke.cc/ServerNotificationsPage"; +import ServerStatusPage from "./components/etke.cc/ServerStatusPage"; import UserImport from "./components/user-import/UserImport"; import germanMessages from "./i18n/de"; import englishMessages from "./i18n/en"; @@ -23,9 +24,6 @@ import userMediaStats from "./resources/user_media_statistics"; import users from "./resources/users"; import authProvider from "./synapse/authProvider"; import dataProvider from "./synapse/dataProvider"; -import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; -import ServerStatusPage from "./components/etke.cc/ServerStatusPage"; -import ServerNotificationsPage from "./components/etke.cc/ServerNotificationsPage"; // TODO: Can we use lazy loading together with browser locale? const messages = { diff --git a/src/Context.tsx b/src/Context.tsx index 8d1c837..82bb0ee 100644 --- a/src/Context.tsx +++ b/src/Context.tsx @@ -4,4 +4,4 @@ import { Config } from "./utils/config"; export const AppContext = createContext({} as Config); -export const useAppContext = () => useContext(AppContext) as Config; \ No newline at end of file +export const useAppContext = () => useContext(AppContext) as Config; diff --git a/src/components/AdminLayout.tsx b/src/components/AdminLayout.tsx index de72b8e..e199198 100644 --- a/src/components/AdminLayout.tsx +++ b/src/components/AdminLayout.tsx @@ -1,12 +1,25 @@ -import { CheckForApplicationUpdate, AppBar, TitlePortal, InspectorButton, Confirm, Layout, Logout, Menu, useLogout, UserMenu, useStore } from "react-admin"; -import { LoginMethod } from "../pages/LoginPage"; import { useEffect, useState, Suspense } from "react"; -import { Icons, DefaultIcon } from "../utils/icons"; -import { MenuItem, GetConfig, ClearConfig } from "../utils/config"; +import { + CheckForApplicationUpdate, + AppBar, + TitlePortal, + InspectorButton, + Confirm, + Layout, + Logout, + Menu, + useLogout, + UserMenu, + useStore, +} from "react-admin"; + import Footer from "./Footer"; -import ServerStatusBadge from "./etke.cc/ServerStatusBadge"; +import { LoginMethod } from "../pages/LoginPage"; +import { MenuItem, GetConfig, ClearConfig } from "../utils/config"; +import { Icons, DefaultIcon } from "../utils/icons"; import { ServerNotificationsBadge } from "./etke.cc/ServerNotificationsBadge"; import { ServerProcessResponse, ServerStatusResponse } from "../synapse/dataProvider"; +import ServerStatusBadge from "./etke.cc/ServerStatusBadge"; import { ServerStatusStyledBadge } from "./etke.cc/ServerStatusBadge"; const AdminUserMenu = () => { @@ -50,15 +63,17 @@ const AdminUserMenu = () => { }; const AdminAppBar = () => { - return (}> - - - - - ); + return ( + }> + + + + + + ); }; -const AdminMenu = (props) => { +const AdminMenu = props => { const [menu, setMenu] = useState([] as MenuItem[]); const [serverStatusEnabled, setServerStatusEnabled] = useState(false); useEffect(() => { @@ -67,57 +82,77 @@ const AdminMenu = (props) => { setServerStatusEnabled(true); } }, []); - const [serverProcess, setServerProcess] = useStore("serverProcess", { command: "", locked_at: "" }); - const [serverStatus, setServerStatus] = useStore("serverStatus", { success: false, ok: false, host: "", results: [] }); + const [serverProcess, setServerProcess] = useStore("serverProcess", { + command: "", + locked_at: "", + }); + const [serverStatus, setServerStatus] = useStore("serverStatus", { + success: false, + ok: false, + host: "", + results: [], + }); return ( - {serverStatusEnabled && - } - primaryText="Server Status" /> - } - - {menu && menu.map((item, index) => { - const { url, icon, label } = item; - const IconComponent = Icons[icon] as React.ComponentType | undefined; - - return ( - - : } - onClick={props.onMenuClick} + {serverStatusEnabled && ( + - - ); - })} + } + primaryText="Server Status" + /> + )} + + {menu && + menu.map((item, index) => { + const { url, icon, label } = item; + const IconComponent = Icons[icon] as React.ComponentType | undefined; + + return ( + + : } + onClick={props.onMenuClick} + /> + + ); + })} ); }; export const AdminLayout = ({ children }) => { - return <> - - {children} - - -