({ items, setItems })
| 20 | `; |
| 21 | |
| 22 | const Child = ({ items, setItems }) => { |
| 23 | let [pendingId, setPendingId] = useState(null); |
| 24 | if (!pendingId) { |
| 25 | setPendingId((pendingId = Math.random().toFixed(20).slice(2))); |
| 26 | } |
| 27 | |
| 28 | const onInput = useCallback( |
| 29 | evt => { |
| 30 | let val = evt.target.value, |
| 31 | _items = [...items, { _id: pendingId, val }]; |
| 32 | if (childFirst) { |
| 33 | setPendingId(null); |
| 34 | setItems(_items); |
| 35 | } else { |
| 36 | setItems(_items); |
| 37 | setPendingId(null); |
| 38 | } |
| 39 | }, |
| 40 | [childFirst, setPendingId, setItems, items, pendingId] |
| 41 | ); |
| 42 | |
| 43 | return html` |
| 44 | <div class="item-editor"> |
| 45 | ${items.map( |
| 46 | (item, idx) => html` |
| 47 | <input |
| 48 | key=${item._id} |
| 49 | value=${item.val} |
| 50 | oninput=${evt => { |
| 51 | let val = evt.target.value, |
| 52 | _items = [...items]; |
| 53 | _items.splice(idx, 1, { ...item, val }); |
| 54 | setItems(_items); |
| 55 | }} |
| 56 | /> |
| 57 | ` |
| 58 | )} |
| 59 | |
| 60 | <input |
| 61 | key=${pendingId} |
| 62 | placeholder="type to add an item" |
| 63 | oninput=${onInput} |
| 64 | /> |
| 65 | </div> |
| 66 | `; |
| 67 | }; |
| 68 | |
| 69 | const Parent = () => { |
| 70 | let [items, setItems] = useState([]); |
nothing calls this directly
no test coverage detected
searching dependent graphs…