From 3f41cea5eb024a18875084366ba323182b81fdaf Mon Sep 17 00:00:00 2001 From: Pabloader Date: Fri, 20 Feb 2026 13:57:10 +0000 Subject: [PATCH] Add story cloning, fix storage caching issue --- .../ai-story/components/header/header.tsx | 40 ++++++++--------- src/games/ai-story/contexts/llm.tsx | 4 +- src/games/ai-story/contexts/state.tsx | 45 ++++++------------- src/games/ai-story/tools/storage.ts | 2 +- tsconfig.json | 2 +- 5 files changed, 36 insertions(+), 57 deletions(-) diff --git a/src/games/ai-story/components/header/header.tsx b/src/games/ai-story/components/header/header.tsx index 7eb97ac..80253aa 100644 --- a/src/games/ai-story/components/header/header.tsx +++ b/src/games/ai-story/components/header/header.tsx @@ -55,18 +55,14 @@ export const Header = () => { assistantOpen.setFalse(); }, [addSwipe, messages]); - const handleSetBannedWords = useCallback((e: Event) => { - if (e.target instanceof HTMLTextAreaElement) { - const words = e.target.value.split('\n'); - setBannedWords(words); - } + const handleSetBannedWords = useInputCallback((text) => { + const words = text.split('\n'); + setBannedWords(words); }, [setBannedWords]); - const handleBlurBannedWords = useCallback((e: Event) => { - if (e.target instanceof HTMLTextAreaElement) { - const words = e.target.value.toLowerCase().split('\n').sort(); - setBannedWords(words); - } + const handleBlurBannedWords = useInputCallback((text) => { + const words = text.toLowerCase().split('\n').sort(); + setBannedWords(words); }, [setBannedWords]); const handleSetSummaryEnabled = useCallback((e: Event) => { @@ -76,21 +72,21 @@ export const Header = () => { }, [setSummaryEnabled]); const handleChangeStory = useInputCallback((story) => { - if (story === '@new') { - const id = prompt('Story id'); - if (id) { - createStory(id); - setCurrentStory(id); - } - } else { - setCurrentStory(story); - } + setCurrentStory(story); }, []); const handleDeleteStory = useCallback(() => { if (confirm(`Delete story "${currentStory}"?`)) { deleteStory(currentStory); - } + } + }, [currentStory]); + + const handleDuplicateStory = useCallback(() => { + const id = prompt('Story id'); + if (id) { + createStory(id, currentStory); + setCurrentStory(id); + } }, [currentStory]); return ( @@ -137,8 +133,10 @@ export const Header = () => { {Object.keys(stories).map((story) => ( ))} - + {currentStory !== DEFAULT_STORY ?