Skip to content

Commit 49cdfca

Browse files
Ambrozyalexslavr
andauthored
Scheduler - publish Toolbar - implement API (DevExpress#29109)
Co-authored-by: Vladimir Bushmanov <[email protected]> Co-authored-by: alexlavrov <[email protected]>
1 parent 26a604d commit 49cdfca

File tree

14 files changed

+1720
-9
lines changed

14 files changed

+1720
-9
lines changed

packages/devextreme-angular/src/ui/scheduler/index.ts

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import dxScheduler from 'devextreme/ui/scheduler';
2626
import dxSortable from 'devextreme/ui/sortable';
2727
import dxDraggable from 'devextreme/ui/draggable';
2828
import DataSource from 'devextreme/data/data_source';
29-
import { AllDayPanelMode, ViewType, dxSchedulerAppointment, CellAppointmentsLimit, AppointmentAddedEvent, AppointmentAddingEvent, AppointmentClickEvent, AppointmentContextMenuEvent, AppointmentDblClickEvent, AppointmentDeletedEvent, AppointmentDeletingEvent, AppointmentFormOpeningEvent, AppointmentRenderedEvent, AppointmentTooltipShowingEvent, AppointmentUpdatedEvent, AppointmentUpdatingEvent, CellClickEvent, CellContextMenuEvent, ContentReadyEvent, DisposingEvent, InitializedEvent, OptionChangedEvent, RecurrenceEditMode, dxSchedulerScrolling } from 'devextreme/ui/scheduler';
29+
import { AllDayPanelMode, ViewType, dxSchedulerAppointment, CellAppointmentsLimit, AppointmentAddedEvent, AppointmentAddingEvent, AppointmentClickEvent, AppointmentContextMenuEvent, AppointmentDblClickEvent, AppointmentDeletedEvent, AppointmentDeletingEvent, AppointmentFormOpeningEvent, AppointmentRenderedEvent, AppointmentTooltipShowingEvent, AppointmentUpdatedEvent, AppointmentUpdatingEvent, CellClickEvent, CellContextMenuEvent, ContentReadyEvent, DisposingEvent, InitializedEvent, OptionChangedEvent, RecurrenceEditMode, dxSchedulerScrolling, dxSchedulerToolbar } from 'devextreme/ui/scheduler';
3030
import { event } from 'devextreme/events/events.types';
3131
import { DataSourceOptions } from 'devextreme/data/data_source';
3232
import { Store } from 'devextreme/data/store';
@@ -53,8 +53,13 @@ import { DxiViewModule } from 'devextreme-angular/ui/nested';
5353

5454
import { DxoSchedulerAppointmentDraggingModule } from 'devextreme-angular/ui/scheduler/nested';
5555
import { DxoSchedulerEditingModule } from 'devextreme-angular/ui/scheduler/nested';
56+
import { DxiSchedulerItemModule } from 'devextreme-angular/ui/scheduler/nested';
57+
import { DxoSchedulerOptionsModule } from 'devextreme-angular/ui/scheduler/nested';
58+
import { DxiSchedulerOptionsItemModule } from 'devextreme-angular/ui/scheduler/nested';
5659
import { DxiSchedulerResourceModule } from 'devextreme-angular/ui/scheduler/nested';
5760
import { DxoSchedulerScrollingModule } from 'devextreme-angular/ui/scheduler/nested';
61+
import { DxoSchedulerToolbarModule } from 'devextreme-angular/ui/scheduler/nested';
62+
import { DxiSchedulerToolbarItemModule } from 'devextreme-angular/ui/scheduler/nested';
5863
import { DxiSchedulerViewModule } from 'devextreme-angular/ui/scheduler/nested';
5964

6065
import { DxiResourceComponent } from 'devextreme-angular/ui/nested';
@@ -814,6 +819,19 @@ export class DxSchedulerComponent extends DxComponent implements OnDestroy, OnCh
814819
}
815820

816821

822+
/**
823+
* [descr:dxSchedulerOptions.toolbar]
824+
825+
*/
826+
@Input()
827+
get toolbar(): dxSchedulerToolbar | undefined {
828+
return this._getOption('toolbar');
829+
}
830+
set toolbar(value: dxSchedulerToolbar | undefined) {
831+
this._setOption('toolbar', value);
832+
}
833+
834+
817835
/**
818836
* [descr:dxSchedulerOptions.useDropDownViewSwitcher]
819837
@@ -1401,6 +1419,13 @@ export class DxSchedulerComponent extends DxComponent implements OnDestroy, OnCh
14011419
*/
14021420
@Output() timeZoneChange: EventEmitter<string>;
14031421

