angular-json-table.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. import { CommonModule } from '@angular/common';
  2. import { Component, EventEmitter, Input, Output, NgModule } from '@angular/core';
  3. import { FormsModule } from '@angular/forms';
  4. /**
  5. * @fileoverview added by tsickle
  6. * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
  7. */
  8. var DataTableComponent = /** @class */ (function () {
  9. function DataTableComponent() {
  10. this.deleteRow = new EventEmitter();
  11. this.updateRow = new EventEmitter();
  12. this.data = {};
  13. this.displayed = [];
  14. this.perpage = 10;
  15. this.page = 1;
  16. this.checked = [];
  17. this.checkAll = false;
  18. this.dialogue = false;
  19. this.dialogeData = {};
  20. }
  21. /**
  22. * @return {?}
  23. */
  24. DataTableComponent.prototype.ngOnInit = /**
  25. * @return {?}
  26. */
  27. function () {
  28. this.processData();
  29. };
  30. /**
  31. * @param {?} e
  32. * @param {?} id
  33. * @return {?}
  34. */
  35. DataTableComponent.prototype.selected = /**
  36. * @param {?} e
  37. * @param {?} id
  38. * @return {?}
  39. */
  40. function (e, id) {
  41. if (e.target.checked) {
  42. this.checked.push(id);
  43. }
  44. };
  45. /**
  46. * @return {?}
  47. */
  48. DataTableComponent.prototype.deleteSelected = /**
  49. * @return {?}
  50. */
  51. function () {
  52. var _this = this;
  53. if (this.checked.length > 0) {
  54. this.deleteRow.emit(this.checked);
  55. this.dataSource = this.dataSource.filter(function (value, index, array) {
  56. return !_this.checked.includes(value.id);
  57. });
  58. this.checked = [];
  59. this.paginate(this.page);
  60. }
  61. };
  62. /**
  63. * @return {?}
  64. */
  65. DataTableComponent.prototype.totalItems = /**
  66. * @return {?}
  67. */
  68. function () {
  69. if (this.total > this.perpage) {
  70. return Math.ceil(this.total / this.perpage);
  71. }
  72. else {
  73. return 1;
  74. }
  75. };
  76. /**
  77. * @param {?} page
  78. * @return {?}
  79. */
  80. DataTableComponent.prototype.paginate = /**
  81. * @param {?} page
  82. * @return {?}
  83. */
  84. function (page) {
  85. /** @type {?} */
  86. var start = (this.perpage * page) - this.perpage;
  87. /** @type {?} */
  88. var end = (this.perpage * page);
  89. // console.log(start, end);
  90. this.data['data'] = this.dataSource.slice(start, end);
  91. // console.log(this.data);
  92. };
  93. /**
  94. * @param {?} perPage
  95. * @return {?}
  96. */
  97. DataTableComponent.prototype.pageOnChange = /**
  98. * @param {?} perPage
  99. * @return {?}
  100. */
  101. function (perPage) {
  102. this.perpage = perPage;
  103. this.page = 1;
  104. //console.log(perPage);
  105. this.paginate(this.page);
  106. };
  107. /**
  108. * @return {?}
  109. */
  110. DataTableComponent.prototype.previousPage = /**
  111. * @return {?}
  112. */
  113. function () {
  114. if (this.page > 1) {
  115. this.page--;
  116. }
  117. this.paginate(this.page);
  118. };
  119. /**
  120. * @return {?}
  121. */
  122. DataTableComponent.prototype.nextPage = /**
  123. * @return {?}
  124. */
  125. function () {
  126. if (this.page + 1 <= this.totalItems()) {
  127. this.page++;
  128. }
  129. this.paginate(this.page);
  130. };
  131. /**
  132. * @param {?} id
  133. * @return {?}
  134. */
  135. DataTableComponent.prototype.showUpdate = /**
  136. * @param {?} id
  137. * @return {?}
  138. */
  139. function (id) {
  140. var _this = this;
  141. this.dialogue = true;
  142. // console.log('Showing the updates');
  143. this.data.data.forEach(function (value) {
  144. if (value.id === id) {
  145. _this.dialogeData = value;
  146. }
  147. });
  148. };
  149. /**
  150. * @return {?}
  151. */
  152. DataTableComponent.prototype.closeDialogue = /**
  153. * @return {?}
  154. */
  155. function () {
  156. this.dialogue ? this.dialogue = false : this.dialogue = true;
  157. this.dialogeData = {};
  158. };
  159. /**
  160. * @param {?} dialogeData
  161. * @return {?}
  162. */
  163. DataTableComponent.prototype.submitUpdateRow = /**
  164. * @param {?} dialogeData
  165. * @return {?}
  166. */
  167. function (dialogeData) {
  168. this.updateRow.emit(dialogeData);
  169. };
  170. /**
  171. * @return {?}
  172. */
  173. DataTableComponent.prototype.processData = /**
  174. * @return {?}
  175. */
  176. function () {
  177. if (this.dataSource && this.dataSource.length > 0) {
  178. this.total = this.dataSource.length;
  179. if (this.headers.thead && this.headers.thead.length > 0) {
  180. this.data['headers'] = this.headers.thead;
  181. this.displayed = this.headers.displayed;
  182. }
  183. else {
  184. console.warn('No headers data for table provided');
  185. }
  186. this.paginate(this.page);
  187. }
  188. else {
  189. console.warn('No data for table provided');
  190. }
  191. };
  192. DataTableComponent.decorators = [
  193. { type: Component, args: [{
  194. selector: 'json-table',
  195. template: "<div *ngIf=\"data\" class=\"data-table\">\n <div *ngIf=\"false\">\n <input type=\"text\" class=\"search\" placeholder=\"Search for details\">\n </div>\n <table>\n <thead>\n <tr>\n <th style=\"width: 4%\">&nbsp;</th>\n <th style=\"width: 4%\">#</th>\n <th *ngFor=\"let header of data.headers\" style=\"text-align:left\">{{header}}</th>\n <th *ngIf=\"update\">&nbsp;</th>\n </tr>\n </thead>\n <tbody>\n\n <tr *ngFor=\"let row of data.data; let i = index\">\n <td><input type=\"checkbox\" [checked]=\"checkAll\" (change)=\"selected($event,row.id)\"></td>\n <td>{{ i+1 }}</td>\n <td *ngFor=\"let attr of displayed\" >{{row[attr]}}</td>\n <td *ngIf=\"update\" style=\"text-align:center\">\n <span (click)=\"showUpdate(row.id)\">\uD83D\uDD89</span>\n </td>\n </tr>\n\n </tbody>\n <tfoot></tfoot>\n </table>\n\n <div class=\"footer\">\n <div class=\"delete\">\n <button (click)=\"deleteSelected()\">Delete {{checked.length}} rows</button>\n </div>\n\n <div class=\"spacer\">\n\n </div>\n\n <div class=\"data-pagination\">\n <select (change)=\"pageOnChange(device.value)\" #device>\n <option value=\"10\">10</option>\n <option value=\"15\">15</option>\n <option value=\"20\">20</option>\n <option value=\"100\">100</option>\n </select>\n | Showing {{page}} of {{totalItems()}} |\n <button class=\"link-button\" (click)=\"previousPage()\">Previous</button>\n -\n <button class=\"link-button\" (click)=\"nextPage()\">Next</button>\n </div>\n </div>\n\n\n <div *ngIf=\"update && dialogue\" class=\"update\" (click)=\"closeDialogue()\">\n\n <div class=\"update-box\" (click)=\"$event.stopPropagation()\">\n <h2>Edit the Row</h2>\n <form #customForm=\"ngForm\" novalidate (ngSubmit)=\"submitUpdateRow(dialogeData); closeDialogue()\">\n <div class=\"f-x\">\n <ng-container *ngFor=\"let attr of displayed; let i = index\">\n <div *ngIf=\"attr!='id' \" class=\"f-y\">\n <label>{{data.headers[i]}}</label>\n <input type=\"text\" [value]=\"dialogeData[attr]\" [placeholder]=\"attr\" [name]=\"attr\"\n [(ngModel)]=\"dialogeData[attr]\">\n </div>\n </ng-container>\n </div>\n <footer>\n <br>\n <button type=\"submit\">Update the row</button>\n <button type=\"button\" (click)=\"closeDialogue()\">Cancel</button>\n </footer>\n </form>\n </div>\n </div>\n\n</div>\n",
  196. styles: [".data-table{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);margin:10px;border-radius:8px;background:#fff;padding-top:8px}.data-table .search{width:100%;height:42px;border:none;outline:0;text-align:left;border-bottom:1px solid rgba(0,0,0,.12)}.data-table table{display:table;border-collapse:separate;border-spacing:2px;border-color:grey;width:100%;background:#fff}.data-table table tbody td:first-of-type,.data-table table tbody th:first-of-type,.data-table table thead td:first-of-type,.data-table table thead th:first-of-type{padding-left:24px!important;padding-right:24px!important}.data-table table thead{display:table-header-group;vertical-align:middle;border-color:inherit}.data-table table thead tr{height:56px}.data-table table tbody{display:table-row-group;vertical-align:middle;border-color:inherit}.data-table table tbody tr{height:48px;color:rgba(0,0,0,.87)}.data-table table th{padding:0;color:rgba(0,0,0,.54);border-bottom:1px solid rgba(0,0,0,.12)}.data-table table tfoot{display:table-footer-group;vertical-align:middle;border-color:inherit}.data-table .footer{display:flex;height:40px;border-top:1px solid rgba(0,0,0,.12)}.data-table .footer .spacer{flex-grow:1}.data-table .footer .delete{width:120px;background:0 0}.data-table .footer .delete button{height:80%;background:0 0;border:none;outline:0;cursor:pointer;transition:.25s linear;border-radius:4px;margin-left:5px;margin-top:4px}.data-table .footer .delete button:hover{background-color:#fbab33;color:#fff}.data-table .footer .data-pagination{padding-right:20px;padding-top:4px}.data-table .footer .data-pagination select{outline:0;background:0 0;padding:4px}.data-table .footer .data-pagination .link-button{border:none;outline:0;background:0 0}.data-table .footer .data-pagination .link-button:hover{text-decoration:underline}.data-table .update{transition:.5s linear;position:fixed;height:100vh;width:100vw;background:rgba(212,212,212,.51);top:0;left:0;display:flex;align-items:center;justify-content:center}.data-table .update .update-box{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);background:#fff;padding:8px;border-radius:4px;width:250px}.data-table .update .f-x{display:flex;flex-direction:column}.data-table .update .f-y{display:flex;flex-direction:column;margin-top:6px}.data-table .update input[type=text]{margin-right:4px;padding:4px}"]
  197. }] }
  198. ];
  199. /** @nocollapse */
  200. DataTableComponent.ctorParameters = function () { return []; };
  201. DataTableComponent.propDecorators = {
  202. dataSource: [{ type: Input }],
  203. headers: [{ type: Input }],
  204. update: [{ type: Input }],
  205. deleteRow: [{ type: Output }],
  206. updateRow: [{ type: Output }]
  207. };
  208. return DataTableComponent;
  209. }());
  210. /**
  211. * @fileoverview added by tsickle
  212. * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
  213. */
  214. var JSONTableModule = /** @class */ (function () {
  215. function JSONTableModule() {
  216. }
  217. JSONTableModule.decorators = [
  218. { type: NgModule, args: [{
  219. imports: [
  220. CommonModule,
  221. FormsModule
  222. ],
  223. declarations: [DataTableComponent],
  224. exports: [DataTableComponent]
  225. },] }
  226. ];
  227. return JSONTableModule;
  228. }());
  229. /**
  230. * @fileoverview added by tsickle
  231. * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
  232. */
  233. /**
  234. * @fileoverview added by tsickle
  235. * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
  236. */
  237. export { JSONTableModule, DataTableComponent as ɵa };
  238. //# sourceMappingURL=angular-json-table.js.map