Skip to content

Commit fb5354f

Browse files
committed
Convert SortableEvent to typescript
1 parent a0c3c90 commit fb5354f

File tree

4 files changed

+64
-6
lines changed

4 files changed

+64
-6
lines changed

.changeset/khaki-candles-jog.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@shopify/draggable': patch
3+
---
4+
5+
Convert SortableEvent to typescript

src/Draggable/DragEvent/DragEvent.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ export class DragMoveEvent extends DragEvent<DragEventData> {
124124
* DragOverEventData
125125
* @interface DragOverEventData
126126
*/
127-
interface DragOverEventData extends DragEventData {
127+
export interface DragOverEventData extends DragEventData {
128128
overContainer: HTMLElement;
129129
over: HTMLElement;
130130
}

src/Sortable/SortableEvent/SortableEvent.js renamed to src/Sortable/SortableEvent/SortableEvent.ts

Lines changed: 58 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,38 @@
11
import AbstractEvent from 'shared/AbstractEvent';
22

3+
import {
4+
DragEvent,
5+
DragEventData,
6+
DragOverEvent,
7+
DragOutEvent,
8+
DragOverContainerEvent,
9+
DragOutContainerEvent,
10+
} from '../../Draggable/DragEvent';
11+
12+
interface SortableEventData {
13+
dragEvent: DragEvent<DragEventData>;
14+
}
15+
316
/**
417
* Base sortable event
518
* @class SortableEvent
619
* @module SortableEvent
720
* @extends AbstractEvent
821
*/
9-
export class SortableEvent extends AbstractEvent {
22+
export class SortableEvent<
23+
T extends SortableEventData,
24+
> extends AbstractEvent<SortableEventData> {
1025
static type = 'sortable';
1126

27+
/**
28+
* SortableEvent constructor.
29+
* @constructs SortableEvent
30+
* @param {SortableEventData} data - Event data
31+
*/
32+
constructor(public data: T) {
33+
super(data);
34+
}
35+
1236
/**
1337
* Original drag event that triggered this sortable event
1438
* @property dragEvent
@@ -20,13 +44,18 @@ export class SortableEvent extends AbstractEvent {
2044
}
2145
}
2246

47+
interface SortableStartEventData extends SortableEventData {
48+
startIndex: number;
49+
startContainer: HTMLElement;
50+
}
51+
2352
/**
2453
* Sortable start event
2554
* @class SortableStartEvent
2655
* @module SortableStartEvent
2756
* @extends SortableEvent
2857
*/
29-
export class SortableStartEvent extends SortableEvent {
58+
export class SortableStartEvent extends SortableEvent<SortableStartEventData> {
3059
static type = 'sortable:start';
3160
static cancelable = true;
3261

@@ -51,13 +80,23 @@ export class SortableStartEvent extends SortableEvent {
5180
}
5281
}
5382

83+
interface SortableSortEventData extends SortableEventData {
84+
dragEvent:
85+
| DragOverEvent
86+
| DragOutEvent
87+
| DragOverContainerEvent
88+
| DragOutContainerEvent;
89+
currentIndex: number;
90+
over: HTMLElement;
91+
}
92+
5493
/**
5594
* Sortable sort event
5695
* @class SortableSortEvent
5796
* @module SortableSortEvent
5897
* @extends SortableEvent
5998
*/
60-
export class SortableSortEvent extends SortableEvent {
99+
export class SortableSortEvent extends SortableEvent<SortableSortEventData> {
61100
static type = 'sortable:sort';
62101
static cancelable = true;
63102

@@ -92,13 +131,20 @@ export class SortableSortEvent extends SortableEvent {
92131
}
93132
}
94133

134+
interface SortableSortedEventData extends SortableEventData {
135+
oldIndex: number;
136+
newIndex: number;
137+
oldContainer: HTMLElement;
138+
newContainer: HTMLElement;
139+
}
140+
95141
/**
96142
* Sortable sorted event
97143
* @class SortableSortedEvent
98144
* @module SortableSortedEvent
99145
* @extends SortableEvent
100146
*/
101-
export class SortableSortedEvent extends SortableEvent {
147+
export class SortableSortedEvent extends SortableEvent<SortableSortedEventData> {
102148
static type = 'sortable:sorted';
103149

104150
/**
@@ -142,13 +188,20 @@ export class SortableSortedEvent extends SortableEvent {
142188
}
143189
}
144190

191+
interface SortableStopEventData extends SortableEventData {
192+
oldIndex: number;
193+
newIndex: number;
194+
oldContainer: HTMLElement;
195+
newContainer: HTMLElement;
196+
}
197+
145198
/**
146199
* Sortable stop event
147200
* @class SortableStopEvent
148201
* @module SortableStopEvent
149202
* @extends SortableEvent
150203
*/
151-
export class SortableStopEvent extends SortableEvent {
204+
export class SortableStopEvent extends SortableEvent<SortableStopEventData> {
152205
static type = 'sortable:stop';
153206

154207
/**

0 commit comments

Comments
 (0)