Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
ab648fa
Moved to eslint v9, along with the most high impact changes
MomoRazor Mar 22, 2026
0de6290
Hotfix for one last file and incorrect command for linter
MomoRazor Mar 22, 2026
6d88f4e
Hotfix for eslintignore for prettier
MomoRazor Mar 22, 2026
3fa3c76
Moving to mjs for one of the plugins
MomoRazor Mar 22, 2026
caaab5c
Change hotfix
MomoRazor Mar 22, 2026
c3853aa
Merge remote-tracking branch 'origin/master' into eslint-upgrade-2
MomoRazor Mar 24, 2026
8325f4a
hotfix for test
MomoRazor Mar 24, 2026
460cf8e
Merge remote-tracking branch 'origin/master' into eslint-upgrade-2
MomoRazor Apr 25, 2026
438283a
Slight Package Updates
MomoRazor Apr 25, 2026
2de4b81
Part 2 for eslint 9 change
MomoRazor Apr 25, 2026
737a373
Returning Eslint 9 to functionality
MomoRazor Apr 25, 2026
6bbc3aa
Box Create Updates and Fixes to initial load hook
MomoRazor Apr 25, 2026
659f096
Hotfix
MomoRazor Apr 25, 2026
0602bdb
Fixes
MomoRazor Apr 25, 2026
d41720d
Merge remote-tracking branch 'origin/eslint-update-2-2' into eslint-u…
MomoRazor Apr 25, 2026
6e2488a
Merge branch 'master' into eslint-update-2-2
pylipp Apr 28, 2026
7c11343
Fix for BoxCreate
MomoRazor Apr 29, 2026
b4ea143
Merge remote-tracking branch 'origin/master' into eslint-upgrade-2
MomoRazor Apr 29, 2026
b7f76f0
Merged Fixes
MomoRazor Apr 29, 2026
762cb2d
Fixes for useLoadAndSetGlobalPreferences
MomoRazor Apr 29, 2026
aa4df22
Merge remote-tracking branch 'origin/eslint-update-2-2' into eslint-u…
MomoRazor Apr 29, 2026
4da00e6
Some changes
MomoRazor Apr 29, 2026
b988221
Qr Reader Changes
MomoRazor Apr 30, 2026
1d5a85d
Merge remote-tracking branch 'origin/eslint-update-2-2' into eslint-u…
MomoRazor Apr 30, 2026
9ed7b3a
Fixes
MomoRazor Apr 30, 2026
b637fdd
BoxCreateView
MomoRazor Apr 30, 2026
608828f
Fixes
MomoRazor Apr 30, 2026
c44f2c8
Merge remote-tracking branch 'origin/eslint-update-2-2' into eslint-u…
MomoRazor Apr 30, 2026
b549f36
Timeout fixes
MomoRazor Apr 30, 2026
b4d5614
Timeout fix 2
MomoRazor Apr 30, 2026
8a647be
Merge remote-tracking branch 'origin/master' into eslint-update-2-2
MomoRazor Apr 30, 2026
e03f8dc
Merge remote-tracking branch 'origin/eslint-update-2-2' into eslint-u…
MomoRazor Apr 30, 2026
cedf8a0
Hotfix
MomoRazor Apr 30, 2026
5a08505
Merge remote-tracking branch 'origin/eslint-update-2-2' into eslint-u…
MomoRazor Apr 30, 2026
077f044
Copilot Review Updates
MomoRazor Apr 30, 2026
0aa1eeb
Merge remote-tracking branch 'origin/eslint-update-2-2' into eslint-u…
MomoRazor Apr 30, 2026
405ac51
Timoeut fixes
MomoRazor Apr 30, 2026
411f76c
Merge remote-tracking branch 'origin/eslint-update-2-2' into eslint-u…
MomoRazor Apr 30, 2026
7937257
More Copilot suggestions
MomoRazor May 1, 2026
81825a9
Merge remote-tracking branch 'origin/eslint-update-2-2' into eslint-u…
MomoRazor May 1, 2026
4485ea6
More Copilot review changes
MomoRazor May 1, 2026
36d5f3e
Merge remote-tracking branch 'origin/eslint-update-2-2' into eslint-u…
MomoRazor May 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 0 additions & 97 deletions .eslintrc.cjs

