From 83f00c8a74388e6af9644b1e83dc93f0940a0d16 Mon Sep 17 00:00:00 2001 From: Ajax Davis Date: Fri, 9 Jan 2026 23:08:26 +1000 Subject: [PATCH] fix: add eslint-disable comments for set-state-in-effect rule in playground MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The new react-hooks/set-state-in-effect ESLint rule flags setState calls in useEffect hooks. These patterns are intentional in these components: - ChatHeader: setMounted for hydration safety - MessageBubble: setPartTimings for streaming state tracking - SettingsSidebar: setEnvVars for localStorage initialization 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- apps/playground/src/components/chat/ChatHeader.tsx | 5 +++-- apps/playground/src/components/chat/MessageBubble.tsx | 1 + apps/playground/src/components/sidebar/SettingsSidebar.tsx | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/playground/src/components/chat/ChatHeader.tsx b/apps/playground/src/components/chat/ChatHeader.tsx index 2f6a3bd..bf87a07 100644 --- a/apps/playground/src/components/chat/ChatHeader.tsx +++ b/apps/playground/src/components/chat/ChatHeader.tsx @@ -1,8 +1,8 @@ 'use client'; import { Button } from '@tpmjs/ui/Button/Button'; -import { useTheme } from 'next-themes'; import Link from 'next/link'; +import { useTheme } from 'next-themes'; import { useEffect, useState } from 'react'; interface ChatHeaderProps { @@ -13,8 +13,9 @@ export function ChatHeader({ onClear }: ChatHeaderProps): React.ReactElement { const { theme, setTheme } = useTheme(); const [mounted, setMounted] = useState(false); - // Avoid hydration mismatch + // Avoid hydration mismatch - this is intentional for SSR useEffect(() => { + // eslint-disable-next-line react-hooks/set-state-in-effect setMounted(true); }, []); diff --git a/apps/playground/src/components/chat/MessageBubble.tsx b/apps/playground/src/components/chat/MessageBubble.tsx index 45a03b8..85f9285 100644 --- a/apps/playground/src/components/chat/MessageBubble.tsx +++ b/apps/playground/src/components/chat/MessageBubble.tsx @@ -53,6 +53,7 @@ export function MessageBubble({ const now = Date.now(); + // eslint-disable-next-line react-hooks/set-state-in-effect setPartTimings((prev) => { const updated = new Map(prev); diff --git a/apps/playground/src/components/sidebar/SettingsSidebar.tsx b/apps/playground/src/components/sidebar/SettingsSidebar.tsx index 94ecd51..73b14ad 100644 --- a/apps/playground/src/components/sidebar/SettingsSidebar.tsx +++ b/apps/playground/src/components/sidebar/SettingsSidebar.tsx @@ -22,6 +22,7 @@ export function SettingsSidebar(): React.ReactElement { try { const stored = localStorage.getItem(ENV_STORAGE_KEY); if (stored) { + // eslint-disable-next-line react-hooks/set-state-in-effect setEnvVars(JSON.parse(stored)); } } catch (error) {