diff --git a/gulpfile.js b/gulpfile.js index 140020f..8fb7869 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,13 +1,16 @@ -let gulp = require('gulp'), +const gulp = require('gulp'), childProcess = require('child_process'), _ = require('lodash'), uglify = require('gulp-uglify-es').default, rename = require('gulp-rename'), jsonEditor = require('gulp-json-editor'), fs = require('fs'), - sass = require('gulp-sass'); - -let packageJson = JSON.parse(fs.readFileSync('./package.json')), + sass = require('gulp-sass'), + path = require('path'), + ngPackagr = require('ng-packagr'), + ngPackagePath = path.normalize(path.join(__dirname, './ng-package.json')), + tsConfigPath = path.normalize(path.join(__dirname, './tsconfig.dist.json')), + packageConfig = JSON.parse(fs.readFileSync('./package.json')), paths = { gulp: 'node_modules/gulp/bin/gulp.js', ngPackagr: 'node_modules/ng-packagr/cli/main.js', @@ -16,26 +19,26 @@ let packageJson = JSON.parse(fs.readFileSync('./package.json')), root: 'images/' }, src: { - css: `src/app/components/${packageJson.name}/${packageJson.name}.component.scss` + css: `src/app/components/${packageConfig.name}/${packageConfig.name}.component.scss` }, dist: { root: 'dist/', package: 'dist/package.json', bundles: { root: 'dist/bundles/', - file: `dist/bundles/${packageJson.name}.umd.js`, - mapFile: `dist/bundles/${packageJson.name}.umd.js.map`, - minFile: `${packageJson.name}.umd.min.js` + file: `dist/bundles/${packageConfig.name}.umd.js`, + mapFile: `dist/bundles/${packageConfig.name}.umd.js.map`, + minFile: `${packageConfig.name}.umd.min.js` }, esm5: { root: 'dist/esm5/', - file: `dist/esm5/${packageJson.name}.js`, - minFile: `${packageJson.name}.min.js` + file: `dist/esm5/${packageConfig.name}.js`, + minFile: `${packageConfig.name}.min.js` }, esm2015: { root: 'dist/esm2015/', - file: `dist/esm2015/${packageJson.name}.js`, - minFile: `${packageJson.name}.min.js` + file: `dist/esm2015/${packageConfig.name}.js`, + minFile: `${packageConfig.name}.min.js` } } }; @@ -43,8 +46,6 @@ let packageJson = JSON.parse(fs.readFileSync('./package.json')), function executeCommand(command, parameters) { if (command === 'gulp') { command = paths.gulp; - } else if (command === 'ng-packagr') { - command = paths.ngPackagr; } else if (command === 'ionic') { command = paths.ionic; } @@ -55,13 +56,13 @@ function executeCommand(command, parameters) { childProcess.spawnSync('node', _parameters, { stdio: 'inherit' }); } -function copyCss() { +async function copyCss() { return Promise.all([ new Promise(function (resolve, reject) { // Copy original SCSS file to "module" folder from package.json. // That's where Ionic will be looking for it. fs.createReadStream(paths.src.css).pipe( - fs.createWriteStream(`${paths.dist.esm5.root}${packageJson.name}.component.scss`) + fs.createWriteStream(`${paths.dist.esm5.root}${packageConfig.name}.component.scss`) .on('error', reject) .on('close', resolve) ); @@ -73,7 +74,7 @@ function copyCss() { .pipe(sass({ outputStyle: 'compressed' })) - .pipe(rename(`${packageJson.name}.component.min.css`)) + .pipe(rename(`${packageConfig.name}.component.min.css`)) .pipe(gulp.dest(paths.dist.esm5.root)) .on('error', reject) .on('end', resolve); @@ -81,7 +82,7 @@ function copyCss() { ]); } -function copyImages() { +async function copyImages() { return new Promise(function (resolve, reject) { gulp.src(`${paths.images.root}**/*`) .pipe(gulp.dest(`${paths.dist.root}${paths.images.root}`)) @@ -90,7 +91,7 @@ function copyImages() { }); } -function minifyJS() { +async function minifyJS() { // Minify files. return Promise.all([ new Promise(function (resolve, reject) { @@ -120,7 +121,7 @@ function minifyJS() { }); } -function modifyPackageJson() { +async function modifyPackageJson() { return new Promise(function (resolve, reject) { gulp.src(paths.dist.package) .pipe(jsonEditor(function (json) { @@ -138,23 +139,27 @@ function modifyPackageJson() { }); } -gulp.task('heroku', function () { - executeCommand('ionic', ['build', '--minifyjs', '--minifycss', '--optimizejs']); -}); +async function build() { + await ngPackagr + .ngPackagr() + .forProject(ngPackagePath) + .withTsConfig(tsConfigPath) + .build() + .catch(error => { + console.error(error); + process.exit(1); + }); + await minifyJS(); + await modifyPackageJson(); + await copyCss(); + await copyImages(); -gulp.task('build', function () { - executeCommand('ng-packagr', ['-p', 'ng-package.json']); + // Remove archive created by ng-packagr. + fs.unlinkSync('dist.tgz'); +} - minifyJS().then(function () { - modifyPackageJson().then(function () { - copyCss().then(function () { - copyImages().then(function () { - // Remove archive created by ng-packagr. - fs.unlinkSync('dist.tgz'); - }); - }); - }); - }); +gulp.task('heroku', function () { + executeCommand('ionic', ['build', '--minifyjs', '--minifycss', '--optimizejs']); }); - +gulp.task('build', build); gulp.task('default', ['build']); diff --git a/ionic-selectable.code-workspace b/ionic-selectable.code-workspace index 07f9953..bff2079 100644 --- a/ionic-selectable.code-workspace +++ b/ionic-selectable.code-workspace @@ -5,7 +5,7 @@ } ], "settings": { - "editor.formatOnSave": true, + "editor.formatOnSave": false, "editor.wordWrap": "on", "editor.detectIndentation": false, "search.exclude": { @@ -21,7 +21,6 @@ "source.organizeImports": true } }, - "beautify.tabSize": 2, "editor.tabSize": 2 } } diff --git a/package-lock.json b/package-lock.json index bfa9265..7f3a03d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "ionic-selectable", - "version": "3.1.0", + "version": "3.4.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -665,7 +665,7 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.7", + "core-js": "2.6.5", "regenerator-runtime": "0.11.1" } }, @@ -1392,7 +1392,7 @@ "graceful-fs": "4.1.15", "make-dir": "1.3.0", "unique-string": "1.0.0", - "write-file-atomic": "2.3.0", + "write-file-atomic": "2.4.2", "xdg-basedir": "3.0.0" } }, @@ -1496,9 +1496,9 @@ "dev": true }, "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", + "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==", "dev": true }, "core-util-is": { @@ -1873,7 +1873,7 @@ }, "duplexer": { "version": "0.1.1", - "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, @@ -2098,7 +2098,7 @@ }, "es6-promise": { "version": "3.3.1", - "resolved": "http://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", "dev": true }, @@ -3708,7 +3708,7 @@ }, "got": { "version": "6.7.1", - "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "dev": true, "requires": { @@ -4516,7 +4516,7 @@ }, "is-obj": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, @@ -5507,21 +5507,21 @@ "dev": true, "requires": { "safe-buffer": "5.1.2", - "yallist": "3.0.2" + "yallist": "3.0.3" }, "dependencies": { "yallist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", - "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", "dev": true } } }, "minizlib": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.1.tgz", - "integrity": "sha512-TrfjCjk4jLhcJyGMYymBH6oTXcWjYbUAXTHDbtnWHjZC25h0cdajHuPE1zxb4DVmu8crfh+HwH/WMuyLG0nHBg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", "dev": true, "requires": { "minipass": "2.3.5" @@ -5573,7 +5573,7 @@ }, "moment": { "version": "2.21.0", - "resolved": "http://registry.npmjs.org/moment/-/moment-2.21.0.tgz", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.21.0.tgz", "integrity": "sha512-TCZ36BjURTeFTM/CwRcViQlfkMvL1/vFISuNLO5GkcVm1+QHfbSiNqZuWeMFjj1/3+uAjXswgRk30j1kkLYJBQ==", "dev": true }, @@ -5694,7 +5694,7 @@ "strip-bom": "3.0.0", "stylus": "0.54.5", "tar": "4.4.8", - "uglify-js": "3.4.9", + "uglify-js": "3.5.9", "update-notifier": "2.5.0" }, "dependencies": { @@ -5778,7 +5778,7 @@ }, "rollup": { "version": "0.55.5", - "resolved": "http://registry.npmjs.org/rollup/-/rollup-0.55.5.tgz", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.55.5.tgz", "integrity": "sha512-2hke9NOy332kxvnmMQOgl7DHm94zihNyYJNd8ZLWo4U0EjFvjUkeWa0+ge+70bTg+mY0xJ7NUsf5kIhDtrGrtA==", "dev": true }, @@ -5816,34 +5816,34 @@ "chownr": "1.1.1", "fs-minipass": "1.2.5", "minipass": "2.3.5", - "minizlib": "1.1.1", + "minizlib": "1.2.1", "mkdirp": "0.5.1", "safe-buffer": "5.1.2", - "yallist": "3.0.2" + "yallist": "3.0.3" } }, "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "version": "3.5.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.9.tgz", + "integrity": "sha512-WpT0RqsDtAWPNJK955DEnb6xjymR8Fn0OlK4TT4pS0ASYsVPqr5ELhgwOwLCP5J5vHeJ4xmMmz3DEgdqC10JeQ==", "dev": true, "requires": { - "commander": "2.17.1", + "commander": "2.20.0", "source-map": "0.6.1" }, "dependencies": { "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", "dev": true } } }, "yallist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", - "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", "dev": true } } @@ -6350,7 +6350,7 @@ "dev": true, "requires": { "got": "6.7.1", - "registry-auth-token": "3.3.2", + "registry-auth-token": "3.4.0", "registry-url": "3.1.0", "semver": "5.6.0" } @@ -7218,9 +7218,9 @@ } }, "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", "dev": true, "requires": { "rc": "1.2.8", @@ -7933,7 +7933,7 @@ "buffer-crc32": "0.2.13", "minimist": "1.2.0", "sander": "0.5.1", - "sourcemap-codec": "1.4.3" + "sourcemap-codec": "1.4.4" } }, "source-list-map": { @@ -7977,9 +7977,9 @@ "dev": true }, "sourcemap-codec": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.3.tgz", - "integrity": "sha512-vFrY/x/NdsD7Yc8mpTJXuao9S8lq08Z/kOITHz6b7YbfI9xL8Spe5EvSQUHOI7SbpY8bRPr0U3kKSsPuqEGSfA==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz", + "integrity": "sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==", "dev": true }, "sparkles": { @@ -8218,13 +8218,13 @@ }, "sax": { "version": "0.5.8", - "resolved": "http://registry.npmjs.org/sax/-/sax-0.5.8.tgz", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", "dev": true }, "source-map": { "version": "0.1.43", - "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, "requires": { @@ -9786,9 +9786,9 @@ "dev": true }, "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz", + "integrity": "sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==", "dev": true, "requires": { "graceful-fs": "4.1.15", diff --git a/package.json b/package.json index b036e09..2b2b923 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "version": "3.4.0", + "version": "3.4.2", "name": "ionic-selectable", "title": "Ionic Selectable", "description": "An Ionic component similar to Ionic Select, that allows to search items, including async search, group, add, edit, delete items, and much more.", 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 0ccd6b0..44b5454 100644 --- a/src/app/components/ionic-selectable/ionic-selectable-modal.component.html +++ b/src/app/components/ionic-selectable/ionic-selectable-modal.component.html @@ -125,7 +125,7 @@ { + return _item[this.itemValueField] === item; + }); + + return this._formatItem(selectedItem); + } else { + return this._formatItem(item); + } + } + _getItemValue(item: any): any { if (!this._hasObjects) { return item; @@ -1204,19 +1217,6 @@ export class IonicSelectableComponent implements ControlValueAccessor, OnInit, O this._hasFilteredItems = !this._areGroupsEmpty(this._filteredGroups); } - private _formatValueItem(item: any): string { - if (this._shouldStoreItemValue) { - // Get item text from the list as we store it's value only. - let selectedItem = this.items.find(_item => { - return _item[this.itemValueField] === item; - }); - - return this._formatItem(selectedItem); - } else { - return this._formatItem(item); - } - } - private _getPropertyValue(object: any, property: string): any { if (!property) { return null; diff --git a/tsconfig.dist.json b/tsconfig.dist.json new file mode 100644 index 0000000..4f0805f --- /dev/null +++ b/tsconfig.dist.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": false + } +}