This file was deleted.

3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@

"typescript.tsdk": "node_modules/typescript/lib",
"typescript.enablePromptUseWorkspaceTsdk": true,
"eslint.useFlatConfig": false,

"eslint.useFlatConfig": true,

"git.enableCommitSigning": true
}
172 changes: 172 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
import path from "path";
import { fileURLToPath } from "url";
import js from "@eslint/js";
import tsParser from "@typescript-eslint/parser";
import tsPlugin from "@typescript-eslint/eslint-plugin";
import reactPlugin from "eslint-plugin-react";
import hooksPlugin from "eslint-plugin-react-hooks";
import jsxA11yPlugin from "eslint-plugin-jsx-a11y";
import importPlugin from "eslint-plugin-import";
import testingLibraryPlugin from "eslint-plugin-testing-library";
import prettierConfig from "eslint-config-prettier";
import globals from "globals";
import { fixupPluginRules } from "@eslint/compat";
import { reactRefresh } from "eslint-plugin-react-refresh";

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

export default [
// 1. Global Ignores (Replaces ignorePatterns)
{
ignores: [
"**/dist/**",
"**/build/**",
"**/coverage/**",
"**/node_modules/**",
"**/.eslintrc.config.cjs",
"**/vite.config.ts",
"**/generated/**",
"**/graphql.ts",
"back/scripts/**",
"front/public/**",
"shared-front/public/**",
"eslint.config.mjs",
],
},

// 2. Base Configuration for JS/TS/React
{
files: ["**/*.{js,jsx,ts,tsx}"],
languageOptions: {
parser: tsParser,
globals: {
...globals.browser,
...globals.es2020,
},
parserOptions: {
tsconfigRootDir: __dirname,
project: ["./*/tsconfig.json", "./tsconfig.json"],
ecmaFeatures: { jsx: true },
},
},
plugins: {
"@typescript-eslint": tsPlugin,
react: reactPlugin,
"react-hooks": fixupPluginRules(hooksPlugin),
"jsx-a11y": jsxA11yPlugin,
import: fixupPluginRules(importPlugin),
},
settings: {
react: { version: "detect" },
"import/resolver": {
typescript: {
alwaysTryTypes: true,
project: ["./*/tsconfig.json", "./tsconfig.json"],
},
node: {
extensions: [".ts", ".tsx"],
moduleDirectory: ["node_modules", "src"],
},
},
},
rules: {
...js.configs.recommended.rules,
...tsPlugin.configs.recommended.rules,
...reactPlugin.configs.recommended.rules,
...hooksPlugin.configs.recommended.rules,
...jsxA11yPlugin.configs.recommended.rules,

// Custom Rules
"@typescript-eslint/naming-convention": [
"error",
{
selector: "interface",
format: ["PascalCase"],
},
],
"react/react-in-jsx-scope": "off",
"no-undef": "off",
"react/jsx-props-no-spreading": "off",
"react/jsx-filename-extension": [1, { extensions: [".js", ".jsx", ".ts", ".tsx"] }],
"import/no-extraneous-dependencies": ["error"],
"import/no-unresolved": ["error", { caseSensitive: true }],
"import/extensions": [
"error",
"ignorePackages",
{
js: "never",
jsx: "never",
ts: "never",
tsx: "never",
},
],
//TODO This is done so that 'any' types can be change slowly, and not all at once
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-wrapper-object-types": "error",
},
},

// 3. Testing Overrides
{
files: [
"**/?(__)tests?(__)/**/*.[jt]s?(x)",
"**/?(*.)+(spec|test).[jt]s?(x)",
"**/mocks/**/*.[jt]s?(x)",
],
plugins: {
"testing-library": testingLibraryPlugin,
},
rules: {
...testingLibraryPlugin.configs.react.rules,
},
},

//sub-stuff
{
files: ["front/**/*.{ts,tsx,js,jsx}"],
rules: {
"import/no-extraneous-dependencies": [
"error",
{
// look for package.json files also in the parent directory
packageDir: [path.resolve(__dirname, "front"), __dirname],
},
],
},
},

{
files: ["shared-components/**/*.{ts,tsx,js,jsx}"],
rules: {
"import/no-extraneous-dependencies": [
"error",
{
// look for package.json files also in the parent directory
packageDir: [path.resolve(__dirname, "shared-components"), __dirname],
},
],
},
},

{
files: ["shared-front/**/*.{ts,tsx,js,jsx}"],
plugins: {
"react-refresh": reactRefresh.plugin,
},
rules: {
// This needed to resolve dependencies correctly
"import/no-extraneous-dependencies": [
"error",
{
// look for package.json files also in the parent directory
packageDir: [path.resolve(__dirname, "shared-front"), __dirname],
},
],
"react-refresh/only-export-components": ["warn", { allowConstantExport: true }],
},
},

// 4. Prettier (Must be last to override formatting)
prettierConfig,
];
17 changes: 0 additions & 17 deletions front/.eslintrc.cjs

