linter issues
All checks were successful
Lint / Lint and Typecheck (push) Successful in 41s

This commit is contained in:
2025-11-15 18:18:15 +01:00
parent 6b7e254014
commit 431e654154
4 changed files with 50 additions and 32 deletions

View File

@@ -1,5 +1,6 @@
"use client"; "use client";
import { useState, useEffect } from "react"; import { useState, useEffect } from "react";
import type React from "react";
import { import {
type LucideIcon, type LucideIcon,
HandCoins, HandCoins,
@@ -112,14 +113,15 @@ export default function MultiIconPattern({ opacity = 0.2, spacing = 160 }) {
Target, Target,
]; ];
const renderIcons = ({ const [icons, setIcons] = useState<React.ReactElement[]>([]);
rows,
columns, useEffect(() => {
}: { if (rows === 0 || columns === 0) {
rows: number; setIcons([]);
columns: number; return;
}) => { }
const icons = [];
const iconElements: React.ReactElement[] = [];
for (let y = 0; y < rows; y++) { for (let y = 0; y < rows; y++) {
for (let x = 0; x < columns; x++) { for (let x = 0; x < columns; x++) {
// Pick a random icon component from the array // Pick a random icon component from the array
@@ -130,28 +132,30 @@ export default function MultiIconPattern({ opacity = 0.2, spacing = 160 }) {
const size = 28 + Math.floor(Math.random() * 8); const size = 28 + Math.floor(Math.random() * 8);
const xOffset = Math.floor(Math.random() * (spacing / 1.618)); const xOffset = Math.floor(Math.random() * (spacing / 1.618));
const yOffset = Math.floor(Math.random() * (spacing / 1.618)); const yOffset = Math.floor(Math.random() * (spacing / 1.618));
const rotation = Math.round((Math.random() - 0.5) * 30);
icons.push( iconElements.push(
<IconComponent <IconComponent
key={`icon-${x}-${y}`} key={`icon-${String(x)}-${String(y)}`}
size={size} size={size}
className="text-primary fixed" className="text-primary fixed"
style={{ style={{
left: `${x * spacing + xOffset}px`, left: `${String(x * spacing + xOffset)}px`,
top: `${y * spacing + yOffset}px`, top: `${String(y * spacing + yOffset)}px`,
opacity: opacity, opacity: opacity,
transform: `rotate(${Math.round((Math.random() - 0.5) * 30)}deg)`, transform: `rotate(${String(rotation)}deg)`,
}} }}
/>, />,
); );
} }
} }
return icons; setIcons(iconElements);
}; // eslint-disable-next-line react-hooks/exhaustive-deps
}, [rows, columns, spacing, opacity]);
return ( return (
<div className="absolute h-full w-full"> <div className="absolute h-full w-full">
{width > 0 && renderIcons({ rows, columns })} {width > 0 && icons}
</div> </div>
); );
} }

View File

