Skip to content

Commit cbea8f6

Browse files
authored
Merge branch 'master' into bpenkov/adv-filtering-open-pickers-on-enter
2 parents 908af36 + 6ca6e6e commit cbea8f6

File tree

16 files changed

+477
-117
lines changed

16 files changed

+477
-117
lines changed

package-lock.json

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

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
"@angular/compiler-cli": "^11.2.5",
8484
"@angular/language-service": "^11.2.5",
8585
"@angularclass/hmr": "^2.1.3",
86-
"@types/jasmine": "^3.3.16",
86+
"@types/jasmine": "~3.6.0",
8787
"@types/jasminewd2": "^2.0.8",
8888
"@types/node": "^12.20.0",
8989
"@types/webpack-env": "^1.15.2",
@@ -109,8 +109,8 @@
109109
"hammer-simulator": "0.0.1",
110110
"igniteui-sassdoc-theme": "^1.1.4",
111111
"igniteui-typedoc-theme": "^2.0.9",
112-
"jasmine": "~3.5.0",
113-
"jasmine-core": "~3.5.0",
112+
"jasmine": "~3.6.0",
113+
"jasmine-core": "~3.6.0",
114114
"jasmine-spec-reporter": "~5.0.2",
115115
"karma": "^5.2.3",
116116
"karma-chrome-launcher": "~3.1.0",

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

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,13 @@ ${noteText}
166166
appTree.create(
167167
'/testSrc/appPrefix/component/custom.component.html', `
168168
<igx-tabs type="fixed">
169-
<igx-tab-item label="Tab1" icon="folder" routerLink="view1" [isSelected]="true" class="tabitem">
169+
<igx-tab-item routerLink="view1" [isSelected]="true" label="Tab1" icon="home" class="tabitem">
170+
<ng-template igxTab>
171+
<div class="horizontal-center">
172+
<igx-icon>playlist_add_check</igx-icon>
173+
<div class="igx-tabs__item-label" i18n>Strategies</div>
174+
</div>
175+
</ng-template>
170176
</igx-tab-item>
171177
</igx-tabs>`);
172178
const tree = await schematicRunner.runSchematicAsync('migration-20', {}, appTree)
@@ -178,8 +184,10 @@ ${noteText}
178184
<igx-tabs tabAlignment="justify">
179185
<igx-tab-item [selected]="true">
180186
<igx-tab-header routerLink="view1" class="tabitem">
181-
<igx-icon igxTabHeaderIcon>folder</igx-icon>
182-
<span igxTabHeaderLabel>Tab1</span>
187+
<div class="horizontal-center">
188+
<igx-icon>playlist_add_check</igx-icon>
189+
<div class="igx-tabs__item-label" i18n>Strategies</div>
190+
</div>
183191
</igx-tab-header>
184192
</igx-tab-item>
185193
</igx-tabs>`);
@@ -302,7 +310,10 @@ Some Content
302310
appTree.create(
303311
'/testSrc/appPrefix/component/custom.component.html', `
304312
<igx-bottom-nav>
305-
<igx-tab label="Tab1" icon="folder" routerLink="view1" class="igxtab">
313+
<igx-tab label="Tab1" icon="folder" routerLink="view1" class="igxtab" label="Tab1" icon="home">
314+
<ng-template igxTab>
315+
<div>Tab1</div>
316+
</ng-template>
306317
</igx-tab>
307318
</igx-bottom-nav>`);
308319
const tree = await schematicRunner.runSchematicAsync('migration-20', {}, appTree)
@@ -314,8 +325,7 @@ ${noteText}
314325
<igx-bottom-nav>
315326
<igx-bottom-nav-item>
316327
<igx-bottom-nav-header routerLink="view1" class="igxtab">
317-
<igx-icon igxBottomNavHeaderIcon>folder</igx-icon>
318-
<span igxBottomNavHeaderLabel>Tab1</span>
328+
<div>Tab1</div>
319329
</igx-bottom-nav-header>
320330
</igx-bottom-nav-item>
321331
</igx-bottom-nav>`);

