MCPcopy Create free account
hub / github.com/Linen-dev/linen.dev / Title

Function Title

apps/web/ui/Thread/Header/Title/index.tsx:23–79  ·  view source on GitHub ↗
({ title, state, manage, onSetTitle }: Props)

Source from the content-addressed store, hash-verified

21const INPUT_ID = 'thread-title';
22
23export default function Title({ title, state, manage, onSetTitle }: Props) {
24 const [mode, setMode] = useState(Mode.Read);
25 const text = title || 'Title';
26
27 useKeyboard(
28 {
29 onKeyUp(event) {
30 const node = event.target as HTMLInputElement;
31 if (
32 node?.id === INPUT_ID &&
33 event.key === 'Escape' &&
34 mode === Mode.Edit
35 ) {
36 event.preventDefault();
37 event.stopPropagation();
38 setMode(Mode.Read);
39 }
40 },
41 },
42 [mode]
43 );
44
45 if (!manage) {
46 return <div className={styles.title}>{text}</div>;
47 }
48 return (
49 <div
50 className={classNames(styles.title, styles.cursorPointer)}
51 onClick={() => setMode(Mode.Edit)}
52 >
53 {mode === Mode.Edit && (
54 <TextInput
55 className={styles.textInput}
56 id={INPUT_ID}
57 defaultValue={title || ''}
58 onBlur={(event: React.ChangeEvent<HTMLInputElement>) => {
59 setMode(Mode.Read);
60 onSetTitle(event.currentTarget.value);
61 }}
62 onKeyDown={(event: React.KeyboardEvent<HTMLInputElement>) => {
63 if (event.key === 'Enter') {
64 setMode(Mode.Read);
65 onSetTitle(event.currentTarget.value);
66 }
67 }}
68 autoFocus
69 />
70 )}
71 {mode === Mode.Read && (
72 <>
73 {text}
74 <FiEdit />
75 </>
76 )}
77 </div>
78 );
79}

Callers

nothing calls this directly

Calls 1

useKeyboardFunction · 0.85

Tested by

no test coverage detected