@@ -216,7 +216,7 @@ export default function FireCalculatorForm() {
return [0, 0]; return [0, 0];
})(); })();
if (retirementIndex === -1 || !retirementData) { if (retirementIndex === -1) {
setResult({ setResult({
fireNumber: null, fireNumber: null,
fireNumber4percent: null, fireNumber4percent: null,
@@ -246,7 +246,13 @@ export default function FireCalculatorForm() {
</CardHeader> </CardHeader>
<CardContent> <CardContent>
<Form {...form}> <Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)} className="space-y-8"> <form
onSubmit={(e) => {
e.preventDefault();
void form.handleSubmit(onSubmit)(e);
}}
className="space-y-8"
>
<div className="grid grid-cols-1 gap-6 md:grid-cols-2"> <div className="grid grid-cols-1 gap-6 md:grid-cols-2">
<FormField <FormField
control={form.control} control={form.control}
@@ -265,7 +271,8 @@ export default function FireCalculatorForm() {
? undefined ? undefined
: Number(e.target.value), : Number(e.target.value),
); );
void form.handleSubmit(onSubmit)(); // eslint-disable-next-line @typescript-eslint/no-floating-promises
form.handleSubmit(onSubmit)();
}} }}
onBlur={field.onBlur} onBlur={field.onBlur}
name={field.name} name={field.name}
@@ -293,7 +300,8 @@ export default function FireCalculatorForm() {
? undefined ? undefined
: Number(e.target.value), : Number(e.target.value),
); );
void form.handleSubmit(onSubmit)(); // eslint-disable-next-line @typescript-eslint/no-floating-promises
form.handleSubmit(onSubmit)();
}} }}
onBlur={field.onBlur} onBlur={field.onBlur}
name={field.name} name={field.name}
@@ -321,7 +329,8 @@ export default function FireCalculatorForm() {
? undefined ? undefined
: Number(e.target.value), : Number(e.target.value),
); );
void form.handleSubmit(onSubmit)(); // eslint-disable-next-line @typescript-eslint/no-floating-promises
form.handleSubmit(onSubmit)();
}} }}
onBlur={field.onBlur} onBlur={field.onBlur}
name={field.name} name={field.name}
@@ -349,7 +358,8 @@ export default function FireCalculatorForm() {
? undefined ? undefined
: Number(e.target.value), : Number(e.target.value),
); );
void form.handleSubmit(onSubmit)(); // eslint-disable-next-line @typescript-eslint/no-floating-promises
form.handleSubmit(onSubmit)();
}} }}
onBlur={field.onBlur} onBlur={field.onBlur}
name={field.name} name={field.name}
@@ -378,7 +388,8 @@ export default function FireCalculatorForm() {
? undefined ? undefined
: Number(e.target.value), : Number(e.target.value),
); );
void form.handleSubmit(onSubmit)(); // eslint-disable-next-line @typescript-eslint/no-floating-promises
form.handleSubmit(onSubmit)();
}} }}
onBlur={field.onBlur} onBlur={field.onBlur}
name={field.name} name={field.name}
@@ -407,7 +418,8 @@ export default function FireCalculatorForm() {
? undefined ? undefined
: Number(e.target.value), : Number(e.target.value),
); );
void form.handleSubmit(onSubmit)(); // eslint-disable-next-line @typescript-eslint/no-floating-promises
form.handleSubmit(onSubmit)();
}} }}
onBlur={field.onBlur} onBlur={field.onBlur}
name={field.name} name={field.name}
@@ -437,7 +449,8 @@ export default function FireCalculatorForm() {
? undefined ? undefined
: Number(e.target.value), : Number(e.target.value),
); );
void form.handleSubmit(onSubmit)(); // eslint-disable-next-line @typescript-eslint/no-floating-promises
form.handleSubmit(onSubmit)();
}} }}
onBlur={field.onBlur} onBlur={field.onBlur}
name={field.name} name={field.name}
@@ -467,7 +480,8 @@ export default function FireCalculatorForm() {
step={1} step={1}
onValueChange={(value: number[]) => { onValueChange={(value: number[]) => {
field.onChange(value[0]); field.onChange(value[0]);
void form.handleSubmit(onSubmit)(); // eslint-disable-next-line @typescript-eslint/no-floating-promises
form.handleSubmit(onSubmit)();
}} }}
className="py-4" className="py-4"
/> />

View File

@@ -135,12 +135,12 @@ function ChartTooltipContent({
return null; return null;
} }
const [item] = payload; const item = payload[0];
const key = `${labelKey ?? item?.dataKey ?? item?.name ?? "value"}`; const key = labelKey ?? String(item.dataKey ?? item.name ?? "value");
const itemConfig = getPayloadConfigFromPayload(config, item, key); const itemConfig = getPayloadConfigFromPayload(config, item, key);
const value = const value =
!labelKey && typeof label === "string" !labelKey && typeof label === "string"
? (config[label]?.label ?? label) ? (label in config && config[label].label ? config[label].label : undefined) ?? label
: itemConfig?.label; : itemConfig?.label;
if (labelFormatter) { if (labelFormatter) {
@@ -182,7 +182,7 @@ function ChartTooltipContent({
{!nestLabel ? tooltipLabel : null} {!nestLabel ? tooltipLabel : null}
<div className="grid gap-1.5"> <div className="grid gap-1.5">
{payload.map((item, index) => { {payload.map((item, index) => {
const key = `${nameKey ?? item.name ?? item.dataKey ?? "value"}`; const key = nameKey ?? String(item.name ?? item.dataKey ?? "value");
const itemConfig = getPayloadConfigFromPayload(config, item, key); const itemConfig = getPayloadConfigFromPayload(config, item, key);
const indicatorColor: string | undefined = const indicatorColor: string | undefined =
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
@@ -196,7 +196,7 @@ function ChartTooltipContent({
indicator === "dot" && "items-center", indicator === "dot" && "items-center",
)} )}
> >
{formatter && item?.value !== undefined && item.name ? ( {formatter && item.value !== undefined && item.name ? (
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
formatter(item.value, item.name, item, index, item.payload) formatter(item.value, item.name, item, index, item.payload)
) : ( ) : (

View File

@@ -134,7 +134,7 @@ function FormDescription({ className, ...props }: React.ComponentProps<"p">) {
function FormMessage({ className, ...props }: React.ComponentProps<"p">) { function FormMessage({ className, ...props }: React.ComponentProps<"p">) {
const { error, formMessageId } = useFormField(); const { error, formMessageId } = useFormField();
const body = error ? String(error?.message ?? "") : props.children; const body = error ? (error.message ?? "") : props.children;
if (!body) { if (!body) {
return null; return null;