summaryrefslogtreecommitdiff
path: root/client/src/routes/app/components/content/content.jsx
blob: 42ecb8a4febd02af5815f0215f2182f3a4869bba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import {useLayoutEffect, useRef, useState} from 'react';

import './content.css';

import Entry from '../../../../components/entry';

export default function Content({ title, setTitle, items, setItems }) {
	const [focused, setFocused] = useState(null);

	const children = items.map((item, i) => {
		return <Entry
			item={item}
			isFocused={i === focused}
			onSelect={delta => setFocused(i + delta)}
			onRemove={refocus => setItems(a => {
				if (refocus) {
					setFocused(i-1);
				}
				return [...a.slice(0, i), ...a.slice(i + 1)]
			})}
			onEnter={type => setItems(a => {
				setFocused(i+1);
				return a.toSpliced(i+1, 0, { type, text: '' });
			})}
		/>;
	});

	return <div className="content">
		<h1 className='title' contentEditable="true">{title}</h1>
		{children}
	</div>;
}