@@ -8,15 +8,10 @@ import type { CSSProperties } from "vue";
88import ApexGantt from " apexgantt" ;
99import type {
1010 GanttUserOptions ,
11+ GanttEventMap ,
1112 TaskInput ,
1213 ViewMode ,
1314 ThemeMode ,
14- TaskUpdateEventDetail ,
15- TaskUpdateSuccessEventDetail ,
16- TaskValidationErrorEventDetail ,
17- TaskUpdateErrorEventDetail ,
18- TaskDraggedEventDetail ,
19- TaskResizedEventDetail ,
2015} from " apexgantt" ;
2116import { GanttEvents } from " apexgantt" ;
2217
@@ -31,13 +26,21 @@ export interface ApexGanttChartProps {
3126 style? : CSSProperties ;
3227}
3328
29+ type EventDetail <K extends keyof GanttEventMap > =
30+ GanttEventMap [K ] extends CustomEvent <infer D > ? D : never ;
31+
3432export interface ApexGanttChartEmits {
35- (e : " taskUpdate" , detail : TaskUpdateEventDetail ): void ;
36- (e : " taskUpdateSuccess" , detail : TaskUpdateSuccessEventDetail ): void ;
37- (e : " taskValidationError" , detail : TaskValidationErrorEventDetail ): void ;
38- (e : " taskUpdateError" , detail : TaskUpdateErrorEventDetail ): void ;
39- (e : " taskDragged" , detail : TaskDraggedEventDetail ): void ;
40- (e : " taskResized" , detail : TaskResizedEventDetail ): void ;
33+ (e : " taskUpdate" , detail : EventDetail <" taskUpdate" >): void ;
34+ (e : " taskUpdateSuccess" , detail : EventDetail <" taskUpdateSuccess" >): void ;
35+ (e : " taskValidationError" , detail : EventDetail <" taskValidationError" >): void ;
36+ (e : " taskUpdateError" , detail : EventDetail <" taskUpdateError" >): void ;
37+ (e : " taskDragged" , detail : EventDetail <" taskDragged" >): void ;
38+ (e : " taskResized" , detail : EventDetail <" taskResized" >): void ;
39+ (e : " selectionChange" , detail : EventDetail <" selectionChange" >): void ;
40+ (
41+ e : " dependencyArrowUpdate" ,
42+ detail : EventDetail <" dependencyArrowUpdate" >,
43+ ): void ;
4144}
4245
4346export interface ApexGanttChartExpose {
@@ -69,7 +72,7 @@ const containerStyle = computed(
6972 height:
7073 typeof props .height === " number" ? ` ${props .height }px ` : props .height ,
7174 ... props .style ,
72- })
75+ }),
7376);
7477
7578// compute full options
@@ -81,7 +84,7 @@ const fullOptions = computed(
8184 width: props .width ,
8285 height: props .height ,
8386 ... props .options ,
84- })
87+ }),
8588);
8689
8790// event listeners
@@ -91,40 +94,52 @@ const setupEventListeners = (): void => {
9194 const container = chartContainer .value ;
9295
9396 container .addEventListener (GanttEvents .TASK_UPDATE , ((
94- e : CustomEvent < TaskUpdateEventDetail >
97+ e : GanttEventMap [ " taskUpdate " ],
9598 ) => {
9699 emit (" taskUpdate" , e .detail );
97100 }) as EventListener );
98101
99102 container .addEventListener (GanttEvents .TASK_UPDATE_SUCCESS , ((
100- e : CustomEvent < TaskUpdateSuccessEventDetail >
103+ e : GanttEventMap [ " taskUpdateSuccess " ],
101104 ) => {
102105 emit (" taskUpdateSuccess" , e .detail );
103106 }) as EventListener );
104107
105108 container .addEventListener (GanttEvents .TASK_VALIDATION_ERROR , ((
106- e : CustomEvent < TaskValidationErrorEventDetail >
109+ e : GanttEventMap [ " taskValidationError " ],
107110 ) => {
108111 emit (" taskValidationError" , e .detail );
109112 }) as EventListener );
110113
111114 container .addEventListener (GanttEvents .TASK_UPDATE_ERROR , ((
112- e : CustomEvent < TaskUpdateErrorEventDetail >
115+ e : GanttEventMap [ " taskUpdateError " ],
113116 ) => {
114117 emit (" taskUpdateError" , e .detail );
115118 }) as EventListener );
116119
117120 container .addEventListener (GanttEvents .TASK_DRAGGED , ((
118- e : CustomEvent < TaskDraggedEventDetail >
121+ e : GanttEventMap [ " taskDragged " ],
119122 ) => {
120123 emit (" taskDragged" , e .detail );
121124 }) as EventListener );
122125
123126 container .addEventListener (GanttEvents .TASK_RESIZED , ((
124- e : CustomEvent < TaskResizedEventDetail >
127+ e : GanttEventMap [ " taskResized " ],
125128 ) => {
126129 emit (" taskResized" , e .detail );
127130 }) as EventListener );
131+
132+ container .addEventListener (GanttEvents .SELECTION_CHANGE , ((
133+ e : GanttEventMap [" selectionChange" ],
134+ ) => {
135+ emit (" selectionChange" , e .detail );
136+ }) as EventListener );
137+
138+ container .addEventListener (GanttEvents .DEPENDENCY_ARROW_UPDATE , ((
139+ e : GanttEventMap [" dependencyArrowUpdate" ],
140+ ) => {
141+ emit (" dependencyArrowUpdate" , e .detail );
142+ }) as EventListener );
128143};
129144
130145// initialize chart
@@ -185,29 +200,29 @@ watch(
185200 () => {
186201 update ({ series: props .tasks });
187202 },
188- { deep: true }
203+ { deep: true },
189204);
190205
191206watch (
192207 () => props .viewMode ,
193208 (newMode : ViewMode ) => {
194209 update ({ viewMode: newMode });
195- }
210+ },
196211);
197212
198213watch (
199214 () => props .theme ,
200215 (newTheme : ThemeMode ) => {
201216 update ({ theme: newTheme });
202- }
217+ },
203218);
204219
205220watch (
206221 () => props .options ,
207222 (newOptions : Partial <GanttUserOptions > | undefined ) => {
208223 update (newOptions || {});
209224 },
210- { deep: true }
225+ { deep: true },
211226);
212227
213228// lifecycle hooks
0 commit comments