diff --git a/src/canvas/index.ts b/src/canvas/index.ts index 01e72418e..47676acab 100644 --- a/src/canvas/index.ts +++ b/src/canvas/index.ts @@ -42,7 +42,7 @@ * @module Canvas */ -import { isUndefined } from 'underscore'; +import { isArray, isUndefined } from 'underscore'; import { Module } from '../abstract'; import { AddOptions, Coordinates } from '../common'; import Component from '../dom_components/model/Component'; @@ -758,8 +758,8 @@ export default class CanvasModule extends Module { return this.spots.where(spotProps.id ? { id: spotProps.id } : spotProps) as CanvasSpot[]; } - removeSpots(spotProps: Partial = {}) { - const spots = this.getSpots(spotProps); + removeSpots(spotProps: Partial | CanvasSpot[] = {}) { + const spots = isArray(spotProps) ? spotProps : this.getSpots(spotProps); const removed = this.spots.remove(spots); return removed as unknown as CanvasSpot[]; } diff --git a/test/specs/canvas/index.ts b/test/specs/canvas/index.ts index cb998f382..70b992b62 100644 --- a/test/specs/canvas/index.ts +++ b/test/specs/canvas/index.ts @@ -80,6 +80,44 @@ describe('Canvas', () => { }); }); + describe('removeSpots()', () => { + test('Remove all spots', () => { + canvas.addSpot({ type: Select }); + canvas.addSpot({ type: Target }); + canvas.removeSpots(); + const spots = canvas.getSpots(); + expect(spots.length).toBe(0); + }); + + test('Remove spots by props', () => { + canvas.addSpot({ type: Select }); + canvas.addSpot({ type: Target }); + canvas.addSpot({ id: 'target2', type: Target }); + canvas.removeSpots({ type: Target }); + const spots = canvas.getSpots(); + expect(spots.length).toBe(1); + }); + + test('Remove spots by id', () => { + canvas.addSpot({ type: Select }); + canvas.addSpot({ type: Target }); + canvas.addSpot({ id: 'target2', type: Target }); + canvas.removeSpots({ id: 'target2' }); + const spots = canvas.getSpots(); + expect(spots.length).toBe(2); + }); + + test('Remove spots by array of spots', () => { + const spotSelect = canvas.addSpot({ type: Select }); + const spotTarget1 = canvas.addSpot({ type: Target }); + const spotTarget2 = canvas.addSpot({ id: 'target2', type: Target }); + canvas.removeSpots([spotTarget1, spotTarget2]); + const spots = canvas.getSpots(); + expect(spots.length).toBe(1); + expect(spots[0]).toBe(spotSelect); + }); + }); + describe('Spot Events', () => { test('addSpot() triggers proper events', done => { const eventAdd = jest.fn();