Something went wrong. Try again.
a tool for shared writing and social publishing
Something went wrong. Try again.
2.0 kB · 61 lines
TSX
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162import { AsyncValueAutosizeTextarea, AutosizeTextareaProps,} from "components/utils/AutosizeTextarea";import { BlockProps } from "./Block";import { getCoordinatesInTextarea } from "src/utils/getCoordinatesInTextarea";import { focusBlock } from "src/utils/focusBlock";
export function BaseTextareaBlock( props: AutosizeTextareaProps & { block: Pick<BlockProps, "previousBlock" | "nextBlock">; },) { let { block, ...passDownProps } = props; return ( <AsyncValueAutosizeTextarea {...passDownProps} noWrap onKeyDown={(e) => { if (e.key === "ArrowUp") { let selection = e.currentTarget.selectionStart;
let lastLineBeforeCursor = e.currentTarget.value .slice(0, selection) .lastIndexOf("\n"); if (lastLineBeforeCursor !== -1) return; let block = props.block.previousBlock; let coord = getCoordinatesInTextarea(e.currentTarget, selection); if (block) { focusBlock(block, { left: coord.left + e.currentTarget.getBoundingClientRect().left, type: "bottom", }); return true; } } if (e.key === "ArrowDown") { let selection = e.currentTarget.selectionStart;
let lastLine = e.currentTarget.value.lastIndexOf("\n"); let lastLineBeforeCursor = e.currentTarget.value .slice(0, selection) .lastIndexOf("\n"); if (lastLine !== lastLineBeforeCursor) return; e.preventDefault(); let block = props.block.nextBlock;
let coord = getCoordinatesInTextarea(e.currentTarget, selection); console.log(coord); if (block) { focusBlock(block, { left: coord.left + e.currentTarget.getBoundingClientRect().left, type: "top", }); return true; } } }} /> );}