This file was deleted.

2 changes: 1 addition & 1 deletion front/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ The folder structure is as follows:
├── tsconfig.json
├── .prettierignore
├── .dockerignore
├── .eslintignore
├── eslint.config.js
├── .eslintrc
├── .prettierrc
└── .gitignore
Expand Down
2 changes: 1 addition & 1 deletion front/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
"upload:test-report": "./node_modules/.bin/codecov",
"tsc:check": "tsc --noEmit",
"tsc:precommit": "tsc-files --noEmit",
"lint": "eslint --ext ts,tsx --report-unused-disable-directives --max-warnings 0 --ignore-path ../.eslintignore",
"lint": "eslint --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
"lint:all": "pnpm lint .",
"lint:fix": "pnpm lint --fix",
"lint:fix:all": "pnpm lint:fix .",
Expand Down
24 changes: 13 additions & 11 deletions front/src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import "regenerator-runtime/runtime";
import { ReactElement, Suspense, useEffect, useRef, useState } from "react";
import { ReactElement, Suspense, useEffect, useMemo, useRef } from "react";
import { Navigate, Outlet, Route, Routes, useLocation } from "react-router-dom";
import { useLoadAndSetGlobalPreferences } from "hooks/useLoadAndSetGlobalPreferences";
import Layout from "components/Layout";
Expand Down Expand Up @@ -99,27 +99,29 @@ function DropappRedirect({ path }: DropappRedirectProps) {
function App() {
const { error, isInitialized } = useLoadAndSetGlobalPreferences();
const location = useLocation();
const [prevLocation, setPrevLocation] = useState<string | undefined>(undefined);
// For BoxesView to reduce number of expensive Boxes queries
// when navigating between boxes and other views.
const hasExecutedInitialFetchOfBoxes = useRef(false);

// store previous location to return to if you are not authorized
useEffect(() => {
const regex = /^\/bases\/\d+\//;
// only store previous location if a base is selected
if (regex.test(location.pathname)) setPrevLocation(location.pathname);
}, [location]);

if (error) {
return <ErrorView error={error} />;
}
// only store previous location if a base is selected
const prevLocation = useMemo(() => {
if (/^\/bases\/\d+\//.test(location.pathname)) {
return location.pathname;
} else {
return;
}
}, [location.pathname]);

// selectedBaseId not set yet
if (!isInitialized) {
return;
}

if (error && isInitialized) {
return <ErrorView error={error} />;
}

return (
<Routes>
<Route path="bases">
Expand Down
Loading
Loading