@@ -139,15 +139,20 @@ function withNewTabUUID(tab: Tab, uuid: string) {
139
139
}
140
140
141
141
/** Re-emit prior start event in new tab */
142
- function reEmitStartInTab ( tab : Tab , uuid : string , startEvent : SnapshotBlock [ 'startEvent' ] ) {
142
+ function reEmitStartInTab ( tab : Tab , uuid : string , startEvent : SnapshotBlock [ 'startEvent' ] , emitAsReplay = true ) {
143
143
const evt = Object . assign ( { } , startEvent , withNewTabUUID ( tab , uuid ) )
144
- eventBus . emitCommandStart ( evt , true )
144
+ eventBus . emitCommandStart ( evt , emitAsReplay )
145
145
}
146
146
147
147
/** Re-emit prior complete event in new tab */
148
- function reEmitCompleteInTab ( tab : Tab , uuid : string , completeEvent : SnapshotBlock [ 'completeEvent' ] ) {
148
+ function reEmitCompleteInTab (
149
+ tab : Tab ,
150
+ uuid : string ,
151
+ completeEvent : SnapshotBlock [ 'completeEvent' ] ,
152
+ emitAsReplay = true
153
+ ) {
149
154
const evt = Object . assign ( { } , completeEvent , withNewTabUUID ( tab , uuid ) )
150
- eventBus . emitCommandComplete ( evt , true )
155
+ eventBus . emitCommandComplete ( evt , emitAsReplay )
151
156
}
152
157
153
158
/** Re-execute command line in new tab */
@@ -168,7 +173,10 @@ function replayClickFor(execUUID: string, rowIdx: number) {
168
173
* Record clicks
169
174
*
170
175
*/
171
- type Click = { completeEvent : SnapshotBlock [ 'completeEvent' ] ; onClicks : { rowIdx : number ; onClick : string } [ ] }
176
+ type Click = {
177
+ completeEvent : SnapshotBlock [ 'completeEvent' ]
178
+ onClicks : { rowIdx : number ; onClick : string ; echo : boolean } [ ]
179
+ }
172
180
class FlightRecorder {
173
181
// eslint-disable-next-line no-useless-constructor
174
182
public constructor ( private readonly tab : Tab , private readonly blocks : SnapshotBlock [ ] ) { }
@@ -181,8 +189,10 @@ class FlightRecorder {
181
189
? {
182
190
completeEvent : _ . completeEvent ,
183
191
onClicks : _ . completeEvent . response . body
184
- . map ( ( _ , rowIdx ) =>
185
- _ . onclickIdempotent && typeof _ . onclick === 'string' ? { rowIdx, onClick : _ . onclick } : undefined
192
+ . map ( ( row , rowIdx ) =>
193
+ row . onclickIdempotent && typeof row . onclick === 'string'
194
+ ? { rowIdx, onClick : row . onclick , echo : ! row . onclickSilence }
195
+ : undefined
186
196
)
187
197
. filter ( _ => _ )
188
198
}
@@ -233,6 +243,7 @@ class FlightRecorder {
233
243
if ( isTable ( click . completeEvent . response ) ) {
234
244
const row = click . completeEvent . response . body [ rowIdx ]
235
245
row . onclick = replayClickFor ( click . completeEvent . execUUID , rowIdx )
246
+ row . onclickExec = 'qexec'
236
247
}
237
248
238
249
events [ rowIdx ] = xform ( event )
@@ -262,7 +273,7 @@ class FlightRecorder {
262
273
eventBus . onCommandComplete ( fakeTab . uuid , onCommandComplete )
263
274
264
275
try {
265
- await fakeTab . REPL . pexec ( _ . onClick , { tab : fakeTab } )
276
+ await fakeTab . REPL . pexec ( _ . onClick , { tab : fakeTab , echo : _ . echo } )
266
277
} finally {
267
278
eventBus . offCommandStart ( fakeTab . uuid , onCommandStart )
268
279
eventBus . offCommandComplete ( fakeTab . uuid , onCommandComplete )
@@ -360,8 +371,8 @@ export default function(registrar: Registrar) {
360
371
const channel = `/${ replayClickFor ( execUUID , rowIdx ) } `
361
372
registrar . listen ( channel , async ( ) => {
362
373
const uuid = splitAlignment [ startEvent . tab ]
363
- reEmitStartInTab ( tab , uuid , startEvent )
364
- reEmitCompleteInTab ( tab , uuid , completeEvent )
374
+ reEmitStartInTab ( tab , uuid , startEvent , false )
375
+ reEmitCompleteInTab ( tab , uuid , completeEvent , false )
365
376
return true
366
377
} )
367
378
}
0 commit comments