From 1d2cc1e475bb9b132bb95fbda1864f16947e9a53 Mon Sep 17 00:00:00 2001
From: Wu Tianwei <30284043+WTW0313@users.noreply.github.com>
Date: Thu, 25 Jun 2026 18:40:48 +0800
Subject: [PATCH] feat: add hydration support and fallback for Countdown
component (#37943)
---
.../signin/__tests__/countdown.spec.tsx | 24 ++++++++++++++++-
web/app/components/signin/countdown.tsx | 26 ++++++++++++++++++-
2 files changed, 48 insertions(+), 2 deletions(-)
diff --git a/web/app/components/signin/__tests__/countdown.spec.tsx b/web/app/components/signin/__tests__/countdown.spec.tsx
index abd89686f17..2679cdb553b 100644
--- a/web/app/components/signin/__tests__/countdown.spec.tsx
+++ b/web/app/components/signin/__tests__/countdown.spec.tsx
@@ -1,4 +1,6 @@
-import { act, fireEvent, render, screen } from '@testing-library/react'
+import { act, fireEvent, render, screen, waitFor } from '@testing-library/react'
+import { hydrateRoot } from 'react-dom/client'
+import { renderToString } from 'react-dom/server'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
import Countdown from '../countdown'
import { COUNT_DOWN_KEY, COUNT_DOWN_TIME_MS } from '../storage'
@@ -46,6 +48,26 @@ describe('Countdown', () => {
// State Management Tests
describe('State Management', () => {
+ it('should render stored countdown time after hydrating server markup', async () => {
+ vi.useRealTimers()
+ const savedTime = 30000
+ localStorage.setItem(COUNT_DOWN_KEY, String(savedTime))
+ const container = document.createElement('div')
+ container.innerHTML = renderToString(
+ {t('checkCode.didNotReceiveCode', { ns: 'login' })} +
+ ) +} + +function CountdownContent({ onResend }: CountdownProps) { const { t } = useTranslation() const storedLeftTime = useCountdownLeftTimeValue() const setStoredLeftTime = useSetCountdownLeftTime()