angular-slickgrid 4.2.0 → 4.2.1

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 (232) hide show
  1. package/{dist/angular-slickgrid.d.ts → angular-slickgrid.d.ts} +0 -0
  2. package/{dist/app → app}/modules/angular-slickgrid/components/angular-slickgrid.component.d.ts +0 -0
  3. package/{dist/app → app}/modules/angular-slickgrid/constants.d.ts +0 -0
  4. package/{dist/app → app}/modules/angular-slickgrid/extensions/index.d.ts +0 -0
  5. package/{dist/app → app}/modules/angular-slickgrid/extensions/slickRowDetailView.d.ts +0 -0
  6. package/{dist/app → app}/modules/angular-slickgrid/global-grid-options.d.ts +0 -0
  7. package/{dist/app → app}/modules/angular-slickgrid/index.d.ts +0 -0
  8. package/{dist/app → app}/modules/angular-slickgrid/models/angularComponentOutput.interface.d.ts +0 -0
  9. package/{dist/app → app}/modules/angular-slickgrid/models/angularGridInstance.interface.d.ts +0 -0
  10. package/{dist/app → app}/modules/angular-slickgrid/models/externalTestingDependencies.interface.d.ts +0 -0
  11. package/{dist/app → app}/modules/angular-slickgrid/models/gridOption.interface.d.ts +0 -0
  12. package/{dist/app → app}/modules/angular-slickgrid/models/index.d.ts +0 -0
  13. package/{dist/app → app}/modules/angular-slickgrid/models/rowDetailView.interface.d.ts +0 -0
  14. package/{dist/app → app}/modules/angular-slickgrid/models/slickGrid.interface.d.ts +0 -0
  15. package/{dist/app → app}/modules/angular-slickgrid/modules/angular-slickgrid.module.d.ts +0 -0
  16. package/{dist/app → app}/modules/angular-slickgrid/services/angularUtil.service.d.ts +0 -0
  17. package/{dist/app → app}/modules/angular-slickgrid/services/bsDropdown.service.d.ts +0 -0
  18. package/{dist/app → app}/modules/angular-slickgrid/services/container.service.d.ts +0 -0
  19. package/{dist/app → app}/modules/angular-slickgrid/services/index.d.ts +0 -0
  20. package/{dist/app → app}/modules/angular-slickgrid/services/translater.service.d.ts +0 -0
  21. package/{dist/app → app}/modules/angular-slickgrid/services/utilities.d.ts +0 -0
  22. package/{dist/app → app}/modules/angular-slickgrid/slickgrid-config.d.ts +0 -0
  23. package/docs/assets/lib/multiple-select/README.md +17 -0
  24. package/{dist/esm2020 → esm2020}/angular-slickgrid.mjs +0 -0
  25. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/components/angular-slickgrid.component.mjs +0 -0
  26. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/constants.mjs +0 -0
  27. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/extensions/index.mjs +0 -0
  28. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/extensions/slickRowDetailView.mjs +0 -0
  29. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/global-grid-options.mjs +0 -0
  30. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/index.mjs +0 -0
  31. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/models/angularComponentOutput.interface.mjs +0 -0
  32. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/models/angularGridInstance.interface.mjs +0 -0
  33. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/models/externalTestingDependencies.interface.mjs +0 -0
  34. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/models/gridOption.interface.mjs +0 -0
  35. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/models/index.mjs +0 -0
  36. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/models/rowDetailView.interface.mjs +0 -0
  37. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/models/slickGrid.interface.mjs +0 -0
  38. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/modules/angular-slickgrid.module.mjs +0 -0
  39. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/services/angularUtil.service.mjs +0 -0
  40. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/services/bsDropdown.service.mjs +0 -0
  41. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/services/container.service.mjs +0 -0
  42. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/services/index.mjs +0 -0
  43. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/services/translater.service.mjs +0 -0
  44. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/services/utilities.mjs +0 -0
  45. package/{dist/esm2020 → esm2020}/app/modules/angular-slickgrid/slickgrid-config.mjs +0 -0
  46. package/{dist/esm2020 → esm2020}/public_api.mjs +0 -0
  47. package/{dist/fesm2015 → fesm2015}/angular-slickgrid.mjs +0 -0
  48. package/{dist/fesm2015 → fesm2015}/angular-slickgrid.mjs.map +0 -0
  49. package/{dist/fesm2020 → fesm2020}/angular-slickgrid.mjs +0 -0
  50. package/{dist/fesm2020 → fesm2020}/angular-slickgrid.mjs.map +0 -0
  51. package/{dist/i18n → i18n}/en.json +0 -0
  52. package/{dist/i18n → i18n}/fr.json +0 -0
  53. package/package.json +25 -110
  54. package/{dist/public_api.d.ts → public_api.d.ts} +0 -0
  55. package/.browserslistrc +0 -12
  56. package/.codecov.yml +0 -17
  57. package/.editorconfig +0 -18
  58. package/.eslintrc.json +0 -50
  59. package/.github/CODE_OF_CONDUCT.md +0 -76
  60. package/.github/FUNDING.yml +0 -8
  61. package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -54
  62. package/.github/ISSUE_TEMPLATE/config.yml +0 -5
  63. package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -44
  64. package/.github/renovate.json5 +0 -26
  65. package/.github/stale.yml +0 -7
  66. package/.github/workflows/main.yml +0 -83
  67. package/.vscode/extensions.json +0 -9
  68. package/.vscode/launch.json +0 -72
  69. package/.vscode/settings.json +0 -7
  70. package/.vscode/tasks.json +0 -77
  71. package/CHANGELOG.md +0 -1172
  72. package/angular.json +0 -148
  73. package/dist/LICENSE +0 -20
  74. package/dist/README.md +0 -182
  75. package/dist/package.json +0 -79
  76. package/global.d.ts +0 -1
  77. package/ngcc.config.js +0 -13
  78. package/screenshots/column-picker.png +0 -0
  79. package/screenshots/composite-editor.png +0 -0
  80. package/screenshots/draggable-grouping.png +0 -0
  81. package/screenshots/editors.png +0 -0
  82. package/screenshots/export-to-file.png +0 -0
  83. package/screenshots/filter_and_sort.png +0 -0
  84. package/screenshots/formatters.png +0 -0
  85. package/screenshots/frozen.png +0 -0
  86. package/screenshots/multipleSelectFilter.png +0 -0
  87. package/screenshots/pagination.png +0 -0
  88. package/screenshots/selectFilter.png +0 -0
  89. package/screenshots/singleFilter.png +0 -0
  90. package/src/app/app-routing.module.ts +0 -83
  91. package/src/app/app.component.html +0 -160
  92. package/src/app/app.component.scss +0 -65
  93. package/src/app/app.component.ts +0 -10
  94. package/src/app/app.module.ts +0 -175
  95. package/src/app/examples/custom-angularComponentEditor.ts +0 -184
  96. package/src/app/examples/custom-angularComponentFilter.ts +0 -126
  97. package/src/app/examples/custom-inputEditor.ts +0 -124
  98. package/src/app/examples/custom-inputFilter.ts +0 -142
  99. package/src/app/examples/custom-titleFormatter.component.ts +0 -8
  100. package/src/app/examples/editor-ng-select.component.ts +0 -37
  101. package/src/app/examples/filter-ng-select.component.ts +0 -32
  102. package/src/app/examples/grid-additem.component.html +0 -48
  103. package/src/app/examples/grid-additem.component.ts +0 -272
  104. package/src/app/examples/grid-angular.component.html +0 -79
  105. package/src/app/examples/grid-angular.component.scss +0 -28
  106. package/src/app/examples/grid-angular.component.ts +0 -370
  107. package/src/app/examples/grid-autoheight.component.html +0 -52
  108. package/src/app/examples/grid-autoheight.component.ts +0 -147
  109. package/src/app/examples/grid-basic.component.html +0 -29
  110. package/src/app/examples/grid-basic.component.ts +0 -82
  111. package/src/app/examples/grid-clientside.component.html +0 -51
  112. package/src/app/examples/grid-clientside.component.ts +0 -293
  113. package/src/app/examples/grid-colspan.component.html +0 -39
  114. package/src/app/examples/grid-colspan.component.scss +0 -11
  115. package/src/app/examples/grid-colspan.component.ts +0 -155
  116. package/src/app/examples/grid-composite-editor.component.html +0 -79
  117. package/src/app/examples/grid-composite-editor.component.scss +0 -19
  118. package/src/app/examples/grid-composite-editor.component.ts +0 -948
  119. package/src/app/examples/grid-contextmenu.component.html +0 -62
  120. package/src/app/examples/grid-contextmenu.component.scss +0 -44
  121. package/src/app/examples/grid-contextmenu.component.ts +0 -473
  122. package/src/app/examples/grid-custom-tooltip.component.html +0 -25
  123. package/src/app/examples/grid-custom-tooltip.component.scss +0 -77
  124. package/src/app/examples/grid-custom-tooltip.component.ts +0 -483
  125. package/src/app/examples/grid-draggrouping.component.html +0 -93
  126. package/src/app/examples/grid-draggrouping.component.ts +0 -397
  127. package/src/app/examples/grid-editor.component.html +0 -88
  128. package/src/app/examples/grid-editor.component.ts +0 -699
  129. package/src/app/examples/grid-formatter.component.html +0 -26
  130. package/src/app/examples/grid-formatter.component.ts +0 -162
  131. package/src/app/examples/grid-frozen.component.html +0 -65
  132. package/src/app/examples/grid-frozen.component.scss +0 -11
  133. package/src/app/examples/grid-frozen.component.ts +0 -303
  134. package/src/app/examples/grid-graphql-nopage.component.html +0 -33
  135. package/src/app/examples/grid-graphql-nopage.component.scss +0 -9
  136. package/src/app/examples/grid-graphql-nopage.component.ts +0 -242
  137. package/src/app/examples/grid-graphql.component.html +0 -87
  138. package/src/app/examples/grid-graphql.component.ts +0 -304
  139. package/src/app/examples/grid-grouping.component.html +0 -80
  140. package/src/app/examples/grid-grouping.component.ts +0 -313
  141. package/src/app/examples/grid-headerbutton.component.html +0 -31
  142. package/src/app/examples/grid-headerbutton.component.scss +0 -10
  143. package/src/app/examples/grid-headerbutton.component.ts +0 -233
  144. package/src/app/examples/grid-headermenu.component.html +0 -31
  145. package/src/app/examples/grid-headermenu.component.scss +0 -25
  146. package/src/app/examples/grid-headermenu.component.ts +0 -159
  147. package/src/app/examples/grid-localization.component.html +0 -54
  148. package/src/app/examples/grid-localization.component.ts +0 -293
  149. package/src/app/examples/grid-menu.component.html +0 -37
  150. package/src/app/examples/grid-menu.component.scss +0 -28
  151. package/src/app/examples/grid-menu.component.ts +0 -229
  152. package/src/app/examples/grid-odata.component.html +0 -116
  153. package/src/app/examples/grid-odata.component.ts +0 -441
  154. package/src/app/examples/grid-range.component.html +0 -74
  155. package/src/app/examples/grid-range.component.ts +0 -291
  156. package/src/app/examples/grid-remote.component.html +0 -37
  157. package/src/app/examples/grid-remote.component.ts +0 -153
  158. package/src/app/examples/grid-resize-by-content.component.html +0 -62
  159. package/src/app/examples/grid-resize-by-content.component.scss +0 -19
  160. package/src/app/examples/grid-resize-by-content.component.ts +0 -780
  161. package/src/app/examples/grid-rowdetail.component.html +0 -35
  162. package/src/app/examples/grid-rowdetail.component.ts +0 -205
  163. package/src/app/examples/grid-rowmove.component.html +0 -49
  164. package/src/app/examples/grid-rowmove.component.ts +0 -234
  165. package/src/app/examples/grid-rowselection.component.html +0 -76
  166. package/src/app/examples/grid-rowselection.component.ts +0 -267
  167. package/src/app/examples/grid-state.component.html +0 -36
  168. package/src/app/examples/grid-state.component.ts +0 -259
  169. package/src/app/examples/grid-tabs.component.html +0 -35
  170. package/src/app/examples/grid-tabs.component.ts +0 -115
  171. package/src/app/examples/grid-trading.component.html +0 -58
  172. package/src/app/examples/grid-trading.component.scss +0 -49
  173. package/src/app/examples/grid-trading.component.ts +0 -319
  174. package/src/app/examples/grid-tree-data-hierarchical.component.html +0 -79
  175. package/src/app/examples/grid-tree-data-hierarchical.component.scss +0 -47
  176. package/src/app/examples/grid-tree-data-hierarchical.component.ts +0 -311
  177. package/src/app/examples/grid-tree-data-parent-child.component.html +0 -108
  178. package/src/app/examples/grid-tree-data-parent-child.component.scss +0 -10
  179. package/src/app/examples/grid-tree-data-parent-child.component.ts +0 -351
  180. package/src/app/examples/home.component.html +0 -41
  181. package/src/app/examples/home.component.ts +0 -9
  182. package/src/app/examples/rowdetail-preload.component.ts +0 -10
  183. package/src/app/examples/rowdetail-view.component.html +0 -36
  184. package/src/app/examples/rowdetail-view.component.ts +0 -54
  185. package/src/app/examples/swt-common-grid-pagination.component.ts +0 -156
  186. package/src/app/examples/swt-common-grid-test.component.html +0 -30
  187. package/src/app/examples/swt-common-grid-test.component.ts +0 -219
  188. package/src/app/examples/swt-common-grid.component.ts +0 -436
  189. package/src/app/examples/swt-logger.service.ts +0 -165
  190. package/src/app/modules/angular-slickgrid/components/angular-slickgrid.component.html +0 -4
  191. package/src/app/modules/angular-slickgrid/components/angular-slickgrid.component.ts +0 -1395
  192. package/src/app/modules/angular-slickgrid/constants.ts +0 -97
  193. package/src/app/modules/angular-slickgrid/extensions/index.ts +0 -1
  194. package/src/app/modules/angular-slickgrid/extensions/slickRowDetailView.ts +0 -375
  195. package/src/app/modules/angular-slickgrid/global-grid-options.ts +0 -245
  196. package/src/app/modules/angular-slickgrid/index.ts +0 -11
  197. package/src/app/modules/angular-slickgrid/models/angularComponentOutput.interface.ts +0 -6
  198. package/src/app/modules/angular-slickgrid/models/angularGridInstance.interface.ts +0 -68
  199. package/src/app/modules/angular-slickgrid/models/externalTestingDependencies.interface.ts +0 -37
  200. package/src/app/modules/angular-slickgrid/models/gridOption.interface.ts +0 -12
  201. package/src/app/modules/angular-slickgrid/models/index.ts +0 -6
  202. package/src/app/modules/angular-slickgrid/models/rowDetailView.interface.ts +0 -33
  203. package/src/app/modules/angular-slickgrid/models/slickGrid.interface.ts +0 -7
  204. package/src/app/modules/angular-slickgrid/modules/angular-slickgrid.module.ts +0 -37
  205. package/src/app/modules/angular-slickgrid/services/angularUtil.service.ts +0 -48
  206. package/src/app/modules/angular-slickgrid/services/bsDropdown.service.ts +0 -142
  207. package/src/app/modules/angular-slickgrid/services/container.service.ts +0 -24
  208. package/src/app/modules/angular-slickgrid/services/index.ts +0 -5
  209. package/src/app/modules/angular-slickgrid/services/translater.service.ts +0 -38
  210. package/src/app/modules/angular-slickgrid/services/utilities.ts +0 -19
  211. package/src/app/modules/angular-slickgrid/slickgrid-config.ts +0 -10
  212. package/src/app/slickgrid-custom-variables.scss +0 -10
  213. package/src/assets/.gitkeep +0 -0
  214. package/src/assets/data/collection_100_numbers.json +0 -12
  215. package/src/assets/data/collection_500_numbers.json +0 -52
  216. package/src/assets/data/countries.json +0 -245
  217. package/src/assets/data/country_names.json +0 -245
  218. package/src/assets/data/customers_100.json +0 -102
  219. package/src/assets/i18n/en.json +0 -90
  220. package/src/assets/i18n/fr.json +0 -91
  221. package/src/environments/environment.prod.ts +0 -3
  222. package/src/environments/environment.ts +0 -8
  223. package/src/favicon.ico +0 -0
  224. package/src/index.html +0 -18
  225. package/src/main.ts +0 -13
  226. package/src/polyfills.ts +0 -52
  227. package/src/public_api.ts +0 -1
  228. package/src/styles.scss +0 -66
  229. package/src/typings.d.ts +0 -10
  230. package/tsconfig.app.json +0 -25
  231. package/tsconfig.json +0 -40
  232. package/tsconfig.spec.json +0 -23
