From 519d24722e005d5173230f23e2756f82c2f1aa69 Mon Sep 17 00:00:00 2001 From: Boki Date: Mon, 23 Jun 2025 17:07:30 -0400 Subject: [PATCH] fixed lint issues --- .../web-app/src/components/layout/Layout.tsx | 2 +- .../web-app/src/components/layout/Sidebar.tsx | 7 +-- .../components/AddProviderMappingDialog.tsx | 46 +++++++++++-------- .../exchanges/components/ExchangesTable.tsx | 7 ++- .../monitoring/components/ProxyStatsCard.tsx | 2 +- .../src/features/monitoring/types/index.ts | 4 +- .../features/monitoring/utils/formatters.ts | 6 +-- .../src/features/pipeline/PipelinePage.tsx | 14 +++--- .../features/pipeline/services/pipelineApi.ts | 2 +- .../src/features/pipeline/types/index.ts | 6 +-- apps/stock/web-app/src/lib/constants.ts | 2 +- .../src/registrations/service.registration.ts | 2 +- 12 files changed, 54 insertions(+), 46 deletions(-) diff --git a/apps/stock/web-app/src/components/layout/Layout.tsx b/apps/stock/web-app/src/components/layout/Layout.tsx index 5842c50..c20fe04 100644 --- a/apps/stock/web-app/src/components/layout/Layout.tsx +++ b/apps/stock/web-app/src/components/layout/Layout.tsx @@ -10,7 +10,7 @@ export function Layout() { // Determine title from current route const getTitle = () => { const path = location.pathname.replace('/', ''); - if (!path || path === 'dashboard') return 'Dashboard'; + if (!path || path === 'dashboard') {return 'Dashboard';} // Handle nested routes if (path.includes('/')) { diff --git a/apps/stock/web-app/src/components/layout/Sidebar.tsx b/apps/stock/web-app/src/components/layout/Sidebar.tsx index 8289993..e31466e 100644 --- a/apps/stock/web-app/src/components/layout/Sidebar.tsx +++ b/apps/stock/web-app/src/components/layout/Sidebar.tsx @@ -1,4 +1,5 @@ import { navigation } from '@/lib/constants'; +import type { NavigationItem } from '@/lib/constants'; import { cn } from '@/lib/utils'; import { Dialog, Transition } from '@headlessui/react'; import { XMarkIcon, ChevronDownIcon, ChevronRightIcon } from '@heroicons/react/24/outline'; @@ -101,7 +102,7 @@ function SidebarContent() { setExpandedItems(newExpanded); }; - const isChildActive = (children: any[]) => { + const isChildActive = (children: NavigationItem[]) => { return children.some(child => location.pathname === child.href); }; @@ -148,7 +149,7 @@ function SidebarContent() { {item.children.map(child => (
  • cn( isActive @@ -180,7 +181,7 @@ function SidebarContent() { ) : ( cn( isActive diff --git a/apps/stock/web-app/src/features/exchanges/components/AddProviderMappingDialog.tsx b/apps/stock/web-app/src/features/exchanges/components/AddProviderMappingDialog.tsx index 8052875..17b56cd 100644 --- a/apps/stock/web-app/src/features/exchanges/components/AddProviderMappingDialog.tsx +++ b/apps/stock/web-app/src/features/exchanges/components/AddProviderMappingDialog.tsx @@ -8,7 +8,15 @@ interface AddProviderMappingDialogProps { exchangeId: string; exchangeName: string; onClose: () => void; - onCreateMapping: (request: CreateProviderMappingRequest) => Promise; + onCreateMapping: (request: CreateProviderMappingRequest) => Promise; +} + +interface UnmappedExchange { + provider_exchange_code: string; + provider_exchange_name: string; + country_code?: string; + currency?: string; + symbol_count?: number; } export function AddProviderMappingDialog({ @@ -21,29 +29,12 @@ export function AddProviderMappingDialog({ const { fetchProviders, fetchUnmappedProviderExchanges } = useExchanges(); const [providers, setProviders] = useState([]); const [selectedProvider, setSelectedProvider] = useState(''); - const [unmappedExchanges, setUnmappedExchanges] = useState([]); + const [unmappedExchanges, setUnmappedExchanges] = useState([]); const [selectedProviderExchange, setSelectedProviderExchange] = useState(''); const [loading, setLoading] = useState(false); const [providersLoading, setProvidersLoading] = useState(false); const [exchangesLoading, setExchangesLoading] = useState(false); - // Load providers on mount - useEffect(() => { - if (isOpen) { - loadProviders(); - } - }, [isOpen, loadProviders]); - - // Load unmapped exchanges when provider changes - useEffect(() => { - if (selectedProvider) { - loadUnmappedExchanges(selectedProvider); - } else { - setUnmappedExchanges([]); - setSelectedProviderExchange(''); - } - }, [selectedProvider, loadUnmappedExchanges]); - const loadProviders = useCallback(async () => { setProvidersLoading(true); try { @@ -71,6 +62,23 @@ export function AddProviderMappingDialog({ [fetchUnmappedProviderExchanges] ); + // Load providers on mount + useEffect(() => { + if (isOpen) { + loadProviders(); + } + }, [isOpen, loadProviders]); + + // Load unmapped exchanges when provider changes + useEffect(() => { + if (selectedProvider) { + loadUnmappedExchanges(selectedProvider); + } else { + setUnmappedExchanges([]); + setSelectedProviderExchange(''); + } + }, [selectedProvider, loadUnmappedExchanges]); + const handleSubmit = useCallback( async (e: React.FormEvent) => { e.preventDefault(); diff --git a/apps/stock/web-app/src/features/exchanges/components/ExchangesTable.tsx b/apps/stock/web-app/src/features/exchanges/components/ExchangesTable.tsx index 96018b5..8fe0b24 100644 --- a/apps/stock/web-app/src/features/exchanges/components/ExchangesTable.tsx +++ b/apps/stock/web-app/src/features/exchanges/components/ExchangesTable.tsx @@ -1,6 +1,6 @@ import { DataTable } from '@/components/ui'; import { PlusIcon, TrashIcon } from '@heroicons/react/24/outline'; -import type { ColumnDef } from '@tanstack/react-table'; +import type { ColumnDef, Row } from '@tanstack/react-table'; import { useCallback, useMemo, useState } from 'react'; import { useExchanges } from '../hooks/useExchanges'; import type { AddProviderMappingDialogState, DeleteDialogState, EditingCell, Exchange } from '../types'; @@ -70,7 +70,7 @@ export function ExchangesTable() { ); const handleRowExpand = useCallback( - async (_row: any) => { + (_row: Row) => { // Row expansion is now handled automatically by TanStack Table // No need to fetch data since all mappings are already loaded }, @@ -319,7 +319,6 @@ export function ExchangesTable() { handleToggleActive, handleAddProviderMapping, handleDeleteExchange, - handleConfirmDelete, handleRowExpand, ]); @@ -335,7 +334,7 @@ export function ExchangesTable() { ); } - const renderSubComponent = ({ row }: { row: any }) => { + const renderSubComponent = ({ row }: { row: Row }) => { const exchange = row.original as Exchange; const mappings = exchange.provider_mappings || []; diff --git a/apps/stock/web-app/src/features/monitoring/components/ProxyStatsCard.tsx b/apps/stock/web-app/src/features/monitoring/components/ProxyStatsCard.tsx index 2388b08..942e7f9 100644 --- a/apps/stock/web-app/src/features/monitoring/components/ProxyStatsCard.tsx +++ b/apps/stock/web-app/src/features/monitoring/components/ProxyStatsCard.tsx @@ -17,7 +17,7 @@ export function ProxyStatsCard({ stats }: ProxyStatsCardProps) { : 0; const formatDate = (dateString?: string) => { - if (!dateString) return 'Never'; + if (!dateString) {return 'Never';} const date = new Date(dateString); return date.toLocaleString(); }; diff --git a/apps/stock/web-app/src/features/monitoring/types/index.ts b/apps/stock/web-app/src/features/monitoring/types/index.ts index edfcd1a..e22a419 100644 --- a/apps/stock/web-app/src/features/monitoring/types/index.ts +++ b/apps/stock/web-app/src/features/monitoring/types/index.ts @@ -18,7 +18,7 @@ export interface CacheStats { evictedKeys?: number; expiredKeys?: number; }; - info?: Record; + info?: Record; } export interface QueueStats { @@ -57,7 +57,7 @@ export interface DatabaseStats { waiting?: number; max: number; }; - stats?: Record; + stats?: Record; } export interface SystemHealth { diff --git a/apps/stock/web-app/src/features/monitoring/utils/formatters.ts b/apps/stock/web-app/src/features/monitoring/utils/formatters.ts index e666731..a07878a 100644 --- a/apps/stock/web-app/src/features/monitoring/utils/formatters.ts +++ b/apps/stock/web-app/src/features/monitoring/utils/formatters.ts @@ -8,9 +8,9 @@ export function formatUptime(ms: number): string { const hours = Math.floor(minutes / 60); const days = Math.floor(hours / 24); - if (days > 0) return `${days}d ${hours % 24}h`; - if (hours > 0) return `${hours}h ${minutes % 60}m`; - if (minutes > 0) return `${minutes}m ${seconds % 60}s`; + if (days > 0) {return `${days}d ${hours % 24}h`;} + if (hours > 0) {return `${hours}h ${minutes % 60}m`;} + if (minutes > 0) {return `${minutes}m ${seconds % 60}s`;} return `${seconds}s`; } diff --git a/apps/stock/web-app/src/features/pipeline/PipelinePage.tsx b/apps/stock/web-app/src/features/pipeline/PipelinePage.tsx index 1adf1df..bb980c0 100644 --- a/apps/stock/web-app/src/features/pipeline/PipelinePage.tsx +++ b/apps/stock/web-app/src/features/pipeline/PipelinePage.tsx @@ -1,4 +1,4 @@ -import { useState, useEffect } from 'react'; +import { useState, useEffect, useCallback } from 'react'; import { ArrowPathIcon, CircleStackIcon, @@ -7,7 +7,7 @@ import { CheckCircleIcon, } from '@heroicons/react/24/outline'; import { usePipeline } from './hooks/usePipeline'; -import type { PipelineOperation } from './types'; +import type { PipelineOperation, ExchangeStats, ProviderMappingStats, DataClearType } from './types'; const operations: PipelineOperation[] = [ // Symbol operations @@ -93,14 +93,14 @@ export function PipelinePage() { const [selectedProvider, setSelectedProvider] = useState('yahoo'); const [clearFirst, setClearFirst] = useState(false); const [clearDataType, setClearDataType] = useState<'all' | 'exchanges' | 'provider_mappings'>('all'); - const [stats, setStats] = useState<{ exchanges?: any; providerMappings?: any }>({}); + const [stats, setStats] = useState<{ exchanges?: ExchangeStats; providerMappings?: ProviderMappingStats }>({}); // Load stats on mount useEffect(() => { loadStats(); - }, []); + }, [loadStats]); - const loadStats = async () => { + const loadStats = useCallback(async () => { const [exchangeStats, mappingStats] = await Promise.all([ getExchangeStats(), getProviderMappingStats(), @@ -109,7 +109,7 @@ export function PipelinePage() { exchanges: exchangeStats, providerMappings: mappingStats, }); - }; + }, [getExchangeStats, getProviderMappingStats]); const handleOperation = async (op: PipelineOperation) => { switch (op.id) { @@ -368,7 +368,7 @@ export function PipelinePage() {