@progress/kendo-angular-scheduler 21.4.1-develop.1 → 22.0.0-develop.1
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.
- package/editing/recurrence/localization/messages.d.ts +1 -1
- package/editing/resource-editor-base.d.ts +1 -1
- package/editing-directives/editing-directive-base.d.ts +1 -1
- package/fesm2022/progress-kendo-angular-scheduler.mjs +313 -313
- package/localization/messages.d.ts +1 -1
- package/package.json +20 -28
- package/schematics/ngAdd/index.js +3 -3
- package/views/common/base-view.d.ts +1 -1
- package/views/common/configuration-view-base.d.ts +1 -1
- package/views/day-time/day-time-view-base.d.ts +1 -1
- package/views/day-time/day-time-view.component.d.ts +1 -1
- package/views/multi-day/multi-day-view-base.d.ts +1 -1
- package/views/timeline/timeline-base.d.ts +1 -1
- package/views/view-items/base-slot.directive.d.ts +1 -1
- package/views/view-items/base-view-item.d.ts +1 -1
- package/esm2022/common/constants.mjs +0 -8
- package/esm2022/common/default-model-fields.mjs +0 -20
- package/esm2022/common/dom-queries.mjs +0 -107
- package/esm2022/common/modifiers.mjs +0 -31
- package/esm2022/common/util.mjs +0 -227
- package/esm2022/data-binding.directive.mjs +0 -162
- package/esm2022/directives.mjs +0 -136
- package/esm2022/editing/date-time-picker.component.mjs +0 -190
- package/esm2022/editing/dialogs.service.mjs +0 -96
- package/esm2022/editing/edit-dialog-template.directive.mjs +0 -53
- package/esm2022/editing/edit-dialog.component.mjs +0 -679
- package/esm2022/editing/edit.service.mjs +0 -107
- package/esm2022/editing/local-data-changes.service.mjs +0 -18
- package/esm2022/editing/recurrence/end-rule-radio-button.directive.mjs +0 -77
- package/esm2022/editing/recurrence/localization/custom-messages.component.mjs +0 -44
- package/esm2022/editing/recurrence/localization/localized-messages.directive.mjs +0 -39
- package/esm2022/editing/recurrence/localization/messages.mjs +0 -239
- package/esm2022/editing/recurrence/localization/recurrence-localization.service.mjs +0 -47
- package/esm2022/editing/recurrence/recurrence-editor.component.mjs +0 -497
- package/esm2022/editing/recurrence/recurrence-end-rule-editor.component.mjs +0 -334
- package/esm2022/editing/recurrence/recurrence-frequency-editor.component.mjs +0 -105
- package/esm2022/editing/recurrence/recurrence-interval-editor.component.mjs +0 -169
- package/esm2022/editing/recurrence/recurrence-monthly-yearly-editor.component.mjs +0 -468
- package/esm2022/editing/recurrence/recurrence-weekday-rule-editor.component.mjs +0 -138
- package/esm2022/editing/recurrence/recurrence.service.mjs +0 -254
- package/esm2022/editing/recurrence/repeat-on-radio-button.directive.mjs +0 -81
- package/esm2022/editing/resource-editor-base.mjs +0 -59
- package/esm2022/editing/resource-multiple-editor.component.mjs +0 -101
- package/esm2022/editing/resource-single-editor.component.mjs +0 -82
- package/esm2022/editing/timezone-editor.component.mjs +0 -193
- package/esm2022/editing-directives/base-edit.service.mjs +0 -320
- package/esm2022/editing-directives/edit-service.interface.mjs +0 -5
- package/esm2022/editing-directives/editing-directive-base.mjs +0 -242
- package/esm2022/editing-directives/local-edit.service.mjs +0 -122
- package/esm2022/editing-directives/reactive-editing.directive.mjs +0 -132
- package/esm2022/editing-directives/utils.mjs +0 -107
- package/esm2022/events/add-event.mjs +0 -26
- package/esm2022/events/cancel-event.mjs +0 -14
- package/esm2022/events/create-event.mjs +0 -40
- package/esm2022/events/date-change-event.mjs +0 -29
- package/esm2022/events/drag-end-event.mjs +0 -46
- package/esm2022/events/drag-event.mjs +0 -54
- package/esm2022/events/drag-start-event.mjs +0 -30
- package/esm2022/events/edit-event-base.mjs +0 -32
- package/esm2022/events/edit-event.mjs +0 -30
- package/esm2022/events/event-click-event.mjs +0 -32
- package/esm2022/events/event-keydown-event.mjs +0 -28
- package/esm2022/events/more-events-click.mjs +0 -24
- package/esm2022/events/navigate-event.mjs +0 -26
- package/esm2022/events/preventable-event.mjs +0 -28
- package/esm2022/events/remove-event.mjs +0 -30
- package/esm2022/events/resize-end-event.mjs +0 -38
- package/esm2022/events/resize-event.mjs +0 -46
- package/esm2022/events/resize-start-event.mjs +0 -30
- package/esm2022/events/save-event.mjs +0 -18
- package/esm2022/events/slot-click-event.mjs +0 -44
- package/esm2022/events/slot-drag-end-event.mjs +0 -10
- package/esm2022/events/slot-drag-event.mjs +0 -40
- package/esm2022/events/slot-drag-start-event.mjs +0 -44
- package/esm2022/events/view-event-map.mjs +0 -35
- package/esm2022/events.mjs +0 -27
- package/esm2022/index.mjs +0 -83
- package/esm2022/loading.component.mjs +0 -52
- package/esm2022/localization/custom-messages.component.mjs +0 -56
- package/esm2022/localization/localized-messages.directive.mjs +0 -39
- package/esm2022/localization/messages.mjs +0 -614
- package/esm2022/localization/scheduler-localization.service.mjs +0 -31
- package/esm2022/navigation/focus-position.interface.mjs +0 -5
- package/esm2022/navigation/focus.service.mjs +0 -202
- package/esm2022/navigation/focusable-element.interface.mjs +0 -5
- package/esm2022/navigation/focusable.directive.mjs +0 -98
- package/esm2022/navigation/shortcuts.directive.mjs +0 -239
- package/esm2022/navigation.mjs +0 -6
- package/esm2022/package-metadata.mjs +0 -16
- package/esm2022/pdf/pdf-command.directive.mjs +0 -96
- package/esm2022/pdf/pdf-export-event.mjs +0 -10
- package/esm2022/pdf/pdf.component.mjs +0 -241
- package/esm2022/pdf/pdf.module.mjs +0 -42
- package/esm2022/pdf/pdf.service.mjs +0 -36
- package/esm2022/progress-kendo-angular-scheduler.mjs +0 -8
- package/esm2022/scheduler.component.mjs +0 -1981
- package/esm2022/scheduler.module.mjs +0 -138
- package/esm2022/toolbar/navigation.component.mjs +0 -391
- package/esm2022/toolbar/toolbar-context.mjs +0 -5
- package/esm2022/toolbar/toolbar-template.directive.mjs +0 -50
- package/esm2022/toolbar/toolbar.component.mjs +0 -168
- package/esm2022/toolbar/toolbar.service.mjs +0 -46
- package/esm2022/toolbar/view-selector.component.mjs +0 -181
- package/esm2022/types/actions.mjs +0 -5
- package/esm2022/types/create-form-group-args.interface.mjs +0 -5
- package/esm2022/types/crud-operation.enum.mjs +0 -18
- package/esm2022/types/current-time-settings.interface.mjs +0 -5
- package/esm2022/types/date-range.interface.mjs +0 -5
- package/esm2022/types/datepicker-options.interface.mjs +0 -5
- package/esm2022/types/edit-event-args.interface.mjs +0 -5
- package/esm2022/types/edit-mode.enum.mjs +0 -23
- package/esm2022/types/editable-settings.interface.mjs +0 -5
- package/esm2022/types/event-style-args.interface.mjs +0 -5
- package/esm2022/types/focusable-container.mjs +0 -5
- package/esm2022/types/group.interface.mjs +0 -5
- package/esm2022/types/numeric-options.interface.mjs +0 -5
- package/esm2022/types/ongoing-events-settings.interface.mjs +0 -5
- package/esm2022/types/resource.interface.mjs +0 -5
- package/esm2022/types/scheduler-event.mjs +0 -5
- package/esm2022/types/scheduler-model-fields.interface.mjs +0 -5
- package/esm2022/types/scheduler-slot.interface.mjs +0 -5
- package/esm2022/types/scheduler-view.mjs +0 -9
- package/esm2022/types/slot-class-args.interface.mjs +0 -5
- package/esm2022/types/slot-selection.mjs +0 -35
- package/esm2022/types/view-item.interface.mjs +0 -5
- package/esm2022/types.mjs +0 -12
- package/esm2022/views/agenda/agenda-header-item.component.mjs +0 -85
- package/esm2022/views/agenda/agenda-header.component.mjs +0 -75
- package/esm2022/views/agenda/agenda-task-item.component.mjs +0 -137
- package/esm2022/views/agenda/agenda-view-internal.component.mjs +0 -424
- package/esm2022/views/agenda/agenda-view-list.component.mjs +0 -256
- package/esm2022/views/agenda/agenda-view.component.mjs +0 -130
- package/esm2022/views/agenda/tasks.collection.mjs +0 -96
- package/esm2022/views/agenda/utils.mjs +0 -176
- package/esm2022/views/common/base-view.mjs +0 -1099
- package/esm2022/views/common/configuration-view-base.mjs +0 -164
- package/esm2022/views/common/dom-events.service.mjs +0 -22
- package/esm2022/views/common/hint-container.component.mjs +0 -41
- package/esm2022/views/common/repeat.pipe.mjs +0 -36
- package/esm2022/views/common/resize-hint.component.mjs +0 -97
- package/esm2022/views/common/resource-iterator.pipe.mjs +0 -49
- package/esm2022/views/common/scheduler-task.mjs +0 -5
- package/esm2022/views/common/slot-selectable.directive.mjs +0 -137
- package/esm2022/views/common/view-footer.component.mjs +0 -103
- package/esm2022/views/common/work-hours-footer.directive.mjs +0 -45
- package/esm2022/views/constants.mjs +0 -31
- package/esm2022/views/day-time/day-time-slot.service.mjs +0 -633
- package/esm2022/views/day-time/day-time-view-base.mjs +0 -244
- package/esm2022/views/day-time/day-time-view-item.component.mjs +0 -216
- package/esm2022/views/day-time/day-time-view.component.mjs +0 -437
- package/esm2022/views/day-time/event-slot.directive.mjs +0 -138
- package/esm2022/views/day-time/utils.mjs +0 -32
- package/esm2022/views/month/month-slot.component.mjs +0 -166
- package/esm2022/views/month/month-slot.service.mjs +0 -404
- package/esm2022/views/month/month-view-item.component.mjs +0 -161
- package/esm2022/views/month/month-view-renderer.component.mjs +0 -683
- package/esm2022/views/month/month-view.component.mjs +0 -203
- package/esm2022/views/month/multi-week-view.component.mjs +0 -202
- package/esm2022/views/month/utils.mjs +0 -107
- package/esm2022/views/multi-day/day-view.component.mjs +0 -186
- package/esm2022/views/multi-day/multi-day-view-base.mjs +0 -55
- package/esm2022/views/multi-day/multi-day-view-renderer.component.mjs +0 -1002
- package/esm2022/views/multi-day/multi-day-view.component.mjs +0 -197
- package/esm2022/views/multi-day/utils.mjs +0 -63
- package/esm2022/views/multi-day/week-view.component.mjs +0 -189
- package/esm2022/views/multi-day/work-week-view.component.mjs +0 -172
- package/esm2022/views/scheduler-view.directive.mjs +0 -65
- package/esm2022/views/templates/agenda-date-template.directive.mjs +0 -41
- package/esm2022/views/templates/agenda-time-template.directive.mjs +0 -46
- package/esm2022/views/templates/all-day-event-template.directive.mjs +0 -42
- package/esm2022/views/templates/all-day-slot-template.directive.mjs +0 -42
- package/esm2022/views/templates/date-header-template.directive.mjs +0 -42
- package/esm2022/views/templates/event-template.directive.mjs +0 -42
- package/esm2022/views/templates/group-header-template.directive.mjs +0 -42
- package/esm2022/views/templates/major-time-header-template.directive.mjs +0 -41
- package/esm2022/views/templates/minor-time-header-template.directive.mjs +0 -41
- package/esm2022/views/templates/month-day-slot-template.directive.mjs +0 -42
- package/esm2022/views/templates/multi-week-day-slot-template.directive.mjs +0 -42
- package/esm2022/views/templates/time-slot-template.directive.mjs +0 -43
- package/esm2022/views/templates.mjs +0 -16
- package/esm2022/views/timeline/timeline-base.mjs +0 -39
- package/esm2022/views/timeline/timeline-month-view.component.mjs +0 -211
- package/esm2022/views/timeline/timeline-multi-day-view.component.mjs +0 -649
- package/esm2022/views/timeline/timeline-view.component.mjs +0 -189
- package/esm2022/views/timeline/timeline-week-view.component.mjs +0 -181
- package/esm2022/views/timeline/utils.mjs +0 -60
- package/esm2022/views/utils.mjs +0 -373
- package/esm2022/views/view-context.service.mjs +0 -111
- package/esm2022/views/view-items/base-slot.directive.mjs +0 -104
- package/esm2022/views/view-items/base-slot.service.mjs +0 -82
- package/esm2022/views/view-items/base-view-item.mjs +0 -194
- package/esm2022/views/view-items/item-map.mjs +0 -38
- package/esm2022/views/view-items/types.mjs +0 -5
- package/esm2022/views/view-state.service.mjs +0 -144
- package/esm2022/views/year/utils.mjs +0 -60
- package/esm2022/views/year/year-view-internal.component.mjs +0 -471
- package/esm2022/views/year/year-view.component.mjs +0 -136
|
@@ -1,242 +0,0 @@
|
|
|
1
|
-
/**-----------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright © 2026 Progress Software Corporation. All rights reserved.
|
|
3
|
-
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
|
-
*-------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { Input, Output, EventEmitter, Directive } from '@angular/core';
|
|
6
|
-
import { SchedulerComponent } from '../scheduler.component';
|
|
7
|
-
import { merge } from 'rxjs';
|
|
8
|
-
import { LocalDataChangesService } from '../editing/local-data-changes.service';
|
|
9
|
-
import { LocalEditService } from './local-edit.service';
|
|
10
|
-
import { DialogsService } from '../editing/dialogs.service';
|
|
11
|
-
import { EditMode, CrudOperation } from '../types';
|
|
12
|
-
import { AddEvent } from '../events';
|
|
13
|
-
import { groupResources, assignValues, clone, setField, getField } from '../common/util';
|
|
14
|
-
import { diff, areEqual, seriesDate, updateRecurrenceRule } from './utils';
|
|
15
|
-
import { FocusService } from '../navigation';
|
|
16
|
-
import * as i0 from "@angular/core";
|
|
17
|
-
import * as i1 from "../scheduler.component";
|
|
18
|
-
import * as i2 from "../editing/local-data-changes.service";
|
|
19
|
-
import * as i3 from "../editing/dialogs.service";
|
|
20
|
-
import * as i4 from "../navigation";
|
|
21
|
-
/**
|
|
22
|
-
* @hidden
|
|
23
|
-
*/
|
|
24
|
-
export class EditingDirectiveBase {
|
|
25
|
-
scheduler;
|
|
26
|
-
localDataChangesService;
|
|
27
|
-
dialogsService;
|
|
28
|
-
focusService;
|
|
29
|
-
/**
|
|
30
|
-
* Fires before the editing directive renders the **Add** dialog.
|
|
31
|
-
*/
|
|
32
|
-
add = new EventEmitter();
|
|
33
|
-
/**
|
|
34
|
-
* Fires before the editing directive renders the **Edit** dialog.
|
|
35
|
-
*/
|
|
36
|
-
edit = new EventEmitter();
|
|
37
|
-
/**
|
|
38
|
-
* The edit service that will handle the editing operations.
|
|
39
|
-
*/
|
|
40
|
-
set editService(value) {
|
|
41
|
-
this.userEditService = value;
|
|
42
|
-
}
|
|
43
|
-
get editService() {
|
|
44
|
-
return this.userEditService || this.defaultEditService;
|
|
45
|
-
}
|
|
46
|
-
defaultTitle = 'No title';
|
|
47
|
-
subscriptions;
|
|
48
|
-
defaultEditService;
|
|
49
|
-
userEditService;
|
|
50
|
-
constructor(scheduler, localDataChangesService, dialogsService, focusService) {
|
|
51
|
-
this.scheduler = scheduler;
|
|
52
|
-
this.localDataChangesService = localDataChangesService;
|
|
53
|
-
this.dialogsService = dialogsService;
|
|
54
|
-
this.focusService = focusService;
|
|
55
|
-
this.defaultEditService = this.createDefaultService();
|
|
56
|
-
this.scheduler.editable = true;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* @hidden
|
|
60
|
-
*/
|
|
61
|
-
ngOnInit() {
|
|
62
|
-
this.subscriptions = merge(this.scheduler.slotDblClick, this.scheduler.create).subscribe(this.addHandler.bind(this));
|
|
63
|
-
this.subscriptions.add(this.scheduler.removeConfirmed.subscribe(this.removeHandler.bind(this)));
|
|
64
|
-
this.subscriptions.add(this.scheduler.cancel.subscribe(this.cancelHandler.bind(this)));
|
|
65
|
-
this.subscriptions.add(this.scheduler.resizeEndConfirmed.subscribe(this.resizeEndHandler.bind(this)));
|
|
66
|
-
this.subscriptions.add(this.scheduler.dragEndConfirmed.subscribe(this.dragEndHandler.bind(this)));
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* @hidden
|
|
70
|
-
*/
|
|
71
|
-
ngOnDestroy() {
|
|
72
|
-
this.subscriptions.unsubscribe();
|
|
73
|
-
}
|
|
74
|
-
createDefaultService() {
|
|
75
|
-
return new LocalEditService(this.scheduler, this.localDataChangesService);
|
|
76
|
-
}
|
|
77
|
-
addHandler(args) {
|
|
78
|
-
this.closeEditor();
|
|
79
|
-
if (!this.isEnabled('add')) {
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
const fields = this.scheduler.modelFields;
|
|
83
|
-
const dataItem = {};
|
|
84
|
-
setField(dataItem, fields.start, args.start);
|
|
85
|
-
setField(dataItem, fields.end, args.end);
|
|
86
|
-
setField(dataItem, fields.isAllDay, args.isAllDay);
|
|
87
|
-
setField(dataItem, fields.title, args.title);
|
|
88
|
-
const resources = groupResources(this.scheduler.group, this.scheduler.resources);
|
|
89
|
-
const slotResources = args.resources;
|
|
90
|
-
for (let idx = 0; idx < resources.length; idx++) {
|
|
91
|
-
const resource = resources[idx];
|
|
92
|
-
const value = getField(slotResources[idx], resource.valueField);
|
|
93
|
-
setField(dataItem, resource.field, resource.multiple ? [value] : value);
|
|
94
|
-
}
|
|
95
|
-
const addArgs = new AddEvent(this.scheduler, { dataItem });
|
|
96
|
-
this.add.emit(addArgs);
|
|
97
|
-
if (!addArgs.isDefaultPrevented()) {
|
|
98
|
-
this.scheduler.addEvent(this.createModel({
|
|
99
|
-
action: 'add',
|
|
100
|
-
isNew: true,
|
|
101
|
-
dataItem,
|
|
102
|
-
sender: this.scheduler,
|
|
103
|
-
}));
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
removeHandler({ dataItem }) {
|
|
107
|
-
if (!this.isEnabled('remove')) {
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
if (this.editService.isRecurring(dataItem)) {
|
|
111
|
-
this.dialogsService.openRecurringConfirmationDialog(CrudOperation.Remove)
|
|
112
|
-
.subscribe((editMode) => {
|
|
113
|
-
if (editMode !== undefined) {
|
|
114
|
-
this.handleRemove(dataItem, editMode);
|
|
115
|
-
this.focusService.focusContent();
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
this.dialogsService.openRemoveConfirmationDialog()
|
|
121
|
-
.subscribe((shouldRemove) => {
|
|
122
|
-
if (shouldRemove) {
|
|
123
|
-
this.handleRemove(dataItem, EditMode.Event);
|
|
124
|
-
this.focusService.focusContent();
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
cancelHandler() {
|
|
130
|
-
this.closeEditor();
|
|
131
|
-
}
|
|
132
|
-
closeEditor() {
|
|
133
|
-
this.scheduler.closeEvent();
|
|
134
|
-
}
|
|
135
|
-
handleUpdate(item, value, mode) {
|
|
136
|
-
const svc = this.editService;
|
|
137
|
-
if (mode === EditMode.Occurrence) {
|
|
138
|
-
// eslint-disable-next-line no-unused-expressions
|
|
139
|
-
svc.isException(item) ?
|
|
140
|
-
svc.update(item, value) :
|
|
141
|
-
svc.createException(item, value);
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
// Item is not recurring or we're editing the entire series
|
|
145
|
-
svc.update(item, value);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
handleRemove(item, mode) {
|
|
149
|
-
const svc = this.editService;
|
|
150
|
-
if (mode === EditMode.Series) {
|
|
151
|
-
svc.removeSeries(item);
|
|
152
|
-
}
|
|
153
|
-
else if (mode === EditMode.Occurrence) {
|
|
154
|
-
svc.isException(item) ?
|
|
155
|
-
svc.remove(item) :
|
|
156
|
-
svc.removeOccurrence(item);
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
// Item is not recurring
|
|
160
|
-
svc.remove(item);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
resizeEndHandler({ event, start, end }) {
|
|
164
|
-
if (areEqual(start, event.start) && areEqual(end, event.end)) {
|
|
165
|
-
return;
|
|
166
|
-
}
|
|
167
|
-
const dataItem = event.dataItem;
|
|
168
|
-
const fields = this.scheduler.modelFields;
|
|
169
|
-
let value = {};
|
|
170
|
-
setField(value, fields.start, start);
|
|
171
|
-
setField(value, fields.end, end);
|
|
172
|
-
if (this.editService.isRecurring(dataItem)) {
|
|
173
|
-
this.dialogsService.openRecurringConfirmationDialog(CrudOperation.Edit)
|
|
174
|
-
.subscribe((result) => {
|
|
175
|
-
let target = dataItem;
|
|
176
|
-
if (result === EditMode.Series) {
|
|
177
|
-
target = this.editService.findRecurrenceMaster(dataItem);
|
|
178
|
-
setField(value, fields.start, seriesDate(target, dataItem, value, fields.start));
|
|
179
|
-
setField(value, fields.end, seriesDate(target, dataItem, value, fields.end));
|
|
180
|
-
}
|
|
181
|
-
else if (result !== undefined) {
|
|
182
|
-
value = assignValues(clone(dataItem), value);
|
|
183
|
-
}
|
|
184
|
-
this.handleUpdate(target, value, result);
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
this.editService.update(dataItem, value);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
dragEndHandler({ event: { dataItem }, start, end, resources, isAllDay }) {
|
|
192
|
-
const modelFields = this.scheduler.modelFields;
|
|
193
|
-
const resourceFields = groupResources(this.scheduler.group, this.scheduler.resources).map(r => r.field);
|
|
194
|
-
const fields = [modelFields.start, modelFields.end, modelFields.isAllDay].concat(resourceFields);
|
|
195
|
-
let value = clone(resources);
|
|
196
|
-
setField(value, modelFields.start, start);
|
|
197
|
-
setField(value, modelFields.end, end);
|
|
198
|
-
setField(value, modelFields.isAllDay, isAllDay);
|
|
199
|
-
if (!diff(dataItem, value, fields)) {
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
if (this.editService.isRecurring(dataItem)) {
|
|
203
|
-
this.dialogsService.openRecurringConfirmationDialog(CrudOperation.Edit)
|
|
204
|
-
.subscribe((result) => {
|
|
205
|
-
let target = dataItem;
|
|
206
|
-
if (result === EditMode.Series) {
|
|
207
|
-
target = this.editService.findRecurrenceMaster(dataItem);
|
|
208
|
-
if (dataItem.recurrenceRule) {
|
|
209
|
-
const newRecurrenceRule = updateRecurrenceRule(dataItem, value);
|
|
210
|
-
if (newRecurrenceRule !== dataItem?.recurrenceRule) {
|
|
211
|
-
setField(value, modelFields.recurrenceRule, newRecurrenceRule);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
setField(value, modelFields.start, seriesDate(target, dataItem, value, modelFields.start));
|
|
215
|
-
setField(value, modelFields.end, seriesDate(target, dataItem, value, modelFields.end));
|
|
216
|
-
}
|
|
217
|
-
else if (result !== undefined) {
|
|
218
|
-
value = assignValues(clone(dataItem), value);
|
|
219
|
-
}
|
|
220
|
-
this.handleUpdate(target, value, result);
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
this.editService.update(dataItem, value);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
isEnabled(action) {
|
|
228
|
-
const editable = this.scheduler.editable;
|
|
229
|
-
return editable && editable[action] !== false;
|
|
230
|
-
}
|
|
231
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EditingDirectiveBase, deps: [{ token: i1.SchedulerComponent }, { token: i2.LocalDataChangesService }, { token: i3.DialogsService }, { token: i4.FocusService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
232
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: EditingDirectiveBase, inputs: { editService: "editService" }, outputs: { add: "add", edit: "edit" }, ngImport: i0 });
|
|
233
|
-
}
|
|
234
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EditingDirectiveBase, decorators: [{
|
|
235
|
-
type: Directive
|
|
236
|
-
}], ctorParameters: () => [{ type: i1.SchedulerComponent }, { type: i2.LocalDataChangesService }, { type: i3.DialogsService }, { type: i4.FocusService }], propDecorators: { add: [{
|
|
237
|
-
type: Output
|
|
238
|
-
}], edit: [{
|
|
239
|
-
type: Output
|
|
240
|
-
}], editService: [{
|
|
241
|
-
type: Input
|
|
242
|
-
}] } });
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
/**-----------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright © 2026 Progress Software Corporation. All rights reserved.
|
|
3
|
-
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
|
-
*-------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { isPresent, isRecurring, isException, readEvent, getField, setField, assignValues, clone } from '../common/util';
|
|
6
|
-
import { isDevMode } from '@angular/core';
|
|
7
|
-
import { guid } from '@progress/kendo-angular-common';
|
|
8
|
-
const isRecurrenceMaster = (ev) => !!(ev.id && ev.recurrenceRule);
|
|
9
|
-
/**
|
|
10
|
-
* @hidden
|
|
11
|
-
*/
|
|
12
|
-
export class LocalEditService {
|
|
13
|
-
scheduler;
|
|
14
|
-
localDataChangesService;
|
|
15
|
-
get fields() {
|
|
16
|
-
return this.scheduler.modelFields;
|
|
17
|
-
}
|
|
18
|
-
get hasLocalData() {
|
|
19
|
-
return isPresent(this.localDataChangesService.data);
|
|
20
|
-
}
|
|
21
|
-
get data() {
|
|
22
|
-
if (this.hasLocalData) {
|
|
23
|
-
return this.localDataChangesService.data;
|
|
24
|
-
}
|
|
25
|
-
return this.scheduler.events;
|
|
26
|
-
}
|
|
27
|
-
constructor(scheduler, localDataChangesService) {
|
|
28
|
-
this.scheduler = scheduler;
|
|
29
|
-
this.localDataChangesService = localDataChangesService;
|
|
30
|
-
}
|
|
31
|
-
create(item) {
|
|
32
|
-
const idField = this.fields.id;
|
|
33
|
-
const id = getField(item, idField);
|
|
34
|
-
if (!isPresent(id)) {
|
|
35
|
-
setField(item, idField, this.nextId());
|
|
36
|
-
}
|
|
37
|
-
this.data.push(item);
|
|
38
|
-
this.dataChanged();
|
|
39
|
-
}
|
|
40
|
-
createException(item, value) {
|
|
41
|
-
const exception = this.buildException(value);
|
|
42
|
-
this.removeOccurrenceInternal(item);
|
|
43
|
-
this.create(exception);
|
|
44
|
-
}
|
|
45
|
-
update(item, value) {
|
|
46
|
-
assignValues(item, value);
|
|
47
|
-
this.dataChanged();
|
|
48
|
-
}
|
|
49
|
-
remove(item) {
|
|
50
|
-
const idField = this.fields.id;
|
|
51
|
-
const itemId = getField(item, idField);
|
|
52
|
-
const data = this.data;
|
|
53
|
-
for (let idx = 0; idx < data.length; idx++) {
|
|
54
|
-
if (itemId === getField(data[idx], idField)) {
|
|
55
|
-
data.splice(idx, 1);
|
|
56
|
-
break;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
this.dataChanged();
|
|
60
|
-
}
|
|
61
|
-
removeSeries(item) {
|
|
62
|
-
const event = readEvent(item, this.fields);
|
|
63
|
-
const isHead = isRecurrenceMaster(event);
|
|
64
|
-
this.removeItemAndExceptions(isHead ? event.id : event.recurrenceId);
|
|
65
|
-
this.dataChanged();
|
|
66
|
-
}
|
|
67
|
-
removeOccurrence(item) {
|
|
68
|
-
this.removeOccurrenceInternal(item);
|
|
69
|
-
this.dataChanged();
|
|
70
|
-
}
|
|
71
|
-
findRecurrenceMaster(item) {
|
|
72
|
-
const fields = this.scheduler.modelFields;
|
|
73
|
-
const event = readEvent(item, fields);
|
|
74
|
-
const headId = isRecurrenceMaster(event) ? event.id : event.recurrenceId;
|
|
75
|
-
return this.data.find((dataItem) => getField(dataItem, fields.id) === headId);
|
|
76
|
-
}
|
|
77
|
-
isRecurring(event) {
|
|
78
|
-
return isRecurring(event, this.scheduler.modelFields);
|
|
79
|
-
}
|
|
80
|
-
isException(event) {
|
|
81
|
-
return isException(event, this.scheduler.modelFields);
|
|
82
|
-
}
|
|
83
|
-
nextId() {
|
|
84
|
-
return guid();
|
|
85
|
-
}
|
|
86
|
-
buildException(item) {
|
|
87
|
-
const fields = this.fields;
|
|
88
|
-
const head = this.findRecurrenceMaster(item);
|
|
89
|
-
if (!head) {
|
|
90
|
-
if (isDevMode()) {
|
|
91
|
-
throw new Error('Unable to find recurrence head for event. Please check that recurrenceId is set and refers to an existing event.');
|
|
92
|
-
}
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
const exception = clone(item);
|
|
96
|
-
setField(exception, fields.id, this.nextId());
|
|
97
|
-
setField(exception, fields.recurrenceId, getField(head, fields.id));
|
|
98
|
-
setField(exception, fields.recurrenceRule, null);
|
|
99
|
-
return exception;
|
|
100
|
-
}
|
|
101
|
-
removeItemAndExceptions(itemId) {
|
|
102
|
-
const data = this.data;
|
|
103
|
-
const fields = this.scheduler.modelFields;
|
|
104
|
-
for (let idx = data.length - 1; idx >= 0; idx--) {
|
|
105
|
-
if (itemId === getField(data[idx], fields.recurrenceId) || itemId === getField(data[idx], fields.id)) {
|
|
106
|
-
data.splice(idx, 1);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
removeOccurrenceInternal(item) {
|
|
111
|
-
const fields = this.fields;
|
|
112
|
-
const head = this.findRecurrenceMaster(item);
|
|
113
|
-
const exceptionDate = getField(item, fields.start);
|
|
114
|
-
const currentExceptions = getField(head, fields.recurrenceExceptions) || [];
|
|
115
|
-
setField(head, fields.recurrenceExceptions, [...currentExceptions, exceptionDate]);
|
|
116
|
-
}
|
|
117
|
-
dataChanged() {
|
|
118
|
-
if (this.hasLocalData) {
|
|
119
|
-
this.localDataChangesService.changes.emit();
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
/**-----------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright © 2026 Progress Software Corporation. All rights reserved.
|
|
3
|
-
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
|
-
*-------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { Directive, Input } from "@angular/core";
|
|
6
|
-
import { SchedulerComponent } from '../scheduler.component';
|
|
7
|
-
import { EditingDirectiveBase } from './editing-directive-base';
|
|
8
|
-
import { LocalDataChangesService } from '../editing/local-data-changes.service';
|
|
9
|
-
import { markAllAsTouched } from './utils';
|
|
10
|
-
import { DialogsService } from '../editing/dialogs.service';
|
|
11
|
-
import { CrudOperation } from '../types';
|
|
12
|
-
import { EditMode } from '../types/edit-mode.enum';
|
|
13
|
-
import { EditEvent } from '../events';
|
|
14
|
-
import { filter } from 'rxjs/operators';
|
|
15
|
-
import { FocusService } from "../navigation";
|
|
16
|
-
import * as i0 from "@angular/core";
|
|
17
|
-
import * as i1 from "../scheduler.component";
|
|
18
|
-
import * as i2 from "../editing/local-data-changes.service";
|
|
19
|
-
import * as i3 from "../editing/dialogs.service";
|
|
20
|
-
import * as i4 from "../navigation";
|
|
21
|
-
/**
|
|
22
|
-
* A directive that encapsulates editing operations for the Scheduler using [Angular Reactive Forms](link:site.data.urls.angular['reactiveforms']) ([see example](slug:editing_scheduler)).
|
|
23
|
-
*
|
|
24
|
-
* Handles event editing, saving, and form validation logic for the Scheduler component.
|
|
25
|
-
* Provides integration with custom form group creation and supports recurring event editing scenarios.
|
|
26
|
-
*
|
|
27
|
-
* @example
|
|
28
|
-
* ```html
|
|
29
|
-
* <kendo-scheduler
|
|
30
|
-
* [kendoSchedulerBinding]="events"
|
|
31
|
-
* [kendoSchedulerReactiveEditing]="createFormGroup">
|
|
32
|
-
* </kendo-scheduler>
|
|
33
|
-
* ```
|
|
34
|
-
*
|
|
35
|
-
* @remarks
|
|
36
|
-
* Applied to: {@link SchedulerComponent}
|
|
37
|
-
*/
|
|
38
|
-
export class ReactiveEditingDirective extends EditingDirectiveBase {
|
|
39
|
-
scheduler;
|
|
40
|
-
localDataChangesService;
|
|
41
|
-
dialogsService;
|
|
42
|
-
/**
|
|
43
|
-
* The function that creates the `FormGroup` for the edited model.
|
|
44
|
-
*/
|
|
45
|
-
createFormGroup;
|
|
46
|
-
constructor(scheduler, localDataChangesService, dialogsService, focusService) {
|
|
47
|
-
super(scheduler, localDataChangesService, dialogsService, focusService);
|
|
48
|
-
this.scheduler = scheduler;
|
|
49
|
-
this.localDataChangesService = localDataChangesService;
|
|
50
|
-
this.dialogsService = dialogsService;
|
|
51
|
-
}
|
|
52
|
-
ngOnInit() {
|
|
53
|
-
super.ngOnInit();
|
|
54
|
-
this.subscriptions.add(this.scheduler.eventDblClick.subscribe(this.editHandler.bind(this)));
|
|
55
|
-
this.subscriptions.add(this.scheduler.save.subscribe(this.saveHandler.bind(this)));
|
|
56
|
-
}
|
|
57
|
-
editHandler(args) {
|
|
58
|
-
if (!this.isEnabled('edit')) {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
const editArgs = new EditEvent(this.scheduler, { dataItem: args.event.dataItem, event: args.event });
|
|
62
|
-
this.edit.emit(editArgs);
|
|
63
|
-
if (editArgs.isDefaultPrevented()) {
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
let dataItem = args.event.dataItem;
|
|
67
|
-
if (this.editService.isRecurring(dataItem)) {
|
|
68
|
-
this.dialogsService.openRecurringConfirmationDialog(CrudOperation.Edit)
|
|
69
|
-
.pipe(filter(mode => mode !== undefined))
|
|
70
|
-
.subscribe((mode) => {
|
|
71
|
-
if (mode === EditMode.Series) {
|
|
72
|
-
dataItem = this.editService.findRecurrenceMaster(dataItem);
|
|
73
|
-
}
|
|
74
|
-
const group = this.createModel({
|
|
75
|
-
action: 'edit',
|
|
76
|
-
isNew: false,
|
|
77
|
-
mode,
|
|
78
|
-
dataItem,
|
|
79
|
-
sender: this.scheduler,
|
|
80
|
-
});
|
|
81
|
-
this.scheduler.editEvent(dataItem, { group, mode });
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
const group = this.createModel({
|
|
86
|
-
action: 'edit',
|
|
87
|
-
isNew: false,
|
|
88
|
-
mode: EditMode.Event,
|
|
89
|
-
dataItem,
|
|
90
|
-
sender: this.scheduler,
|
|
91
|
-
});
|
|
92
|
-
this.scheduler.editEvent(dataItem, { group });
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
saveHandler(args) {
|
|
96
|
-
if (this.isFormValid(args)) {
|
|
97
|
-
const formValue = args.formGroup.getRawValue();
|
|
98
|
-
if (args.isNew) {
|
|
99
|
-
this.editService.create(formValue);
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
this.handleUpdate(args.dataItem, formValue, args.mode);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
this.closeEditor();
|
|
106
|
-
}
|
|
107
|
-
createModel(args) {
|
|
108
|
-
return this.createFormGroup(args);
|
|
109
|
-
}
|
|
110
|
-
isFormValid({ formGroup, isNew }) {
|
|
111
|
-
if (formGroup.valid) {
|
|
112
|
-
return true;
|
|
113
|
-
}
|
|
114
|
-
if (!formGroup.dirty && !isNew) {
|
|
115
|
-
return false;
|
|
116
|
-
}
|
|
117
|
-
markAllAsTouched(formGroup);
|
|
118
|
-
return false;
|
|
119
|
-
}
|
|
120
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReactiveEditingDirective, deps: [{ token: i1.SchedulerComponent }, { token: i2.LocalDataChangesService }, { token: i3.DialogsService }, { token: i4.FocusService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
121
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: ReactiveEditingDirective, isStandalone: true, selector: "[kendoSchedulerReactiveEditing]", inputs: { createFormGroup: ["kendoSchedulerReactiveEditing", "createFormGroup"] }, usesInheritance: true, ngImport: i0 });
|
|
122
|
-
}
|
|
123
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReactiveEditingDirective, decorators: [{
|
|
124
|
-
type: Directive,
|
|
125
|
-
args: [{
|
|
126
|
-
selector: '[kendoSchedulerReactiveEditing]',
|
|
127
|
-
standalone: true
|
|
128
|
-
}]
|
|
129
|
-
}], ctorParameters: () => [{ type: i1.SchedulerComponent }, { type: i2.LocalDataChangesService }, { type: i3.DialogsService }, { type: i4.FocusService }], propDecorators: { createFormGroup: [{
|
|
130
|
-
type: Input,
|
|
131
|
-
args: ['kendoSchedulerReactiveEditing']
|
|
132
|
-
}] } });
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/**-----------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright © 2026 Progress Software Corporation. All rights reserved.
|
|
3
|
-
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
|
-
*-------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { getField } from '../common/util';
|
|
6
|
-
import { parseRule, serializeRule } from '@progress/kendo-recurrence';
|
|
7
|
-
/**
|
|
8
|
-
* @hidden
|
|
9
|
-
*/
|
|
10
|
-
export const markAllAsTouched = (control) => {
|
|
11
|
-
control.markAsTouched();
|
|
12
|
-
if (control.hasOwnProperty('controls')) {
|
|
13
|
-
const controls = control.controls;
|
|
14
|
-
for (const inner in controls) {
|
|
15
|
-
if (controls.hasOwnProperty(inner)) {
|
|
16
|
-
markAllAsTouched(controls[inner]);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
/**
|
|
22
|
-
* @hidden
|
|
23
|
-
*/
|
|
24
|
-
export function diff(obj1, obj2, fields) {
|
|
25
|
-
for (let idx = 0; idx < fields.length; idx++) {
|
|
26
|
-
const field = fields[idx];
|
|
27
|
-
if (!areEqual(getField(obj1, field), getField(obj2, field))) {
|
|
28
|
-
return true;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return false;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* @hidden
|
|
35
|
-
*/
|
|
36
|
-
export function areEqual(value1, value2) {
|
|
37
|
-
if (value1 && value1.getTime && value2 && value2.getTime) {
|
|
38
|
-
return value1.getTime() === value2.getTime();
|
|
39
|
-
}
|
|
40
|
-
else if (Array.isArray(value1)) {
|
|
41
|
-
if (!Array.isArray(value2) || value1.length !== value2.length) {
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
for (let idx = 0; idx < value1.length; idx++) {
|
|
45
|
-
if (value1[idx] !== value2[idx]) {
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
return value1 == value2;
|
|
52
|
-
}
|
|
53
|
-
const DATE_ACCESSORS = ['getFullYear', 'getMonth', 'getDate', 'getHours', 'getMinutes', 'getSeconds', 'getMilliseconds'];
|
|
54
|
-
/**
|
|
55
|
-
* @hidden
|
|
56
|
-
*/
|
|
57
|
-
export function seriesDate(head, occurrence, current, field) {
|
|
58
|
-
const values = [];
|
|
59
|
-
const headDate = getField(head, field);
|
|
60
|
-
const occurrenceDate = getField(occurrence, field);
|
|
61
|
-
const currentDate = getField(current, field);
|
|
62
|
-
DATE_ACCESSORS.forEach(accessor => {
|
|
63
|
-
values.push(occurrenceDate[accessor]() === currentDate[accessor]() ? headDate[accessor]() : currentDate[accessor]());
|
|
64
|
-
});
|
|
65
|
-
return new Date(...values);
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* @hidden
|
|
69
|
-
*/
|
|
70
|
-
export function updateRecurrenceRule(valueSrc, valueGoal) {
|
|
71
|
-
const rrule = parseRule({ recurrenceRule: valueSrc.recurrenceRule });
|
|
72
|
-
// parseRule sets weekStart to 0 if not present which then adds it to the serialized rule
|
|
73
|
-
if (!valueSrc.recurrenceRule.includes("WKST")) {
|
|
74
|
-
rrule.weekStart = undefined;
|
|
75
|
-
}
|
|
76
|
-
if (valueSrc.start?.getDate() !== valueGoal.start?.getDate()) {
|
|
77
|
-
if (rrule.byYearDay?.length > 0) {
|
|
78
|
-
// when the event is recurring on more than one day of the year
|
|
79
|
-
const itemIndex = rrule.byYearDay.findIndex(yearDay => yearDay === valueSrc.start?.getDate());
|
|
80
|
-
if (itemIndex !== -1) {
|
|
81
|
-
rrule.byYearDay[itemIndex] = valueGoal.start?.getDate();
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
if (rrule.byMonthDay?.length > 0) {
|
|
85
|
-
// when the event is recurring on more than one day of the month
|
|
86
|
-
const itemIndex = rrule.byMonthDay.findIndex(monthDay => monthDay === valueSrc.start?.getDate());
|
|
87
|
-
if (itemIndex !== -1) {
|
|
88
|
-
rrule.byMonthDay[itemIndex] = valueGoal.start?.getDate();
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
if (valueSrc.start?.getDay() !== valueGoal.start?.getDay() && rrule.byWeekDay?.length > 0) {
|
|
93
|
-
// when the event is recurring on more than one day of the week
|
|
94
|
-
const itemIndex = rrule.byWeekDay.findIndex(weekDayRule => weekDayRule.day === valueSrc.start?.getDay());
|
|
95
|
-
if (itemIndex !== -1) {
|
|
96
|
-
rrule.byWeekDay[itemIndex].day = valueGoal.start?.getDay();
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
if (valueSrc.start?.getMonth() !== valueGoal.start?.getMonth() && rrule.byMonth?.length > 0) {
|
|
100
|
-
// when the event is recurring on more than one month of the year
|
|
101
|
-
const itemIndex = rrule.byMonth.findIndex(month => month === valueSrc.start?.getMonth());
|
|
102
|
-
if (itemIndex !== -1) {
|
|
103
|
-
rrule.byMonth[itemIndex] = valueGoal.start?.getMonth();
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
return serializeRule(rrule);
|
|
107
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**-----------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright © 2026 Progress Software Corporation. All rights reserved.
|
|
3
|
-
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
|
-
*-------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { PreventableEvent } from './preventable-event';
|
|
6
|
-
/**
|
|
7
|
-
* Represents the arguments for the `add` event of the editing directives.
|
|
8
|
-
*/
|
|
9
|
-
export class AddEvent extends PreventableEvent {
|
|
10
|
-
/**
|
|
11
|
-
* Provides the data for binding the **Add** dialog.
|
|
12
|
-
*/
|
|
13
|
-
dataItem;
|
|
14
|
-
/**
|
|
15
|
-
* Provides a reference to the Scheduler instance that triggered the event.
|
|
16
|
-
*/
|
|
17
|
-
sender;
|
|
18
|
-
/**
|
|
19
|
-
* @hidden
|
|
20
|
-
*/
|
|
21
|
-
constructor(sender, args) {
|
|
22
|
-
super();
|
|
23
|
-
this.sender = sender;
|
|
24
|
-
Object.assign(this, args);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**-----------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright © 2026 Progress Software Corporation. All rights reserved.
|
|
3
|
-
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
|
-
*-------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { EditEventBase } from './edit-event-base';
|
|
6
|
-
/**
|
|
7
|
-
* Represents the arguments for the `cancel` event.
|
|
8
|
-
*/
|
|
9
|
-
export class CancelEvent extends EditEventBase {
|
|
10
|
-
/**
|
|
11
|
-
* Provides the edited `formGroup` instance.
|
|
12
|
-
*/
|
|
13
|
-
formGroup;
|
|
14
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/**-----------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright © 2026 Progress Software Corporation. All rights reserved.
|
|
3
|
-
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
|
-
*-------------------------------------------------------------------------------------------*/
|
|
5
|
-
/**
|
|
6
|
-
* Represents the arguments for the `create` event.
|
|
7
|
-
*/
|
|
8
|
-
export class CreateEvent {
|
|
9
|
-
/**
|
|
10
|
-
* Provides the start date of the slot.
|
|
11
|
-
*/
|
|
12
|
-
start;
|
|
13
|
-
/**
|
|
14
|
-
* Provides the end date of the slot.
|
|
15
|
-
*/
|
|
16
|
-
end;
|
|
17
|
-
/**
|
|
18
|
-
* Indicates if the slot is all-day.
|
|
19
|
-
*/
|
|
20
|
-
isAllDay;
|
|
21
|
-
/**
|
|
22
|
-
* Provides the resources of the slot.
|
|
23
|
-
*/
|
|
24
|
-
resources;
|
|
25
|
-
/**
|
|
26
|
-
* Provides the original DOM event.
|
|
27
|
-
*/
|
|
28
|
-
originalEvent;
|
|
29
|
-
/**
|
|
30
|
-
* Provides a reference to the Scheduler instance that triggered the event.
|
|
31
|
-
*/
|
|
32
|
-
sender;
|
|
33
|
-
/**
|
|
34
|
-
* @hidden
|
|
35
|
-
*/
|
|
36
|
-
constructor(sender, args) {
|
|
37
|
-
this.sender = sender;
|
|
38
|
-
Object.assign(this, args);
|
|
39
|
-
}
|
|
40
|
-
}
|