diff --git a/moneymgr_web/eslint.config.js b/moneymgr_web/eslint.config.js index 583a4f6..ce416c6 100644 --- a/moneymgr_web/eslint.config.js +++ b/moneymgr_web/eslint.config.js @@ -1,28 +1,23 @@ import js from "@eslint/js"; -import globals from "globals"; +import reactDom from "eslint-plugin-react-dom"; import reactHooks from "eslint-plugin-react-hooks"; import reactRefresh from "eslint-plugin-react-refresh"; -import tseslint from "typescript-eslint"; import reactX from "eslint-plugin-react-x"; -import reactDom from "eslint-plugin-react-dom"; +import globals from "globals"; +import tseslint from "typescript-eslint"; export default tseslint.config( { ignores: ["dist"] }, { extends: [ js.configs.recommended, - // Remove ...tseslint.configs.recommended and replace with this - // ...tseslint.configs.recommendedTypeChecked, - // Alternatively, use this for stricter rules ...tseslint.configs.strictTypeChecked, - // Optionally, add this for stylistic rules ...tseslint.configs.stylisticTypeChecked, ], files: ["**/*.{ts,tsx}"], languageOptions: { ecmaVersion: 2020, globals: globals.browser, - // other options... parserOptions: { project: ["./tsconfig.node.json", "./tsconfig.app.json"], tsconfigRootDir: import.meta.dirname, @@ -40,9 +35,20 @@ export default tseslint.config( "warn", { allowConstantExport: true }, ], - ...reactX.configs["recommended-typescript"].rules, ...reactDom.configs.recommended.rules, + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-misused-promises": "off", + "@typescript-eslint/no-floating-promises": "off", + "@typescript-eslint/restrict-template-expressions": "off", + "@typescript-eslint/no-extraneous-class": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-return": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-unsafe-argument": "off", + "react-refresh/only-export-components": "off", }, } ); diff --git a/moneymgr_web/src/App.tsx b/moneymgr_web/src/App.tsx index 5fc3d18..fc53ced 100644 --- a/moneymgr_web/src/App.tsx +++ b/moneymgr_web/src/App.tsx @@ -53,12 +53,12 @@ export function App() { ); return ( - + - + ); } export function useAuth(): AuthContext { - return React.useContext(AuthContextK)!; + return React.use(AuthContextK)!; } diff --git a/moneymgr_web/src/api/ApiClient.ts b/moneymgr_web/src/api/ApiClient.ts index 177ac86..49df36b 100644 --- a/moneymgr_web/src/api/ApiClient.ts +++ b/moneymgr_web/src/api/ApiClient.ts @@ -44,7 +44,7 @@ export class APIClient { */ static async exec(args: RequestParams): Promise { let body: string | undefined | FormData = undefined; - let headers: any = {}; + const headers: any = {}; // JSON request if (args.jsonData) { @@ -67,17 +67,17 @@ export class APIClient { const res: XMLHttpRequest = await new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); xhr.upload.addEventListener("progress", (e) => - args.upProgress!(e.loaded / e.total) + { args.upProgress!(e.loaded / e.total); } ); - xhr.addEventListener("load", () => resolve(xhr)); + xhr.addEventListener("load", () => { resolve(xhr); }); xhr.addEventListener("error", () => - reject(new Error("File upload failed")) + { reject(new Error("File upload failed")); } ); xhr.addEventListener("abort", () => - reject(new Error("File upload aborted")) + { reject(new Error("File upload aborted")); } ); xhr.addEventListener("timeout", () => - reject(new Error("File upload timeout")) + { reject(new Error("File upload timeout")); } ); xhr.open(args.method, url, true); xhr.withCredentials = true; diff --git a/moneymgr_web/src/hooks/context_providers/AlertDialogProvider.tsx b/moneymgr_web/src/hooks/context_providers/AlertDialogProvider.tsx index d0d996a..1b43f02 100644 --- a/moneymgr_web/src/hooks/context_providers/AlertDialogProvider.tsx +++ b/moneymgr_web/src/hooks/context_providers/AlertDialogProvider.tsx @@ -39,7 +39,7 @@ export function AlertDialogProvider(p: PropsWithChildren): React.ReactElement { return ( <> - {p.children} + {p.children} - + {p.children} - + handleClose(false)} + onClose={() => { handleClose(false); }} aria-labelledby="alert-dialog-title" aria-describedby="alert-dialog-description" onKeyUp={keyUp} @@ -71,10 +71,10 @@ export function ConfirmDialogProvider( - - @@ -84,5 +84,5 @@ export function ConfirmDialogProvider( } export function useConfirm(): ConfirmContext { - return React.useContext(ConfirmContextK)!; + return React.use(ConfirmContextK)!; } diff --git a/moneymgr_web/src/hooks/context_providers/DarkThemeProvider.tsx b/moneymgr_web/src/hooks/context_providers/DarkThemeProvider.tsx index 68df8f8..794e80d 100644 --- a/moneymgr_web/src/hooks/context_providers/DarkThemeProvider.tsx +++ b/moneymgr_web/src/hooks/context_providers/DarkThemeProvider.tsx @@ -29,7 +29,7 @@ export function DarkThemeProvider(p: PropsWithChildren): React.ReactElement { ); return ( - {p.children} - + ); } export function useDarkTheme(): DarkThemeContext { - return React.useContext(DarkThemeContextK)!; + return React.use(DarkThemeContextK)!; } diff --git a/moneymgr_web/src/hooks/context_providers/LoadingMessageProvider.tsx b/moneymgr_web/src/hooks/context_providers/LoadingMessageProvider.tsx index 6c0c826..01acab9 100644 --- a/moneymgr_web/src/hooks/context_providers/LoadingMessageProvider.tsx +++ b/moneymgr_web/src/hooks/context_providers/LoadingMessageProvider.tsx @@ -6,10 +6,10 @@ import { } from "@mui/material"; import React, { PropsWithChildren } from "react"; -type LoadingMessageContext = { +interface LoadingMessageContext { show: (message: string) => void; hide: () => void; -}; +} const LoadingMessageContextK = React.createContext(null); @@ -34,9 +34,9 @@ export function LoadingMessageProvider( return ( <> - + {p.children} - + @@ -60,5 +60,5 @@ export function LoadingMessageProvider( } export function useLoadingMessage(): LoadingMessageContext { - return React.useContext(LoadingMessageContextK)!; + return React.use(LoadingMessageContextK)!; } diff --git a/moneymgr_web/src/hooks/context_providers/SnackbarProvider.tsx b/moneymgr_web/src/hooks/context_providers/SnackbarProvider.tsx index 203b3c9..935c00b 100644 --- a/moneymgr_web/src/hooks/context_providers/SnackbarProvider.tsx +++ b/moneymgr_web/src/hooks/context_providers/SnackbarProvider.tsx @@ -24,9 +24,9 @@ export function SnackbarProvider(p: PropsWithChildren): React.ReactElement { return ( <> - + {p.children} - + await ServerApi.LoadConfig()} + load={async () => { await ServerApi.LoadConfig(); }} errMsg="Failed to load static server configuration!" build={() => } /> diff --git a/moneymgr_web/src/widgets/AsyncWidget.tsx b/moneymgr_web/src/widgets/AsyncWidget.tsx index 87c3ca2..6c377cc 100644 --- a/moneymgr_web/src/widgets/AsyncWidget.tsx +++ b/moneymgr_web/src/widgets/AsyncWidget.tsx @@ -64,7 +64,7 @@ export function AsyncWidget(p: { - {p.errAdditionalElement && p.errAdditionalElement()} + {p.errAdditionalElement?.()} ); diff --git a/moneymgr_web/src/widgets/BaseAuthenticatedPage.tsx b/moneymgr_web/src/widgets/BaseAuthenticatedPage.tsx index c7d128a..9505fbd 100644 --- a/moneymgr_web/src/widgets/BaseAuthenticatedPage.tsx +++ b/moneymgr_web/src/widgets/BaseAuthenticatedPage.tsx @@ -40,7 +40,7 @@ export function BaseAuthenticatedPage(): React.ReactElement { )} build={() => ( - - + )} /> ); } export function useAuthInfo(): AuthInfoContext { - return React.useContext(AuthInfoContextK)!; + return React.use(AuthInfoContextK)!; } diff --git a/moneymgr_web/src/widgets/DarkThemeButton.tsx b/moneymgr_web/src/widgets/DarkThemeButton.tsx index cbbcf70..8629092 100644 --- a/moneymgr_web/src/widgets/DarkThemeButton.tsx +++ b/moneymgr_web/src/widgets/DarkThemeButton.tsx @@ -9,7 +9,7 @@ export function DarkThemeButton(): React.ReactElement { return ( darkTheme.setEnabled(!darkTheme.enabled)} + onClick={() => { darkTheme.setEnabled(!darkTheme.enabled); }} style={{ color: "inherit" }} > {!darkTheme.enabled ? : } diff --git a/moneymgr_web/src/widgets/MoneyWebAppBar.tsx b/moneymgr_web/src/widgets/MoneyWebAppBar.tsx index 0aa5a31..8235b2d 100644 --- a/moneymgr_web/src/widgets/MoneyWebAppBar.tsx +++ b/moneymgr_web/src/widgets/MoneyWebAppBar.tsx @@ -44,7 +44,7 @@ export function MoneyWebAppBar(p: {