angular-slickgrid 4.1.2 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/.browserslistrc +12 -0
  2. package/.codecov.yml +17 -0
  3. package/.editorconfig +18 -0
  4. package/.eslintrc.json +50 -0
  5. package/.github/CODE_OF_CONDUCT.md +76 -0
  6. package/.github/FUNDING.yml +8 -0
  7. package/.github/ISSUE_TEMPLATE/bug_report.yml +54 -0
  8. package/.github/ISSUE_TEMPLATE/config.yml +5 -0
  9. package/.github/ISSUE_TEMPLATE/feature_request.yml +44 -0
  10. package/.github/renovate.json5 +26 -0
  11. package/.github/stale.yml +7 -0
  12. package/.github/workflows/main.yml +83 -0
  13. package/.vscode/extensions.json +9 -0
  14. package/.vscode/launch.json +72 -0
  15. package/.vscode/settings.json +7 -0
  16. package/.vscode/tasks.json +77 -0
  17. package/CHANGELOG.md +1172 -0
  18. package/LICENSE +20 -20
  19. package/README.md +9 -7
  20. package/angular.json +148 -0
  21. package/dist/LICENSE +20 -0
  22. package/dist/README.md +182 -0
  23. package/{angular-slickgrid.d.ts → dist/angular-slickgrid.d.ts} +0 -0
  24. package/{app → dist/app}/modules/angular-slickgrid/components/angular-slickgrid.component.d.ts +0 -0
  25. package/{app → dist/app}/modules/angular-slickgrid/constants.d.ts +0 -0
  26. package/{app → dist/app}/modules/angular-slickgrid/extensions/index.d.ts +0 -0
  27. package/{app → dist/app}/modules/angular-slickgrid/extensions/slickRowDetailView.d.ts +0 -0
  28. package/{app → dist/app}/modules/angular-slickgrid/global-grid-options.d.ts +0 -0
  29. package/{app → dist/app}/modules/angular-slickgrid/index.d.ts +0 -0
  30. package/{app → dist/app}/modules/angular-slickgrid/models/angularComponentOutput.interface.d.ts +0 -0
  31. package/{app → dist/app}/modules/angular-slickgrid/models/angularGridInstance.interface.d.ts +0 -0
  32. package/{app → dist/app}/modules/angular-slickgrid/models/externalTestingDependencies.interface.d.ts +0 -0
  33. package/{app → dist/app}/modules/angular-slickgrid/models/gridOption.interface.d.ts +0 -0
  34. package/{app → dist/app}/modules/angular-slickgrid/models/index.d.ts +0 -0
  35. package/{app → dist/app}/modules/angular-slickgrid/models/rowDetailView.interface.d.ts +0 -0
  36. package/{app → dist/app}/modules/angular-slickgrid/models/slickGrid.interface.d.ts +0 -0
  37. package/{app → dist/app}/modules/angular-slickgrid/modules/angular-slickgrid.module.d.ts +0 -0
  38. package/{app → dist/app}/modules/angular-slickgrid/services/angularUtil.service.d.ts +0 -0
  39. package/{app → dist/app}/modules/angular-slickgrid/services/bsDropdown.service.d.ts +0 -0
  40. package/{app → dist/app}/modules/angular-slickgrid/services/container.service.d.ts +0 -0
  41. package/{app → dist/app}/modules/angular-slickgrid/services/index.d.ts +0 -0
  42. package/{app → dist/app}/modules/angular-slickgrid/services/translater.service.d.ts +0 -0
  43. package/{app → dist/app}/modules/angular-slickgrid/services/utilities.d.ts +0 -0
  44. package/{app → dist/app}/modules/angular-slickgrid/slickgrid-config.d.ts +0 -0
  45. package/{esm2020 → dist/esm2020}/angular-slickgrid.mjs +0 -0
  46. package/dist/esm2020/app/modules/angular-slickgrid/components/angular-slickgrid.component.mjs +1171 -0
  47. package/{esm2020 → dist/esm2020}/app/modules/angular-slickgrid/constants.mjs +1 -1
  48. package/{esm2020 → dist/esm2020}/app/modules/angular-slickgrid/extensions/index.mjs +1 -1
  49. package/{esm2020 → dist/esm2020}/app/modules/angular-slickgrid/extensions/slickRowDetailView.mjs +2 -2
  50. package/{esm2020 → dist/esm2020}/app/modules/angular-slickgrid/global-grid-options.mjs +1 -1
  51. package/{esm2020 → dist/esm2020}/app/modules/angular-slickgrid/index.mjs +1 -1
  52. package/{esm2020 → dist/esm2020}/app/modules/angular-slickgrid/models/angularComponentOutput.interface.mjs +1 -1
  53. package/dist/esm2020/app/modules/angular-slickgrid/models/angularGridInstance.interface.mjs +2 -0
  54. package/dist/esm2020/app/modules/angular-slickgrid/models/externalTestingDependencies.interface.mjs +2 -0
  55. package/dist/esm2020/app/modules/angular-slickgrid/models/gridOption.interface.mjs +2 -0
  56. package/{esm2020 → dist/esm2020}/app/modules/angular-slickgrid/models/index.mjs +1 -1
  57. package/dist/esm2020/app/modules/angular-slickgrid/models/rowDetailView.interface.mjs +2 -0
  58. package/dist/esm2020/app/modules/angular-slickgrid/models/slickGrid.interface.mjs +2 -0
  59. package/{esm2020 → dist/esm2020}/app/modules/angular-slickgrid/modules/angular-slickgrid.module.mjs +5 -5
  60. package/{esm2020 → dist/esm2020}/app/modules/angular-slickgrid/services/angularUtil.service.mjs +4 -4
  61. package/{esm2020 → dist/esm2020}/app/modules/angular-slickgrid/services/bsDropdown.service.mjs +4 -4
  62. package/{esm2020 → dist/esm2020}/app/modules/angular-slickgrid/services/container.service.mjs +4 -4
  63. package/{esm2020 → dist/esm2020}/app/modules/angular-slickgrid/services/index.mjs +1 -1
  64. package/{esm2020 → dist/esm2020}/app/modules/angular-slickgrid/services/translater.service.mjs +4 -4
  65. package/{esm2020 → dist/esm2020}/app/modules/angular-slickgrid/services/utilities.mjs +1 -1
  66. package/{esm2020 → dist/esm2020}/app/modules/angular-slickgrid/slickgrid-config.mjs +1 -1
  67. package/{esm2020 → dist/esm2020}/public_api.mjs +1 -1
  68. package/{fesm2015 → dist/fesm2015}/angular-slickgrid.mjs +25 -22
  69. package/dist/fesm2015/angular-slickgrid.mjs.map +1 -0
  70. package/{fesm2020 → dist/fesm2020}/angular-slickgrid.mjs +25 -22
  71. package/dist/fesm2020/angular-slickgrid.mjs.map +1 -0
  72. package/{i18n → dist/i18n}/en.json +89 -89
  73. package/{i18n → dist/i18n}/fr.json +90 -90
  74. package/dist/package.json +79 -0
  75. package/{public_api.d.ts → dist/public_api.d.ts} +0 -0
  76. package/global.d.ts +1 -0
  77. package/ngcc.config.js +13 -0
  78. package/package.json +124 -37
  79. package/screenshots/column-picker.png +0 -0
  80. package/screenshots/composite-editor.png +0 -0
  81. package/screenshots/draggable-grouping.png +0 -0
  82. package/screenshots/editors.png +0 -0
  83. package/screenshots/export-to-file.png +0 -0
  84. package/screenshots/filter_and_sort.png +0 -0
  85. package/screenshots/formatters.png +0 -0
  86. package/screenshots/frozen.png +0 -0
  87. package/screenshots/multipleSelectFilter.png +0 -0
  88. package/screenshots/pagination.png +0 -0
  89. package/screenshots/selectFilter.png +0 -0
  90. package/screenshots/singleFilter.png +0 -0
  91. package/src/app/app-routing.module.ts +83 -0
  92. package/src/app/app.component.html +160 -0
  93. package/src/app/app.component.scss +65 -0
  94. package/src/app/app.component.ts +10 -0
  95. package/src/app/app.module.ts +175 -0
  96. package/src/app/examples/custom-angularComponentEditor.ts +184 -0
  97. package/src/app/examples/custom-angularComponentFilter.ts +126 -0
  98. package/src/app/examples/custom-inputEditor.ts +124 -0
  99. package/src/app/examples/custom-inputFilter.ts +142 -0
  100. package/src/app/examples/custom-titleFormatter.component.ts +8 -0
  101. package/src/app/examples/editor-ng-select.component.ts +37 -0
  102. package/src/app/examples/filter-ng-select.component.ts +32 -0
  103. package/src/app/examples/grid-additem.component.html +48 -0
  104. package/src/app/examples/grid-additem.component.ts +272 -0
  105. package/src/app/examples/grid-angular.component.html +79 -0
  106. package/src/app/examples/grid-angular.component.scss +28 -0
  107. package/src/app/examples/grid-angular.component.ts +370 -0
  108. package/src/app/examples/grid-autoheight.component.html +52 -0
  109. package/src/app/examples/grid-autoheight.component.ts +147 -0
  110. package/src/app/examples/grid-basic.component.html +29 -0
  111. package/src/app/examples/grid-basic.component.ts +82 -0
  112. package/src/app/examples/grid-clientside.component.html +51 -0
  113. package/src/app/examples/grid-clientside.component.ts +293 -0
  114. package/src/app/examples/grid-colspan.component.html +39 -0
  115. package/src/app/examples/grid-colspan.component.scss +11 -0
  116. package/src/app/examples/grid-colspan.component.ts +155 -0
  117. package/src/app/examples/grid-composite-editor.component.html +79 -0
  118. package/src/app/examples/grid-composite-editor.component.scss +19 -0
  119. package/src/app/examples/grid-composite-editor.component.ts +948 -0
  120. package/src/app/examples/grid-contextmenu.component.html +62 -0
  121. package/src/app/examples/grid-contextmenu.component.scss +44 -0
  122. package/src/app/examples/grid-contextmenu.component.ts +473 -0
  123. package/src/app/examples/grid-custom-tooltip.component.html +25 -0
  124. package/src/app/examples/grid-custom-tooltip.component.scss +77 -0
  125. package/src/app/examples/grid-custom-tooltip.component.ts +483 -0
  126. package/src/app/examples/grid-draggrouping.component.html +93 -0
  127. package/src/app/examples/grid-draggrouping.component.ts +397 -0
  128. package/src/app/examples/grid-editor.component.html +88 -0
  129. package/src/app/examples/grid-editor.component.ts +699 -0
  130. package/src/app/examples/grid-formatter.component.html +26 -0
  131. package/src/app/examples/grid-formatter.component.ts +162 -0
  132. package/src/app/examples/grid-frozen.component.html +65 -0
  133. package/src/app/examples/grid-frozen.component.scss +11 -0
  134. package/src/app/examples/grid-frozen.component.ts +303 -0
  135. package/src/app/examples/grid-graphql-nopage.component.html +33 -0
  136. package/src/app/examples/grid-graphql-nopage.component.scss +9 -0
  137. package/src/app/examples/grid-graphql-nopage.component.ts +242 -0
  138. package/src/app/examples/grid-graphql.component.html +87 -0
  139. package/src/app/examples/grid-graphql.component.ts +304 -0
  140. package/src/app/examples/grid-grouping.component.html +80 -0
  141. package/src/app/examples/grid-grouping.component.ts +313 -0
  142. package/src/app/examples/grid-headerbutton.component.html +31 -0
  143. package/src/app/examples/grid-headerbutton.component.scss +10 -0
  144. package/src/app/examples/grid-headerbutton.component.ts +233 -0
  145. package/src/app/examples/grid-headermenu.component.html +31 -0
  146. package/src/app/examples/grid-headermenu.component.scss +25 -0
  147. package/src/app/examples/grid-headermenu.component.ts +159 -0
  148. package/src/app/examples/grid-localization.component.html +54 -0
  149. package/src/app/examples/grid-localization.component.ts +293 -0
  150. package/src/app/examples/grid-menu.component.html +37 -0
  151. package/src/app/examples/grid-menu.component.scss +28 -0
  152. package/src/app/examples/grid-menu.component.ts +229 -0
  153. package/src/app/examples/grid-odata.component.html +116 -0
  154. package/src/app/examples/grid-odata.component.ts +441 -0
  155. package/src/app/examples/grid-range.component.html +74 -0
  156. package/src/app/examples/grid-range.component.ts +291 -0
  157. package/src/app/examples/grid-remote.component.html +37 -0
  158. package/src/app/examples/grid-remote.component.ts +153 -0
  159. package/src/app/examples/grid-resize-by-content.component.html +62 -0
  160. package/src/app/examples/grid-resize-by-content.component.scss +19 -0
  161. package/src/app/examples/grid-resize-by-content.component.ts +780 -0
  162. package/src/app/examples/grid-rowdetail.component.html +35 -0
  163. package/src/app/examples/grid-rowdetail.component.ts +205 -0
  164. package/src/app/examples/grid-rowmove.component.html +49 -0
  165. package/src/app/examples/grid-rowmove.component.ts +234 -0
  166. package/src/app/examples/grid-rowselection.component.html +76 -0
  167. package/src/app/examples/grid-rowselection.component.ts +267 -0
  168. package/src/app/examples/grid-state.component.html +36 -0
  169. package/src/app/examples/grid-state.component.ts +259 -0
  170. package/src/app/examples/grid-tabs.component.html +35 -0
  171. package/src/app/examples/grid-tabs.component.ts +115 -0
  172. package/src/app/examples/grid-trading.component.html +58 -0
  173. package/src/app/examples/grid-trading.component.scss +49 -0
  174. package/src/app/examples/grid-trading.component.ts +319 -0
  175. package/src/app/examples/grid-tree-data-hierarchical.component.html +79 -0
  176. package/src/app/examples/grid-tree-data-hierarchical.component.scss +47 -0
  177. package/src/app/examples/grid-tree-data-hierarchical.component.ts +311 -0
  178. package/src/app/examples/grid-tree-data-parent-child.component.html +108 -0
  179. package/src/app/examples/grid-tree-data-parent-child.component.scss +10 -0
  180. package/src/app/examples/grid-tree-data-parent-child.component.ts +351 -0
  181. package/src/app/examples/home.component.html +41 -0
  182. package/src/app/examples/home.component.ts +9 -0
  183. package/src/app/examples/rowdetail-preload.component.ts +10 -0
  184. package/src/app/examples/rowdetail-view.component.html +36 -0
  185. package/src/app/examples/rowdetail-view.component.ts +54 -0
  186. package/src/app/examples/swt-common-grid-pagination.component.ts +156 -0
  187. package/src/app/examples/swt-common-grid-test.component.html +30 -0
  188. package/src/app/examples/swt-common-grid-test.component.ts +219 -0
  189. package/src/app/examples/swt-common-grid.component.ts +436 -0
  190. package/src/app/examples/swt-logger.service.ts +165 -0
  191. package/src/app/modules/angular-slickgrid/components/angular-slickgrid.component.html +4 -0
  192. package/src/app/modules/angular-slickgrid/components/angular-slickgrid.component.ts +1395 -0
  193. package/src/app/modules/angular-slickgrid/constants.ts +97 -0
  194. package/src/app/modules/angular-slickgrid/extensions/index.ts +1 -0
  195. package/src/app/modules/angular-slickgrid/extensions/slickRowDetailView.ts +375 -0
  196. package/src/app/modules/angular-slickgrid/global-grid-options.ts +245 -0
  197. package/src/app/modules/angular-slickgrid/index.ts +11 -0
  198. package/src/app/modules/angular-slickgrid/models/angularComponentOutput.interface.ts +6 -0
  199. package/src/app/modules/angular-slickgrid/models/angularGridInstance.interface.ts +68 -0
  200. package/src/app/modules/angular-slickgrid/models/externalTestingDependencies.interface.ts +37 -0
  201. package/src/app/modules/angular-slickgrid/models/gridOption.interface.ts +12 -0
  202. package/src/app/modules/angular-slickgrid/models/index.ts +6 -0
  203. package/src/app/modules/angular-slickgrid/models/rowDetailView.interface.ts +33 -0
  204. package/src/app/modules/angular-slickgrid/models/slickGrid.interface.ts +7 -0
  205. package/src/app/modules/angular-slickgrid/modules/angular-slickgrid.module.ts +37 -0
  206. package/src/app/modules/angular-slickgrid/services/angularUtil.service.ts +48 -0
  207. package/src/app/modules/angular-slickgrid/services/bsDropdown.service.ts +142 -0
  208. package/src/app/modules/angular-slickgrid/services/container.service.ts +24 -0
  209. package/src/app/modules/angular-slickgrid/services/index.ts +5 -0
  210. package/src/app/modules/angular-slickgrid/services/translater.service.ts +38 -0
  211. package/src/app/modules/angular-slickgrid/services/utilities.ts +19 -0
  212. package/src/app/modules/angular-slickgrid/slickgrid-config.ts +10 -0
  213. package/src/app/slickgrid-custom-variables.scss +10 -0
  214. package/src/assets/.gitkeep +0 -0
  215. package/src/assets/data/collection_100_numbers.json +12 -0
  216. package/src/assets/data/collection_500_numbers.json +52 -0
  217. package/src/assets/data/countries.json +245 -0
  218. package/src/assets/data/country_names.json +245 -0
  219. package/src/assets/data/customers_100.json +102 -0
  220. package/src/assets/i18n/en.json +90 -0
  221. package/src/assets/i18n/fr.json +91 -0
  222. package/src/environments/environment.prod.ts +3 -0
  223. package/src/environments/environment.ts +8 -0
  224. package/src/favicon.ico +0 -0
  225. package/src/index.html +18 -0
  226. package/src/main.ts +13 -0
  227. package/src/polyfills.ts +52 -0
  228. package/src/public_api.ts +1 -0
  229. package/src/styles.scss +66 -0
  230. package/src/typings.d.ts +10 -0
  231. package/tsconfig.app.json +25 -0
  232. package/tsconfig.json +40 -0
  233. package/tsconfig.spec.json +23 -0
  234. package/docs/assets/lib/multiple-select/README.md +0 -17
  235. package/esm2020/app/modules/angular-slickgrid/components/angular-slickgrid.component.mjs +0 -1168
  236. package/esm2020/app/modules/angular-slickgrid/models/angularGridInstance.interface.mjs +0 -2
  237. package/esm2020/app/modules/angular-slickgrid/models/externalTestingDependencies.interface.mjs +0 -2
  238. package/esm2020/app/modules/angular-slickgrid/models/gridOption.interface.mjs +0 -2
  239. package/esm2020/app/modules/angular-slickgrid/models/rowDetailView.interface.mjs +0 -2
  240. package/esm2020/app/modules/angular-slickgrid/models/slickGrid.interface.mjs +0 -2
  241. package/fesm2015/angular-slickgrid.mjs.map +0 -1
  242. package/fesm2020/angular-slickgrid.mjs.map +0 -1
