Skip to content

Commit fa4e1cc

Browse files
committed
fix(data-table): restore target and currentTarget types (#2345)
Fixes #2344
1 parent a7c9768 commit fa4e1cc

File tree

5 files changed

+88
-17
lines changed

5 files changed

+88
-17
lines changed

COMPONENT_INDEX.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1014,18 +1014,18 @@ export type DataTableCell<Row = DataTableRow> = {
10141014

10151015
### Events
10161016

1017-
| Event name | Type | Detail | Description |
1018-
| :------------------- | :--------- | :------------------------------------------------------------------------------------------------------------ | :---------- |
1019-
| click | dispatched | <code>{ header?: DataTableHeader<Row>; row?: Row; cell?: DataTableCell<Row>; }</code> | -- |
1020-
| click:header--expand | dispatched | <code>{ expanded: boolean; }</code> | -- |
1021-
| click:header | dispatched | <code>{ header: DataTableHeader<Row>; sortDirection?: "ascending" &#124; "descending" &#124; "none"; }</code> | -- |
1022-
| click:header--select | dispatched | <code>{ indeterminate: boolean; selected: boolean; }</code> | -- |
1023-
| click:row | dispatched | <code>{ row: Row; }</code> | -- |
1024-
| mouseenter:row | dispatched | <code>Row</code> | -- |
1025-
| mouseleave:row | dispatched | <code>Row</code> | -- |
1026-
| click:row--expand | dispatched | <code>{ expanded: boolean; row: Row; }</code> | -- |
1027-
| click:row--select | dispatched | <code>{ selected: boolean; row: Row; }</code> | -- |
1028-
| click:cell | dispatched | <code>{ cell: DataTableCell<Row>; }</code> | -- |
1017+
| Event name | Type | Detail | Description |
1018+
| :------------------- | :--------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- |
1019+
| click | dispatched | <code>{ header?: DataTableHeader<Row>; row?: Row; cell?: DataTableCell<Row>; }</code> | -- |
1020+
| click:header--expand | dispatched | <code>{ expanded: boolean; }</code> | -- |
1021+
| click:header | dispatched | <code>{ header: DataTableHeader<Row>; sortDirection?: "ascending" &#124; "descending" &#124; "none"; target: EventTarget; currentTarget: EventTarget; }</code> | -- |
1022+
| click:header--select | dispatched | <code>{ indeterminate: boolean; selected: boolean; }</code> | -- |
1023+
| click:row | dispatched | <code>{ row: Row; target: EventTarget; currentTarget: EventTarget; }</code> | -- |
1024+
| mouseenter:row | dispatched | <code>Row</code> | -- |
1025+
| mouseleave:row | dispatched | <code>Row</code> | -- |
1026+
| click:row--expand | dispatched | <code>{ expanded: boolean; row: Row; }</code> | -- |
1027+
| click:row--select | dispatched | <code>{ selected: boolean; row: Row; }</code> | -- |
1028+
| click:cell | dispatched | <code>{ cell: DataTableCell<Row>; target: EventTarget; currentTarget: EventTarget; }</code> | -- |
10291029

10301030
## `DataTableSkeleton`
10311031

docs/src/COMPONENT_API.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3473,7 +3473,7 @@
34733473
{
34743474
"type": "dispatched",
34753475
"name": "click:header",
3476-
"detail": "{\n header: DataTableHeader<Row>;\n sortDirection?:\n | \"ascending\"\n | \"descending\"\n | \"none\";\n}"
3476+
"detail": "{\n header: DataTableHeader<Row>;\n sortDirection?:\n | \"ascending\"\n | \"descending\"\n | \"none\";\n target: EventTarget;\n currentTarget: EventTarget;\n}"
34773477
},
34783478
{
34793479
"type": "dispatched",
@@ -3483,7 +3483,7 @@
34833483
{
34843484
"type": "dispatched",
34853485
"name": "click:row",
3486-
"detail": "{ row: Row }"
3486+
"detail": "{\n row: Row;\n target: EventTarget;\n currentTarget: EventTarget;\n}"
34873487
},
34883488
{
34893489
"type": "dispatched",
@@ -3508,7 +3508,7 @@
35083508
{
35093509
"type": "dispatched",
35103510
"name": "click:cell",
3511-
"detail": "{\n cell: DataTableCell<Row>;\n}"
3511+
"detail": "{\n cell: DataTableCell<Row>;\n target: EventTarget;\n currentTarget: EventTarget;\n}"
35123512
}
35133513
],
35143514
"typedefs": [

src/DataTable/DataTable.svelte

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,17 @@
4242
* @type {object}
4343
* @property {DataTableHeader<Row>} header
4444
* @property {"ascending" | "descending" | "none"} [sortDirection]
45+
* @property {EventTarget} target
46+
* @property {EventTarget} currentTarget
4547
* @event click:header--select
4648
* @type {object}
4749
* @property {boolean} indeterminate
4850
* @property {boolean} selected
4951
* @event click:row
5052
* @type {object}
5153
* @property {Row} row
54+
* @property {EventTarget} target
55+
* @property {EventTarget} currentTarget
5256
* @event {Row} mouseenter:row
5357
* @event {Row} mouseleave:row
5458
* @event click:row--expand
@@ -62,6 +66,8 @@
6266
* @event click:cell
6367
* @type {object}
6468
* @property {DataTableCell<Row>} cell
69+
* @property {EventTarget} target
70+
* @property {EventTarget} currentTarget
6571
* @restProps {div}
6672
*/
6773

tests/DataTable/DataTable.test.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import { render, screen } from "@testing-library/svelte";
2+
import type DataTableComponent from "carbon-components-svelte/DataTable/DataTable.svelte";
3+
import type { ComponentEvents } from "svelte";
24
import { tick } from "svelte";
35
import { user } from "../setup-tests";
46
import DataTable from "./DataTable.test.svelte";
@@ -1157,4 +1159,57 @@ describe("DataTable", () => {
11571159
expect(detail).toHaveProperty("currentTarget");
11581160
expect(detail).toHaveProperty("row");
11591161
});
1162+
1163+
// Regression test for issue https://github.com/carbon-design-system/carbon-components-svelte/issues/2344
1164+
describe("TypeScript event type definitions", () => {
1165+
it("click:row event type includes target and currentTarget", () => {
1166+
type Events = ComponentEvents<DataTableComponent<(typeof rows)[number]>>;
1167+
type ClickRowEventType = Events["click:row"];
1168+
type ClickRowEvent = ClickRowEventType extends CustomEvent<infer T>
1169+
? T
1170+
: never;
1171+
1172+
expectTypeOf<ClickRowEvent>().toHaveProperty("row");
1173+
expectTypeOf<ClickRowEvent>().toHaveProperty("target");
1174+
expectTypeOf<ClickRowEvent>().toHaveProperty("currentTarget");
1175+
expectTypeOf<ClickRowEvent["target"]>().toEqualTypeOf<EventTarget>();
1176+
expectTypeOf<
1177+
ClickRowEvent["currentTarget"]
1178+
>().toEqualTypeOf<EventTarget>();
1179+
});
1180+
1181+
it("click:cell event type includes target and currentTarget", () => {
1182+
type Events = ComponentEvents<DataTableComponent<(typeof rows)[number]>>;
1183+
type ClickCellEventType = Events["click:cell"];
1184+
type ClickCellEvent = ClickCellEventType extends CustomEvent<infer T>
1185+
? T
1186+
: never;
1187+
1188+
expectTypeOf<ClickCellEvent>().toHaveProperty("cell");
1189+
expectTypeOf<ClickCellEvent>().toHaveProperty("target");
1190+
expectTypeOf<ClickCellEvent>().toHaveProperty("currentTarget");
1191+
expectTypeOf<ClickCellEvent["target"]>().toEqualTypeOf<EventTarget>();
1192+
expectTypeOf<
1193+
ClickCellEvent["currentTarget"]
1194+
>().toEqualTypeOf<EventTarget>();
1195+
});
1196+
1197+
it("click:header event type includes target and currentTarget", () => {
1198+
type Events = ComponentEvents<DataTableComponent<(typeof rows)[number]>>;
1199+
type ClickHeaderEventType = Events["click:header"];
1200+
type ClickHeaderEvent = ClickHeaderEventType extends CustomEvent<infer T>
1201+
? T
1202+
: never;
1203+
1204+
expectTypeOf<ClickHeaderEvent>().toHaveProperty("header");
1205+
expectTypeOf<ClickHeaderEvent>().toHaveProperty("target");
1206+
expectTypeOf<ClickHeaderEvent>().toHaveProperty("currentTarget");
1207+
expectTypeOf<ClickHeaderEvent["target"]>().toEqualTypeOf<EventTarget>();
1208+
expectTypeOf<
1209+
ClickHeaderEvent["currentTarget"]
1210+
>().toEqualTypeOf<EventTarget>();
1211+
1212+
expectTypeOf<ClickHeaderEvent>().toHaveProperty("sortDirection");
1213+
});
1214+
});
11601215
});

types/DataTable/DataTable.svelte.d.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,17 +221,27 @@ export default class DataTable<
221221
"click:header": CustomEvent<{
222222
header: DataTableHeader<Row>;
223223
sortDirection?: "ascending" | "descending" | "none";
224+
target: EventTarget;
225+
currentTarget: EventTarget;
224226
}>;
225227
"click:header--select": CustomEvent<{
226228
indeterminate: boolean;
227229
selected: boolean;
228230
}>;
229-
"click:row": CustomEvent<{ row: Row }>;
231+
"click:row": CustomEvent<{
232+
row: Row;
233+
target: EventTarget;
234+
currentTarget: EventTarget;
235+
}>;
230236
"mouseenter:row": CustomEvent<Row>;
231237
"mouseleave:row": CustomEvent<Row>;
232238
"click:row--expand": CustomEvent<{ expanded: boolean; row: Row }>;
233239
"click:row--select": CustomEvent<{ selected: boolean; row: Row }>;
234-
"click:cell": CustomEvent<{ cell: DataTableCell<Row> }>;
240+
"click:cell": CustomEvent<{
241+
cell: DataTableCell<Row>;
242+
target: EventTarget;
243+
currentTarget: EventTarget;
244+
}>;
235245
},
236246
{
237247
cell: {

0 commit comments

Comments
 (0)