Skip to content

Commit ed19b88

Browse files
authored
Angular: Generate missing nested with recursive owners (DevExpress#30666)
1 parent adbe1af commit ed19b88

File tree

5 files changed

+121
-13
lines changed

5 files changed

+121
-13
lines changed

packages/devextreme-angular/src/ui/card-view/nested/tab-dxi.ts

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@ import {
1010
Inject,
1111
AfterViewInit,
1212
SkipSelf,
13-
Input
13+
Input,
14+
ContentChildren,
15+
forwardRef,
16+
QueryList,
17+
AfterContentInit
1418
} from '@angular/core';
1519

1620
import { DOCUMENT } from '@angular/common';
@@ -27,6 +31,12 @@ import {
2731
DxTemplateHost
2832
} from 'devextreme-angular/core';
2933
import { CollectionNestedOption } from 'devextreme-angular/core';
34+
import { DxiCardViewButtonItemComponent } from './button-item-dxi';
35+
import { DxiCardViewEmptyItemComponent } from './empty-item-dxi';
36+
import { DxiCardViewGroupItemComponent } from './group-item-dxi';
37+
import { DxiCardViewItemComponent } from './item-dxi';
38+
import { DxiCardViewSimpleItemComponent } from './simple-item-dxi';
39+
import { DxiCardViewTabbedItemComponent } from './tabbed-item-dxi';
3040

3141

3242
@Component({
@@ -38,7 +48,7 @@ import { CollectionNestedOption } from 'devextreme-angular/core';
3848
providers: [NestedOptionHost, DxTemplateHost]
3949
})
4050
export class DxiCardViewTabComponent extends CollectionNestedOption implements AfterViewInit,
41-
IDxTemplateHost {
51+
IDxTemplateHost, AfterContentInit {
4252
@Input()
4353
get alignItemLabels(): boolean {
4454
return this._getOption('alignItemLabels');
@@ -125,6 +135,37 @@ export class DxiCardViewTabComponent extends CollectionNestedOption implements A
125135
}
126136

127137

138+
@ContentChildren(forwardRef(() => DxiCardViewButtonItemComponent)) buttonItemsChildren!: QueryList<DxiCardViewButtonItemComponent>
139+
140+
@ContentChildren(forwardRef(() => DxiCardViewEmptyItemComponent)) emptyItemsChildren!: QueryList<DxiCardViewEmptyItemComponent>
141+
142+
@ContentChildren(forwardRef(() => DxiCardViewGroupItemComponent)) groupItemsChildren!: QueryList<DxiCardViewGroupItemComponent>
143+
144+
@ContentChildren(forwardRef(() => DxiCardViewItemComponent)) itemsChildren!: QueryList<DxiCardViewItemComponent>
145+
146+
@ContentChildren(forwardRef(() => DxiCardViewSimpleItemComponent)) simpleItemsChildren!: QueryList<DxiCardViewSimpleItemComponent>
147+
148+
@ContentChildren(forwardRef(() => DxiCardViewTabbedItemComponent)) tabbedItemsChildren!: QueryList<DxiCardViewTabbedItemComponent>
149+
150+
setItems() {
151+
const q: QueryList<any> = new QueryList();
152+
q.reset([
153+
...this.buttonItemsChildren.toArray(),
154+
...this.emptyItemsChildren.toArray(),
155+
...this.groupItemsChildren.toArray(),
156+
...this.itemsChildren.toArray(),
157+
...this.simpleItemsChildren.toArray(),
158+
...this.tabbedItemsChildren.toArray(),
159+
]);
160+
this.setChildren('items', q);
161+
}
162+
163+
164+
165+
166+
167+
168+
128169
constructor(@SkipSelf() @Host() parentOptionHost: NestedOptionHost,
129170
@Host() optionHost: NestedOptionHost,
130171
private renderer: Renderer2,
@@ -150,6 +191,16 @@ export class DxiCardViewTabComponent extends CollectionNestedOption implements A
150191
this._deleteRemovedOptions(this._fullOptionPath());
151192
}
152193

194+
ngAfterContentInit() {
195+
this.setItems();
196+
197+
this.buttonItemsChildren.changes.subscribe(() => { this.setItems() });
198+
this.emptyItemsChildren.changes.subscribe(() => { this.setItems() });
199+
this.groupItemsChildren.changes.subscribe(() => { this.setItems() });
200+
this.itemsChildren.changes.subscribe(() => { this.setItems() });
201+
this.simpleItemsChildren.changes.subscribe(() => { this.setItems() });
202+
this.tabbedItemsChildren.changes.subscribe(() => { this.setItems() });
203+
}
153204
}
154205

155206
@NgModule({

packages/devextreme-angular/src/ui/form/nested/tab-dxi.ts

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@ import {
1010
Inject,
1111
AfterViewInit,
1212
SkipSelf,
13-
Input
13+
Input,
14+
ContentChildren,
15+
forwardRef,
16+
QueryList,
17+
AfterContentInit
1418
} from '@angular/core';
1519

1620
import { DOCUMENT } from '@angular/common';
@@ -27,6 +31,12 @@ import {
2731
DxTemplateHost
2832
} from 'devextreme-angular/core';
2933
import { CollectionNestedOption } from 'devextreme-angular/core';
34+
import { DxiFormButtonItemComponent } from './button-item-dxi';
35+
import { DxiFormEmptyItemComponent } from './empty-item-dxi';
36+
import { DxiFormGroupItemComponent } from './group-item-dxi';
37+
import { DxiFormItemComponent } from './item-dxi';
38+
import { DxiFormSimpleItemComponent } from './simple-item-dxi';
39+
import { DxiFormTabbedItemComponent } from './tabbed-item-dxi';
3040

3141

3242
@Component({
@@ -38,7 +48,7 @@ import { CollectionNestedOption } from 'devextreme-angular/core';
3848
providers: [NestedOptionHost, DxTemplateHost]
3949
})
4050
export class DxiFormTabComponent extends CollectionNestedOption implements AfterViewInit,
41-
IDxTemplateHost {
51+
IDxTemplateHost, AfterContentInit {
4252
@Input()
4353
get alignItemLabels(): boolean {
4454
return this._getOption('alignItemLabels');
@@ -125,6 +135,37 @@ export class DxiFormTabComponent extends CollectionNestedOption implements After
125135
}
126136

127137

138+
@ContentChildren(forwardRef(() => DxiFormButtonItemComponent)) buttonItemsChildren!: QueryList<DxiFormButtonItemComponent>
139+
140+
@ContentChildren(forwardRef(() => DxiFormEmptyItemComponent)) emptyItemsChildren!: QueryList<DxiFormEmptyItemComponent>
141+
142+
@ContentChildren(forwardRef(() => DxiFormGroupItemComponent)) groupItemsChildren!: QueryList<DxiFormGroupItemComponent>
143+
144+
@ContentChildren(forwardRef(() => DxiFormItemComponent)) itemsChildren!: QueryList<DxiFormItemComponent>
145+
146+
@ContentChildren(forwardRef(() => DxiFormSimpleItemComponent)) simpleItemsChildren!: QueryList<DxiFormSimpleItemComponent>
147+
148+
@ContentChildren(forwardRef(() => DxiFormTabbedItemComponent)) tabbedItemsChildren!: QueryList<DxiFormTabbedItemComponent>
149+
150+
setItems() {
151+
const q: QueryList<any> = new QueryList();
152+
q.reset([
153+
...this.buttonItemsChildren.toArray(),
154+
...this.emptyItemsChildren.toArray(),
155+
...this.groupItemsChildren.toArray(),
156+
...this.itemsChildren.toArray(),
157+
...this.simpleItemsChildren.toArray(),
158+
...this.tabbedItemsChildren.toArray(),
159+
]);
160+
this.setChildren('items', q);
161+
}
162+
163+
164+
165+
166+
167+
168+
128169
constructor(@SkipSelf() @Host() parentOptionHost: NestedOptionHost,
129170
@Host() optionHost: NestedOptionHost,
130171
private renderer: Renderer2,
@@ -150,6 +191,16 @@ export class DxiFormTabComponent extends CollectionNestedOption implements After
150191
this._deleteRemovedOptions(this._fullOptionPath());
151192
}
152193

194+
ngAfterContentInit() {
195+
this.setItems();
196+
197+
this.buttonItemsChildren.changes.subscribe(() => { this.setItems() });
198+
this.emptyItemsChildren.changes.subscribe(() => { this.setItems() });
199+
this.groupItemsChildren.changes.subscribe(() => { this.setItems() });
200+
this.itemsChildren.changes.subscribe(() => { this.setItems() });
201+
this.simpleItemsChildren.changes.subscribe(() => { this.setItems() });
202+
this.tabbedItemsChildren.changes.subscribe(() => { this.setItems() });
203+
}
153204
}
154205

155206
@NgModule({

packages/devextreme-angular/src/ui/gantt/nested/context-menu-item-item-dxi.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import {
3232
} from 'devextreme-angular/core';
3333
import { CollectionNestedOption } from 'devextreme-angular/core';
3434
import { DxiGanttItemComponent } from './item-dxi';
35+
import { DxiGanttContextMenuItemComponent } from './context-menu-item-dxi';
3536

3637

3738
@Component({
@@ -134,17 +135,21 @@ export class DxiGanttContextMenuItemItemComponent extends CollectionNestedOption
134135

135136
@ContentChildren(forwardRef(() => DxiGanttItemComponent)) itemsChildren!: QueryList<DxiGanttItemComponent>
136137

138+
@ContentChildren(forwardRef(() => DxiGanttContextMenuItemComponent)) contextMenuItemsChildren!: QueryList<DxiGanttContextMenuItemComponent>
139+
137140
setItems() {
138141
const q: QueryList<any> = new QueryList();
139142
q.reset([
140143
...this.contextMenuItemItemsChildren.toArray(),
141144
...this.itemsChildren.toArray(),
145+
...this.contextMenuItemsChildren.toArray(),
142146
]);
143147
this.setChildren('items', q);
144148
}
145149

146150

147151

152+
148153
constructor(@SkipSelf() @Host() parentOptionHost: NestedOptionHost,
149154
@Host() optionHost: NestedOptionHost,
150155
private renderer: Renderer2,
@@ -175,6 +180,7 @@ export class DxiGanttContextMenuItemItemComponent extends CollectionNestedOption
175180

176181
this.contextMenuItemItemsChildren.changes.subscribe(() => { this.setItems() });
177182
this.itemsChildren.changes.subscribe(() => { this.setItems() });
183+
this.contextMenuItemsChildren.changes.subscribe(() => { this.setItems() });
178184
}
179185
}
180186

pnpm-lock.yaml

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pnpm-workspace.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ catalogs:
4040
"@typescript-eslint/eslint-plugin": 5.62.0
4141
"@typescript-eslint/parser": 5.62.0
4242
tools:
43-
"devextreme-internal-tools": 18.0.0-beta.14
43+
"devextreme-internal-tools": 18.0.0-beta.15
4444
"prettier": 3.5.3
4545
"ts-node": 10.9.2
4646
"@types/node": 20.12.8

0 commit comments

Comments
 (0)