Skip to content

Commit 7132234

Browse files
committed
Handle selected text deletion when pasting large content in PromptField
1 parent dff703c commit 7132234

1 file changed

Lines changed: 38 additions & 0 deletions

File tree

‎packages/ui/src/components/editor/panel/PromptField/hooks/use-handlers.ts‎

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -715,6 +715,44 @@ export const use_handlers = (
715715
}
716716

717717
if (!is_shift_pressed_ref.current && text.length > 1000) {
718+
const selection = window.getSelection()
719+
if (
720+
selection &&
721+
selection.rangeCount > 0 &&
722+
!selection.isCollapsed &&
723+
params.input_ref.current
724+
) {
725+
const range = selection.getRangeAt(0)
726+
const input_element = params.input_ref.current
727+
728+
if (input_element.contains(range.startContainer)) {
729+
const pre_selection_range = document.createRange()
730+
pre_selection_range.selectNodeContents(input_element)
731+
pre_selection_range.setEnd(range.startContainer, range.startOffset)
732+
const display_start = pre_selection_range.toString().length
733+
734+
pre_selection_range.setEnd(range.endContainer, range.endOffset)
735+
const display_end = pre_selection_range.toString().length
736+
737+
const raw_start = map_display_pos_to_raw_pos(
738+
display_start,
739+
props.value,
740+
props.context_file_paths ?? []
741+
)
742+
const raw_end = map_display_pos_to_raw_pos(
743+
display_end,
744+
props.value,
745+
props.context_file_paths ?? []
746+
)
747+
748+
const new_value =
749+
props.value.substring(0, raw_start) + props.value.substring(raw_end)
750+
751+
update_value(new_value, raw_start)
752+
props.on_caret_position_change(raw_start)
753+
raw_caret_pos_ref.current = raw_start
754+
}
755+
}
718756
props.on_paste_document(text)
719757
return
720758
}

0 commit comments

Comments
 (0)