From 4e71697426c5ff1f09f0e9bb36e1641d442ddd08 Mon Sep 17 00:00:00 2001 From: trik Date: Thu, 28 Feb 2019 12:55:41 +0100 Subject: [PATCH 1/3] fix: HostBinding and ViewChild decorators must be applied to public variables functions called from template must be public --- .../ionic-selectable-modal.component.ts | 18 ++++++++--------- .../ionic-selectable.component.ts | 20 +++++++++---------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/app/components/ionic-selectable/ionic-selectable-modal.component.ts b/src/app/components/ionic-selectable/ionic-selectable-modal.component.ts index 5200815..bd105ce 100644 --- a/src/app/components/ionic-selectable/ionic-selectable-modal.component.ts +++ b/src/app/components/ionic-selectable/ionic-selectable-modal.component.ts @@ -12,36 +12,36 @@ export class IonicSelectableModalComponent implements AfterViewInit { _header: HTMLElement; selectComponent: IonicSelectableComponent; @ViewChild('searchbarComponent') - private _searchbarComponent: IonSearchbar; + _searchbarComponent: IonSearchbar; @ViewChild(IonInfiniteScroll) _infiniteScroll: IonInfiniteScroll; @HostBinding('class.ionic-selectable-modal') - private _cssClass = true; + _cssClass = true; @HostBinding('class.ionic-selectable-modal-can-clear') - private get _canClearCssClass(): boolean { + get _canClearCssClass(): boolean { return this.selectComponent.canClear; } @HostBinding('class.ionic-selectable-modal-is-multiple') - private get _isMultipleCssClass(): boolean { + get _isMultipleCssClass(): boolean { return this.selectComponent.isMultiple; } @HostBinding('class.ionic-selectable-modal-is-searching') - private get _isSearchingCssClass(): boolean { + get _isSearchingCssClass(): boolean { return this.selectComponent._isSearching; } @HostBinding('class.ionic-selectable-modal-ios') - private get _isIos(): boolean { + get _isIos(): boolean { return this.selectComponent._isIos; } @HostBinding('class.ionic-selectable-modal-md') - private _isMD(): boolean { + _isMD(): boolean { return this.selectComponent._isMD; } @HostBinding('class.ionic-selectable-modal-is-add-item-template-visible') - private get _isAddItemTemplateVisibleCssClass(): boolean { + get _isAddItemTemplateVisibleCssClass(): boolean { return this.selectComponent._isAddItemTemplateVisible; } - @HostListener('window:resize', ['$event']) + @HostListener('window:resize') onResize() { // ion-footer inside the template might change its height when // device orientation changes. diff --git a/src/app/components/ionic-selectable/ionic-selectable.component.ts b/src/app/components/ionic-selectable/ionic-selectable.component.ts index abf109f..89b49a6 100644 --- a/src/app/components/ionic-selectable/ionic-selectable.component.ts +++ b/src/app/components/ionic-selectable/ionic-selectable.component.ts @@ -33,41 +33,41 @@ import { IonicSelectableValueTemplateDirective } from './ionic-selectable-value- }) export class IonicSelectableComponent implements ControlValueAccessor, OnInit, DoCheck { @HostBinding('class.ionic-selectable') - private _cssClass = true; + _cssClass = true; @HostBinding('class.ionic-selectable-ios') _isIos: boolean; @HostBinding('class.ionic-selectable-md') _isMD: boolean; @HostBinding('class.ionic-selectable-is-multiple') - private get _isMultipleCssClass(): boolean { + get _isMultipleCssClass(): boolean { return this.isMultiple; } @HostBinding('class.ionic-selectable-has-value') - private get _hasValueCssClass(): boolean { + get _hasValueCssClass(): boolean { return this.hasValue(); } @HostBinding('class.ionic-selectable-has-placeholder') - private get _hasPlaceholderCssClass(): boolean { + get _hasPlaceholderCssClass(): boolean { return this._hasPlaceholder; } @HostBinding('class.ionic-selectable-has-label') - private get _hasIonLabelCssClass(): boolean { + get _hasIonLabelCssClass(): boolean { return this._hasIonLabel; } @HostBinding('class.ionic-selectable-label-default') - private get _hasDefaultIonLabelCssClass(): boolean { + get _hasDefaultIonLabelCssClass(): boolean { return this._ionLabelPosition === 'default'; } @HostBinding('class.ionic-selectable-label-fixed') - private get _hasFixedIonLabelCssClass(): boolean { + get _hasFixedIonLabelCssClass(): boolean { return this._ionLabelPosition === 'fixed'; } @HostBinding('class.ionic-selectable-label-stacked') - private get _hasStackedIonLabelCssClass(): boolean { + get _hasStackedIonLabelCssClass(): boolean { return this._ionLabelPosition === 'stacked'; } @HostBinding('class.ionic-selectable-label-floating') - private get _hasFloatingIonLabelCssClass(): boolean { + get _hasFloatingIonLabelCssClass(): boolean { return this._ionLabelPosition === 'floating'; } private _isOnSearchEnabled = true; @@ -1235,7 +1235,7 @@ export class IonicSelectableComponent implements ControlValueAccessor, OnInit, D this._hasFilteredItems = !this._areGroupsEmpty(this._filteredGroups); } - private _formatValueItem(item: any): string { + _formatValueItem(item: any): string { if (this._shouldStoreItemValue) { // Get item text from the list as we store it's value only. const selectedItem = this.items.find(_item => { From 37043978aba59c9a6636a334c25e8008302eca43 Mon Sep 17 00:00:00 2001 From: trik Date: Thu, 28 Feb 2019 12:56:14 +0100 Subject: [PATCH 2/3] fix(ionic-selectable-modal): _getMoreItems call in template has invalid parameters --- .../ionic-selectable/ionic-selectable-modal.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/components/ionic-selectable/ionic-selectable-modal.component.html b/src/app/components/ionic-selectable/ionic-selectable-modal.component.html index 9077a22..6520241 100644 --- a/src/app/components/ionic-selectable/ionic-selectable-modal.component.html +++ b/src/app/components/ionic-selectable/ionic-selectable-modal.component.html @@ -119,7 +119,7 @@ + (ionInfinite)="selectComponent._getMoreItems()"> Date: Thu, 28 Feb 2019 12:57:19 +0100 Subject: [PATCH 3/3] build: add npm build:library script enforce full template type check --- package.json | 3 ++- scripts/build.js | 15 +++++++++++++++ tsconfig.lib.json | 11 +++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 scripts/build.js create mode 100644 tsconfig.lib.json diff --git a/package.json b/package.json index 0838e76..895f2b3 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,8 @@ "build": "ng build", "test": "ng test", "lint": "ng lint", - "e2e": "ng e2e" + "e2e": "ng e2e", + "build:library": "node scripts/build.js" }, "cordova": { "plugins": { diff --git a/scripts/build.js b/scripts/build.js new file mode 100644 index 0000000..97652b6 --- /dev/null +++ b/scripts/build.js @@ -0,0 +1,15 @@ +var ngPackage = require('ng-packagr'); +var path = require('path'); + +var packageCfg = path.normalize(path.join(__dirname, '../ng-package.json')); +var tsConfig = path.normalize(path.join(__dirname, '../tsconfig.lib.json')); + +ngPackage + .ngPackagr() + .forProject(packageCfg) + .withTsConfig(tsConfig) + .build() + .catch(error => { + console.error(error); + process.exit(1); + }); diff --git a/tsconfig.lib.json b/tsconfig.lib.json new file mode 100644 index 0000000..058c75f --- /dev/null +++ b/tsconfig.lib.json @@ -0,0 +1,11 @@ +{ + "extends": "./node_modules/ng-packagr/lib/ts/conf/tsconfig.ngc.json", + "angularCompilerOptions": { + "annotateForClosureCompiler": true, + "flatModuleId": "AUTOGENERATED", + "flatModuleOutFile": "AUTOGENERATED", + "skipTemplateCodegen": true, + "strictMetadataEmit": true, + "fullTemplateTypeCheck": true + } +}