projects/igniteui-angular/migrations/update-12_0_0/index.ts

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ export default (): Rule => (host: Tree, context: SchematicContext) => {
1010
`Applying migration for Ignite UI for Angular to version ${version}`
1111
);
1212

13+
// eslint-disable-next-line max-len
14+
const UPDATE_NOTE = `<!--NOTE: This component has been updated by Infragistics migration: v${version}\nPlease check your template whether all bindings/event handlers are correct.-->\n`;
15+
1316
const COMPONENTS = [
1417
{
1518
component: 'igx-bottom-nav',
@@ -129,7 +132,7 @@ See https://www.infragistics.com/products/ignite-ui-angular/angular/components/t
129132
let labelText = '';
130133
if (hasAttribute(node, 'label')) {
131134
const labelAttr = getAttribute(node, 'label')[0];
132-
labelText = `\n<span ${comp.labelDirective}>${labelAttr.value}</span>\n`;
135+
labelText = `\n<span ${comp.labelDirective}>${labelAttr.value}</span>`;
133136
}
134137
// Icon content
135138
let iconText = '';
@@ -151,9 +154,17 @@ See https://www.infragistics.com/products/ignite-ui-angular/angular/components/t
151154
}
152155

153156
if (iconText || labelText || routerLinkText) {
154-
// eslint-disable-next-line max-len
155-
const tabHeader = `\n<${comp.headerItem}${routerLinkText}${classText}>${iconText}${labelText}</${comp.headerItem}>`;
156-
addChange(file.url, new FileChange(startTag.end, tabHeader));
157+
// Get igx-tab-header if it's present
158+
const headerNode = findElementNodes([offset.node], comp.headerItem)
159+
.map(hNode => getSourceOffset(hNode as Element));
160+
161+
if (headerNode && headerNode.length > 0) {
162+
addChange(file.url, new FileChange(headerNode[0].startTag.end - 1, `${routerLinkText}${classText}`));
163+
} else {
164+
// eslint-disable-next-line max-len
165+
const tabHeader = `\n<${comp.headerItem}${routerLinkText}${classText}>${iconText}${labelText}\n</${comp.headerItem}>`;
166+
addChange(file.url, new FileChange(startTag.end, tabHeader));
167+
}
157168
}
158169
});
159170

@@ -179,7 +190,7 @@ See https://www.infragistics.com/products/ignite-ui-angular/angular/components/t
179190
const tabContentTag = new RegExp(String.raw`${comp.panelItem}`);
180191
const hasTabContent = content.match(tabContentTag);
181192