@@ -1,242 +0,0 @@
1
- import { Component, OnInit, ViewEncapsulation } from '@angular/core';
2
- import { HttpClient } from '@angular/common/http';
3
- import { GraphqlService, GraphqlResult, GraphqlServiceApi, } from '@slickgrid-universal/graphql';
4
-
5
- import {
6
- AngularGridInstance,
7
- Column,
8
- Filters,
9
- Formatters,
10
- GridOption,
11
- Metrics,
12
- MultipleSelectOption,
13
- OperatorType,
14
- } from './../modules/angular-slickgrid';
15
- import { Observable } from 'rxjs';
16
-
17
- const COUNTRIES_API = 'https://countries.trevorblades.com/';
18
-
19
- export interface Country {
20
- countryCode: string;
21
- countryName: string;
22
- countryNative: string;
23
- countryPhone: number;
24
- countryCurrency: string;
25
- countryEmoji: string;
26
- continentCode: string;
27
- continentName: string;
28
- languageCode: string;
29
- languageName: string;
30
- languageNative: string;
31
- };
32
-
33
- @Component({
34
- templateUrl: './grid-graphql-nopage.component.html',
35
- styleUrls: ['./grid-graphql-nopage.component.scss'],
36
- encapsulation: ViewEncapsulation.None,
37
- })
38
- export class GridGraphqlWithoutPaginationComponent implements OnInit {
39
- title = 'Example 27: GraphQL Basic API without Pagination';
40
- subTitle = `
41
- Use basic GraphQL query with any external public APIs (<a href="https://github.com/ghiscoding/Angular-Slickgrid/wiki/GraphQL" target="_blank">Wiki docs</a>).
42
- <ul>
43
- <li>This Examples uses a Public GraphQL API that you can find at this link <a href="https://countries.trevorblades.com/" target="_blank">https://countries.trevorblades.com/</a></li>
44
- <li>Compare to the regular and default GraphQL implementation, you will find the following differences</li>
45
- <ul>
46
- <li>There are no Pagination and we only use GraphQL <b>once</b> to load the data, then we use the grid as a regular local in-memory grid</li>
47
- <li>We enabled the following 2 flags "useLocalFiltering" and "useLocalSorting" to use regular (in memory) DataView filtering/sorting</li>
48
- </ul>
49
- <li>NOTE - This Example calls multiple GraphQL queries, this is <b>ONLY</b> for demo purposes, you would typically only call 1 query (which is what GraphQL is good at)</li>
50
- <li>This example is mainly to demo the use of GraphqlService to build the query and retrieve the data but also to demo how to mix that with local (in-memory) Filtering/Sorting strategies</li>
51
- </ul>
52
- `;
53
- angularGrid!: AngularGridInstance;
54
- columnDefinitions!: Column[];
55
- gridOptions!: GridOption;
56
- dataset = [];
57
- metrics!: Metrics;
58
-
59
- graphqlQuery = '';
60
- processing = true;
61
- status = { text: 'processing...', class: 'alert alert-danger' };
62
- isDataLoaded = false;
63
-
64
- constructor(private http: HttpClient) { }
65
-
66
- ngOnInit(): void {
67
- this.columnDefinitions = [
68
- { id: 'countryCode', field: 'code', name: 'Code', maxWidth: 90, sortable: true, filterable: true, columnGroup: 'Country' },
69
- { id: 'countryName', field: 'name', name: 'Name', width: 60, sortable: true, filterable: true, columnGroup: 'Country' },
70
- { id: 'countryNative', field: 'native', name: 'Native', width: 60, sortable: true, filterable: true, columnGroup: 'Country' },
71
- { id: 'countryPhone', field: 'phone', name: 'Phone Area Code', maxWidth: 110, sortable: true, filterable: true, columnGroup: 'Country' },
72
- { id: 'countryCurrency', field: 'currency', name: 'Currency', maxWidth: 90, sortable: true, filterable: true, columnGroup: 'Country' },
73
- { id: 'countryEmoji', field: 'emoji', name: 'Emoji', maxWidth: 90, sortable: true, columnGroup: 'Country' },
74
- {
75
- id: 'languageName', field: 'languages.name', name: 'Names', width: 60,
76
- formatter: Formatters.arrayObjectToCsv, columnGroup: 'Language',
77
- params: { propertyNames: ['name'], useFormatterOuputToFilter: true },
78
- filterable: true,
79
- // this Filter is a bit more tricky than others since the values are an array of objects
80
- // what we can do is use the Formatter to search from the CSV string coming from the Formatter (with "useFormatterOuputToFilter: true")
81
- // we also need to use the Operator IN_CONTAINS
82
- filter: {
83
- model: Filters.multipleSelect,
84
- collectionAsync: this.getLanguages(),
85
- operator: OperatorType.inContains,
86
- collectionOptions: {
87
- addBlankEntry: true,
88
- // the data is not at the root of the array, so we must tell the Select Filter where to pull the data
89
- collectionInsideObjectProperty: 'data.languages'
90
- },
91
- collectionFilterBy: [
92
- // filter out any empty values
93
- { property: 'name', value: '', operator: 'NE' },
94
- { property: 'name', value: null, operator: 'NE' },
95
- ],
96
- collectionSortBy: {
97
- property: 'name'
98
- },
99
- customStructure: {
100
- value: 'name',
101
- label: 'name',
102
- },
103
- filterOptions: {
104
- filter: true
105
- } as MultipleSelectOption
106
- },
107
- },
108
- {
109
- id: 'languageNative', field: 'languages.native', name: 'Native', width: 60,
110
- formatter: Formatters.arrayObjectToCsv, params: { propertyNames: ['native'], useFormatterOuputToFilter: true }, columnGroup: 'Language',
111
- filterable: true,
112
- filter: {
113
- model: Filters.multipleSelect,
114
- collectionAsync: this.getLanguages(),
115
- operator: OperatorType.inContains,
116
- collectionOptions: {
117
- addBlankEntry: true,
118
- // the data is not at the root of the array, so we must tell the Select Filter where to pull the data
119
- collectionInsideObjectProperty: 'data.languages'
120
- },
121
- collectionFilterBy: [
122
- // filter out any empty values
123
- { property: 'native', value: '', operator: 'NE' },
124
- { property: 'native', value: null, operator: 'NE' },
125
- ],
126
- collectionSortBy: {
127
- property: 'native'
128
- },
129
- customStructure: {
130
- value: 'native',
131
- label: 'native',
132
- },
133
- filterOptions: {
134
- filter: true
135
- } as MultipleSelectOption
136
- },
137
- },
138
- {
139
- id: 'languageCode', field: 'languages.code', name: 'Codes', maxWidth: 100,
140
- formatter: Formatters.arrayObjectToCsv, params: { propertyNames: ['code'], useFormatterOuputToFilter: true }, columnGroup: 'Language',
141
- filterable: true,
142
- },
143
- {
144
- id: 'continentName', field: 'continent.name', name: 'Name', width: 60, sortable: true,
145
- filterable: true, formatter: Formatters.complexObject, columnGroup: 'Continent'
146
- },
147
- {
148
- id: 'continentCode', field: 'continent.code', name: 'Code', maxWidth: 90,
149
- sortable: true,
150
- filterable: true,
151
- filter: {
152
- model: Filters.singleSelect,
153
- collectionAsync: this.getContinents(),
154
- collectionOptions: {
155
- // the data is not at the root of the array, so we must tell the Select Filter where to pull the data
156
- collectionInsideObjectProperty: 'data.continents',
157
- addBlankEntry: true,
158
- separatorBetweenTextLabels: ': ',
159
- },
160
- customStructure: {
161
- value: 'code',
162
- label: 'code',
163
- labelSuffix: 'name',
164
- }
165
- },
166
- formatter: Formatters.complexObject, columnGroup: 'Continent',
167
- },
168
- ];
169
-
170
- this.gridOptions = {
171
- autoResize: {
172
- container: '#demo-container',
173
- rightPadding: 10
174
- },
175
- enableFiltering: true,
176
- enableCellNavigation: true,
177
- enablePagination: false,
178
- createPreHeaderPanel: true,
179
- showPreHeaderPanel: true,
180
- preHeaderPanelHeight: 28,
181
- datasetIdPropertyName: 'code',
182
- showCustomFooter: true, // display some metrics in the bottom custom footer
183
- backendServiceApi: {
184
- // use the GraphQL Service to build the query but use local (in memory) Filtering/Sorting strategies
185
- // the useLocalFiltering/useLocalSorting flags can be enabled independently
186
- service: new GraphqlService(),
187
- useLocalFiltering: true,
188
- useLocalSorting: true,
189
-
190
- options: {
191
- datasetName: 'countries', // the only REQUIRED property
192
- },
193
- // you can define the onInit callback OR enable the "executeProcessCommandOnInit" flag in the service init
194
- preProcess: () => !this.isDataLoaded ? this.displaySpinner(true) : '',
195
- process: (query: string) => this.getCountries(query),
196
- postProcess: (result: GraphqlResult<Country>) => {
197
- this.metrics = result.metrics as Metrics;
198
- this.displaySpinner(false);
199
- this.isDataLoaded = true;
200
- }
201
- } as GraphqlServiceApi
202
- };
203
- }
204
-
205
- displaySpinner(isProcessing: boolean) {
206
- this.processing = isProcessing;
207
- this.status = (isProcessing)
208
- ? { text: 'processing...', class: 'alert alert-danger' }
209
- : { text: 'finished', class: 'alert alert-success' };
210
- }
211
-
212
- // --
213
- // NOTE - Demo Code ONLY
214
- // This Example calls multiple GraphQL queries, this is ONLY for demo purposes, you would typically only call 1 query (which is what GraphQL is good at)
215
- // This demo is mainly to show the use of GraphqlService to build the query and retrieve the data but also to show how to mix that with usage of local Filtering/Sorting strategies
216
- // --
217
-
218
- /** Calling the GraphQL backend API to get the Countries with the Query created by the "process" method of GraphqlService */
219
- getCountries(query: string): Observable<GraphqlResult<Country>> {
220
- return this.http.post<GraphqlResult<Country>>(COUNTRIES_API, { query });
221
- }
222
-
223
- /**
224
- * Calling again the GraphQL backend API, however in this case we cannot use the GraphQL Service to build the query
225
- * So we will have to write, by hand, the query to get the continents code & name
226
- * We also need to resolve the data in a flat array (singleSelect/multipleSelect Filters only accept data at the root of the array)
227
- */
228
- getContinents(): Observable<GraphqlResult<{ code: string; name: string; }>> {
229
- const continentQuery = `query { continents { code, name }}`;
230
- return this.http.post<GraphqlResult<{ code: string; name: string; }>>(COUNTRIES_API, { query: continentQuery });
231
- }
232
-
233
- /**
234
- * Calling again the GraphQL backend API, however in this case we cannot use the GraphQL Service to build the query
235
- * So we will have to write, by hand, the query to get the languages code & name
236
- * We also need to resolve the data in a flat array (singleSelect/multipleSelect Filters only accept data at the root of the array)
237
- */
238
- getLanguages(): Observable<GraphqlResult<{ code: string; name: string; native: string; }>> {
239
- const languageQuery = `query { languages { code, name, native }}`;
240
- return this.http.post<GraphqlResult<{ code: string; name: string; native: string; }>>(COUNTRIES_API, { query: languageQuery });
241
- }
242
- }
@@ -1,87 +0,0 @@
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-graphql.component.ts">
8
- <span class="fa fa-link"></span> code
9
- </a>
10
- </span>
11
- </h2>
12
- <div class="subtitle" [innerHTML]="subTitle"></div>
13
-
14
- <div class="row">
15
- <div class="col-sm-5">
16
- <div [class]="status.class" role="alert" data-test="status">
17
- <strong>Status: </strong> {{status.text}}
18
- <span [hidden]="!processing">
19
- <i class="fa fa-refresh fa-spin fa-lg fa-fw"></i>
20
- </span>
21
- </div>
22
-
23
- <div class="row">
24
- <div class="col-md-12">
25
- <button class="btn btn-outline-secondary btn-sm" data-test="clear-filters-sorting"
26
- (click)="clearAllFiltersAndSorts()" title="Clear all Filters & Sorts">
27
- <i class="fa fa-filter text-danger"></i>
28
- Clear all Filter & Sorts
29
- </button>
30
- <button class="btn btn-outline-secondary btn-sm" data-test="set-dynamic-filter"
31
- (click)="setFiltersDynamically()">
32
- Set Filters Dynamically
33
- </button>
34
- <button class="btn btn-outline-secondary btn-sm" data-test="set-dynamic-sorting"
35
- (click)="setSortingDynamically()">
36
- Set Sorting Dynamically
37
- </button>
38
- </div>
39
- </div>
40
- <div class="row mt-1">
41
- <div class="col-md-12">
42
- <button class="btn btn-outline-secondary btn-sm" data-test="language-button" (click)="switchLanguage()">
43
- <i class="fa fa-language"></i>
44
- Switch Language
45
- </button>
46
- <strong>Locale:</strong>
47
- <span style="font-style: italic" data-test="selected-locale">
48
- {{selectedLanguage + '.json'}}
49
- </span>
50
- </div>
51
- </div>
52
- <br />
53
- <div *ngIf="metrics" style="margin: 10px 0px">
54
- <b>Metrics:</b> {{metrics.endTime | date: 'yyyy-MM-dd hh:mm aaaaa\'m\''}} | {{metrics.executionTime}}ms
55
- | {{metrics.totalItemCount}} items
56
- </div>
57
- <div class="row mb-2">
58
- <div class="col-md-12">
59
- <label>Programmatically go to first/last page:</label>
60
- <button class="btn btn-outline-secondary btn-xs" data-test="goto-first-page" (click)="goToFirstPage()">
61
- <i class="fa fa-caret-left fa-lg"></i>
62
- </button>
63
- <button class="btn btn-outline-secondary btn-xs" data-test="goto-last-page" (click)="goToLastPage()">
64
- <i class="fa fa-caret-right fa-lg"></i>
65
- </button>
66
- </div>
67
- </div>
68
- </div>
69
-
70
- <div class="col-sm-7">
71
- <div class="alert alert-info" data-test="alert-graphql-query">
72
- <strong>GraphQL Query:</strong>
73
- <div [innerHTML]="graphqlQuery" data-test="graphql-query-result"></div>
74
- </div>
75
- </div>
76
- </div>
77
-
78
- <hr />
79
- <angular-slickgrid gridId="grid6"
80
- [columnDefinitions]="columnDefinitions"
81
- [gridOptions]="gridOptions"
82
- [dataset]="dataset"
83
- (onAngularGridCreated)="angularGridReady($event.detail)"
84
- (onGridStateChanged)="gridStateChanged($event.detail)"
85
- (onBeforeGridDestroy)="saveCurrentGridState()">
86
- </angular-slickgrid>
87
- </div>
@@ -1,304 +0,0 @@
1
- import { GraphqlService, GraphqlPaginatedResult, GraphqlServiceApi, } from '@slickgrid-universal/graphql';
2
- import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
3
- import { TranslateService } from '@ngx-translate/core';
4
- import {
5
- AngularGridInstance,
6
- Column,
7
- FieldType,
8
- Filters,
9
- Formatters,
10
- GridOption,
11
- GridStateChange,
12
- Metrics,
13
- MultipleSelectOption,
14
- OperatorType,
15
- SortDirection,
16
- unsubscribeAllObservables,
17
- } from './../modules/angular-slickgrid';
18
- import * as moment from 'moment-mini';
19
- import { Subscription } from 'rxjs';
20
-
21
- const defaultPageSize = 20;
22
- const GRAPHQL_QUERY_DATASET_NAME = 'users';
23
- const LOCAL_STORAGE_KEY = 'gridStateGraphql';
24
-
25
- @Component({
26
- templateUrl: './grid-graphql.component.html'
27
- })
28
- export class GridGraphqlComponent implements OnInit, OnDestroy {
29
- title = 'Example 6: Grid connected to Backend Server with GraphQL';
30
- subTitle = `
31
- Sorting/Paging connected to a Backend GraphQL Service (<a href="https://github.com/ghiscoding/Angular-Slickgrid/wiki/GraphQL" target="_blank">Wiki docs</a>).
32
- <br/>
33
- <ul class="small">
34
- <li><span class="red">(*) NO DATA SHOWING</span> - just change Filters &amp; Pages and look at the "GraphQL Query" changing :)</li>
35
- <li>This example also demos the Grid State feature, open the console log to see the changes</li>
36
- <li>String column also support operator (>, >=, <, <=, <>, !=, =, ==, *)
37
- <ul>
38
- <li>The (*) can be used as startsWith (ex.: "abc*" => startsWith "abc") / endsWith (ex.: "*xyz" => endsWith "xyz")</li>
39
- <li>The other operators can be used on column type number for example: ">=100" (bigger or equal than 100)</li>
40
- </ul>
41
- <li>You can also preload a grid with certain "presets" like Filters / Sorters / Pagination <a href="https://github.com/ghiscoding/Angular-Slickgrid/wiki/Grid-State-&-Preset" target="_blank">Wiki - Grid Preset</a>
42
- </ul>
43
- `;
44
- private subscriptions: Subscription[] = [];
45
- angularGrid!: AngularGridInstance;
46
- columnDefinitions!: Column[];
47
- gridOptions!: GridOption;
48
- dataset = [];
49
- metrics!: Metrics;
50
-
51
- graphqlQuery = '';
52
- processing = true;
53
- status = { text: 'processing...', class: 'alert alert-danger' };
54
- isWithCursor = false;
55
- selectedLanguage: string;
56
-
57
- constructor(private readonly cd: ChangeDetectorRef, private translate: TranslateService) {
58
- // always start with English for Cypress E2E tests to be consistent
59
- const defaultLang = 'en';
60
- this.translate.use(defaultLang);
61
- this.selectedLanguage = defaultLang;
62
- }
63
-
64
- ngOnDestroy() {
65
- // also unsubscribe all Angular Subscriptions
66
- this.subscriptions = unsubscribeAllObservables(this.subscriptions);
67
- }
68
-
69
- ngOnInit(): void {
70
- this.columnDefinitions = [
71
- {
72
- id: 'name', field: 'name', nameKey: 'NAME', width: 60, columnGroupKey: 'CUSTOMER_INFORMATION',
73
- type: FieldType.string,
74
- sortable: true,
75
- filterable: true,
76
- filter: {
77
- model: Filters.compoundInput
78
- }
79
- },
80
- {
81
- id: 'gender', field: 'gender', nameKey: 'GENDER', filterable: true, sortable: true, width: 60, columnGroupKey: 'CUSTOMER_INFORMATION',
82
- filter: {
83
- model: Filters.singleSelect,
84
- collection: [{ value: '', label: '' }, { value: 'male', label: 'male', labelKey: 'MALE' }, { value: 'female', label: 'female', labelKey: 'FEMALE' }]
85
- }
86
- },
87
- {
88
- id: 'company', field: 'company', nameKey: 'COMPANY', width: 60, columnGroupKey: 'CUSTOMER_INFORMATION',
89
- sortable: true, filterable: true,
90
- filter: {
91
- model: Filters.multipleSelect,
92
- collection: [{ value: 'acme', label: 'Acme' }, { value: 'abc', label: 'Company ABC' }, { value: 'xyz', label: 'Company XYZ' }],
93
- filterOptions: {
94
- filter: true // adds a filter on top of the multi-select dropdown
95
- } as MultipleSelectOption
96
- }
97
- },
98
- {
99
- id: 'billingAddressStreet', field: 'billing.address.street', nameKey: 'BILLING.ADDRESS.STREET',
100
- width: 60, filterable: true, sortable: true, columnGroupKey: 'BILLING.INFORMATION',
101
- },
102
- {
103
- id: 'billingAddressZip', field: 'billing.address.zip', nameKey: 'BILLING.ADDRESS.ZIP', width: 60,
104
- type: FieldType.number,
105
- columnGroupKey: 'BILLING.INFORMATION', // or use "columnGroup" without Translate
106
- filterable: true, sortable: true,
107
- filter: {
108
- model: Filters.compoundInput
109
- },
110
- formatter: Formatters.multiple, params: { formatters: [Formatters.complexObject, Formatters.translate] }
111
- },
112
- {
113
- id: 'finish', field: 'finish', name: 'Date', formatter: Formatters.dateIso, sortable: true, minWidth: 90, width: 120, exportWithFormatter: true,
114
- type: FieldType.date,
115
- columnGroupKey: 'BILLING.INFORMATION', // or use "columnGroup" without Translate
116
- filterable: true,
117
- filter: {
118
- model: Filters.dateRange,
119
- }
120
- },
121
- ];
122
-
123
- const presetLowestDay = moment().add(-2, 'days').format('YYYY-MM-DD');
124
- const presetHighestDay = moment().add(20, 'days').format('YYYY-MM-DD');
125
-
126
- this.gridOptions = {
127
- gridHeight: 200,
128
- gridWidth: 900,
129
- enableFiltering: true,
130
- enableCellNavigation: true,
131
- enableTranslate: true,
132
- createPreHeaderPanel: true,
133
- showPreHeaderPanel: true,
134
- preHeaderPanelHeight: 28,
135
- i18n: this.translate,
136
- gridMenu: {
137
- resizeOnShowHeaderRow: true,
138
- commandItems: [
139
- {
140
- iconCssClass: 'fa fa-times text-danger',
141
- title: 'Reset Grid',
142
- disabled: false,
143
- command: 'reset-grid',
144
- positionOrder: 60
145
- }
146
- ],
147
- onCommand: (e, args) => {
148
- if (args.command === 'reset-grid') {
149
- this.angularGrid.gridService.resetGrid(this.columnDefinitions);
150
- localStorage[LOCAL_STORAGE_KEY] = null;
151
- }
152
- }
153
- },
154
- enablePagination: true, // you could optionally disable the Pagination
155
- pagination: {
156
- pageSizes: [10, 15, 20, 25, 30, 40, 50, 75, 100],
157
- pageSize: defaultPageSize,
158
- totalItems: 0
159
- },
160
- presets: {
161
- columns: [
162
- { columnId: 'name', width: 100 },
163
- { columnId: 'gender', width: 55 },
164
- { columnId: 'company' },
165
- { columnId: 'billingAddressZip' }, // flip column position of Street/Zip to Zip/Street
166
- { columnId: 'billingAddressStreet', width: 120 },
167
- { columnId: 'finish', width: 130 },
168
- ],
169
- filters: [
170
- // you can use OperatorType or type them as string, e.g.: operator: 'EQ'
171
- { columnId: 'gender', searchTerms: ['male'], operator: OperatorType.equal },
172
- { columnId: 'name', searchTerms: ['John Doe'], operator: OperatorType.contains },
173
- { columnId: 'company', searchTerms: ['xyz'], operator: 'IN' },
174
-
175
- // use a date range with 2 searchTerms values
176
- { columnId: 'finish', searchTerms: [presetLowestDay, presetHighestDay], operator: OperatorType.rangeInclusive },
177
- ],
178
- sorters: [
179
- // direction can written as 'asc' (uppercase or lowercase) and/or use the SortDirection type
180
- { columnId: 'name', direction: 'asc' },
181
- { columnId: 'company', direction: SortDirection.DESC }
182
- ],
183
- pagination: { pageNumber: 2, pageSize: defaultPageSize }
184
- },
185
- backendServiceApi: {
186
- service: new GraphqlService(),
187
- options: {
188
- datasetName: GRAPHQL_QUERY_DATASET_NAME, // the only REQUIRED property
189
- addLocaleIntoQuery: true, // optionally add current locale into the query
190
- extraQueryArguments: [{ // optionally add some extra query arguments as input query arguments
191
- field: 'userId',
192
- value: 123
193
- }],
194
- // when dealing with complex objects, we want to keep our field name with double quotes
195
- // example with gender: query { users (orderBy:[{field:"gender",direction:ASC}]) {}
196
- keepArgumentFieldDoubleQuotes: true
197
- },
198
- // you can define the onInit callback OR enable the "executeProcessCommandOnInit" flag in the service init
199
- // onInit: (query) => this.getCustomerApiCall(query)
200
- preProcess: () => this.displaySpinner(true),
201
- process: (query) => this.getCustomerApiCall(query),
202
- postProcess: (result: GraphqlPaginatedResult) => {
203
- this.metrics = result.metrics as Metrics;
204
- this.displaySpinner(false);
205
- this.cd.detectChanges();
206
- }
207
- } as GraphqlServiceApi
208
- };
209
- }
210
-
211
- angularGridReady(angularGrid: AngularGridInstance) {
212
- this.angularGrid = angularGrid;
213
- }
214
-
215
- displaySpinner(isProcessing: boolean) {
216
- this.processing = isProcessing;
217
- this.status = (isProcessing)
218
- ? { text: 'processing...', class: 'alert alert-danger' }
219
- : { text: 'finished', class: 'alert alert-success' };
220
- }
221
-
222
- /**
223
- * Calling your GraphQL backend server should always return a Promise or Observable of type GraphqlPaginatedResult (or GraphqlResult without Pagination)
224
- * @param query
225
- * @return Promise<GraphqlPaginatedResult> | Observable<GraphqlResult>
226
- */
227
- getCustomerApiCall(query: string): Promise<GraphqlPaginatedResult> {
228
- // in your case, you will call your WebAPI function (wich needs to return a Promise)
229
- // for the demo purpose, we will call a mock WebAPI function
230
- const mockedResult = {
231
- // the dataset name is the only unknown property
232
- // will be the same defined in your GraphQL Service init, in our case GRAPHQL_QUERY_DATASET_NAME
233
- data: {
234
- [GRAPHQL_QUERY_DATASET_NAME]: {
235
- nodes: [],
236
- totalCount: 100
237
- }
238
- }
239
- };
240
-
241
- return new Promise(resolve => {
242
- setTimeout(() => {
243
- this.graphqlQuery = this.angularGrid.backendService!.buildQuery();
244
- resolve(mockedResult);
245
- }, 100);
246
- });
247
- }
248
-
249
- goToFirstPage() {
250
- this.angularGrid.paginationService!.goToFirstPage();
251
- }
252
-
253
- goToLastPage() {
254
- this.angularGrid.paginationService!.goToLastPage();
255
- }
256
-
257
- /** Dispatched event of a Grid State Changed event */
258
- gridStateChanged(gridStateChanges: GridStateChange) {
259
- console.log('GraphQL Example, Grid State changed:: ', gridStateChanges);
260
- localStorage[LOCAL_STORAGE_KEY] = JSON.stringify(gridStateChanges.gridState);
261
- }
262
-
263
- clearAllFiltersAndSorts() {
264
- if (this.angularGrid?.gridService) {
265
- this.angularGrid.gridService.clearAllFiltersAndSorts();
266
- }
267
- }
268
-
269
- /** Save current Filters, Sorters in LocaleStorage or DB */
270
- saveCurrentGridState() {
271
- console.log('GraphQL current grid state', this.angularGrid.gridStateService.getCurrentGridState());
272
- }
273
-
274
- setFiltersDynamically() {
275
- const presetLowestDay = moment().add(-2, 'days').format('YYYY-MM-DD');
276
- const presetHighestDay = moment().add(20, 'days').format('YYYY-MM-DD');
277
-
278
- // we can Set Filters Dynamically (or different filters) afterward through the FilterService
279
- this.angularGrid.filterService.updateFilters([
280
- { columnId: 'gender', searchTerms: ['female'], operator: OperatorType.equal },
281
- { columnId: 'name', searchTerms: ['Jane'], operator: OperatorType.startsWith },
282
- { columnId: 'company', searchTerms: ['acme'], operator: 'IN' },
283
- { columnId: 'billingAddressZip', searchTerms: ['11'], operator: OperatorType.greaterThanOrEqual },
284
- { columnId: 'finish', searchTerms: [presetLowestDay, presetHighestDay], operator: OperatorType.rangeInclusive },
285
- ]);
286
- }
287
-
288
- setSortingDynamically() {
289
- this.angularGrid.sortService.updateSorting([
290
- // orders matter, whichever is first in array will be the first sorted column
291
- { columnId: 'billingAddressZip', direction: 'DESC' },
292
- { columnId: 'company', direction: 'ASC' },
293
- ]);
294
- }
295
-
296
- switchLanguage() {
297
- const nextLanguage = (this.selectedLanguage === 'en') ? 'fr' : 'en';
298
- this.subscriptions.push(
299
- this.translate.use(nextLanguage).subscribe(() => {
300
- this.selectedLanguage = nextLanguage;
301
- })
302
- );
303
- }
304
- }