@masterteam/task-schedule 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,28 +1,45 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { OnInit, OnDestroy, InjectionToken } from '@angular/core';
2
+ import { OnInit, OnDestroy } from '@angular/core';
3
3
  import { GanttComponent, ContextMenuOpenEventArgs, ContextMenuClickEventArgs } from '@syncfusion/ej2-angular-gantt';
4
- import * as rxjs from 'rxjs';
5
4
  import { Observable } from 'rxjs';
6
5
  import { EntityData } from '@masterteam/components/entities';
6
+ import { ModalService } from '@masterteam/components/modal';
7
+ import { ColumnDef } from '@masterteam/components/table';
7
8
  import * as _masterteam_task_schedule from '@masterteam/task-schedule';
8
9
 
9
10
  type TaskScheduleModelKey = 'default' | 'edit' | 'baseline' | 'criticalPath' | 'resources' | 'unscheduled' | 'phaseGate' | 'custom';
10
11
  type TaskScheduleModelAlias = 'critical-path' | 'criticalpath' | 'critical path' | 'phase-gate' | 'phasegate' | 'phase gate' | 'resource' | 'resource-view' | 'resourceview' | 'unscheduled-task' | 'unscheduled task' | 'scheduling' | 'view' | 'defauilt' | 'custom-view';
11
12
  type TaskScheduleModelType = TaskScheduleModelKey | TaskScheduleModelAlias | string;
13
+ interface TaskScheduleModeOption {
14
+ value: TaskScheduleModelType;
15
+ label?: string;
16
+ icon?: string;
17
+ color?: string;
18
+ }
12
19
  declare function normalizeTaskScheduleModelType(modelType: TaskScheduleModelType): TaskScheduleModelKey;