@@ -0,0 +1,229 @@
1
+ import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';
2
+ import { AngularGridInstance, Column, ExtensionName, FieldType, Filters, Formatters, GridOption, unsubscribeAllObservables } from './../modules/angular-slickgrid';
3
+ import { TranslateService } from '@ngx-translate/core';
4
+ import { Subscription } from 'rxjs';
5
+
6
+ @Component({
7
+ templateUrl: './grid-menu.component.html',
8
+ styleUrls: ['./grid-menu.component.scss'],
9
+ encapsulation: ViewEncapsulation.None,
10
+ })
11
+ export class GridMenuComponent implements OnInit, OnDestroy {
12
+ title = 'Example 9: Grid Menu Control';
13
+ subTitle = `
14
+ This example demonstrates using the <b>Slick.Controls.GridMenu</b> plugin to easily add a Grid Menu (aka hamburger menu) on the top right corner of the grid.
15
+ (<a href="https://github.com/ghiscoding/Angular-Slickgrid/wiki/Grid-Menu" target="_blank">Wiki docs</a>)
16
+ <br/>
17
+ <ul>
18
+ <li>You can change the Grid Menu icon, for example "fa-ellipsis-v"&nbsp;&nbsp;<span class="fa fa-ellipsis-v"></span>&nbsp;&nbsp;(which is shown in this example)</li>
19
+ <li>By default the Grid Menu shows all columns which you can show/hide them</li>
20
+ <li>You can configure multiple custom "commands" to show up in the Grid Menu and use the "onGridMenuCommand()" callback</li>
21
+ <li>Doing a "right + click" over any column header will also provide a way to show/hide a column (via the Column Picker Plugin)</li>
22
+ <li>You can change the icons of both picker via SASS variables as shown in this demo (check all SASS variables)</li>
23
+ <li><i class="fa fa-arrow-down"></i> You can also show the Grid Menu anywhere on your page</li>
24
+ </ul>
25
+ `;
26
+
27
+ private subscriptions: Subscription[] = [];
28
+ angularGrid!: AngularGridInstance;
29
+ columnDefinitions!: Column[];
30
+ gridOptions!: GridOption;
31
+ dataset!: any[];
32
+ selectedLanguage: string;
33
+
34
+ constructor(private translate: TranslateService) {
35
+ // always start with English for Cypress E2E tests to be consistent
36
+ const defaultLang = 'en';
37
+ this.translate.use(defaultLang);
38
+ this.selectedLanguage = defaultLang;
39
+ }
40
+
41
+ ngOnDestroy() {
42
+ // also unsubscribe all Angular Subscriptions
43
+ this.subscriptions = unsubscribeAllObservables(this.subscriptions);
44
+ }
45
+
46
+ ngOnInit(): void {
47
+ this.columnDefinitions = [
48
+ { id: 'title', name: 'Title', field: 'title', nameKey: 'TITLE', filterable: true, type: FieldType.string },
49
+ { id: 'duration', name: 'Duration', field: 'duration', nameKey: 'DURATION', sortable: true, filterable: true, type: FieldType.string },
50
+ {
51
+ id: 'percentComplete', name: '% Complete', field: 'percentComplete', nameKey: 'PERCENT_COMPLETE', sortable: true, filterable: true,
52
+ type: FieldType.number,
53
+ formatter: Formatters.percentCompleteBar,
54
+ filter: { model: Filters.compoundSlider, params: { hideSliderNumber: false } }
55
+ },
56
+ { id: 'start', name: 'Start', field: 'start', nameKey: 'START', filterable: true, type: FieldType.string },
57
+ { id: 'finish', name: 'Finish', field: 'finish', nameKey: 'FINISH', filterable: true, type: FieldType.string },
58
+ {
59
+ id: 'effort-driven', name: 'Completed', field: 'effortDriven', nameKey: 'COMPLETED', maxWidth: 80, formatter: Formatters.checkmark,
60
+ type: FieldType.boolean,
61
+ minWidth: 100,
62
+ sortable: true,
63
+ filterable: true,
64
+ filter: {
65
+ collection: [{ value: '', label: '' }, { value: true, label: 'true' }, { value: false, label: 'false' }],
66
+ model: Filters.singleSelect
67
+ }
68
+ }
69
+ ];
70
+
71
+ this.gridOptions = {
72
+ columnPicker: {
73
+ hideForceFitButton: true,
74
+ hideSyncResizeButton: true,
75
+ onColumnsChanged: (e, args) => {
76
+ console.log('Column selection changed from Column Picker, visible columns: ', args.visibleColumns);
77
+ }
78
+ },
79
+ enableAutoResize: true,
80
+ enableGridMenu: true,
81
+ autoResize: {
82
+ container: '#demo-container',
83
+ rightPadding: 10
84
+ },
85
+ enableFiltering: true,
86
+ enableCellNavigation: true,
87
+ gridMenu: {
88
+ // we could disable the menu entirely by returning false depending on some code logic
89
+ menuUsabilityOverride: (args) => true,
90
+
91
+ // all titles optionally support translation keys, if you wish to use that feature then use the title properties with the 'Key' suffix (e.g: titleKey)
92
+ // example "commandTitle" for a plain string OR "commandTitleKey" to use a translation key
93
+ commandTitleKey: 'CUSTOM_COMMANDS',
94
+ iconCssClass: 'fa fa-ellipsis-v', // defaults to "fa-bars"
95
+ hideForceFitButton: true,
96
+ hideSyncResizeButton: true,
97
+ hideToggleFilterCommand: false, // show/hide internal custom commands
98
+ menuWidth: 17,
99
+ resizeOnShowHeaderRow: true,
100
+ commandItems: [
101
+ // add Custom Items Commands which will be appended to the existing internal custom items
102
+ // you cannot override an internal items but you can hide them and create your own
103
+ // also note that the internal custom commands are in the positionOrder range of 50-60,
104
+ // if you want yours at the bottom then start with 61, below 50 will make your command(s) show on top
105
+ {
106
+ iconCssClass: 'fa fa-question-circle',
107
+ titleKey: 'HELP',
108
+ disabled: false,
109
+ command: 'help',
110
+ positionOrder: 90,
111
+ cssClass: 'bold', // container css class
112
+ textCssClass: 'blue' // just the text css class
113
+ },
114
+ // you can pass divider as a string or an object with a boolean (if sorting by position, then use the object)
115
+ // note you should use the "divider" string only when items array is already sorted and positionOrder are not specified
116
+ { divider: true, command: '', positionOrder: 89 },
117
+ // 'divider',
118
+ {
119
+ title: 'Command 1',
120
+ command: 'command1',
121
+ positionOrder: 91,
122
+ cssClass: 'orange',
123
+ iconCssClass: 'fa fa-warning',
124
+ // you can use the "action" callback and/or use "onCallback" callback from the grid options, they both have the same arguments
125
+ action: (e, args) => alert(args.command),
126
+ itemUsabilityOverride: (args) => {
127
+ // for example disable the command if there's any hidden column(s)
128
+ if (args && Array.isArray(args.columns)) {
129
+ return args.columns.length === args.visibleColumns.length;
130
+ }
131
+ return true;
132
+ },
133
+ },
134
+ {
135
+ title: 'Command 2',
136
+ command: 'command2',
137
+ positionOrder: 92,
138
+ cssClass: 'red', // container css class
139
+ textCssClass: 'italic', // just the text css class
140
+ action: (e, args) => alert(args.command),
141
+ itemVisibilityOverride: (args) => {
142
+ // for example hide this command from the menu if there's any filter entered
143
+ if (this.angularGrid) {
144
+ return this.isObjectEmpty(this.angularGrid.filterService.getColumnFilters());
145
+ }
146
+ return true;
147
+ },
148
+ },
149
+ {
150
+ title: 'Disabled command',
151
+ disabled: true,
152
+ command: 'disabled-command',
153
+ positionOrder: 98
154
+ }
155
+ ],
156
+ // you can use the "action" callback and/or use "onCallback" callback from the grid options, they both have the same arguments
157
+ onCommand: (e, args) => {
158
+ if (args.command === 'help') {
159
+ alert('Please help!!!');
160
+ }
161
+ },
162
+ onColumnsChanged: (e, args) => {
163
+ console.log('Column selection changed from Grid Menu, visible columns: ', args.visibleColumns);
164
+ }
165
+ },
166
+ enableTranslate: true,
167
+ i18n: this.translate
168
+ };
169
+
170
+ this.getData();
171
+ }
172
+
173
+ angularGridReady(angularGrid: AngularGridInstance) {
174
+ this.angularGrid = angularGrid;
175
+ }
176
+
177
+ getData() {
178
+ // Set up some test columns.
179
+ const mockDataset = [];
180
+ for (let i = 0; i < 500; i++) {
181
+ mockDataset[i] = {
182
+ id: i,
183
+ title: 'Task ' + i,
184
+ phone: this.generatePhoneNumber(),
185
+ duration: Math.round(Math.random() * 25) + ' days',
186
+ percentComplete: Math.round(Math.random() * 100),
187
+ start: '01/01/2009',
188
+ finish: '01/05/2009',
189
+ effortDriven: (i % 5 === 0)
190
+ };
191
+ }
192
+ this.dataset = mockDataset;
193
+ }
194
+
195
+ generatePhoneNumber() {
196
+ let phone = '';
197
+ for (let i = 0; i < 10; i++) {
198
+ phone += Math.round(Math.random() * 9) + '';
199
+ }
200
+ return phone;
201
+ }
202
+
203
+ switchLanguage() {
204
+ const nextLanguage = (this.selectedLanguage === 'en') ? 'fr' : 'en';
205
+ this.subscriptions.push(
206
+ this.translate.use(nextLanguage).subscribe(() => {
207
+ this.selectedLanguage = nextLanguage;
208
+ })
209
+ );
210
+ }
211
+
212
+ toggleGridMenu(e: MouseEvent) {
213
+ if (this.angularGrid && this.angularGrid.extensionService) {
214
+ const gridMenuInstance = this.angularGrid.extensionService.getExtensionInstanceByName(ExtensionName.gridMenu);
215
+ // open the external button Grid Menu, you can also optionally pass Grid Menu options as 2nd argument
216
+ // for example we want to align our external button on the right without affecting the menu within the grid which will stay aligned on the left
217
+ gridMenuInstance.showGridMenu(e, { dropSide: 'right' });
218
+ }
219
+ }
220
+
221
+ private isObjectEmpty(obj: any) {
222
+ for (const key in obj) {
223
+ if (obj.hasOwnProperty(key) && obj[key] !== '') {
224
+ return false;
225
+ }
226
+ }
227
+ return true;
228
+ }
229
+ }
@@ -0,0 +1,116 @@
1
+ <div id="demo-container" class="container-fluid">
2
+ <h2>
3
+ {{title}}
4
+ <span class="float-end">
5
+ <a style="font-size: 18px"
6
+ target="_blank"
7
+ href="https://github.com/ghiscoding/Angular-Slickgrid/blob/master/src/app/examples/grid-odata.component.ts">
8
+ <span class="fa fa-link"></span> code
9
+ </a>
10
+ </span>
11
+ </h2>
12
+ <div class="row">
13
+ <div class="col-sm-9">
14
+ <div class="subtitle" [innerHTML]="subTitle"></div>
15
+ </div>
16
+ <div class="col-sm-3">
17
+ <div class="alert alert-danger" *ngIf="errorStatus" data-test="error-status">
18
+ <em><strong>Backend Error:</strong> <span [innerHTML]="errorStatus"></span></em>
19
+ </div>
20
+ </div>
21
+ </div>
22
+
23
+ <div class="row">
24
+ <div class="col-sm-2">
25
+ <div [class]="status.class" role="alert" data-test="status">
26
+ <strong>Status: </strong> {{status.text}}
27
+ <span [hidden]="!processing">
28
+ <i class="fa fa-refresh fa-spin fa-lg fa-fw"></i>
29
+ </span>
30
+ </div>
31
+ </div>
32
+ <div class="col-sm-10">
33
+ <div class="alert alert-info" data-test="alert-odata-query">
34
+ <strong>OData Query:</strong> <span data-test="odata-query-result">{{odataQuery}}</span>
35
+ </div>
36
+ </div>
37
+ </div>
38
+
39
+ <div class="row">
40
+ <div class="col-sm-4">
41
+ <button class="btn btn-outline-secondary btn-sm" data-test="set-dynamic-filter"
42
+ (click)="setFiltersDynamically()">
43
+ Set Filters Dynamically
44
+ </button>
45
+ <button class="btn btn-outline-secondary btn-sm" data-test="set-dynamic-sorting"
46
+ (click)="setSortingDynamically()">
47
+ Set Sorting Dynamically
48
+ </button>
49
+ <br>
50
+ <span *ngIf="metrics">
51
+ <b>Metrics:</b> {{metrics.endTime | date: 'yyyy-MM-dd hh:mm aaaaa\'m\''}} | {{metrics.executionTime}}ms
52
+ | {{metrics.totalItemCount}} items
53
+ </span>
54
+ </div>
55
+
56
+ <div class="col-sm-8">
57
+ <label>OData Version: </label>
58
+ <span data-test="radioVersion">
59
+ <label class="radio-inline control-label" for="radio2">
60
+ <input type="radio" name="inlineRadioOptions" data-test="version2" id="radio2" checked [value]="2"
61
+ (change)="setOdataVersion(2)"> 2
62
+ </label>
63
+ <label class="radio-inline control-label" for="radio4">
64
+ <input type="radio" name="inlineRadioOptions" data-test="version4" id="radio4" [value]="4"
65
+ (change)="setOdataVersion(4)"> 4
66
+ </label>
67
+ </span>
68
+ <label class="checkbox-inline control-label" for="enableCount" style="margin-left: 20px">
69
+ <input type="checkbox" id="enableCount" data-test="enable-count" [checked]="isCountEnabled"
70
+ (click)="changeCountEnableFlag()">
71
+ <span style="font-weight: bold">Enable Count</span> (add to OData query)
72
+ </label>
73
+ <label class="checkbox-inline control-label" for="enableSelect" style="margin-left: 20px">
74
+ <input type="checkbox" id="enableSelect" data-test="enable-select" [checked]="isSelectEnabled"
75
+ (click)="changeEnableSelectFlag()">
76
+ <span style="font-weight: bold">Enable Select</span> (add to OData query)
77
+ </label>
78
+ <label class="checkbox-inline control-label" for="enableExpand" style="margin-left: 20px">
79
+ <input type="checkbox" id="enableExpand" data-test="enable-expand" [checked]="isExpandEnabled"
80
+ (click)="changeEnableExpandFlag()">
81
+ <span style="font-weight: bold">Enable Expand</span> (add to OData query)
82
+ </label>
83
+ </div>
84
+ </div>
85
+ <div class="row mt-2 mb-1">
86
+ <div class="col-md-12">
87
+ <button class="btn btn-outline-danger btn-sm" data-test="throw-page-error-btn"
88
+ (click)="throwPageChangeError()">
89
+ <span>Throw Error Going to Last Page... </span>
90
+ <i class="mdi mdi-page-last"></i>
91
+ </button>
92
+
93
+ <span class="ms-2">
94
+ <label>Programmatically go to first/last page:</label>
95
+ <button class="btn btn-outline-secondary btn-xs" data-test="goto-first-page" (click)="goToFirstPage()">
96
+ <i class="fa fa-caret-left fa-lg"></i>
97
+ </button>
98
+ <button class="btn btn-outline-secondary btn-xs" data-test="goto-last-page" (click)="goToLastPage()">
99
+ <i class="fa fa-caret-right fa-lg"></i>
100
+ </button>
101
+ </span>
102
+ </div>
103
+ </div>
104
+
105
+ <angular-slickgrid gridId="grid5"
106
+ [columnDefinitions]="columnDefinitions"
107
+ [gridOptions]="gridOptions"
108
+ [paginationOptions]="paginationOptions"
109
+ [dataset]="dataset"
110
+ (onAngularGridCreated)="angularGridReady($event.detail)"
111
+ (onGridStateChanged)="gridStateChanged($event.detail)"
112
+ (onBeforeSort)="handleOnBeforeSort($event)"
113
+ (onBeforeSearchChange)="handleOnBeforeSearchChange($event)"
114
+ (onBeforePaginationChange)="handleOnBeforePaginationChange($event)">
115
+ </angular-slickgrid>
116
+ </div>