Skip to content

Commit bbf38a1

Browse files
authored
Merge branch 'master' into sstoychev/action-strip-titles-master
2 parents 8431745 + 55f716c commit bbf38a1

File tree

2 files changed

+178
-3
lines changed

2 files changed

+178
-3
lines changed

projects/igniteui-angular/migrations/update-13_0_0/index.spec.ts

Lines changed: 123 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,14 @@ describe(`Update to ${version}`, () => {
2222
}
2323
};
2424

25-
const migrationName = 'migration-22';
26-
2725
beforeEach(() => {
2826
appTree = new UnitTestTree(new EmptyTree());
2927
appTree.create('/angular.json', JSON.stringify(configJson));
3028
});
3129

30+
const migrationName = 'migration-22';
31+
const lineBreaksAndSpaceRegex = /\s/g;
32+
3233
it('should rename CarouselAnimationType to HorizontalAnimationType', async () => {
3334
appTree.create(
3435
'/testSrc/appPrefix/component/test.component.ts',
@@ -67,4 +68,124 @@ describe(`Update to ${version}`, () => {
6768
)
6869
).toEqual(expectedContent);
6970
});
71+
72+
/* eslint-disable arrow-parens */
73+
it('Should properly rename columns property to columnsCollection', async () => {
74+
appTree.create('/testSrc/appPrefix/component/test.component.ts',
75+
`
76+
import { IgxGridComponent } from 'igniteui-angular';
77+
export class MyClass {
78+
@ViewChild(IgxGridComponent, { read: IgxGridComponent })
79+
public grid1: IgxGridComponent;
80+
81+
public ngAfterViewInit() {
82+
const columns = grid1.columns;
83+
}
84+
}
85+
`);
86+
87+
const tree = await schematicRunner
88+
.runSchematicAsync(migrationName, {}, appTree)
89+
.toPromise();
90+
91+
expect(
92+
tree.readContent('/testSrc/appPrefix/component/test.component.ts')
93+
).toEqual(
94+
`
95+
import { IgxGridComponent } from 'igniteui-angular';
96+
export class MyClass {
97+
@ViewChild(IgxGridComponent, { read: IgxGridComponent })
98+
public grid1: IgxGridComponent;
99+
100+
public ngAfterViewInit() {
101+
const columns = grid1.columnsCollection;
102+
}
103+
}
104+
`
105+
);
106+
});
107+
108+
it('Should properly rename columns property to columnsCollection - treeGrid', async () => {
109+
appTree.create('/testSrc/appPrefix/component/test.component.ts',
110+
`
111+
import { IgxTreeGridComponent } from 'igniteui-angular';
112+
export class MyClass {
113+
@ViewChild(IgxTreeGridComponent, { read: IgxTreeGridComponent })
114+
public tGrid1: IgxTreeGridComponent;
115+
116+
public ngAfterViewInit() {
117+
const columns = this.tGrid1.columns;
118+
}
119+
120+
public soSth() {
121+
const editableColumns = this.tGrid1.columns.filter(c => e.editable);
122+
}
123+
}
124+
`);
125+
126+
const tree = await schematicRunner
127+
.runSchematicAsync(migrationName, {}, appTree)
128+
.toPromise();
129+
130+
expect(
131+
tree.readContent('/testSrc/appPrefix/component/test.component.ts')
132+
).toEqual(
133+
`
134+
import { IgxTreeGridComponent } from 'igniteui-angular';
135+
export class MyClass {
136+
@ViewChild(IgxTreeGridComponent, { read: IgxTreeGridComponent })
137+
public tGrid1: IgxTreeGridComponent;
138+
139+
public ngAfterViewInit() {
140+
const columns = this.tGrid1.columnsCollection;
141+
}
142+
143+
public soSth() {
144+
const editableColumns = this.tGrid1.columnsCollection.filter(c => e.editable);
145+
}
146+
}
147+
`
148+
);
149+
});
150+
151+
it('should remove paging and paginationTemplate property and define a igx-paginator component with custom content', async () => {
152+
appTree.create(
153+
'/testSrc/appPrefix/component/test.component.html', `
154+
<div class="columnHidingContainer">
155+
<div *ngFor="let col of grid.columns">
156+
{{col.field}}
157+
</div>
158+
</div>
159+
<div class="gridContainer">
160+
<igx-grid igxPreventDocumentScroll #grid [data]="data" [autoGenerate]="false" width="100%" height="560px" columnWidth="200px"
161+
[allowFiltering]="true">
162+
<igx-column [field]="'ID'" dataType="string" [sortable]="true"></igx-column>
163+
<igx-column [field]="'ContactName'" dataType="string" [sortable]="true" [disableHiding]="true"></igx-column>
164+
<igx-column [field]="'ContactTitle'" dataType="string" [sortable]="true" [disableHiding]="true"></igx-column>
165+
<igx-column [field]="'City'" dataType="string" [sortable]="true"></igx-column>
166+
<igx-column [field]="'CompanyName'" dataType="string" [sortable]="true"></igx-column>
167+
</igx-grid>
168+
</div>`);
169+
const tree = await schematicRunner.runSchematicAsync(migrationName, {}, appTree)
170+
.toPromise();
171+
172+
expect(tree.readContent('/testSrc/appPrefix/component/test.component.html').replace(lineBreaksAndSpaceRegex, ''))
173+
.toEqual(`
174+
<div class="columnHidingContainer">
175+
<div *ngFor="let col of grid.columnsCollection">
176+
{{col.field}}
177+
</div>
178+
</div>
179+
<div class="gridContainer">
180+
<igx-grid igxPreventDocumentScroll #grid [data]="data" [autoGenerate]="false" width="100%" height="560px" columnWidth="200px"
181+
[allowFiltering]="true">
182+
<igx-column [field]="'ID'" dataType="string" [sortable]="true"></igx-column>
183+
<igx-column [field]="'ContactName'" dataType="string" [sortable]="true" [disableHiding]="true"></igx-column>
184+
<igx-column [field]="'ContactTitle'" dataType="string" [sortable]="true" [disableHiding]="true"></igx-column>
185+
<igx-column [field]="'City'" dataType="string" [sortable]="true"></igx-column>
186+
<igx-column [field]="'CompanyName'" dataType="string" [sortable]="true"></igx-column>
187+
</igx-grid>
188+
</div>
189+
`.replace(lineBreaksAndSpaceRegex, ''));
190+
});
70191
});
Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,65 @@
1-
import { Rule, SchematicContext, Tree } from '@angular-devkit/schematics';
1+
import {
2+
Rule,
3+
SchematicContext,
4+
Tree
5+
} from '@angular-devkit/schematics';
26
import { UpdateChanges } from '../common/UpdateChanges';
7+
import { Element } from '@angular/compiler';
8+
import { findElementNodes, getSourceOffset, parseFile } from '../common/util';
39

