Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Toolbar refactor #8158

Merged
merged 82 commits into from
Nov 6, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
a7b57d5
feat(grid-toolbar): Toolbar refactor
rkaraivanov Sep 16, 2020
262952f
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Sep 16, 2020
7479c25
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Sep 16, 2020
99adc04
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Sep 18, 2020
f8fedf1
feat(grid-toolbar): Hierarchical grid implementation
rkaraivanov Sep 23, 2020
3a42ead
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Sep 23, 2020
f96514b
refactor(grid-toolbar): Correctly grid context
rkaraivanov Sep 24, 2020
de42f13
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Sep 24, 2020
0a67bfb
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Sep 25, 2020
3269247
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Sep 25, 2020
90d73c1
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Sep 28, 2020
487a8d1
fix(grid): Deselect columns for hiding
rkaraivanov Sep 28, 2020
1fa3707
feat(grid): Emit when the grid is fully available in the DOM
rkaraivanov Sep 28, 2020
2d21bc7
refactor(toolbar): Hierachical grid tweaks.
rkaraivanov Sep 28, 2020
9ed4df9
chore(*): Dev demos updates
rkaraivanov Sep 28, 2020
8e9d3dc
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Sep 28, 2020
53c4b5f
refactor(toolbar): Toolbar unit tests
rkaraivanov Sep 28, 2020
cdb2f4a
refactor(tests): More unit tests
rkaraivanov Sep 28, 2020
c2c50dd
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Sep 29, 2020
0c7afcf
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Sep 30, 2020
98c08ef
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Sep 30, 2020
585d4b5
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Oct 1, 2020
8d42254
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Oct 1, 2020
7646fe2
refactor(toolbar): Tests, api docs and tweaks
rkaraivanov Oct 5, 2020
bda349c
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Oct 5, 2020
b4e21ce
style(toolbar): provide styling for grid toolbar component
SisIvanova Oct 5, 2020
22c50df
refactor(*): Unit tests
rkaraivanov Oct 5, 2020
7daabc5
Merge branch 'rkaraivanov/toolbar-refactor' of https://github.com/Ign…
rkaraivanov Oct 5, 2020
a509ca3
refactor(*): More unit tests
rkaraivanov Oct 6, 2020
8e0a04c
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Oct 6, 2020
5837ae9
chore(styling): run stylelint --fix
rkaraivanov Oct 6, 2020
aa17160
refactor(toolbar): Even more unit tests
rkaraivanov Oct 6, 2020
40260c5
style(toolbar): update elevations, border & title width
SisIvanova Oct 7, 2020
95e6006
update dropdowns border
SisIvanova Oct 7, 2020
5e53ffd
refactor(toolbar): remove unnecessary selectors
SisIvanova Oct 7, 2020
d0044a2
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Oct 8, 2020
87df59b
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Oct 8, 2020
aa32b61
refactor(toolbar): change elevation variable
SisIvanova Oct 8, 2020
3df2dec
Merge branch 'rkaraivanov/toolbar-refactor' of https://github.com/Ign…
rkaraivanov Oct 9, 2020
af6695a
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Oct 9, 2020
98c0ffa
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Oct 12, 2020
18b5724
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Oct 12, 2020
5b12f55
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Oct 13, 2020
b2fc884
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Oct 13, 2020
c50f73a
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Oct 14, 2020
e084ee2
docs(toolbar): remove unnecessary requires from sass docs
SisIvanova Oct 14, 2020
fa3f4c6
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Oct 14, 2020
c9bd2ca
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Oct 14, 2020
32b5d6f
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Oct 15, 2020
ee44337
Merge branch 'rkaraivanov/toolbar-refactor' of https://github.com/Ign…
rkaraivanov Oct 19, 2020
4f3d3a6
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Oct 19, 2020
18b7606
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Oct 22, 2020
45b768e
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Oct 23, 2020
9fe92a3
feat(grid-toolbar): Add basic migrations
rkaraivanov Oct 26, 2020
2e0beba
feat(toolbar): Clean up migrations
rkaraivanov Oct 27, 2020
7e35800
fix(migrations): File changes ordering
rkaraivanov Oct 27, 2020
9c5becb
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Oct 27, 2020
e37be1f
feat(toolbar): Template directive migration
rkaraivanov Oct 28, 2020
b62dce9
fix(toolbar): Focus action comp input on open
rkaraivanov Oct 29, 2020
8069160
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Oct 30, 2020
9765a26
feat(toolbar): Hierarchical grid migrations
rkaraivanov Nov 2, 2020
c582949
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Nov 2, 2020
39fc467
fix(toolbar): Migration binding on empty directives
rkaraivanov Nov 2, 2020
4f10352
feat(toolbar): Migrate template context bindings
rkaraivanov Nov 2, 2020
b497cec
fix(toolbar): Backward compatible props
rkaraivanov Nov 2, 2020
f67fce6
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Nov 2, 2020
5606626
chore(toolbar): Unit tests tweaks
rkaraivanov Nov 3, 2020
4e6e5fa
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Nov 3, 2020
abe4283
fix(toolbar): Toolbar width growing with pinned area
rkaraivanov Nov 3, 2020
15326e7
fix(toolbar): Expression changed error
rkaraivanov Nov 3, 2020
3c4550b
fix(toolbar): Dropdown max height
rkaraivanov Nov 3, 2020
59b7d4c
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Nov 4, 2020
47eabb3
fix(toolbar): Skip excel export dropdown
rkaraivanov Nov 4, 2020
77aec47
fix(toolbar): Choppy toggling of toolbar elements
rkaraivanov Nov 4, 2020
6beea68
refactor(toolbar): Address review comments
rkaraivanov Nov 4, 2020
dbf7e17
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Nov 4, 2020
65f646f
Merge branch 'master' into rkaraivanov/toolbar-refactor
zdrawku Nov 5, 2020
d279efc
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Nov 6, 2020
e636a8a
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Nov 6, 2020
4ad6913
Merge branch 'master' into rkaraivanov/toolbar-refactor
ChronosSF Nov 6, 2020
92cc4d8
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular…
rkaraivanov Nov 6, 2020
b6b9146
Merge branch 'rkaraivanov/toolbar-refactor' of https://github.com/Ign…
rkaraivanov Nov 6, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions projects/igniteui-angular/migrations/common/UpdateChanges.ts
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ export class UpdateChanges {
}

