From aafe4eb3da7f08b24b132e5c52df9b4b1b72bc41 Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Tue, 4 Aug 2026 12:00:15 -0300 Subject: [PATCH] =?UTF-8?q?Scheduler:=20Multilevel=20grouping=20=E2=80=94?= =?UTF-8?q?=20Writing=20Demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Angular/app/app.component.css | 23 ++ .../Angular/app/app.component.html | 28 +++ .../Angular/app/app.component.ts | 200 ++++++++++++++++ .../Angular/app/app.service.ts | 223 ++++++++++++++++++ .../MultilevelGrouping/Angular/index.html | 26 ++ .../MultilevelGrouping/React/App.tsx | 194 +++++++++++++++ .../MultilevelGrouping/React/data.ts | 171 ++++++++++++++ .../MultilevelGrouping/React/index.html | 24 ++ .../MultilevelGrouping/React/index.tsx | 9 + .../MultilevelGrouping/React/styles.css | 23 ++ .../MultilevelGrouping/ReactJs/App.js | 150 ++++++++++++ .../MultilevelGrouping/ReactJs/data.js | 202 ++++++++++++++++ .../MultilevelGrouping/ReactJs/index.html | 44 ++++ .../MultilevelGrouping/ReactJs/index.js | 5 + .../MultilevelGrouping/ReactJs/styles.css | 23 ++ .../Scheduler/MultilevelGrouping/Vue/App.vue | 215 +++++++++++++++++ .../Scheduler/MultilevelGrouping/Vue/data.ts | 159 +++++++++++++ .../MultilevelGrouping/Vue/index.html | 27 +++ .../Scheduler/MultilevelGrouping/Vue/index.ts | 4 + .../MultilevelGrouping/jQuery/data.js | 159 +++++++++++++ .../MultilevelGrouping/jQuery/index.html | 20 ++ .../MultilevelGrouping/jQuery/index.js | 167 +++++++++++++ .../MultilevelGrouping/jQuery/styles.css | 23 ++ apps/demos/menuMeta.json | 6 + ...MultilevelGrouping (fluent.blue.light).png | Bin 0 -> 69978 bytes ...ltilevelGrouping (material.blue.light).png | Bin 0 -> 54380 bytes 26 files changed, 2125 insertions(+) create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/Angular/app/app.component.css create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/Angular/app/app.component.html create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/Angular/app/app.component.ts create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/Angular/app/app.service.ts create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/Angular/index.html create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/React/App.tsx create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/React/data.ts create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/React/index.html create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/React/index.tsx create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/React/styles.css create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/ReactJs/App.js create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/ReactJs/data.js create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/ReactJs/index.html create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/ReactJs/index.js create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/ReactJs/styles.css create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/Vue/App.vue create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/Vue/data.ts create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/Vue/index.html create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/Vue/index.ts create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/jQuery/data.js create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/jQuery/index.html create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/jQuery/index.js create mode 100644 apps/demos/Demos/Scheduler/MultilevelGrouping/jQuery/styles.css create mode 100644 apps/demos/testing/etalons/Scheduler-MultilevelGrouping (fluent.blue.light).png create mode 100644 apps/demos/testing/etalons/Scheduler-MultilevelGrouping (material.blue.light).png diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/Angular/app/app.component.css b/apps/demos/Demos/Scheduler/MultilevelGrouping/Angular/app/app.component.css new file mode 100644 index 000000000000..5e50b8f8a105 --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/Angular/app/app.component.css @@ -0,0 +1,23 @@ +::ng-deep .dx-scheduler-cell-sizes-horizontal { + width: 100px; +} + +::ng-deep .dx-scheduler-group-header { + min-width: 120px; +} + +::ng-deep .dx-scheduler-group-header, +::ng-deep .dx-scheduler-header-panel-empty-cell, +::ng-deep .dx-scheduler-work-space-vertical-group-table, +::ng-deep .dx-scheduler-work-space-vertical-grouped .dx-scheduler-time-panel-cell, +::ng-deep .dx-scheduler-work-space-grouped:not(.dx-scheduler-work-space-vertical-grouped) + .dx-scheduler-header-panel-cell { + background-color: var(--dx-color-main-bg); +} + +::ng-deep .dx-scheduler-group-header, +::ng-deep .dx-scheduler-group-header .dx-scheduler-group-header-content { + font-size: 11px; + font-weight: 600; + line-height: 16px; +} diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/Angular/app/app.component.html b/apps/demos/Demos/Scheduler/MultilevelGrouping/Angular/app/app.component.html new file mode 100644 index 000000000000..9cd1e9577524 --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/Angular/app/app.component.html @@ -0,0 +1,28 @@ + + + + + + diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/Angular/app/app.component.ts b/apps/demos/Demos/Scheduler/MultilevelGrouping/Angular/app/app.component.ts new file mode 100644 index 000000000000..db314ace272a --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/Angular/app/app.component.ts @@ -0,0 +1,200 @@ +import { bootstrapApplication } from '@angular/platform-browser'; +import { Component, enableProdMode, provideZoneChangeDetection } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { DxSchedulerModule } from 'devextreme-angular'; +import { DxSchedulerTypes } from 'devextreme-angular/ui/scheduler'; +import { + Appointment, Assignee, Resource, Service, +} from './app.service'; + +type Form = DxSchedulerTypes.AppointmentFormOpeningEvent['form']; +type FormItem = { + name?: string; + dataField?: string; + items?: FormItem[]; + [key: string]: unknown; +}; +type FoundItem = { list: FormItem[]; index: number } | null; + +if (!/localhost/.test(document.location.host)) { + enableProdMode(); +} + +let modulePrefix = ''; +// @ts-ignore +if (window && window.config?.packageConfigPaths) { + modulePrefix = '/app'; +} + +@Component({ + selector: 'demo-app', + templateUrl: `.${modulePrefix}/app.component.html`, + styleUrls: [`.${modulePrefix}/app.component.css`], + providers: [Service], + imports: [ + CommonModule, + DxSchedulerModule, + ], +}) +export class AppComponent { + appointments: Appointment[]; + + assignees: Assignee[]; + + resources: Resource[]; + + rooms: Assignee[]; + + groups: string[] = ['assigneeId']; + + currentDate: Date = new Date(2026, 6, 13); + + constructor(service: Service) { + this.appointments = service.getAppointments(); + this.assignees = service.getAssignees(); + this.resources = service.getResources(); + this.rooms = this.assignees.filter((item) => item.parentId === null); + } + + employeesOf(roomId: string | null): Assignee[] { + return this.assignees.filter((item) => item.parentId === roomId); + } + + roomOf(assigneeId: number | undefined): string | null { + return this.assignees.find((item) => item.id === assigneeId)?.parentId ?? null; + } + + findItem(items: FormItem[], predicate: (item: FormItem) => boolean): FoundItem { + for (let i = 0; i < items.length; i += 1) { + if (predicate(items[i])) { + return { list: items, index: i }; + } + + const nested = items[i].items; + + if (nested) { + const found = this.findItem(nested, predicate); + + if (found) { + return found; + } + } + } + + return null; + } + + createRoomGroup(form: Form, roomId: string | null): FormItem { + return { + itemType: 'group', + name: 'roomGroup', + cssClass: 'dx-scheduler-form-group-with-icon', + colCount: 2, + colCountByScreen: { xs: 2 }, + items: [ + { + colSpan: 1, + name: 'roomIcon', + cssClass: 'dx-scheduler-form-icon', + template: () => '
', + }, + { + itemType: 'simple', + name: 'roomEditor', + colSpan: 1, + label: { visible: false }, + editorType: 'dxSelectBox', + editorOptions: { + dataSource: this.rooms, + displayExpr: 'shortText', + valueExpr: 'id', + value: roomId, + placeholder: 'Room', + stylingMode: form.getEditor('assigneeId')?.option('stylingMode'), + onValueChanged: (e) => { + const editor = form.getEditor('assigneeId'); + + editor?.option('dataSource', this.employeesOf(e.value)); + editor?.option('value', []); + }, + }, + }, + ], + }; + } + + renderEmployeeTag(data: { text: string; color?: string }) { + const tag = document.createElement('div'); + + tag.className = 'dx-tag-content'; + tag.style.backgroundColor = data.color ?? ''; + tag.style.borderColor = data.color ?? 'transparent'; + tag.textContent = data.text; + + const removeButton = document.createElement('div'); + + removeButton.className = 'dx-tag-remove-button'; + tag.appendChild(removeButton); + + return tag; + } + + hideLabels(items: FormItem[]) { + items.forEach((item) => { + if (item.items) { + this.hideLabels(item.items); + } else if (item.dataField !== 'allDay') { + item.label = { ...(item.label as object), visible: false }; + } + }); + } + + onAppointmentFormOpening(e: DxSchedulerTypes.AppointmentFormOpeningEvent) { + const { form } = e; + const items = form.option('items') as FormItem[]; + + if (this.findItem(items, (item) => item.name === 'roomGroup')) { + return; + } + + const appointment = e.appointmentData ?? {}; + const assigneeIds = appointment.assigneeId as number | number[] | undefined; + const [assigneeId] = Array.isArray(assigneeIds) ? assigneeIds : [assigneeIds]; + const roomId = this.roomOf(assigneeId); + const employee = this.findItem(items, (item) => item.name === 'assigneeIdGroup'); + + const repeatValue = form.getEditor('repeatEditor')?.option('value'); + + employee?.list.splice(employee.index, 0, this.createRoomGroup(form, roomId)); + this.hideLabels(items); + + const employeeEditor = this.findItem(items, (item) => item.dataField === 'assigneeId'); + + if (employeeEditor) { + employeeEditor.list[employeeEditor.index].validationRules = [ + { type: 'required', message: 'Employee is required' }, + ]; + employeeEditor.list[employeeEditor.index].editorOptions = { + ...(employeeEditor.list[employeeEditor.index].editorOptions as object), + tagTemplate: this.renderEmployeeTag, + }; + } + + const description = this.findItem(items, (item) => item.name === 'descriptionGroup'); + + if (description) { + description.list[description.index].visible = false; + } + form.option('items', items.slice()); + + form.getEditor('repeatEditor')?.option('value', repeatValue); + + form.getEditor('assigneeId')?.option('dataSource', roomId ? this.employeesOf(roomId) : []); + } +} + +bootstrapApplication(AppComponent, { + providers: [ + provideZoneChangeDetection({ eventCoalescing: true, runCoalescing: true }), + ], +}); diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/Angular/app/app.service.ts b/apps/demos/Demos/Scheduler/MultilevelGrouping/Angular/app/app.service.ts new file mode 100644 index 000000000000..80bb5e1008ff --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/Angular/app/app.service.ts @@ -0,0 +1,223 @@ +import { Injectable } from '@angular/core'; + +export class Appointment { + text: string; + + assigneeId: number[]; + + startDate: Date; + + endDate: Date; +} + +export class Assignee { + id: number | string; + + text: string; + + parentId: string | null; + + shortText?: string; + + color?: string; +} + +export class Resource { + fieldExpr: string; + + dataSource: Assignee[]; + + parentIdExpr: string; + + label: string; + + allowMultiple: boolean; + + icon: string; +} + +const assignees: Assignee[] = [ + { + id: 'room-1', text: '🏢 Room 1', shortText: 'Room 1', parentId: null, + }, + { + id: 1, text: 'Samantha Bright', parentId: 'room-1', color: '#A7E3A5', + }, + { + id: 2, text: 'John Heart', parentId: 'room-1', color: '#F9E2AE', + }, + { + id: 'room-2', text: '🏢 Room 2', shortText: 'Room 2', parentId: null, + }, + { + id: 3, text: 'Todd Hoffman', parentId: 'room-2', color: '#F1BBBC', + }, + { + id: 4, text: 'Sandra Johnson', parentId: 'room-2', color: '#CFE4FA', + }, +]; + +const appointments: Appointment[] = [ + { + text: 'Upgrade Personal Computers', + assigneeId: [1], + startDate: new Date(2026, 6, 13, 9, 30), + endDate: new Date(2026, 6, 13, 11, 30), + }, { + text: 'Install New Database', + assigneeId: [1], + startDate: new Date(2026, 6, 13, 13, 0), + endDate: new Date(2026, 6, 13, 15, 30), + }, { + text: 'Install New Router in Dev Room', + assigneeId: [1], + startDate: new Date(2026, 6, 14, 9, 0), + endDate: new Date(2026, 6, 14, 12, 15), + }, { + text: 'Brochure Design Review', + assigneeId: [1], + startDate: new Date(2026, 6, 15, 11, 0), + endDate: new Date(2026, 6, 15, 13, 30), + }, { + text: 'Book Flights to San Fran for Sales Trip', + assigneeId: [1], + startDate: new Date(2026, 6, 16, 10, 0), + endDate: new Date(2026, 6, 16, 12, 0), + }, { + text: 'Upgrade Server Hardware', + assigneeId: [1], + startDate: new Date(2026, 6, 17, 9, 0), + endDate: new Date(2026, 6, 17, 15, 0), + }, { + text: 'Google AdWords Strategy', + assigneeId: [2], + startDate: new Date(2026, 6, 13, 9, 0), + endDate: new Date(2026, 6, 13, 12, 0), + }, { + text: 'Rollout of New Website and Marketing Brochures', + assigneeId: [2], + startDate: new Date(2026, 6, 13, 13, 0), + endDate: new Date(2026, 6, 13, 15, 30), + }, { + text: 'Update NDA Agreement', + assigneeId: [2], + startDate: new Date(2026, 6, 14, 11, 0), + endDate: new Date(2026, 6, 14, 14, 15), + }, { + text: 'Submit Questions Regarding New NDA', + assigneeId: [2], + startDate: new Date(2026, 6, 15, 10, 0), + endDate: new Date(2026, 6, 15, 11, 30), + }, { + text: 'Submit Signed NDA', + assigneeId: [2], + startDate: new Date(2026, 6, 15, 13, 0), + endDate: new Date(2026, 6, 15, 15, 0), + }, { + text: 'Review Training Course for any Omissions', + assigneeId: [2], + startDate: new Date(2026, 6, 16, 11, 0), + endDate: new Date(2026, 6, 16, 14, 0), + }, { + text: 'Update Employee Files with New NDA', + assigneeId: [2], + startDate: new Date(2026, 6, 17, 9, 0), + endDate: new Date(2026, 6, 17, 11, 45), + }, { + text: 'Website Re-Design Plan', + assigneeId: [3], + startDate: new Date(2026, 6, 13, 9, 30), + endDate: new Date(2026, 6, 13, 11, 30), + }, { + text: 'New Brochures', + assigneeId: [3], + startDate: new Date(2026, 6, 13, 13, 0), + endDate: new Date(2026, 6, 13, 15, 15), + }, { + text: 'Approve Personal Computer Upgrade Plan', + assigneeId: [3], + startDate: new Date(2026, 6, 14, 10, 0), + endDate: new Date(2026, 6, 14, 11, 0), + }, { + text: 'Final Budget Review', + assigneeId: [3], + startDate: new Date(2026, 6, 14, 12, 0), + endDate: new Date(2026, 6, 14, 13, 35), + }, { + text: 'Approve New Online Marketing Strategy', + assigneeId: [3], + startDate: new Date(2026, 6, 15, 12, 0), + endDate: new Date(2026, 6, 15, 14, 0), + }, { + text: 'Prepare 2026 Marketing Plan', + assigneeId: [3], + startDate: new Date(2026, 6, 16, 11, 0), + endDate: new Date(2026, 6, 16, 13, 30), + }, { + text: 'Create Icons for Website', + assigneeId: [3], + startDate: new Date(2026, 6, 17, 10, 0), + endDate: new Date(2026, 6, 17, 11, 30), + }, { + text: 'Launch New Website', + assigneeId: [3], + startDate: new Date(2026, 6, 17, 12, 20), + endDate: new Date(2026, 6, 17, 14, 0), + }, { + text: 'Comment on Revenue Projections', + assigneeId: [4], + startDate: new Date(2026, 6, 13, 10, 0), + endDate: new Date(2026, 6, 13, 13, 0), + }, { + text: 'Approve Hiring of John Jeffers', + assigneeId: [4], + startDate: new Date(2026, 6, 14, 9, 0), + endDate: new Date(2026, 6, 14, 12, 0), + }, { + text: 'Non-Compete Agreements', + assigneeId: [4], + startDate: new Date(2026, 6, 14, 13, 0), + endDate: new Date(2026, 6, 14, 15, 45), + }, { + text: 'Review Revenue Projections', + assigneeId: [4], + startDate: new Date(2026, 6, 15, 11, 0), + endDate: new Date(2026, 6, 15, 14, 0), + }, { + text: 'Review Changes to Health Insurance Coverage', + assigneeId: [4], + startDate: new Date(2026, 6, 16, 9, 0), + endDate: new Date(2026, 6, 16, 13, 0), + }, { + text: 'Provide New Health Insurance Docs', + assigneeId: [4], + startDate: new Date(2026, 6, 17, 12, 0), + endDate: new Date(2026, 6, 17, 15, 0), + }, +]; + +const resources: Resource[] = [ + { + fieldExpr: 'assigneeId', + dataSource: assignees, + parentIdExpr: 'parentId', + label: 'Employee', + allowMultiple: true, + icon: 'user', + }, +]; + +@Injectable() +export class Service { + getAppointments(): Appointment[] { + return appointments; + } + + getAssignees(): Assignee[] { + return assignees; + } + + getResources(): Resource[] { + return resources; + } +} diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/Angular/index.html b/apps/demos/Demos/Scheduler/MultilevelGrouping/Angular/index.html new file mode 100644 index 000000000000..1ab1fb54a1df --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/Angular/index.html @@ -0,0 +1,26 @@ + + + + DevExtreme Demo + + + + + + + + + + + + + + + +
+ Loading... +
+ + diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/React/App.tsx b/apps/demos/Demos/Scheduler/MultilevelGrouping/React/App.tsx new file mode 100644 index 000000000000..c59522550640 --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/React/App.tsx @@ -0,0 +1,194 @@ +import React from 'react'; + +import Scheduler, { View } from 'devextreme-react/scheduler'; +import type { SchedulerTypes } from 'devextreme-react/scheduler'; +import { appointments, assignees } from './data.ts'; + +const currentDate = new Date(2026, 6, 13); + +const groups = ['assigneeId']; + +const resources = [ + { + fieldExpr: 'assigneeId', + dataSource: assignees, + parentIdExpr: 'parentId', + label: 'Employee', + allowMultiple: true, + icon: 'user', + }, +]; + +type Form = SchedulerTypes.AppointmentFormOpeningEvent['form']; +type FormItem = { + name?: string; + dataField?: string; + items?: FormItem[]; + [key: string]: unknown; +}; +type FoundItem = { list: FormItem[]; index: number } | null; + +const rooms = assignees.filter((item) => item.parentId === null); + +const employeesOf = (roomId: string | null) => assignees + .filter((item) => item.parentId === roomId); + +const roomOf = (assigneeId: number | undefined): string | null => assignees + .find((item) => item.id === assigneeId)?.parentId ?? null; + +const findItem = (items: FormItem[], predicate: (item: FormItem) => boolean): FoundItem => { + for (let i = 0; i < items.length; i += 1) { + if (predicate(items[i])) { + return { list: items, index: i }; + } + + const nested = items[i].items; + + if (nested) { + const found = findItem(nested, predicate); + + if (found) { + return found; + } + } + } + + return null; +}; + +const createRoomGroup = (form: Form, roomId: string | null): FormItem => ({ + itemType: 'group', + name: 'roomGroup', + cssClass: 'dx-scheduler-form-group-with-icon', + colCount: 2, + colCountByScreen: { xs: 2 }, + items: [ + { + colSpan: 1, + name: 'roomIcon', + cssClass: 'dx-scheduler-form-icon', + template: () => '
', + }, + { + itemType: 'simple', + name: 'roomEditor', + colSpan: 1, + label: { visible: false }, + editorType: 'dxSelectBox', + editorOptions: { + dataSource: rooms, + displayExpr: 'shortText', + valueExpr: 'id', + value: roomId, + placeholder: 'Room', + stylingMode: form.getEditor('assigneeId')?.option('stylingMode'), + onValueChanged(e: { value: string }) { + const editor = form.getEditor('assigneeId'); + + editor?.option('dataSource', employeesOf(e.value)); + editor?.option('value', []); + }, + }, + }, + ], +}); + +const renderEmployeeTag = (data: { text: string; color?: string }) => { + const tag = document.createElement('div'); + + tag.className = 'dx-tag-content'; + tag.style.backgroundColor = data.color ?? ''; + tag.style.borderColor = data.color ?? 'transparent'; + tag.textContent = data.text; + + const removeButton = document.createElement('div'); + + removeButton.className = 'dx-tag-remove-button'; + tag.appendChild(removeButton); + + return tag; +}; + +const hideLabels = (items: FormItem[]) => { + items.forEach((item) => { + if (item.items) { + hideLabels(item.items); + } else if (item.dataField !== 'allDay') { + item.label = { ...(item.label as object), visible: false }; + } + }); +}; + +const onAppointmentFormOpening = (e: SchedulerTypes.AppointmentFormOpeningEvent) => { + const { form } = e; + const items = form.option('items') as FormItem[]; + + if (findItem(items, (item) => item.name === 'roomGroup')) { + return; + } + + const appointment = e.appointmentData ?? {}; + const assigneeIds = appointment.assigneeId as number | number[] | undefined; + const [assigneeId] = Array.isArray(assigneeIds) ? assigneeIds : [assigneeIds]; + const roomId = roomOf(assigneeId); + const employee = findItem(items, (item) => item.name === 'assigneeIdGroup'); + + const repeatValue = form.getEditor('repeatEditor')?.option('value'); + + employee?.list.splice(employee.index, 0, createRoomGroup(form, roomId)); + hideLabels(items); + + const employeeEditor = findItem(items, (item) => item.dataField === 'assigneeId'); + + if (employeeEditor) { + employeeEditor.list[employeeEditor.index].validationRules = [ + { type: 'required', message: 'Employee is required' }, + ]; + employeeEditor.list[employeeEditor.index].editorOptions = { + ...(employeeEditor.list[employeeEditor.index].editorOptions as object), + tagTemplate: renderEmployeeTag, + }; + } + + const description = findItem(items, (item) => item.name === 'descriptionGroup'); + + if (description) { + description.list[description.index].visible = false; + } + form.option('items', items.slice()); + + form.getEditor('repeatEditor')?.option('value', repeatValue); + + form.getEditor('assigneeId')?.option('dataSource', roomId ? employeesOf(roomId) : []); +}; + +const App = () => ( + + + + +); + +export default App; diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/React/data.ts b/apps/demos/Demos/Scheduler/MultilevelGrouping/React/data.ts new file mode 100644 index 000000000000..03e0ea45df7a --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/React/data.ts @@ -0,0 +1,171 @@ +import type { SchedulerTypes } from 'devextreme-react/scheduler'; + +type Appointment = SchedulerTypes.Appointment & { assigneeId: number[] }; + +type Assignee = { + id: number | string; + text: string; + parentId: string | null; + shortText?: string; + color?: string; +}; + +export const assignees: Assignee[] = [ + { + id: 'room-1', text: '🏢 Room 1', shortText: 'Room 1', parentId: null, + }, + { + id: 1, text: 'Samantha Bright', parentId: 'room-1', color: '#A7E3A5', + }, + { + id: 2, text: 'John Heart', parentId: 'room-1', color: '#F9E2AE', + }, + { + id: 'room-2', text: '🏢 Room 2', shortText: 'Room 2', parentId: null, + }, + { + id: 3, text: 'Todd Hoffman', parentId: 'room-2', color: '#F1BBBC', + }, + { + id: 4, text: 'Sandra Johnson', parentId: 'room-2', color: '#CFE4FA', + }, +]; + +export const appointments: Appointment[] = [ + { + text: 'Upgrade Personal Computers', + assigneeId: [1], + startDate: new Date(2026, 6, 13, 9, 30), + endDate: new Date(2026, 6, 13, 11, 30), + }, { + text: 'Install New Database', + assigneeId: [1], + startDate: new Date(2026, 6, 13, 13, 0), + endDate: new Date(2026, 6, 13, 15, 30), + }, { + text: 'Install New Router in Dev Room', + assigneeId: [1], + startDate: new Date(2026, 6, 14, 9, 0), + endDate: new Date(2026, 6, 14, 12, 15), + }, { + text: 'Brochure Design Review', + assigneeId: [1], + startDate: new Date(2026, 6, 15, 11, 0), + endDate: new Date(2026, 6, 15, 13, 30), + }, { + text: 'Book Flights to San Fran for Sales Trip', + assigneeId: [1], + startDate: new Date(2026, 6, 16, 10, 0), + endDate: new Date(2026, 6, 16, 12, 0), + }, { + text: 'Upgrade Server Hardware', + assigneeId: [1], + startDate: new Date(2026, 6, 17, 9, 0), + endDate: new Date(2026, 6, 17, 15, 0), + }, { + text: 'Google AdWords Strategy', + assigneeId: [2], + startDate: new Date(2026, 6, 13, 9, 0), + endDate: new Date(2026, 6, 13, 12, 0), + }, { + text: 'Rollout of New Website and Marketing Brochures', + assigneeId: [2], + startDate: new Date(2026, 6, 13, 13, 0), + endDate: new Date(2026, 6, 13, 15, 30), + }, { + text: 'Update NDA Agreement', + assigneeId: [2], + startDate: new Date(2026, 6, 14, 11, 0), + endDate: new Date(2026, 6, 14, 14, 15), + }, { + text: 'Submit Questions Regarding New NDA', + assigneeId: [2], + startDate: new Date(2026, 6, 15, 10, 0), + endDate: new Date(2026, 6, 15, 11, 30), + }, { + text: 'Submit Signed NDA', + assigneeId: [2], + startDate: new Date(2026, 6, 15, 13, 0), + endDate: new Date(2026, 6, 15, 15, 0), + }, { + text: 'Review Training Course for any Omissions', + assigneeId: [2], + startDate: new Date(2026, 6, 16, 11, 0), + endDate: new Date(2026, 6, 16, 14, 0), + }, { + text: 'Update Employee Files with New NDA', + assigneeId: [2], + startDate: new Date(2026, 6, 17, 9, 0), + endDate: new Date(2026, 6, 17, 11, 45), + }, { + text: 'Website Re-Design Plan', + assigneeId: [3], + startDate: new Date(2026, 6, 13, 9, 30), + endDate: new Date(2026, 6, 13, 11, 30), + }, { + text: 'New Brochures', + assigneeId: [3], + startDate: new Date(2026, 6, 13, 13, 0), + endDate: new Date(2026, 6, 13, 15, 15), + }, { + text: 'Approve Personal Computer Upgrade Plan', + assigneeId: [3], + startDate: new Date(2026, 6, 14, 10, 0), + endDate: new Date(2026, 6, 14, 11, 0), + }, { + text: 'Final Budget Review', + assigneeId: [3], + startDate: new Date(2026, 6, 14, 12, 0), + endDate: new Date(2026, 6, 14, 13, 35), + }, { + text: 'Approve New Online Marketing Strategy', + assigneeId: [3], + startDate: new Date(2026, 6, 15, 12, 0), + endDate: new Date(2026, 6, 15, 14, 0), + }, { + text: 'Prepare 2026 Marketing Plan', + assigneeId: [3], + startDate: new Date(2026, 6, 16, 11, 0), + endDate: new Date(2026, 6, 16, 13, 30), + }, { + text: 'Create Icons for Website', + assigneeId: [3], + startDate: new Date(2026, 6, 17, 10, 0), + endDate: new Date(2026, 6, 17, 11, 30), + }, { + text: 'Launch New Website', + assigneeId: [3], + startDate: new Date(2026, 6, 17, 12, 20), + endDate: new Date(2026, 6, 17, 14, 0), + }, { + text: 'Comment on Revenue Projections', + assigneeId: [4], + startDate: new Date(2026, 6, 13, 10, 0), + endDate: new Date(2026, 6, 13, 13, 0), + }, { + text: 'Approve Hiring of John Jeffers', + assigneeId: [4], + startDate: new Date(2026, 6, 14, 9, 0), + endDate: new Date(2026, 6, 14, 12, 0), + }, { + text: 'Non-Compete Agreements', + assigneeId: [4], + startDate: new Date(2026, 6, 14, 13, 0), + endDate: new Date(2026, 6, 14, 15, 45), + }, { + text: 'Review Revenue Projections', + assigneeId: [4], + startDate: new Date(2026, 6, 15, 11, 0), + endDate: new Date(2026, 6, 15, 14, 0), + }, { + text: 'Review Changes to Health Insurance Coverage', + assigneeId: [4], + startDate: new Date(2026, 6, 16, 9, 0), + endDate: new Date(2026, 6, 16, 13, 0), + }, { + text: 'Provide New Health Insurance Docs', + assigneeId: [4], + startDate: new Date(2026, 6, 17, 12, 0), + endDate: new Date(2026, 6, 17, 15, 0), + }, +]; diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/React/index.html b/apps/demos/Demos/Scheduler/MultilevelGrouping/React/index.html new file mode 100644 index 000000000000..ee451f8288ff --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/React/index.html @@ -0,0 +1,24 @@ + + + + DevExtreme Demo + + + + + + + + + + + + + +
+
+
+ + diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/React/index.tsx b/apps/demos/Demos/Scheduler/MultilevelGrouping/React/index.tsx new file mode 100644 index 000000000000..8acbec4b6179 --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/React/index.tsx @@ -0,0 +1,9 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; + +import App from './App.tsx'; + +ReactDOM.render( + , + document.getElementById('app'), +); diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/React/styles.css b/apps/demos/Demos/Scheduler/MultilevelGrouping/React/styles.css new file mode 100644 index 000000000000..2fdf6823a33d --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/React/styles.css @@ -0,0 +1,23 @@ +.dx-scheduler-cell-sizes-horizontal { + width: 100px; +} + +.dx-scheduler-group-header { + min-width: 120px; +} + +.dx-scheduler-group-header, +.dx-scheduler-header-panel-empty-cell, +.dx-scheduler-work-space-vertical-group-table, +.dx-scheduler-work-space-vertical-grouped .dx-scheduler-time-panel-cell, +.dx-scheduler-work-space-grouped:not(.dx-scheduler-work-space-vertical-grouped) + .dx-scheduler-header-panel-cell { + background-color: var(--dx-color-main-bg); +} + +.dx-scheduler-group-header, +.dx-scheduler-group-header .dx-scheduler-group-header-content { + font-size: 11px; + font-weight: 600; + line-height: 16px; +} diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/ReactJs/App.js b/apps/demos/Demos/Scheduler/MultilevelGrouping/ReactJs/App.js new file mode 100644 index 000000000000..a6c6d9e1c5d3 --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/ReactJs/App.js @@ -0,0 +1,150 @@ +import React from 'react'; +import Scheduler, { View } from 'devextreme-react/scheduler'; +import { appointments, assignees } from './data.js'; + +const currentDate = new Date(2026, 6, 13); +const groups = ['assigneeId']; +const resources = [ + { + fieldExpr: 'assigneeId', + dataSource: assignees, + parentIdExpr: 'parentId', + label: 'Employee', + allowMultiple: true, + icon: 'user', + }, +]; +const rooms = assignees.filter((item) => item.parentId === null); +const employeesOf = (roomId) => assignees.filter((item) => item.parentId === roomId); +const roomOf = (assigneeId) => assignees.find((item) => item.id === assigneeId)?.parentId ?? null; +const findItem = (items, predicate) => { + for (let i = 0; i < items.length; i += 1) { + if (predicate(items[i])) { + return { list: items, index: i }; + } + const nested = items[i].items; + if (nested) { + const found = findItem(nested, predicate); + if (found) { + return found; + } + } + } + return null; +}; +const createRoomGroup = (form, roomId) => ({ + itemType: 'group', + name: 'roomGroup', + cssClass: 'dx-scheduler-form-group-with-icon', + colCount: 2, + colCountByScreen: { xs: 2 }, + items: [ + { + colSpan: 1, + name: 'roomIcon', + cssClass: 'dx-scheduler-form-icon', + template: () => '
', + }, + { + itemType: 'simple', + name: 'roomEditor', + colSpan: 1, + label: { visible: false }, + editorType: 'dxSelectBox', + editorOptions: { + dataSource: rooms, + displayExpr: 'shortText', + valueExpr: 'id', + value: roomId, + placeholder: 'Room', + stylingMode: form.getEditor('assigneeId')?.option('stylingMode'), + onValueChanged(e) { + const editor = form.getEditor('assigneeId'); + editor?.option('dataSource', employeesOf(e.value)); + editor?.option('value', []); + }, + }, + }, + ], +}); +const renderEmployeeTag = (data) => { + const tag = document.createElement('div'); + tag.className = 'dx-tag-content'; + tag.style.backgroundColor = data.color ?? ''; + tag.style.borderColor = data.color ?? 'transparent'; + tag.textContent = data.text; + const removeButton = document.createElement('div'); + removeButton.className = 'dx-tag-remove-button'; + tag.appendChild(removeButton); + return tag; +}; +const hideLabels = (items) => { + items.forEach((item) => { + if (item.items) { + hideLabels(item.items); + } else if (item.dataField !== 'allDay') { + item.label = { ...item.label, visible: false }; + } + }); +}; +const onAppointmentFormOpening = (e) => { + const { form } = e; + const items = form.option('items'); + if (findItem(items, (item) => item.name === 'roomGroup')) { + return; + } + const appointment = e.appointmentData ?? {}; + const assigneeIds = appointment.assigneeId; + const [assigneeId] = Array.isArray(assigneeIds) ? assigneeIds : [assigneeIds]; + const roomId = roomOf(assigneeId); + const employee = findItem(items, (item) => item.name === 'assigneeIdGroup'); + const repeatValue = form.getEditor('repeatEditor')?.option('value'); + employee?.list.splice(employee.index, 0, createRoomGroup(form, roomId)); + hideLabels(items); + const employeeEditor = findItem(items, (item) => item.dataField === 'assigneeId'); + if (employeeEditor) { + employeeEditor.list[employeeEditor.index].validationRules = [ + { type: 'required', message: 'Employee is required' }, + ]; + employeeEditor.list[employeeEditor.index].editorOptions = { + ...employeeEditor.list[employeeEditor.index].editorOptions, + tagTemplate: renderEmployeeTag, + }; + } + const description = findItem(items, (item) => item.name === 'descriptionGroup'); + if (description) { + description.list[description.index].visible = false; + } + form.option('items', items.slice()); + form.getEditor('repeatEditor')?.option('value', repeatValue); + form.getEditor('assigneeId')?.option('dataSource', roomId ? employeesOf(roomId) : []); +}; +const App = () => ( + + + + +); +export default App; diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/ReactJs/data.js b/apps/demos/Demos/Scheduler/MultilevelGrouping/ReactJs/data.js new file mode 100644 index 000000000000..4c73285e8f2e --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/ReactJs/data.js @@ -0,0 +1,202 @@ +export const assignees = [ + { + id: 'room-1', + text: '🏢 Room 1', + shortText: 'Room 1', + parentId: null, + }, + { + id: 1, + text: 'Samantha Bright', + parentId: 'room-1', + color: '#A7E3A5', + }, + { + id: 2, + text: 'John Heart', + parentId: 'room-1', + color: '#F9E2AE', + }, + { + id: 'room-2', + text: '🏢 Room 2', + shortText: 'Room 2', + parentId: null, + }, + { + id: 3, + text: 'Todd Hoffman', + parentId: 'room-2', + color: '#F1BBBC', + }, + { + id: 4, + text: 'Sandra Johnson', + parentId: 'room-2', + color: '#CFE4FA', + }, +]; +export const appointments = [ + { + text: 'Upgrade Personal Computers', + assigneeId: [1], + startDate: new Date(2026, 6, 13, 9, 30), + endDate: new Date(2026, 6, 13, 11, 30), + }, + { + text: 'Install New Database', + assigneeId: [1], + startDate: new Date(2026, 6, 13, 13, 0), + endDate: new Date(2026, 6, 13, 15, 30), + }, + { + text: 'Install New Router in Dev Room', + assigneeId: [1], + startDate: new Date(2026, 6, 14, 9, 0), + endDate: new Date(2026, 6, 14, 12, 15), + }, + { + text: 'Brochure Design Review', + assigneeId: [1], + startDate: new Date(2026, 6, 15, 11, 0), + endDate: new Date(2026, 6, 15, 13, 30), + }, + { + text: 'Book Flights to San Fran for Sales Trip', + assigneeId: [1], + startDate: new Date(2026, 6, 16, 10, 0), + endDate: new Date(2026, 6, 16, 12, 0), + }, + { + text: 'Upgrade Server Hardware', + assigneeId: [1], + startDate: new Date(2026, 6, 17, 9, 0), + endDate: new Date(2026, 6, 17, 15, 0), + }, + { + text: 'Google AdWords Strategy', + assigneeId: [2], + startDate: new Date(2026, 6, 13, 9, 0), + endDate: new Date(2026, 6, 13, 12, 0), + }, + { + text: 'Rollout of New Website and Marketing Brochures', + assigneeId: [2], + startDate: new Date(2026, 6, 13, 13, 0), + endDate: new Date(2026, 6, 13, 15, 30), + }, + { + text: 'Update NDA Agreement', + assigneeId: [2], + startDate: new Date(2026, 6, 14, 11, 0), + endDate: new Date(2026, 6, 14, 14, 15), + }, + { + text: 'Submit Questions Regarding New NDA', + assigneeId: [2], + startDate: new Date(2026, 6, 15, 10, 0), + endDate: new Date(2026, 6, 15, 11, 30), + }, + { + text: 'Submit Signed NDA', + assigneeId: [2], + startDate: new Date(2026, 6, 15, 13, 0), + endDate: new Date(2026, 6, 15, 15, 0), + }, + { + text: 'Review Training Course for any Omissions', + assigneeId: [2], + startDate: new Date(2026, 6, 16, 11, 0), + endDate: new Date(2026, 6, 16, 14, 0), + }, + { + text: 'Update Employee Files with New NDA', + assigneeId: [2], + startDate: new Date(2026, 6, 17, 9, 0), + endDate: new Date(2026, 6, 17, 11, 45), + }, + { + text: 'Website Re-Design Plan', + assigneeId: [3], + startDate: new Date(2026, 6, 13, 9, 30), + endDate: new Date(2026, 6, 13, 11, 30), + }, + { + text: 'New Brochures', + assigneeId: [3], + startDate: new Date(2026, 6, 13, 13, 0), + endDate: new Date(2026, 6, 13, 15, 15), + }, + { + text: 'Approve Personal Computer Upgrade Plan', + assigneeId: [3], + startDate: new Date(2026, 6, 14, 10, 0), + endDate: new Date(2026, 6, 14, 11, 0), + }, + { + text: 'Final Budget Review', + assigneeId: [3], + startDate: new Date(2026, 6, 14, 12, 0), + endDate: new Date(2026, 6, 14, 13, 35), + }, + { + text: 'Approve New Online Marketing Strategy', + assigneeId: [3], + startDate: new Date(2026, 6, 15, 12, 0), + endDate: new Date(2026, 6, 15, 14, 0), + }, + { + text: 'Prepare 2026 Marketing Plan', + assigneeId: [3], + startDate: new Date(2026, 6, 16, 11, 0), + endDate: new Date(2026, 6, 16, 13, 30), + }, + { + text: 'Create Icons for Website', + assigneeId: [3], + startDate: new Date(2026, 6, 17, 10, 0), + endDate: new Date(2026, 6, 17, 11, 30), + }, + { + text: 'Launch New Website', + assigneeId: [3], + startDate: new Date(2026, 6, 17, 12, 20), + endDate: new Date(2026, 6, 17, 14, 0), + }, + { + text: 'Comment on Revenue Projections', + assigneeId: [4], + startDate: new Date(2026, 6, 13, 10, 0), + endDate: new Date(2026, 6, 13, 13, 0), + }, + { + text: 'Approve Hiring of John Jeffers', + assigneeId: [4], + startDate: new Date(2026, 6, 14, 9, 0), + endDate: new Date(2026, 6, 14, 12, 0), + }, + { + text: 'Non-Compete Agreements', + assigneeId: [4], + startDate: new Date(2026, 6, 14, 13, 0), + endDate: new Date(2026, 6, 14, 15, 45), + }, + { + text: 'Review Revenue Projections', + assigneeId: [4], + startDate: new Date(2026, 6, 15, 11, 0), + endDate: new Date(2026, 6, 15, 14, 0), + }, + { + text: 'Review Changes to Health Insurance Coverage', + assigneeId: [4], + startDate: new Date(2026, 6, 16, 9, 0), + endDate: new Date(2026, 6, 16, 13, 0), + }, + { + text: 'Provide New Health Insurance Docs', + assigneeId: [4], + startDate: new Date(2026, 6, 17, 12, 0), + endDate: new Date(2026, 6, 17, 15, 0), + }, +]; diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/ReactJs/index.html b/apps/demos/Demos/Scheduler/MultilevelGrouping/ReactJs/index.html new file mode 100644 index 000000000000..db31b0fd60c6 --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/ReactJs/index.html @@ -0,0 +1,44 @@ + + + + DevExtreme Demo + + + + + + + + + + + + + +
+
+
+ + diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/ReactJs/index.js b/apps/demos/Demos/Scheduler/MultilevelGrouping/ReactJs/index.js new file mode 100644 index 000000000000..b853e0be8242 --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/ReactJs/index.js @@ -0,0 +1,5 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import App from './App.js'; + +ReactDOM.render(, document.getElementById('app')); diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/ReactJs/styles.css b/apps/demos/Demos/Scheduler/MultilevelGrouping/ReactJs/styles.css new file mode 100644 index 000000000000..2fdf6823a33d --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/ReactJs/styles.css @@ -0,0 +1,23 @@ +.dx-scheduler-cell-sizes-horizontal { + width: 100px; +} + +.dx-scheduler-group-header { + min-width: 120px; +} + +.dx-scheduler-group-header, +.dx-scheduler-header-panel-empty-cell, +.dx-scheduler-work-space-vertical-group-table, +.dx-scheduler-work-space-vertical-grouped .dx-scheduler-time-panel-cell, +.dx-scheduler-work-space-grouped:not(.dx-scheduler-work-space-vertical-grouped) + .dx-scheduler-header-panel-cell { + background-color: var(--dx-color-main-bg); +} + +.dx-scheduler-group-header, +.dx-scheduler-group-header .dx-scheduler-group-header-content { + font-size: 11px; + font-weight: 600; + line-height: 16px; +} diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/Vue/App.vue b/apps/demos/Demos/Scheduler/MultilevelGrouping/Vue/App.vue new file mode 100644 index 000000000000..667f1e4dbc83 --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/Vue/App.vue @@ -0,0 +1,215 @@ + + + + diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/Vue/data.ts b/apps/demos/Demos/Scheduler/MultilevelGrouping/Vue/data.ts new file mode 100644 index 000000000000..6a9ffea09cb4 --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/Vue/data.ts @@ -0,0 +1,159 @@ +export const assignees = [ + { + id: 'room-1', text: '🏢 Room 1', shortText: 'Room 1', parentId: null, + }, + { + id: 1, text: 'Samantha Bright', parentId: 'room-1', color: '#A7E3A5', + }, + { + id: 2, text: 'John Heart', parentId: 'room-1', color: '#F9E2AE', + }, + { + id: 'room-2', text: '🏢 Room 2', shortText: 'Room 2', parentId: null, + }, + { + id: 3, text: 'Todd Hoffman', parentId: 'room-2', color: '#F1BBBC', + }, + { + id: 4, text: 'Sandra Johnson', parentId: 'room-2', color: '#CFE4FA', + }, +]; + +export const appointments = [ + { + text: 'Upgrade Personal Computers', + assigneeId: [1], + startDate: new Date(2026, 6, 13, 9, 30), + endDate: new Date(2026, 6, 13, 11, 30), + }, { + text: 'Install New Database', + assigneeId: [1], + startDate: new Date(2026, 6, 13, 13, 0), + endDate: new Date(2026, 6, 13, 15, 30), + }, { + text: 'Install New Router in Dev Room', + assigneeId: [1], + startDate: new Date(2026, 6, 14, 9, 0), + endDate: new Date(2026, 6, 14, 12, 15), + }, { + text: 'Brochure Design Review', + assigneeId: [1], + startDate: new Date(2026, 6, 15, 11, 0), + endDate: new Date(2026, 6, 15, 13, 30), + }, { + text: 'Book Flights to San Fran for Sales Trip', + assigneeId: [1], + startDate: new Date(2026, 6, 16, 10, 0), + endDate: new Date(2026, 6, 16, 12, 0), + }, { + text: 'Upgrade Server Hardware', + assigneeId: [1], + startDate: new Date(2026, 6, 17, 9, 0), + endDate: new Date(2026, 6, 17, 15, 0), + }, { + text: 'Google AdWords Strategy', + assigneeId: [2], + startDate: new Date(2026, 6, 13, 9, 0), + endDate: new Date(2026, 6, 13, 12, 0), + }, { + text: 'Rollout of New Website and Marketing Brochures', + assigneeId: [2], + startDate: new Date(2026, 6, 13, 13, 0), + endDate: new Date(2026, 6, 13, 15, 30), + }, { + text: 'Update NDA Agreement', + assigneeId: [2], + startDate: new Date(2026, 6, 14, 11, 0), + endDate: new Date(2026, 6, 14, 14, 15), + }, { + text: 'Submit Questions Regarding New NDA', + assigneeId: [2], + startDate: new Date(2026, 6, 15, 10, 0), + endDate: new Date(2026, 6, 15, 11, 30), + }, { + text: 'Submit Signed NDA', + assigneeId: [2], + startDate: new Date(2026, 6, 15, 13, 0), + endDate: new Date(2026, 6, 15, 15, 0), + }, { + text: 'Review Training Course for any Omissions', + assigneeId: [2], + startDate: new Date(2026, 6, 16, 11, 0), + endDate: new Date(2026, 6, 16, 14, 0), + }, { + text: 'Update Employee Files with New NDA', + assigneeId: [2], + startDate: new Date(2026, 6, 17, 9, 0), + endDate: new Date(2026, 6, 17, 11, 45), + }, { + text: 'Website Re-Design Plan', + assigneeId: [3], + startDate: new Date(2026, 6, 13, 9, 30), + endDate: new Date(2026, 6, 13, 11, 30), + }, { + text: 'New Brochures', + assigneeId: [3], + startDate: new Date(2026, 6, 13, 13, 0), + endDate: new Date(2026, 6, 13, 15, 15), + }, { + text: 'Approve Personal Computer Upgrade Plan', + assigneeId: [3], + startDate: new Date(2026, 6, 14, 10, 0), + endDate: new Date(2026, 6, 14, 11, 0), + }, { + text: 'Final Budget Review', + assigneeId: [3], + startDate: new Date(2026, 6, 14, 12, 0), + endDate: new Date(2026, 6, 14, 13, 35), + }, { + text: 'Approve New Online Marketing Strategy', + assigneeId: [3], + startDate: new Date(2026, 6, 15, 12, 0), + endDate: new Date(2026, 6, 15, 14, 0), + }, { + text: 'Prepare 2026 Marketing Plan', + assigneeId: [3], + startDate: new Date(2026, 6, 16, 11, 0), + endDate: new Date(2026, 6, 16, 13, 30), + }, { + text: 'Create Icons for Website', + assigneeId: [3], + startDate: new Date(2026, 6, 17, 10, 0), + endDate: new Date(2026, 6, 17, 11, 30), + }, { + text: 'Launch New Website', + assigneeId: [3], + startDate: new Date(2026, 6, 17, 12, 20), + endDate: new Date(2026, 6, 17, 14, 0), + }, { + text: 'Comment on Revenue Projections', + assigneeId: [4], + startDate: new Date(2026, 6, 13, 10, 0), + endDate: new Date(2026, 6, 13, 13, 0), + }, { + text: 'Approve Hiring of John Jeffers', + assigneeId: [4], + startDate: new Date(2026, 6, 14, 9, 0), + endDate: new Date(2026, 6, 14, 12, 0), + }, { + text: 'Non-Compete Agreements', + assigneeId: [4], + startDate: new Date(2026, 6, 14, 13, 0), + endDate: new Date(2026, 6, 14, 15, 45), + }, { + text: 'Review Revenue Projections', + assigneeId: [4], + startDate: new Date(2026, 6, 15, 11, 0), + endDate: new Date(2026, 6, 15, 14, 0), + }, { + text: 'Review Changes to Health Insurance Coverage', + assigneeId: [4], + startDate: new Date(2026, 6, 16, 9, 0), + endDate: new Date(2026, 6, 16, 13, 0), + }, { + text: 'Provide New Health Insurance Docs', + assigneeId: [4], + startDate: new Date(2026, 6, 17, 12, 0), + endDate: new Date(2026, 6, 17, 15, 0), + }, +]; diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/Vue/index.html b/apps/demos/Demos/Scheduler/MultilevelGrouping/Vue/index.html new file mode 100644 index 000000000000..c90687f1390f --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/Vue/index.html @@ -0,0 +1,27 @@ + + + + DevExtreme Demo + + + + + + + + + + + + +
+
+
+ + diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/Vue/index.ts b/apps/demos/Demos/Scheduler/MultilevelGrouping/Vue/index.ts new file mode 100644 index 000000000000..684d04215d72 --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/Vue/index.ts @@ -0,0 +1,4 @@ +import { createApp } from 'vue'; +import App from './App.vue'; + +createApp(App).mount('#app'); diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/jQuery/data.js b/apps/demos/Demos/Scheduler/MultilevelGrouping/jQuery/data.js new file mode 100644 index 000000000000..fddf43749178 --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/jQuery/data.js @@ -0,0 +1,159 @@ +const assignees = [ + { + id: 'room-1', text: '🏢 Room 1', shortText: 'Room 1', parentId: null, + }, + { + id: 1, text: 'Samantha Bright', parentId: 'room-1', color: '#A7E3A5', + }, + { + id: 2, text: 'John Heart', parentId: 'room-1', color: '#F9E2AE', + }, + { + id: 'room-2', text: '🏢 Room 2', shortText: 'Room 2', parentId: null, + }, + { + id: 3, text: 'Todd Hoffman', parentId: 'room-2', color: '#F1BBBC', + }, + { + id: 4, text: 'Sandra Johnson', parentId: 'room-2', color: '#CFE4FA', + }, +]; + +const appointments = [ + { + text: 'Upgrade Personal Computers', + assigneeId: [1], + startDate: new Date(2026, 6, 13, 9, 30), + endDate: new Date(2026, 6, 13, 11, 30), + }, { + text: 'Install New Database', + assigneeId: [1], + startDate: new Date(2026, 6, 13, 13, 0), + endDate: new Date(2026, 6, 13, 15, 30), + }, { + text: 'Install New Router in Dev Room', + assigneeId: [1], + startDate: new Date(2026, 6, 14, 9, 0), + endDate: new Date(2026, 6, 14, 12, 15), + }, { + text: 'Brochure Design Review', + assigneeId: [1], + startDate: new Date(2026, 6, 15, 11, 0), + endDate: new Date(2026, 6, 15, 13, 30), + }, { + text: 'Book Flights to San Fran for Sales Trip', + assigneeId: [1], + startDate: new Date(2026, 6, 16, 10, 0), + endDate: new Date(2026, 6, 16, 12, 0), + }, { + text: 'Upgrade Server Hardware', + assigneeId: [1], + startDate: new Date(2026, 6, 17, 9, 0), + endDate: new Date(2026, 6, 17, 15, 0), + }, { + text: 'Google AdWords Strategy', + assigneeId: [2], + startDate: new Date(2026, 6, 13, 9, 0), + endDate: new Date(2026, 6, 13, 12, 0), + }, { + text: 'Rollout of New Website and Marketing Brochures', + assigneeId: [2], + startDate: new Date(2026, 6, 13, 13, 0), + endDate: new Date(2026, 6, 13, 15, 30), + }, { + text: 'Update NDA Agreement', + assigneeId: [2], + startDate: new Date(2026, 6, 14, 11, 0), + endDate: new Date(2026, 6, 14, 14, 15), + }, { + text: 'Submit Questions Regarding New NDA', + assigneeId: [2], + startDate: new Date(2026, 6, 15, 10, 0), + endDate: new Date(2026, 6, 15, 11, 30), + }, { + text: 'Submit Signed NDA', + assigneeId: [2], + startDate: new Date(2026, 6, 15, 13, 0), + endDate: new Date(2026, 6, 15, 15, 0), + }, { + text: 'Review Training Course for any Omissions', + assigneeId: [2], + startDate: new Date(2026, 6, 16, 11, 0), + endDate: new Date(2026, 6, 16, 14, 0), + }, { + text: 'Update Employee Files with New NDA', + assigneeId: [2], + startDate: new Date(2026, 6, 17, 9, 0), + endDate: new Date(2026, 6, 17, 11, 45), + }, { + text: 'Website Re-Design Plan', + assigneeId: [3], + startDate: new Date(2026, 6, 13, 9, 30), + endDate: new Date(2026, 6, 13, 11, 30), + }, { + text: 'New Brochures', + assigneeId: [3], + startDate: new Date(2026, 6, 13, 13, 0), + endDate: new Date(2026, 6, 13, 15, 15), + }, { + text: 'Approve Personal Computer Upgrade Plan', + assigneeId: [3], + startDate: new Date(2026, 6, 14, 10, 0), + endDate: new Date(2026, 6, 14, 11, 0), + }, { + text: 'Final Budget Review', + assigneeId: [3], + startDate: new Date(2026, 6, 14, 12, 0), + endDate: new Date(2026, 6, 14, 13, 35), + }, { + text: 'Approve New Online Marketing Strategy', + assigneeId: [3], + startDate: new Date(2026, 6, 15, 12, 0), + endDate: new Date(2026, 6, 15, 14, 0), + }, { + text: 'Prepare 2026 Marketing Plan', + assigneeId: [3], + startDate: new Date(2026, 6, 16, 11, 0), + endDate: new Date(2026, 6, 16, 13, 30), + }, { + text: 'Create Icons for Website', + assigneeId: [3], + startDate: new Date(2026, 6, 17, 10, 0), + endDate: new Date(2026, 6, 17, 11, 30), + }, { + text: 'Launch New Website', + assigneeId: [3], + startDate: new Date(2026, 6, 17, 12, 20), + endDate: new Date(2026, 6, 17, 14, 0), + }, { + text: 'Comment on Revenue Projections', + assigneeId: [4], + startDate: new Date(2026, 6, 13, 10, 0), + endDate: new Date(2026, 6, 13, 13, 0), + }, { + text: 'Approve Hiring of John Jeffers', + assigneeId: [4], + startDate: new Date(2026, 6, 14, 9, 0), + endDate: new Date(2026, 6, 14, 12, 0), + }, { + text: 'Non-Compete Agreements', + assigneeId: [4], + startDate: new Date(2026, 6, 14, 13, 0), + endDate: new Date(2026, 6, 14, 15, 45), + }, { + text: 'Review Revenue Projections', + assigneeId: [4], + startDate: new Date(2026, 6, 15, 11, 0), + endDate: new Date(2026, 6, 15, 14, 0), + }, { + text: 'Review Changes to Health Insurance Coverage', + assigneeId: [4], + startDate: new Date(2026, 6, 16, 9, 0), + endDate: new Date(2026, 6, 16, 13, 0), + }, { + text: 'Provide New Health Insurance Docs', + assigneeId: [4], + startDate: new Date(2026, 6, 17, 12, 0), + endDate: new Date(2026, 6, 17, 15, 0), + }, +]; diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/jQuery/index.html b/apps/demos/Demos/Scheduler/MultilevelGrouping/jQuery/index.html new file mode 100644 index 000000000000..2ae8d3e24cc1 --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/jQuery/index.html @@ -0,0 +1,20 @@ + + + + DevExtreme Demo + + + + + + + + + + + +
+
+
+ + diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/jQuery/index.js b/apps/demos/Demos/Scheduler/MultilevelGrouping/jQuery/index.js new file mode 100644 index 000000000000..a416140d5762 --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/jQuery/index.js @@ -0,0 +1,167 @@ +const rooms = assignees.filter((item) => item.parentId === null); + +const employeesOf = (roomId) => assignees.filter((item) => item.parentId === roomId); + +const roomOf = (assigneeId) => { + const employee = assignees.find((item) => item.id === assigneeId); + + return employee ? employee.parentId : null; +}; + +const findItem = (items, predicate) => { + for (let i = 0; i < items.length; i += 1) { + if (predicate(items[i])) { + return { list: items, index: i }; + } + + if (items[i].items) { + const found = findItem(items[i].items, predicate); + + if (found) { + return found; + } + } + } + + return null; +}; + +const createRoomGroup = (form, roomId) => ({ + itemType: 'group', + name: 'roomGroup', + cssClass: 'dx-scheduler-form-group-with-icon', + colCount: 2, + colCountByScreen: { xs: 2 }, + items: [ + { + colSpan: 1, + name: 'roomIcon', + cssClass: 'dx-scheduler-form-icon', + template: () => $('
').addClass('dx-icon dx-icon-conferenceroomoutline'), + }, + { + itemType: 'simple', + name: 'roomEditor', + colSpan: 1, + label: { visible: false }, + editorType: 'dxSelectBox', + editorOptions: { + dataSource: rooms, + displayExpr: 'shortText', + valueExpr: 'id', + value: roomId, + placeholder: 'Room', + stylingMode: form.getEditor('assigneeId')?.option('stylingMode'), + onValueChanged(e) { + const editor = form.getEditor('assigneeId'); + + editor?.option('dataSource', employeesOf(e.value)); + editor?.option('value', []); + }, + }, + }, + ], +}); + +const renderEmployeeTag = (data) => { + const tag = document.createElement('div'); + + tag.className = 'dx-tag-content'; + tag.style.backgroundColor = data.color ?? ''; + tag.style.borderColor = data.color ?? 'transparent'; + tag.textContent = data.text; + + const removeButton = document.createElement('div'); + + removeButton.className = 'dx-tag-remove-button'; + tag.appendChild(removeButton); + + return tag; +}; + +const hideLabels = (items) => { + items.forEach((item) => { + if (item.items) { + hideLabels(item.items); + } else if (item.dataField !== 'allDay') { + item.label = { ...item.label, visible: false }; + } + }); +}; + +$(() => { + $('#scheduler').dxScheduler({ + dataSource: appointments, + views: [{ + type: 'workWeek', + name: 'Vertical Grouping', + groupOrientation: 'vertical', + cellDuration: 60, + }, { + type: 'workWeek', + name: 'Horizontal Grouping', + groupOrientation: 'horizontal', + }], + currentView: 'Vertical Grouping', + currentDate: new Date(2026, 6, 13), + startDayHour: 9, + endDayHour: 16, + groups: ['assigneeId'], + resources: [ + { + fieldExpr: 'assigneeId', + dataSource: assignees, + parentIdExpr: 'parentId', + label: 'Employee', + allowMultiple: true, + icon: 'user', + }, + ], + crossScrollingEnabled: true, + showAllDayPanel: false, + showCurrentTimeIndicator: false, + height: 700, + onAppointmentFormOpening(e) { + const { form } = e; + const items = form.option('items'); + + if (findItem(items, (item) => item.name === 'roomGroup')) { + return; + } + + const appointment = e.appointmentData ?? {}; + const assigneeIds = appointment.assigneeId; + const [assigneeId] = Array.isArray(assigneeIds) ? assigneeIds : [assigneeIds]; + const roomId = roomOf(assigneeId); + const employee = findItem(items, (item) => item.name === 'assigneeIdGroup'); + + const repeatValue = form.getEditor('repeatEditor')?.option('value'); + + employee?.list.splice(employee.index, 0, createRoomGroup(form, roomId)); + hideLabels(items); + + const employeeEditor = findItem(items, (item) => item.dataField === 'assigneeId'); + + if (employeeEditor) { + employeeEditor.list[employeeEditor.index].validationRules = [ + { type: 'required', message: 'Employee is required' }, + ]; + employeeEditor.list[employeeEditor.index].editorOptions = { + ...employeeEditor.list[employeeEditor.index].editorOptions, + tagTemplate: renderEmployeeTag, + }; + } + + const description = findItem(items, (item) => item.name === 'descriptionGroup'); + + if (description) { + description.list[description.index].visible = false; + } + form.option('items', items.slice()); + + form.getEditor('repeatEditor')?.option('value', repeatValue); + + form.getEditor('assigneeId')?.option('dataSource', roomId ? employeesOf(roomId) : []); + }, + }); +}); diff --git a/apps/demos/Demos/Scheduler/MultilevelGrouping/jQuery/styles.css b/apps/demos/Demos/Scheduler/MultilevelGrouping/jQuery/styles.css new file mode 100644 index 000000000000..2fdf6823a33d --- /dev/null +++ b/apps/demos/Demos/Scheduler/MultilevelGrouping/jQuery/styles.css @@ -0,0 +1,23 @@ +.dx-scheduler-cell-sizes-horizontal { + width: 100px; +} + +.dx-scheduler-group-header { + min-width: 120px; +} + +.dx-scheduler-group-header, +.dx-scheduler-header-panel-empty-cell, +.dx-scheduler-work-space-vertical-group-table, +.dx-scheduler-work-space-vertical-grouped .dx-scheduler-time-panel-cell, +.dx-scheduler-work-space-grouped:not(.dx-scheduler-work-space-vertical-grouped) + .dx-scheduler-header-panel-cell { + background-color: var(--dx-color-main-bg); +} + +.dx-scheduler-group-header, +.dx-scheduler-group-header .dx-scheduler-group-header-content { + font-size: 11px; + font-weight: 600; + line-height: 16px; +} diff --git a/apps/demos/menuMeta.json b/apps/demos/menuMeta.json index 615934456789..ca85a670ba07 100644 --- a/apps/demos/menuMeta.json +++ b/apps/demos/menuMeta.json @@ -3927,6 +3927,12 @@ "/Models/SampleData/GroupByDateTasks.cs" ], "DemoType": "Web" + }, + { + "Title": "Multilevel Grouping", + "Name": "MultilevelGrouping", + "Widget": "Scheduler", + "DemoType": "Web" } ] }, diff --git a/apps/demos/testing/etalons/Scheduler-MultilevelGrouping (fluent.blue.light).png b/apps/demos/testing/etalons/Scheduler-MultilevelGrouping (fluent.blue.light).png new file mode 100644 index 0000000000000000000000000000000000000000..44df84eb8854f444bfed68537362d250faf030a2 GIT binary patch literal 69978 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 literal 0 HcmV?d00001 diff --git a/apps/demos/testing/etalons/Scheduler-MultilevelGrouping (material.blue.light).png b/apps/demos/testing/etalons/Scheduler-MultilevelGrouping (material.blue.light).png new file mode 100644 index 0000000000000000000000000000000000000000..0414a9042d851aa29a3fbad5a2ea40da2c387c75 GIT binary patch literal 54380 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 literal 0 HcmV?d00001