diff --git a/apps/ai-game-creator-shell/src/view/ui-editor/components/Inspector/Components/ComponentPanel.tsx b/apps/ai-game-creator-shell/src/view/ui-editor/components/Inspector/Components/ComponentPanel.tsx index 30089990f..c4fa25f93 100644 --- a/apps/ai-game-creator-shell/src/view/ui-editor/components/Inspector/Components/ComponentPanel.tsx +++ b/apps/ai-game-creator-shell/src/view/ui-editor/components/Inspector/Components/ComponentPanel.tsx @@ -1,6 +1,7 @@ import { ChevronDown, ChevronRight, Plus, Trash2 } from 'lucide-react'; import { useEffect, useState } from 'react'; +import { ThemedModal } from '../../../../../components/modal/ThemedModal'; import type { Component } from '../../../../../features/ui-editor/types/Component'; import type { UiEditorOperationResult } from '../../../../../features/ui-editor/useUiEditorState'; import { useInspectorReadOnly } from '../InspectorReadOnlyContext'; @@ -17,6 +18,7 @@ export function ComponentPanel(props: ComponentPanelProps) { const [addKind, setAddKind] = useState<'Image' | 'Text'>('Image'); const [expanded, setExpanded] = useState(Boolean(component)); const [error, setError] = useState(null); + const [replaceConfirmationOpen, setReplaceConfirmationOpen] = useState(false); useEffect(() => { setExpanded(Boolean(component)); @@ -37,8 +39,17 @@ export function ComponentPanel(props: ComponentPanelProps) { } function replaceComponent() { + if (component) { + setReplaceConfirmationOpen(true); + return; + } + applyReplacement(); + } + + function applyReplacement() { const result = setComponent(createComponent()); if (result?.ok) setExpanded(true); + setReplaceConfirmationOpen(false); } return ( @@ -115,6 +126,33 @@ export function ComponentPanel(props: ComponentPanelProps) {

)} {error &&

{error}

} + setReplaceConfirmationOpen(false)} + panelClassName="w-full max-w-sm rounded-2xl p-5" + > +

确认替换组件?

+

+ 当前组件的配置将被新的默认组件覆盖。 +

+
+ + +
+
); }