410
const version = '13.0.0';
511

612
export default (): Rule => (host: Tree, context: SchematicContext) => {
713
context.logger.info(`Applying migration for Ignite UI for Angular to version ${version}`);
814

915
const update = new UpdateChanges(__dirname, host, context);
16+
const GRIDS = ['IgxGridComponent', 'IgxTreeGridComponent', 'IgxHierarchicalGridComponent'];
17+
const TAGS = ['igx-grid', 'igx-tree-grid', 'igx-hierarchical-grid'];
18+
const tsFiles = update.tsFiles;
19+
20+
for (const path of update.templateFiles) {
21+
findElementNodes(parseFile(host, path), TAGS)
22+
.map(node => getSourceOffset(node as Element))
23+
.forEach(offset => {
24+
const { file, node } = offset;
25+
if (file.content.includes('columns')) {
26+
const gridRef = node.attrs.find(e => e.name.includes('#')).name.substring(1);
27+
const content = file.content.split(gridRef + '.columns').join(gridRef + '.columnsCollection');
28+
host.overwrite(path, content);
29+
}
30+
});
31+
}
32+
33+
const getIndicesOf = (searchStr, str) => {
34+
if (searchStr.length === 0) {
35+
return [];
36+
}
37+
let startIndex = 0;
38+
let index = 0;
39+
const indexes = [];
40+
while ((index = str.indexOf(searchStr, startIndex)) > -1) {
41+
indexes.push(index);
42+
startIndex = index + searchStr.length;
43+
}
44+
return indexes;
45+
};
46+
47+
for (const path of tsFiles) {
48+
let content = host.read(path)?.toString();
49+
GRIDS.forEach(grid => {
50+
if (content.indexOf(grid) > -1) {
51+
const indexes = getIndicesOf('@ViewChild', content);
52+
indexes.forEach(index => {
53+
const viewChildRef = content.substring(index, content.indexOf(';', index)).replace(/\s\s+/g, ' ');
54+
if (viewChildRef.includes(grid)) {
55+
const gridDeclaration = viewChildRef.substring(viewChildRef.indexOf(')') + 1).replace(/\:/g, '').trim();
56+
const gridName = gridDeclaration.split(' ')[1];
57+
content = content.split(gridName + '.columns').join(gridName + '.columnsCollection');
58+
host.overwrite(path, content);
59+
}
60+
});
61+
}
62+
});
63+
}
1064
update.applyChanges();
1165
};

0 commit comments

Comments
 (0)