angular-slickgrid 9.0.0 → 9.0.2
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.
- package/LICENSE +1 -1
- package/{dist/fesm2022 → fesm2022}/angular-slickgrid.mjs +16 -16
- package/package.json +27 -14
- package/.gitbook.yaml +0 -5
- package/CHANGELOG.md +0 -1691
- package/CONTRIBUTING.md +0 -17
- package/angular.json +0 -133
- package/coverage/base.css +0 -224
- package/coverage/block-navigation.js +0 -87
- package/coverage/clover.xml +0 -1620
- package/coverage/coverage-final.json +0 -9
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +0 -176
- package/coverage/library/components/angular-slickgrid.component.ts.html +0 -5074
- package/coverage/library/components/index.html +0 -116
- package/coverage/library/constants.ts.html +0 -397
- package/coverage/library/extensions/index.html +0 -116
- package/coverage/library/extensions/slickRowDetailView.ts.html +0 -1261
- package/coverage/library/index.html +0 -116
- package/coverage/library/modules/angular-slickgrid.module.ts.html +0 -166
- package/coverage/library/modules/index.html +0 -116
- package/coverage/library/services/angularUtil.service.ts.html +0 -445
- package/coverage/library/services/container.service.ts.html +0 -163
- package/coverage/library/services/index.html +0 -161
- package/coverage/library/services/translater.service.ts.html +0 -199
- package/coverage/library/services/utilities.ts.html +0 -142
- package/coverage/prettify.css +0 -1
- package/coverage/prettify.js +0 -2
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +0 -196
- package/dist/LICENSE +0 -21
- package/dist/README.md +0 -142
- package/docs/README.md +0 -5
- package/docs/TOC.md +0 -105
- package/docs/backend-services/Custom-Backend-Service.md +0 -50
- package/docs/backend-services/GraphQL.md +0 -276
- package/docs/backend-services/OData.md +0 -245
- package/docs/backend-services/graphql/GraphQL-Filtering.md +0 -156
- package/docs/backend-services/graphql/GraphQL-JSON-Result.md +0 -85
- package/docs/backend-services/graphql/GraphQL-Pagination.md +0 -77
- package/docs/backend-services/graphql/GraphQL-Sorting.md +0 -78
- package/docs/column-functionalities/cell-menu.md +0 -212
- package/docs/column-functionalities/editors/autocomplete-editor.md +0 -466
- package/docs/column-functionalities/editors/date-editor-flatpickr.md +0 -71
- package/docs/column-functionalities/editors/date-editor-vanilla-calendar.md +0 -91
- package/docs/column-functionalities/editors/longtext-editor-textarea.md +0 -80
- package/docs/column-functionalities/editors/select-dropdown-editor.md +0 -227
- package/docs/column-functionalities/editors.md +0 -604
- package/docs/column-functionalities/filters/autocomplete-filter.md +0 -183
- package/docs/column-functionalities/filters/compound-filters.md +0 -234
- package/docs/column-functionalities/filters/custom-filter.md +0 -117
- package/docs/column-functionalities/filters/filter-intro.md +0 -81
- package/docs/column-functionalities/filters/input-filter.md +0 -260
- package/docs/column-functionalities/filters/range-filters.md +0 -188
- package/docs/column-functionalities/filters/select-filter.md +0 -695
- package/docs/column-functionalities/filters/single-search-filter.md +0 -77
- package/docs/column-functionalities/filters/styling-filled-filters.md +0 -45
- package/docs/column-functionalities/formatters.md +0 -325
- package/docs/column-functionalities/sorting.md +0 -200
- package/docs/developer-guides/csp-compliance.md +0 -64
- package/docs/events/Available-Events.md +0 -223
- package/docs/events/Grid-&-DataView-Events.md +0 -211
- package/docs/getting-started/quick-start.md +0 -230
- package/docs/getting-started/troubleshooting.md +0 -80
- package/docs/grid-functionalities/Column-Picker.md +0 -22
- package/docs/grid-functionalities/Composite-Editor-Modal.md +0 -627
- package/docs/grid-functionalities/Context-Menu.md +0 -226
- package/docs/grid-functionalities/Custom-Footer.md +0 -80
- package/docs/grid-functionalities/Custom-Tooltip-(plugin).md +0 -258
- package/docs/grid-functionalities/Export-to-Excel.md +0 -457
- package/docs/grid-functionalities/Export-to-Text-File.md +0 -165
- package/docs/grid-functionalities/FAQ.md +0 -53
- package/docs/grid-functionalities/Global-Options.md +0 -29
- package/docs/grid-functionalities/Grid-Auto-Resize.md +0 -218
- package/docs/grid-functionalities/Grid-Menu.md +0 -134
- package/docs/grid-functionalities/Grid-State-&-Preset.md +0 -245
- package/docs/grid-functionalities/Header-Menu-&-Header-Buttons.md +0 -125
- package/docs/grid-functionalities/Resize-by-Cell-Content.md +0 -138
- package/docs/grid-functionalities/Row-Selection.md +0 -247
- package/docs/grid-functionalities/Row-based-edit.md +0 -71
- package/docs/grid-functionalities/add-update-highlight.md +0 -258
- package/docs/grid-functionalities/column-row-spanning.md +0 -74
- package/docs/grid-functionalities/dynamic-item-metadata.md +0 -124
- package/docs/grid-functionalities/excel-copy-buffer.md +0 -145
- package/docs/grid-functionalities/frozen-columns-rows.md +0 -164
- package/docs/grid-functionalities/grouping-and-aggregators.md +0 -269
- package/docs/grid-functionalities/header-footer-slots.md +0 -22
- package/docs/grid-functionalities/infinite-scroll.md +0 -150
- package/docs/grid-functionalities/providing-grid-data.md +0 -61
- package/docs/grid-functionalities/row-detail.md +0 -530
- package/docs/grid-functionalities/tree-data-grid.md +0 -391
- package/docs/localization/Localization---Component-Sample.md +0 -87
- package/docs/localization/Localization-with-Custom-Locales.md +0 -66
- package/docs/localization/Localization-with-ngx-translate.md +0 -148
- package/docs/migrations/migration-to-2.x.md +0 -304
- package/docs/migrations/migration-to-3.x.md +0 -295
- package/docs/migrations/migration-to-4.x.md +0 -83
- package/docs/migrations/migration-to-5.x.md +0 -160
- package/docs/migrations/migration-to-6.x.md +0 -128
- package/docs/migrations/migration-to-7.x.md +0 -294
- package/docs/migrations/migration-to-8.x.md +0 -316
- package/docs/migrations/migration-to-9.x.md +0 -219
- package/docs/slick-grid-dataview-objects/slickgrid-dataview-objects.md +0 -79
- package/docs/styling/dark-mode.md +0 -100
- package/docs/styling/styling.md +0 -250
- package/docs/testing/testing-patterns.md +0 -73
- package/eslint.config.mjs +0 -60
- package/ng-package.json +0 -10
- package/src/assets/angular-logo.png +0 -0
- package/src/assets/angular-logo2.png +0 -0
- package/src/assets/data/collection_100_numbers.json +0 -12
- package/src/assets/data/collection_500_numbers.json +0 -52
- package/src/assets/data/countries.json +0 -245
- package/src/assets/data/country_names.json +0 -245
- package/src/assets/data/customers_100.json +0 -102
- package/src/assets/data/users.csv +0 -5
- package/src/assets/i18n/en.json +0 -102
- package/src/assets/i18n/fr.json +0 -103
- package/src/demos/app-routing.module.ts +0 -108
- package/src/demos/app.component.html +0 -187
- package/src/demos/app.component.scss +0 -79
- package/src/demos/app.component.ts +0 -11
- package/src/demos/app.module.ts +0 -196
- package/src/demos/environments/environment.dev.ts +0 -3
- package/src/demos/environments/environment.prod.ts +0 -3
- package/src/demos/environments/environment.ts +0 -8
- package/src/demos/examples/custom-angularComponentEditor.ts +0 -187
- package/src/demos/examples/custom-angularComponentFilter.ts +0 -123
- package/src/demos/examples/custom-buttonFormatter.component.ts +0 -13
- package/src/demos/examples/custom-inputEditor.ts +0 -132
- package/src/demos/examples/custom-inputFilter.ts +0 -134
- package/src/demos/examples/custom-titleFormatter.component.ts +0 -9
- package/src/demos/examples/data/collection_100_numbers.json +0 -12
- package/src/demos/examples/data/collection_500_numbers.json +0 -52
- package/src/demos/examples/data/countries.json +0 -245
- package/src/demos/examples/data/country_names.json +0 -245
- package/src/demos/examples/data/customers_100.json +0 -102
- package/src/demos/examples/data/users.csv +0 -5
- package/src/demos/examples/editor-ng-select.component.ts +0 -38
- package/src/demos/examples/example01.component.html +0 -48
- package/src/demos/examples/example01.component.ts +0 -109
- package/src/demos/examples/example02.component.html +0 -45
- package/src/demos/examples/example02.component.ts +0 -218
- package/src/demos/examples/example03.component.html +0 -118
- package/src/demos/examples/example03.component.ts +0 -694
- package/src/demos/examples/example04.component.html +0 -87
- package/src/demos/examples/example04.component.ts +0 -326
- package/src/demos/examples/example05.component.html +0 -151
- package/src/demos/examples/example05.component.ts +0 -474
- package/src/demos/examples/example06.component.html +0 -163
- package/src/demos/examples/example06.component.ts +0 -446
- package/src/demos/examples/example07.component.html +0 -56
- package/src/demos/examples/example07.component.scss +0 -10
- package/src/demos/examples/example07.component.ts +0 -216
- package/src/demos/examples/example08.component.html +0 -51
- package/src/demos/examples/example08.component.scss +0 -23
- package/src/demos/examples/example08.component.ts +0 -195
- package/src/demos/examples/example09.component.html +0 -55
- package/src/demos/examples/example09.component.scss +0 -22
- package/src/demos/examples/example09.component.ts +0 -302
- package/src/demos/examples/example10.component.html +0 -103
- package/src/demos/examples/example10.component.ts +0 -309
- package/src/demos/examples/example11.component.html +0 -91
- package/src/demos/examples/example11.component.ts +0 -276
- package/src/demos/examples/example12.component.html +0 -98
- package/src/demos/examples/example12.component.ts +0 -317
- package/src/demos/examples/example13.component.html +0 -96
- package/src/demos/examples/example13.component.ts +0 -370
- package/src/demos/examples/example14.component.html +0 -50
- package/src/demos/examples/example14.component.scss +0 -11
- package/src/demos/examples/example14.component.ts +0 -156
- package/src/demos/examples/example15.component.html +0 -56
- package/src/demos/examples/example15.component.ts +0 -304
- package/src/demos/examples/example16.component.html +0 -77
- package/src/demos/examples/example16.component.ts +0 -277
- package/src/demos/examples/example17.component.html +0 -50
- package/src/demos/examples/example17.component.ts +0 -109
- package/src/demos/examples/example18.component.html +0 -132
- package/src/demos/examples/example18.component.ts +0 -445
- package/src/demos/examples/example19-rowdetail.component.html +0 -40
- package/src/demos/examples/example19-rowdetail.component.ts +0 -54
- package/src/demos/examples/example19.component.html +0 -79
- package/src/demos/examples/example19.component.ts +0 -316
- package/src/demos/examples/example20.component.html +0 -76
- package/src/demos/examples/example20.component.scss +0 -11
- package/src/demos/examples/example20.component.ts +0 -341
- package/src/demos/examples/example21.component.html +0 -86
- package/src/demos/examples/example21.component.scss +0 -16
- package/src/demos/examples/example21.component.ts +0 -140
- package/src/demos/examples/example22.component.html +0 -41
- package/src/demos/examples/example22.component.ts +0 -117
- package/src/demos/examples/example23.component.html +0 -111
- package/src/demos/examples/example23.component.ts +0 -323
- package/src/demos/examples/example24.component.html +0 -120
- package/src/demos/examples/example24.component.scss +0 -62
- package/src/demos/examples/example24.component.ts +0 -641
- package/src/demos/examples/example25.component.html +0 -60
- package/src/demos/examples/example25.component.scss +0 -8
- package/src/demos/examples/example25.component.ts +0 -255
- package/src/demos/examples/example26.component.html +0 -98
- package/src/demos/examples/example26.component.scss +0 -42
- package/src/demos/examples/example26.component.ts +0 -383
- package/src/demos/examples/example27.component.html +0 -138
- package/src/demos/examples/example27.component.scss +0 -10
- package/src/demos/examples/example27.component.ts +0 -369
- package/src/demos/examples/example28.component.html +0 -143
- package/src/demos/examples/example28.component.scss +0 -54
- package/src/demos/examples/example28.component.ts +0 -453
- package/src/demos/examples/example29.component.html +0 -30
- package/src/demos/examples/example29.component.ts +0 -70
- package/src/demos/examples/example30.component.html +0 -116
- package/src/demos/examples/example30.component.scss +0 -20
- package/src/demos/examples/example30.component.ts +0 -1070
- package/src/demos/examples/example32.component.html +0 -77
- package/src/demos/examples/example32.component.scss +0 -8
- package/src/demos/examples/example32.component.ts +0 -905
- package/src/demos/examples/example33.component.html +0 -50
- package/src/demos/examples/example33.component.scss +0 -46
- package/src/demos/examples/example33.component.ts +0 -571
- package/src/demos/examples/example34.component.html +0 -82
- package/src/demos/examples/example34.component.scss +0 -77
- package/src/demos/examples/example34.component.ts +0 -434
- package/src/demos/examples/example35.component.html +0 -77
- package/src/demos/examples/example35.component.scss +0 -18
- package/src/demos/examples/example35.component.ts +0 -264
- package/src/demos/examples/example36.component.html +0 -56
- package/src/demos/examples/example36.component.scss +0 -26
- package/src/demos/examples/example36.component.ts +0 -504
- package/src/demos/examples/example37.component.html +0 -30
- package/src/demos/examples/example37.component.ts +0 -123
- package/src/demos/examples/example38.component.html +0 -104
- package/src/demos/examples/example38.component.scss +0 -8
- package/src/demos/examples/example38.component.ts +0 -420
- package/src/demos/examples/example39.component.html +0 -112
- package/src/demos/examples/example39.component.scss +0 -8
- package/src/demos/examples/example39.component.ts +0 -371
- package/src/demos/examples/example40.component.html +0 -76
- package/src/demos/examples/example40.component.ts +0 -226
- package/src/demos/examples/example41.component.html +0 -50
- package/src/demos/examples/example41.component.scss +0 -42
- package/src/demos/examples/example41.component.ts +0 -229
- package/src/demos/examples/example42.component.html +0 -47
- package/src/demos/examples/example42.component.ts +0 -203
- package/src/demos/examples/example43.component.html +0 -94
- package/src/demos/examples/example43.component.scss +0 -30
- package/src/demos/examples/example43.component.ts +0 -449
- package/src/demos/examples/example44.component.html +0 -78
- package/src/demos/examples/example44.component.scss +0 -50
- package/src/demos/examples/example44.component.ts +0 -375
- package/src/demos/examples/example45-detail.component.html +0 -15
- package/src/demos/examples/example45-detail.component.ts +0 -97
- package/src/demos/examples/example45.component.html +0 -110
- package/src/demos/examples/example45.component.scss +0 -50
- package/src/demos/examples/example45.component.ts +0 -243
- package/src/demos/examples/filter-ng-select.component.ts +0 -33
- package/src/demos/examples/grid-custom-pager.component.html +0 -60
- package/src/demos/examples/grid-custom-pager.component.scss +0 -57
- package/src/demos/examples/grid-custom-pager.component.ts +0 -107
- package/src/demos/examples/grid-remote.component.html +0 -44
- package/src/demos/examples/grid-remote.component.ts +0 -164
- package/src/demos/examples/home.component.html +0 -39
- package/src/demos/examples/home.component.ts +0 -10
- package/src/demos/examples/jsonp.ts +0 -89
- package/src/demos/examples/rowdetail-preload.component.ts +0 -10
- package/src/demos/examples/swt-common-grid-pagination.component.ts +0 -160
- package/src/demos/examples/swt-common-grid-test.component.html +0 -37
- package/src/demos/examples/swt-common-grid-test.component.ts +0 -214
- package/src/demos/examples/swt-common-grid.component.ts +0 -436
- package/src/demos/examples/swt-logger.service.ts +0 -173
- package/src/demos/examples/utilities.ts +0 -9
- package/src/favicon.ico +0 -0
- package/src/index.html +0 -17
- package/src/library/components/__tests__/angular-slickgrid.component.spec.ts +0 -2638
- package/src/library/components/angular-slickgrid.component.html +0 -5
- package/src/library/components/angular-slickgrid.component.ts +0 -1662
- package/src/library/constants.ts +0 -105
- package/src/library/extensions/__tests__/slickRowDetailView.spec.ts +0 -751
- package/src/library/extensions/index.ts +0 -1
- package/src/library/extensions/slickRowDetailView.ts +0 -395
- package/src/library/global-grid-options.ts +0 -273
- package/src/library/index.ts +0 -11
- package/src/library/models/angularComponentOutput.interface.ts +0 -6
- package/src/library/models/angularGridInstance.interface.ts +0 -76
- package/src/library/models/externalTestingDependencies.interface.ts +0 -37
- package/src/library/models/gridOption.interface.ts +0 -15
- package/src/library/models/index.ts +0 -5
- package/src/library/models/rowDetailView.interface.ts +0 -16
- package/src/library/modules/angular-slickgrid.module.spec.ts +0 -25
- package/src/library/modules/angular-slickgrid.module.ts +0 -27
- package/src/library/services/__tests__/angularUtilService.spec.ts +0 -156
- package/src/library/services/__tests__/container.service.spec.ts +0 -25
- package/src/library/services/__tests__/translater.service.spec.ts +0 -43
- package/src/library/services/__tests__/utilities.spec.ts +0 -22
- package/src/library/services/angularUtil.service.ts +0 -120
- package/src/library/services/container.service.ts +0 -26
- package/src/library/services/index.ts +0 -4
- package/src/library/services/translater.service.ts +0 -38
- package/src/library/services/utilities.ts +0 -19
- package/src/library/slickgrid-config.ts +0 -10
- package/src/main.ts +0 -13
- package/src/public_api.ts +0 -1
- package/src/styles.scss +0 -178
- package/test/cypress/e2e/example01.cy.ts +0 -367
- package/test/cypress/e2e/example02.cy.ts +0 -60
- package/test/cypress/e2e/example03.cy.ts +0 -268
- package/test/cypress/e2e/example04.cy.ts +0 -254
- package/test/cypress/e2e/example05.cy.ts +0 -804
- package/test/cypress/e2e/example06.cy.ts +0 -890
- package/test/cypress/e2e/example07.cy.ts +0 -384
- package/test/cypress/e2e/example08.cy.ts +0 -190
- package/test/cypress/e2e/example09.cy.ts +0 -392
- package/test/cypress/e2e/example10.cy.ts +0 -650
- package/test/cypress/e2e/example11.cy.ts +0 -86
- package/test/cypress/e2e/example12.cy.ts +0 -269
- package/test/cypress/e2e/example13.cy.ts +0 -246
- package/test/cypress/e2e/example14.cy.ts +0 -122
- package/test/cypress/e2e/example15.cy.ts +0 -598
- package/test/cypress/e2e/example16.cy.ts +0 -427
- package/test/cypress/e2e/example17.cy.ts +0 -83
- package/test/cypress/e2e/example18.cy.ts +0 -431
- package/test/cypress/e2e/example19.cy.ts +0 -263
- package/test/cypress/e2e/example20.cy.ts +0 -264
- package/test/cypress/e2e/example21.cy.ts +0 -77
- package/test/cypress/e2e/example22.cy.ts +0 -94
- package/test/cypress/e2e/example23.cy.ts +0 -259
- package/test/cypress/e2e/example24.cy.ts +0 -707
- package/test/cypress/e2e/example25.cy.ts +0 -193
- package/test/cypress/e2e/example26.cy.ts +0 -111
- package/test/cypress/e2e/example27.cy.ts +0 -261
- package/test/cypress/e2e/example28.cy.ts +0 -740
- package/test/cypress/e2e/example29.cy.ts +0 -30
- package/test/cypress/e2e/example30.cy.ts +0 -757
- package/test/cypress/e2e/example31.cy.ts +0 -69
- package/test/cypress/e2e/example32.cy.ts +0 -272
- package/test/cypress/e2e/example33.cy.ts +0 -278
- package/test/cypress/e2e/example34.cy.ts +0 -84
- package/test/cypress/e2e/example35.cy.ts +0 -178
- package/test/cypress/e2e/example36.cy.ts +0 -219
- package/test/cypress/e2e/example37.cy.ts +0 -52
- package/test/cypress/e2e/example38.cy.ts +0 -160
- package/test/cypress/e2e/example39.cy.ts +0 -150
- package/test/cypress/e2e/example40.cy.ts +0 -126
- package/test/cypress/e2e/example41.cy.ts +0 -90
- package/test/cypress/e2e/example42.cy.ts +0 -82
- package/test/cypress/e2e/example43.cy.ts +0 -482
- package/test/cypress/e2e/example44.cy.ts +0 -458
- package/test/cypress/e2e/example45.cy.ts +0 -455
- package/test/cypress/e2e/home.cy.ts +0 -7
- package/test/cypress/fixtures/example.json +0 -5
- package/test/cypress/plugins/index.ts +0 -17
- package/test/cypress/plugins/utilities.ts +0 -28
- package/test/cypress/support/commands.ts +0 -88
- package/test/cypress/support/common.ts +0 -47
- package/test/cypress/support/drag.ts +0 -101
- package/test/cypress/support/index.ts +0 -20
- package/test/cypress/tsconfig.json +0 -9
- package/test/cypress.config.ts +0 -34
- package/test/mockSlickEvent.ts +0 -77
- package/test/rxjsResourceStub.ts +0 -69
- package/test/test-setup.ts +0 -6
- package/test/translateServiceStub.ts +0 -230
- package/test/translaterServiceStub.ts +0 -239
- package/test/tsconfig.json +0 -17
- package/test/vitest-global-mocks.ts +0 -41
- package/test/vitest-global-setup.ts +0 -3
- package/test/vitest-pretest.ts +0 -5
- package/tsconfig.app.json +0 -14
- package/tsconfig.json +0 -31
- package/tsconfig.spec.json +0 -11
- package/types/sortablejs.d.ts +0 -4
- package/vite.config.mts +0 -51
- /package/{dist/fesm2022 → fesm2022}/angular-slickgrid.mjs.map +0 -0
- /package/{dist/i18n → i18n}/en.json +0 -0
- /package/{dist/i18n → i18n}/fr.json +0 -0
- /package/{dist/index.d.ts → index.d.ts} +0 -0
- /package/{dist/library → library}/components/angular-slickgrid.component.d.ts +0 -0
- /package/{dist/library → library}/constants.d.ts +0 -0
- /package/{dist/library → library}/extensions/index.d.ts +0 -0
- /package/{dist/library → library}/extensions/slickRowDetailView.d.ts +0 -0
- /package/{dist/library → library}/global-grid-options.d.ts +0 -0
- /package/{dist/library → library}/index.d.ts +0 -0
- /package/{dist/library → library}/models/angularComponentOutput.interface.d.ts +0 -0
- /package/{dist/library → library}/models/angularGridInstance.interface.d.ts +0 -0
- /package/{dist/library → library}/models/externalTestingDependencies.interface.d.ts +0 -0
- /package/{dist/library → library}/models/gridOption.interface.d.ts +0 -0
- /package/{dist/library → library}/models/index.d.ts +0 -0
- /package/{dist/library → library}/models/rowDetailView.interface.d.ts +0 -0
- /package/{dist/library → library}/modules/angular-slickgrid.module.d.ts +0 -0
- /package/{dist/library → library}/services/angularUtil.service.d.ts +0 -0
- /package/{dist/library → library}/services/container.service.d.ts +0 -0
- /package/{dist/library → library}/services/index.d.ts +0 -0
- /package/{dist/library → library}/services/translater.service.d.ts +0 -0
- /package/{dist/library → library}/services/utilities.d.ts +0 -0
- /package/{dist/library → library}/slickgrid-config.d.ts +0 -0
- /package/{dist/public_api.d.ts → public_api.d.ts} +0 -0
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
import { ComponentRef } from '@angular/core';
|
|
2
|
-
import { Subscription } from 'rxjs';
|
|
3
|
-
import {
|
|
4
|
-
AngularUtilService,
|
|
5
|
-
Column,
|
|
6
|
-
ColumnEditor,
|
|
7
|
-
Editor,
|
|
8
|
-
EditorValidator,
|
|
9
|
-
EditorValidationResult,
|
|
10
|
-
GridOption,
|
|
11
|
-
SlickGrid,
|
|
12
|
-
unsubscribeAllObservables,
|
|
13
|
-
} from '../../library';
|
|
14
|
-
|
|
15
|
-
/*
|
|
16
|
-
* An example of a 'detached' editor.
|
|
17
|
-
* KeyDown events are also handled to provide handling for Tab, Shift-Tab, Esc and Ctrl-Enter.
|
|
18
|
-
*/
|
|
19
|
-
export class CustomAngularComponentEditor implements Editor {
|
|
20
|
-
private _subscriptions: Subscription[] = [];
|
|
21
|
-
|
|
22
|
-
/** Angular Component Reference */
|
|
23
|
-
componentRef!: ComponentRef<any>;
|
|
24
|
-
|
|
25
|
-
/** default item Id */
|
|
26
|
-
defaultId = '';
|
|
27
|
-
|
|
28
|
-
/** default item object */
|
|
29
|
-
defaultItem: any;
|
|
30
|
-
|
|
31
|
-
/** SlickGrid grid object */
|
|
32
|
-
grid: SlickGrid;
|
|
33
|
-
|
|
34
|
-
constructor(private args: any) {
|
|
35
|
-
this.grid = args && args.grid;
|
|
36
|
-
this.init();
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/** Angular Util Service (could be inside the Grid Options Params or the Editor Params ) */
|
|
40
|
-
get angularUtilService(): AngularUtilService {
|
|
41
|
-
let angularUtilService = this.gridOptions && this.gridOptions.params && this.gridOptions.params.angularUtilService;
|
|
42
|
-
if (!angularUtilService || !(angularUtilService instanceof AngularUtilService)) {
|
|
43
|
-
angularUtilService = this.columnEditor && this.columnEditor.params && this.columnEditor.params.angularUtilService;
|
|
44
|
-
}
|
|
45
|
-
return angularUtilService;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/** Get the Collection */
|
|
49
|
-
get collection(): any[] {
|
|
50
|
-
return this.columnDef?.editor!.collection ?? [];
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/** Get Column Definition object */
|
|
54
|
-
get columnDef(): Column {
|
|
55
|
-
return this.args?.column ?? {};
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/** Get Column Editor object */
|
|
59
|
-
get columnEditor(): ColumnEditor {
|
|
60
|
-
return this.columnDef?.editor ?? {};
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/** Getter for the Grid Options pulled through the Grid Object */
|
|
64
|
-
get gridOptions(): GridOption {
|
|
65
|
-
return (this.grid?.getOptions() ?? {}) as GridOption;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
get hasAutoCommitEdit(): boolean {
|
|
69
|
-
return this.gridOptions.autoCommitEdit ?? false;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/** Get the Validator function, can be passed in Editor property or Column Definition */
|
|
73
|
-
get validator(): EditorValidator | undefined {
|
|
74
|
-
return this.columnEditor.validator || this.columnDef.validator;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
init() {
|
|
78
|
-
if (!this.columnEditor || !this.columnEditor.params.component || !(this.angularUtilService instanceof AngularUtilService)) {
|
|
79
|
-
throw new Error(`[Angular-Slickgrid] For Editor with Angular Component to work properly, you need to provide the "AngularUtilService" via the Editor "params" OR the Grid Options "params"
|
|
80
|
-
Example: this.columnDefs = [{ id: 'title', field: 'title', editor: { model: CustomEditor, collection: [...], params: { component: MyComponent, angularUtilService: this.angularUtilService }}];
|
|
81
|
-
OR this.columnDefs = [{ id: 'title', field: 'title', editor: { model: CustomEditor, collection: [...] }]; this.gridOptions = { params: { angularUtilService: this.angularUtilService }}`);
|
|
82
|
-
}
|
|
83
|
-
if (this.columnEditor?.params.component) {
|
|
84
|
-
const componentOutput = this.angularUtilService.createAngularComponentAppendToDom(
|
|
85
|
-
this.columnEditor.params.component,
|
|
86
|
-
this.args.container
|
|
87
|
-
);
|
|
88
|
-
this.componentRef = componentOutput?.componentRef;
|
|
89
|
-
|
|
90
|
-
// here we override the collection object of the Angular Component
|
|
91
|
-
// but technically you can pass any values you wish to your Component
|
|
92
|
-
Object.assign(this.componentRef.instance, { collection: this.collection });
|
|
93
|
-
|
|
94
|
-
// when our model (item object) changes, we'll call a save of the slickgrid editor
|
|
95
|
-
this._subscriptions.push(this.componentRef.instance.onItemChanged.subscribe((_item: any) => this.save()));
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
save() {
|
|
100
|
-
const validation = this.validate();
|
|
101
|
-
if (validation && validation.valid) {
|
|
102
|
-
if (this.hasAutoCommitEdit) {
|
|
103
|
-
this.args.grid.getEditorLock().commitCurrentEdit();
|
|
104
|
-
} else {
|
|
105
|
-
this.args.commitChanges();
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
cancel() {
|
|
111
|
-
this.componentRef.instance.selectedId = this.defaultId;
|
|
112
|
-
this.componentRef.instance.selectedItem = this.defaultItem;
|
|
113
|
-
if (this.args?.cancelChanges) {
|
|
114
|
-
this.args.cancelChanges();
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/** optional, implement a hide method on your Angular Component */
|
|
119
|
-
hide() {
|
|
120
|
-
if (typeof this.componentRef?.instance.hide === 'function') {
|
|
121
|
-
this.componentRef.instance.hide();
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/** optional, implement a show method on your Angular Component */
|
|
126
|
-
show() {
|
|
127
|
-
if (typeof this.componentRef?.instance.show === 'function') {
|
|
128
|
-
this.componentRef.instance.show();
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/** destroy the Angular Component & Subscription */
|
|
133
|
-
destroy() {
|
|
134
|
-
if (this.componentRef?.destroy) {
|
|
135
|
-
this.componentRef.destroy();
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
// also unsubscribe all Angular Subscriptions
|
|
139
|
-
unsubscribeAllObservables(this._subscriptions);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/** optional, implement a focus method on your Angular Component */
|
|
143
|
-
focus() {
|
|
144
|
-
if (typeof this.componentRef?.instance.focus === 'function') {
|
|
145
|
-
this.componentRef.instance.focus();
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
applyValue(item: any, state: any) {
|
|
150
|
-
item[this.columnDef.field] = state;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
getValue() {
|
|
154
|
-
return this.componentRef.instance.selectedId;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
loadValue(item: any) {
|
|
158
|
-
const itemObject = item && item[this.columnDef.field];
|
|
159
|
-
this.componentRef.instance.selectedId = (itemObject && itemObject.id) || '';
|
|
160
|
-
this.componentRef.instance.selectedItem = itemObject && itemObject;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
serializeValue(): any {
|
|
164
|
-
return this.componentRef.instance.selectedItem;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
isValueChanged() {
|
|
168
|
-
return (
|
|
169
|
-
!(this.componentRef.instance.selectedId === '' && (this.defaultId === null || this.defaultId === undefined)) &&
|
|
170
|
-
this.componentRef.instance.selectedId !== this.defaultId
|
|
171
|
-
);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
validate(): EditorValidationResult {
|
|
175
|
-
if (this.validator) {
|
|
176
|
-
const value = this.componentRef.instance.selectedId;
|
|
177
|
-
return this.validator(value, this.args);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// by default the editor is always valid
|
|
181
|
-
// if user want it to be required, he would have to provide his own validator
|
|
182
|
-
return {
|
|
183
|
-
valid: true,
|
|
184
|
-
msg: null,
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
}
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { ComponentRef } from '@angular/core';
|
|
2
|
-
import { Subscription } from 'rxjs';
|
|
3
|
-
import {
|
|
4
|
-
AngularUtilService,
|
|
5
|
-
Column,
|
|
6
|
-
ColumnFilter,
|
|
7
|
-
Filter,
|
|
8
|
-
FilterArguments,
|
|
9
|
-
FilterCallback,
|
|
10
|
-
GridOption,
|
|
11
|
-
OperatorType,
|
|
12
|
-
OperatorString,
|
|
13
|
-
SearchTerm,
|
|
14
|
-
SlickGrid,
|
|
15
|
-
unsubscribeAllObservables,
|
|
16
|
-
} from '../../library';
|
|
17
|
-
|
|
18
|
-
export class CustomAngularComponentFilter implements Filter {
|
|
19
|
-
private _shouldTriggerQuery = true;
|
|
20
|
-
private _subscriptions: Subscription[] = [];
|
|
21
|
-
|
|
22
|
-
/** Angular Component Reference */
|
|
23
|
-
componentRef!: ComponentRef<any>;
|
|
24
|
-
|
|
25
|
-
grid!: SlickGrid;
|
|
26
|
-
searchTerms: SearchTerm[] = [];
|
|
27
|
-
columnDef!: Column;
|
|
28
|
-
callback!: FilterCallback;
|
|
29
|
-
operator: OperatorType | OperatorString = OperatorType.equal;
|
|
30
|
-
|
|
31
|
-
/** Angular Util Service (could be inside the Grid Options Params or the Filter Params ) */
|
|
32
|
-
get angularUtilService(): AngularUtilService {
|
|
33
|
-
let angularUtilService = this.gridOptions?.params?.angularUtilService;
|
|
34
|
-
if (!angularUtilService || !(angularUtilService instanceof AngularUtilService)) {
|
|
35
|
-
angularUtilService = this.columnFilter?.params?.angularUtilService;
|
|
36
|
-
}
|
|
37
|
-
return angularUtilService;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/** Get the Collection */
|
|
41
|
-
get collection(): any[] {
|
|
42
|
-
return this.columnFilter?.collection || [];
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/** Getter for the Column Filter */
|
|
46
|
-
get columnFilter(): ColumnFilter {
|
|
47
|
-
return (this.columnDef && this.columnDef.filter) || {};
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/** Getter for the Grid Options pulled through the Grid Object */
|
|
51
|
-
get gridOptions(): GridOption {
|
|
52
|
-
return (this.grid?.getOptions() ?? {}) as GridOption;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Initialize the Filter
|
|
57
|
-
*/
|
|
58
|
-
init(args: FilterArguments) {
|
|
59
|
-
this.grid = args.grid as SlickGrid;
|
|
60
|
-
this.callback = args.callback;
|
|
61
|
-
this.columnDef = args.columnDef;
|
|
62
|
-
this.searchTerms = ('searchTerms' in args ? args.searchTerms : []) || [];
|
|
63
|
-
|
|
64
|
-
if (!this.columnFilter || !this.columnFilter.params.component || !(this.angularUtilService instanceof AngularUtilService)) {
|
|
65
|
-
throw new Error(`[Angular-Slickgrid] For Filter with Angular Component to work properly, you need to provide the "AngularUtilService" via the Filter "params" OR the Grid Options "params"
|
|
66
|
-
Example: this.columnDefs = [{ id: 'title', field: 'title', filter: { model: CustomFilter, collection: [...], params: { component: MyComponent, angularUtilService: this.angularUtilService }}];
|
|
67
|
-
OR this.columnDefs = [{ id: 'title', field: 'title', filter: { model: CustomFilter, collection: [...] }]; this.gridOptions = { params: { angularUtilService: this.angularUtilService }}`);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
if (this.columnFilter?.params.component) {
|
|
71
|
-
// use a delay to make sure Angular ran at least a full cycle and it finished rendering the Component before hooking onto it
|
|
72
|
-
// else we get the infamous error "ExpressionChangedAfterItHasBeenCheckedError"
|
|
73
|
-
const headerElm = this.grid.getHeaderRowColumn(this.columnDef.id);
|
|
74
|
-
if (headerElm) {
|
|
75
|
-
headerElm.innerHTML = '';
|
|
76
|
-
const componentOuput = this.angularUtilService.createAngularComponentAppendToDom(this.columnFilter.params.component, headerElm, {
|
|
77
|
-
collection: this.collection,
|
|
78
|
-
});
|
|
79
|
-
this.componentRef = componentOuput.componentRef;
|
|
80
|
-
|
|
81
|
-
this._subscriptions.push(
|
|
82
|
-
componentOuput.componentRef.instance.onItemChanged.subscribe((item: any) => {
|
|
83
|
-
this.callback(undefined, {
|
|
84
|
-
columnDef: this.columnDef,
|
|
85
|
-
operator: this.operator,
|
|
86
|
-
searchTerms: [item.id],
|
|
87
|
-
shouldTriggerQuery: this._shouldTriggerQuery,
|
|
88
|
-
});
|
|
89
|
-
// reset flag for next use
|
|
90
|
-
this._shouldTriggerQuery = true;
|
|
91
|
-
})
|
|
92
|
-
);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Clear the filter value
|
|
99
|
-
*/
|
|
100
|
-
clear(shouldTriggerQuery = true) {
|
|
101
|
-
this._shouldTriggerQuery = shouldTriggerQuery;
|
|
102
|
-
if (this.componentRef?.instance && 'selectedId' in this.componentRef.instance) {
|
|
103
|
-
this.componentRef.instance.selectedId = 0;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/** destroy the Angular Component & Subscription */
|
|
108
|
-
destroy() {
|
|
109
|
-
if (this.componentRef?.destroy) {
|
|
110
|
-
this.componentRef.destroy();
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// also unsubscribe all Angular Subscriptions
|
|
114
|
-
unsubscribeAllObservables(this._subscriptions);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/** Set value(s) on the DOM element */
|
|
118
|
-
setValues(values: SearchTerm[] | SearchTerm) {
|
|
119
|
-
if (this.componentRef?.instance && 'selectedId' in this.componentRef.instance) {
|
|
120
|
-
this.componentRef.instance.selectedId = values;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
|
|
3
|
-
@Component({
|
|
4
|
-
template: `<button (click)="sayHello(item?.title)">{{ item?.title }}</button>`,
|
|
5
|
-
standalone: false,
|
|
6
|
-
})
|
|
7
|
-
export class CustomButtonFormatterComponent {
|
|
8
|
-
item: any;
|
|
9
|
-
|
|
10
|
-
sayHello(title: string) {
|
|
11
|
-
alert(`Hello ${title}`);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { Column, ColumnEditor, Editor, EditorValidator, EditorValidationResult } from '../../library';
|
|
2
|
-
|
|
3
|
-
/*
|
|
4
|
-
* An example of a 'detached' editor.
|
|
5
|
-
* KeyDown events are also handled to provide handling for Tab, Shift-Tab, Esc and Ctrl-Enter.
|
|
6
|
-
*/
|
|
7
|
-
export class CustomInputEditor implements Editor {
|
|
8
|
-
private _lastInputEvent?: KeyboardEvent;
|
|
9
|
-
inputElm!: HTMLInputElement;
|
|
10
|
-
defaultValue: any;
|
|
11
|
-
|
|
12
|
-
constructor(private args: any) {
|
|
13
|
-
this.init();
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/** Get Column Definition object */
|
|
17
|
-
get columnDef(): Column {
|
|
18
|
-
return this.args?.column ?? {};
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/** Get Column Editor object */
|
|
22
|
-
get columnEditor(): ColumnEditor {
|
|
23
|
-
return this.columnDef?.editor ?? {};
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
get hasAutoCommitEdit(): boolean {
|
|
27
|
-
return this.args.grid.getOptions().autoCommitEdit ?? false;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/** Get the Validator function, can be passed in Editor property or Column Definition */
|
|
31
|
-
get validator(): EditorValidator | undefined {
|
|
32
|
-
return this.columnEditor.validator || this.columnDef.validator;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
init(): void {
|
|
36
|
-
const placeholder = this.columnEditor?.placeholder || '';
|
|
37
|
-
const title = this.columnEditor?.title || '';
|
|
38
|
-
|
|
39
|
-
this.inputElm = document.createElement('input');
|
|
40
|
-
this.inputElm.type = 'text';
|
|
41
|
-
this.inputElm.className = 'editor-text';
|
|
42
|
-
this.inputElm.placeholder = placeholder;
|
|
43
|
-
this.inputElm.title = title;
|
|
44
|
-
|
|
45
|
-
this.args.container.appendChild(this.inputElm);
|
|
46
|
-
|
|
47
|
-
this.inputElm.addEventListener('keydown', this.onKeydown.bind(this));
|
|
48
|
-
|
|
49
|
-
// the lib does not get the focus out event for some reason
|
|
50
|
-
// so register it here
|
|
51
|
-
if (this.hasAutoCommitEdit) {
|
|
52
|
-
this.inputElm.addEventListener('focusout', this.save.bind(this));
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
setTimeout(() => {
|
|
56
|
-
this.inputElm.focus();
|
|
57
|
-
this.inputElm.select();
|
|
58
|
-
}, 50);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
onKeydown(event: KeyboardEvent) {
|
|
62
|
-
this._lastInputEvent = event;
|
|
63
|
-
if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {
|
|
64
|
-
event.stopImmediatePropagation();
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
destroy() {
|
|
69
|
-
this.inputElm.removeEventListener('keydown', this.onKeydown.bind(this));
|
|
70
|
-
this.inputElm.removeEventListener('focusout', this.save.bind(this));
|
|
71
|
-
this.inputElm.remove();
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
focus() {
|
|
75
|
-
this.inputElm.focus();
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
getValue() {
|
|
79
|
-
return this.inputElm.value;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
setValue(val: string) {
|
|
83
|
-
this.inputElm.value = val;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
loadValue(item: any) {
|
|
87
|
-
this.defaultValue = item[this.args.column.field] || '';
|
|
88
|
-
this.inputElm.value = this.defaultValue;
|
|
89
|
-
this.inputElm.defaultValue = this.defaultValue;
|
|
90
|
-
this.inputElm.select();
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
serializeValue() {
|
|
94
|
-
return this.inputElm.value;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
applyValue(item: any, state: any) {
|
|
98
|
-
const validation = this.validate(state);
|
|
99
|
-
item[this.args.column.field] = validation && validation.valid ? state : '';
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
isValueChanged() {
|
|
103
|
-
const lastKeyEvent = this._lastInputEvent?.key;
|
|
104
|
-
if (this.columnEditor?.alwaysSaveOnEnterKey && lastKeyEvent === 'Enter') {
|
|
105
|
-
return true;
|
|
106
|
-
}
|
|
107
|
-
return !(this.inputElm.value === '' && this.defaultValue === null) && this.inputElm.value !== this.defaultValue;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
save() {
|
|
111
|
-
const validation = this.validate();
|
|
112
|
-
if (validation?.valid) {
|
|
113
|
-
if (this.hasAutoCommitEdit) {
|
|
114
|
-
this.args.grid.getEditorLock().commitCurrentEdit();
|
|
115
|
-
} else {
|
|
116
|
-
this.args.commitChanges();
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
validate(inputValue?: any): EditorValidationResult {
|
|
122
|
-
if (this.validator) {
|
|
123
|
-
const value = inputValue !== undefined ? inputValue : this.inputElm?.value;
|
|
124
|
-
return this.validator(value, this.args);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
return {
|
|
128
|
-
valid: true,
|
|
129
|
-
msg: null,
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
}
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Column,
|
|
3
|
-
ColumnFilter,
|
|
4
|
-
Filter,
|
|
5
|
-
FilterArguments,
|
|
6
|
-
FilterCallback,
|
|
7
|
-
GridOption,
|
|
8
|
-
OperatorType,
|
|
9
|
-
OperatorString,
|
|
10
|
-
SearchTerm,
|
|
11
|
-
SlickGrid,
|
|
12
|
-
} from '../../library';
|
|
13
|
-
|
|
14
|
-
export class CustomInputFilter implements Filter {
|
|
15
|
-
private _clearFilterTriggered = false;
|
|
16
|
-
private _shouldTriggerQuery = true;
|
|
17
|
-
private filterElm!: HTMLInputElement;
|
|
18
|
-
grid!: SlickGrid;
|
|
19
|
-
searchTerms: SearchTerm[] = [];
|
|
20
|
-
columnDef!: Column;
|
|
21
|
-
callback!: FilterCallback;
|
|
22
|
-
operator: OperatorType | OperatorString = OperatorType.equal;
|
|
23
|
-
|
|
24
|
-
/** Getter for the Column Filter */
|
|
25
|
-
get columnFilter(): ColumnFilter {
|
|
26
|
-
return this.columnDef?.filter ?? {};
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/** Getter for the Grid Options pulled through the Grid Object */
|
|
30
|
-
get gridOptions(): GridOption {
|
|
31
|
-
return (this.grid?.getOptions() ?? {}) as GridOption;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Initialize the Filter
|
|
36
|
-
*/
|
|
37
|
-
init(args: FilterArguments) {
|
|
38
|
-
this.grid = args.grid as SlickGrid;
|
|
39
|
-
this.callback = args.callback;
|
|
40
|
-
this.columnDef = args.columnDef;
|
|
41
|
-
this.searchTerms = ('searchTerms' in args ? args.searchTerms : []) || [];
|
|
42
|
-
|
|
43
|
-
// filter input can only have 1 search term, so we will use the 1st array index if it exist
|
|
44
|
-
const searchTerm = Array.isArray(this.searchTerms) && this.searchTerms.length >= 0 ? this.searchTerms[0] : '';
|
|
45
|
-
|
|
46
|
-
// step 2, create the DOM Element of the filter & initialize it if searchTerm is filled
|
|
47
|
-
this.filterElm = this.createFilterElement(searchTerm);
|
|
48
|
-
|
|
49
|
-
// step 3, subscribe to the keyup event and run the callback when that happens
|
|
50
|
-
this.filterElm?.addEventListener('keyup', this.onKeyup.bind(this));
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Clear the filter value
|
|
55
|
-
*/
|
|
56
|
-
clear(shouldTriggerQuery = true) {
|
|
57
|
-
if (this.filterElm) {
|
|
58
|
-
this._clearFilterTriggered = true;
|
|
59
|
-
this._shouldTriggerQuery = shouldTriggerQuery;
|
|
60
|
-
this.filterElm.value = '';
|
|
61
|
-
this.filterElm.dispatchEvent(new Event('keyup'));
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* destroy the filter
|
|
67
|
-
*/
|
|
68
|
-
destroy() {
|
|
69
|
-
this.filterElm?.removeEventListener('keyup', this.onKeyup.bind(this));
|
|
70
|
-
this.filterElm?.remove();
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/** Set value(s) on the DOM element */
|
|
74
|
-
setValues(values: SearchTerm | SearchTerm[]) {
|
|
75
|
-
if (values && this.filterElm) {
|
|
76
|
-
this.filterElm.value = values as string;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
//
|
|
81
|
-
// private functions
|
|
82
|
-
// ------------------
|
|
83
|
-
|
|
84
|
-
private onKeyup(e: KeyboardEvent) {
|
|
85
|
-
let value = (e as KeyboardEvent & { target: HTMLInputElement })?.target?.value ?? '';
|
|
86
|
-
const enableWhiteSpaceTrim = this.gridOptions.enableFilterTrimWhiteSpace || this.columnFilter.enableTrimWhiteSpace;
|
|
87
|
-
if (typeof value === 'string' && enableWhiteSpaceTrim) {
|
|
88
|
-
value = value.trim();
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
if (this._clearFilterTriggered) {
|
|
92
|
-
this.callback(e, {
|
|
93
|
-
columnDef: this.columnDef,
|
|
94
|
-
clearFilterTriggered: this._clearFilterTriggered,
|
|
95
|
-
shouldTriggerQuery: this._shouldTriggerQuery,
|
|
96
|
-
});
|
|
97
|
-
this.filterElm?.classList.remove('filled');
|
|
98
|
-
} else {
|
|
99
|
-
value === '' ? this.filterElm?.classList.remove('filled') : this.filterElm?.classList.add('filled');
|
|
100
|
-
this.callback(e, { columnDef: this.columnDef, searchTerms: [value], shouldTriggerQuery: this._shouldTriggerQuery });
|
|
101
|
-
}
|
|
102
|
-
// reset both flags for next use
|
|
103
|
-
this._clearFilterTriggered = false;
|
|
104
|
-
this._shouldTriggerQuery = true;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* From the html template string, create a DOM element
|
|
109
|
-
* @param filterTemplate
|
|
110
|
-
*/
|
|
111
|
-
private createFilterElement(searchTerm?: SearchTerm) {
|
|
112
|
-
const headerElm = this.grid.getHeaderRowColumn(this.columnDef.id);
|
|
113
|
-
if (headerElm) {
|
|
114
|
-
headerElm.innerHTML = '';
|
|
115
|
-
|
|
116
|
-
let placeholder = this.gridOptions?.defaultFilterPlaceholder ?? '';
|
|
117
|
-
if (this.columnFilter?.placeholder) {
|
|
118
|
-
placeholder = this.columnFilter.placeholder;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// create the DOM element & add an ID and filter class
|
|
122
|
-
this.filterElm = document.createElement('input');
|
|
123
|
-
this.filterElm.type = 'text';
|
|
124
|
-
this.filterElm.className = 'form-control search-filter';
|
|
125
|
-
this.filterElm.placeholder = placeholder;
|
|
126
|
-
this.filterElm.value = `${searchTerm || ''}`;
|
|
127
|
-
this.filterElm.dataset.columnid = `${this.columnDef.id}`;
|
|
128
|
-
|
|
129
|
-
// append the new DOM element to the header row
|
|
130
|
-
headerElm.appendChild(this.filterElm);
|
|
131
|
-
}
|
|
132
|
-
return this.filterElm;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
[
|
|
2
|
-
{ "value": 0, "label": 0, "prefix": "Task", "suffix": "day" }, { "value": 1, "label": 1, "prefix": "Task", "suffix": "day" }, { "value": 2, "label": 2, "prefix": "Task", "suffix": "days" }, { "value": 3, "label": 3, "prefix": "Task", "suffix": "days" }, { "value": 4, "label": 4, "prefix": "Task", "suffix": "days" }, { "value": 5, "label": 5, "prefix": "Task", "suffix": "days" }, { "value": 6, "label": 6, "prefix": "Task", "suffix": "days" }, { "value": 7, "label": 7, "prefix": "Task", "suffix": "days" }, { "value": 8, "label": 8, "prefix": "Task", "suffix": "days" }, { "value": 9, "label": 9, "prefix": "Task", "suffix": "days" },
|
|
3
|
-
{ "value": 10, "label": 10, "prefix": "Task", "suffix": "days" }, { "value": 11, "label": 11, "prefix": "Task", "suffix": "days" }, { "value": 12, "label": 12, "prefix": "Task", "suffix": "days" }, { "value": 13, "label": 13, "prefix": "Task", "suffix": "days" }, { "value": 14, "label": 14, "prefix": "Task", "suffix": "days" }, { "value": 15, "label": 15, "prefix": "Task", "suffix": "days" }, { "value": 16, "label": 16, "prefix": "Task", "suffix": "days" }, { "value": 17, "label": 17, "prefix": "Task", "suffix": "days" }, { "value": 18, "label": 18, "prefix": "Task", "suffix": "days" }, { "value": 19, "label": 19, "prefix": "Task", "suffix": "days" },
|
|
4
|
-
{ "value": 20, "label": 20, "prefix": "Task", "suffix": "days" }, { "value": 21, "label": 21, "prefix": "Task", "suffix": "days" }, { "value": 22, "label": 22, "prefix": "Task", "suffix": "days" }, { "value": 23, "label": 23, "prefix": "Task", "suffix": "days" }, { "value": 24, "label": 24, "prefix": "Task", "suffix": "days" }, { "value": 25, "label": 25, "prefix": "Task", "suffix": "days" }, { "value": 26, "label": 26, "prefix": "Task", "suffix": "days" }, { "value": 27, "label": 27, "prefix": "Task", "suffix": "days" }, { "value": 28, "label": 28, "prefix": "Task", "suffix": "days" }, { "value": 29, "label": 29, "prefix": "Task", "suffix": "days" },
|
|
5
|
-
{ "value": 30, "label": 30, "prefix": "Task", "suffix": "days" }, { "value": 31, "label": 31, "prefix": "Task", "suffix": "days" }, { "value": 32, "label": 32, "prefix": "Task", "suffix": "days" }, { "value": 33, "label": 33, "prefix": "Task", "suffix": "days" }, { "value": 34, "label": 34, "prefix": "Task", "suffix": "days" }, { "value": 35, "label": 35, "prefix": "Task", "suffix": "days" }, { "value": 36, "label": 36, "prefix": "Task", "suffix": "days" }, { "value": 37, "label": 37, "prefix": "Task", "suffix": "days" }, { "value": 38, "label": 38, "prefix": "Task", "suffix": "days" }, { "value": 39, "label": 39, "prefix": "Task", "suffix": "days" },
|
|
6
|
-
{ "value": 40, "label": 40, "prefix": "Task", "suffix": "days" }, { "value": 41, "label": 41, "prefix": "Task", "suffix": "days" }, { "value": 42, "label": 42, "prefix": "Task", "suffix": "days" }, { "value": 43, "label": 43, "prefix": "Task", "suffix": "days" }, { "value": 44, "label": 44, "prefix": "Task", "suffix": "days" }, { "value": 45, "label": 45, "prefix": "Task", "suffix": "days" }, { "value": 46, "label": 46, "prefix": "Task", "suffix": "days" }, { "value": 47, "label": 47, "prefix": "Task", "suffix": "days" }, { "value": 48, "label": 48, "prefix": "Task", "suffix": "days" }, { "value": 49, "label": 49, "prefix": "Task", "suffix": "days" },
|
|
7
|
-
{ "value": 50, "label": 50, "prefix": "Task", "suffix": "days" }, { "value": 51, "label": 51, "prefix": "Task", "suffix": "days" }, { "value": 52, "label": 52, "prefix": "Task", "suffix": "days" }, { "value": 53, "label": 53, "prefix": "Task", "suffix": "days" }, { "value": 54, "label": 54, "prefix": "Task", "suffix": "days" }, { "value": 55, "label": 55, "prefix": "Task", "suffix": "days" }, { "value": 56, "label": 56, "prefix": "Task", "suffix": "days" }, { "value": 57, "label": 57, "prefix": "Task", "suffix": "days" }, { "value": 58, "label": 58, "prefix": "Task", "suffix": "days" }, { "value": 59, "label": 59, "prefix": "Task", "suffix": "days" },
|
|
8
|
-
{ "value": 60, "label": 60, "prefix": "Task", "suffix": "days" }, { "value": 61, "label": 61, "prefix": "Task", "suffix": "days" }, { "value": 62, "label": 62, "prefix": "Task", "suffix": "days" }, { "value": 63, "label": 63, "prefix": "Task", "suffix": "days" }, { "value": 64, "label": 64, "prefix": "Task", "suffix": "days" }, { "value": 65, "label": 65, "prefix": "Task", "suffix": "days" }, { "value": 66, "label": 66, "prefix": "Task", "suffix": "days" }, { "value": 67, "label": 67, "prefix": "Task", "suffix": "days" }, { "value": 68, "label": 68, "prefix": "Task", "suffix": "days" }, { "value": 69, "label": 69, "prefix": "Task", "suffix": "days" },
|
|
9
|
-
{ "value": 70, "label": 70, "prefix": "Task", "suffix": "days" }, { "value": 71, "label": 71, "prefix": "Task", "suffix": "days" }, { "value": 72, "label": 72, "prefix": "Task", "suffix": "days" }, { "value": 73, "label": 73, "prefix": "Task", "suffix": "days" }, { "value": 74, "label": 74, "prefix": "Task", "suffix": "days" }, { "value": 75, "label": 75, "prefix": "Task", "suffix": "days" }, { "value": 76, "label": 76, "prefix": "Task", "suffix": "days" }, { "value": 77, "label": 77, "prefix": "Task", "suffix": "days" }, { "value": 78, "label": 78, "prefix": "Task", "suffix": "days" }, { "value": 79, "label": 79, "prefix": "Task", "suffix": "days" },
|
|
10
|
-
{ "value": 80, "label": 80, "prefix": "Task", "suffix": "days" }, { "value": 81, "label": 81, "prefix": "Task", "suffix": "days" }, { "value": 82, "label": 82, "prefix": "Task", "suffix": "days" }, { "value": 83, "label": 83, "prefix": "Task", "suffix": "days" }, { "value": 84, "label": 84, "prefix": "Task", "suffix": "days" }, { "value": 85, "label": 85, "prefix": "Task", "suffix": "days" }, { "value": 86, "label": 86, "prefix": "Task", "suffix": "days" }, { "value": 87, "label": 87, "prefix": "Task", "suffix": "days" }, { "value": 88, "label": 88, "prefix": "Task", "suffix": "days" }, { "value": 89, "label": 89, "prefix": "Task", "suffix": "days" },
|
|
11
|
-
{ "value": 90, "label": 90, "prefix": "Task", "suffix": "days" }, { "value": 91, "label": 91, "prefix": "Task", "suffix": "days" }, { "value": 92, "label": 92, "prefix": "Task", "suffix": "days" }, { "value": 93, "label": 93, "prefix": "Task", "suffix": "days" }, { "value": 94, "label": 94, "prefix": "Task", "suffix": "days" }, { "value": 95, "label": 95, "prefix": "Task", "suffix": "days" }, { "value": 96, "label": 96, "prefix": "Task", "suffix": "days" }, { "value": 97, "label": 97, "prefix": "Task", "suffix": "days" }, { "value": 98, "label": 98, "prefix": "Task", "suffix": "days" }, { "value": 99, "label": 99, "prefix": "Task", "suffix": "days" }
|
|
12
|
-
]
|