Skip to content

Commit 1c67f69

Browse files
committed
Delete nested timespans and respective peaks segments
1 parent 751377a commit 1c67f69

File tree

2 files changed

+40
-6
lines changed

2 files changed

+40
-6
lines changed

src/services/WaveformDataUtils.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ export default class WaveformDataUtils {
235235
}
236236

237237
/**
238-
* Delete the corresponding segment when a timespan is deleted
238+
* Delete the corresponding segment(s) when a timespan/header is deleted
239239
* @param {Object} item - item to be deleted
240240
* @param {Object} peaksInstance - peaks instance for the current waveform
241241
*/
@@ -246,13 +246,14 @@ export default class WaveformDataUtils {
246246
if (child.type === 'span') {
247247
peaksInstance.segments.removeById(child.id);
248248
}
249-
if (child.items && child.items.length > 0) {
249+
if (child.items?.length > 0) {
250250
deleteChildren(child);
251251
}
252252
}
253253
};
254254

255-
if (item.type === 'div') {
255+
// Recursively delete item's children regardless of its type
256+
if (item.items?.length > 0) {
256257
deleteChildren(item);
257258
}
258259

src/services/__test__/WaveformDataUtils.test.js

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ describe('WaveformDataUtils class', () => {
207207
});
208208

209209
describe('deleteSegments()', () => {
210-
test('timespan', () => {
210+
test('deletes timespan without children', () => {
211211
const item = {
212212
type: 'span',
213213
label: 'Segment 1.2',
@@ -219,7 +219,7 @@ describe('WaveformDataUtils class', () => {
219219
expect(value.segments._segments).toHaveLength(2);
220220
});
221221

222-
test('header', () => {
222+
test('deletes header without children', () => {
223223
const item = {
224224
type: 'div',
225225
label: 'Sub-Segment 1.1',
@@ -230,7 +230,7 @@ describe('WaveformDataUtils class', () => {
230230
expect(value.segments._segments).toHaveLength(3);
231231
});
232232

233-
test('header with children', () => {
233+
test('deletes header and its children', () => {
234234
const item = {
235235
type: 'div',
236236
label: 'Sub-Segment 2.1',
@@ -262,6 +262,39 @@ describe('WaveformDataUtils class', () => {
262262
])
263263
);
264264
});
265+
266+
test('deletes timespan and its children', () => {
267+
const item = {
268+
type: 'span',
269+
label: 'Sub-Segment 2.1',
270+
id: '123a-456b-789c-6d',
271+
items: [
272+
{
273+
type: 'div',
274+
label: 'Sub-Segment 2.1.1',
275+
id: '123a-456b-789c-7d',
276+
items: [],
277+
},
278+
{
279+
type: 'span',
280+
label: 'Segment 2.1',
281+
id: '123a-456b-789c-8d',
282+
begin: '00:09:03.241',
283+
end: '00:15:00.001',
284+
},
285+
],
286+
};
287+
const value = waveformUtils.deleteSegments(item, peaks);
288+
expect(value.segments._segments).toHaveLength(2);
289+
expect(value.segments._segments).toEqual(
290+
expect.arrayContaining([
291+
expect.objectContaining({
292+
id: '123a-456b-789c-4d',
293+
labelText: 'Segment 1.2',
294+
}),
295+
])
296+
);
297+
});
265298
});
266299

267300
describe('rebuildPeaks()', () => {

0 commit comments

Comments
 (0)