reslop 0.1.9 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -1
- package/README.md +2 -1
- package/bin/reslop.js +2 -2
- package/lib/ansi.js +4 -2
- package/lib/api.js +2 -2
- package/lib/capabilities.js +7 -14
- package/lib/cli.js +28 -47
- package/lib/clipboard.js +1 -1
- package/lib/{deps/changes.js → deps-diff.js} +309 -19
- package/lib/deps.js +498 -29
- package/lib/detect.js +1 -7
- package/lib/diff/align.js +7 -10
- package/lib/diff/diff.js +53 -0
- package/lib/diff/display.js +5 -4
- package/lib/diff/inline.js +26 -21
- package/lib/diff/items.js +6 -4
- package/lib/diff/patch.js +1 -3
- package/lib/diff/unit.js +392 -0
- package/lib/files.js +5 -8
- package/lib/{git/branches.js → git-branches.js} +6 -5
- package/lib/{git/dependencies.js → git-deps.js} +111 -38
- package/lib/git.js +589 -68
- package/lib/github.js +28 -197
- package/lib/gitlab.js +24 -195
- package/lib/highlight/bash.js +1 -3
- package/lib/highlight/css.js +1 -3
- package/lib/highlight/js.js +11 -14
- package/lib/highlight.js +6 -9
- package/lib/keys.js +14 -8
- package/lib/manifest.js +330 -0
- package/lib/remote.js +374 -0
- package/lib/render/branches.js +14 -68
- package/lib/render/chrome.js +24 -9
- package/lib/render/commits.js +6 -59
- package/lib/render/diff.js +16 -16
- package/lib/render/files.js +6 -34
- package/lib/render/frame.js +23 -12
- package/lib/render/notes.js +4 -3
- package/lib/render/primitives.js +45 -0
- package/lib/{render.js → render/render.js} +5 -5
- package/lib/render/unit.js +41 -0
- package/lib/review.js +750 -14
- package/lib/select.js +5 -10
- package/lib/session/accessors.js +9 -1
- package/lib/session/actions.js +32 -16
- package/lib/session/branches.js +116 -128
- package/lib/session/change-actions.js +202 -123
- package/lib/session/commit.js +105 -112
- package/lib/session/compose.js +158 -13
- package/lib/session/dispatch.js +104 -60
- package/lib/session/files-pane.js +142 -148
- package/lib/session/items.js +22 -30
- package/lib/session/lifecycle.js +44 -44
- package/lib/session/load.js +19 -33
- package/lib/session/navigation.js +12 -1
- package/lib/session/ops.js +28 -41
- package/lib/session/pointer.js +54 -57
- package/lib/session/review.js +23 -37
- package/lib/session/terminal.js +6 -12
- package/lib/session/todos.js +8 -12
- package/lib/session/unit.js +208 -0
- package/lib/session/update.js +33 -46
- package/lib/session/view.js +78 -9
- package/lib/session/watch.js +11 -19
- package/lib/session.js +21 -246
- package/lib/source.js +3 -3
- package/lib/update.js +40 -75
- package/lib/{git/proc.js → utilities.js} +75 -11
- package/lib/wrap.js +1 -3
- package/package.json +1 -1
- package/lib/deps/items.js +0 -134
- package/lib/deps/manifest.js +0 -152
- package/lib/deps/merge.js +0 -120
- package/lib/deps/proposals.js +0 -164
- package/lib/deps/reports.js +0 -180
- package/lib/deps/rows.js +0 -176
- package/lib/deps/scan.js +0 -138
- package/lib/deps/usage.js +0 -68
- package/lib/deps/versions.js +0 -119
- package/lib/diff.js +0 -33
- package/lib/git/changes.js +0 -164
- package/lib/git/read.js +0 -253
- package/lib/git/run.js +0 -100
- package/lib/npm/commands.js +0 -100
- package/lib/remote/changes.js +0 -37
- package/lib/remote/headers.js +0 -36
- package/lib/remote/http.js +0 -122
- package/lib/remote/notes.js +0 -94
- package/lib/review/format.js +0 -434
- package/lib/review/storage.js +0 -150
- package/lib/review/store.js +0 -178
- package/lib/review/templates.js +0 -49
- package/lib/session/origins.js +0 -7
- package/lib/sys.js +0 -84
|
@@ -2,147 +2,147 @@
|
|
|
2
2
|
|
|
3
3
|
const files = require('../files.js');
|
|
4
4
|
const { isTodosEntry, TODO_FILE } = files;
|
|
5
|
+
const unit = require('./unit.js');
|
|
6
|
+
const { setFileScope, openUnitFile, moveUnitBlock } = unit;
|
|
5
7
|
|
|
6
8
|
const LAYOUTS = ['unified', 'mixed', 'side'];
|
|
7
9
|
|
|
8
|
-
const current = (
|
|
9
|
-
options.nav.current(options.items(), options.todoItem());
|
|
10
|
+
const current = (ui) => ui.nav.current(ui.items, ui.todoItem);
|
|
10
11
|
|
|
11
|
-
const clampIndex = (
|
|
12
|
+
const clampIndex = (ui) => ui.nav.clampIndex(ui.items.length);
|
|
12
13
|
|
|
13
|
-
const syncReviewPath = (
|
|
14
|
-
options.nav.syncReviewPath(current(options));
|
|
14
|
+
const syncReviewPath = (ui) => ui.nav.syncReviewPath(current(ui));
|
|
15
15
|
|
|
16
|
-
const clampFileCursor = (
|
|
17
|
-
options.nav.clampFileCursor(options.fileList().length);
|
|
16
|
+
const clampFileCursor = (ui) => ui.nav.clampFileCursor(ui.fileList().length);
|
|
18
17
|
|
|
19
|
-
const followReviewPath = (
|
|
20
|
-
|
|
18
|
+
const followReviewPath = (ui) =>
|
|
19
|
+
ui.nav.followReviewPath(ui.fileList(), current(ui));
|
|
21
20
|
|
|
22
|
-
const syncFileCursor = (
|
|
23
|
-
if (
|
|
24
|
-
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
followReviewPath(options);
|
|
21
|
+
const syncFileCursor = (ui) => {
|
|
22
|
+
if (ui.nav.pane === 'files') return void clampFileCursor(ui);
|
|
23
|
+
followReviewPath(ui);
|
|
28
24
|
};
|
|
29
25
|
|
|
30
|
-
const showFiles = (
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
followReviewPath(
|
|
34
|
-
|
|
26
|
+
const showFiles = (ui) => {
|
|
27
|
+
ui.nav.pane = 'files';
|
|
28
|
+
ui.nav.clearSelection();
|
|
29
|
+
followReviewPath(ui);
|
|
30
|
+
ui.nav.todoOpen = false;
|
|
35
31
|
};
|
|
36
32
|
|
|
37
|
-
const onEscape = (
|
|
38
|
-
if (
|
|
39
|
-
showFiles(
|
|
40
|
-
return;
|
|
33
|
+
const onEscape = (ui) => {
|
|
34
|
+
if (ui.nav.pane === 'branches' || ui.nav.pane === 'commits') {
|
|
35
|
+
return void showFiles(ui);
|
|
41
36
|
}
|
|
42
|
-
if (
|
|
43
|
-
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
showFiles(options);
|
|
37
|
+
if (ui.nav.pane === 'files') return void ui.onQuit();
|
|
38
|
+
showFiles(ui);
|
|
47
39
|
};
|
|
48
40
|
|
|
49
|
-
const onFiles = (
|
|
50
|
-
if (
|
|
51
|
-
if (!
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
41
|
+
const onFiles = (ui) => {
|
|
42
|
+
if (ui.nav.pane === 'files') {
|
|
43
|
+
if (!ui.nav.reviewPath) return;
|
|
44
|
+
if (ui.nav.fileScope === 'file') {
|
|
45
|
+
const list = ui.fileList();
|
|
46
|
+
const entry = list[ui.nav.fileCursor];
|
|
47
|
+
if (entry && !isTodosEntry(entry)) openUnitFile(ui, entry);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
ui.nav.pane = 'diff';
|
|
51
|
+
ui.nav.clearSelection();
|
|
52
|
+
if (ui.nav.reviewPath === TODO_FILE) ui.composer.openTodoPage();
|
|
55
53
|
return;
|
|
56
54
|
}
|
|
57
|
-
showFiles(
|
|
55
|
+
showFiles(ui);
|
|
58
56
|
};
|
|
59
57
|
|
|
60
|
-
const onOpenFile = (
|
|
61
|
-
if (
|
|
62
|
-
return void
|
|
58
|
+
const onOpenFile = (ui) => {
|
|
59
|
+
if (ui.nav.pane === 'branches') {
|
|
60
|
+
return void ui.gitBranches.onCheckoutBranch();
|
|
63
61
|
}
|
|
64
|
-
if (
|
|
65
|
-
if (
|
|
66
|
-
if (
|
|
62
|
+
if (ui.nav.pane === 'commits') return;
|
|
63
|
+
if (ui.nav.pane !== 'files') {
|
|
64
|
+
if (ui.nav.todoOpen) ui.composer.editFocusedTodo();
|
|
67
65
|
return;
|
|
68
66
|
}
|
|
69
|
-
const list =
|
|
70
|
-
const entry = list[
|
|
67
|
+
const list = ui.fileList();
|
|
68
|
+
const entry = list[ui.nav.fileCursor];
|
|
71
69
|
if (!entry) return;
|
|
72
70
|
if (isTodosEntry(entry)) {
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
ui.composer.openTodoPage();
|
|
72
|
+
ui.status = '';
|
|
75
73
|
return;
|
|
76
74
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
75
|
+
ui.nav.todoOpen = false;
|
|
76
|
+
ui.nav.index = entry.openIndex ?? entry.firstIndex;
|
|
77
|
+
if (ui.nav.fileScope === 'file') {
|
|
78
|
+
return void openUnitFile(ui, entry);
|
|
79
|
+
}
|
|
80
|
+
ui.nav.pane = 'diff';
|
|
81
|
+
ui.nav.scroll = 0;
|
|
82
|
+
ui.status = '';
|
|
83
|
+
ui.nav.clearSelection();
|
|
84
|
+
syncReviewPath(ui);
|
|
84
85
|
};
|
|
85
86
|
|
|
86
|
-
const onFileMove = (
|
|
87
|
-
const list =
|
|
87
|
+
const onFileMove = (ui, delta) => {
|
|
88
|
+
const list = ui.fileList();
|
|
88
89
|
if (!list.length) {
|
|
89
|
-
|
|
90
|
+
ui.status = 'nothing to review';
|
|
90
91
|
return;
|
|
91
92
|
}
|
|
92
93
|
const last = list.length - 1;
|
|
93
|
-
const moved =
|
|
94
|
+
const moved = ui.nav.fileCursor + delta;
|
|
94
95
|
const next = Math.min(last, Math.max(0, moved));
|
|
95
|
-
if (next ===
|
|
96
|
-
|
|
96
|
+
if (next === ui.nav.fileCursor) return;
|
|
97
|
+
ui.nav.fileCursor = next;
|
|
97
98
|
const entry = list[next];
|
|
98
99
|
if (isTodosEntry(entry)) {
|
|
99
|
-
|
|
100
|
+
ui.nav.reviewPath = TODO_FILE;
|
|
100
101
|
} else {
|
|
101
|
-
|
|
102
|
-
|
|
102
|
+
ui.nav.reviewPath = entry.path;
|
|
103
|
+
ui.nav.index = entry.firstIndex;
|
|
103
104
|
}
|
|
104
|
-
|
|
105
|
+
ui.status = '';
|
|
105
106
|
};
|
|
106
107
|
|
|
107
|
-
const moveRemaining = (
|
|
108
|
-
const list =
|
|
108
|
+
const moveRemaining = (ui, step) => {
|
|
109
|
+
const list = ui.items;
|
|
109
110
|
if (!list.length) {
|
|
110
|
-
|
|
111
|
+
ui.status = 'nothing to review';
|
|
111
112
|
return;
|
|
112
113
|
}
|
|
113
|
-
const next =
|
|
114
|
+
const next = ui.nav.index + step;
|
|
114
115
|
if (next < 0 || next >= list.length) return;
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
syncReviewPath(
|
|
116
|
+
ui.nav.index = next;
|
|
117
|
+
ui.nav.scroll = 0;
|
|
118
|
+
ui.status = '';
|
|
119
|
+
ui.nav.clearSelection();
|
|
120
|
+
syncReviewPath(ui);
|
|
120
121
|
};
|
|
121
122
|
|
|
122
|
-
const onNext = (
|
|
123
|
-
if (
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
123
|
+
const onNext = (ui) => {
|
|
124
|
+
if (ui.nav.pane === 'unit') return void moveUnitBlock(ui, 1);
|
|
125
|
+
if (ui.nav.todoOpen) {
|
|
126
|
+
ui.composer.closeTodoPage();
|
|
127
|
+
if (ui.items.length) ui.nav.index = 0;
|
|
128
|
+
ui.nav.scroll = 0;
|
|
129
|
+
syncReviewPath(ui);
|
|
130
|
+
syncFileCursor(ui);
|
|
129
131
|
return;
|
|
130
132
|
}
|
|
131
|
-
moveRemaining(
|
|
133
|
+
moveRemaining(ui, 1);
|
|
132
134
|
};
|
|
133
135
|
|
|
134
|
-
const onPrev = (
|
|
135
|
-
if (
|
|
136
|
-
if (
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
}
|
|
140
|
-
moveRemaining(options, -1);
|
|
136
|
+
const onPrev = (ui) => {
|
|
137
|
+
if (ui.nav.pane === 'unit') return void moveUnitBlock(ui, -1);
|
|
138
|
+
if (ui.nav.todoOpen) return;
|
|
139
|
+
if (ui.nav.index <= 0) return void ui.composer.openTodoPage();
|
|
140
|
+
moveRemaining(ui, -1);
|
|
141
141
|
};
|
|
142
142
|
|
|
143
|
-
const scrollStep = (
|
|
144
|
-
const frame =
|
|
145
|
-
const size =
|
|
143
|
+
const scrollStep = (ui, fraction) => {
|
|
144
|
+
const frame = ui.lastFrame;
|
|
145
|
+
const size = ui.lastSize ?? ui.getSize();
|
|
146
146
|
const rows = size.height ?? 24;
|
|
147
147
|
const fallback = Math.max(1, rows - 4);
|
|
148
148
|
const bodyH = frame?.bodyH ?? fallback;
|
|
@@ -153,91 +153,85 @@ const scrollStep = (options, fraction) => {
|
|
|
153
153
|
return n;
|
|
154
154
|
};
|
|
155
155
|
|
|
156
|
-
const onScroll = (
|
|
157
|
-
if (
|
|
158
|
-
if (
|
|
159
|
-
return void
|
|
156
|
+
const onScroll = (ui, delta) => {
|
|
157
|
+
if (ui.nav.pane === 'files') return void onFileMove(ui, delta);
|
|
158
|
+
if (ui.nav.pane === 'branches') {
|
|
159
|
+
return void ui.gitBranches.onBranchMove(delta);
|
|
160
160
|
}
|
|
161
|
-
if (
|
|
162
|
-
return void
|
|
161
|
+
if (ui.nav.pane === 'commits') {
|
|
162
|
+
return void ui.commits.onCommitMove(delta);
|
|
163
163
|
}
|
|
164
|
-
if (
|
|
165
|
-
return void
|
|
164
|
+
if (ui.nav.todoOpen && ui.composer.todoRowCount() > 1) {
|
|
165
|
+
return void ui.composer.moveTodoFocus(delta);
|
|
166
166
|
}
|
|
167
|
-
const frame =
|
|
167
|
+
const frame = ui.lastFrame;
|
|
168
168
|
const max = frame ? frame.scrollMax : null;
|
|
169
|
-
const scroll =
|
|
169
|
+
const scroll = ui.nav.scroll;
|
|
170
170
|
const current = max === null ? scroll : Math.min(scroll, max);
|
|
171
171
|
const moved = current + delta;
|
|
172
172
|
const next = max === null ? moved : Math.min(max, moved);
|
|
173
|
-
|
|
174
|
-
|
|
173
|
+
ui.nav.scroll = Math.max(0, next);
|
|
174
|
+
ui.nav.clearSelection();
|
|
175
175
|
};
|
|
176
176
|
|
|
177
|
-
const onJump = (
|
|
178
|
-
if (
|
|
179
|
-
const list =
|
|
177
|
+
const onJump = (ui, toEnd) => {
|
|
178
|
+
if (ui.nav.pane === 'files') {
|
|
179
|
+
const list = ui.fileList();
|
|
180
180
|
if (!list.length) {
|
|
181
|
-
|
|
181
|
+
ui.status = 'nothing to review';
|
|
182
182
|
return;
|
|
183
183
|
}
|
|
184
184
|
const target = toEnd ? list.length - 1 : 0;
|
|
185
|
-
onFileMove(
|
|
186
|
-
return;
|
|
185
|
+
return void onFileMove(ui, target - ui.nav.fileCursor);
|
|
187
186
|
}
|
|
188
|
-
if (
|
|
187
|
+
if (ui.nav.pane === 'branches') {
|
|
189
188
|
const delta = toEnd ? Number.MAX_SAFE_INTEGER : -Number.MAX_SAFE_INTEGER;
|
|
190
|
-
|
|
191
|
-
return;
|
|
189
|
+
return void ui.gitBranches.onBranchMove(delta);
|
|
192
190
|
}
|
|
193
|
-
if (
|
|
191
|
+
if (ui.nav.pane === 'commits') {
|
|
194
192
|
const delta = toEnd ? Number.MAX_SAFE_INTEGER : -Number.MAX_SAFE_INTEGER;
|
|
195
|
-
|
|
196
|
-
return;
|
|
193
|
+
return void ui.commits.onCommitMove(delta);
|
|
197
194
|
}
|
|
198
|
-
if (
|
|
199
|
-
const last =
|
|
195
|
+
if (ui.nav.todoOpen && ui.composer.todoRowCount() > 0) {
|
|
196
|
+
const last = ui.composer.todoRowCount() - 1;
|
|
200
197
|
const target = toEnd ? last : 0;
|
|
201
|
-
const at =
|
|
202
|
-
|
|
203
|
-
return;
|
|
198
|
+
const at = ui.composer.clampedTodoFocus();
|
|
199
|
+
return void ui.composer.moveTodoFocus(target - at);
|
|
204
200
|
}
|
|
205
|
-
const frame =
|
|
201
|
+
const frame = ui.lastFrame;
|
|
206
202
|
const max = frame ? frame.scrollMax : 0;
|
|
207
|
-
|
|
208
|
-
|
|
203
|
+
ui.nav.scroll = toEnd ? max : 0;
|
|
204
|
+
ui.nav.clearSelection();
|
|
209
205
|
};
|
|
210
206
|
|
|
211
|
-
const onLayout = (
|
|
212
|
-
const i = LAYOUTS.indexOf(
|
|
207
|
+
const onLayout = (ui) => {
|
|
208
|
+
const i = LAYOUTS.indexOf(ui.layout);
|
|
213
209
|
const next = (i < 0 ? 0 : i + 1) % LAYOUTS.length;
|
|
214
|
-
|
|
210
|
+
ui.layout = LAYOUTS[next];
|
|
215
211
|
const name = LAYOUTS[next] === 'side' ? 'side-by-side' : LAYOUTS[next];
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
212
|
+
ui.status = name;
|
|
213
|
+
ui.nav.scroll = 0;
|
|
214
|
+
ui.nav.clearSelection();
|
|
219
215
|
};
|
|
220
216
|
|
|
221
|
-
const createFilesPane = (
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
onEnd: () => onJump(options, true),
|
|
240
|
-
onLayout: () => onLayout(options),
|
|
217
|
+
const createFilesPane = (ui) => ({
|
|
218
|
+
clampIndex: () => clampIndex(ui),
|
|
219
|
+
syncReviewPath: () => syncReviewPath(ui),
|
|
220
|
+
syncFileCursor: () => syncFileCursor(ui),
|
|
221
|
+
showFiles: () => showFiles(ui),
|
|
222
|
+
onEscape: () => onEscape(ui),
|
|
223
|
+
onFiles: () => onFiles(ui),
|
|
224
|
+
onOpenFile: () => onOpenFile(ui),
|
|
225
|
+
onFileMove: (delta) => onFileMove(ui, delta),
|
|
226
|
+
onNext: () => onNext(ui),
|
|
227
|
+
onPrev: () => onPrev(ui),
|
|
228
|
+
scrollStep: (fraction) => scrollStep(ui, fraction),
|
|
229
|
+
onScroll: (delta) => onScroll(ui, delta),
|
|
230
|
+
onHome: () => onJump(ui, false),
|
|
231
|
+
onEnd: () => onJump(ui, true),
|
|
232
|
+
onLayout: () => onLayout(ui),
|
|
233
|
+
onFileScope: () => setFileScope(ui, 'file'),
|
|
234
|
+
onDiffScope: () => setFileScope(ui, 'diff'),
|
|
241
235
|
});
|
|
242
236
|
|
|
243
237
|
module.exports = { LAYOUTS, createFilesPane };
|
package/lib/session/items.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
const { stateView } = require('./accessors.js');
|
|
4
|
+
|
|
3
5
|
const files = require('../files.js');
|
|
4
6
|
const { itemPath, TODO_FILE, isTodoItem } = files;
|
|
5
7
|
const { feedbackKey } = require('../review.js');
|
|
6
|
-
const { refreshIndexPatches } = require('../diff.js');
|
|
8
|
+
const { refreshIndexPatches } = require('../diff/diff.js');
|
|
7
9
|
|
|
8
10
|
const depChangeKey = (item) => {
|
|
9
11
|
const change = item.dep && item.dep.change;
|
|
@@ -74,12 +76,10 @@ const takeBucket = (map, key, used) => {
|
|
|
74
76
|
return null;
|
|
75
77
|
};
|
|
76
78
|
|
|
77
|
-
const pathOf = (item) => itemPath(item) || '';
|
|
78
|
-
|
|
79
79
|
const groupByPath = (items) => {
|
|
80
80
|
const groups = new Map();
|
|
81
81
|
for (const item of items) {
|
|
82
|
-
const rel =
|
|
82
|
+
const rel = itemPath(item) || '';
|
|
83
83
|
const list = groups.get(rel) ?? [];
|
|
84
84
|
list.push(item);
|
|
85
85
|
groups.set(rel, list);
|
|
@@ -225,18 +225,15 @@ const createItemCollection = () => {
|
|
|
225
225
|
state.dismissed.clear();
|
|
226
226
|
};
|
|
227
227
|
|
|
228
|
-
const findIndexByKey = (key) => {
|
|
229
|
-
if (!key) return -1;
|
|
230
|
-
return state.items.findIndex((item) => itemKey(item) === key);
|
|
231
|
-
};
|
|
232
|
-
|
|
233
228
|
const findRestoredIndex = (item) => restoredIndex(state.items, item);
|
|
234
229
|
|
|
235
230
|
const keepOrigin = (item, origin) => {
|
|
236
231
|
const next = { ...item, origin };
|
|
237
|
-
const
|
|
238
|
-
|
|
239
|
-
|
|
232
|
+
const { length } = state.items;
|
|
233
|
+
const replaced = new Array(length);
|
|
234
|
+
for (let i = 0; i < length; i++) {
|
|
235
|
+
const entry = state.items[i];
|
|
236
|
+
replaced[i] = sameBlock(entry, item) ? next : entry;
|
|
240
237
|
}
|
|
241
238
|
if (next.dep) {
|
|
242
239
|
state.items = replaced;
|
|
@@ -245,25 +242,20 @@ const createItemCollection = () => {
|
|
|
245
242
|
state.items = refreshIndexPatches(replaced, next);
|
|
246
243
|
};
|
|
247
244
|
|
|
248
|
-
return
|
|
249
|
-
|
|
250
|
-
|
|
245
|
+
return stateView(
|
|
246
|
+
state,
|
|
247
|
+
{
|
|
248
|
+
reset,
|
|
249
|
+
replace,
|
|
250
|
+
dismiss,
|
|
251
|
+
clearDismissed,
|
|
252
|
+
isDismissed,
|
|
253
|
+
findRestoredIndex,
|
|
254
|
+
keepOrigin,
|
|
251
255
|
},
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
get dismissed() {
|
|
256
|
-
return state.dismissed;
|
|
257
|
-
},
|
|
258
|
-
reset,
|
|
259
|
-
replace,
|
|
260
|
-
dismiss,
|
|
261
|
-
clearDismissed,
|
|
262
|
-
isDismissed,
|
|
263
|
-
findIndexByKey,
|
|
264
|
-
findRestoredIndex,
|
|
265
|
-
keepOrigin,
|
|
266
|
-
};
|
|
256
|
+
['items'],
|
|
257
|
+
['dismissed'],
|
|
258
|
+
);
|
|
267
259
|
};
|
|
268
260
|
|
|
269
261
|
module.exports = {
|