diff --git a/editor/src/components/editor/action/command-functions.ts b/editor/src/components/editor/action/command-functions.ts index f48bf43..b862de6 100644 --- a/editor/src/components/editor/action/command-functions.ts +++ b/editor/src/components/editor/action/command-functions.ts @@ -33,6 +33,9 @@ declare module "@tiptap/core" { runAiAction: { runAiAction: (action: PromptAction) => ReturnType; }; + replaceRange: { + replaceRange: (text: string) => ReturnType; + } setBackgroundContext: () => ReturnType, } } @@ -123,6 +126,13 @@ export const CommandFunctions = Extension.create({ outputForm: OutputForm.STREAMING, }); }, + replaceRange: + (text: string) => + ({ editor }: { editor: Editor }) => { + const tr = editor.state.tr + const { from, to } = editor.state.selection; + tr.replaceWith(from, to, editor.state.schema.text(text)); + }, setBackgroundContext: (context: string) => ({ editor }: { editor: Editor }) => { diff --git a/editor/src/components/editor/advice/advice-manager.ts b/editor/src/components/editor/advice/advice-manager.ts index 5006ece..2e0bac0 100644 --- a/editor/src/components/editor/advice/advice-manager.ts +++ b/editor/src/components/editor/advice/advice-manager.ts @@ -66,4 +66,9 @@ export class AdviceManager { getAdvices(): Advice[] { return Object.values(this.advices); } + + removeAdvice(id: string) { + delete this.advices[id]; + this.emit('remove', id); + } } \ No newline at end of file diff --git a/editor/src/components/editor/advice/advice-view.tsx b/editor/src/components/editor/advice/advice-view.tsx index c9e7596..b47be50 100644 --- a/editor/src/components/editor/advice/advice-view.tsx +++ b/editor/src/components/editor/advice/advice-view.tsx @@ -26,12 +26,13 @@ export const AdviceView = ({ editor }: AdviceViewProps) => { useEffect(() => { AdviceManager.getInstance().on('add', (advice) => { - setAdvices((prevAdvices) => { - const newAdvice = [...prevAdvices, advice]; - setActiveId(advice.id); - setTimeout(focusAdviceWithActiveId); - return newAdvice; - }); + setAdvices(AdviceManager.getInstance().getAdvices()); + setActiveId(advice.id); + setTimeout(focusAdviceWithActiveId); + }); + + AdviceManager.getInstance().on('remove', (advice) => { + setAdvices(AdviceManager.getInstance().getAdvices()); }); AdviceManager.getInstance().onActiveIdChange((id) => { @@ -58,38 +59,17 @@ export const AdviceView = ({ editor }: AdviceViewProps) => { -