From 249d21364e30ed058f1d951c4407f08106ad2a44 Mon Sep 17 00:00:00 2001 From: Alexej Wolff Date: Thu, 7 May 2026 00:44:17 +0200 Subject: [PATCH] feat: add 'save as global NPC' toggle for story characters --- src/pages/CreateStoryPage.css | 21 +++++++++++++++++++++ src/pages/CreateStoryPage.tsx | 21 +++++++++++++++++++-- src/types/index.ts | 1 + 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/pages/CreateStoryPage.css b/src/pages/CreateStoryPage.css index 832414c..8fcfcaf 100644 --- a/src/pages/CreateStoryPage.css +++ b/src/pages/CreateStoryPage.css @@ -714,6 +714,27 @@ border-color: #667eea; } +.save-global-toggle { + display: flex; + align-items: center; + gap: 0.5rem; + margin-top: 0.5rem; + font-size: 0.85rem; + color: #888; + cursor: pointer; +} + +.save-global-toggle input[type="checkbox"] { + width: 16px; + height: 16px; + accent-color: #667eea; + cursor: pointer; +} + +.save-global-toggle:hover { + color: #aaa; +} + /* Подсказки */ .hint { display: block; diff --git a/src/pages/CreateStoryPage.tsx b/src/pages/CreateStoryPage.tsx index 69611e6..23c56d0 100644 --- a/src/pages/CreateStoryPage.tsx +++ b/src/pages/CreateStoryPage.tsx @@ -274,7 +274,7 @@ export default function CreateStoryPage() { const handleCharacterChange = ( index: number, field: keyof Character, - value: string, + value: string | boolean, ) => { const newCharacters = [...form.characters]; newCharacters[index] = { ...newCharacters[index], [field]: value }; @@ -454,7 +454,10 @@ export default function CreateStoryPage() { const saveCharactersAsGlobalNPCs = async () => { const existingNames = savedNPCs.map((npc) => npc.name.toLowerCase()); - for (const char of storyCharacters) { + // Only save characters that have saveAsGlobal flag enabled + const charsToSave = storyCharacters.filter((c) => c.saveAsGlobal); + + for (const char of charsToSave) { // Skip if NPC with this name already exists if (existingNames.includes(char.name.toLowerCase())) { continue; @@ -1046,6 +1049,20 @@ export default function CreateStoryPage() { placeholder="Описание персонажа..." rows={2} /> + diff --git a/src/types/index.ts b/src/types/index.ts index 61ed28b..b595746 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -10,6 +10,7 @@ export interface Character { age?: CharacterAge; // возраст персонажа gender?: CharacterGender; // пол персонажа avatarUrl?: string; // URL аватара персонажа + saveAsGlobal?: boolean; // сохранить как глобального NPC } // NPC персонаж (сохранённый в БД)