From 973bf2b9e318e3b321e5faaba7afb547e32b978f Mon Sep 17 00:00:00 2001 From: Aleksandr Kiliushin Date: Sat, 17 Jun 2023 18:48:47 +0400 Subject: [PATCH] style: Ban interfaces in linter --- .eslintrc.js | 60 +++++++------------ cypress/constants/test-users.ts | 4 +- cypress/support/commands.ts | 6 +- cypress/support/component.tsx | 2 +- declarations/mui.d.ts | 2 +- src/components/BreadcrumbsPanel.tsx | 6 +- src/components/DataLayout/index.tsx | 6 +- .../DataLayoutTableContainer.tsx | 8 +-- src/components/DataLayout/types.ts | 7 +-- src/components/Dialog/index.tsx | 6 +- src/components/Dialog/types.ts | 8 +-- src/components/Navbar/helpers.tsx | 4 +- src/components/form-contructor/RadioGroup.tsx | 11 ++-- src/views/auth/Login/form-helpers.ts | 4 +- src/views/auth/Login/index.tsx | 4 +- .../RecordFormDialog/form-helpers.ts | 2 +- .../BoardRecords/RecordFormDialog/index.tsx | 9 +-- .../boards/BoardRecords/RecordTableRow.tsx | 4 +- .../CategoryFormDialog/form-helpers.ts | 2 +- .../CategoryFormDialog/index.tsx | 8 +-- .../boards/BoardSettings/CategoryTableRow.tsx | 4 +- .../boards/BudgetBoardStatistics/index.tsx | 6 +- .../CreateBoardFormDialog/form-helpers.ts | 4 +- .../boards/CreateBoardFormDialog/index.tsx | 4 +- src/views/registration/form-helpers.ts | 4 +- src/views/registration/index.tsx | 4 +- 26 files changed, 86 insertions(+), 103 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 1188e739..9b0a0d08 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -11,7 +11,7 @@ module.exports = { "plugin:react/jsx-runtime", "plugin:react-hooks/recommended", ], - ignorePatterns: ["dist", "node_modules"], + ignorePatterns: ["dist", "node_modules", "src/api"], parser: "@typescript-eslint/parser", parserOptions: { ecmaFeatures: { @@ -25,6 +25,26 @@ module.exports = { plugins: ["react", "@typescript-eslint", "@typescript-eslint/eslint-plugin"], root: true, rules: { + "@typescript-eslint/consistent-type-definitions": ["warn", "type"], + "@typescript-eslint/explicit-function-return-type": 0, + "@typescript-eslint/naming-convention": [ + 1, + { + selector: "typeAlias", + format: ["StrictPascalCase"], + prefix: ["T"], + }, + { + format: ["StrictPascalCase"], + prefix: ["are", "can", "did", "does", "has", "is", "should", "will"], + selector: "variable", + types: ["boolean"], + }, + ], + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-empty-interface": 0, + "@typescript-eslint/no-extra-semi": 1, + "@typescript-eslint/no-unused-vars": 0, "arrow-parens": 1, camelcase: 1, "max-params": ["error", 2], @@ -39,44 +59,6 @@ module.exports = { "no-tabs": 1, "react/jsx-sort-props": ["warn", { ignoreCase: true }], "react/prop-types": 0, - "@typescript-eslint/explicit-function-return-type": 0, - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-empty-interface": 0, - "@typescript-eslint/no-extra-semi": 1, - "@typescript-eslint/no-unused-vars": 0, - "@typescript-eslint/naming-convention": [ - 1, - { - format: ["StrictPascalCase"], - prefix: ["I"], - selector: "interface", - }, - { - format: ["StrictPascalCase"], - prefix: ["are", "can", "did", "does", "has", "is", "should", "will"], - selector: "variable", - types: ["boolean"], - }, - ], - // "sort-keys": [ - // "warn", - // "asc", - // { - // caseSensitive: true, - // minKeys: 2, - // natural: false, - // }, - // ], - // 'sort-imports': [ - // 'error', - // { - // allowSeparatedGroups: true, - // ignoreCase: false, - // ignoreDeclarationSort: false, - // ignoreMemberSort: false, - // memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'], - // }, - // ], }, settings: { react: { diff --git a/cypress/constants/test-users.ts b/cypress/constants/test-users.ts index 13a07ca4..f2658a5a 100644 --- a/cypress/constants/test-users.ts +++ b/cypress/constants/test-users.ts @@ -11,9 +11,9 @@ export const testUsers = { }, } as const -export type ITestUser = typeof testUsers[keyof typeof testUsers] +export type TTestUser = (typeof testUsers)[keyof typeof testUsers] -export const credentialsByTestUserId: Record = { +export const credentialsByTestUserId: Record = { "1": { username: testUsers.johnDoe.username, password: testUsers.johnDoe.password, diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts index 64de29f4..da312a78 100644 --- a/cypress/support/commands.ts +++ b/cypress/support/commands.ts @@ -1,5 +1,5 @@ /// -import { ITestUser, credentialsByTestUserId } from "../constants/test-users" +import { TTestUser, credentialsByTestUserId } from "../constants/test-users" // *********************************************** // This example commands.ts shows you how to @@ -41,9 +41,9 @@ import { ITestUser, credentialsByTestUserId } from "../constants/test-users" declare global { // eslint-disable-next-line @typescript-eslint/no-namespace namespace Cypress { - // eslint-disable-next-line @typescript-eslint/naming-convention + // eslint-disable-next-line @typescript-eslint/consistent-type-definitions interface Chainable { - authorize(testUserId: ITestUser["id"]): Promise + authorize(testUserId: TTestUser["id"]): Promise } } } diff --git a/cypress/support/component.tsx b/cypress/support/component.tsx index a01354f8..0c5e53d1 100644 --- a/cypress/support/component.tsx +++ b/cypress/support/component.tsx @@ -32,7 +32,7 @@ import "./commands" declare global { // eslint-disable-next-line @typescript-eslint/no-namespace namespace Cypress { - // eslint-disable-next-line @typescript-eslint/naming-convention + // eslint-disable-next-line @typescript-eslint/consistent-type-definitions interface Chainable { mount: typeof mount } diff --git a/declarations/mui.d.ts b/declarations/mui.d.ts index cf49ea0f..8c9666bc 100644 --- a/declarations/mui.d.ts +++ b/declarations/mui.d.ts @@ -1,7 +1,7 @@ import BreakpointOverrides from "" declare module "@mui/system" { - // eslint-disable-next-line @typescript-eslint/naming-convention + // eslint-disable-next-line @typescript-eslint/consistent-type-definitions interface BreakpointOverrides { sm: false md: false diff --git a/src/components/BreadcrumbsPanel.tsx b/src/components/BreadcrumbsPanel.tsx index fd9e0317..1be53737 100644 --- a/src/components/BreadcrumbsPanel.tsx +++ b/src/components/BreadcrumbsPanel.tsx @@ -4,7 +4,7 @@ import { Link, useLocation } from "react-router-dom" import { useGetBoardQuery } from "#api/boards" -interface IBreadcrumb { +type TBreadcrumb = { element: ReactNode hrefTemplate: string } @@ -28,7 +28,7 @@ const BoardName: FC = () => { return <>{getBoardResult.data?.board.name} } -const breadcrumbsByPathnamePatterns: { pathnamePatterns: RegExp[]; breadcrumbs: IBreadcrumb[] }[] = [ +const breadcrumbsByPathnamePatterns: { pathnamePatterns: RegExp[]; breadcrumbs: TBreadcrumb[] }[] = [ { pathnamePatterns: [/^\/boards$/, /^\/boards\/create$/], breadcrumbs: [{ element: "Boards", hrefTemplate: "/boards" }], @@ -71,7 +71,7 @@ export const BreadcrumbsPanel: FC = () => { const location = useLocation() const boardId = useBoardId() - const breadcrumbs = useMemo(() => { + const breadcrumbs = useMemo(() => { for (const group of breadcrumbsByPathnamePatterns) { const doesPathnameMatchGroupPathnamePatterns = group.pathnamePatterns.some((pathnamePattern) => { return pathnamePattern.test(location.pathname) diff --git a/src/components/DataLayout/index.tsx b/src/components/DataLayout/index.tsx index a317e94d..c033fd7e 100644 --- a/src/components/DataLayout/index.tsx +++ b/src/components/DataLayout/index.tsx @@ -5,7 +5,7 @@ import { getChildByDisplayName } from "#utils/getChildByDisplayName" import { DataLayoutControls } from "./subcomponents/DataLayoutControls" import { DataLayoutHeading } from "./subcomponents/DataLayoutHeading" import { DataLayoutTableContainer } from "./subcomponents/DataLayoutTableContainer" -import { IDataLayoutWithSubcomponents, IDataLayoutWithoutSubcomponents } from "./types" +import { TDataLayoutWithSubcomponents, TDataLayoutWithoutSubcomponents } from "./types" const Header = styled("div")({ display: "flex", @@ -15,7 +15,7 @@ const Header = styled("div")({ rowGap: "8px", }) -const _DataLayout: IDataLayoutWithoutSubcomponents = ({ children }) => { +const _DataLayout: TDataLayoutWithoutSubcomponents = ({ children }) => { const table = getChildByDisplayName({ children, displayName: "DataLayoutTableContainer" }) const controls = getChildByDisplayName({ children, displayName: "DataLayoutControls" }) const heading = getChildByDisplayName({ children, displayName: "DataLayoutHeading" }) @@ -35,6 +35,6 @@ _DataLayout.Controls = DataLayoutControls _DataLayout.Heading = DataLayoutHeading _DataLayout.TableContainer = DataLayoutTableContainer -const DataLayout = _DataLayout as IDataLayoutWithSubcomponents +const DataLayout = _DataLayout as TDataLayoutWithSubcomponents export { DataLayout } diff --git a/src/components/DataLayout/subcomponents/DataLayoutTableContainer.tsx b/src/components/DataLayout/subcomponents/DataLayoutTableContainer.tsx index 0f681cfe..c7c5c363 100644 --- a/src/components/DataLayout/subcomponents/DataLayoutTableContainer.tsx +++ b/src/components/DataLayout/subcomponents/DataLayoutTableContainer.tsx @@ -1,18 +1,18 @@ import { TableContainer } from "@mui/material" import { FC, PropsWithChildren, createContext } from "react" -interface IDataLayoutTableContainerContext { +type TDataLayoutTableContainerContext = { columnsAmount: number } -export const DateLayoutTableContainerContext = createContext({ +export const DateLayoutTableContainerContext = createContext({ columnsAmount: 0, }) -interface IDataLayoutTableProps { +type TDataLayoutTableProps = { columnsWidths: string[] } -const DataLayoutTableContainer: FC> = ({ children, columnsWidths }) => { +const DataLayoutTableContainer: FC> = ({ children, columnsWidths }) => { const columnWidthByCellSelector: Record = {} columnsWidths.forEach((columnWidth, columnWidthIndex) => { columnWidthByCellSelector[`& td:nth-of-type(${columnWidthIndex + 1})`] = { width: columnWidth } diff --git a/src/components/DataLayout/types.ts b/src/components/DataLayout/types.ts index d6ef7110..d6fde09c 100644 --- a/src/components/DataLayout/types.ts +++ b/src/components/DataLayout/types.ts @@ -4,16 +4,15 @@ import { DataLayoutControls } from "./subcomponents/DataLayoutControls" import { DataLayoutHeading } from "./subcomponents/DataLayoutHeading" import { DataLayoutTableContainer } from "./subcomponents/DataLayoutTableContainer" -export interface IDataLayoutProps {} -type IDataLayoutComponent = FC> +type TDataLayoutComponent = FC -export interface IDataLayoutWithoutSubcomponents extends IDataLayoutComponent { +export type TDataLayoutWithoutSubcomponents = TDataLayoutComponent & { Controls?: typeof DataLayoutControls Heading?: typeof DataLayoutHeading TableContainer?: typeof DataLayoutTableContainer } -export interface IDataLayoutWithSubcomponents extends IDataLayoutComponent { +export type TDataLayoutWithSubcomponents = TDataLayoutComponent & { Controls: typeof DataLayoutControls Heading: typeof DataLayoutHeading TableContainer: typeof DataLayoutTableContainer diff --git a/src/components/Dialog/index.tsx b/src/components/Dialog/index.tsx index 1c6c8f96..b6041b14 100644 --- a/src/components/Dialog/index.tsx +++ b/src/components/Dialog/index.tsx @@ -7,7 +7,7 @@ import { getChildByDisplayName } from "#utils/getChildByDisplayName" import { DialogBody } from "./subcomponents/DialogBody" import { DialogFooter } from "./subcomponents/DialogFooter" import { DialogHeader } from "./subcomponents/DialogHeader" -import { IDialogWithSubcomponents, IDialogWithoutSubcomponents } from "./types" +import { TDialogWithSubcomponents, TDialogWithoutSubcomponents } from "./types" const DialogWindow = styled("div")(({ theme }) => ({ backgroundColor: theme.palette.background.default, @@ -31,7 +31,7 @@ const HeaderWithCloseButton = styled("div")({ gridTemplateColumns: "auto min-content", }) -const _Dialog: IDialogWithoutSubcomponents = ({ children, closeDialog, closeDialogHref }) => { +const _Dialog: TDialogWithoutSubcomponents = ({ children, closeDialog, closeDialogHref }) => { const navigate = useNavigate() const header = getChildByDisplayName({ children, displayName: "DialogHeader" }) @@ -84,6 +84,6 @@ _Dialog.Body = DialogBody _Dialog.Footer = DialogFooter _Dialog.Header = DialogHeader -const Dialog = _Dialog as IDialogWithSubcomponents +const Dialog = _Dialog as TDialogWithSubcomponents export { Dialog } diff --git a/src/components/Dialog/types.ts b/src/components/Dialog/types.ts index 45091730..95008100 100644 --- a/src/components/Dialog/types.ts +++ b/src/components/Dialog/types.ts @@ -4,19 +4,19 @@ import { DialogBody } from "./subcomponents/DialogBody" import { DialogFooter } from "./subcomponents/DialogFooter" import { DialogHeader } from "./subcomponents/DialogHeader" -export interface IDialogProps { +export type TDialogProps = { closeDialog?: () => void closeDialogHref?: string } -type IDialogComponent = FC> +type TDialogComponent = FC> -export interface IDialogWithoutSubcomponents extends IDialogComponent { +export type TDialogWithoutSubcomponents = TDialogComponent & { Header?: typeof DialogHeader Body?: typeof DialogBody Footer?: typeof DialogFooter } -export interface IDialogWithSubcomponents extends IDialogComponent { +export type TDialogWithSubcomponents = TDialogComponent & { Header: typeof DialogHeader Body: typeof DialogBody Footer: typeof DialogFooter diff --git a/src/components/Navbar/helpers.tsx b/src/components/Navbar/helpers.tsx index 4e78b317..43454a9b 100644 --- a/src/components/Navbar/helpers.tsx +++ b/src/components/Navbar/helpers.tsx @@ -1,12 +1,12 @@ import { Dashboard as DashboardIcon, Person as PersonIcon } from "@mui/icons-material" -interface ISection { +type TSection = { icon: React.ReactElement id: string path: string } -export const section: ISection[] = [ +export const section: TSection[] = [ { icon: , id: "boards", path: "/boards" }, { icon: , id: "auth", path: "/auth" }, ] diff --git a/src/components/form-contructor/RadioGroup.tsx b/src/components/form-contructor/RadioGroup.tsx index 4123adf9..8a013938 100644 --- a/src/components/form-contructor/RadioGroup.tsx +++ b/src/components/form-contructor/RadioGroup.tsx @@ -6,23 +6,24 @@ import { RadioGroup as MuiRadioGroup, Radio, } from "@mui/material" +import { FC } from "react" import { UseFormRegister } from "react-hook-form" -interface IRadioGroupOption { +type TRadioGroupOption = { label: string value: number | string } -interface IRadioGroupProps { - fieldValue: IRadioGroupOption["value"] +type TRadioGroupProps = { + fieldValue: TRadioGroupOption["value"] helperText: string | undefined label: string name: string - options: IRadioGroupOption[] + options: TRadioGroupOption[] register: UseFormRegister // eslint-disable-line @typescript-eslint/no-explicit-any setValue(fieldName: string, newValue: string | number): void } -export const RadioGroup: React.FC = ({ +export const RadioGroup: FC = ({ fieldValue, helperText, label, diff --git a/src/views/auth/Login/form-helpers.ts b/src/views/auth/Login/form-helpers.ts index 1098a242..0e1a0702 100644 --- a/src/views/auth/Login/form-helpers.ts +++ b/src/views/auth/Login/form-helpers.ts @@ -12,9 +12,9 @@ export const validationSchema = yup }) .required() -export const defaultValues: FormValues = { +export const defaultValues: TFormValues = { password: "", username: "", } -export type FormValues = yup.InferType +export type TFormValues = yup.InferType diff --git a/src/views/auth/Login/index.tsx b/src/views/auth/Login/index.tsx index 6f45db2e..2fada3fd 100644 --- a/src/views/auth/Login/index.tsx +++ b/src/views/auth/Login/index.tsx @@ -10,7 +10,7 @@ import { RowGroup } from "#components/RowGroup" import { apolloClient } from "#utils/apolloClient" import { Container } from "../components" -import { FieldName, FormValues, defaultValues, validationSchema } from "./form-helpers" +import { FieldName, TFormValues, defaultValues, validationSchema } from "./form-helpers" export const Login: FC = () => { const navigate = useNavigate() @@ -21,7 +21,7 @@ export const Login: FC = () => { handleSubmit, register, setError, - } = useForm({ + } = useForm({ defaultValues, mode: "onChange", resolver: yupResolver(validationSchema), diff --git a/src/views/boards/BoardRecords/RecordFormDialog/form-helpers.ts b/src/views/boards/BoardRecords/RecordFormDialog/form-helpers.ts index 42465b30..422dfae5 100644 --- a/src/views/boards/BoardRecords/RecordFormDialog/form-helpers.ts +++ b/src/views/boards/BoardRecords/RecordFormDialog/form-helpers.ts @@ -10,7 +10,7 @@ export enum FieldName { Date = "date", } -export interface IFormValues { +export type TFormValues = { [FieldName.Amount]: BudgetRecord["amount"] | null [FieldName.CategoryId]: BudgetRecord["category"]["id"] | null [FieldName.Comment]: BudgetRecord["comment"] diff --git a/src/views/boards/BoardRecords/RecordFormDialog/index.tsx b/src/views/boards/BoardRecords/RecordFormDialog/index.tsx index 85950ef7..bd165411 100644 --- a/src/views/boards/BoardRecords/RecordFormDialog/index.tsx +++ b/src/views/boards/BoardRecords/RecordFormDialog/index.tsx @@ -1,6 +1,7 @@ import { yupResolver } from "@hookform/resolvers/yup" import { Box, Button, FormControl, InputLabel, MenuItem, Select, TextField, Typography } from "@mui/material" import { format as formatDate } from "date-fns" +import { FC } from "react" import { useForm } from "react-hook-form" import { Link, useNavigate, useParams } from "react-router-dom" @@ -18,14 +19,14 @@ import { Dialog } from "#components/Dialog" import { RowGroup } from "#components/RowGroup" import { theme } from "#styles/theme" -import { FieldName, IFormValues, validationSchema } from "./form-helpers" +import { FieldName, TFormValues, validationSchema } from "./form-helpers" const budgetCategoryIndicatorColorByBudgetCategoryType = new Map([ [1, theme.palette.error.main], [2, theme.palette.success.main], ]) -interface IRecordFormDialogProps { +type TRecordFormDialogProps = { record: | { author: Pick @@ -45,7 +46,7 @@ interface IRecordFormDialogProps { | undefined } -export const RecordFormDialog: React.FC = ({ record }) => { +export const RecordFormDialog: FC = ({ record }) => { const params = useParams<{ boardId: string }>() const navigate = useNavigate() @@ -71,7 +72,7 @@ export const RecordFormDialog: React.FC = ({ record }) = date: formatDate(new Date(), "yyyy-MM-dd"), } - const { formState, handleSubmit, register } = useForm({ + const { formState, handleSubmit, register } = useForm({ defaultValues, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore TODO: Migrate to zod. diff --git a/src/views/boards/BoardRecords/RecordTableRow.tsx b/src/views/boards/BoardRecords/RecordTableRow.tsx index 2b58dfe5..95dab8b6 100644 --- a/src/views/boards/BoardRecords/RecordTableRow.tsx +++ b/src/views/boards/BoardRecords/RecordTableRow.tsx @@ -24,7 +24,7 @@ const amountColorByBudgetCategoryType = new Map([ [2, theme.palette.success.main], ]) -interface IRecordTableRowProps { +type TRecordTableRowProps = { isTrash: boolean record: { author: Pick @@ -43,7 +43,7 @@ interface IRecordTableRowProps { } } -export const RecordTableRow: FC = ({ isTrash, record }) => { +export const RecordTableRow: FC = ({ isTrash, record }) => { const location = useLocation() const params = useParams<{ boardId: string; recordId: string }>() diff --git a/src/views/boards/BoardSettings/CategoryFormDialog/form-helpers.ts b/src/views/boards/BoardSettings/CategoryFormDialog/form-helpers.ts index 5d0128d8..e2eb8ca3 100644 --- a/src/views/boards/BoardSettings/CategoryFormDialog/form-helpers.ts +++ b/src/views/boards/BoardSettings/CategoryFormDialog/form-helpers.ts @@ -12,4 +12,4 @@ export const validationSchema = yup }) .required() -export type FormValues = yup.InferType +export type TFormValues = yup.InferType diff --git a/src/views/boards/BoardSettings/CategoryFormDialog/index.tsx b/src/views/boards/BoardSettings/CategoryFormDialog/index.tsx index 40ce816d..f5508e85 100644 --- a/src/views/boards/BoardSettings/CategoryFormDialog/index.tsx +++ b/src/views/boards/BoardSettings/CategoryFormDialog/index.tsx @@ -15,13 +15,13 @@ import { Dialog } from "#components/Dialog" import { RowGroup } from "#components/RowGroup" import { RadioGroup } from "#components/form-contructor/RadioGroup" -import { FieldName, FormValues, validationSchema } from "./form-helpers" +import { FieldName, TFormValues, validationSchema } from "./form-helpers" -interface ICategoryFormDialogProps { +type TCategoryFormDialogProps = { category: Pick | undefined } -export const CategoryFormDialog: FC = ({ category }) => { +export const CategoryFormDialog: FC = ({ category }) => { const navigate = useNavigate() const params = useParams<{ boardId: string }>() @@ -36,7 +36,7 @@ export const CategoryFormDialog: FC = ({ category }) = setError, setValue, watch, - } = useForm({ + } = useForm({ defaultValues, mode: "onChange", resolver: yupResolver(validationSchema), diff --git a/src/views/boards/BoardSettings/CategoryTableRow.tsx b/src/views/boards/BoardSettings/CategoryTableRow.tsx index 98cdf9b1..d88bd8f7 100644 --- a/src/views/boards/BoardSettings/CategoryTableRow.tsx +++ b/src/views/boards/BoardSettings/CategoryTableRow.tsx @@ -8,11 +8,11 @@ import { BudgetCategory } from "#api/types" import { CategoryDeletionDialog } from "./CategoryDeletionDialog" import { CategoryFormDialog } from "./CategoryFormDialog" -interface ICategoryTableRowProps { +type TCategoryTableRowProps = { category: Pick } -export const CategoryTableRow: FC = ({ category }) => { +export const CategoryTableRow: FC = ({ category }) => { const params = useParams<{ boardId: string }>() const location = useLocation() diff --git a/src/views/boards/BudgetBoardStatistics/index.tsx b/src/views/boards/BudgetBoardStatistics/index.tsx index 95e535da..cfe1c074 100644 --- a/src/views/boards/BudgetBoardStatistics/index.tsx +++ b/src/views/boards/BudgetBoardStatistics/index.tsx @@ -7,7 +7,7 @@ import { useGetBudgetRecordsQuery } from "#api/budget" import { useGetCurrenciesQuery } from "#api/currencies" import { Currency } from "#api/types" -interface IDateData { +type TDateData = { date: string sumByCurrencySlug: Record } @@ -49,7 +49,7 @@ export const BudgetBoardStatistics: FC = () => { }) }, [currencies]) - const chartBuildingData = useMemo(() => { + const chartBuildingData = useMemo(() => { if (records === undefined) return [] if (currencies === undefined) return [] if (Object.entries(usdRates).length === 0) return [] @@ -58,7 +58,7 @@ export const BudgetBoardStatistics: FC = () => { const endDate = new Date() let date = firstDate - const result: IDateData[] = [] + const result: TDateData[] = [] while (!isAfter(date, endDate)) { result.push({ date: formatDate(date, "yyyy-MM-dd"), diff --git a/src/views/boards/CreateBoardFormDialog/form-helpers.ts b/src/views/boards/CreateBoardFormDialog/form-helpers.ts index a15c33ef..e701476d 100644 --- a/src/views/boards/CreateBoardFormDialog/form-helpers.ts +++ b/src/views/boards/CreateBoardFormDialog/form-helpers.ts @@ -7,7 +7,7 @@ export enum FieldName { Name = "name", } -export interface IFormValues { +export type TFormValues = { [FieldName.DefaultCurrencySlug]: Currency["slug"] | null [FieldName.Name]: Board["name"] } @@ -17,7 +17,7 @@ export const validationSchema = Yup.object({ [FieldName.Name]: Yup.string().required(), }) -export const defaultValues: IFormValues = { +export const defaultValues: TFormValues = { [FieldName.DefaultCurrencySlug]: null, [FieldName.Name]: "", } diff --git a/src/views/boards/CreateBoardFormDialog/index.tsx b/src/views/boards/CreateBoardFormDialog/index.tsx index 9da53914..5a02cc0a 100644 --- a/src/views/boards/CreateBoardFormDialog/index.tsx +++ b/src/views/boards/CreateBoardFormDialog/index.tsx @@ -9,12 +9,12 @@ import { useGetCurrenciesQuery } from "#api/currencies" import { Dialog } from "#components/Dialog" import { RowGroup } from "#components/RowGroup" -import { FieldName, IFormValues, defaultValues, validationSchema } from "./form-helpers" +import { FieldName, TFormValues, defaultValues, validationSchema } from "./form-helpers" export const CreateBoardFormDialog: FC = () => { const navigate = useNavigate() - const { formState, handleSubmit, register, setError } = useForm({ + const { formState, handleSubmit, register, setError } = useForm({ defaultValues, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore TODO: Migrate to zod. diff --git a/src/views/registration/form-helpers.ts b/src/views/registration/form-helpers.ts index 3113a370..5add17f5 100644 --- a/src/views/registration/form-helpers.ts +++ b/src/views/registration/form-helpers.ts @@ -14,10 +14,10 @@ export const validationSchema = yup }) .required() -export const defaultValues: FormValues = { +export const defaultValues: TFormValues = { password: "", passwordConfirmation: "", username: "", } -export type FormValues = yup.InferType +export type TFormValues = yup.InferType diff --git a/src/views/registration/index.tsx b/src/views/registration/index.tsx index 0ce007c3..fd5394e0 100644 --- a/src/views/registration/index.tsx +++ b/src/views/registration/index.tsx @@ -8,7 +8,7 @@ import { useCreateUserMutation } from "#api/users" import { RowGroup } from "#components/RowGroup" import { Container } from "../auth/components" -import { FieldName, FormValues, defaultValues, validationSchema } from "./form-helpers" +import { FieldName, TFormValues, defaultValues, validationSchema } from "./form-helpers" export const Registration: FC = () => { const navigate = useNavigate() @@ -19,7 +19,7 @@ export const Registration: FC = () => { handleSubmit, register, setError, - } = useForm({ + } = useForm({ defaultValues, mode: "onChange", resolver: yupResolver(validationSchema),