/** Add condition function. */
public addCondition(conditionName: string, callback: (ownerMatch: string) => boolean) {
public addCondition(conditionName: string, callback: (ownerMatch: string, path: string) => boolean) {
this.conditionFunctions.set(conditionName, callback);
}

Expand Down Expand Up @@ -266,7 +266,7 @@ export class UpdateChanges {

for (const match of matches) {
let replaceStatement = replace;
if (!this.areConditionsFulfiled(match, change.conditions)) {
if (!this.areConditionsFulfilled(match, change.conditions, entryPath)) {
continue;
}

Expand Down Expand Up @@ -403,12 +403,12 @@ export class UpdateChanges {
}
}

private areConditionsFulfiled(match: string, conditions: string[]): boolean {
private areConditionsFulfilled(match: string, conditions: string[], entryPath: string): boolean {
if (conditions) {
for (const condition of conditions) {
if (this.conditionFunctions && this.conditionFunctions.has(condition)) {
const callback = this.conditionFunctions.get(condition);
if (callback && !callback(match)) {
if (callback && !callback(match, entryPath)) {
return false;
}
}
Expand Down
160 changes: 160 additions & 0 deletions projects/igniteui-angular/migrations/common/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,19 @@ import * as path from 'path';
import { SchematicContext, Tree } from '@angular-devkit/schematics';
import { WorkspaceSchema, WorkspaceProject, ProjectType } from '@schematics/angular/utility/workspace-models';
import { execSync } from 'child_process';
import {
Attribute,
Comment,
Element,
Expansion,
ExpansionCase,
getHtmlTagDefinition,
HtmlParser,
Node,
Text,
Visitor
} from '@angular/compiler';
import { replaceMatch } from './tsUtils';

const configPaths = ['/.angular.json', '/angular.json'];

Expand Down Expand Up @@ -111,3 +124,150 @@ export function tryUninstallPackage(context: SchematicContext, packageManager: s
.warn(`Could not uninstall ${pkg}, you may want to uninstall it manually.`, JSON.parse(e));
}
}

interface TagOffset {
start: number;
end: number;
}

export interface SourceOffset {
startTag: TagOffset;
endTag: TagOffset;
file: {
content: string;
url: string;
};
node?: Element;
}


export class FileChange {

constructor(
public position = 0,
public text = '',
public replaceText = '',
public type: 'insert' | 'replace' = 'insert'
) {}

apply(content: string) {
if (this.type === 'insert') {
return `${content.substring(0, this.position)}${this.text}${content.substring(this.position)}`;
}
return replaceMatch(content, this.replaceText, this.text, this.position);
}
}

/**
* Parses an Angular template file/content and returns an array of the root nodes of the file.
*
* @param host
* @param filePath
* @param encoding
*/
export function parseFile(host: Tree, filePath: string, encoding = 'utf8') {
return new HtmlParser().parse(host.read(filePath).toString(encoding), filePath).rootNodes;
}

export function findElementNodes(root: Node[], tag: string | string[]): Node[] {
const tags = new Set(Array.isArray(tag) ? tag : [tag]);
return flatten(Array.isArray(root) ? root : [root])
.filter((node: Element) => tags.has(node.name));
}

export function hasAttribute(root: Element, attribute: string | string[]) {
const attrs = Array.isArray(attribute) ? attribute : [attribute];
return !!root.attrs.find(a => attrs.includes(a.name));
}

export function getAttribute(root: Element, attribute: string | string[]) {
const attrs = Array.isArray(attribute) ? attribute : [attribute];
return root.attrs.filter(a => attrs.includes(a.name));
}

export function getSourceOffset(element: Element): SourceOffset {
const { startSourceSpan, endSourceSpan } = element;
return {
startTag: { start: startSourceSpan.start.offset, end: startSourceSpan.end.offset },
endTag: { start: endSourceSpan.start.offset, end: endSourceSpan.end.offset },
file: {
content: startSourceSpan.start.file.content,
url: startSourceSpan.start.file.url
},
node: element
};
}


function isElement(node: Node | Element): node is Element {
return (node as Element).children !== undefined;
}

/**
* Given an array of `Node` objects, flattens the ast tree to a single array.
* De facto only `Element` type objects have children.
*
* @param list
*/
export function flatten(list: Node[]) {
let node: Node;
let r: Node[] = [];

for (let i = 0; i < list.length; i++) {
node = list[i];
r.push(node);

if (isElement(node)) {
r = r.concat(flatten(node.children));
}
}
return r;
}

/**
* https://github.com/angular/angular/blob/master/packages/compiler/test/ml_parser/util/util.ts
*
* May be useful for validating the output of our own migrations,
*/
class SerializerVisitor implements Visitor {

visitElement(element: Element, context: any): any {
if (getHtmlTagDefinition(element.name).isVoid) {
return `<${element.name}${this._visitAll(element.attrs, ' ')}/>`;
}

return `<${element.name}${this._visitAll(element.attrs, ' ')}>${this._visitAll(element.children)}</${element.name}>`;
}

visitAttribute(attribute: Attribute, context: any): any {
return attribute.value === '' ? `${attribute.name}` : `${attribute.name}="${attribute.value}"`;
}

visitText(text: Text, context: any): any {
return text.value;
}

visitComment(comment: Comment, context: any): any {
return `<!--${comment.value}-->`;
}

visitExpansion(expansion: Expansion, context: any): any {
return `{${expansion.switchValue}, ${expansion.type},${this._visitAll(expansion.cases)}}`;
}

visitExpansionCase(expansionCase: ExpansionCase, context: any): any {
return ` ${expansionCase.value} {${this._visitAll(expansionCase.expression)}}`;
}

private _visitAll(nodes: Node[], join: string = ''): string {
if (nodes.length === 0) {
return '';
}
return join + nodes.map(a => a.visit(this, null)).join(join);
}
}


export function serializeNodes(nodes: Node[]): string[] {
return nodes.map(node => node.visit(new SerializerVisitor(), null));
}
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,11 @@
"version": "10.2.0",
"description": "Updates Ignite UI for Angular from v10.1.x to v10.2.0",
"factory": "./update-10_2_0"
},
"migration-18": {
"version": "11.0.0",
"description": "Updates Ignite UI for Angular from v10.2.x to v11.0.0",
"factory": "./update-11_0_0"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"@scheme": "../../common/schema/binding.schema.json",
"changes": [
{
"name": "showToolbar",
"remove": "true",
"owner": {
"selector": "igx-grid",
"type": "component"
}
},
{
"name": "showToolbar",
"remove": "true",
"owner": {
"selector": "igx-tree-grid",
"type": "component"
}
},
{
"name": "showToolbar",
"remove": "true",
"owner": {
"selector": "igx-hierarchical-grid",
"type": "component"
}
},
{
"name": "showToolbar",
"remove": "true",
"owner": {
"selector": "igx-row-island",
"type": "component"
}
}
]
}
Loading