MCPcopy
hub / github.com/primer/react / useIndenting

Function useIndenting

packages/react/src/drafts/MarkdownEditor/_useIndenting.ts:22–42  ·  view source on GitHub ↗
({emitChange}: UseIndentingSettings)

Source from the content-addressed store, hash-verified

20 * Provides functionality for indenting and dedenting selected lines in the Markdown editor.
21 */
22export const useIndenting = ({emitChange}: UseIndentingSettings): UseIndentingResult => {
23 const onKeyDown = useCallback(
24 (event: React.KeyboardEvent<HTMLTextAreaElement>) => {
25 const textarea = event.currentTarget
26 if (event.defaultPrevented || event.key !== 'Tab' || textarea.selectionEnd - textarea.selectionStart === 0) return
27 event.preventDefault()
28
29 const [start, end] = getSelectedLineRange(textarea)
30 const updatedLines = textarea.value
31 .slice(start, end)
32 .split(/\r?\n/)
33 .map(line => (event.shiftKey ? dedent(line) : indent(line)))
34 .join('\n')
35
36 emitChange(updatedLines, [start, end], [start, start + updatedLines.length])
37 },
38 [emitChange],
39 )
40
41 return {onKeyDown}
42}

Callers 1

MarkdownEditor.tsxFile · 0.90

Calls 3

getSelectedLineRangeFunction · 0.90
dedentFunction · 0.85
indentFunction · 0.85

Tested by

no test coverage detected