mirror of
https://github.com/voideditor/void
synced 2026-05-24 09:58:23 +00:00
fix selection range bug
This commit is contained in:
parent
8403eed8ca
commit
f973f8d4e7
2 changed files with 25 additions and 15 deletions
|
|
@ -297,8 +297,6 @@ export const SidebarChat = () => {
|
|||
const isDisabled = !instructions.trim()
|
||||
const [formHeight, setFormHeight] = useState(0)
|
||||
const [sidebarHeight, setSidebarHeight] = useState(0)
|
||||
const formRef = useCallback((node: HTMLFormElement | null) => { if (node) { setFormHeight(node.clientHeight); } }, [setFormHeight]);
|
||||
const sidebarRef = useCallback((node: HTMLDivElement | null) => { if (node) { setSidebarHeight(node.clientHeight); } }, [setSidebarHeight]);
|
||||
const onChangeText = useCallback((newStr: string) => { setInstructions(newStr) }, [setInstructions])
|
||||
|
||||
|
||||
|
|
@ -406,8 +404,14 @@ export const SidebarChat = () => {
|
|||
|
||||
const previousMessages = currentThread?.messages ?? []
|
||||
|
||||
|
||||
|
||||
|
||||
const [_test, _setTest] = useState<string[]>([])
|
||||
|
||||
|
||||
return <div
|
||||
ref={sidebarRef}
|
||||
ref={(ref) => { if (ref) { setSidebarHeight(ref.clientHeight); } }}
|
||||
className={`w-full h-full`}
|
||||
>
|
||||
<ScrollToBottomContainer
|
||||
|
|
@ -420,7 +424,11 @@ export const SidebarChat = () => {
|
|||
{/* message stream */}
|
||||
<ChatBubble chatMessage={{ role: 'assistant', content: messageStream, displayContent: messageStream || null }} />
|
||||
|
||||
<div>{`text`}</div>
|
||||
<button type='button' onClick={() => { _setTest(d => [...d, 'asdasdsadasd']) }}>more divs</button>
|
||||
{_test.map((_, i) => <div key={i}>div {i}</div>)}
|
||||
<div>{`totalHeight: ${sidebarHeight - formHeight - 30}`}</div>
|
||||
<div>{`sidebarHeight: ${sidebarHeight}`}</div>
|
||||
<div>{`formHeight: ${formHeight}`}</div>
|
||||
|
||||
</ScrollToBottomContainer>
|
||||
|
||||
|
|
@ -430,7 +438,7 @@ export const SidebarChat = () => {
|
|||
className={`right-0 left-0 m-2 z-[999] ${previousMessages.length > 0 ? 'absolute bottom-0' : ''}`}
|
||||
>
|
||||
<form
|
||||
ref={formRef}
|
||||
ref={(ref) => { if (ref) { setFormHeight(ref.clientHeight); } }}
|
||||
className={`
|
||||
flex flex-col gap-2 p-2 relative input text-left shrink-0
|
||||
transition-all duration-200
|
||||
|
|
|
|||
|
|
@ -73,20 +73,12 @@ registerAction2(class extends Action2 {
|
|||
accessor.get(IEditorService).activeTextEditorControl?.getSelection()
|
||||
)
|
||||
|
||||
// add selection
|
||||
const threadHistoryService = accessor.get(IThreadHistoryService)
|
||||
const currentStaging = threadHistoryService.state._currentStagingSelections
|
||||
const currentStagingEltIdx = currentStaging?.findIndex(s =>
|
||||
s.fileURI.fsPath === model.uri.fsPath
|
||||
&& s.range?.startLineNumber === selectionRange?.startLineNumber
|
||||
&& s.range?.endLineNumber === selectionRange?.endLineNumber
|
||||
)
|
||||
|
||||
if (selectionRange) {
|
||||
|
||||
const selectionStr = getContentInRange(model, selectionRange)
|
||||
|
||||
const selection: CodeStagingSelection = selectionStr === null ? {
|
||||
const selection: CodeStagingSelection = selectionStr === null || selectionRange.startLineNumber > selectionRange.endLineNumber ? {
|
||||
type: 'File',
|
||||
fileURI: model.uri,
|
||||
selectionStr: null,
|
||||
|
|
@ -98,7 +90,16 @@ registerAction2(class extends Action2 {
|
|||
range: selectionRange,
|
||||
}
|
||||
|
||||
// overwrite selections that match with this one (compares by `fileURI` and line numbers in `range`)
|
||||
// add selection to staging
|
||||
const threadHistoryService = accessor.get(IThreadHistoryService)
|
||||
const currentStaging = threadHistoryService.state._currentStagingSelections
|
||||
const currentStagingEltIdx = currentStaging?.findIndex(s =>
|
||||
s.fileURI.fsPath === model.uri.fsPath
|
||||
&& s.range?.startLineNumber === selection.range?.startLineNumber
|
||||
&& s.range?.endLineNumber === selection.range?.endLineNumber
|
||||
)
|
||||
|
||||
// if matches with existing selection, overwrite
|
||||
if (currentStagingEltIdx !== undefined && currentStagingEltIdx !== -1) {
|
||||
threadHistoryService.setStaging([
|
||||
...currentStaging!.slice(0, currentStagingEltIdx),
|
||||
|
|
@ -106,6 +107,7 @@ registerAction2(class extends Action2 {
|
|||
...currentStaging!.slice(currentStagingEltIdx + 1, Infinity)
|
||||
])
|
||||
}
|
||||
// if no match, add
|
||||
else {
|
||||
threadHistoryService.setStaging([...(currentStaging ?? []), selection])
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue