From 93552152be180766fda08b1bd7ccefc4d26065ff Mon Sep 17 00:00:00 2001 From: Lieuwe Rooijakkers Date: Sun, 19 Jan 2025 22:21:32 +0100 Subject: client advancements --- client/src/components/entry.jsx | 76 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 client/src/components/entry.jsx (limited to 'client/src/components/entry.jsx') diff --git a/client/src/components/entry.jsx b/client/src/components/entry.jsx new file mode 100644 index 0000000..637a696 --- /dev/null +++ b/client/src/components/entry.jsx @@ -0,0 +1,76 @@ +import {createElement, useLayoutEffect, useRef, useState} from 'react'; + +import './entry.css'; + +function TextField({ item, onEnter, onSelect, onRemove, ref }) { + const onKeyDown = e => { + if (e.keyCode === 38) { // up + onSelect(-1); + e.preventDefault(); + return; + } else if (e.keyCode === 40) { // down + onSelect(+1); + e.preventDefault(); + return; + } else if (e.keyCode === 8 && e.target.innerText.length === 0) { // backspace + onRemove(); + e.preventDefault(); + return; + } + + if (e.keyCode !== 13) { + return; + } else if (e.shiftKey) { + return; + } + + e.preventDefault(); + + onEnter(e.ctrlKey ? 'todo' : 'plain'); + }; + + useLayoutEffect(() => { + if (ref.current == null) { + return; + } + + ref.current.innerText = item.text; + }, [item.text]); + + return
onSelect(0)}>
; +} + +function Plain({ item, onEnter, onSelect, onRemove, ref }) { + return ; +} + +function Todo({ item, onEnter, onSelect, onRemove, ref }) { + return <> + + + ; +} + +export default function Entry({ item, onEnter, onSelect, onRemove, isFocused }) { + const ref = useRef(null); + useLayoutEffect(() => { + if (isFocused && ref.current != null && document.activeElement !== ref.current) { + ref.current.focus(); + document.execCommand('selectAll', false, null); + document.getSelection().collapseToEnd(); + } + }, [isFocused]); + + const child = createElement(item.type === 'plain' ? Plain : Todo, { + ref, + item, + onEnter, + onSelect, + onRemove: () => onRemove(true), + }); + + return
+ + {child} +
+} -- cgit v1.2.3-70-g09d2