13
20
  interface TaskScheduleContext {
14
21
  levelId: number | string;
22
+ modelType?: TaskScheduleModelType;
15
23
  schemaId?: number | string;
16
24
  levelDataId?: number | string;
25
+ taskModuleId?: number | string;
26
+ milestoneModuleId?: number | string;
27
+ deliverableModuleId?: number | string;
17
28
  customViewId?: number | string;
18
- apiBaseUrl?: string;
19
29
  scheduleViewKey?: string;
30
+ dateFormat?: string;
31
+ height?: string;
32
+ modeOptions?: TaskScheduleModeOption[];
33
+ allowEditMode?: boolean;
34
+ allowImport?: boolean;
35
+ allowSetBaseline?: boolean;
36
+ hasTasks?: boolean;
37
+ baselinePending?: boolean;
20
38
  resources?: Array<Record<string, unknown>>;
21
39
  endpoints?: TaskScheduleContextEndpoints;
22
40
  pdfFonts?: TaskSchedulePdfFonts;
23
41
  customProperties?: TaskScheduleCustomProperty[];
24
42
  customColumns?: Array<Record<string, unknown>>;
25
- requestHeaders?: Record<string, string>;
26
43
  langCode?: 'en' | 'ar';
27
44
  modelCacheKey?: string;
28
45
  [key: string]: unknown;
@@ -32,36 +49,33 @@ interface TaskSchedulePdfFonts {
32
49
  arabic?: string;
33
50
  size?: number;
34
51
  }
35
- interface TaskScheduleContextEndpoints {
52
+ interface TaskScheduleCoreContextEndpoints {
53
+ processSubmit?: string;
54
+ scheduleRead?: string;
55
+ scheduleQuery?: string;
36
56
  scheduleTree?: string;
37
- scheduleTreeDefault?: string;
38
- scheduleTreeEdit?: string;
39
- scheduleTreeBaseline?: string;
40
- scheduleTreeCriticalPath?: string;
41
- scheduleTreeResources?: string;
42
- scheduleTreeUnscheduled?: string;
43
57
  scheduleTreePhaseGate?: string;
44
- scheduleTreeCustom?: string;
58
+ }
59
+ interface TaskScheduleFeatureContextEndpoints {
60
+ scheduleDependencies?: string;
61
+ scheduleTimeline?: string;
62
+ scheduleBaselines?: string;
63
+ scheduleBaselineByVersion?: string;
45
64
  scheduleManagerBase?: string;
46
65
  scheduleViewById?: string;
47
66
  scheduleViewsByLevel?: string;
48
67
  scheduleSettingsByLevel?: string;
49
- teamMembers?: string;
50
- createTask?: string;
51
- updateTask?: string;
52
- deleteTask?: string;
53
- updateBulkTasks?: string;
54
- updateParent?: string;
55
- updateOrder?: string;
56
- updateProgress?: string;
57
68
  importTasks?: string;
58
69
  applyImportedTasks?: string;
59
70
  setBaseline?: string;
60
71
  exportTasks?: string;
61
- [key: string]: string | undefined;
62
72
  }
73
+ type TaskScheduleContextEndpoints = TaskScheduleCoreContextEndpoints & Partial<TaskScheduleFeatureContextEndpoints> & {
74
+ [key: string]: string | undefined;
75
+ };
63
76
  interface TaskScheduleTask {
64
77
  id: number | string;
78
+ schemaId?: number | string | null;
65
79
  title: string;
66
80
  name?: string;
67
81
  startDate?: Date | string | null;
@@ -74,6 +88,7 @@ interface TaskScheduleTask {
74
88
  actualFinishDate?: Date | string | null;
75
89
  baselineStartDate?: Date | string | null;
76
90
  baselineEndDate?: Date | string | null;
91
+ baselineDuration?: number | null;
77
92
  duration?: number | null;
78
93
  progress?: number | null;
79
94
  predecessor?: string | null;
@@ -86,12 +101,15 @@ interface TaskScheduleTask {
86
101
  guid?: string | null;
87
102
  uniqueID?: string | null;
88
103
  parentGuid?: string | null;
104
+ parentId?: number | string | null;
89
105
  assignedTo?: string | number | Record<string, unknown> | null;
90
106
  resources?: Array<number | string | {
91
107
  resourceId: number | string;
92
- unit?: number;
108
+ unit?: number | string;
109
+ resourceName?: string;
93
110
  }>;
94
111
  phaseGate?: string | null;
112
+ phaseGateId?: number | string | null;
95
113
  criticalPath?: boolean;
96
114
  order?: number;
97
115
  customProperties?: Array<Record<string, unknown>>;
@@ -128,15 +146,31 @@ interface TaskScheduleCustomProperty {
128
146
  }
129
147
  interface TaskScheduleTaskMutation {
130
148
  assignedTo?: number | string | null;
131
- name: string;
149
+ name?: string;
132
150
  startDate?: string | Date | null;
133
151
  finishDate?: string | Date | null;
152
+ actualStart?: string | Date | null;
153
+ actualFinish?: string | Date | null;
154
+ baselineStart?: string | Date | null;
155
+ baselineFinish?: string | Date | null;
156
+ baselineProgress?: number | null;
134
157
  predecessor?: string | null;
158
+ predecessors?: TaskScheduleDependencyMutation[] | null;
135
159
  details?: string | null;
136
160
  type?: string | null;
137
161
  duration?: number | null;
138
162
  progress?: number | null;
163
+ status?: string | null;
139
164
  parentGuid?: string | null;
165
+ parentId?: number | string | null;
166
+ phaseGateId?: number | string | null;
167
+ resources?: TaskScheduleTask['resources'];
168
+ attachments?: unknown;
169
+ isSummary?: boolean | null;
170
+ externalId?: string | null;
171
+ externalParentId?: string | null;
172
+ order?: number | null;
173
+ weight?: number | null;
140
174
  props?: Array<Record<string, unknown>>;
141
175
  [key: string]: unknown;
142
176
  }
@@ -144,6 +178,67 @@ interface TaskScheduleTaskOrderUpdate {
144
178
  taskId: number | string;
145
179
  order: number;
146
180
  }
181
+ type TaskScheduleDependencyType = 0 | 1 | 2 | 3 | 'FinishToStart' | 'StartToStart' | 'FinishToFinish' | 'StartToFinish';
182
+ interface TaskScheduleDependencyMutation {
183
+ predecessorId: number | string;
184
+ type?: TaskScheduleDependencyType | null;
185
+ lagDays?: number | null;
186
+ }
187
+ interface TaskScheduleDependency extends TaskScheduleDependencyMutation {
188
+ id: number | string;
189
+ successorId: number | string;
190
+ }
191
+ type TaskScheduleTimelineMode = 'weekly' | 'monthly' | 'quarterly' | 'biannually' | 'annually';
192
+ interface TaskScheduleTimelineBucket {
193
+ name: string;
194
+ number: number;
195
+ start: Date | string | null;
196
+ end: Date | string | null;
197
+ year?: number | null;
198
+ id: string;
199
+ seq?: number | null;
200
+ }
201
+ interface TaskScheduleBaselineVersion {
202
+ version: number;
203
+ createdAt: Date | string | null;
204
+ createdBy?: string | null;
205
+ itemCount?: number | null;
206
+ }
207
+ interface TaskScheduleBaselineSnapshotItem {
208
+ snapshotId?: number | string | null;
209
+ levelDataId?: number | string | null;
210
+ scheduleItemId?: number | string | null;
211
+ currentScheduleItemId?: number | string | null;
212
+ name?: string | null;
213
+ type?: string | null;
214
+ typeLable?: string | null;
215
+ status?: string | null;
216
+ externalId?: string | null;
217
+ externalParentId?: string | null;
218
+ guid?: string | null;
219
+ parentGuid?: string | null;
220
+ order?: number | null;
221
+ isSummary?: boolean;
222
+ assignedTo?: string | null;
223
+ resources?: Array<number | string | Record<string, unknown>>;
224
+ baselineStart?: Date | string | null;
225
+ baselineFinish?: Date | string | null;
226
+ baselineProgress?: number | null;
227
+ currentStart?: Date | string | null;
228
+ currentFinish?: Date | string | null;
229
+ currentProgress?: number | null;
230
+ currentStatus?: string | null;
231
+ currentAssignedTo?: string | null;
232
+ currentResources?: Array<number | string | Record<string, unknown>>;
233
+ existsInCurrentSchedule?: boolean;
234
+ }
235
+ interface TaskScheduleBaselineSnapshot {
236
+ levelDataId: number | string;
237
+ version: number;
238
+ createdAt: Date | string | null;
239
+ createdBy?: string | null;
240
+ items: TaskScheduleBaselineSnapshotItem[];
241
+ }
147
242
  interface TaskScheduleImportResult {
148
243
  fileName?: string | null;
149
244
  tasks: TaskScheduleTask[];
@@ -165,8 +260,16 @@ interface TaskScheduleDataResult {
165
260
  projectStartDate?: Date | string | null;
166
261
  projectEndDate?: Date | string | null;
167
262
  }
168
- interface TaskScheduleDataAdapter {
263
+ interface TaskScheduleFetchDataAdapter {
169
264
  load(modelType: TaskScheduleModelType, context: TaskScheduleContext): Observable<TaskScheduleDataResult>;
265
+ importTasks?(context: TaskScheduleContext, file: File): Observable<TaskScheduleImportResult>;
266
+ exportTasks?(context: TaskScheduleContext): Observable<Blob>;
267
+ loadDependencies?(context: TaskScheduleContext): Observable<TaskScheduleDependency[]>;
268
+ loadTimeline?(context: TaskScheduleContext, mode: TaskScheduleTimelineMode): Observable<TaskScheduleTimelineBucket[]>;
269
+ loadBaselineVersions?(context: TaskScheduleContext): Observable<TaskScheduleBaselineVersion[]>;
270
+ loadBaselineSnapshot?(context: TaskScheduleContext, version?: number | 'latest'): Observable<TaskScheduleBaselineSnapshot>;
271
+ }
272
+ interface TaskScheduleActionDataAdapter {
170
273
  createTask?(context: TaskScheduleContext, payload: TaskScheduleTaskMutation): Observable<unknown>;
171
274
  updateTask?(context: TaskScheduleContext, taskId: number | string, payload: TaskScheduleTaskMutation): Observable<unknown>;
172
275
  deleteTask?(context: TaskScheduleContext, taskId: number | string): Observable<unknown>;
@@ -174,10 +277,8 @@ interface TaskScheduleDataAdapter {
174
277
  updateParent?(context: TaskScheduleContext, taskId: number | string, parentId: number | string | null): Observable<unknown>;
175
278
  updateOrder?(context: TaskScheduleContext, payload: TaskScheduleTaskOrderUpdate[]): Observable<unknown>;
176
279
  updateProgress?(context: TaskScheduleContext, taskId: number | string, payload: TaskScheduleTaskMutation): Observable<unknown>;
177
- importTasks?(context: TaskScheduleContext, file: File): Observable<TaskScheduleImportResult>;
178
280
  applyImportedTasks?(context: TaskScheduleContext, payload: TaskScheduleApplyImportPayload): Observable<unknown>;
179
281
  setBaseline?(context: TaskScheduleContext, payload?: Record<string, unknown>): Observable<unknown>;
180
- exportTasks?(context: TaskScheduleContext): Observable<Blob>;
181
282
  }
182
283
  interface TaskScheduleGanttConfig {
183
284
  taskFields: Record<string, unknown>;
@@ -197,6 +298,7 @@ interface TaskScheduleGanttConfig {
197
298
  eventMarkers?: Array<Record<string, unknown>>;
198
299
  timelineSettings?: Record<string, unknown>;
199
300
  editSettings?: Record<string, unknown>;
301
+ allowRowDragAndDrop?: boolean;
200
302
  addDialogFields?: Array<Record<string, unknown>>;
201
303
  editDialogFields?: Array<Record<string, unknown>>;
202
304
  contextMenuItems?: Array<string | Record<string, unknown>>;
@@ -208,10 +310,12 @@ interface TaskScheduleGanttConfig {
208
310
  projectEndDate?: Date | string | null;
209
311
  }
210
312
 
211
- declare const EDIT_TASK_TYPE_IDS: readonly ["Milestone", "Task", "Deliverable"];
313
+ type EditTaskTypeId = 'Milestone' | 'Task' | 'Deliverable';
212
314
  declare class TaskSchedule implements OnInit, OnDestroy {
213
315
  ganttObj?: GanttComponent;
214
- private readonly adapter;
316
+ private readonly fetchService;
317
+ private readonly actionService;
318
+ private readonly modal;
215
319
  private readonly queueService;
216
320
  private readonly injector;
217
321
  private loadEffect?;
@@ -219,15 +323,9 @@ declare class TaskSchedule implements OnInit, OnDestroy {
219
323
  private loadSubscription?;
220
324
  private readonly operationSub;
221
325
  private readonly contextAddTask;
326
+ private readonly contextAddAnchorTask;
222
327
  private readonly customProperties;
223
- readonly modelType: _angular_core.InputSignal<string>;
224
328
  readonly context: _angular_core.InputSignal<TaskScheduleContext | null>;
225
- readonly dateFormat: _angular_core.InputSignal<string>;
226
- readonly height: _angular_core.InputSignal<string>;
227
- readonly langCode: _angular_core.InputSignal<"en" | "ar" | null>;
228
- readonly pdfFontData: _angular_core.InputSignal<string | null>;
229
- readonly pdfRtlFontData: _angular_core.InputSignal<string | null>;
230
- readonly pdfFontSize: _angular_core.InputSignal<number>;
231
329
  readonly toolbarAction: _angular_core.OutputEmitterRef<string>;
232
330
  readonly actionBegin: _angular_core.OutputEmitterRef<any>;
233
331
  readonly actionCompleted: _angular_core.OutputEmitterRef<any>;
@@ -238,12 +336,16 @@ declare class TaskSchedule implements OnInit, OnDestroy {
238
336
  readonly dataSource: _angular_core.WritableSignal<TaskScheduleTask[]>;
239
337
  readonly ganttConfig: _angular_core.WritableSignal<TaskScheduleGanttConfig>;
240
338
  readonly ganttId: string;
339
+ readonly resolvedModelTypeInput: _angular_core.Signal<string>;
340
+ readonly resolvedDateFormat: _angular_core.Signal<string>;
341
+ readonly resolvedHeight: _angular_core.Signal<string>;
241
342
  readonly resolvedModelType: _angular_core.Signal<TaskScheduleModelKey>;
242
343
  readonly resolvedLangCode: _angular_core.Signal<"en" | "ar">;
243
344
  readonly isEditMode: _angular_core.Signal<boolean>;
244
345
  readonly editTaskTypes: _angular_core.Signal<{
245
- id: (typeof EDIT_TASK_TYPE_IDS)[number];
346
+ id: EditTaskTypeId;
246
347
  text: string;
348
+ moduleId: number | string;
247
349
  }[]>;
248
350
  readonly enableRtl: _angular_core.Signal<boolean>;
249
351
  readonly tooltipTranslations: _angular_core.Signal<{
@@ -265,143 +367,159 @@ declare class TaskSchedule implements OnInit, OnDestroy {
265
367
  onDataBound(): void;
266
368
  private loadSchedule;
267
369
  private applyEditCustomProps;
268
- private configureDialogState;
269
- private applyDependentFieldBehavior;
370
+ private openScheduleDialog;
270
371
  private handleRowDropped;
271
- private createTask;
272
372
  private updateTask;
273
373
  private deleteTask;
274
374
  private pushBulkUpdate;
275
- private buildMutationFromTask;
276
375
  private resolveParentGuidForContextAddTask;
277
- private getCustomPropsValue;
376
+ private buildCreateDialogTask;
377
+ private clearContextAddState;
378
+ private isContextAddAction;
379
+ private readEditTaskFromArgs;
380
+ private readAnchorTaskFromArgs;
381
+ private isProgressOnlyTaskbarEdit;
278
382
  private getGeneralDialogFields;
279
383
  private reloadSchedule;
280
- private normalizeTasks;
281
- private extractCustomProps;
282
- private readNamedValue;
283
- private readType;
284
- private readAssignedTo;
285
- private readResources;
286
384
  private extractDateValue;
287
385
  private mapColumnEditType;
288
- private getDialogFieldInstance;
289
- private removeValidationRule;
290
- private toggleAddAndEditButtons;
291
- private toggleToolbarButton;
292
- private normalizeDuration;
293
- private safeProgress;
294
386
  private coerceDate;
295
387
  private toApiDate;
296
388
  private exportPdfWithRetry;
297
- private resolvePdfExportFont;
298
- private createEmbeddedPdfFont;
299
- private isFitToWidthError;
300
- private resetPdfModule;
301
- private wait;
302
- private getErrorMessage;
303
389
  private getExportFileName;
304
390
  private hexToRgb;
305
- private localizeTaskType;
306
- private readLegacyHolidays;
307
391
  formatDateValue(value: unknown): string;
308
392
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskSchedule, never>;
309
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TaskSchedule, "mt-task-schedule", never, { "modelType": { "alias": "modelType"; "required": false; "isSignal": true; }; "context": { "alias": "context"; "required": false; "isSignal": true; }; "dateFormat": { "alias": "dateFormat"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "langCode": { "alias": "langCode"; "required": false; "isSignal": true; }; "pdfFontData": { "alias": "pdfFontData"; "required": false; "isSignal": true; }; "pdfRtlFontData": { "alias": "pdfRtlFontData"; "required": false; "isSignal": true; }; "pdfFontSize": { "alias": "pdfFontSize"; "required": false; "isSignal": true; }; }, { "toolbarAction": "toolbarAction"; "actionBegin": "actionBegin"; "actionCompleted": "actionCompleted"; "loaded": "loaded"; "loadError": "loadError"; }, never, never, true, never>;
393
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TaskSchedule, "mt-task-schedule", never, { "context": { "alias": "context"; "required": false; "isSignal": true; }; }, { "toolbarAction": "toolbarAction"; "actionBegin": "actionBegin"; "actionCompleted": "actionCompleted"; "loaded": "loaded"; "loadError": "loadError"; }, never, never, true, never>;
310
394
  }
311
395
 
312
- declare const TASK_SCHEDULE_DATA_ADAPTER: InjectionToken<TaskScheduleDataAdapter>;
313
- declare class TaskScheduleBackendAdapter implements TaskScheduleDataAdapter {
396
+ declare class TaskScheduleFetchService implements TaskScheduleFetchDataAdapter {
314
397
  private readonly http;
315
398
  load(modelType: TaskScheduleModelType, context: TaskScheduleContext): Observable<TaskScheduleDataResult>;
316
- createTask(context: TaskScheduleContext, payload: TaskScheduleTaskMutation): Observable<unknown>;
317
- updateTask(context: TaskScheduleContext, taskId: number | string, payload: TaskScheduleTaskMutation): Observable<unknown>;
318
- deleteTask(context: TaskScheduleContext, taskId: number | string): Observable<unknown>;
319
- updateBulkTasks(context: TaskScheduleContext, payload: TaskScheduleTaskMutation[]): Observable<unknown>;
320
- updateParent(context: TaskScheduleContext, taskId: number | string, parentId: number | string | null): Observable<unknown>;
321
- updateOrder(context: TaskScheduleContext, payload: TaskScheduleTaskOrderUpdate[]): Observable<unknown>;
322
- updateProgress(context: TaskScheduleContext, taskId: number | string, payload: TaskScheduleTaskMutation): Observable<unknown>;
323
399
  importTasks(context: TaskScheduleContext, file: File): Observable<TaskScheduleImportResult>;
324
- applyImportedTasks(context: TaskScheduleContext, payload: TaskScheduleApplyImportPayload): Observable<unknown>;
325
- setBaseline(context: TaskScheduleContext, payload?: Record<string, unknown>): Observable<unknown>;
326
400
  exportTasks(context: TaskScheduleContext): Observable<Blob>;
327
- private mapRuntimeMutationPayload;
328
- private mapRuntimeBulkUpdatePayload;
329
- private mapRuntimeOrderUpdatePayload;
330
- private resolveRuntimeScheduleItemType;
331
- private loadCustomColumns;
332
- private resolveTreeRouteTemplate;
333
- private buildTreeRouteParams;
334
- private resolveTaskMutationEndpoint;
335
- private resolveApplyImportedTasksEndpoint;
336
- private resolveScheduleManagerEndpoint;
337
- private resolveApiUrl;
338
- private readHeaders;
339
- private buildIdempotencyKey;
340
- private unwrapResponse;
341
- private extractTaskArray;
342
- private normalizeTaskRows;
343
- private flattenResourceGroups;
344
- private attachGroupResource;
345
- private mergeTaskResources;
346
- private resolveResourceIdentity;
347
- private mapRuntimeTask;
348
- private applyModelTransformations;
401
+ loadDependencies(context: TaskScheduleContext): Observable<TaskScheduleDependency[]>;
402
+ loadTimeline(context: TaskScheduleContext, mode: TaskScheduleTimelineMode): Observable<TaskScheduleTimelineBucket[]>;
403
+ loadBaselineVersions(context: TaskScheduleContext): Observable<TaskScheduleBaselineVersion[]>;
404
+ loadBaselineSnapshot(context: TaskScheduleContext, version?: number | 'latest'): Observable<TaskScheduleBaselineSnapshot>;
405
+ private loadReadResult;
406
+ private loadBaselineResult;
407
+ private loadPhaseGateResult;
408
+ private readScheduleMode;
409
+ private mapQueryTasks;
410
+ private mapGroupedTasks;
411
+ private mapLooseTasks;
412
+ private mapTaskSource;
413
+ private mapCustomProperties;
414
+ private mapCustomValues;
415
+ private buildBaselineTasks;
416
+ private buildTree;
349
417
  private resolveResources;
350
- private mapTeamMemberResources;
351
- private extractObjectValue;
352
- private extractObjectArray;
353
- private extractCustomProperties;
354
- private mapCustomProperty;
355
- private normalizeLookupOptions;
356
- private readLegacyHolidaysFromLocalStorage;
357
- private extractArrayCandidate;
358
418
  private extractResources;
419
+ private mapTeamMemberResources;
420
+ private loadCustomColumns;
359
421
  private mapScheduleColumns;
360
422
  private normalizeCustomColumnKey;
361
423
  private readLocalizedName;
362
- private extractTaskResources;
363
- private extractAssignee;
364
- private extractStatus;
365
- private extractProgress;
366
- private extractDate;
367
- private backendError;
424
+ private readData;
425
+ private levelEndpoint;
426
+ private requireId;
368
427
  private readEndpoint;
428
+ private interpolateEndpointTemplate;
429
+ private extractTaskRows;
430
+ private extractArray;
431
+ private readObjectValue;
432
+ private readSourceValue;
433
+ private readNestedValue;
434
+ private readSourceRawValue;
435
+ private readObjectValueByKey;
436
+ private unwrapValue;
437
+ private unwrapRawValue;
438
+ private normalizeTaskType;
439
+ private localizeTaskType;
440
+ private normalizeResources;
441
+ private mergeResources;
442
+ private resolveAssignedTo;
443
+ private resolveResourceId;
444
+ private readResourceName;
445
+ private mapDependency;
446
+ private mapTimelineBucket;
447
+ private mapBaselineVersion;
448
+ private mapBaselineSnapshot;
449
+ private normalizeDependencyType;
450
+ private normalizeDuration;
451
+ private normalizeProgress;
452
+ private readNamedString;
453
+ private toDate;
454
+ private readLegacyHolidays;
369
455
  private readId;
370
- private firstDefined;
371
456
  private toNullableString;
372
457
  private toNullableNumber;
373
458
  private toTaskId;
374
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskScheduleBackendAdapter, never>;
375
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<TaskScheduleBackendAdapter>;
459
+ private isObject;
460
+ private isEmptyIdentityValue;
461
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskScheduleFetchService, never>;
462
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<TaskScheduleFetchService>;
376
463
  }
377
464
 
378
- declare class TaskScheduleQueueService {
379
- private readonly basicOrderColumns;
380
- private readonly currentOrderColumns;
381
- private readonly refreshTasks;
382
- readonly refreshTasks$: rxjs.Observable<void>;
383
- refresh(): void;
384
- reorderData(tasks: TaskScheduleTask[]): TaskScheduleTask[];
385
- applyStoredColumnOrder(columns: Array<Record<string, unknown>>, modelType: TaskScheduleModelType, context: TaskScheduleContext): Array<Record<string, unknown>>;
386
- reorderColumn(args: any, modelType: TaskScheduleModelType, context: TaskScheduleContext): void;
387
- private mapColumnsToOrder;
388
- private orderColumns;
389
- private getStorageKey;
390
- private getLegacyStorageKey;
391
- private hasDuplicateOrders;
392
- private safeParseOrder;
393
- private getLocalStorageItem;
394
- private setLocalStorageItem;
395
- private removeLocalStorageItem;
396
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskScheduleQueueService, never>;
397
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<TaskScheduleQueueService>;
465
+ declare class TaskScheduleActionService implements TaskScheduleActionDataAdapter {
466
+ private readonly http;
467
+ buildTaskMutation(task: unknown, options?: {
468
+ taskType?: unknown;
469
+ parentGuid?: string | null;
470
+ customProperties?: TaskScheduleCustomProperty[];
471
+ generalFields?: string[];
472
+ }): TaskScheduleTaskMutation;
473
+ createTask(context: TaskScheduleContext, payload: TaskScheduleTaskMutation): Observable<unknown>;
474
+ updateTask(context: TaskScheduleContext, taskId: number | string, payload: TaskScheduleTaskMutation): Observable<unknown>;
475
+ deleteTask(context: TaskScheduleContext, taskId: number | string): Observable<unknown>;
476
+ updateBulkTasks(context: TaskScheduleContext, payload: TaskScheduleTaskMutation[]): Observable<unknown>;
477
+ updateParent(context: TaskScheduleContext, taskId: number | string, parentId: number | string | null): Observable<unknown>;
478
+ updateOrder(context: TaskScheduleContext, payload: TaskScheduleTaskOrderUpdate[]): Observable<unknown>;
479
+ updateProgress(context: TaskScheduleContext, taskId: number | string, payload: TaskScheduleTaskMutation): Observable<unknown>;
480
+ applyImportedTasks(context: TaskScheduleContext, payload: TaskScheduleApplyImportPayload): Observable<unknown>;
481
+ setBaseline(context: TaskScheduleContext, payload?: Record<string, unknown>): Observable<unknown>;
482
+ private submitTaskMutation;
483
+ private buildProcessSubmitRequest;
484
+ private buildProcessSubmitFields;
485
+ private mapBulkItem;
486
+ private pushField;
487
+ private pushOwnField;
488
+ private appendCustomProps;
489
+ private buildCustomPropFields;
490
+ private resolveResourcesField;
491
+ private assignIfDefined;
492
+ private buildCustomProps;
493
+ private resolveParentId;
494
+ private serializePredecessors;
495
+ private dependencyTypeToken;
496
+ private normalizeDependencyType;
497
+ private resolveModuleKey;
498
+ private resolveTypeScope;
499
+ private normalizeTaskType;
500
+ private normalizeResources;
501
+ private readData;
502
+ private levelEndpoint;
503
+ private readEndpoint;
504
+ private interpolateEndpointTemplate;
505
+ private requireId;
506
+ private requireProcessId;
507
+ private readId;
508
+ private toTaskId;
509
+ private toNullableString;
510
+ private toNullableNumber;
511
+ private toNullableBoolean;
512
+ private readNamedString;
513
+ private normalizeDuration;
514
+ private normalizeProgress;
515
+ private toApiDate;
516
+ private coerceDate;
517
+ private hasOwn;
518
+ private isObject;
519
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskScheduleActionService, never>;
520
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<TaskScheduleActionService>;
398
521
  }
399
522
 
400
- declare function createGanttConfig(modelType: TaskScheduleModelKey, data: TaskScheduleDataResult, dateFormat: string, langCode?: 'en' | 'ar'): TaskScheduleGanttConfig;
401
-
402
- type TaskScheduleLanguage = 'en' | 'ar';
403
- declare function resolveTaskScheduleLanguage(preferred?: unknown, contextLangCode?: unknown): TaskScheduleLanguage;
404
-
405
523
  interface ImportPreviewRow {
406
524
  key: string;
407
525
  task: TaskScheduleTask;
@@ -411,25 +529,29 @@ interface ResourceOption {
411
529
  id: string | number;
412
530
  label: string;
413
531
  }
414
- declare class TaskScheduleImportModal {
415
- private readonly adapter;
416
- readonly visible: _angular_core.InputSignal<boolean>;
532
+ declare class TaskScheduleImportDialog {
533
+ readonly modal: ModalService;
534
+ private readonly ref;
535
+ private readonly fetchService;
536
+ private readonly actionService;
537
+ private readonly transloco;
538
+ private readonly selectionCellTpl;
539
+ private readonly taskCellTpl;
540
+ private readonly startDateCellTpl;
541
+ private readonly finishDateCellTpl;
542
+ private readonly actualStartDateCellTpl;
543
+ private readonly actualFinishDateCellTpl;
544
+ private readonly assignedToCellTpl;
545
+ private readonly progressCellTpl;
417
546
  readonly context: _angular_core.InputSignal<TaskScheduleContext | null>;
418
- readonly langCode: _angular_core.InputSignal<"en" | "ar" | null>;
419
- readonly title: _angular_core.InputSignal<string | null>;
420
547
  readonly maxRows: _angular_core.InputSignal<number>;
421
- readonly closed: _angular_core.OutputEmitterRef<void>;
422
- readonly imported: _angular_core.OutputEmitterRef<TaskScheduleImportResult>;
423
- readonly applied: _angular_core.OutputEmitterRef<{
424
- overrideCurrent: boolean;
425
- response: unknown;
426
- }>;
427
- readonly failed: _angular_core.OutputEmitterRef<string>;
428
548
  readonly selectedFile: _angular_core.WritableSignal<File | null>;
429
549
  readonly loadingImport: _angular_core.WritableSignal<boolean>;
430
550
  readonly loadingApply: _angular_core.WritableSignal<boolean>;
431
551
  readonly importResult: _angular_core.WritableSignal<TaskScheduleImportResult | null>;
432
552
  readonly selectedTaskKeys: _angular_core.WritableSignal<Set<string>>;
553
+ readonly errorMessage: _angular_core.WritableSignal<string | null>;
554
+ private readonly activeLang;
433
555
  readonly resolvedLangCode: _angular_core.Signal<"en" | "ar">;
434
556
  readonly isRtl: _angular_core.Signal<boolean>;
435
557
  readonly labels: _angular_core.Signal<{
@@ -460,21 +582,21 @@ declare class TaskScheduleImportModal {
460
582
  readonly hasSelection: _angular_core.Signal<boolean>;
461
583
  readonly canImport: _angular_core.Signal<boolean>;
462
584
  readonly canApply: _angular_core.Signal<boolean>;
585
+ readonly previewPageSize: _angular_core.Signal<number>;
586
+ readonly previewColumns: _angular_core.WritableSignal<ColumnDef[]>;
463
587
  onFileChanged(event: Event): void;
464
588
  importFile(): void;
465
589
  toggleRowSelection(rowKey: string, checked: boolean): void;
466
590
  selectAllRows(checked: boolean): void;
467
591
  applyImport(overrideCurrent: boolean): void;
468
592
  close(): void;
469
- trackByRow(_index: number, row: ImportPreviewRow): string;
470
- formatDate(value: unknown): string;
471
- toDateInputValue(value: unknown): string;
472
- resolveAssignedValue(task: TaskScheduleTask): string;
593
+ toDateFieldValue(value: unknown): Date | null;
594
+ resolveAssignedValue(task: TaskScheduleTask): string | number | null;
473
595
  normalizeProgress(value: unknown): number;
474
596
  onTaskTitleChanged(rowKey: string, value: string): void;
475
- onTaskDateChanged(rowKey: string, key: 'startDate' | 'finishDate' | 'actualStartDate' | 'actualFinishDate', value: string): void;
476
- onTaskAssignedToChanged(rowKey: string, value: string): void;
477
- onTaskProgressChanged(rowKey: string, value: string): void;
597
+ onTaskDateChanged(rowKey: string, key: 'startDate' | 'finishDate' | 'actualStartDate' | 'actualFinishDate', value: unknown): void;
598
+ onTaskAssignedToChanged(rowKey: string, value: unknown): void;
599
+ onTaskProgressChanged(rowKey: string, value: unknown): void;
478
600
  toAssignedEntity(task: TaskScheduleTask): EntityData;
479
601
  toProgressEntity(task: TaskScheduleTask): EntityData;
480
602
  private updateRowTask;
@@ -491,78 +613,56 @@ declare class TaskScheduleImportModal {
491
613
  private toApiDate;
492
614
  private formatDateForApi;
493
615
  private countTasks;
494
- private getErrorMessage;
495
- private emitError;
496
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskScheduleImportModal, never>;
497
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TaskScheduleImportModal, "mt-task-schedule-import-modal", never, { "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "context": { "alias": "context"; "required": false; "isSignal": true; }; "langCode": { "alias": "langCode"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "maxRows": { "alias": "maxRows"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "imported": "imported"; "applied": "applied"; "failed": "failed"; }, never, never, true, never>;
616
+ private setError;
617
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskScheduleImportDialog, never>;
618
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TaskScheduleImportDialog, "mt-task-schedule-import-dialog", never, { "context": { "alias": "context"; "required": false; "isSignal": true; }; "maxRows": { "alias": "maxRows"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
498
619
  }
499
620
 
500
- interface TaskScheduleModeOption {
501
- value: TaskScheduleModelType;
502
- label?: string;
503
- }
504
- declare class TaskScheduleShell {
505
- private readonly adapter;
621
+ declare class TaskScheduleHeader {
622
+ private readonly actionService;
506
623
  private readonly queueService;
624
+ private readonly transloco;
625
+ private readonly modal;
626
+ private readonly activeLang;
507
627
  readonly context: _angular_core.InputSignal<TaskScheduleContext | null>;
508
- readonly langCode: _angular_core.InputSignal<"en" | "ar" | null>;
509
- readonly dateFormat: _angular_core.InputSignal<string>;
510
- readonly height: _angular_core.InputSignal<string>;
511
- readonly modelType: _angular_core.InputSignal<string>;
512
- readonly modeOptions: _angular_core.InputSignal<TaskScheduleModeOption[] | null>;
513
- readonly allowEditMode: _angular_core.InputSignal<boolean>;
514
- readonly allowImport: _angular_core.InputSignal<boolean>;
515
- readonly allowSetBaseline: _angular_core.InputSignal<boolean>;
516
- readonly hasTasks: _angular_core.InputSignal<boolean>;
517
- readonly baselinePending: _angular_core.InputSignal<boolean>;
628
+ readonly title: _angular_core.InputSignal<string | null>;
629
+ readonly modeOptions: _angular_core.InputSignal<TaskScheduleModeOption[]>;
518
630
  readonly modeChanged: _angular_core.OutputEmitterRef<string>;
519
631
  readonly baselineSet: _angular_core.OutputEmitterRef<unknown>;
520
- readonly tasksExported: _angular_core.OutputEmitterRef<void>;
521
632
  readonly actionError: _angular_core.OutputEmitterRef<string>;
522
633
  readonly currentModelType: _angular_core.WritableSignal<string>;
523
- readonly showImportModal: _angular_core.WritableSignal<boolean>;
524
634
  readonly settingBaseline: _angular_core.WritableSignal<boolean>;
525
- readonly exportingTasks: _angular_core.WritableSignal<boolean>;
526
- readonly resolvedLangCode: _angular_core.Signal<"en" | "ar">;
635
+ readonly resolvedContext: _angular_core.Signal<TaskScheduleContext | null>;
636
+ readonly currentModelKey: _angular_core.Signal<_masterteam_task_schedule.TaskScheduleModelKey>;
527
637
  readonly labels: _angular_core.Signal<{
528
- mode: string;
529
- setBaseline: string;
638
+ title: string;
530
639
  pending: string;
640
+ setBaseline: string;
531
641
  import: string;
532
- export: string;
533
- exportFileName: string;
534
- baselineNotSupported: string;
535
- exportNotSupported: string;
536
- contextMissing: string;
537
- baselineDisabled: string;
538
642
  }>;
539
- readonly currentModelKey: _angular_core.Signal<_masterteam_task_schedule.TaskScheduleModelKey>;
540
643
  readonly resolvedModes: _angular_core.Signal<{
541
644
  value: string;
542
645
  label: string;
646
+ icon: string;
647
+ color: string;
543
648
  }[]>;
544
649
  readonly showSetBaselineAction: _angular_core.Signal<boolean>;
650
+ readonly baselinePending: _angular_core.Signal<boolean>;
545
651
  readonly canSetBaselineAction: _angular_core.Signal<boolean>;
546
652
  readonly showImportAction: _angular_core.Signal<boolean>;
547
653
  readonly canOpenImport: _angular_core.Signal<boolean>;
548
- readonly canExportTasks: _angular_core.Signal<boolean>;
549
654
  constructor();
550
655
  onModeChange(nextValue: string): void;
551
- openImportModal(): void;
552
- closeImportModal(): void;
656
+ openImportDialog(): void;
553
657
  setBaseline(): void;
554
- exportTasks(): void;
555
- onImportedTasksApplied(): void;
556
- onActionError(message: unknown): void;
557
- private resolveModeLabel;
558
- private downloadBlob;
559
658
  private getErrorMessage;
659
+ private translate;
560
660
  private emitError;
561
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskScheduleShell, never>;
562
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TaskScheduleShell, "mt-task-schedule-shell", never, { "context": { "alias": "context"; "required": false; "isSignal": true; }; "langCode": { "alias": "langCode"; "required": false; "isSignal": true; }; "dateFormat": { "alias": "dateFormat"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "modelType": { "alias": "modelType"; "required": false; "isSignal": true; }; "modeOptions": { "alias": "modeOptions"; "required": false; "isSignal": true; }; "allowEditMode": { "alias": "allowEditMode"; "required": false; "isSignal": true; }; "allowImport": { "alias": "allowImport"; "required": false; "isSignal": true; }; "allowSetBaseline": { "alias": "allowSetBaseline"; "required": false; "isSignal": true; }; "hasTasks": { "alias": "hasTasks"; "required": false; "isSignal": true; }; "baselinePending": { "alias": "baselinePending"; "required": false; "isSignal": true; }; }, { "modeChanged": "modeChanged"; "baselineSet": "baselineSet"; "tasksExported": "tasksExported"; "actionError": "actionError"; }, never, never, true, never>;
661
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskScheduleHeader, never>;
662
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TaskScheduleHeader, "mt-task-schedule-header", never, { "context": { "alias": "context"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "modeOptions": { "alias": "modeOptions"; "required": true; "isSignal": true; }; }, { "modeChanged": "modeChanged"; "baselineSet": "baselineSet"; "actionError": "actionError"; }, never, never, true, never>;
563
663
  }
564
664
 
565
665
  declare const TASK_SCHEDULE_DEFAULT_PDF_FONT: string;
566
666
 
567
- export { TASK_SCHEDULE_DATA_ADAPTER, TASK_SCHEDULE_DEFAULT_PDF_FONT, TaskSchedule, TaskScheduleBackendAdapter, TaskScheduleImportModal, TaskScheduleQueueService, TaskScheduleShell, createGanttConfig, normalizeTaskScheduleModelType, resolveTaskScheduleLanguage };
568
- export type { TaskScheduleApplyImportPayload, TaskScheduleContext, TaskScheduleContextEndpoints, TaskScheduleCustomProperty, TaskScheduleDataAdapter, TaskScheduleDataResult, TaskScheduleGanttConfig, TaskScheduleImportResult, TaskScheduleLanguage, TaskScheduleModeOption, TaskScheduleModelAlias, TaskScheduleModelKey, TaskScheduleModelType, TaskSchedulePdfFonts, TaskSchedulePropertyDependency, TaskSchedulePropertyViewType, TaskScheduleTask, TaskScheduleTaskMutation, TaskScheduleTaskOrderUpdate };
667
+ export { TASK_SCHEDULE_DEFAULT_PDF_FONT, TaskSchedule, TaskScheduleActionService, TaskScheduleFetchService, TaskScheduleHeader, TaskScheduleImportDialog, normalizeTaskScheduleModelType };
668
+ export type { TaskScheduleActionDataAdapter, TaskScheduleApplyImportPayload, TaskScheduleBaselineSnapshot, TaskScheduleBaselineSnapshotItem, TaskScheduleBaselineVersion, TaskScheduleContext, TaskScheduleContextEndpoints, TaskScheduleCoreContextEndpoints, TaskScheduleCustomProperty, TaskScheduleDataResult, TaskScheduleDependency, TaskScheduleDependencyMutation, TaskScheduleDependencyType, TaskScheduleFeatureContextEndpoints, TaskScheduleFetchDataAdapter, TaskScheduleGanttConfig, TaskScheduleImportResult, TaskScheduleModeOption, TaskScheduleModelAlias, TaskScheduleModelKey, TaskScheduleModelType, TaskSchedulePdfFonts, TaskSchedulePropertyDependency, TaskSchedulePropertyViewType, TaskScheduleTask, TaskScheduleTaskMutation, TaskScheduleTaskOrderUpdate, TaskScheduleTimelineBucket, TaskScheduleTimelineMode };