From eab6b42ac61eb680e9ce4e89865d9c83dbcf3f69 Mon Sep 17 00:00:00 2001 From: KavyapriyaJG Date: Sat, 12 Apr 2025 02:10:37 +0530 Subject: [PATCH] Fix - Lint warnings and errors in client Lint issues fixed: 1. Removed unused error variable in catch block 2. Changed 'ActionTypes' type to enum 3. Removed unnecessary interface extensions 4. Removed unused export component 5. Added the missing dependencies to useMemo 6. Fixed the inline function issue by changing it to useMemo --- client/src/components/ui/button.tsx | 2 +- client/src/components/ui/input.tsx | 3 +- client/src/components/ui/textarea.tsx | 3 +- client/src/hooks/use-toast.ts | 42 +++++++++++----------- client/src/lib/hooks/useCompletionState.ts | 19 +++++----- client/src/lib/useTheme.ts | 5 ++- 6 files changed, 38 insertions(+), 36 deletions(-) diff --git a/client/src/components/ui/button.tsx b/client/src/components/ui/button.tsx index 084150ef..8e435c3c 100644 --- a/client/src/components/ui/button.tsx +++ b/client/src/components/ui/button.tsx @@ -54,4 +54,4 @@ const Button = React.forwardRef( ); Button.displayName = "Button"; -export { Button, buttonVariants }; +export { Button }; diff --git a/client/src/components/ui/input.tsx b/client/src/components/ui/input.tsx index ef29a4ac..2fd00540 100644 --- a/client/src/components/ui/input.tsx +++ b/client/src/components/ui/input.tsx @@ -2,8 +2,7 @@ import * as React from "react"; import { cn } from "@/lib/utils"; -export interface InputProps - extends React.InputHTMLAttributes {} +export type InputProps = React.InputHTMLAttributes; const Input = React.forwardRef( ({ className, type, ...props }, ref) => { diff --git a/client/src/components/ui/textarea.tsx b/client/src/components/ui/textarea.tsx index 0e546bbf..a0662826 100644 --- a/client/src/components/ui/textarea.tsx +++ b/client/src/components/ui/textarea.tsx @@ -2,8 +2,7 @@ import * as React from "react"; import { cn } from "@/lib/utils"; -export interface TextareaProps - extends React.TextareaHTMLAttributes {} +export type TextareaProps = React.TextareaHTMLAttributes; const Textarea = React.forwardRef( ({ className, ...props }, ref) => { diff --git a/client/src/hooks/use-toast.ts b/client/src/hooks/use-toast.ts index 6555e795..b7056554 100644 --- a/client/src/hooks/use-toast.ts +++ b/client/src/hooks/use-toast.ts @@ -15,13 +15,6 @@ type ToasterToast = ToastProps & { action?: ToastActionElement; }; -const actionTypes = { - ADD_TOAST: "ADD_TOAST", - UPDATE_TOAST: "UPDATE_TOAST", - DISMISS_TOAST: "DISMISS_TOAST", - REMOVE_TOAST: "REMOVE_TOAST", -} as const; - let count = 0; function genId() { @@ -29,23 +22,28 @@ function genId() { return count.toString(); } -type ActionType = typeof actionTypes; +const enum ActionType { + ADD_TOAST = "ADD_TOAST", + UPDATE_TOAST = "UPDATE_TOAST", + DISMISS_TOAST = "DISMISS_TOAST", + REMOVE_TOAST = "REMOVE_TOAST", +} type Action = | { - type: ActionType["ADD_TOAST"]; + type: ActionType.ADD_TOAST; toast: ToasterToast; } | { - type: ActionType["UPDATE_TOAST"]; + type: ActionType.UPDATE_TOAST; toast: Partial; } | { - type: ActionType["DISMISS_TOAST"]; + type: ActionType.DISMISS_TOAST; toastId?: ToasterToast["id"]; } | { - type: ActionType["REMOVE_TOAST"]; + type: ActionType.REMOVE_TOAST; toastId?: ToasterToast["id"]; }; @@ -63,7 +61,7 @@ const addToRemoveQueue = (toastId: string) => { const timeout = setTimeout(() => { toastTimeouts.delete(toastId); dispatch({ - type: "REMOVE_TOAST", + type: ActionType.REMOVE_TOAST, toastId: toastId, }); }, TOAST_REMOVE_DELAY); @@ -73,13 +71,13 @@ const addToRemoveQueue = (toastId: string) => { export const reducer = (state: State, action: Action): State => { switch (action.type) { - case "ADD_TOAST": + case ActionType.ADD_TOAST: return { ...state, toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT), }; - case "UPDATE_TOAST": + case ActionType.UPDATE_TOAST: return { ...state, toasts: state.toasts.map((t) => @@ -87,7 +85,7 @@ export const reducer = (state: State, action: Action): State => { ), }; - case "DISMISS_TOAST": { + case ActionType.DISMISS_TOAST: { const { toastId } = action; // ! Side effects ! - This could be extracted into a dismissToast() action, @@ -112,7 +110,7 @@ export const reducer = (state: State, action: Action): State => { ), }; } - case "REMOVE_TOAST": + case ActionType.REMOVE_TOAST: if (action.toastId === undefined) { return { ...state, @@ -144,13 +142,14 @@ function toast({ ...props }: Toast) { const update = (props: ToasterToast) => dispatch({ - type: "UPDATE_TOAST", + type: ActionType.UPDATE_TOAST, toast: { ...props, id }, }); - const dismiss = () => dispatch({ type: "DISMISS_TOAST", toastId: id }); + const dismiss = () => + dispatch({ type: ActionType.DISMISS_TOAST, toastId: id }); dispatch({ - type: "ADD_TOAST", + type: ActionType.ADD_TOAST, toast: { ...props, id, @@ -184,7 +183,8 @@ function useToast() { return { ...state, toast, - dismiss: (toastId?: string) => dispatch({ type: "DISMISS_TOAST", toastId }), + dismiss: (toastId?: string) => + dispatch({ type: ActionType.DISMISS_TOAST, toastId }), }; } diff --git a/client/src/lib/hooks/useCompletionState.ts b/client/src/lib/hooks/useCompletionState.ts index 694253bb..71492e31 100644 --- a/client/src/lib/hooks/useCompletionState.ts +++ b/client/src/lib/hooks/useCompletionState.ts @@ -1,4 +1,4 @@ -import { useState, useCallback, useEffect, useRef } from "react"; +import { useState, useCallback, useEffect, useRef, useMemo } from "react"; import { ResourceReference, PromptReference, @@ -15,9 +15,11 @@ function debounce PromiseLike>( wait: number, ): (...args: Parameters) => void { let timeout: ReturnType; - return function (...args: Parameters) { + return (...args: Parameters) => { clearTimeout(timeout); - timeout = setTimeout(() => func(...args), wait); + timeout = setTimeout(() => { + void func(...args); + }, wait); }; } @@ -58,8 +60,8 @@ export function useCompletionState( }); }, [cleanup]); - const requestCompletions = useCallback( - debounce( + const requestCompletions = useMemo(() => { + return debounce( async ( ref: ResourceReference | PromptReference, argName: string, @@ -94,7 +96,7 @@ export function useCompletionState( loading: { ...prev.loading, [argName]: false }, })); } - } catch (err) { + } catch { if (!abortController.signal.aborted) { setState((prev) => ({ ...prev, @@ -108,9 +110,8 @@ export function useCompletionState( } }, debounceMs, - ), - [handleCompletion, completionsSupported, cleanup, debounceMs], - ); + ); + }, [handleCompletion, completionsSupported, cleanup, debounceMs]); // Clear completions when support status changes useEffect(() => { diff --git a/client/src/lib/useTheme.ts b/client/src/lib/useTheme.ts index 9e766112..bd0d1129 100644 --- a/client/src/lib/useTheme.ts +++ b/client/src/lib/useTheme.ts @@ -43,7 +43,10 @@ const useTheme = (): [Theme, (mode: Theme) => void] => { document.documentElement.classList.toggle("dark", newTheme === "dark"); } }, []); - return useMemo(() => [theme, setThemeWithSideEffect], [theme]); + return useMemo( + () => [theme, setThemeWithSideEffect], + [theme, setThemeWithSideEffect], + ); }; export default useTheme;