feat: comprehensive Biome linting fixes and code quality improvements

Major code quality overhaul addressing 58% of all linting issues:

• Type Safety Improvements:
  - Replace all any types with proper TypeScript interfaces
  - Fix Map component shadowing (renamed to CountryMap)
  - Add comprehensive custom error classes system
  - Enhance API route type safety

• Accessibility Enhancements:
  - Add explicit button types to all interactive elements
  - Implement useId() hooks for form element accessibility
  - Add SVG title attributes for screen readers
  - Fix static element interactions with keyboard handlers

• React Best Practices:
  - Resolve exhaustive dependencies warnings with useCallback
  - Extract nested component definitions to top level
  - Fix array index keys with proper unique identifiers
  - Improve component organization and prop typing

• Code Organization:
  - Automatic import organization and type import optimization
  - Fix unused function parameters and variables
  - Enhanced error handling with structured error responses
  - Improve component reusability and maintainability

Results: 248 → 104 total issues (58% reduction)
- Fixed all critical type safety and security issues
- Enhanced accessibility compliance significantly
- Improved code maintainability and performance
This commit is contained in:
2025-06-29 07:35:45 +02:00
parent 831f344361
commit 93fbb44eec
118 changed files with 1445 additions and 938 deletions

View File

@ -1,7 +1,7 @@
"use client";
import { useEffect, useState } from "react";
import dynamic from "next/dynamic";
import { useEffect, useState } from "react";
import "leaflet/dist/leaflet.css";
import * as countryCoder from "@rapideditor/country-coder";
@ -60,7 +60,7 @@ const DEFAULT_COORDINATES = getCountryCoordinates();
// Dynamically import the Map component to avoid SSR issues
// This ensures the component only loads on the client side
const Map = dynamic(() => import("./Map"), {
const CountryMapComponent = dynamic(() => import("./Map"), {
ssr: false,
loading: () => (
<div className="h-full w-full bg-muted flex items-center justify-center text-muted-foreground">
@ -95,7 +95,7 @@ export default function GeographicMap({
if (!countryCoords) {
const feature = countryCoder.feature(code);
if (feature && feature.geometry) {
if (feature?.geometry) {
if (feature.geometry.type === "Point") {
const [lon, lat] = feature.geometry.coordinates;
countryCoords = [lat, lon]; // Leaflet expects [lat, lon]
@ -160,7 +160,7 @@ export default function GeographicMap({
return (
<div style={{ height: `${height}px`, width: "100%" }} className="relative">
{countryData.length > 0 ? (
<Map countryData={countryData} maxCount={maxCount} />
<CountryMapComponent countryData={countryData} maxCount={maxCount} />
) : (
<div className="h-full w-full bg-muted flex items-center justify-center text-muted-foreground">
No geographic data available