1422+
/**
1423+
1424+
* This member supports the internal infrastructure and is not intended to be used directly from your code.
1425+
1426+
*/
1427+
@Output() toolbarChange: EventEmitter<dxSchedulerToolbar | undefined>;
1428+
14041429
/**
14051430
14061431
* This member supports the internal infrastructure and is not intended to be used directly from your code.
@@ -1552,6 +1577,7 @@ export class DxSchedulerComponent extends DxComponent implements OnDestroy, OnCh
15521577
{ emit: 'textExprChange' },
15531578
{ emit: 'timeCellTemplateChange' },
15541579
{ emit: 'timeZoneChange' },
1580+
{ emit: 'toolbarChange' },
15551581
{ emit: 'useDropDownViewSwitcherChange' },
15561582
{ emit: 'viewsChange' },
15571583
{ emit: 'visibleChange' },
@@ -1618,8 +1644,13 @@ export class DxSchedulerComponent extends DxComponent implements OnDestroy, OnCh
16181644
DxiViewModule,
16191645
DxoSchedulerAppointmentDraggingModule,
16201646
DxoSchedulerEditingModule,
1647+
DxiSchedulerItemModule,
1648+
DxoSchedulerOptionsModule,
1649+
DxiSchedulerOptionsItemModule,
16211650
DxiSchedulerResourceModule,
16221651
DxoSchedulerScrollingModule,
1652+
DxoSchedulerToolbarModule,
1653+
DxiSchedulerToolbarItemModule,
16231654
DxiSchedulerViewModule,
16241655
DxIntegrationModule,
16251656
DxTemplateModule
@@ -1633,8 +1664,13 @@ export class DxSchedulerComponent extends DxComponent implements OnDestroy, OnCh
16331664
DxiViewModule,
16341665
DxoSchedulerAppointmentDraggingModule,
16351666
DxoSchedulerEditingModule,
1667+
DxiSchedulerItemModule,
1668+
DxoSchedulerOptionsModule,
1669+
DxiSchedulerOptionsItemModule,
16361670
DxiSchedulerResourceModule,
16371671
DxoSchedulerScrollingModule,
1672+
DxoSchedulerToolbarModule,
1673+
DxiSchedulerToolbarItemModule,
16381674
DxiSchedulerViewModule,
16391675
DxTemplateModule
16401676
]
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
export * from './appointment-dragging';
22
export * from './editing';
3+
export * from './item-dxi';
4+
export * from './options-item-dxi';
5+
export * from './options';
36
export * from './resource-dxi';
47
export * from './scrolling';
8+
export * from './toolbar-item-dxi';
9+
export * from './toolbar';
510
export * from './view-dxi';
611

Lines changed: 221 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,221 @@
1+
/* tslint:disable:max-line-length */
2+
3+
4+
import {
5+
Component,
6+
NgModule,
7+
Host,
8+
ElementRef,
9+
Renderer2,
10+
Inject,
11+
AfterViewInit,
12+
SkipSelf,
13+
Input
14+
} from '@angular/core';
15+
16+
import { DOCUMENT } from '@angular/common';
17+
18+
19+
import { LocateInMenuMode, ShowTextMode } from 'devextreme/ui/toolbar';
20+
import { ToolbarItemLocation, ToolbarItemComponent, ButtonType } from 'devextreme/common';
21+
import { SchedulerPredefinedToolbarItem, DateNavigatorItemProperties } from 'devextreme/ui/scheduler';
22+
23+
import {
24+
DxIntegrationModule,
25+
NestedOptionHost,
26+
extractTemplate,
27+
DxTemplateDirective,
28+
IDxTemplateHost,
29+
DxTemplateHost
30+
} from 'devextreme-angular/core';
31+
import { CollectionNestedOption } from 'devextreme-angular/core';
32+
33+
34+
@Component({
35+
selector: 'dxi-scheduler-item',
36+
standalone: true,
37+
template: '<ng-content></ng-content>',
38+
styles: [':host { display: block; }'],
39+
imports: [ DxIntegrationModule ],
40+
providers: [NestedOptionHost, DxTemplateHost]
41+
})
42+
export class DxiSchedulerItemComponent extends CollectionNestedOption implements AfterViewInit,
43+
IDxTemplateHost {
44+
@Input()
45+
get cssClass(): string | undefined {
46+
return this._getOption('cssClass');
47+
}
48+
set cssClass(value: string | undefined) {
49+
this._setOption('cssClass', value);
50+
}
51+
52+
@Input()
53+
get disabled(): boolean {
54+
return this._getOption('disabled');
55+
}
56+
set disabled(value: boolean) {
57+
this._setOption('disabled', value);
58+
}
59+
60+
@Input()
61+
get html(): string {
62+
return this._getOption('html');
63+
}
64+
set html(value: string) {
65+
this._setOption('html', value);
66+
}
67+
68+
@Input()
69+
get locateInMenu(): LocateInMenuMode {
70+
return this._getOption('locateInMenu');
71+
}
72+
set locateInMenu(value: LocateInMenuMode) {
73+
this._setOption('locateInMenu', value);
74+
}
75+
76+
@Input()
77+
get location(): ToolbarItemLocation {
78+
return this._getOption('location');
79+
}
80+
set location(value: ToolbarItemLocation) {
81+
this._setOption('location', value);
82+
}
83+
84+
@Input()
85+
get menuItemTemplate(): any {
86+
return this._getOption('menuItemTemplate');
87+
}
88+
set menuItemTemplate(value: any) {
89+
this._setOption('menuItemTemplate', value);
90+
}
91+
92+
@Input()
93+
get name(): SchedulerPredefinedToolbarItem {
94+
return this._getOption('name');
95+
}
96+
set name(value: SchedulerPredefinedToolbarItem) {
97+
this._setOption('name', value);
98+
}
99+
100+
@Input()
101+
get options(): DateNavigatorItemProperties | Record<string, any> {
102+
return this._getOption('options');
103+
}
104+
set options(value: DateNavigatorItemProperties | Record<string, any>) {
105+
this._setOption('options', value);
106+
}
107+
108+
@Input()
109+
get showText(): ShowTextMode {
110+
return this._getOption('showText');
111+
}
112+
set showText(value: ShowTextMode) {
113+
this._setOption('showText', value);
114+
}
115+
116+
@Input()
117+
get template(): any {
118+
return this._getOption('template');
119+
}
120+
set template(value: any) {
121+
this._setOption('template', value);
122+
}
123+
124+
@Input()
125+
get text(): string {
126+
return this._getOption('text');
127+
}
128+
set text(value: string) {
129+
this._setOption('text', value);
130+
}
131+
132+
@Input()
133+
get visible(): boolean {
134+
return this._getOption('visible');
135+
}
136+
set visible(value: boolean) {
137+
this._setOption('visible', value);
138+
}
139+
140+
@Input()
141+
get widget(): ToolbarItemComponent {
142+
return this._getOption('widget');
143+
}
144+
set widget(value: ToolbarItemComponent) {
145+
this._setOption('widget', value);
146+
}
147+
148+
@Input()
149+
get elementAttr(): Record<string, any> {
150+
return this._getOption('elementAttr');
151+
}
152+
set elementAttr(value: Record<string, any>) {
153+
this._setOption('elementAttr', value);
154+
}
155+
156+
@Input()
157+
get hint(): string {
158+
return this._getOption('hint');
159+
}
160+
set hint(value: string) {
161+
this._setOption('hint', value);
162+
}
163+
164+
@Input()
165+
get icon(): string {
166+
return this._getOption('icon');
167+
}
168+
set icon(value: string) {
169+
this._setOption('icon', value);
170+
}
171+
172+
@Input()
173+
get type(): ButtonType | string {
174+
return this._getOption('type');
175+
}
176+
set type(value: ButtonType | string) {
177+
this._setOption('type', value);
178+
}
179+
180+
181+
protected get _optionPath() {
182+
return 'items';
183+
}
184+
185+
186+
constructor(@SkipSelf() @Host() parentOptionHost: NestedOptionHost,
187+
@Host() optionHost: NestedOptionHost,
188+
private renderer: Renderer2,
189+
@Inject(DOCUMENT) private document: any,
190+
@Host() templateHost: DxTemplateHost,
191+
private element: ElementRef) {
192+
super();
193+
parentOptionHost.setNestedOption(this);
194+
optionHost.setHost(this, this._fullOptionPath.bind(this));
195+
templateHost.setHost(this);
196+
}
197+
198+
setTemplate(template: DxTemplateDirective) {
199+
this.template = template;
200+
}
201+
ngAfterViewInit() {
202+
extractTemplate(this, this.element, this.renderer, this.document);
203+
}
204+
205+
206+
207+
ngOnDestroy() {
208+
this._deleteRemovedOptions(this._fullOptionPath());
209+
}
210+
211+
}
212+
213+
@NgModule({
214+
imports: [
215+
DxiSchedulerItemComponent
216+
],
217+
exports: [
218+
DxiSchedulerItemComponent
219+
],
220+
})
221+
export class DxiSchedulerItemModule { }

0 commit comments

Comments
 (0)