182-
if ((!hasTabContent || hasTabContent.length === 0) && !isEmptyOrSpaces(content)) {
193+
if (!hasTabContent && !isEmptyOrSpaces(content)) {
183194
const tabPanel = `\n<${comp.panelItem}${classAttrText}>${content}</${comp.panelItem}>\n`;
184195
addChange(offset.file.url, new FileChange(tabHeader.sourceSpan.end.offset, tabPanel, content, 'replace'));
185196
}
@@ -195,8 +206,7 @@ See https://www.infragistics.com/products/ignite-ui-angular/angular/components/t
195206
map(node => getSourceOffset(node as Element)).
196207
forEach(offset => {
197208
const { startTag, file } = offset;
198-
// eslint-disable-next-line max-len
199-
const commentText = `<!--NOTE: This component has been updated by Infragistics migration: v${version}\nPlease check your template whether all bindings/event handlers are correct.-->\n`;
209+
const commentText = UPDATE_NOTE;
200210
addChange(file.url, new FileChange(startTag.start, commentText));
201211
});
202212

projects/igniteui-angular/src/lib/date-common/picker-base.directive.ts

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
1-
import { ElementRef, EventEmitter, Inject, LOCALE_ID, Optional, Input, Directive, Output } from '@angular/core';
1+
import {
2+
AfterViewInit, ContentChildren, Directive, ElementRef, EventEmitter,
3+
Inject, Input, LOCALE_ID, OnDestroy, Optional, Output, QueryList
4+
} from '@angular/core';
5+
import { merge, Subject } from 'rxjs';
6+
import { takeUntil } from 'rxjs/operators';
27
import { DisplayDensityBase, DisplayDensityToken, IDisplayDensityOptions } from '../core/density';
38
import { EditorProvider } from '../core/edit-provider';
4-
import { PickerInteractionMode } from './types';
59
import { IToggleView } from '../core/navigation';
610
import { IBaseCancelableBrowserEventArgs, IBaseEventArgs } from '../core/utils';
711
import { DateRange } from '../date-range-picker/public_api';
812
import { IgxOverlayOutletDirective } from '../directives/toggle/toggle.directive';
913
import { IgxInputGroupType, IGX_INPUT_GROUP_TYPE } from '../input-group/public_api';
1014
import { OverlaySettings } from '../services/overlay/utilities';
15+
import { IgxPickerToggleComponent } from './picker-icons.common';
16+
import { PickerInteractionMode } from './types';
1117

1218
@Directive()
13-
export abstract class PickerBaseDirective extends DisplayDensityBase implements IToggleView, EditorProvider {
19+
export abstract class PickerBaseDirective extends DisplayDensityBase implements IToggleView, EditorProvider, AfterViewInit, OnDestroy {
1420
/**
1521
* The editor's input mask.
1622
*
@@ -193,6 +199,10 @@ export abstract class PickerBaseDirective extends DisplayDensityBase implements
193199
@Output()
194200
public closed = new EventEmitter<IBaseEventArgs>();
195201

202+
/** @hidden @internal */
203+
@ContentChildren(IgxPickerToggleComponent, { descendants: true })
204+
public toggleComponents: QueryList<IgxPickerToggleComponent>;
205+
196206
protected _collapsed = true;
197207
protected _type: IgxInputGroupType;
198208
protected _minValue: Date | string;
@@ -215,6 +225,8 @@ export abstract class PickerBaseDirective extends DisplayDensityBase implements
215225
return this.mode === PickerInteractionMode.DropDown;
216226
}
217227

228+
protected _destroy$ = new Subject();
229+
218230
public abstract valueChange: EventEmitter<string | Date | DateRange | null>;
219231

220232
constructor(public element: ElementRef,
@@ -225,6 +237,28 @@ export abstract class PickerBaseDirective extends DisplayDensityBase implements
225237
this.locale = this.locale || this._localeId;
226238
}
227239

240+
/** @hidden @internal */
241+
public ngAfterViewInit(): void {
242+
this.subToIconsClicked(this.toggleComponents, () => this.open());
243+
this.toggleComponents.changes.pipe(takeUntil(this._destroy$))
244+
.subscribe(() => this.subToIconsClicked(this.toggleComponents, () => this.open()));
245+
}
246+
247+
/** @hidden @internal */
248+
public ngOnDestroy(): void {
249+
this._destroy$.next();
250+
this._destroy$.complete();
251+
}
252+
253+
/** Subscribes to the click events of toggle/clear icons in a query */
254+
protected subToIconsClicked(components: QueryList<IgxPickerToggleComponent>, next: () => any) {
255+
components.forEach(toggle => {
256+
toggle.clicked
257+
.pipe(takeUntil(merge(components.changes, this._destroy$)))
258+
.subscribe(next);
259+
});
260+
};
261+
228262
public abstract select(value: Date | DateRange | string): void;
229263
public abstract open(settings?: OverlaySettings): void;
230264
public abstract toggle(settings?: OverlaySettings): void;

0 commit comments

Comments
 (0)