Skip to content

Commit f306229

Browse files
committed
fix: force PageTitleInput reset on wiki URL change
Add key={wikiUrl.href} to PageTitleInput to force React to unmount and remount the component when the wiki site changes. This fixes three issues: 1. pageTitle state - now resets to searchState.pageTitle 2. debouncedTitle - debounce timer is cleared and restarted 3. ErrorBoundary - stale errors from the old wiki are cleared The key prop is React's documented pattern for "resetting all state when a prop changes" and requires no changes inside PageTitleInput. Co-Authored-By: Claude
1 parent 10b88a9 commit f306229

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

src/components/SearchForm.tsx

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export function SearchForm({
2121
<WikiSelector selectedWiki={wikiUrl} onChange={setWikiUrl} />
2222

2323
<PageTitleInput
24+
key={wikiUrl.href}
2425
initialPageTitle={searchState.pageTitle}
2526
wikiUrl={wikiUrl}
2627
/>
@@ -328,6 +329,36 @@ if (import.meta.vitest) {
328329
expect(wikiSelector.value).toBe('https://ja.wikipedia.org/');
329330
});
330331

332+
it('resets page title input when wiki site changes', async () => {
333+
const { fireEvent } = await import('@testing-library/react');
334+
const user = userEvent.setup();
335+
await act(async () => renderWithQuery(<SearchForm {...defaultProps} />));
336+
const titleInput = screen.getByLabelText(
337+
/Wiki Article Title:/i
338+
) as HTMLInputElement;
339+
340+
// User types a different title
341+
await user.clear(titleInput);
342+
await user.type(titleInput, 'Albert Einstein');
343+
expect(titleInput.value).toBe('Albert Einstein');
344+
345+
// Switch wiki site
346+
const wikiSelector =
347+
screen.getByLabelText<HTMLSelectElement>(/Wiki Site:/i);
348+
await act(async () => {
349+
// use fireEvent due to warning of act unsupported
350+
fireEvent.change(wikiSelector, {
351+
target: { value: 'https://ja.wikipedia.org/' },
352+
});
353+
});
354+
355+
// PageTitleInput remounts → title resets to initialPageTitle
356+
const resetTitleInput = screen.getByLabelText(
357+
/Wiki Article Title:/i
358+
) as HTMLInputElement;
359+
expect(resetTitleInput.value).toBe('Initial Title');
360+
});
361+
331362
it('renders initial values from searchState', async () => {
332363
await act(async () =>
333364
renderWithQuery(

0 commit comments

Comments
 (0)