mirror of
https://github.com/pacnpal/Roo-Code.git
synced 2025-12-20 12:21:13 -05:00
Fade out buttons without removing from dom after clicking, fixing the scroll jumping issue due to the buttons being removed and re-added
This commit is contained in:
@@ -30,6 +30,7 @@ const ChatView = ({ messages, isHidden }: ChatViewProps) => {
|
|||||||
// we need to hold on to the ask because useEffect > lastMessage will always let us know when an ask comes in and handle it, but by the time handleMessage is called, the last message might not be the ask anymore (it could be a say that followed)
|
// we need to hold on to the ask because useEffect > lastMessage will always let us know when an ask comes in and handle it, but by the time handleMessage is called, the last message might not be the ask anymore (it could be a say that followed)
|
||||||
const [claudeAsk, setClaudeAsk] = useState<ClaudeAsk | undefined>(undefined)
|
const [claudeAsk, setClaudeAsk] = useState<ClaudeAsk | undefined>(undefined)
|
||||||
|
|
||||||
|
const [enableButtons, setEnableButtons] = useState<boolean>(false)
|
||||||
const [primaryButtonText, setPrimaryButtonText] = useState<string | undefined>(undefined)
|
const [primaryButtonText, setPrimaryButtonText] = useState<string | undefined>(undefined)
|
||||||
const [secondaryButtonText, setSecondaryButtonText] = useState<string | undefined>(undefined)
|
const [secondaryButtonText, setSecondaryButtonText] = useState<string | undefined>(undefined)
|
||||||
|
|
||||||
@@ -73,24 +74,28 @@ const ChatView = ({ messages, isHidden }: ChatViewProps) => {
|
|||||||
case "request_limit_reached":
|
case "request_limit_reached":
|
||||||
setTextAreaDisabled(true)
|
setTextAreaDisabled(true)
|
||||||
setClaudeAsk("request_limit_reached")
|
setClaudeAsk("request_limit_reached")
|
||||||
|
setEnableButtons(true)
|
||||||
setPrimaryButtonText("Proceed")
|
setPrimaryButtonText("Proceed")
|
||||||
setSecondaryButtonText("Start New Task")
|
setSecondaryButtonText("Start New Task")
|
||||||
break
|
break
|
||||||
case "followup":
|
case "followup":
|
||||||
setTextAreaDisabled(false)
|
setTextAreaDisabled(false)
|
||||||
setClaudeAsk("followup")
|
setClaudeAsk("followup")
|
||||||
setPrimaryButtonText(undefined)
|
setEnableButtons(false)
|
||||||
setSecondaryButtonText(undefined)
|
// setPrimaryButtonText(undefined)
|
||||||
|
// setSecondaryButtonText(undefined)
|
||||||
break
|
break
|
||||||
case "tool":
|
case "tool":
|
||||||
setTextAreaDisabled(true)
|
setTextAreaDisabled(true)
|
||||||
setClaudeAsk("tool")
|
setClaudeAsk("tool")
|
||||||
|
setEnableButtons(true)
|
||||||
setPrimaryButtonText("Approve")
|
setPrimaryButtonText("Approve")
|
||||||
setSecondaryButtonText("Cancel")
|
setSecondaryButtonText("Cancel")
|
||||||
break
|
break
|
||||||
case "command":
|
case "command":
|
||||||
setTextAreaDisabled(true)
|
setTextAreaDisabled(true)
|
||||||
setClaudeAsk("command")
|
setClaudeAsk("command")
|
||||||
|
setEnableButtons(true)
|
||||||
setPrimaryButtonText("Run Command")
|
setPrimaryButtonText("Run Command")
|
||||||
setSecondaryButtonText("Cancel")
|
setSecondaryButtonText("Cancel")
|
||||||
break
|
break
|
||||||
@@ -98,6 +103,7 @@ const ChatView = ({ messages, isHidden }: ChatViewProps) => {
|
|||||||
// extension waiting for feedback. but we can just present a new task button
|
// extension waiting for feedback. but we can just present a new task button
|
||||||
setTextAreaDisabled(false)
|
setTextAreaDisabled(false)
|
||||||
setClaudeAsk("completion_result")
|
setClaudeAsk("completion_result")
|
||||||
|
setEnableButtons(true)
|
||||||
setPrimaryButtonText("Start New Task")
|
setPrimaryButtonText("Start New Task")
|
||||||
setSecondaryButtonText(undefined)
|
setSecondaryButtonText(undefined)
|
||||||
break
|
break
|
||||||
@@ -137,6 +143,7 @@ const ChatView = ({ messages, isHidden }: ChatViewProps) => {
|
|||||||
if (messages.length === 0) {
|
if (messages.length === 0) {
|
||||||
setTextAreaDisabled(false)
|
setTextAreaDisabled(false)
|
||||||
setClaudeAsk(undefined)
|
setClaudeAsk(undefined)
|
||||||
|
setEnableButtons(false)
|
||||||
setPrimaryButtonText(undefined)
|
setPrimaryButtonText(undefined)
|
||||||
setSecondaryButtonText(undefined)
|
setSecondaryButtonText(undefined)
|
||||||
}
|
}
|
||||||
@@ -159,8 +166,9 @@ const ChatView = ({ messages, isHidden }: ChatViewProps) => {
|
|||||||
setInputValue("")
|
setInputValue("")
|
||||||
setTextAreaDisabled(true)
|
setTextAreaDisabled(true)
|
||||||
setClaudeAsk(undefined)
|
setClaudeAsk(undefined)
|
||||||
setPrimaryButtonText(undefined)
|
setEnableButtons(false)
|
||||||
setSecondaryButtonText(undefined)
|
// setPrimaryButtonText(undefined)
|
||||||
|
// setSecondaryButtonText(undefined)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,8 +189,9 @@ const ChatView = ({ messages, isHidden }: ChatViewProps) => {
|
|||||||
}
|
}
|
||||||
setTextAreaDisabled(true)
|
setTextAreaDisabled(true)
|
||||||
setClaudeAsk(undefined)
|
setClaudeAsk(undefined)
|
||||||
setPrimaryButtonText(undefined)
|
setEnableButtons(false)
|
||||||
setSecondaryButtonText(undefined)
|
// setPrimaryButtonText(undefined)
|
||||||
|
// setSecondaryButtonText(undefined)
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleSecondaryButtonClick = () => {
|
const handleSecondaryButtonClick = () => {
|
||||||
@@ -197,8 +206,9 @@ const ChatView = ({ messages, isHidden }: ChatViewProps) => {
|
|||||||
}
|
}
|
||||||
setTextAreaDisabled(true)
|
setTextAreaDisabled(true)
|
||||||
setClaudeAsk(undefined)
|
setClaudeAsk(undefined)
|
||||||
setPrimaryButtonText(undefined)
|
setEnableButtons(false)
|
||||||
setSecondaryButtonText(undefined)
|
// setPrimaryButtonText(undefined)
|
||||||
|
// setSecondaryButtonText(undefined)
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {
|
const handleKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {
|
||||||
@@ -313,30 +323,35 @@ const ChatView = ({ messages, isHidden }: ChatViewProps) => {
|
|||||||
<ChatRow key={index} message={message} />
|
<ChatRow key={index} message={message} />
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
{(primaryButtonText || secondaryButtonText) && (
|
<div
|
||||||
<div style={{ display: "flex", padding: "10px 15px 0px 15px" }}>
|
style={{
|
||||||
{primaryButtonText && (
|
opacity: primaryButtonText || secondaryButtonText ? (enableButtons ? 1 : 0.5) : 0,
|
||||||
<VSCodeButton
|
display: "flex",
|
||||||
appearance="primary"
|
padding: "10px 15px 0px 15px",
|
||||||
style={{
|
}}>
|
||||||
flex: secondaryButtonText ? 1 : 2,
|
{primaryButtonText && (
|
||||||
marginRight: secondaryButtonText ? "6px" : "0",
|
<VSCodeButton
|
||||||
}}
|
appearance="primary"
|
||||||
onClick={handlePrimaryButtonClick}>
|
disabled={!enableButtons}
|
||||||
{primaryButtonText}
|
style={{
|
||||||
</VSCodeButton>
|
flex: secondaryButtonText ? 1 : 2,
|
||||||
)}
|
marginRight: secondaryButtonText ? "6px" : "0",
|
||||||
{secondaryButtonText && (
|
}}
|
||||||
<VSCodeButton
|
onClick={handlePrimaryButtonClick}>
|
||||||
appearance="secondary"
|
{primaryButtonText}
|
||||||
style={{ flex: 1, marginLeft: "6px" }}
|
</VSCodeButton>
|
||||||
onClick={handleSecondaryButtonClick}>
|
)}
|
||||||
{secondaryButtonText}
|
{secondaryButtonText && (
|
||||||
</VSCodeButton>
|
<VSCodeButton
|
||||||
)}
|
appearance="secondary"
|
||||||
</div>
|
disabled={!enableButtons}
|
||||||
)}
|
style={{ flex: 1, marginLeft: "6px" }}
|
||||||
<div style={{ padding: "10px 15px", opacity: textAreaDisabled ? 0.7 : 1, position: "relative" }}>
|
onClick={handleSecondaryButtonClick}>
|
||||||
|
{secondaryButtonText}
|
||||||
|
</VSCodeButton>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
<div style={{ padding: "10px 15px", opacity: textAreaDisabled ? 0.5 : 1, position: "relative" }}>
|
||||||
<DynamicTextArea
|
<DynamicTextArea
|
||||||
ref={textAreaRef}
|
ref={textAreaRef}
|
||||||
value={inputValue}
|
value={inputValue}
|
||||||
@@ -360,6 +375,7 @@ const ChatView = ({ messages, isHidden }: ChatViewProps) => {
|
|||||||
resize: "none",
|
resize: "none",
|
||||||
overflow: "hidden",
|
overflow: "hidden",
|
||||||
padding: "8px 36px 8px 8px",
|
padding: "8px 36px 8px 8px",
|
||||||
|
cursor: textAreaDisabled ? "not-allowed" : undefined,
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
|
|||||||
Reference in New Issue
Block a user