refactor(frontend): fix eslint config

This commit is contained in:
Sergey Krylov 2025-09-05 05:19:56 +03:00
parent af0436c655
commit 07367c4897
14 changed files with 63 additions and 48 deletions

View File

@ -1,6 +1,12 @@
import '@testing-library/jest-dom';
import { server } from '@mocks/jest/server';
beforeAll(() => server.listen());
afterEach(() => server.resetHandlers());
afterAll(() => server.close());
beforeAll(() => {
server.listen();
});
afterEach(() => {
server.resetHandlers();
});
afterAll(() => {
server.close();
});

View File

@ -2,6 +2,7 @@ import pluginQuery from '@tanstack/eslint-plugin-query';
// @ts-expect-error fix package
import config from 'eslint-config-ksv741';
// eslint-disable-next-line import/no-anonymous-default-export
export default [
...pluginQuery.configs['flat/recommended'],
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
@ -9,14 +10,24 @@ export default [
{
rules: {
'import/no-extraneous-dependencies': ['error', {
devDependencies: ['eslint.config.ts', 'rsbuild.config.ts', 'configs/**/*'],
devDependencies: [
'eslint.config.ts',
'rsbuild.config.ts',
'configs/**/*',
'**/*.test.js',
'**/*.test.jsx',
'**/*.test.ts',
'**/*.test.tsx',
'**/__tests__/**',
'**/tests/**',
'__mocks__/**',
],
}],
'import/no-anonymous-default-export': 'off',
'import/order': [
'error', {
pathGroups: [
{
pattern: '__spec__/**',
pattern: '__mocks__/**',
group: 'builtin',
position: 'before',
},
@ -71,13 +82,7 @@ export default [
],
'@typescript-eslint/strict-boolean-expressions': 'off',
'@typescript-eslint/no-floating-promises': 'off',
'@typescript-eslint/consistent-return': 'off',
'func-style': 'off',
'@typescript-eslint/no-confusing-void-expression': 'off',
'@typescript-eslint/await-thenable': 'off',
'@typescript-eslint/no-misused-promises': 'off',
'@typescript-eslint/prefer-nullish-coalescing': 'off',
'@typescript-eslint/no-unnecessary-condition': 'off',
'jsx-a11y/click-events-have-key-events': 'off',
'jsx-a11y/no-static-element-interactions': 'off',
'jsx-a11y/no-noninteractive-element-interactions': 'off',
@ -86,23 +91,4 @@ export default [
{
ignores: ['./src/shared/api/schema.ts'],
},
{
files: [
'**/*.test.js',
'**/*.test.jsx',
'**/*.test.ts',
'**/*.test.tsx',
'**/__tests__/**',
'**/tests/**',
'__mocks__/**',
],
rules: {
'import/no-extraneous-dependencies': [
'error',
{ devDependencies: true }, // в тестах можно
],
'@typescript-eslint/no-unsafe-call': 'off',
'@typescript-eslint/no-unsafe-member-access': 'off',
},
},
];

View File

@ -37,8 +37,12 @@ describe('Test AddExpenseItemForm', () => {
});
test.each([
['enabled', {}, (el: HTMLElement) => expect(el).toBeEnabled()],
['disabled', { disabled: true }, (el: HTMLElement) => expect(el).toBeDisabled()],
['enabled', {}, (el: HTMLElement) => {
expect(el).toBeEnabled();
}],
['disabled', { disabled: true }, (el: HTMLElement) => {
expect(el).toBeDisabled();
}],
])('should render fields %s', (_state, options, assertion) => {
const { onSubmit, ...formElems } = renderForm(options);
Object.values(formElems).forEach(assertion);

View File

@ -72,8 +72,12 @@ describe('Test EditExpenseItemForm', () => {
});
test.each([
['enabled', {}, (el: HTMLElement) => expect(el).toBeEnabled()],
['disabled', { disabled: true }, (el: HTMLElement) => expect(el).toBeDisabled()],
['enabled', {}, (el: HTMLElement) => {
expect(el).toBeEnabled();
}],
['disabled', { disabled: true }, (el: HTMLElement) => {
expect(el).toBeDisabled();
}],
])('should render fields %s', (_state, options, assertion) => {
const { onSubmit, ...formElems } = renderForm(options);
Object.values(formElems).forEach(assertion);

View File

@ -36,6 +36,7 @@ const EditExpenseItemForm: FC<EditExpenseItemFormProps> = (props) => {
...formProps
} = props;
// eslint-disable-next-line @typescript-eslint/no-misused-promises
const onFormSubmitHandler: FormEventHandler<HTMLFormElement> = async (event) => {
event.preventDefault();

View File

@ -29,8 +29,12 @@ describe('Test AddExpensesListForm', () => {
});
test.each([
['enabled', {}, (el: HTMLElement) => expect(el).toBeEnabled()],
['disabled', { disabled: true }, (el: HTMLElement) => expect(el).toBeDisabled()],
['enabled', {}, (el: HTMLElement) => {
expect(el).toBeEnabled();
}],
['disabled', { disabled: true }, (el: HTMLElement) => {
expect(el).toBeDisabled();
}],
])('should render fields %s', (_state, options, assertion) => {
const { onSubmit, ...formElems } = renderForm(options);
Object.values(formElems).forEach(assertion);

View File

@ -37,7 +37,7 @@ const AddExpensesListForm: FC<AddExpenseListFormProps> = (props) => {
const title = formData.get('title');
if (typeof title === 'string') {
onSubmit?.({
onSubmit({
title,
});
}

View File

@ -46,14 +46,14 @@ const DeleteExpensesListForm: FC<DeleteExpenseListFormProps> = (props) => {
</p>
{
list?.items && list?.items?.length > 0
list.items && list.items.length > 0
? (
<p>
В нем содержится
{' '}
<b>
{list.items?.length}
{list.items.length}
</b>
{' '}

View File

@ -51,8 +51,12 @@ describe('Test EditExpensesListForm', () => {
});
test.each([
['enabled', {}, (el: HTMLElement) => expect(el).toBeEnabled()],
['disabled', { disabled: true }, (el: HTMLElement) => expect(el).toBeDisabled()],
['enabled', {}, (el: HTMLElement) => {
expect(el).toBeEnabled();
}],
['disabled', { disabled: true }, (el: HTMLElement) => {
expect(el).toBeDisabled();
}],
])('should render fields %s', (_state, options, assertion) => {
const { onSubmit, ...formElems } = renderForm(options);
Object.values(formElems).forEach(assertion);

View File

@ -15,7 +15,9 @@ export const useAddExpenseItemButton = (args: UseAddExpenseItemButtonArgs) => {
const [isOpen, setIsOpen] = useState(false);
const { mutateAsync: addExpenseItemMutation, isPending } = useAddExpenseItem({ id: listId });
const onCloseModalHandler = () => setIsOpen(false);
const onCloseModalHandler = () => {
setIsOpen(false);
};
const onClickHandler: MouseEventHandler<HTMLButtonElement> = (event) => {
setIsOpen(true);

View File

@ -13,7 +13,9 @@ export const useDeleteExpenseItemButton = (args: UseDeleteExpenseItemButtonArgs)
const { item, onClick } = args;
const [isOpen, setIsOpen] = useState(false);
const onCloseModalHandler = () => setIsOpen(false);
const onCloseModalHandler = () => {
setIsOpen(false);
};
const onClickHandler: MouseEventHandler<HTMLButtonElement> = (event) => {
setIsOpen(true);
onClick?.(event);

View File

@ -17,7 +17,9 @@ export const useEditExpenseItemButton = (args: UseAddExpenseItemButtonArgs) => {
id: item.id,
listId: item.expenseListId,
});
const onCloseModalHandler = () => setIsOpen(false);
const onCloseModalHandler = () => {
setIsOpen(false);
};
const onClickHandler: MouseEventHandler<HTMLButtonElement> = (event) => {
setIsOpen(true);

View File

@ -7,7 +7,7 @@ const rootEl = document.getElementById('root');
async function enableMocking() {
if (process.env.PUBLIC_ENABLE_MOCKING !== 'true') {
return;
return false;
}
const { worker } = await import('@mocks/browser/msw');

View File

@ -9,7 +9,7 @@ import classes from './ExpensesTable.module.css';
const ExpensesTable = () => {
const { data: expensesList, isPending, isLoading } = useExpensesList();
if (isPending || isLoading) {
if (isLoading || isPending) {
return (
<span>Loading...</span>
);
@ -49,7 +49,7 @@ const ExpensesTable = () => {
</td>
<td>
{expense.items?.length || 0}
{expense.items?.length ?? 0}
</td>
<td>