|
1 | 1 | import {
|
2 | 2 | Block,
|
3 | 3 | fragment,
|
4 |
| - FragmentBlock, |
5 | 4 | stringToDOM,
|
6 |
| - withKey, |
7 | 5 | } from '/Users/aidenybai/Projects/aidenybai/million/packages/block/index';
|
8 | 6 |
|
9 | 7 | const adjectives = [
|
@@ -128,21 +126,41 @@ const swapRows = () => {
|
128 | 126 | return false;
|
129 | 127 | };
|
130 | 128 |
|
131 |
| -let prevSelected; |
132 |
| -const select = (id, el) => { |
133 |
| - if (prevSelected) prevSelected.className = ''; |
134 |
| - selected = id; |
135 |
| - el.className = 'danger'; |
136 |
| - prevSelected = el; |
137 |
| - const row = main.children.findIndex((block) => block.props.id === id); |
138 |
| - row.props.className = 'danger'; |
139 |
| - const prevRow = main.children.findIndex((block) => block.props.id === id); |
140 |
| - prevRow.props.className = ''; |
| 129 | +let prevBlock; |
| 130 | + |
| 131 | +const select = (id) => { |
| 132 | + const block = main.children.find((block) => block.props.id === id); |
| 133 | + const row = Row( |
| 134 | + { |
| 135 | + id: block.props.id, |
| 136 | + label: block.props.label, |
| 137 | + className: 'danger', |
| 138 | + }, |
| 139 | + id |
| 140 | + ); |
| 141 | + row.memo = [block.props.label, true]; |
| 142 | + block.patch(row); |
| 143 | + |
| 144 | + if (prevBlock) { |
| 145 | + const row = Row( |
| 146 | + { |
| 147 | + id: prevBlock.props.id, |
| 148 | + label: prevBlock.props.label, |
| 149 | + className: '', |
| 150 | + }, |
| 151 | + prevBlock.props.id |
| 152 | + ); |
| 153 | + row.memo = [prevBlock.props.label, false]; |
| 154 | + prevBlock.patch(row); |
| 155 | + } |
| 156 | + |
| 157 | + prevBlock = block; |
141 | 158 | };
|
142 | 159 |
|
143 | 160 | const remove = (id) => {
|
144 | 161 | const index = list.findIndex((item) => item.id === id);
|
145 | 162 | list.splice(index, 1);
|
| 163 | + main.children[index].remove(); |
146 | 164 | main.children.splice(index, 1);
|
147 | 165 | };
|
148 | 166 |
|
@@ -217,8 +235,7 @@ function render(oldCache, newCache) {
|
217 | 235 | label: item.label,
|
218 | 236 | className: isSelected ? 'danger' : '',
|
219 | 237 | },
|
220 |
| - id, |
221 |
| - false |
| 238 | + id |
222 | 239 | );
|
223 | 240 | row.memo = [item.label, isSelected];
|
224 | 241 | newCache[item.id] = row;
|
@@ -310,13 +327,11 @@ function render(oldCache, newCache) {
|
310 | 327 | name: 'onClick',
|
311 | 328 | listener: (event) => {
|
312 | 329 | const el = event.target;
|
313 |
| - const row = el.closest('tr'); |
314 |
| - const id = Number(row.firstChild.textContent); |
| 330 | + const id = Number(el.closest('tr').firstChild.textContent); |
315 | 331 | if (el.matches('.glyphicon-remove')) {
|
316 |
| - row.remove(); |
317 | 332 | remove(id);
|
318 | 333 | } else {
|
319 |
| - select(id, row); |
| 334 | + select(id); |
320 | 335 | }
|
321 | 336 | return false;
|
322 | 337 | },
|
|
0 commit comments