From 1cbfe11eff41abf0293fa87b7a9d88762f1c2042 Mon Sep 17 00:00:00 2001 From: Vlada Skorokhodova Date: Mon, 30 Mar 2026 14:35:15 +0400 Subject: [PATCH 1/7] Scheduler: add Resolve Time Conflicts demo description + update function name --- .../Angular/app/app.component.ts | 6 ++--- .../ResolveTimeConflicts/React/App.tsx | 10 +++---- .../ResolveTimeConflicts/ReactJs/App.js | 10 +++---- .../ResolveTimeConflicts/Vue/App.vue | 6 ++--- .../ResolveTimeConflicts/description.md | 26 +++++++++++++++++++ .../ResolveTimeConflicts/jQuery/index.js | 6 ++--- 6 files changed, 45 insertions(+), 19 deletions(-) create mode 100644 apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md diff --git a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/Angular/app/app.component.ts b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/Angular/app/app.component.ts index 280f6a53cbd8..29afc9735480 100644 --- a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/Angular/app/app.component.ts +++ b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/Angular/app/app.component.ts @@ -163,7 +163,7 @@ export class AppComponent { ); } - private alertConflictIfNeeded( + private handleConflict( e: DxSchedulerTypes.AppointmentAddingEvent | DxSchedulerTypes.AppointmentUpdatingEvent, appointmentData: Appointment, ): void { @@ -195,11 +195,11 @@ export class AppComponent { } onAppointmentAdding(e: DxSchedulerTypes.AppointmentAddingEvent): void { - this.alertConflictIfNeeded(e, e.appointmentData as Appointment); + this.handleConflict(e, e.appointmentData as Appointment); } onAppointmentUpdating(e: DxSchedulerTypes.AppointmentUpdatingEvent): void { - this.alertConflictIfNeeded(e, { ...e.oldData, ...e.newData } as Appointment); + this.handleConflict(e, { ...e.oldData, ...e.newData } as Appointment); } onOverlappingRuleChanged(e: DxSelectBoxTypes.ValueChangedEvent): void { diff --git a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/React/App.tsx b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/React/App.tsx index 492e0e8b7002..30dc20a31240 100644 --- a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/React/App.tsx +++ b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/React/App.tsx @@ -112,7 +112,7 @@ const App = () => { formRef.current?.option('elementAttr.class', show ? '' : 'hide-informer'); }, []); - const alertConflictIfNeeded = useCallback(( + const handleConflict = useCallback(( e: SchedulerTypes.AppointmentAddingEvent | SchedulerTypes.AppointmentUpdatingEvent, appointmentData: Appointment, ) => { @@ -144,12 +144,12 @@ const App = () => { }, [setConflictError]); const onAppointmentAdding = useCallback((e: SchedulerTypes.AppointmentAddingEvent) => { - alertConflictIfNeeded(e, e.appointmentData as Appointment); - }, [alertConflictIfNeeded]); + handleConflict(e, e.appointmentData as Appointment); + }, [handleConflict]); const onAppointmentUpdating = useCallback((e: SchedulerTypes.AppointmentUpdatingEvent) => { - alertConflictIfNeeded(e, { ...e.oldData, ...e.newData } as Appointment); - }, [alertConflictIfNeeded]); + handleConflict(e, { ...e.oldData, ...e.newData } as Appointment); + }, [handleConflict]); const popupOptions = useMemo(() => ({ onInitialized: (e: PopupTypes.InitializedEvent) => { diff --git a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/ReactJs/App.js b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/ReactJs/App.js index 0d59b060af7e..d81dd24847dc 100644 --- a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/ReactJs/App.js +++ b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/ReactJs/App.js @@ -80,7 +80,7 @@ const App = () => { showConflictErrorRef.current = show; formRef.current?.option('elementAttr.class', show ? '' : 'hide-informer'); }, []); - const alertConflictIfNeeded = useCallback( + const handleConflict = useCallback( (e, appointmentData) => { if (!detectConflict(e.component, appointmentData, overlappingRuleRef.current)) { setConflictError(false); @@ -113,15 +113,15 @@ const App = () => { ); const onAppointmentAdding = useCallback( (e) => { - alertConflictIfNeeded(e, e.appointmentData); + handleConflict(e, e.appointmentData); }, - [alertConflictIfNeeded], + [handleConflict], ); const onAppointmentUpdating = useCallback( (e) => { - alertConflictIfNeeded(e, { ...e.oldData, ...e.newData }); + handleConflict(e, { ...e.oldData, ...e.newData }); }, - [alertConflictIfNeeded], + [handleConflict], ); const popupOptions = useMemo( () => ({ diff --git a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/Vue/App.vue b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/Vue/App.vue index 9a00cfa5be06..d204ca54f190 100644 --- a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/Vue/App.vue +++ b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/Vue/App.vue @@ -189,7 +189,7 @@ const popupOptions = { }, }; -const alertConflictIfNeeded = ( +const handleConflict = ( e: DxSchedulerTypes.AppointmentAddingEvent | DxSchedulerTypes.AppointmentUpdatingEvent, appointmentData: Appointment, ) => { @@ -221,11 +221,11 @@ const alertConflictIfNeeded = ( }; const onAppointmentAdding = (e: DxSchedulerTypes.AppointmentAddingEvent) => { - alertConflictIfNeeded(e, e.appointmentData as Appointment); + handleConflict(e, e.appointmentData as Appointment); }; const onAppointmentUpdating = (e: DxSchedulerTypes.AppointmentUpdatingEvent) => { - alertConflictIfNeeded(e, { ...e.oldData, ...e.newData } as Appointment); + handleConflict(e, { ...e.oldData, ...e.newData } as Appointment); }; const onFormInitialized = (e: DxFormTypes.InitializedEvent) => { diff --git a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md new file mode 100644 index 000000000000..75e49124aa42 --- /dev/null +++ b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md @@ -0,0 +1,26 @@ +This demo shows how to prevent appointment time conflicts in DevExtreme Scheduler. Use the **Overlapping Rule** select-box to see how conflict behavior changes for appointments across resources. + + +### Detect Conflicts + +Handle the [onAppointmentAdding](/Documentation/ApiReference/UI_Components/dxScheduler/Configuration/#onAppointmentAdding) and [onAppointmentUpdating](/Documentation/ApiReference/UI_Components/dxScheduler/Configuration/#onAppointmentUpdating) events to intercept new and updated appointments. Set `e.cancel = true` to block the operation if a conflict is found. + +To detect conflicts, call [getOccurrences](/Documentation/ApiReference/UI_Components/dxScheduler/Methods/#getOccurrences) to expand both the new and existing appointments into individual occurrences within the target range (required for [recurring appointments](/Documentation/Guide/UI_Components/Scheduler/Appointments/Appointment_Types/#Recurring_Appointments)), then compare them for time overlaps. + +### Overlapping Rules + +The demo supports two modes: + +- **Allow across resources**: only appointments assigned to the *same* resource (assignee) block each other. +- **Disallow all overlaps**: any time overlap is blocked, regardless of resource assignment. + +To implement resource-aware checks, compare the `assigneeId` field values across new and existing appointments. + +### Display Errors + +When a conflict is detected, the demo displays the error in the following ways: + +- If an appointment edit form is open, an inline validation message appears. +- Otherwise, a dialog opens. + +To display inline validation, add a custom form item with `customizeItem` inside [editing.form](/Documentation/ApiReference/UI_Components/dxScheduler/Configuration/editing/form/) and attach custom `validationRules` to the time editors. \ No newline at end of file diff --git a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/jQuery/index.js b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/jQuery/index.js index 7b07dd1a5189..f155484199d5 100644 --- a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/jQuery/index.js +++ b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/jQuery/index.js @@ -109,10 +109,10 @@ $(() => { }, }, onAppointmentAdding(e) { - alertConflictIfNeeded(e, e.appointmentData); + handleConflict(e, e.appointmentData); }, onAppointmentUpdating(e) { - alertConflictIfNeeded(e, e.newData); + handleConflict(e, e.newData); }, }).dxScheduler('instance'); @@ -121,7 +121,7 @@ $(() => { form?.option('elementAttr.class', show ? '' : 'hide-informer'); } - function alertConflictIfNeeded(e, appointmentData) { + function handleConflict(e, appointmentData) { if (!detectConflict(appointmentData)) { setConflictError(false); return; From 295ed4b918e656aa80cd0ae9ff010fc4487498fc Mon Sep 17 00:00:00 2001 From: Vlada Skorokhodova Date: Mon, 30 Mar 2026 15:37:30 +0400 Subject: [PATCH 2/7] Minor fix --- apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md index 75e49124aa42..28f0d1a8e3c2 100644 --- a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md +++ b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md @@ -1,4 +1,4 @@ -This demo shows how to prevent appointment time conflicts in DevExtreme Scheduler. Use the **Overlapping Rule** select-box to see how conflict behavior changes for appointments across resources. +This example demonstrates how to prevent appointment time conflicts in DevExtreme Scheduler. Use the **Overlapping Rule** select-box to see how conflict behavior changes for appointments across resources. ### Detect Conflicts From e138bc903cb02658e233af73c4bb6b84e630c45b Mon Sep 17 00:00:00 2001 From: Vlada Skorokhodova <94827090+vladaskorohodova@users.noreply.github.com> Date: Wed, 1 Apr 2026 10:59:51 +0400 Subject: [PATCH 3/7] Apply suggestions from code review Co-authored-by: Vladimir Abadzhev Signed-off-by: Vlada Skorokhodova <94827090+vladaskorohodova@users.noreply.github.com> --- .../ResolveTimeConflicts/description.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md index 28f0d1a8e3c2..f0982a91a1f2 100644 --- a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md +++ b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md @@ -1,26 +1,26 @@ -This example demonstrates how to prevent appointment time conflicts in DevExtreme Scheduler. Use the **Overlapping Rule** select-box to see how conflict behavior changes for appointments across resources. +This example prevents appointment time conflicts in DevExtreme Scheduler. Use the **Allow Overlapping Appointments** select-box to select a time conflict resolution mode. ### Detect Conflicts -Handle the [onAppointmentAdding](/Documentation/ApiReference/UI_Components/dxScheduler/Configuration/#onAppointmentAdding) and [onAppointmentUpdating](/Documentation/ApiReference/UI_Components/dxScheduler/Configuration/#onAppointmentUpdating) events to intercept new and updated appointments. Set `e.cancel = true` to block the operation if a conflict is found. +Handle the [onAppointmentAdding](/Documentation/ApiReference/UI_Components/dxScheduler/Configuration/#onAppointmentAdding) and [onAppointmentUpdating](/Documentation/ApiReference/UI_Components/dxScheduler/Configuration/#onAppointmentUpdating) events to check if a new or updated appointment creates a time conflict. Set `e.cancel = true` to block the operation if necessary. -To detect conflicts, call [getOccurrences](/Documentation/ApiReference/UI_Components/dxScheduler/Methods/#getOccurrences) to expand both the new and existing appointments into individual occurrences within the target range (required for [recurring appointments](/Documentation/Guide/UI_Components/Scheduler/Appointments/Appointment_Types/#Recurring_Appointments)), then compare them for time overlaps. +Call [getOccurrences](/Documentation/ApiReference/UI_Components/dxScheduler/Methods/#getOccurrences) to expand [recurring appointments](/Documentation/Guide/UI_Components/Scheduler/Appointments/Appointment_Types/#Recurring_Appointments) into individual occurrences within the target range. Check for overlapping time ranges. -### Overlapping Rules +### Conflict Detection Modes The demo supports two modes: -- **Allow across resources**: only appointments assigned to the *same* resource (assignee) block each other. -- **Disallow all overlaps**: any time overlap is blocked, regardless of resource assignment. +- **Different resources**: appointments assigned to different resources (assignees) can overlap. +- **Never**: overlapping appointments are not allowed, regardless of resource assignment. -To implement resource-aware checks, compare the `assigneeId` field values across new and existing appointments. +To implement resource-aware checks, access appointments and compare their `assigneeId` field values. ### Display Errors When a conflict is detected, the demo displays the error in the following ways: -- If an appointment edit form is open, an inline validation message appears. -- Otherwise, a dialog opens. +- A message box. +- An inline validation message (if an appointment edit form is active). -To display inline validation, add a custom form item with `customizeItem` inside [editing.form](/Documentation/ApiReference/UI_Components/dxScheduler/Configuration/editing/form/) and attach custom `validationRules` to the time editors. \ No newline at end of file +To display inline validation, use the `customizeItem` function to add a custom form item inside [editing.form](/Documentation/ApiReference/UI_Components/dxScheduler/Configuration/editing/form/) and attach custom `validationRules` to time editors. \ No newline at end of file From 955d534304476a150439e11283e4ee5cf9ef1b99 Mon Sep 17 00:00:00 2001 From: Vlada Skorokhodova Date: Wed, 1 Apr 2026 11:22:52 +0400 Subject: [PATCH 4/7] Update labels --- .../ResolveTimeConflicts/Angular/app/app.component.html | 2 +- .../ResolveTimeConflicts/Angular/app/app.component.ts | 4 ++-- .../Demos/Scheduler/ResolveTimeConflicts/React/App.tsx | 6 +++--- .../Demos/Scheduler/ResolveTimeConflicts/ReactJs/App.js | 6 +++--- apps/demos/Demos/Scheduler/ResolveTimeConflicts/Vue/App.vue | 6 +++--- .../Demos/Scheduler/ResolveTimeConflicts/jQuery/index.html | 2 +- .../Demos/Scheduler/ResolveTimeConflicts/jQuery/index.js | 4 ++-- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/Angular/app/app.component.html b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/Angular/app/app.component.html index 5d72aef3ca89..d65ccc55673b 100644 --- a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/Angular/app/app.component.html +++ b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/Angular/app/app.component.html @@ -70,7 +70,7 @@
- Overlapping Rule + Allow Overlapping Appointments {
- Overlapping Rule + Allow Overlapping Appointments {
- Overlapping Rule + Allow Overlapping Appointments
- Overlapping Rule + Allow Overlapping Appointments
- Overlapping Rule + Allow Overlapping Appointments
diff --git a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/jQuery/index.js b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/jQuery/index.js index f155484199d5..b6a6887daf51 100644 --- a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/jQuery/index.js +++ b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/jQuery/index.js @@ -198,8 +198,8 @@ $(() => { $('#overlapping-rule').dxSelectBox({ items: [ - { value: 'sameResource', text: 'Allow across resources' }, - { value: 'allResources', text: 'Disallow all overlaps' }, + { value: 'sameResource', text: 'Different Resources' }, + { value: 'allResources', text: 'Never' }, ], valueExpr: 'value', displayExpr: 'text', From 20dcac59a1767e24a9e48afd40c9820eddb7ff46 Mon Sep 17 00:00:00 2001 From: Vlada Skorokhodova Date: Thu, 2 Apr 2026 11:13:44 +0400 Subject: [PATCH 5/7] Update etalons --- ...solveTimeConflicts (fluent.blue.light).png | Bin 77183 -> 78280 bytes ...lveTimeConflicts (material.blue.light).png | Bin 66509 -> 67945 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/demos/testing/etalons/Scheduler-ResolveTimeConflicts (fluent.blue.light).png b/apps/demos/testing/etalons/Scheduler-ResolveTimeConflicts (fluent.blue.light).png index e00ae3e744bb19f12e1ad599e2638eee473c0002..44287aec5a03e9c107a2cb059786bf13a98f729e 100644 GIT binary patch delta 13420 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 delta 12315 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 HEnoaEsVR%W diff --git a/apps/demos/testing/etalons/Scheduler-ResolveTimeConflicts (material.blue.light).png b/apps/demos/testing/etalons/Scheduler-ResolveTimeConflicts (material.blue.light).png index b735969a4b669d7e7388d299c1ec78592933e7e0..dc52a3ceef9556f7c4d80eece3222202a77727e7 100644 GIT binary patch delta 17410 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 Mt1440ZRG#I0IkNDS^xk5 From 14fab64f013876ad55fde925b2dc68221239c04d Mon Sep 17 00:00:00 2001 From: Vlada Skorokhodova <94827090+vladaskorohodova@users.noreply.github.com> Date: Thu, 2 Apr 2026 11:26:43 +0400 Subject: [PATCH 6/7] Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Vlada Skorokhodova <94827090+vladaskorohodova@users.noreply.github.com> --- .../Demos/Scheduler/ResolveTimeConflicts/description.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md index f0982a91a1f2..d5d4607727c0 100644 --- a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md +++ b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md @@ -20,7 +20,7 @@ To implement resource-aware checks, access appointments and compare their `assig When a conflict is detected, the demo displays the error in the following ways: -- A message box. -- An inline validation message (if an appointment edit form is active). +- A message box. +- An inline validation message (if an appointment edit form is active). -To display inline validation, use the `customizeItem` function to add a custom form item inside [editing.form](/Documentation/ApiReference/UI_Components/dxScheduler/Configuration/editing/form/) and attach custom `validationRules` to time editors. \ No newline at end of file +To display inline validation, configure a custom form item inside [editing.form](/Documentation/ApiReference/UI_Components/dxScheduler/Configuration/editing/form/) and use the `customizeItem` function to attach custom `validationRules` to the time editors. \ No newline at end of file From e1f5eab9fee3f2fdb405ada98b66224eee5cd7dd Mon Sep 17 00:00:00 2001 From: Vlada Skorokhodova <94827090+vladaskorohodova@users.noreply.github.com> Date: Thu, 2 Apr 2026 11:33:21 +0400 Subject: [PATCH 7/7] Update apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Vlada Skorokhodova <94827090+vladaskorohodova@users.noreply.github.com> --- apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md index d5d4607727c0..f79ca1dc9f93 100644 --- a/apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md +++ b/apps/demos/Demos/Scheduler/ResolveTimeConflicts/description.md @@ -11,7 +11,7 @@ Call [getOccurrences](/Documentation/ApiReference/UI_Components/dxScheduler/Meth The demo supports two modes: -- **Different resources**: appointments assigned to different resources (assignees) can overlap. +- **Different Resources**: appointments assigned to different resources (assignees) can overlap. - **Never**: overlapping appointments are not allowed, regardless of resource assignment. To implement resource-aware checks, access appointments and compare their `assigneeId` field values.