diff --git a/.gitignore b/.gitignore index ec314d5..93a5ab4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,12 @@ -/dist +!dist/package.json +dist/* /tmp /node_modules /.idea /typings npm-debug.log -/.vscode \ No newline at end of file +/.vscode +/src/**/*.js* +/src/**/*.ngfactory.ts +**/*.ngsummary.json +/aot \ No newline at end of file diff --git a/.npmignore b/.npmignore index 2ed39f1..e831038 100644 --- a/.npmignore +++ b/.npmignore @@ -1,10 +1 @@ - -/tmp -/node_modules -/.idea -/typings -npm-debug.log -tsconfig.json -typings.json -/.vscode -/.npmignore \ No newline at end of file +src \ No newline at end of file diff --git a/circle.yml b/circle.yml index 146bb1c..ab1ca8b 100644 --- a/circle.yml +++ b/circle.yml @@ -3,7 +3,7 @@ machine: timezone: America/Denver # Set the timezone node: - version: 6.2.2 + version: 6.9.4 ## Customize dependencies dependencies: @@ -20,4 +20,5 @@ deployment: branch: master commands: - echo -e "$NPM_USERNAME\n$NPM_PASSWORD\n$NPM_EMAIL" | npm login + - cd dist - npm run publish2npm diff --git a/dist/package.json b/dist/package.json new file mode 100644 index 0000000..3b0dead --- /dev/null +++ b/dist/package.json @@ -0,0 +1,37 @@ +{ + "name": "angular-datatable", + "version": "2.2.0", + "description": "An Angular 2 datatable, with pagination, sorting, expandable rows etc.", + "main": "bundles/datatable.umd.js", + "module": "index.js", + "typings": "index.d.ts", + "keywords": [ + "angular", + "angular2", + "Angular 2", + "ng2", + "ngx", + "datatable", + "data-table", + "data table", + "pagination" + ], + "author": "BrieBug Developers ", + "license": "MIT", + "repository": { + "type": "git", + "url": "git://git@github.com/briebug/angular-datatable.git" + }, + "homepage": "https://github.com/briebug/angular-datatable", + "bugs": { + "url": "https://github.com/briebug/angular-datatable/issues" + }, + "peerDependencies": { + "@angular/core": "^2.4.0", + "@angular/common": "^2.4.0", + "@angular/forms": "^2.4.0", + "reflect-metadata": "^0.1.8", + "rxjs": "^5.0.1", + "zone.js": "^0.7.2" + } +} \ No newline at end of file diff --git a/index.ts b/index.ts new file mode 100644 index 0000000..e0192f9 --- /dev/null +++ b/index.ts @@ -0,0 +1,6 @@ +/** + * @module + * @description + * Entry point for all public APIs of the Angular Module + */ +export * from './src/index'; diff --git a/package.json b/package.json index 3f8a4fe..f35bf53 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,9 @@ { "name": "angular-datatable", - "version": "2.2.0", + "version": "2.2.1", "description": "An Angular 2 datatable, with pagination, sorting, expandable rows etc.", + "main": "dist/bundles/angular-datatable.umd.js", + "module": "dist/index.js", "keywords": [ "angular", "angular2", @@ -12,31 +14,39 @@ "data table", "pagination" ], - "main": "dist/index.js", - "typings": "dist/index.d.ts", "scripts": { - "build": "rm -rf dist/* && tsc", - "serve": "rm -rf dist/ && tsc -w", - "prepublish": "npm run build", - "publish2npm": "publish" + "cleanup": "rimraf dist/bundles dist/src dist/index.d.ts dist/index.metadata.json dist/index.js dist/index.js.map dist/LICENSE dist/README.md", + "bundling": "rollup -c", + "minify": "uglifyjs dist/bundles/angular-datatable.umd.js --screw-ie8 --compress --mangle --comments --output dist/bundles/angular-datatable.umd.min.js", + "copy": "copyfiles LICENSE README.md dist", + "build": "npm run cleanup && ngc && npm run bundling && npm run minify && npm run copy", + "build-only": "npm run cleanup && ngc", + "publish-to-npm": "cd dist && npm publish", + "link": "cd dist && npm link && cd .." }, "repository": { "type": "git", "url": "git://git@github.com/briebugconsulting/angular-datatable.git" }, - "peerDependencies": { - "@angular/core": "^2.3.1" - }, "author": "BrieBug Developers ", "license": "MIT", + "dependencies": { + "@angular/common": "^2.4.0", + "@angular/core": "^2.4.0", + "@angular/forms": "^2.4.0", + "reflect-metadata": "^0.1.8", + "rxjs": "^5.0.3", + "zone.js": "^0.7.2" + }, "devDependencies": { - "@angular/common": "^2.3.1", - "@angular/core": "^2.3.1", - "@angular/forms": "^2.3.1", + "@angular/compiler": "^2.4.0", + "@angular/compiler-cli": "^2.4.0", + "copyfiles": "^1.2.0", "cz-conventional-changelog": "1.2.0", - "publish": "^0.6.0", - "rxjs": "^5.0.1", - "typescript": "~2.0.3", + "rimraf": "^2.6.1", + "rollup": "^0.37.0", + "typescript": "~2.0.10", + "uglify-js": "^2.7.5", "validate-commit-msg": "2.8.2" }, "config": { diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 0000000..114ebe6 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,12 @@ +export default { + entry: 'dist/index.js', + dest: 'dist/bundles/angular-datatable.umd.js', + sourceMap: false, + format: 'umd', + moduleName: 'ng.datatable', + globals: { + '@angular/core': 'ng.core', + '@angular/common': 'ng.common', + '@angular/forms': 'ng.forms' + } +} \ No newline at end of file diff --git a/src/components/column.component.ts b/src/components/column.component.ts index 0160c7d..aac4bcb 100644 --- a/src/components/column.component.ts +++ b/src/components/column.component.ts @@ -15,14 +15,14 @@ export class DataTableColumn implements OnInit { @Input() property: string; @Input() styleClass: string; @Input() cellColors: CellCallback; - @Input() customSort?: DataTableSortCallback; + @Input() customSort: DataTableSortCallback; // init and state: @Input() width: number | string; @Input() visible = true; - @ContentChild('dataTableCell') cellTemplate; - @ContentChild('dataTableHeader') headerTemplate; + @ContentChild('dataTableCell') cellTemplate: any; + @ContentChild('dataTableHeader') headerTemplate: any; getCellColor(row: DataTableRow, index: number) { if (this.cellColors !== undefined) { diff --git a/src/components/row.component.ts b/src/components/row.component.ts index 9551b0d..77668b7 100644 --- a/src/components/row.component.ts +++ b/src/components/row.component.ts @@ -51,7 +51,7 @@ export class DataTableRow implements OnDestroy { return ''; } - expandRow(event) { + expandRow(event: Event) { event.stopPropagation(); this.expanded = !this.expanded; this.expandRowChange.emit(); diff --git a/src/components/table.component.ts b/src/components/table.component.ts index 25e32da..3f7f00c 100644 --- a/src/components/table.component.ts +++ b/src/components/table.component.ts @@ -2,16 +2,15 @@ import { Component, Input, Output, EventEmitter, ContentChildren, QueryList, TemplateRef, ContentChild, ViewChildren, OnInit } from '@angular/core'; -import { DataTableColumn } from './column.component'; -import { DataTableRow } from './row.component'; -import {DataTableParams, DataTableSortCallback} from './types'; -import { RowCallback } from './types'; -import { DataTableTranslations, defaultTranslations } from './types'; -import { drag } from '../utils/drag'; -import { TABLE_TEMPLATE } from './table.template'; -import { TABLE_STYLE } from "./table.style"; - +import {DataTableColumn} from './column.component'; +import {DataTableRow} from './row.component'; +import {DataTableParams, DataTableSortCallback} from './types'; +import {RowCallback} from './types'; +import {DataTableTranslations, defaultTranslations} from './types'; +import {drag} from '../utils/drag'; +import {TABLE_TEMPLATE} from './table.template'; +import {TABLE_STYLE} from "./table.style"; @Component({ selector: 'data-table', @@ -68,7 +67,7 @@ export class DataTable implements DataTableParams, OnInit { private _sortBy: string; private _sortAsc = true; - private _customSort: DataTableSortCallback = null; + private _customSort: DataTableSortCallback; private _offset = 0; private _limit = 10; @@ -140,7 +139,7 @@ export class DataTable implements DataTableParams, OnInit { // setting multiple observable properties simultaneously - sort(sortBy: string, asc: boolean, customSort: DataTableSortCallback = null) { + sort(sortBy: string, asc: boolean, customSort: DataTableSortCallback) { this.sortBy = sortBy; this.sortAsc = asc; this.customSort = customSort; @@ -165,9 +164,9 @@ export class DataTable implements DataTableParams, OnInit { } private _initDefaultClickEvents() { - this.headerClick.subscribe(tableEvent => this.sortColumn(tableEvent.column)); + this.headerClick.subscribe((tableEvent: any) => this.sortColumn(tableEvent.column)); if (this.selectOnRowClick) { - this.rowClick.subscribe(tableEvent => tableEvent.row.selected = !tableEvent.row.selected); + this.rowClick.subscribe((tableEvent: any) => tableEvent.row.selected = !tableEvent.row.selected); } } @@ -209,7 +208,7 @@ export class DataTable implements DataTableParams, OnInit { }; } - _scheduledReload = null; + _scheduledReload: any = null; // for avoiding cascading reloads if multiple params are set at once: _triggerReload() { @@ -224,7 +223,7 @@ export class DataTable implements DataTableParams, OnInit { // Download @Output() download = new EventEmitter(); - downloadItems(){ + downloadItems() { this.download.emit(this._getRemoteParameters()); } @@ -236,24 +235,24 @@ export class DataTable implements DataTableParams, OnInit { @Output() cellClick = new EventEmitter(); @Output() rowExpandChange = new EventEmitter(); - private rowClicked(row: DataTableRow, event) { - this.rowClick.emit({ row, event }); + private rowClicked(row: DataTableRow, event: Event) { + this.rowClick.emit({row, event}); } - private rowDoubleClicked(row: DataTableRow, event) { - this.rowDoubleClick.emit({ row, event }); + private rowDoubleClicked(row: DataTableRow, event: Event) { + this.rowDoubleClick.emit({row, event}); } private headerClicked(column: DataTableColumn, event: MouseEvent) { if (!this._resizeInProgress) { - this.headerClick.emit({ column, event }); + this.headerClick.emit({column, event}); } else { this._resizeInProgress = false; // this is because I can't prevent click from mousup of the drag end } } private cellClicked(column: DataTableColumn, row: DataTableRow, event: MouseEvent) { - this.cellClick.emit({ row, column, event }); + this.cellClick.emit({row, column, event}); } // functions: @@ -318,7 +317,6 @@ export class DataTable implements DataTableParams, OnInit { } onRowSelectChanged(row: DataTableRow) { - // maintain the selectedRow(s) view if (this.multiSelect) { let index = this.selectedRows.indexOf(row); @@ -331,7 +329,7 @@ export class DataTable implements DataTableParams, OnInit { if (row.selected) { this.selectedRow = row; } else if (this.selectedRow === row) { - this.selectedRow = undefined; + this.selectedRow = row; } } @@ -345,14 +343,14 @@ export class DataTable implements DataTableParams, OnInit { } } - onRowExpandChanged(row) { + onRowExpandChanged(row: DataTableRow) { this.rowExpandChange.emit(row); } // other: get substituteItems() { - return Array.from({ length: this.displayParams.limit - this.items.length }); + return Array.from({length: this.displayParams.limit - this.items.length}); } // column resizing: @@ -378,8 +376,7 @@ export class DataTable implements DataTableParams, OnInit { Without the limits, resizing can make the next column disappear completely, and even increase the table width. The current implementation suffers from the fact, that offsetWidth sometimes contains out-of-date values. */ - if ((dx < 0 && (columnElement.offsetWidth + dx) <= this.resizeLimit) || - !columnElement.nextElementSibling || // resizing doesn't make sense for the last visible column + if ((dx < 0 && (columnElement.offsetWidth + dx) <= this.resizeLimit) || !columnElement.nextElementSibling || // resizing doesn't make sense for the last visible column (dx >= 0 && (( columnElement.nextElementSibling).offsetWidth + dx) <= this.resizeLimit)) { return false; } diff --git a/src/data-table.module.ts b/src/data-table.module.ts new file mode 100644 index 0000000..bcfa164 --- /dev/null +++ b/src/data-table.module.ts @@ -0,0 +1,42 @@ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; + +import {DataTable} from './components/table.component'; +import {DataTableColumn} from './components/column.component'; +import {DataTableRow} from './components/row.component'; +import {DataTablePagination} from './components/pagination.component'; +import {DataTableHeader} from './components/header.component'; + +import {PixelConverter} from './utils/px'; +import {Hide} from './utils/hide'; +import {MinPipe} from './utils/min'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule + ], + declarations: [ + DataTable, + DataTableColumn, + DataTableRow, + DataTablePagination, + DataTableHeader, + PixelConverter, + Hide, + MinPipe + ], + exports: [ + DataTable, + DataTableColumn, + DataTableRow, + DataTablePagination, + DataTableHeader, + PixelConverter, + Hide, + MinPipe + ] +}) +export class DataTableModule { +} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 303ebcd..c9e504e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,32 +1 @@ -import {NgModule} from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {FormsModule} from '@angular/forms'; - -import {DataTable} from './components/table.component'; -import {DataTableColumn} from './components/column.component'; -import {DataTableRow} from './components/row.component'; -import {DataTablePagination} from './components/pagination.component'; -import {DataTableHeader} from './components/header.component'; - -import {PixelConverter} from './utils/px'; -import {Hide} from './utils/hide'; -import {MinPipe} from './utils/min'; - -export * from './components/types'; -export * from './tools/data-table-resource'; - -export {DataTable, DataTableColumn, DataTableRow, DataTablePagination, DataTableHeader}; -export const DATA_TABLE_DIRECTIVES = [DataTable, DataTableColumn]; - - -@NgModule({ - imports: [CommonModule, FormsModule], - declarations: [ - DataTable, DataTableColumn, - DataTableRow, DataTablePagination, DataTableHeader, - PixelConverter, Hide, MinPipe - ], - exports: [DataTable, DataTableColumn] -}) -export class DataTableModule { -} \ No newline at end of file +export {DataTableModule} from './data-table.module'; \ No newline at end of file diff --git a/src/tools/data-table-resource.ts b/src/tools/data-table-resource.ts index 222796d..fff2e84 100644 --- a/src/tools/data-table-resource.ts +++ b/src/tools/data-table-resource.ts @@ -16,11 +16,11 @@ export class DataTableResource { if (params.sortBy) { if (!params.customSort) { - result.sort((a, b) => { - if (typeof a[params.sortBy] === 'string') { - return a[params.sortBy].localeCompare(b[params.sortBy]); + result.sort((a: any, b: any) => { + if (typeof a[ params.sortBy] === 'string') { + return a[ params.sortBy].localeCompare(b[ params.sortBy]); } else { - return a[params.sortBy] - b[params.sortBy]; + return a[ params.sortBy] - b[ params.sortBy]; } }); } else { diff --git a/src/utils/hide.ts b/src/utils/hide.ts index 0c98ec8..caa01f1 100644 --- a/src/utils/hide.ts +++ b/src/utils/hide.ts @@ -8,7 +8,7 @@ function isBlank(obj: any): boolean { @Directive({ selector: '[hide]', inputs: ['hide'] }) export class Hide { - private _prevCondition: boolean = null; + private _prevCondition: boolean = false; private _displayStyle: string; constructor(private _elementRef: ElementRef, private _renderer: Renderer) { } diff --git a/tsconfig.json b/tsconfig.json index 3e401fd..5db88eb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,21 +1,33 @@ { "compilerOptions": { + "baseUrl": ".", "declaration": true, - "emitDecoratorMetadata": true, + "stripInternal": true, "experimentalDecorators": true, - "lib": ["es6", "dom"], - "module": "es6", + "strictNullChecks": false, + "noImplicitAny": true, + "module": "es2015", "moduleResolution": "node", - "outDir": "dist/", - "rootDir": "src/", + "paths": { + "@angular/core": ["node_modules/@angular/core"], + "@angular/common": ["node_modules/@angular/common"], + "@angular/forms": ["node_modules/@angular/forms"] + }, + "rootDir": ".", + "outDir": "dist", "sourceMap": true, + "inlineSources": true, "target": "es5", - "typeRoots": [ - "../node_modules/@types" + "skipLibCheck": true, + "lib": [ + "es2016", + "dom" ] }, - "exclude": [ - "dist", - "node_modules" - ] -} + "files": [ + "index.ts" + ], + "angularCompilerOptions": { + "strictMetadataEmit": true + } +} \ No newline at end of file diff --git a/typings.json b/typings.json deleted file mode 100644 index f670590..0000000 --- a/typings.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "angular-datatable", - "dependencies": {}, - "globalDevDependencies": { - "es6-shim": "registry:dt/es6-shim#0.31.2+20160602141504" - } -}