diff --git a/angular.json b/angular.json index e2800a218d3..c20114a35a2 100644 --- a/angular.json +++ b/angular.json @@ -175,6 +175,12 @@ "test": { "builder": "@angular-devkit/build-angular:karma", "options": { + "fileReplacements": [ + { + "replace": "components/core/environments/environment.ts", + "with": "components/core/environments/environment.test.ts" + } + ], "main": "components/test.ts", "karmaConfig": "components/karma.conf.js", "polyfills": "components/polyfills.ts", diff --git a/components/breadcrumb/nz-breadcrumb.component.ts b/components/breadcrumb/nz-breadcrumb.component.ts index 0945577f8f7..18995c9b2a6 100755 --- a/components/breadcrumb/nz-breadcrumb.component.ts +++ b/components/breadcrumb/nz-breadcrumb.component.ts @@ -25,7 +25,7 @@ import { Subject } from 'rxjs'; import { startWith } from 'rxjs/internal/operators/startWith'; import { filter, takeUntil } from 'rxjs/operators'; -import { InputBoolean } from 'ng-zorro-antd/core'; +import { InputBoolean, PREFIX } from 'ng-zorro-antd/core'; export const NZ_ROUTE_DATA_BREADCRUMB = 'breadcrumb'; @@ -107,7 +107,7 @@ export class NzBreadCrumbComponent implements OnInit, OnDestroy { this.cdr.markForCheck(); }); } catch (e) { - throw new Error('[NG-ZORRO] You should import RouterModule if you want to use `NzAutoGenerate`'); + throw new Error(`${PREFIX} You should import RouterModule if you want to use 'NzAutoGenerate'.`); } } diff --git a/components/empty/nz-empty-error.ts b/components/core/environments/environment.test.ts similarity index 52% rename from components/empty/nz-empty-error.ts rename to components/core/environments/environment.test.ts index 4d9e65ebd51..462fef069be 100644 --- a/components/empty/nz-empty-error.ts +++ b/components/core/environments/environment.test.ts @@ -6,7 +6,6 @@ * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ -// tslint:disable-next-line:no-any -export function getEmptyContentTypeError(content: any): Error { - return TypeError(`[NG-ZORRO]: useDefaultContent expect 'string', 'templateRef' or 'component' but get ${content}`); -} +export const environment = { + isTestMode: true +}; diff --git a/components/core/environments/environment.ts b/components/core/environments/environment.ts new file mode 100644 index 00000000000..fc593ffa3a9 --- /dev/null +++ b/components/core/environments/environment.ts @@ -0,0 +1,11 @@ +/** + * @license + * Copyright Alibaba.com All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE + */ + +export const environment = { + isTestMode: false +}; diff --git a/components/core/logger/logger.module.ts b/components/core/logger/logger.module.ts deleted file mode 100644 index 275ab80b815..00000000000 --- a/components/core/logger/logger.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * @license - * Copyright Alibaba.com All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE - */ - -import { NgModule } from '@angular/core'; - -import { LOGGER_SERVICE_PROVIDER, NZ_LOGGER_STATE } from './logger.service'; - -@NgModule({ - providers: [{ provide: NZ_LOGGER_STATE, useValue: false }, LOGGER_SERVICE_PROVIDER] -}) -export class LoggerModule {} diff --git a/components/core/logger/logger.service.ts b/components/core/logger/logger.service.ts deleted file mode 100644 index f76789f794e..00000000000 --- a/components/core/logger/logger.service.ts +++ /dev/null @@ -1,61 +0,0 @@ -/** - * @license - * Copyright Alibaba.com All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE - */ - -import { Inject, Injectable, InjectionToken, Optional, Provider, SkipSelf } from '@angular/core'; - -export const NZ_LOGGER_STATE = new InjectionToken('nz-logger-state'); // Whether print the log - -@Injectable() -export class LoggerService { - constructor(@Inject(NZ_LOGGER_STATE) private _loggerState: boolean) {} - - // tslint:disable-next-line:no-any - log(...args: any[]): void { - if (this._loggerState) { - console.log(...args); - } - } - - // tslint:disable-next-line:no-any - warn(...args: any[]): void { - if (this._loggerState) { - console.warn(...args); - } - } - - // tslint:disable-next-line:no-any - error(...args: any[]): void { - if (this._loggerState) { - console.error(...args); - } - } - - // tslint:disable-next-line:no-any - info(...args: any[]): void { - if (this._loggerState) { - console.log(...args); - } - } - - // tslint:disable-next-line:no-any - debug(...args: any[]): void { - if (this._loggerState) { - console.log('[NG-ZORRO-DEBUG]', ...args); - } - } -} - -export function LOGGER_SERVICE_PROVIDER_FACTORY(exist: LoggerService, loggerState: boolean): LoggerService { - return exist || new LoggerService(loggerState); -} - -export const LOGGER_SERVICE_PROVIDER: Provider = { - provide: LoggerService, - useFactory: LOGGER_SERVICE_PROVIDER_FACTORY, - deps: [[new Optional(), new SkipSelf(), LoggerService], NZ_LOGGER_STATE] -}; diff --git a/components/core/logger/logger.ts b/components/core/logger/logger.ts new file mode 100644 index 00000000000..8be6dcb100d --- /dev/null +++ b/components/core/logger/logger.ts @@ -0,0 +1,46 @@ +/** + * @license + * Copyright Alibaba.com All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE + */ + +// tslint:disable:no-any +import { environment } from '../environments/environment'; + +import { isDevMode } from '@angular/core'; + +const record: Record = {}; + +export const PREFIX = '[NG-ZORRO]:'; + +function notRecorded(...args: any[]): boolean { + const asRecord = args.reduce((acc, c) => acc + c.toString(), ''); + + if (record[asRecord]) { + return false; + } else { + record[asRecord] = true; + return true; + } +} + +function consoleCommonBehavior(consoleFunc: (...args: any) => void, ...args: any[]): void { + if (environment.isTestMode || (isDevMode() && notRecorded(...args))) { + consoleFunc(...args); + } +} + +// Warning should only be printed in dev mode and only once. +export const warn = (...args: any[]) => consoleCommonBehavior((...arg: any[]) => console.warn(PREFIX, ...arg), ...args); + +export const warnDeprecation = (...args: any[]) => + consoleCommonBehavior((...arg: any[]) => console.error(PREFIX, 'deprecated:', ...arg), ...args); + +// Log should only be printed in dev mode. +export const log = (...args: any[]) => { + if (isDevMode()) { + console.log(PREFIX, ...args); + } +}; diff --git a/components/core/logger/public-api.ts b/components/core/logger/public-api.ts index a8ef20eb685..cb8dd555af4 100644 --- a/components/core/logger/public-api.ts +++ b/components/core/logger/public-api.ts @@ -6,10 +6,4 @@ * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ -export { LoggerModule } from './logger.module'; -export { - LoggerService, - NZ_LOGGER_STATE, - LOGGER_SERVICE_PROVIDER, - LOGGER_SERVICE_PROVIDER_FACTORY -} from './logger.service'; +export * from './logger'; diff --git a/components/core/tree/nz-tree-base-node.ts b/components/core/tree/nz-tree-base-node.ts index 583f39ace44..270c9cae575 100644 --- a/components/core/tree/nz-tree-base-node.ts +++ b/components/core/tree/nz-tree-base-node.ts @@ -6,6 +6,7 @@ * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ +import { warnDeprecation } from '../logger/logger'; import { NzTreeNodeBaseComponent } from './nz-tree-base.definitions'; import { NzTreeBaseService } from './nz-tree-base.service'; @@ -167,9 +168,10 @@ export class NzTreeNode { } /** - * @deprecated Maybe removed in next major version, use isChecked instead + * @deprecated Maybe removed in next major version, use `isChecked` instead. */ set isAllChecked(value: boolean) { + warnDeprecation(`'isAllChecked' is going to be removed in 9.0.0. Please use 'isChecked' instead.`); this._isAllChecked = value; } @@ -246,9 +248,10 @@ export class NzTreeNode { } /** - * @deprecated Maybe removed in next major version, use isChecked instead + * @deprecated Maybe removed in next major version, use `isChecked` instead. */ public setChecked(checked: boolean = false, halfChecked: boolean = false): void { + warnDeprecation(`'setChecked' is going to be removed in 9.0.0. Please use 'isChecked' instead.`); this.origin.checked = checked; this.isChecked = checked; this.isAllChecked = checked; @@ -256,16 +259,18 @@ export class NzTreeNode { } /** - * @deprecated Maybe removed in next major version, use isExpanded instead + * @deprecated Maybe removed in next major version, use `isExpanded` instead. */ public setExpanded(value: boolean): void { + warnDeprecation(`'setExpanded' is going to be removed in 9.0.0. Please use 'isExpanded' instead.`); this.isExpanded = value; } /** - * @deprecated Maybe removed in next major version, use isSelected instead + * @deprecated Maybe removed in next major version, use `isSelected` instead. */ public setSelected(value: boolean): void { + warnDeprecation(`'setSelected' is going to be removed in 9.0.0. Please use 'isExpanded' isSelected.`); if (this.isDisabled) { return; } diff --git a/components/core/util/convert.ts b/components/core/util/convert.ts index 772bb96d977..a801f3a0ebd 100644 --- a/components/core/util/convert.ts +++ b/components/core/util/convert.ts @@ -8,6 +8,7 @@ import { coerceBooleanProperty, coerceCssPixelValue, _isNumberValue } from '@angular/cdk/coercion'; +import { warn } from '../logger/logger'; import { FunctionProp } from '../types/common-wrap'; export function toBoolean(value: boolean | string): boolean { @@ -39,7 +40,7 @@ function propDecoratorFactory(name: string, fallback: (v: T) => D): (targe const privatePropName = `$$__${propName}`; if (Object.prototype.hasOwnProperty.call(target, privatePropName)) { - console.warn(`The prop "${privatePropName}" is already exist, it will be overrided by ${name} decorator.`); + warn(`The prop "${privatePropName}" is already exist, it will be overrided by ${name} decorator.`); } Object.defineProperty(target, privatePropName, { diff --git a/components/core/util/textarea-caret-position.ts b/components/core/util/textarea-caret-position.ts index f68333c344f..d6ca5316e7e 100644 --- a/components/core/util/textarea-caret-position.ts +++ b/components/core/util/textarea-caret-position.ts @@ -175,6 +175,4 @@ export function createDebugEle(element: HTMLInputElement | HTMLTextAreaElement, element.scrollLeft + window.pageXOffset + coordinates.left}px`; - console.log(rect.style.top); - console.log(rect.style.left); } diff --git a/components/empty/nz-empty.service.ts b/components/empty/nz-empty.service.ts index 6c55bae06a7..16273d48d8a 100644 --- a/components/empty/nz-empty.service.ts +++ b/components/empty/nz-empty.service.ts @@ -8,8 +8,10 @@ import { Inject, Injectable, Optional, TemplateRef, Type } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; + +import { PREFIX } from 'ng-zorro-antd/core'; + import { NzEmptyCustomContent, NZ_DEFAULT_EMPTY_CONTENT } from './nz-empty-config'; -import { getEmptyContentTypeError } from './nz-empty-error'; @Injectable({ providedIn: 'root' @@ -34,7 +36,9 @@ export class NzEmptyService { ) { this.userDefaultContent$.next(content); } else { - throw getEmptyContentTypeError(content); + throw new Error( + `${PREFIX} 'useDefaultContent' expect 'string', 'templateRef' or 'component' but get ${content}.` + ); } } diff --git a/components/i18n/date-helper.service.ts b/components/i18n/date-helper.service.ts index 6f48406c492..0799a087a12 100644 --- a/components/i18n/date-helper.service.ts +++ b/components/i18n/date-helper.service.ts @@ -11,6 +11,9 @@ import { Inject, Injectable, Injector, Optional } from '@angular/core'; import fnsFormat from 'date-fns/format'; import fnsGetISOWeek from 'date-fns/get_iso_week'; import fnsParse from 'date-fns/parse'; + +import { warnDeprecation } from 'ng-zorro-antd/core'; + import { mergeDateConfig, NzDateConfig, NZ_DATE_CONFIG } from './date-config'; import { NzI18nService } from './nz-i18n.service'; @@ -81,13 +84,19 @@ export class DateHelperByDateFns extends DateHelperService { /** * DateHelper that handles date formats with angular's date-pipe - * [BUG] Use DatePipe may cause non-standard week bug, see: https://github.com/NG-ZORRO/ng-zorro-antd/issues/2406 * - * @deprecated Maybe removed in next major version due to this serious bug + * @see https://github.com/NG-ZORRO/ng-zorro-antd/issues/2406 - DatePipe may cause non-standard week bug, see: + * + * @deprecated 9.0.0 - `DateHelperByDatePipe` would be removed in 9.0.0 due to the serious bug above, unless it's get fixed. + * Please use `DateHelperByDateFns` instead. */ export class DateHelperByDatePipe extends DateHelperService { constructor(i18n: NzI18nService, @Optional() @Inject(NZ_DATE_CONFIG) config: NzDateConfig) { super(i18n, config); + + warnDeprecation( + `'DateHelperByDatePipe' would be removed in 9.0.0 due to this serious bug of Angular: https://github.com/NG-ZORRO/ng-zorro-antd/issues/2406. Please use 'DateHelperByDateFns' instead.` + ); } getISOWeek(date: Date): number { diff --git a/components/i18n/nz-i18n.module.ts b/components/i18n/nz-i18n.module.ts index 7e8a3df32d3..f3801ed9753 100644 --- a/components/i18n/nz-i18n.module.ts +++ b/components/i18n/nz-i18n.module.ts @@ -7,11 +7,10 @@ */ import { NgModule } from '@angular/core'; -import { LoggerModule } from 'ng-zorro-antd/core'; + import { NzI18nPipe } from './nz-i18n.pipe'; @NgModule({ - imports: [LoggerModule], declarations: [NzI18nPipe], exports: [NzI18nPipe] }) diff --git a/components/icon/nz-icon.service.ts b/components/icon/nz-icon.service.ts index 68fbd74ef5e..35f314edcdc 100644 --- a/components/icon/nz-icon.service.ts +++ b/components/icon/nz-icon.service.ts @@ -47,6 +47,7 @@ import { UploadOutline, UpOutline } from '@ant-design/icons-angular/icons'; +import { warn } from 'ng-zorro-antd/core'; export interface NzIconfontOption { scriptUrl: string; @@ -101,22 +102,16 @@ export const NZ_ICONS_USED_BY_ZORRO: IconDefinition[] = [ }) export class NzIconService extends IconService { private iconfontCache = new Set(); - private warnedAboutAPI = false; - private warnedAboutCross = false; - private warnedAboutVertical = false; warnAPI(type: 'old' | 'cross' | 'vertical'): void { - if (type === 'old' && !this.warnedAboutAPI) { - console.warn(` would be deprecated soon. Please use API.`); - this.warnedAboutAPI = true; + if (type === 'old') { + warn(` would be deprecated in 9.0.0. Please use API.`); } - if (type === 'cross' && !this.warnedAboutCross) { - console.warn(`'cross' icon is replaced by 'close' icon.`); - this.warnedAboutCross = true; + if (type === 'cross') { + warn(`'cross' icon is replaced by 'close' icon.`); } - if (type === 'vertical' && !this.warnedAboutVertical) { - console.warn(`'verticle' is misspelled, would be corrected in the next major version.`); - this.warnedAboutVertical = true; + if (type === 'vertical') { + warn(`'verticle' is misspelled, would be corrected in the next major version.`); } } @@ -166,7 +161,7 @@ export class NzIconService extends IconService { if (this.defaultColor.startsWith('#')) { primaryColor = this.defaultColor; } else { - console.warn('[NG-ZORRO]: twotone color must be a hex color!'); + warn('Twotone color must be a hex color!'); } } this.twoToneColor = { primaryColor }; diff --git a/components/modal/nz-modal.module.ts b/components/modal/nz-modal.module.ts index 96d8e016564..fcc3e674a90 100644 --- a/components/modal/nz-modal.module.ts +++ b/components/modal/nz-modal.module.ts @@ -11,7 +11,7 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { NzButtonModule } from 'ng-zorro-antd/button'; -import { LoggerModule, NzNoAnimationModule } from 'ng-zorro-antd/core'; +import { NzNoAnimationModule } from 'ng-zorro-antd/core'; import { NzI18nModule } from 'ng-zorro-antd/i18n'; import { NzIconModule } from 'ng-zorro-antd/icon'; @@ -21,7 +21,7 @@ import { NzModalComponent } from './nz-modal.component'; import { NzModalService } from './nz-modal.service'; @NgModule({ - imports: [CommonModule, OverlayModule, NzI18nModule, NzButtonModule, LoggerModule, NzIconModule, NzNoAnimationModule], + imports: [CommonModule, OverlayModule, NzI18nModule, NzButtonModule, NzIconModule, NzNoAnimationModule], exports: [NzModalComponent], declarations: [NzModalComponent, CssUnitPipe], entryComponents: [NzModalComponent], diff --git a/components/modal/nz-modal.service.ts b/components/modal/nz-modal.service.ts index ba031593e32..e4a566aa106 100644 --- a/components/modal/nz-modal.service.ts +++ b/components/modal/nz-modal.service.ts @@ -11,7 +11,7 @@ import { ComponentPortal } from '@angular/cdk/portal'; import { ComponentRef, Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { IndexableObject, LoggerService } from 'ng-zorro-antd/core'; +import { warn, IndexableObject } from 'ng-zorro-antd/core'; import { NzModalControlService } from './nz-modal-control.service'; import { NzModalRef } from './nz-modal-ref.class'; @@ -72,7 +72,7 @@ export class NzModalService { return this.modalControl.afterAllClose.asObservable(); } - constructor(private overlay: Overlay, private logger: LoggerService, private modalControl: NzModalControlService) {} + constructor(private overlay: Overlay, private modalControl: NzModalControlService) {} // Closes all of the currently-open dialogs closeAll(): void { @@ -92,7 +92,7 @@ export class NzModalService { confirm(options: ModalOptionsForService = {}, confirmType: ConfirmType = 'confirm'): NzModalRef { if ('nzFooter' in options) { - this.logger.warn(`The Confirm-Modal doesn't support "nzFooter", this property will be ignored.`); + warn(`The Confirm-Modal doesn't support "nzFooter", this property will be ignored.`); } if (!('nzWidth' in options)) { options.nzWidth = 416; diff --git a/components/modal/nz-modal.spec.ts b/components/modal/nz-modal.spec.ts index 324e16e0351..d2952efcaf2 100644 --- a/components/modal/nz-modal.spec.ts +++ b/components/modal/nz-modal.spec.ts @@ -293,17 +293,14 @@ describe('modal testing (legacy)', () => { }); it('boundary detection for options', fakeAsync(() => { - // @ts-ignore - const logger = instance.modalService.logger; - spyOn(logger, 'warn'); + spyOn(console, 'warn'); const tempModalId = generateUniqueId(); const modalAgent = instance.createConfirm() as NzModalRef; const modalElement = modalAgent.getElement(); modalElement.classList.add(tempModalId); fixture.detectChanges(); - // nzFooter - expect(logger.warn).toHaveBeenCalled(); + expect(console.warn).toHaveBeenCalled(); // nzOnOk: close modal when clicked getButtonOk(modalElement).click(); fixture.detectChanges(); diff --git a/components/ng-zorro-antd.module.ts b/components/ng-zorro-antd.module.ts index 6304d925c33..1bb926c7892 100644 --- a/components/ng-zorro-antd.module.ts +++ b/components/ng-zorro-antd.module.ts @@ -16,7 +16,7 @@ import { NzCascaderModule } from 'ng-zorro-antd/cascader'; import { NzCheckboxModule } from 'ng-zorro-antd/checkbox'; import { NzCollapseModule } from 'ng-zorro-antd/collapse'; import { NzCommentModule } from 'ng-zorro-antd/comment'; -import { NzNoAnimationModule, NzWaveModule } from 'ng-zorro-antd/core'; +import { warnDeprecation, NzNoAnimationModule, NzWaveModule } from 'ng-zorro-antd/core'; import { NzDatePickerModule } from 'ng-zorro-antd/date-picker'; import { NzDescriptionsModule } from 'ng-zorro-antd/descriptions'; import { NzDividerModule } from 'ng-zorro-antd/divider'; @@ -196,6 +196,9 @@ export class NgZorroAntdModule { * @deprecated Use `NgZorroAntdModule` instead. */ static forRoot(): ModuleWithProviders { + warnDeprecation( + `'forRoot' is not recommended if you are using Angular 6.0.0+. This API is going to be removed in 9.0.0.` + ); return { ngModule: NgZorroAntdModule }; diff --git a/components/tree/nz-tree-node.component.ts b/components/tree/nz-tree-node.component.ts index 6bfd00fdcb0..6575e08b548 100644 --- a/components/tree/nz-tree-node.component.ts +++ b/components/tree/nz-tree-node.component.ts @@ -28,6 +28,7 @@ import { filter, takeUntil } from 'rxjs/operators'; import { collapseMotion, + warnDeprecation, InputBoolean, NzFormatBeforeDropEvent, NzNoAnimationDirective, @@ -73,11 +74,11 @@ export class NzTreeNodeComponent implements OnInit, OnChanges, OnDestroy { } /** - * @deprecated use - * nzExpandAll instead + * @deprecated use `nzExpandAll` instead. */ @Input() set nzDefaultExpandAll(value: boolean) { + warnDeprecation(`'nzDefaultExpandAll' is going to be removed in 9.0.0. Please use 'nzExpandAll' instead.`); this._nzExpandAll = value; if (value && this.nzTreeNode && !this.nzTreeNode.isLeaf) { this.nzTreeNode.isExpanded = true; diff --git a/components/tree/nz-tree.component.ts b/components/tree/nz-tree.component.ts index 9fb2994af45..b1f09630af3 100644 --- a/components/tree/nz-tree.component.ts +++ b/components/tree/nz-tree.component.ts @@ -31,6 +31,7 @@ import { takeUntil } from 'rxjs/operators'; import { isNotNil, toBoolean, + warnDeprecation, InputBoolean, NzFormatBeforeDropEvent, NzFormatEmitEvent, @@ -77,7 +78,7 @@ export class NzTreeComponent extends NzTreeBase implements OnInit, OnDestroy, Co @Input() @InputBoolean() nzCheckable = false; @Input() @InputBoolean() nzAsyncData = false; @Input() @InputBoolean() nzDraggable = false; - @Input() @InputBoolean() nzExpandAll = false; + @Input() @InputBoolean() nzHideUnMatched = false; @Input() @InputBoolean() nzSelectMode = false; @Input() @InputBoolean() nzCheckStrictly = false; @@ -85,11 +86,24 @@ export class NzTreeComponent extends NzTreeBase implements OnInit, OnDestroy, Co @Input() @ContentChild('nzTreeTemplate', { static: true }) nzTreeTemplate: TemplateRef<{ $implicit: NzTreeNode }>; + @Input() @InputBoolean() nzExpandAll = false; + /** - * @deprecated use - * nzExpandAll instead + * @deprecated 9.0.0 use `nzExpandAll` instead. */ - @Input() @InputBoolean() nzDefaultExpandAll = false; + @Input() + @InputBoolean() + set nzDefaultExpandAll(value: boolean) { + warnDeprecation(`'nzDefaultExpandAll' would be removed in 9.0.0. Please use 'nzExpandAll' instead.`); + this._nzDefaultExpandAll = value; + } + + get nzDefaultExpandAll(): boolean { + return this._nzDefaultExpandAll; + } + + private _nzDefaultExpandAll = false; + @Input() nzBeforeDrop: (confirm: NzFormatBeforeDropEvent) => Observable; @Input() @@ -110,29 +124,29 @@ export class NzTreeComponent extends NzTreeBase implements OnInit, OnDestroy, Co } /** - * @deprecated use - * nzExpandedKeys instead + * @deprecated 9.0.0 - use `nzExpandedKeys` instead. */ @Input() set nzDefaultExpandedKeys(value: string[]) { + warnDeprecation(`'nzDefaultExpandedKeys' would be removed in 9.0.0. Please use 'nzExpandedKeys' instead.`); this.nzDefaultSubject.next({ type: 'nzExpandedKeys', keys: value }); } /** - * @deprecated use - * nzSelectedKeys instead + * @deprecated 9.0.0 - use `nzSelectedKeys` instead. */ @Input() set nzDefaultSelectedKeys(value: string[]) { + warnDeprecation(`'nzDefaultSelectedKeys' would be removed in 9.0.0. Please use 'nzSelectedKeys' instead.`); this.nzDefaultSubject.next({ type: 'nzSelectedKeys', keys: value }); } /** - * @deprecated use - * nzCheckedKeys instead + * @deprecated 9.0.0 - use `nzCheckedKeys` instead. */ @Input() set nzDefaultCheckedKeys(value: string[]) { + warnDeprecation(`'nzDefaultCheckedKeys' would be removed in 9.0.0. Please use 'nzCheckedKeys' instead.`); this.nzDefaultSubject.next({ type: 'nzCheckedKeys', keys: value }); } @@ -158,6 +172,7 @@ export class NzTreeComponent extends NzTreeBase implements OnInit, OnDestroy, Co if (isNotNil(value)) { this.nzSearchValueChange.emit(this.nzTreeService.formatEvent('search', null, null)); this.nzOnSearchNode.emit(this.nzTreeService.formatEvent('search', null, null)); + warnDeprecation(`'nzOnSearchNode' would be deprecated in 9.0.0. Please use 'nzSearchValueChange' instead.`); } } @@ -166,36 +181,35 @@ export class NzTreeComponent extends NzTreeBase implements OnInit, OnDestroy, Co } /** - * To render nodes if root is changed + * To render nodes if root is changed. */ get nzNodes(): NzTreeNode[] { return this.nzTreeService.rootNodes; } - // model bind @Output() readonly nzExpandedKeysChange: EventEmitter = new EventEmitter(); @Output() readonly nzSelectedKeysChange: EventEmitter = new EventEmitter(); @Output() readonly nzCheckedKeysChange: EventEmitter = new EventEmitter(); - @Output() readonly nzSearchValueChange: EventEmitter = new EventEmitter(); + @Output() readonly nzSearchValueChange = new EventEmitter(); + /** - * @deprecated use - * nzSearchValueChange instead + * @deprecated use `nzSearchValueChange` instead. */ - @Output() readonly nzOnSearchNode: EventEmitter = new EventEmitter(); - - @Output() readonly nzClick: EventEmitter = new EventEmitter(); - @Output() readonly nzDblClick: EventEmitter = new EventEmitter(); - @Output() readonly nzContextMenu: EventEmitter = new EventEmitter(); - @Output() readonly nzCheckBoxChange: EventEmitter = new EventEmitter(); - @Output() readonly nzExpandChange: EventEmitter = new EventEmitter(); - - @Output() readonly nzOnDragStart: EventEmitter = new EventEmitter(); - @Output() readonly nzOnDragEnter: EventEmitter = new EventEmitter(); - @Output() readonly nzOnDragOver: EventEmitter = new EventEmitter(); - @Output() readonly nzOnDragLeave: EventEmitter = new EventEmitter(); - @Output() readonly nzOnDrop: EventEmitter = new EventEmitter(); - @Output() readonly nzOnDragEnd: EventEmitter = new EventEmitter(); + @Output() readonly nzOnSearchNode = new EventEmitter(); + + @Output() readonly nzClick = new EventEmitter(); + @Output() readonly nzDblClick = new EventEmitter(); + @Output() readonly nzContextMenu = new EventEmitter(); + @Output() readonly nzCheckBoxChange = new EventEmitter(); + @Output() readonly nzExpandChange = new EventEmitter(); + + @Output() readonly nzOnDragStart = new EventEmitter(); + @Output() readonly nzOnDragEnter = new EventEmitter(); + @Output() readonly nzOnDragOver = new EventEmitter(); + @Output() readonly nzOnDragLeave = new EventEmitter(); + @Output() readonly nzOnDrop = new EventEmitter(); + @Output() readonly nzOnDragEnd = new EventEmitter(); _searchValue: string; _nzMultiple: boolean = false; diff --git a/components/upload/nz-upload-btn.component.ts b/components/upload/nz-upload-btn.component.ts index 20cc4f93f8e..857d1dec767 100644 --- a/components/upload/nz-upload-btn.component.ts +++ b/components/upload/nz-upload-btn.component.ts @@ -23,7 +23,7 @@ import { import { of, Observable, Subscription } from 'rxjs'; import { switchMap } from 'rxjs/operators'; -import { NzUpdateHostClassService } from 'ng-zorro-antd/core'; +import { warn, NzUpdateHostClassService } from 'ng-zorro-antd/core'; import { UploadFile, UploadXHRArgs, ZipButtonOptions } from './interface'; @@ -180,7 +180,7 @@ export class NzUploadBtnComponent implements OnInit, OnChanges, OnDestroy { }); }, e => { - console.warn(`Unhandled upload filter error`, e); + warn(`Unhandled upload filter error`, e); } ); } @@ -202,7 +202,7 @@ export class NzUploadBtnComponent implements OnInit, OnChanges, OnDestroy { } }, e => { - console.warn(`Unhandled upload beforeUpload error`, e); + warn(`Unhandled upload beforeUpload error`, e); } ); } else if (before !== false) { @@ -246,7 +246,7 @@ export class NzUploadBtnComponent implements OnInit, OnChanges, OnDestroy { }; const req$ = (opt.customRequest || this.xhr).call(this, args); if (!(req$ instanceof Subscription)) { - console.warn(`Must return Subscription type in '[nzCustomRequest]' property`); + warn(`Must return Subscription type in '[nzCustomRequest]' property`); } this.reqs[uid] = req$; opt.onStart!(file); diff --git a/components/upload/upload.spec.ts b/components/upload/upload.spec.ts index de56bac9562..4038df69727 100644 --- a/components/upload/upload.spec.ts +++ b/components/upload/upload.spec.ts @@ -396,7 +396,7 @@ describe('upload', () => { }); it('should be console.warn error', () => { let warnMsg = ''; - console.warn = jasmine.createSpy().and.callFake((res: string) => (warnMsg = res)); + console.warn = jasmine.createSpy().and.callFake((...res: string[]) => (warnMsg = res.join(' '))); expect(instance._nzChange).toBeUndefined(); instance.beforeUpload = (): Observable => { return throwError(''); @@ -478,7 +478,7 @@ describe('upload', () => { }); it('should be console.warn error', () => { let warnMsg = ''; - console.warn = jasmine.createSpy().and.callFake((res: string) => (warnMsg = res)); + console.warn = jasmine.createSpy().and.callFake((...res: string[]) => (warnMsg = res.join(' '))); instance.nzFilter = [ { name: 'f1', @@ -1235,10 +1235,10 @@ describe('upload', () => { it('should be warn "Must return Subscription type in [nzCustomRequest] property"', () => { let warnMsg = ''; - console.warn = jasmine.createSpy().and.callFake((res: string) => (warnMsg = res)); + console.warn = jasmine.createSpy().and.callFake((...res: string[]) => (warnMsg = res.join(' '))); comp.options.customRequest = (() => {}) as any; comp.onChange(PNGSMALL as any); - expect(warnMsg).toContain(`Must return Subscription type`); + expect(warnMsg).toContain(`Must return Subscription type in '[nzCustomRequest]' property`); }); }); });