Skip to content

Commit e615626

Browse files
committed
feat: add startSelected on select event
1 parent 9bc7e54 commit e615626

File tree

2 files changed

+36
-5
lines changed

2 files changed

+36
-5
lines changed

packages/selecto/src/SelectoManager.tsx

+14-1
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ class Selecto extends EventEmitter<SelectoEvents> {
149149
* selectByClick, continueSelect, and continueSelectWithoutDeselect are not applied.
150150
*/
151151
public setSelectedTargets(
152-
selectedTargets: Array<HTMLElement | SVGElement>
152+
selectedTargets: Array<HTMLElement | SVGElement>,
153153
): SelectedTargets {
154154
const beforeSelected = this.selectedTargets;
155155
const { added, removed, prevList, list } = diff(
@@ -762,6 +762,17 @@ class Selecto extends EventEmitter<SelectoEvents> {
762762
const inputEvent = e.inputEvent;
763763
const data = e.data;
764764
const result = this.setSelectedTargets(selectedTargets);
765+
const { added, removed, prevList, list } = diff(
766+
data.startSelectedTargets,
767+
selectedTargets,
768+
);
769+
770+
const startResult = {
771+
startSelected: prevList,
772+
startAdded: added.map(i => list[i]),
773+
startRemoved: removed.map(i => prevList[i]),
774+
};
775+
765776

766777
if (isStart) {
767778
/**
@@ -796,6 +807,7 @@ class Selecto extends EventEmitter<SelectoEvents> {
796807
*/
797808
this.emit("selectStart", {
798809
...result,
810+
...startResult,
799811
rect,
800812
inputEvent,
801813
data: data.data,
@@ -829,6 +841,7 @@ class Selecto extends EventEmitter<SelectoEvents> {
829841
*/
830842
this.emit("select", {
831843
...result,
844+
...startResult,
832845
rect,
833846
inputEvent,
834847
data: data.data,

packages/selecto/src/types.ts

+22-4
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ export interface SelectedTargetsWithRect extends SelectedTargets {
255255
* @extends Selecto.SelectedTargetsWithRect
256256
* @typedef
257257
*/
258-
export interface OnSelect<T = Selecto> extends CurrentTarget<T>, SelectedTargetsWithRect {
258+
export interface OnSelectEvent<T = Selecto> extends CurrentTarget<T>, SelectedTargetsWithRect {
259259
/**
260260
* inputEvent
261261
*/
@@ -275,11 +275,29 @@ export interface OnSelect<T = Selecto> extends CurrentTarget<T>, SelectedTargets
275275
}
276276
/**
277277
* @memberof Selecto
278-
* @extends Selecto.OnSelect
279-
* @extends Selecto.CurrentTarget
278+
* @extends Selecto.OnSelectEvent
279+
* @typedef
280+
*/
281+
export interface OnSelect<T = Selecto> extends OnSelectEvent<T> {
282+
/**
283+
* start selected elements
284+
*/
285+
startSelected: Array<HTMLElement | SVGElement>;
286+
/**
287+
* added from start selected
288+
*/
289+
startAdded: Array<HTMLElement | SVGElement>;
290+
/**
291+
* removed from start selected
292+
*/
293+
startRemoved: Array<HTMLElement | SVGElement>;
294+
}
295+
/**
296+
* @memberof Selecto
297+
* @extends Selecto.OnSelectEvent
280298
* @typedef
281299
*/
282-
export interface OnSelectEnd<T = Selecto> extends OnSelect<T>, CurrentTarget<T> {
300+
export interface OnSelectEnd<T = Selecto> extends OnSelectEvent<T> {
283301
/**
284302
* start selected elements
285303
*/

0 commit comments

Comments
 (0)