Просмотр исходного кода

fix(prompts): revert to vscodetextarea to prevent race condition (#3343)

Dicha Zelianivan Arkana 7 месяцев назад
Родитель
Сommit
4730a12d4e

+ 10 - 11
webview-ui/src/components/prompts/PromptsView.tsx

@@ -1,6 +1,6 @@
 import React, { useState, useEffect, useMemo, useCallback, useRef } from "react"
 import React, { useState, useEffect, useMemo, useCallback, useRef } from "react"
 import { Button } from "@/components/ui/button"
 import { Button } from "@/components/ui/button"
-import { VSCodeCheckbox, VSCodeRadioGroup, VSCodeRadio } from "@vscode/webview-ui-toolkit/react"
+import { VSCodeCheckbox, VSCodeRadioGroup, VSCodeRadio, VSCodeTextArea } from "@vscode/webview-ui-toolkit/react"
 
 
 import { useExtensionState } from "@src/context/ExtensionStateContext"
 import { useExtensionState } from "@src/context/ExtensionStateContext"
 import {
 import {
@@ -27,7 +27,6 @@ import {
 	SelectItem,
 	SelectItem,
 	SelectTrigger,
 	SelectTrigger,
 	SelectValue,
 	SelectValue,
-	Textarea,
 	Popover,
 	Popover,
 	PopoverContent,
 	PopoverContent,
 	PopoverTrigger,
 	PopoverTrigger,
@@ -666,7 +665,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 						<div className="text-sm text-vscode-descriptionForeground mb-2">
 						<div className="text-sm text-vscode-descriptionForeground mb-2">
 							{t("prompts:roleDefinition.description")}
 							{t("prompts:roleDefinition.description")}
 						</div>
 						</div>
-						<Textarea
+						<VSCodeTextArea
 							value={(() => {
 							value={(() => {
 								const customMode = findModeBySlug(visualMode, customModes)
 								const customMode = findModeBySlug(visualMode, customModes)
 								const prompt = customModePrompts?.[visualMode] as PromptComponent
 								const prompt = customModePrompts?.[visualMode] as PromptComponent
@@ -848,7 +847,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 								modeName: getCurrentMode()?.name || "Code",
 								modeName: getCurrentMode()?.name || "Code",
 							})}
 							})}
 						</div>
 						</div>
-						<Textarea
+						<VSCodeTextArea
 							value={(() => {
 							value={(() => {
 								const customMode = findModeBySlug(visualMode, customModes)
 								const customMode = findModeBySlug(visualMode, customModes)
 								const prompt = customModePrompts?.[visualMode] as PromptComponent
 								const prompt = customModePrompts?.[visualMode] as PromptComponent
@@ -1002,7 +1001,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 							language: i18next.language,
 							language: i18next.language,
 						})}
 						})}
 					</div>
 					</div>
-					<Textarea
+					<VSCodeTextArea
 						value={customInstructions}
 						value={customInstructions}
 						onChange={(e) => {
 						onChange={(e) => {
 							const value =
 							const value =
@@ -1080,7 +1079,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 							</Button>
 							</Button>
 						</div>
 						</div>
 
 
-						<Textarea
+						<VSCodeTextArea
 							value={getSupportPromptValue(activeSupportOption)}
 							value={getSupportPromptValue(activeSupportOption)}
 							onChange={(e) => {
 							onChange={(e) => {
 								const value =
 								const value =
@@ -1140,7 +1139,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 								</div>
 								</div>
 
 
 								<div className="mt-4">
 								<div className="mt-4">
-									<Textarea
+									<VSCodeTextArea
 										value={testPrompt}
 										value={testPrompt}
 										onChange={(e) => setTestPrompt((e.target as HTMLTextAreaElement).value)}
 										onChange={(e) => setTestPrompt((e.target as HTMLTextAreaElement).value)}
 										placeholder={t("prompts:supportPrompts.enhance.testPromptPlaceholder")}
 										placeholder={t("prompts:supportPrompts.enhance.testPromptPlaceholder")}
@@ -1245,10 +1244,10 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 									}}>
 									}}>
 									{t("prompts:createModeDialog.roleDefinition.description")}
 									{t("prompts:createModeDialog.roleDefinition.description")}
 								</div>
 								</div>
-								<Textarea
+								<VSCodeTextArea
 									value={newModeRoleDefinition}
 									value={newModeRoleDefinition}
 									onChange={(e) => {
 									onChange={(e) => {
-										setNewModeRoleDefinition(e.target.value)
+										setNewModeRoleDefinition((e.target as HTMLTextAreaElement).value)
 									}}
 									}}
 									rows={4}
 									rows={4}
 									className="w-full resize-y"
 									className="w-full resize-y"
@@ -1296,10 +1295,10 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 								<div className="text-[13px] text-vscode-descriptionForeground mb-2">
 								<div className="text-[13px] text-vscode-descriptionForeground mb-2">
 									{t("prompts:createModeDialog.customInstructions.description")}
 									{t("prompts:createModeDialog.customInstructions.description")}
 								</div>
 								</div>
-								<Textarea
+								<VSCodeTextArea
 									value={newModeCustomInstructions}
 									value={newModeCustomInstructions}
 									onChange={(e) => {
 									onChange={(e) => {
-										setNewModeCustomInstructions(e.target.value)
+										setNewModeCustomInstructions((e.target as HTMLTextAreaElement).value)
 									}}
 									}}
 									rows={4}
 									rows={4}
 									className="w-full resize-y"
 									className="w-full resize-y"

+ 2 - 0
webview-ui/src/components/prompts/__tests__/PromptsView.test.tsx

@@ -1,3 +1,5 @@
+// npx jest src/components/prompts/__tests__/PromptsView.test.tsx
+
 import { render, screen, fireEvent, waitFor } from "@testing-library/react"
 import { render, screen, fireEvent, waitFor } from "@testing-library/react"
 import PromptsView from "../PromptsView"
 import PromptsView from "../PromptsView"
 import { ExtensionStateContext } from "@src/context/ExtensionStateContext"
 import { ExtensionStateContext } from "@src/context/ExtensionStateContext"