angular-slickgrid 4.1.4 → 4.2.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/README.md +182 -180
- package/app/modules/angular-slickgrid/components/angular-slickgrid.component.d.ts +2 -2
- package/app/modules/angular-slickgrid/extensions/slickRowDetailView.d.ts +0 -2
- package/esm2020/app/modules/angular-slickgrid/components/angular-slickgrid.component.mjs +15 -12
- package/esm2020/app/modules/angular-slickgrid/extensions/slickRowDetailView.mjs +1 -3
- package/esm2020/app/modules/angular-slickgrid/modules/angular-slickgrid.module.mjs +7 -10
- package/esm2020/app/modules/angular-slickgrid/services/angularUtil.service.mjs +3 -3
- package/esm2020/app/modules/angular-slickgrid/services/bsDropdown.service.mjs +3 -3
- package/esm2020/app/modules/angular-slickgrid/services/container.service.mjs +3 -3
- package/esm2020/app/modules/angular-slickgrid/services/translater.service.mjs +3 -3
- package/fesm2015/angular-slickgrid.mjs +32 -34
- package/fesm2015/angular-slickgrid.mjs.map +1 -1
- package/fesm2020/angular-slickgrid.mjs +32 -34
- package/fesm2020/angular-slickgrid.mjs.map +1 -1
- package/{angular-slickgrid.d.ts → index.d.ts} +0 -0
- package/package.json +14 -15
- package/test/cypress/node_modules/@cypress/request/README.md +1038 -0
- package/test/cypress/node_modules/@cypress/xvfb/README.md +48 -0
- package/test/cypress/node_modules/@cypress/xvfb/node_modules/debug/README.md +437 -0
- package/test/cypress/node_modules/@types/node/README.md +16 -0
- package/test/cypress/node_modules/@types/sinonjs__fake-timers/README.md +16 -0
- package/test/cypress/node_modules/@types/sizzle/README.md +16 -0
- package/test/cypress/node_modules/@types/yauzl/README.md +16 -0
- package/test/cypress/node_modules/@types/yauzl/node_modules/@types/node/README.md +16 -0
- package/test/cypress/node_modules/aggregate-error/README.md +61 -0
- package/test/cypress/node_modules/ansi-colors/README.md +315 -0
- package/test/cypress/node_modules/ansi-escapes/README.md +245 -0
- package/test/cypress/node_modules/ansi-regex/README.md +78 -0
- package/test/cypress/node_modules/ansi-styles/README.md +152 -0
- package/test/cypress/node_modules/arch/README.md +71 -0
- package/test/cypress/node_modules/asn1/README.md +50 -0
- package/test/cypress/node_modules/assert-plus/README.md +162 -0
- package/test/cypress/node_modules/astral-regex/README.md +46 -0
- package/test/cypress/node_modules/async/README.md +60 -0
- package/test/cypress/node_modules/asynckit/README.md +233 -0
- package/test/cypress/node_modules/at-least-node/README.md +25 -0
- package/test/cypress/node_modules/aws-sign2/README.md +4 -0
- package/test/cypress/node_modules/aws4/README.md +183 -0
- package/test/cypress/node_modules/balanced-match/README.md +91 -0
- package/test/cypress/node_modules/base64-js/README.md +34 -0
- package/test/cypress/node_modules/bcrypt-pbkdf/README.md +45 -0
- package/test/cypress/node_modules/blob-util/README.md +623 -0
- package/test/cypress/node_modules/bluebird/README.md +57 -0
- package/test/cypress/node_modules/brace-expansion/README.md +129 -0
- package/test/cypress/node_modules/buffer/README.md +410 -0
- package/test/cypress/node_modules/buffer-crc32/README.md +47 -0
- package/test/cypress/node_modules/cachedir/README.md +27 -0
- package/test/cypress/node_modules/caseless/README.md +45 -0
- package/test/cypress/node_modules/chalk/README.md +293 -0
- package/test/cypress/node_modules/chalk/node_modules/supports-color/README.md +76 -0
- package/test/cypress/node_modules/check-more-types/README.md +952 -0
- package/test/cypress/node_modules/ci-info/README.md +114 -0
- package/test/cypress/node_modules/clean-stack/README.md +76 -0
- package/test/cypress/node_modules/cli-cursor/README.md +55 -0
- package/test/cypress/node_modules/cli-table3/README.md +218 -0
- package/test/cypress/node_modules/cli-truncate/README.md +139 -0
- package/test/cypress/node_modules/color-convert/README.md +68 -0
- package/test/cypress/node_modules/color-name/README.md +11 -0
- package/test/cypress/node_modules/colorette/README.md +102 -0
- package/test/cypress/node_modules/colors/README.md +221 -0
- package/test/cypress/node_modules/combined-stream/README.md +138 -0
- package/test/cypress/node_modules/commander/README.md +737 -0
- package/test/cypress/node_modules/common-tags/README.md +687 -0
- package/test/cypress/node_modules/core-util-is/README.md +3 -0
- package/test/cypress/node_modules/cross-spawn/README.md +96 -0
- package/test/cypress/node_modules/cypress/README.md +25 -0
- package/test/cypress/node_modules/cypress/mount-utils/README.md +14 -0
- package/test/cypress/node_modules/cypress/react/README.md +414 -0
- package/test/cypress/node_modules/cypress/vue/README.md +678 -0
- package/test/cypress/node_modules/cypress/vue2/README.md +693 -0
- package/test/cypress/node_modules/dashdash/README.md +574 -0
- package/test/cypress/node_modules/dayjs/README.md +128 -0
- package/test/cypress/node_modules/debug/README.md +455 -0
- package/test/cypress/node_modules/delayed-stream/README.md +141 -0
- package/test/cypress/node_modules/ecc-jsbn/README.md +8 -0
- package/test/cypress/node_modules/emoji-regex/README.md +73 -0
- package/test/cypress/node_modules/end-of-stream/README.md +54 -0
- package/test/cypress/node_modules/enquirer/README.md +1752 -0
- package/test/cypress/node_modules/escape-string-regexp/README.md +27 -0
- package/test/cypress/node_modules/eventemitter2/README.md +809 -0
- package/test/cypress/node_modules/execa/README.md +656 -0
- package/test/cypress/node_modules/executable/README.md +64 -0
- package/test/cypress/node_modules/extend/README.md +81 -0
- package/test/cypress/node_modules/extract-zip/README.md +57 -0
- package/test/cypress/node_modules/extract-zip/node_modules/debug/README.md +455 -0
- package/test/cypress/node_modules/extsprintf/README.md +46 -0
- package/test/cypress/node_modules/fd-slicer/README.md +199 -0
- package/test/cypress/node_modules/figures/README.md +139 -0
- package/test/cypress/node_modules/forever-agent/README.md +4 -0
- package/test/cypress/node_modules/form-data/README.md +234 -0
- package/test/cypress/node_modules/fs-extra/README.md +264 -0
- package/test/cypress/node_modules/fs.realpath/README.md +33 -0
- package/test/cypress/node_modules/get-stream/README.md +124 -0
- package/test/cypress/node_modules/getos/README.md +79 -0
- package/test/cypress/node_modules/getpass/README.md +32 -0
- package/test/cypress/node_modules/glob/README.md +375 -0
- package/test/cypress/node_modules/global-dirs/README.md +72 -0
- package/test/cypress/node_modules/graceful-fs/README.md +133 -0
- package/test/cypress/node_modules/has-flag/README.md +89 -0
- package/test/cypress/node_modules/http-signature/README.md +80 -0
- package/test/cypress/node_modules/human-signals/README.md +155 -0
- package/test/cypress/node_modules/ieee754/README.md +51 -0
- package/test/cypress/node_modules/indent-string/README.md +70 -0
- package/test/cypress/node_modules/inflight/README.md +37 -0
- package/test/cypress/node_modules/inherits/README.md +42 -0
- package/test/cypress/node_modules/ini/README.md +102 -0
- package/test/cypress/node_modules/is-ci/README.md +50 -0
- package/test/cypress/node_modules/is-fullwidth-code-point/README.md +39 -0
- package/test/cypress/node_modules/is-installed-globally/README.md +31 -0
- package/test/cypress/node_modules/is-path-inside/README.md +63 -0
- package/test/cypress/node_modules/is-stream/README.md +57 -0
- package/test/cypress/node_modules/is-typedarray/README.md +16 -0
- package/test/cypress/node_modules/isexe/README.md +51 -0
- package/test/cypress/node_modules/isstream/README.md +66 -0
- package/test/cypress/node_modules/jsbn/README.md +175 -0
- package/test/cypress/node_modules/json-schema/README.md +3 -0
- package/test/cypress/node_modules/json-stringify-safe/README.md +52 -0
- package/test/cypress/node_modules/jsonfile/README.md +205 -0
- package/test/cypress/node_modules/jsonfile/node_modules/universalify/README.md +76 -0
- package/test/cypress/node_modules/jsprim/README.md +287 -0
- package/test/cypress/node_modules/lazy-ass/README.md +269 -0
- package/test/cypress/node_modules/listr2/README.md +17 -0
- package/test/cypress/node_modules/lodash/README.md +39 -0
- package/test/cypress/node_modules/lodash.once/README.md +18 -0
- package/test/cypress/node_modules/log-symbols/README.md +51 -0
- package/test/cypress/node_modules/log-update/README.md +97 -0
- package/test/cypress/node_modules/log-update/node_modules/slice-ansi/README.md +66 -0
- package/test/cypress/node_modules/log-update/node_modules/wrap-ansi/README.md +97 -0
- package/test/cypress/node_modules/lru-cache/README.md +166 -0
- package/test/cypress/node_modules/merge-stream/README.md +78 -0
- package/test/cypress/node_modules/mime-db/README.md +102 -0
- package/test/cypress/node_modules/mime-types/README.md +123 -0
- package/test/cypress/node_modules/mimic-fn/README.md +69 -0
- package/test/cypress/node_modules/minimatch/README.md +209 -0
- package/test/cypress/node_modules/ms/README.md +60 -0
- package/test/cypress/node_modules/npm-run-path/README.md +115 -0
- package/test/cypress/node_modules/once/README.md +79 -0
- package/test/cypress/node_modules/onetime/README.md +94 -0
- package/test/cypress/node_modules/ospath/README.md +53 -0
- package/test/cypress/node_modules/p-map/README.md +89 -0
- package/test/cypress/node_modules/path-is-absolute/README.md +59 -0
- package/test/cypress/node_modules/path-key/README.md +61 -0
- package/test/cypress/node_modules/pend/README.md +41 -0
- package/test/cypress/node_modules/performance-now/README.md +30 -0
- package/test/cypress/node_modules/pify/README.md +119 -0
- package/test/cypress/node_modules/pretty-bytes/README.md +131 -0
- package/test/cypress/node_modules/proxy-from-env/README.md +131 -0
- package/test/cypress/node_modules/psl/README.md +215 -0
- package/test/cypress/node_modules/pump/README.md +65 -0
- package/test/cypress/node_modules/punycode/README.md +122 -0
- package/test/cypress/node_modules/qs/README.md +475 -0
- package/test/cypress/node_modules/request-progress/README.md +78 -0
- package/test/cypress/node_modules/restore-cursor/README.md +26 -0
- package/test/cypress/node_modules/rimraf/README.md +101 -0
- package/test/cypress/node_modules/rxjs/README.md +147 -0
- package/test/cypress/node_modules/rxjs/_esm2015/README.md +147 -0
- package/test/cypress/node_modules/rxjs/_esm5/README.md +147 -0
- package/test/cypress/node_modules/rxjs/src/README.md +147 -0
- package/test/cypress/node_modules/safe-buffer/README.md +584 -0
- package/test/cypress/node_modules/safer-buffer/README.md +156 -0
- package/test/cypress/node_modules/semver/README.md +566 -0
- package/test/cypress/node_modules/shebang-command/README.md +34 -0
- package/test/cypress/node_modules/shebang-regex/README.md +33 -0
- package/test/cypress/node_modules/signal-exit/README.md +39 -0
- package/test/cypress/node_modules/slice-ansi/README.md +72 -0
- package/test/cypress/node_modules/sshpk/README.md +804 -0
- package/test/cypress/node_modules/string-width/README.md +50 -0
- package/test/cypress/node_modules/strip-ansi/README.md +46 -0
- package/test/cypress/node_modules/strip-final-newline/README.md +30 -0
- package/test/cypress/node_modules/supports-color/README.md +77 -0
- package/test/cypress/node_modules/throttleit/README.md +32 -0
- package/test/cypress/node_modules/tmp/README.md +365 -0
- package/test/cypress/node_modules/tough-cookie/README.md +527 -0
- package/test/cypress/node_modules/tslib/README.md +142 -0
- package/test/cypress/node_modules/tunnel-agent/README.md +4 -0
- package/test/cypress/node_modules/tweetnacl/README.md +459 -0
- package/test/cypress/node_modules/type-fest/README.md +760 -0
- package/test/cypress/node_modules/universalify/README.md +76 -0
- package/test/cypress/node_modules/untildify/README.md +30 -0
- package/test/cypress/node_modules/uuid/README.md +505 -0
- package/test/cypress/node_modules/verror/README.md +528 -0
- package/test/cypress/node_modules/verror/node_modules/extsprintf/README.md +46 -0
- package/test/cypress/node_modules/which/README.md +54 -0
- package/test/cypress/node_modules/wrap-ansi/README.md +91 -0
- package/test/cypress/node_modules/wrappy/README.md +36 -0
- package/test/cypress/node_modules/yallist/README.md +204 -0
- package/test/cypress/node_modules/yauzl/README.md +658 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-slickgrid.mjs","sources":["../../src/app/modules/angular-slickgrid/services/angularUtil.service.ts","../../src/app/modules/angular-slickgrid/services/bsDropdown.service.ts","../../src/app/modules/angular-slickgrid/services/container.service.ts","../../src/app/modules/angular-slickgrid/services/translater.service.ts","../../src/app/modules/angular-slickgrid/services/utilities.ts","../../src/app/modules/angular-slickgrid/extensions/slickRowDetailView.ts","../../src/app/modules/angular-slickgrid/global-grid-options.ts","../../src/app/modules/angular-slickgrid/slickgrid-config.ts","../../src/app/modules/angular-slickgrid/constants.ts","../../src/app/modules/angular-slickgrid/components/angular-slickgrid.component.ts","../../src/app/modules/angular-slickgrid/components/angular-slickgrid.component.html","../../src/app/modules/angular-slickgrid/modules/angular-slickgrid.module.ts","../../src/angular-slickgrid.ts"],"sourcesContent":["import { AngularComponentOutput } from '../models/angularComponentOutput.interface';\r\nimport { ApplicationRef, ComponentFactoryResolver, EmbeddedViewRef, Injectable, Injector } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class AngularUtilService {\r\n constructor(\r\n private compFactoryResolver: ComponentFactoryResolver,\r\n private appRef: ApplicationRef,\r\n private injector: Injector,\r\n ) { }\r\n\r\n // ref https://hackernoon.com/angular-pro-tip-how-to-dynamically-create-components-in-body-ba200cc289e6\r\n createAngularComponent(component: any): AngularComponentOutput {\r\n // Create a component reference from the component\r\n const componentRef = this.compFactoryResolver\r\n .resolveComponentFactory(component)\r\n .create(this.injector);\r\n\r\n // Attach component to the appRef so that it's inside the ng component tree\r\n this.appRef.attachView(componentRef.hostView);\r\n\r\n // Get DOM element from component\r\n let domElem;\r\n const viewRef = (componentRef.hostView as EmbeddedViewRef<any>);\r\n if (viewRef && Array.isArray(viewRef.rootNodes) && viewRef.rootNodes[0]) {\r\n domElem = viewRef.rootNodes[0] as HTMLElement;\r\n }\r\n\r\n return { componentRef, domElement: domElem as HTMLElement };\r\n }\r\n\r\n // ref https://hackernoon.com/angular-pro-tip-how-to-dynamically-create-components-in-body-ba200cc289e6\r\n createAngularComponentAppendToDom(component: any, targetElement?: HTMLElement | Element, clearTargetContent = false): AngularComponentOutput {\r\n const componentOutput = this.createAngularComponent(component);\r\n\r\n // Append DOM element to the HTML element specified\r\n if (targetElement && targetElement.appendChild) {\r\n if (clearTargetContent && targetElement.innerHTML) {\r\n targetElement.innerHTML = '';\r\n }\r\n targetElement.appendChild(componentOutput.domElement);\r\n } else {\r\n document.body.appendChild(componentOutput.domElement); // when no target provided, we'll simply add it to the HTML Body\r\n }\r\n\r\n return componentOutput;\r\n }\r\n}\r\n","\r\nimport { Injectable } from '@angular/core';\r\nimport { AngularUtilService } from './angularUtil.service';\r\n\r\ninterface DropDownServiceParams {\r\n /** the custom action formatter component that contains the dropdown */\r\n component: any;\r\n\r\n /** help to get the data context */\r\n args: any;\r\n\r\n /** parent container */\r\n parent: any;\r\n\r\n /** Offset bottom when using a Drop Up, if we need to reposition the dropdown component */\r\n offsetDropupBottom?: number;\r\n\r\n /** Offset left if we need to reposition the dropdown component */\r\n offsetLeft?: number;\r\n\r\n /** Offset top if we need to reposition the dropdown component */\r\n offsetTop?: number;\r\n}\r\n\r\n// using external non-typed js libraries\r\ndeclare const $: any;\r\n\r\n// Boostrap dropdown service\r\n@Injectable()\r\nexport class BsDropDownService {\r\n private _domContainerElement: any;\r\n private _domElement: any;\r\n\r\n constructor(private angularUtilService: AngularUtilService) { }\r\n\r\n get domElement() {\r\n return this._domElement;\r\n }\r\n\r\n get domContainerElement() {\r\n return this._domContainerElement;\r\n }\r\n\r\n get gridViewport() {\r\n return $('.slick-viewport');\r\n }\r\n\r\n dispose() {\r\n if (this._domElement && this._domElement.remove) {\r\n this._domElement.remove();\r\n }\r\n }\r\n\r\n dropContainerShow() {\r\n if (this._domContainerElement && this._domContainerElement.show) {\r\n this._domContainerElement.show();\r\n }\r\n }\r\n\r\n render(dropdownParams: DropDownServiceParams) {\r\n return new Promise((resolve) => {\r\n const { component, args, parent, offsetTop, offsetLeft, offsetDropupBottom } = dropdownParams;\r\n\r\n const cell = args.cell;\r\n const row = args.row;\r\n\r\n this._domContainerElement = $(`#myDrop-r${row}-c${cell}`);\r\n\r\n if (this._domContainerElement) {\r\n // hide the dropdown we created as a formatter Component, we'll redisplay it later\r\n const cellPos = this._domContainerElement.offset();\r\n\r\n const componentOutput = this.angularUtilService.createAngularComponent(component);\r\n const componentInstance = componentOutput && componentOutput.componentRef && componentOutput.componentRef.instance;\r\n\r\n if (componentInstance) {\r\n const myDropId = componentInstance.dropdownId || 'myDrop';\r\n const dropDownToggleId = componentInstance.dropDownToggleId || 'dropdownMenu1';\r\n this._domElement = $(`#${myDropId}`);\r\n\r\n if (this._domElement) {\r\n // make sure to remove any previous Action dropdown elements, to avoid having multiple element of the same on top of each other\r\n this.dispose();\r\n\r\n // assign the row data to the dropdown component instance\r\n Object.assign(componentInstance, { parent, row: args.row, dataContext: args.grid.getDataItem(args.row) });\r\n\r\n // use a delay to make sure Angular ran at least a full cycle and make sure it finished rendering the Component before using it\r\n setTimeout(() => {\r\n // create a new dropdown element\r\n this._domElement = $(componentOutput.domElement);\r\n const topPos = (cellPos && cellPos.top || 0) + 30 + (offsetTop || 0);\r\n const leftPos = (cellPos && cellPos.left || 0) + (offsetLeft || 0);\r\n this._domElement.appendTo('body');\r\n this._domElement.css('position', 'absolute');\r\n this._domElement.css('top', topPos);\r\n this._domElement.css('left', leftPos);\r\n $(`#${myDropId}`).addClass('open');\r\n $(`#${dropDownToggleId}`).hide();\r\n\r\n // check if it should drop Up or Down\r\n const offset = 35;\r\n const iElement = $('.dropdown-menu');\r\n const iElementWrapper = iElement.parent();\r\n const iElementWrapperOffset = iElementWrapper.offset() || {};\r\n const iElementWrapperOffsetTop = iElementWrapperOffset.top || iElementWrapper && iElementWrapper.length > 0 && iElementWrapper[0].offsetTop;\r\n const iElementHeight = iElement.height();\r\n const windowHeight = window.innerHeight;\r\n const shouldDropUp = (windowHeight - iElementHeight - offset) < iElementWrapperOffsetTop;\r\n let menuMarginTop = '0px';\r\n if (shouldDropUp) {\r\n const offsetBottom = offsetDropupBottom || 0;\r\n menuMarginTop = '-'.concat(`${iElementHeight + offset + offsetBottom + 5}`, 'px');\r\n }\r\n this._domElement.css({ 'margin-top': menuMarginTop });\r\n\r\n // set dropdown margin left according to the document width\r\n const parentOffset = iElementWrapperOffset.left;\r\n const leftMargin = parentOffset - $(document).width();\r\n this._domElement.css({ 'margin-left': (this._domElement.width() + leftMargin + 60) + 'px' });\r\n\r\n try {\r\n this._domElement.dropdown('show'); // required for Bootstrap 4 only\r\n } catch (e) {\r\n // Bootstrap 3 wil throw an error since that method doesn't exist, we can safely disregard it\r\n }\r\n\r\n this._domElement.on('hidden.bs.dropdown', () => this.dropContainerShow());\r\n\r\n // hide dropdown menu on grid scroll\r\n this.gridViewport.on('scroll', () => this.dispose());\r\n\r\n // hide on dropdown click\r\n this._domElement.on('click', () => this.dispose());\r\n resolve(true);\r\n });\r\n }\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ContainerInstance, ContainerService as UniversalContainerService } from '@slickgrid-universal/common';\r\n\r\n@Injectable()\r\nexport class ContainerService implements UniversalContainerService {\r\n dependencies: ContainerInstance[] = [];\r\n\r\n constructor() { }\r\n\r\n get<T = any>(key: string): T | null {\r\n const dependency = this.dependencies.find(dep => dep.key === key);\r\n if (dependency?.instance) {\r\n return dependency.instance;\r\n }\r\n return null;\r\n }\r\n\r\n registerInstance(key: string, instance: any) {\r\n const dependency = this.dependencies.some(dep => dep.key === key);\r\n if (!dependency) {\r\n this.dependencies.push({ key, instance });\r\n }\r\n }\r\n}\r\n","import { Injectable, Optional } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { TranslaterService as UniversalTranslateService } from '@slickgrid-universal/common';\r\n\r\n/**\r\n * This is a Translate Service Wrapper for Slickgrid-Universal monorepo lib to work properly,\r\n * it must implement Slickgrid-Universal TranslaterService interface to work properly\r\n */\r\n@Injectable()\r\nexport class TranslaterService implements UniversalTranslateService {\r\n constructor(@Optional() private readonly translateService: TranslateService) { }\r\n\r\n /**\r\n * Method to return the current language used by the App\r\n * @return {string} current language\r\n */\r\n getCurrentLanguage(): string {\r\n return this.translateService?.currentLang ?? '';\r\n }\r\n\r\n /**\r\n * Method to set the language to use in the App and Translate Service\r\n * @param {string} language\r\n * @return {Promise} output\r\n */\r\n async use(newLang: string): Promise<any> {\r\n return this.translateService?.use?.(newLang);\r\n }\r\n\r\n /**\r\n * Method which receives a translation key and returns the translated value assigned to that key\r\n * @param {string} translation key\r\n * @return {string} translated value\r\n */\r\n translate(translationKey: string): string {\r\n return this.translateService?.instant?.(translationKey || ' ') as string;\r\n }\r\n}\r\n","import { Subscription } from 'rxjs';\r\n\r\n/**\r\n * Unsubscribe all Observables Subscriptions\r\n * It will return an empty array if it all went well\r\n * @param subscriptions\r\n */\r\nexport function unsubscribeAllObservables(subscriptions: Subscription[]): Subscription[] {\r\n if (Array.isArray(subscriptions)) {\r\n subscriptions.forEach((subscription: Subscription) => {\r\n if (subscription && subscription.unsubscribe) {\r\n subscription.unsubscribe();\r\n }\r\n });\r\n subscriptions = [];\r\n }\r\n\r\n return subscriptions;\r\n}\r\n","import 'slickgrid/plugins/slick.rowdetailview';\r\nimport 'slickgrid/plugins/slick.rowselectionmodel';\r\n\r\nimport { ApplicationRef, ComponentRef, Type, ViewContainerRef } from '@angular/core';\r\nimport {\r\n addToArrayWhenNotExists,\r\n castObservableToPromise,\r\n EventSubscription,\r\n RxJsFacade,\r\n SlickEventHandler,\r\n SlickGrid,\r\n SlickRowSelectionModel,\r\n unsubscribeAll,\r\n} from '@slickgrid-universal/common';\r\nimport { EventPubSubService } from '@slickgrid-universal/event-pub-sub';\r\nimport { SlickRowDetailView as UniversalSlickRowDetailView } from '@slickgrid-universal/row-detail-view-plugin';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport * as DOMPurify from 'dompurify';\r\n\r\nimport { GridOption, RowDetailView } from '../models/index';\r\nimport { AngularUtilService } from '../services/angularUtil.service';\r\n\r\nconst ROW_DETAIL_CONTAINER_PREFIX = 'container_';\r\nconst PRELOAD_CONTAINER_PREFIX = 'container_loading';\r\n\r\nexport interface CreatedView {\r\n id: string | number;\r\n dataContext: any;\r\n componentRef?: ComponentRef<any>;\r\n}\r\n\r\nexport class SlickRowDetailView extends UniversalSlickRowDetailView {\r\n rowDetailContainer!: ViewContainerRef;\r\n protected _eventHandler!: SlickEventHandler;\r\n protected _preloadComponent: Type<object> | undefined;\r\n protected _views: CreatedView[] = [];\r\n protected _viewComponent!: Type<object>;\r\n protected _subscriptions: EventSubscription[] = [];\r\n protected _userProcessFn!: (item: any) => Promise<any> | Observable<any> | Subject<any>;\r\n\r\n constructor(\r\n protected readonly angularUtilService: AngularUtilService,\r\n protected readonly appRef: ApplicationRef,\r\n protected readonly eventPubSubService: EventPubSubService,\r\n protected readonly gridContainerElement: HTMLDivElement,\r\n protected rxjs?: RxJsFacade,\r\n ) {\r\n super();\r\n }\r\n\r\n get addonOptions() {\r\n return this.getOptions();\r\n }\r\n\r\n protected get datasetIdPropName(): string {\r\n return this.gridOptions.datasetIdPropertyName || 'id';\r\n }\r\n\r\n get eventHandler(): SlickEventHandler {\r\n return this._eventHandler;\r\n }\r\n set eventHandler(eventHandler: SlickEventHandler) {\r\n this._eventHandler = eventHandler;\r\n }\r\n\r\n /** Getter for the Grid Options pulled through the Grid Object */\r\n get gridOptions(): GridOption {\r\n return (this._grid?.getOptions() || {}) as GridOption;\r\n }\r\n\r\n get rowDetailViewOptions(): RowDetailView | undefined {\r\n return this.gridOptions.rowDetailView;\r\n }\r\n\r\n addRxJsResource(rxjs: RxJsFacade) {\r\n this.rxjs = rxjs;\r\n }\r\n\r\n /** Dispose of the RowDetailView Extension */\r\n dispose() {\r\n this.disposeAllViewComponents();\r\n this._subscriptions = unsubscribeAll(this._subscriptions); // also unsubscribe all RxJS subscriptions\r\n super.dispose();\r\n }\r\n\r\n /** Dispose of all the opened Row Detail Panels Angular View Components */\r\n disposeAllViewComponents() {\r\n this._views.forEach((compRef) => this.disposeViewComponent(compRef));\r\n this._views = [];\r\n }\r\n\r\n /** Get the instance of the SlickGrid addon (control or plugin). */\r\n getAddonInstance(): SlickRowDetailView | null {\r\n return this;\r\n }\r\n\r\n init(grid: SlickGrid) {\r\n this._grid = grid;\r\n super.init(this._grid);\r\n this.register(grid?.getSelectionModel());\r\n }\r\n\r\n /**\r\n * Create the plugin before the Grid creation, else it will behave oddly.\r\n * Mostly because the column definitions might change after the grid creation\r\n */\r\n register(rowSelectionPlugin?: SlickRowSelectionModel) {\r\n if (typeof this.gridOptions.rowDetailView?.process === 'function') {\r\n // we need to keep the user \"process\" method and replace it with our own execution method\r\n // we do this because when we get the item detail, we need to call \"onAsyncResponse.notify\" for the plugin to work\r\n this._userProcessFn = this.gridOptions.rowDetailView.process as (item: any) => Promise<any>; // keep user's process method\r\n this.gridOptions.rowDetailView.process = (item) => this.onProcessing(item); // replace process method & run our internal one\r\n } else {\r\n throw new Error('[Angular-Slickgrid] You need to provide a \"process\" function for the Row Detail Extension to work properly');\r\n }\r\n\r\n if (this._grid && this.gridOptions?.rowDetailView) {\r\n // load the Preload & RowDetail Templates (could be straight HTML or Angular View/ViewModel)\r\n // when those are Angular View/ViewModel, we need to create View Component & provide the html containers to the Plugin (preTemplate/postTemplate methods)\r\n if (!this.gridOptions.rowDetailView.preTemplate) {\r\n this._preloadComponent = this.gridOptions?.rowDetailView?.preloadComponent;\r\n this.gridOptions.rowDetailView.preTemplate = () => DOMPurify.sanitize(`<div class=\"${PRELOAD_CONTAINER_PREFIX}\"></div>`);\r\n }\r\n if (!this.gridOptions.rowDetailView.postTemplate) {\r\n this._viewComponent = this.gridOptions?.rowDetailView?.viewComponent;\r\n this.gridOptions.rowDetailView.postTemplate = (itemDetail: any) => DOMPurify.sanitize(`<div class=\"${ROW_DETAIL_CONTAINER_PREFIX}${itemDetail[this.datasetIdPropName]}\"></div>`);\r\n }\r\n\r\n // this also requires the Row Selection Model to be registered as well\r\n if (!rowSelectionPlugin || !this._grid.getSelectionModel()) {\r\n rowSelectionPlugin = new SlickRowSelectionModel(this.gridOptions.rowSelectionOptions || { selectActiveRow: true });\r\n this._grid.setSelectionModel(rowSelectionPlugin);\r\n }\r\n\r\n // hook all events\r\n if (this._grid && this.rowDetailViewOptions) {\r\n if (this.rowDetailViewOptions.onExtensionRegistered) {\r\n this.rowDetailViewOptions.onExtensionRegistered(this);\r\n }\r\n\r\n if (this.onAsyncResponse) {\r\n this._eventHandler.subscribe(this.onAsyncResponse, (event, args) => {\r\n if (this.rowDetailViewOptions && typeof this.rowDetailViewOptions.onAsyncResponse === 'function') {\r\n this.rowDetailViewOptions.onAsyncResponse(event, args);\r\n }\r\n });\r\n }\r\n\r\n if (this.onAsyncEndUpdate) {\r\n this._eventHandler.subscribe(this.onAsyncEndUpdate, (e: any, args: { grid: SlickGrid; item: any; }) => {\r\n // triggers after backend called \"onAsyncResponse.notify()\"\r\n this.renderViewModel(args?.item);\r\n\r\n if (this.rowDetailViewOptions && typeof this.rowDetailViewOptions.onAsyncEndUpdate === 'function') {\r\n this.rowDetailViewOptions.onAsyncEndUpdate(e, args);\r\n }\r\n });\r\n }\r\n\r\n if (this.onAfterRowDetailToggle) {\r\n this._eventHandler.subscribe(this.onAfterRowDetailToggle, (e: any, args: { grid: SlickGrid; item: any; expandedRows: number[]; }) => {\r\n // display preload template & re-render all the other Detail Views after toggling\r\n // the preload View will eventually go away once the data gets loaded after the \"onAsyncEndUpdate\" event\r\n this.renderPreloadView();\r\n this.renderAllViewComponents();\r\n\r\n if (this.rowDetailViewOptions && typeof this.rowDetailViewOptions.onAfterRowDetailToggle === 'function') {\r\n this.rowDetailViewOptions.onAfterRowDetailToggle(e, args);\r\n }\r\n });\r\n }\r\n\r\n if (this.onBeforeRowDetailToggle) {\r\n this._eventHandler.subscribe(this.onBeforeRowDetailToggle, (e, args) => {\r\n // before toggling row detail, we need to create View Component if it doesn't exist\r\n this.handleOnBeforeRowDetailToggle(e, args);\r\n\r\n if (this.rowDetailViewOptions && typeof this.rowDetailViewOptions.onBeforeRowDetailToggle === 'function') {\r\n this.rowDetailViewOptions.onBeforeRowDetailToggle(e, args);\r\n }\r\n });\r\n }\r\n\r\n if (this.onRowBackToViewportRange) {\r\n this._eventHandler.subscribe(this.onRowBackToViewportRange, (e: any, args: { grid: SlickGrid; item: any; rowId: number; rowIndex: number; expandedRows: any[]; rowIdsOutOfViewport: number[]; }) => {\r\n // when row is back to viewport range, we will re-render the View Component(s)\r\n this.handleOnRowBackToViewportRange(e, args);\r\n\r\n if (this.rowDetailViewOptions && typeof this.rowDetailViewOptions.onRowBackToViewportRange === 'function') {\r\n this.rowDetailViewOptions.onRowBackToViewportRange(e, args);\r\n }\r\n });\r\n }\r\n\r\n if (this.onRowOutOfViewportRange) {\r\n this._eventHandler.subscribe(this.onRowOutOfViewportRange, (e: any, args: { grid: SlickGrid; item: any; rowId: number; rowIndex: number; expandedRows: any[]; rowIdsOutOfViewport: number[]; }) => {\r\n if (this.rowDetailViewOptions && typeof this.rowDetailViewOptions.onRowOutOfViewportRange === 'function') {\r\n this.rowDetailViewOptions.onRowOutOfViewportRange(e, args);\r\n }\r\n });\r\n }\r\n\r\n // --\r\n // hook some events needed by the Plugin itself\r\n\r\n // we need to redraw the open detail views if we change column position (column reorder)\r\n this._eventHandler.subscribe(this._grid.onColumnsReordered, this.redrawAllViewComponents.bind(this));\r\n\r\n // on row selection changed, we also need to redraw\r\n if (this.gridOptions.enableRowSelection || this.gridOptions.enableCheckboxSelector) {\r\n this._eventHandler.subscribe(this._grid.onSelectedRowsChanged, this.redrawAllViewComponents.bind(this));\r\n }\r\n\r\n // on sort, all row detail are collapsed so we can dispose of all the Views as well\r\n this._eventHandler.subscribe(this._grid.onSort, this.disposeAllViewComponents.bind(this));\r\n\r\n // on filter changed, we need to re-render all Views\r\n this._subscriptions.push(\r\n this.eventPubSubService?.subscribe('onFilterChanged', this.redrawAllViewComponents.bind(this)),\r\n this.eventPubSubService?.subscribe('onGridMenuClearAllFilters', () => setTimeout(() => this.redrawAllViewComponents())),\r\n this.eventPubSubService?.subscribe('onGridMenuClearAllSorting', () => setTimeout(() => this.redrawAllViewComponents())),\r\n );\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /** Redraw (re-render) all the expanded row detail View Components */\r\n redrawAllViewComponents() {\r\n this._views.forEach((compRef) => {\r\n this.redrawViewComponent(compRef);\r\n });\r\n }\r\n\r\n /** Render all the expanded row detail View Components */\r\n renderAllViewComponents() {\r\n this._views.forEach((view) => {\r\n if (view && view.dataContext) {\r\n this.renderViewModel(view.dataContext);\r\n }\r\n });\r\n }\r\n\r\n /** Redraw the necessary View Component */\r\n redrawViewComponent(createdView: CreatedView) {\r\n const containerElements = this.gridContainerElement.getElementsByClassName(`${ROW_DETAIL_CONTAINER_PREFIX}${createdView.id}`);\r\n if (containerElements && containerElements.length >= 0) {\r\n this.renderViewModel(createdView.dataContext);\r\n }\r\n }\r\n\r\n /** Render (or re-render) the View Component (Row Detail) */\r\n renderPreloadView() {\r\n const containerElements = this.gridContainerElement.getElementsByClassName(`${PRELOAD_CONTAINER_PREFIX}`);\r\n if (containerElements && containerElements.length >= 0) {\r\n this.angularUtilService.createAngularComponentAppendToDom(this._preloadComponent, containerElements[containerElements.length - 1], true);\r\n }\r\n }\r\n\r\n /** Render (or re-render) the View Component (Row Detail) */\r\n renderViewModel(item: any): CreatedView | undefined {\r\n const containerElements = this.gridContainerElement.getElementsByClassName(`${ROW_DETAIL_CONTAINER_PREFIX}${item[this.datasetIdPropName]}`);\r\n if (containerElements && containerElements.length > 0) {\r\n const componentOutput = this.angularUtilService.createAngularComponentAppendToDom(this._viewComponent, containerElements[containerElements.length - 1], true);\r\n if (componentOutput && componentOutput.componentRef && componentOutput.componentRef.instance) {\r\n // pass a few properties to the Row Detail template component\r\n Object.assign(componentOutput.componentRef.instance, {\r\n model: item,\r\n addon: this,\r\n grid: this._grid,\r\n dataView: this.dataView,\r\n parent: this.rowDetailViewOptions && this.rowDetailViewOptions.parent,\r\n });\r\n\r\n const viewObj = this._views.find(obj => obj.id === item[this.datasetIdPropName]);\r\n if (viewObj) {\r\n viewObj.componentRef = componentOutput.componentRef;\r\n }\r\n return viewObj;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n // --\r\n // protected functions\r\n // ------------------\r\n\r\n protected disposeViewComponent(expandedView: CreatedView): CreatedView | void {\r\n const compRef = expandedView?.componentRef;\r\n if (compRef) {\r\n this.appRef.detachView(compRef.hostView);\r\n if (compRef?.destroy) {\r\n compRef.destroy();\r\n }\r\n return expandedView;\r\n }\r\n }\r\n\r\n /**\r\n * notify the onAsyncResponse with the \"args.item\" (required property)\r\n * the plugin will then use item to populate the row detail panel with the \"postTemplate\"\r\n * @param item\r\n */\r\n protected notifyTemplate(item: any) {\r\n if (this.onAsyncResponse) {\r\n this.onAsyncResponse.notify({ item }, undefined, this);\r\n }\r\n }\r\n\r\n /**\r\n * On Processing, we will notify the plugin with the new item detail once backend server call completes\r\n * @param item\r\n */\r\n protected async onProcessing(item: any) {\r\n if (item && typeof this._userProcessFn === 'function') {\r\n let awaitedItemDetail: any;\r\n const userProcessFn = this._userProcessFn(item);\r\n\r\n // wait for the \"userProcessFn\", once resolved we will save it into the \"collection\"\r\n const response: any | any[] = await userProcessFn;\r\n\r\n if (response.hasOwnProperty(this.datasetIdPropName)) {\r\n awaitedItemDetail = response; // from Promise\r\n } else if (response && response instanceof Observable || response instanceof Promise) {\r\n awaitedItemDetail = await castObservableToPromise(this.rxjs as RxJsFacade, response); // from Angular-http-client\r\n }\r\n\r\n if (!awaitedItemDetail || !awaitedItemDetail.hasOwnProperty(this.datasetIdPropName)) {\r\n throw new Error(`[Angular-Slickgrid] could not process the Row Detail, you must make sure that your \"process\" callback\r\n (a Promise or an HttpClient call returning an Observable) returns an item object that has an \"${this.datasetIdPropName}\" property`);\r\n }\r\n\r\n // notify the plugin with the new item details\r\n this.notifyTemplate(awaitedItemDetail || {});\r\n }\r\n }\r\n\r\n /**\r\n * Just before the row get expanded or collapsed we will do the following\r\n * First determine if the row is expanding or collapsing,\r\n * if it's expanding we will add it to our View Components reference array if we don't already have it\r\n * or if it's collapsing we will remove it from our View Components reference array\r\n */\r\n protected handleOnBeforeRowDetailToggle(e: Event, args: { grid: SlickGrid; item: any; }) {\r\n // expanding\r\n if (args && args.item && args.item.__collapsed) {\r\n // expanding row detail\r\n const viewInfo: CreatedView = {\r\n id: args.item[this.datasetIdPropName],\r\n dataContext: args.item\r\n };\r\n const idPropName = this.gridOptions.datasetIdPropertyName || 'id';\r\n addToArrayWhenNotExists(this._views, viewInfo, idPropName);\r\n } else {\r\n // collapsing, so dispose of the View/Component\r\n const foundViewIndex = this._views.findIndex((view: CreatedView) => view.id === args.item[this.datasetIdPropName]);\r\n if (foundViewIndex >= 0 && this._views.hasOwnProperty(foundViewIndex)) {\r\n const compRef = this._views[foundViewIndex].componentRef;\r\n if (compRef) {\r\n this.appRef.detachView(compRef.hostView);\r\n compRef.destroy();\r\n }\r\n this._views.splice(foundViewIndex, 1);\r\n }\r\n }\r\n }\r\n\r\n /** When Row comes back to Viewport Range, we need to redraw the View */\r\n protected handleOnRowBackToViewportRange(e: Event, args: { grid: SlickGrid; item: any; rowId: number; rowIndex: number; expandedRows: any[]; rowIdsOutOfViewport: number[]; }) {\r\n if (args?.item) {\r\n this.redrawAllViewComponents();\r\n }\r\n }\r\n}\r\n","import { Column, DelimiterType, EventNamingStyle, FileType, Filters, GridAutosizeColsMode, OperatorType, TreeDataOption } from '@slickgrid-universal/common';\r\nimport { GridOption, RowDetailView } from './models/index';\r\n\r\n/** Global Grid Options Defaults */\r\nexport const GlobalGridOptions: Partial<GridOption> = {\r\n alwaysShowVerticalScroll: true,\r\n autoEdit: false,\r\n asyncEditorLoading: false,\r\n autoFitColumnsOnFirstLoad: true,\r\n autoResize: {\r\n applyResizeToContainer: true,\r\n calculateAvailableSizeBy: 'window',\r\n bottomPadding: 20,\r\n minHeight: 180,\r\n minWidth: 300,\r\n rightPadding: 0\r\n },\r\n cellHighlightCssClass: 'slick-cell-modified',\r\n checkboxSelector: {\r\n cssClass: 'slick-cell-checkboxsel'\r\n },\r\n columnPicker: {\r\n fadeSpeed: 0,\r\n hideForceFitButton: false,\r\n hideSyncResizeButton: true,\r\n headerColumnValueExtractor: pickerHeaderColumnValueExtractor\r\n },\r\n cellMenu: {\r\n autoAdjustDrop: true,\r\n autoAlignSide: true,\r\n hideCloseButton: true,\r\n hideCommandSection: false,\r\n hideOptionSection: false,\r\n },\r\n contextMenu: {\r\n autoAdjustDrop: true,\r\n autoAlignSide: true,\r\n hideCloseButton: true,\r\n hideClearAllGrouping: false,\r\n hideCollapseAllGroups: false,\r\n hideCommandSection: false,\r\n hideCopyCellValueCommand: false,\r\n hideExpandAllGroups: false,\r\n hideExportCsvCommand: false,\r\n hideExportExcelCommand: false,\r\n hideExportTextDelimitedCommand: true,\r\n hideMenuOnScroll: true,\r\n hideOptionSection: false,\r\n iconCopyCellValueCommand: 'fa fa-clone',\r\n iconExportCsvCommand: 'fa fa-download',\r\n iconExportExcelCommand: 'fa fa-file-excel-o text-success',\r\n iconExportTextDelimitedCommand: 'fa fa-download',\r\n },\r\n customFooterOptions: {\r\n dateFormat: 'YYYY-MM-DD, hh:mm a',\r\n hideRowSelectionCount: false,\r\n hideTotalItemCount: false,\r\n hideLastUpdateTimestamp: true,\r\n footerHeight: 25,\r\n leftContainerClass: 'col-xs-12 col-sm-5',\r\n rightContainerClass: 'col-xs-6 col-sm-7',\r\n metricSeparator: '|',\r\n metricTexts: {\r\n items: 'items',\r\n itemsKey: 'ITEMS',\r\n itemsSelected: 'items selected',\r\n itemsSelectedKey: 'ITEMS_SELECTED',\r\n of: 'of',\r\n ofKey: 'OF',\r\n }\r\n },\r\n dataView: {\r\n syncGridSelection: true, // when enabled, this will preserve the row selection even after filtering/sorting/grouping\r\n syncGridSelectionWithBackendService: false, // but disable it when using backend services\r\n },\r\n datasetIdPropertyName: 'id',\r\n defaultFilter: Filters.input,\r\n defaultBackendServiceFilterTypingDebounce: 500,\r\n defaultColumnSortFieldId: 'id',\r\n defaultFilterPlaceholder: '🔎︎',\r\n defaultFilterRangeOperator: OperatorType.rangeInclusive,\r\n editable: false,\r\n enableAutoResize: true,\r\n enableAutoSizeColumns: true,\r\n enableCellNavigation: false,\r\n enableColumnPicker: true,\r\n enableColumnReorder: true,\r\n enableColumnResizeOnDoubleClick: true,\r\n enableContextMenu: true,\r\n enableExcelExport: true, // Excel Export is the new default,\r\n enableExport: false, // CSV/Text with Tab Delimited\r\n enableFilterTrimWhiteSpace: false, // do we want to trim white spaces on all Filters?\r\n enableGridMenu: true,\r\n enableHeaderMenu: true,\r\n enableEmptyDataWarningMessage: true,\r\n emptyDataWarning: {\r\n className: 'slick-empty-data-warning',\r\n message: 'No data to display.',\r\n messageKey: 'EMPTY_DATA_WARNING_MESSAGE',\r\n hideFrozenLeftWarning: false,\r\n hideFrozenRightWarning: false,\r\n leftViewportMarginLeft: '40%',\r\n rightViewportMarginLeft: '40%',\r\n frozenLeftViewportMarginLeft: '0px',\r\n frozenRightViewportMarginLeft: '40%',\r\n },\r\n enableMouseHoverHighlightRow: true,\r\n enableSorting: true,\r\n enableTextSelectionOnCells: true,\r\n eventNamingStyle: EventNamingStyle.camelCase,\r\n explicitInitialization: true,\r\n excelExportOptions: {\r\n addGroupIndentation: true,\r\n exportWithFormatter: false,\r\n filename: 'export',\r\n format: FileType.xlsx,\r\n groupingColumnHeaderTitle: 'Group By',\r\n groupCollapsedSymbol: '⮞',\r\n groupExpandedSymbol: '⮟',\r\n groupingAggregatorRowText: '',\r\n sanitizeDataExport: false,\r\n },\r\n exportOptions: {\r\n delimiter: DelimiterType.comma,\r\n exportWithFormatter: false,\r\n filename: 'export',\r\n format: FileType.csv,\r\n groupingColumnHeaderTitle: 'Group By',\r\n groupingAggregatorRowText: '',\r\n sanitizeDataExport: false,\r\n useUtf8WithBom: true\r\n },\r\n filterTypingDebounce: 0,\r\n forceFitColumns: false,\r\n frozenHeaderWidthCalcDifferential: 0,\r\n gridMenu: {\r\n dropSide: 'left',\r\n commandLabels: {\r\n clearAllFiltersCommandKey: 'CLEAR_ALL_FILTERS',\r\n clearAllSortingCommandKey: 'CLEAR_ALL_SORTING',\r\n clearFrozenColumnsCommandKey: 'CLEAR_PINNING',\r\n exportCsvCommandKey: 'EXPORT_TO_CSV',\r\n exportExcelCommandKey: 'EXPORT_TO_EXCEL',\r\n exportTextDelimitedCommandKey: 'EXPORT_TO_TAB_DELIMITED',\r\n refreshDatasetCommandKey: 'REFRESH_DATASET',\r\n toggleFilterCommandKey: 'TOGGLE_FILTER_ROW',\r\n togglePreHeaderCommandKey: 'TOGGLE_PRE_HEADER_ROW',\r\n },\r\n hideClearAllFiltersCommand: false,\r\n hideClearAllSortingCommand: false,\r\n hideClearFrozenColumnsCommand: true, // opt-in command\r\n hideExportCsvCommand: false,\r\n hideExportExcelCommand: false,\r\n hideExportTextDelimitedCommand: true,\r\n hideForceFitButton: false,\r\n hideRefreshDatasetCommand: false,\r\n hideSyncResizeButton: true,\r\n hideToggleFilterCommand: false,\r\n hideTogglePreHeaderCommand: false,\r\n iconCssClass: 'fa fa-bars',\r\n iconClearAllFiltersCommand: 'fa fa-filter text-danger',\r\n iconClearAllSortingCommand: 'fa fa-unsorted text-danger',\r\n iconClearFrozenColumnsCommand: 'fa fa-times',\r\n iconExportCsvCommand: 'fa fa-download',\r\n iconExportExcelCommand: 'fa fa-file-excel-o text-success',\r\n iconExportTextDelimitedCommand: 'fa fa-download',\r\n iconRefreshDatasetCommand: 'fa fa-refresh',\r\n iconToggleFilterCommand: 'fa fa-random',\r\n iconTogglePreHeaderCommand: 'fa fa-random',\r\n menuWidth: 16,\r\n resizeOnShowHeaderRow: true,\r\n headerColumnValueExtractor: pickerHeaderColumnValueExtractor\r\n },\r\n headerMenu: {\r\n autoAlign: true,\r\n autoAlignOffset: 12,\r\n minWidth: 140,\r\n iconClearFilterCommand: 'fa fa-filter text-danger',\r\n iconClearSortCommand: 'fa fa-unsorted',\r\n iconFreezeColumns: 'fa fa-thumb-tack',\r\n iconSortAscCommand: 'fa fa-sort-amount-asc',\r\n iconSortDescCommand: 'fa fa-sort-amount-desc',\r\n iconColumnHideCommand: 'fa fa-times',\r\n iconColumnResizeByContentCommand: 'fa fa-arrows-h',\r\n hideColumnResizeByContentCommand: false,\r\n hideColumnHideCommand: false,\r\n hideClearFilterCommand: false,\r\n hideClearSortCommand: false,\r\n hideFreezeColumnsCommand: true, // opt-in command\r\n hideSortCommands: false\r\n },\r\n headerRowHeight: 35,\r\n multiColumnSort: true,\r\n numberedMultiColumnSort: true,\r\n tristateMultiColumnSort: false,\r\n sortColNumberInSeparateSpan: true,\r\n suppressActiveCellChangeOnEdit: true,\r\n pagination: {\r\n pageSizes: [10, 15, 20, 25, 30, 40, 50, 75, 100],\r\n pageSize: 25,\r\n totalItems: 0\r\n },\r\n // technically speaking the Row Detail requires the process & viewComponent but we'll ignore it just to set certain options\r\n rowDetailView: {\r\n collapseAllOnSort: true,\r\n cssClass: 'detail-view-toggle',\r\n panelRows: 1,\r\n keyPrefix: '__',\r\n useRowClick: false,\r\n useSimpleViewportCalc: true,\r\n saveDetailViewOnScroll: false,\r\n } as RowDetailView,\r\n rowHeight: 35,\r\n topPanelHeight: 35,\r\n translationNamespaceSeparator: ':',\r\n resetFilterSearchValueAfterOnBeforeCancellation: true,\r\n resizeByContentOnlyOnFirstLoad: true,\r\n resizeByContentOptions: {\r\n alwaysRecalculateColumnWidth: false,\r\n cellCharWidthInPx: 7.8,\r\n cellPaddingWidthInPx: 14,\r\n defaultRatioForStringType: 0.88,\r\n formatterPaddingWidthInPx: 0,\r\n maxItemToInspectCellContentWidth: 1000,\r\n maxItemToInspectSingleColumnWidthByContent: 5000,\r\n widthToRemoveFromExceededWidthReadjustment: 50,\r\n },\r\n treeDataOptions: {\r\n exportIndentMarginLeft: 5,\r\n exportIndentationLeadingChar: '͏͏͏͏͏͏͏͏͏·',\r\n } as unknown as TreeDataOption\r\n};\r\n\r\n/**\r\n * Value Extractor for both ColumnPicker & GridMenu Picker\r\n * when using Column Header Grouping, we'll prefix the column group title\r\n * else we'll simply return the column name title\r\n */\r\nfunction pickerHeaderColumnValueExtractor(column: Column) {\r\n const headerGroup = column && column.columnGroup || '';\r\n if (headerGroup) {\r\n return headerGroup + ' - ' + column.name;\r\n }\r\n return column && column.name || '';\r\n}\r\n","import { GridOption } from './models/gridOption.interface';\r\nimport { GlobalGridOptions } from './global-grid-options';\r\n\r\nexport class SlickgridConfig {\r\n options: Partial<GridOption>;\r\n\r\n constructor() {\r\n this.options = GlobalGridOptions;\r\n }\r\n}\r\n","import { Locale } from '@slickgrid-universal/common';\r\n\r\nexport class Constants {\r\n // English Locale texts when using only 1 Locale instead of I18N\r\n static readonly locales: Locale = {\r\n TEXT_ALL_SELECTED: 'All Selected',\r\n TEXT_ALL_X_RECORDS_SELECTED: 'All {{x}} records selected',\r\n TEXT_APPLY_MASS_UPDATE: 'Apply Mass Update',\r\n TEXT_APPLY_TO_SELECTION: 'Update Selection',\r\n TEXT_CANCEL: 'Cancel',\r\n TEXT_CLEAR_ALL_FILTERS: 'Clear all Filters',\r\n TEXT_CLEAR_ALL_GROUPING: 'Clear all Grouping',\r\n TEXT_CLEAR_ALL_SORTING: 'Clear all Sorting',\r\n TEXT_CLEAR_PINNING: 'Unfreeze Columns/Rows',\r\n TEXT_CLONE: 'Clone',\r\n TEXT_COLLAPSE_ALL_GROUPS: 'Collapse all Groups',\r\n TEXT_CONTAINS: 'Contains',\r\n TEXT_COLUMNS: 'Columns',\r\n TEXT_COLUMN_RESIZE_BY_CONTENT: 'Resize by Content',\r\n TEXT_COMMANDS: 'Commands',\r\n TEXT_COPY: 'Copy',\r\n TEXT_EQUALS: 'Equals',\r\n TEXT_EQUAL_TO: 'Equal to',\r\n TEXT_ENDS_WITH: 'Ends With',\r\n TEXT_ERROR_EDITABLE_GRID_REQUIRED: 'Your grid must be editable in order to use the Composite Editor Modal.',\r\n TEXT_ERROR_ENABLE_CELL_NAVIGATION_REQUIRED: 'Composite Editor requires the flag \"enableCellNavigation\" to be set to True in your Grid Options.',\r\n TEXT_ERROR_NO_CHANGES_DETECTED: 'Sorry we could not detect any changes.',\r\n TEXT_ERROR_NO_EDITOR_FOUND: 'We could not find any Editor in your Column Definition.',\r\n TEXT_ERROR_NO_RECORD_FOUND: 'No records selected for edit or clone operation.',\r\n TEXT_ERROR_ROW_NOT_EDITABLE: 'Current row is not editable.',\r\n TEXT_ERROR_ROW_SELECTION_REQUIRED: 'You must select some rows before trying to apply new value(s).',\r\n TEXT_EXPAND_ALL_GROUPS: 'Expand all Groups',\r\n TEXT_EXPORT_TO_CSV: 'Export in CSV format',\r\n TEXT_EXPORT_TO_TEXT_FORMAT: 'Export in Text format (Tab delimited)',\r\n TEXT_EXPORT_TO_EXCEL: 'Export to Excel',\r\n TEXT_EXPORT_TO_TAB_DELIMITED: 'Export in Text format (Tab delimited)',\r\n TEXT_FORCE_FIT_COLUMNS: 'Force fit columns',\r\n TEXT_FREEZE_COLUMNS: 'Freeze Columns',\r\n TEXT_GREATER_THAN: 'Greater than',\r\n TEXT_GREATER_THAN_OR_EQUAL_TO: 'Greater than or equal to',\r\n TEXT_GROUP_BY: 'Group By',\r\n TEXT_HIDE_COLUMN: 'Hide Column',\r\n TEXT_ITEMS: 'items',\r\n TEXT_ITEMS_PER_PAGE: 'items per page',\r\n TEXT_ITEMS_SELECTED: 'items selected',\r\n TEXT_OF: 'of',\r\n TEXT_OK: 'OK',\r\n TEXT_LAST_UPDATE: 'Last Update',\r\n TEXT_LESS_THAN: 'Less than',\r\n TEXT_LESS_THAN_OR_EQUAL_TO: 'Less than or equal to',\r\n TEXT_NOT_CONTAINS: 'Not contains',\r\n TEXT_NOT_EQUAL_TO: 'Not equal to',\r\n TEXT_PAGE: 'Page',\r\n TEXT_REFRESH_DATASET: 'Refresh Dataset',\r\n TEXT_REMOVE_FILTER: 'Remove Filter',\r\n TEXT_REMOVE_SORT: 'Remove Sort',\r\n TEXT_SAVE: 'Save',\r\n TEXT_SELECT_ALL: 'Select All',\r\n TEXT_SYNCHRONOUS_RESIZE: 'Synchronous resize',\r\n TEXT_SORT_ASCENDING: 'Sort Ascending',\r\n TEXT_SORT_DESCENDING: 'Sort Descending',\r\n TEXT_STARTS_WITH: 'Starts With',\r\n TEXT_TOGGLE_FILTER_ROW: 'Toggle Filter Row',\r\n TEXT_TOGGLE_PRE_HEADER_ROW: 'Toggle Pre-Header Row',\r\n TEXT_X_OF_Y_SELECTED: '# of % selected',\r\n TEXT_X_OF_Y_MASS_SELECTED: '{{x}} of {{y}} selected',\r\n };\r\n\r\n static readonly treeDataProperties = {\r\n CHILDREN_PROP: 'children',\r\n COLLAPSED_PROP: '__collapsed',\r\n HAS_CHILDREN_PROP: '__hasChildren',\r\n TREE_LEVEL_PROP: '__treeLevel',\r\n PARENT_PROP: '__parentId',\r\n };\r\n\r\n // some Validation default texts\r\n static readonly VALIDATION_REQUIRED_FIELD = 'Field is required';\r\n static readonly VALIDATION_EDITOR_VALID_NUMBER = 'Please enter a valid number';\r\n static readonly VALIDATION_EDITOR_VALID_INTEGER = 'Please enter a valid integer number';\r\n static readonly VALIDATION_EDITOR_INTEGER_BETWEEN = 'Please enter a valid integer number between {{minValue}} and {{maxValue}}';\r\n static readonly VALIDATION_EDITOR_INTEGER_MAX = 'Please enter a valid integer number that is lower than {{maxValue}}';\r\n static readonly VALIDATION_EDITOR_INTEGER_MAX_INCLUSIVE = 'Please enter a valid integer number that is lower than or equal to {{maxValue}}';\r\n static readonly VALIDATION_EDITOR_INTEGER_MIN = 'Please enter a valid integer number that is greater than {{minValue}}';\r\n static readonly VALIDATION_EDITOR_INTEGER_MIN_INCLUSIVE = 'Please enter a valid integer number that is greater than or equal to {{minValue}}';\r\n static readonly VALIDATION_EDITOR_NUMBER_BETWEEN = 'Please enter a valid number between {{minValue}} and {{maxValue}}';\r\n static readonly VALIDATION_EDITOR_NUMBER_MAX = 'Please enter a valid number that is lower than {{maxValue}}';\r\n static readonly VALIDATION_EDITOR_NUMBER_MAX_INCLUSIVE = 'Please enter a valid number that is lower than or equal to {{maxValue}}';\r\n static readonly VALIDATION_EDITOR_NUMBER_MIN = 'Please enter a valid number that is greater than {{minValue}}';\r\n static readonly VALIDATION_EDITOR_NUMBER_MIN_INCLUSIVE = 'Please enter a valid number that is greater than or equal to {{minValue}}';\r\n static readonly VALIDATION_EDITOR_DECIMAL_BETWEEN = 'Please enter a valid number with a maximum of {{maxDecimal}} decimals';\r\n static readonly VALIDATION_EDITOR_TEXT_LENGTH_BETWEEN = 'Please make sure your text length is between {{minLength}} and {{maxLength}} characters';\r\n static readonly VALIDATION_EDITOR_TEXT_MAX_LENGTH = 'Please make sure your text is less than {{maxLength}} characters';\r\n static readonly VALIDATION_EDITOR_TEXT_MAX_LENGTH_INCLUSIVE = 'Please make sure your text is less than or equal to {{maxLength}} characters';\r\n static readonly VALIDATION_EDITOR_TEXT_MIN_LENGTH = 'Please make sure your text is more than {{minLength}} character(s)';\r\n static readonly VALIDATION_EDITOR_TEXT_MIN_LENGTH_INCLUSIVE = 'Please make sure your text is at least {{minLength}} character(s)';\r\n}\r\n","// import 3rd party vendor libs\r\n// only import the necessary core lib, each will be imported on demand when enabled (via require)\r\nimport 'jquery-ui/ui/widgets/draggable';\r\nimport 'jquery-ui/ui/widgets/droppable';\r\nimport 'jquery-ui/ui/widgets/sortable';\r\nimport 'slickgrid/lib/jquery.event.drag-2.3.0';\r\nimport 'slickgrid/lib/jquery.mousewheel';\r\nimport 'slickgrid/slick.core';\r\nimport 'slickgrid/slick.grid';\r\nimport 'slickgrid/slick.dataview';\r\n\r\n// ...then everything else...\r\nimport { AfterViewInit, ApplicationRef, ChangeDetectorRef, Component, ElementRef, Inject, Input, OnDestroy, Optional, } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport {\r\n // interfaces/types\r\n AutoCompleteEditor,\r\n BackendServiceApi,\r\n BackendServiceOption,\r\n Column,\r\n ColumnEditor,\r\n DataViewOption,\r\n EventSubscription,\r\n ExtensionName,\r\n ExternalResource,\r\n Locale,\r\n Metrics,\r\n Pagination,\r\n SelectEditor,\r\n ServicePagination,\r\n SlickDataView,\r\n SlickEventHandler,\r\n SlickGrid,\r\n SlickNamespace,\r\n\r\n // services\r\n BackendUtilityService,\r\n CollectionService,\r\n EventNamingStyle,\r\n ExtensionService,\r\n ExtensionUtility,\r\n FilterFactory,\r\n FilterService,\r\n GridEventService,\r\n GridService,\r\n GridStateService,\r\n GroupingAndColspanService,\r\n PaginationService,\r\n ResizerService,\r\n RxJsFacade,\r\n SharedService,\r\n SlickgridConfig,\r\n SlickGroupItemMetadataProvider,\r\n SortService,\r\n TreeDataService,\r\n\r\n // utilities\r\n autoAddEditorFormatterToColumnsWithEditor,\r\n emptyElement,\r\n GridStateType,\r\n unsubscribeAll,\r\n} from '@slickgrid-universal/common';\r\nimport { EventPubSubService } from '@slickgrid-universal/event-pub-sub';\r\nimport { SlickEmptyWarningComponent } from '@slickgrid-universal/empty-warning-component';\r\nimport { SlickFooterComponent } from '@slickgrid-universal/custom-footer-component';\r\nimport { SlickPaginationComponent } from '@slickgrid-universal/pagination-component';\r\nimport { RxJsResource } from '@slickgrid-universal/rxjs-observable';\r\nimport { dequal } from 'dequal/lite';\r\n\r\nimport { Constants } from '../constants';\r\nimport { AngularGridInstance, ExternalTestingDependencies, GridOption, } from './../models/index';\r\nimport { GlobalGridOptions } from './../global-grid-options';\r\nimport { TranslaterService } from '../services/translater.service';\r\n\r\n// Services\r\nimport { AngularUtilService } from '../services/angularUtil.service';\r\nimport { SlickRowDetailView } from '../extensions/slickRowDetailView';\r\nimport { ContainerService } from '../services/container.service';\r\n\r\n// using external non-typed js libraries\r\ndeclare const Slick: SlickNamespace;\r\n\r\n@Component({\r\n selector: 'angular-slickgrid',\r\n templateUrl: './angular-slickgrid.component.html',\r\n providers: [\r\n // make everything transient (non-singleton)\r\n AngularUtilService,\r\n ApplicationRef,\r\n TranslaterService,\r\n ]\r\n})\r\nexport class AngularSlickgridComponent implements AfterViewInit, OnDestroy {\r\n private _dataset?: any[] | null;\r\n private _columnDefinitions!: Column[];\r\n private _currentDatasetLength = 0;\r\n private _eventHandler: SlickEventHandler = new Slick.EventHandler();\r\n private _eventPubSubService!: EventPubSubService;\r\n private _angularGridInstances: AngularGridInstance | undefined;\r\n private _hideHeaderRowAfterPageLoad = false;\r\n private _isGridInitialized = false;\r\n private _isDatasetInitialized = false;\r\n private _isDatasetHierarchicalInitialized = false;\r\n private _isPaginationInitialized = false;\r\n private _isLocalGrid = true;\r\n private _paginationOptions: Pagination | undefined;\r\n private _registeredResources: ExternalResource[] = [];\r\n dataView!: SlickDataView;\r\n slickGrid!: SlickGrid;\r\n groupingDefinition: any = {};\r\n groupItemMetadataProvider?: SlickGroupItemMetadataProvider;\r\n backendServiceApi?: BackendServiceApi;\r\n locales!: Locale;\r\n metrics?: Metrics;\r\n showPagination = false;\r\n serviceList: any[] = [];\r\n totalItems = 0;\r\n paginationData?: {\r\n gridOptions: GridOption;\r\n paginationService: PaginationService;\r\n };\r\n subscriptions: EventSubscription[] = [];\r\n\r\n // components / plugins\r\n slickEmptyWarning?: SlickEmptyWarningComponent;\r\n slickFooter?: SlickFooterComponent;\r\n slickPagination?: SlickPaginationComponent;\r\n slickRowDetailView?: SlickRowDetailView;\r\n\r\n // services\r\n backendUtilityService!: BackendUtilityService;\r\n collectionService: CollectionService;\r\n extensionService: ExtensionService;\r\n extensionUtility: ExtensionUtility;\r\n filterFactory!: FilterFactory;\r\n filterService: FilterService;\r\n gridEventService: GridEventService;\r\n gridService: GridService;\r\n gridStateService: GridStateService;\r\n groupingService: GroupingAndColspanService;\r\n paginationService: PaginationService;\r\n resizerService!: ResizerService;\r\n rxjs?: RxJsFacade;\r\n sharedService: SharedService;\r\n sortService: SortService;\r\n treeDataService: TreeDataService;\r\n\r\n @Input() customDataView: any;\r\n @Input() gridId: string = '';\r\n @Input() gridOptions!: GridOption;\r\n\r\n @Input()\r\n get paginationOptions(): Pagination | undefined {\r\n return this._paginationOptions;\r\n }\r\n set paginationOptions(newPaginationOptions: Pagination | undefined) {\r\n if (newPaginationOptions && this._paginationOptions) {\r\n this._paginationOptions = { ...this.gridOptions.pagination, ...this._paginationOptions, ...newPaginationOptions };\r\n } else {\r\n this._paginationOptions = newPaginationOptions;\r\n }\r\n this.gridOptions.pagination = this._paginationOptions ?? this.gridOptions.pagination;\r\n this.paginationService.updateTotalItems(this.gridOptions.pagination?.totalItems ?? 0, true);\r\n }\r\n\r\n @Input()\r\n set columnDefinitions(columnDefinitions: Column[]) {\r\n this._columnDefinitions = columnDefinitions;\r\n if (this._isGridInitialized) {\r\n this.updateColumnDefinitionsList(columnDefinitions);\r\n }\r\n if (columnDefinitions.length > 0) {\r\n this.copyColumnWidthsReference(columnDefinitions);\r\n }\r\n }\r\n get columnDefinitions(): Column[] {\r\n return this._columnDefinitions;\r\n }\r\n\r\n @Input()\r\n get dataset(): any[] {\r\n return (this.customDataView ? this.slickGrid?.getData?.() : this.dataView?.getItems?.()) || [];\r\n }\r\n set dataset(newDataset: any[]) {\r\n const prevDatasetLn = this._currentDatasetLength;\r\n const isDatasetEqual = dequal(newDataset, this._dataset || []);\r\n let data = newDataset;\r\n\r\n // when Tree Data is enabled and we don't yet have the hierarchical dataset filled, we can force a convert+sort of the array\r\n if (this.slickGrid && this.gridOptions?.enableTreeData && Array.isArray(newDataset) && (newDataset.length > 0 || newDataset.length !== prevDatasetLn || !isDatasetEqual)) {\r\n this._isDatasetHierarchicalInitialized = false;\r\n data = this.sortTreeDataset(newDataset, !isDatasetEqual); // if dataset changed, then force a refresh anyway\r\n }\r\n this._dataset = data;\r\n this.refreshGridData(data || []);\r\n this._currentDatasetLength = (newDataset || []).length;\r\n\r\n // expand/autofit columns on first page load\r\n // we can assume that if the prevDataset was empty then we are on first load\r\n if (this.gridOptions?.autoFitColumnsOnFirstLoad && prevDatasetLn === 0) {\r\n this.slickGrid.autosizeColumns();\r\n }\r\n }\r\n\r\n @Input()\r\n get datasetHierarchical(): any[] | undefined {\r\n return this.sharedService.hierarchicalDataset;\r\n }\r\n set datasetHierarchical(newHierarchicalDataset: any[] | undefined) {\r\n const isDatasetEqual = dequal(newHierarchicalDataset, this.sharedService?.hierarchicalDataset ?? []);\r\n const prevFlatDatasetLn = this._currentDatasetLength;\r\n this.sharedService.hierarchicalDataset = newHierarchicalDataset;\r\n\r\n if (newHierarchicalDataset && this.columnDefinitions && this.filterService?.clearFilters) {\r\n this.filterService.clearFilters();\r\n }\r\n\r\n // when a hierarchical dataset is set afterward, we can reset the flat dataset and call a tree data sort that will overwrite the flat dataset\r\n if (newHierarchicalDataset && this.slickGrid && this.sortService?.processTreeDataInitialSort) {\r\n this.dataView.setItems([], this.gridOptions.datasetIdPropertyName ?? 'id');\r\n this.sortService.processTreeDataInitialSort();\r\n\r\n // we also need to reset/refresh the Tree Data filters because if we inserted new item(s) then it might not show up without doing this refresh\r\n // however we need 1 cpu cycle before having the DataView refreshed, so we need to wrap this check in a setTimeout\r\n setTimeout(() => {\r\n const flatDatasetLn = this.dataView.getItemCount();\r\n if (flatDatasetLn > 0 && (flatDatasetLn !== prevFlatDatasetLn || !isDatasetEqual)) {\r\n this.filterService.refreshTreeDataFilters();\r\n }\r\n });\r\n this._isDatasetHierarchicalInitialized = true;\r\n }\r\n }\r\n\r\n get elementRef(): ElementRef {\r\n return this.elm;\r\n }\r\n\r\n get eventHandler(): SlickEventHandler {\r\n return this._eventHandler;\r\n }\r\n\r\n get gridContainerElement(): HTMLElement | null {\r\n return document.querySelector(`#${this.gridOptions.gridContainerId || ''}`);\r\n }\r\n\r\n /** GETTER to know if dataset was initialized or not */\r\n get isDatasetInitialized(): boolean {\r\n return this._isDatasetInitialized;\r\n }\r\n /** SETTER to change if dataset was initialized or not (stringly used for unit testing purposes) */\r\n set isDatasetInitialized(isInitialized: boolean) {\r\n this._isDatasetInitialized = isInitialized;\r\n }\r\n set isDatasetHierarchicalInitialized(isInitialized: boolean) {\r\n this._isDatasetHierarchicalInitialized = isInitialized;\r\n }\r\n\r\n get registeredResources(): ExternalResource[] {\r\n return this._registeredResources;\r\n }\r\n\r\n constructor(\r\n private readonly angularUtilService: AngularUtilService,\r\n private readonly appRef: ApplicationRef,\r\n private readonly cd: ChangeDetectorRef,\r\n private readonly containerService: ContainerService,\r\n private readonly elm: ElementRef,\r\n @Optional() private readonly translate: TranslateService,\r\n @Optional() private readonly translaterService: TranslaterService,\r\n @Inject('config') private forRootConfig: GridOption,\r\n @Inject('externalService') externalServices: ExternalTestingDependencies\r\n ) {\r\n const slickgridConfig = new SlickgridConfig();\r\n\r\n // initialize and assign all Service Dependencies\r\n this._eventPubSubService = externalServices?.eventPubSubService ?? new EventPubSubService(this.elm.nativeElement);\r\n this._eventPubSubService.eventNamingStyle = EventNamingStyle.camelCase;\r\n\r\n this.backendUtilityService = externalServices?.backendUtilityService ?? new BackendUtilityService();\r\n this.gridEventService = externalServices?.gridEventService ?? new GridEventService();\r\n this.sharedService = externalServices?.sharedService ?? new SharedService();\r\n this.collectionService = externalServices?.collectionService ?? new CollectionService(this.translaterService);\r\n this.extensionUtility = externalServices?.extensionUtility ?? new ExtensionUtility(this.sharedService, this.backendUtilityService, this.translaterService);\r\n this.filterFactory = new FilterFactory(slickgridConfig, this.translaterService, this.collectionService);\r\n this.filterService = externalServices?.filterService ?? new FilterService(this.filterFactory as any, this._eventPubSubService, this.sharedService, this.backendUtilityService);\r\n this.resizerService = externalServices?.resizerService ?? new ResizerService(this._eventPubSubService);\r\n this.sortService = externalServices?.sortService ?? new SortService(this.sharedService, this._eventPubSubService, this.backendUtilityService);\r\n this.treeDataService = externalServices?.treeDataService ?? new TreeDataService(this._eventPubSubService, this.sharedService, this.sortService);\r\n this.paginationService = externalServices?.paginationService ?? new PaginationService(this._eventPubSubService, this.sharedService, this.backendUtilityService);\r\n\r\n this.extensionService = externalServices?.extensionService ?? new ExtensionService(\r\n this.extensionUtility,\r\n this.filterService,\r\n this._eventPubSubService,\r\n this.sharedService,\r\n this.sortService,\r\n this.treeDataService,\r\n this.translaterService,\r\n );\r\n\r\n this.gridStateService = externalServices?.gridStateService ?? new GridStateService(this.extensionService, this.filterService, this._eventPubSubService, this.sharedService, this.sortService, this.treeDataService);\r\n this.gridService = externalServices?.gridService ?? new GridService(this.gridStateService, this.filterService, this._eventPubSubService, this.paginationService, this.sharedService, this.sortService, this.treeDataService);\r\n this.groupingService = externalServices?.groupingAndColspanService ?? new GroupingAndColspanService(this.extensionUtility, this._eventPubSubService);\r\n\r\n this.serviceList = [\r\n this.extensionService,\r\n this.filterService,\r\n this.gridEventService,\r\n this.gridService,\r\n this.gridStateService,\r\n this.groupingService,\r\n this.paginationService,\r\n this.resizerService,\r\n this.sortService,\r\n this.treeDataService,\r\n ];\r\n\r\n // register all Service instances in the container\r\n this.containerService.registerInstance('ExtensionUtility', this.extensionUtility);\r\n this.containerService.registerInstance('FilterService', this.filterService);\r\n this.containerService.registerInstance('CollectionService', this.collectionService);\r\n this.containerService.registerInstance('ExtensionService', this.extensionService);\r\n this.containerService.registerInstance('GridEventService', this.gridEventService);\r\n this.containerService.registerInstance('GridService', this.gridService);\r\n this.containerService.registerInstance('GridStateService', this.gridStateService);\r\n this.containerService.registerInstance('GroupingAndColspanService', this.groupingService);\r\n this.containerService.registerInstance('PaginationService', this.paginationService);\r\n this.containerService.registerInstance('ResizerService', this.resizerService);\r\n this.containerService.registerInstance('SharedService', this.sharedService);\r\n this.containerService.registerInstance('SortService', this.sortService);\r\n this.containerService.registerInstance('EventPubSubService', this._eventPubSubService);\r\n this.containerService.registerInstance('PubSubService', this._eventPubSubService);\r\n this.containerService.registerInstance('TranslaterService', this.translaterService);\r\n this.containerService.registerInstance('TreeDataService', this.treeDataService);\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.initialization(this._eventHandler);\r\n this._isGridInitialized = true;\r\n\r\n // recheck the empty warning message after grid is shown so that it works in every use case\r\n if (this.gridOptions && this.gridOptions.enableEmptyDataWarningMessage && Array.isArray(this.dataset)) {\r\n const finalTotalCount = this.dataset.length;\r\n this.displayEmptyDataWarning(finalTotalCount < 1);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._eventPubSubService.publish('onBeforeGridDestroy', this.slickGrid);\r\n this.destroy();\r\n this._eventPubSubService.publish('onAfterGridDestroyed', true);\r\n }\r\n\r\n destroy(shouldEmptyDomElementContainer = false) {\r\n // dispose of all Services\r\n this.serviceList.forEach((service: any) => {\r\n if (service && service.dispose) {\r\n service.dispose();\r\n }\r\n });\r\n this.serviceList = [];\r\n\r\n // dispose all registered external resources\r\n if (Array.isArray(this._registeredResources)) {\r\n while (this._registeredResources.length > 0) {\r\n const resource = this._registeredResources.pop();\r\n if (resource?.dispose) {\r\n resource.dispose();\r\n }\r\n }\r\n this._registeredResources = [];\r\n }\r\n\r\n // dispose the Components\r\n this.slickEmptyWarning?.dispose();\r\n this.slickFooter?.dispose();\r\n this.slickPagination?.dispose();\r\n\r\n if (this._eventHandler?.unsubscribeAll) {\r\n this._eventHandler.unsubscribeAll();\r\n }\r\n this._eventPubSubService?.unsubscribeAll();\r\n if (this.dataView) {\r\n if (this.dataView?.setItems) {\r\n this.dataView.setItems([]);\r\n }\r\n if (this.dataView.destroy) {\r\n this.dataView.destroy();\r\n }\r\n }\r\n if (this.slickGrid?.destroy) {\r\n this.slickGrid.destroy(shouldEmptyDomElementContainer);\r\n }\r\n\r\n if (this.backendServiceApi) {\r\n for (const prop of Object.keys(this.backendServiceApi)) {\r\n delete this.backendServiceApi[prop as keyof BackendServiceApi];\r\n }\r\n this.backendServiceApi = undefined;\r\n }\r\n for (const prop of Object.keys(this.columnDefinitions)) {\r\n (this.columnDefinitions as any)[prop] = null;\r\n }\r\n for (const prop of Object.keys(this.sharedService)) {\r\n (this.sharedService as any)[prop] = null;\r\n }\r\n\r\n // we could optionally also empty the content of the grid container DOM element\r\n if (shouldEmptyDomElementContainer) {\r\n this.emptyGridContainerElm();\r\n }\r\n\r\n // also unsubscribe all RxJS subscriptions\r\n this.subscriptions = unsubscribeAll(this.subscriptions);\r\n\r\n this._dataset = null;\r\n this.datasetHierarchical = undefined;\r\n this._columnDefinitions = [];\r\n this._angularGridInstances = undefined;\r\n }\r\n\r\n emptyGridContainerElm() {\r\n const gridContainerId = this.gridOptions?.gridContainerId ?? 'grid1';\r\n const gridContainerElm = document.querySelector(`#${gridContainerId}`);\r\n emptyElement(gridContainerElm);\r\n }\r\n\r\n /**\r\n * Define our internal Post Process callback, it will execute internally after we get back result from the Process backend call\r\n * For now, this is GraphQL Service ONLY feature and it will basically refresh the Dataset & Pagination without having the user to create his own PostProcess every time\r\n */\r\n createBackendApiInternalPostProcessCallback(gridOptions: GridOption) {\r\n const backendApi = gridOptions && gridOptions.backendServiceApi;\r\n if (backendApi && backendApi.service) {\r\n const backendApiService = backendApi.service;\r\n\r\n // internalPostProcess only works (for now) with a GraphQL Service, so make sure it is of that type\r\n if (typeof backendApiService.getDatasetName === 'function') {\r\n backendApi.internalPostProcess = (processResult: any) => {\r\n const datasetName = (backendApi && backendApiService && typeof backendApiService.getDatasetName === 'function') ? backendApiService.getDatasetName() : '';\r\n if (processResult?.data[datasetName]) {\r\n const data = processResult.data[datasetName].hasOwnProperty('nodes') ? (processResult as any).data[datasetName].nodes : (processResult as any).data[datasetName];\r\n const totalCount = processResult.data[datasetName].hasOwnProperty('totalCount') ? (processResult as any).data[datasetName].totalCount : (processResult as any).data[datasetName].length;\r\n this.refreshGridData(data, totalCount || 0);\r\n }\r\n };\r\n }\r\n }\r\n }\r\n\r\n initialization(eventHandler: SlickEventHandler) {\r\n this.gridOptions.translater = this.translaterService;\r\n this._eventHandler = eventHandler;\r\n\r\n // when detecting a frozen grid, we'll automatically enable the mousewheel scroll handler so that we can scroll from both left/right frozen containers\r\n if (this.gridOptions && ((this.gridOptions.frozenRow !== undefined && this.gridOptions.frozenRow >= 0) || this.gridOptions.frozenColumn !== undefined && this.gridOptions.frozenColumn >= 0) && this.gridOptions.enableMouseWheelScrollHandler === undefined) {\r\n this.gridOptions.enableMouseWheelScrollHandler = true;\r\n }\r\n\r\n this._eventPubSubService.eventNamingStyle = this.gridOptions?.eventNamingStyle ?? EventNamingStyle.camelCase;\r\n this._eventPubSubService.publish('onBeforeGridCreate', true);\r\n\r\n // make sure the dataset is initialized (if not it will throw an error that it cannot getLength of null)\r\n this._dataset = this._dataset || [];\r\n this.gridOptions = this.mergeGridOptions(this.gridOptions);\r\n this._paginationOptions = this.gridOptions?.pagination;\r\n this.locales = this.gridOptions?.locales ?? Constants.locales;\r\n this.backendServiceApi = this.gridOptions?.backendServiceApi;\r\n this._isLocalGrid = !this.backendServiceApi; // considered a local grid if it doesn't have a backend service set\r\n\r\n this.createBackendApiInternalPostProcessCallback(this.gridOptions);\r\n\r\n if (!this.customDataView) {\r\n const dataviewInlineFilters = this.gridOptions.dataView && this.gridOptions.dataView.inlineFilters || false;\r\n let dataViewOptions: DataViewOption = { inlineFilters: dataviewInlineFilters };\r\n\r\n if (this.gridOptions.draggableGrouping || this.gridOptions.enableGrouping) {\r\n this.groupItemMetadataProvider = new SlickGroupItemMetadataProvider();\r\n this.sharedService.groupItemMetadataProvider = this.groupItemMetadataProvider;\r\n dataViewOptions = { ...dataViewOptions, groupItemMetadataProvider: this.groupItemMetadataProvider };\r\n }\r\n this.dataView = new Slick.Data.DataView(dataViewOptions);\r\n this._eventPubSubService.publish('onDataviewCreated', this.dataView);\r\n }\r\n\r\n // get any possible Services that user want to register which don't require SlickGrid to be instantiated\r\n // RxJS Resource is in this lot because it has to be registered before anything else and doesn't require SlickGrid to be initialized\r\n this.preRegisterResources();\r\n\r\n // for convenience to the user, we provide the property \"editor\" as an Angular-Slickgrid editor complex object\r\n // however \"editor\" is used internally by SlickGrid for it's own Editor Factory\r\n // so in our lib we will swap \"editor\" and copy it into a new property called \"internalColumnEditor\"\r\n // then take back \"editor.model\" and make it the new \"editor\" so that SlickGrid Editor Factory still works\r\n this._columnDefinitions = this.swapInternalEditorToSlickGridFactoryEditor(this._columnDefinitions);\r\n\r\n // if the user wants to automatically add a Custom Editor Formatter, we need to call the auto add function again\r\n if (this.gridOptions.autoAddCustomEditorFormatter) {\r\n autoAddEditorFormatterToColumnsWithEditor(this._columnDefinitions, this.gridOptions.autoAddCustomEditorFormatter);\r\n }\r\n\r\n // save reference for all columns before they optionally become hidden/visible\r\n this.sharedService.allColumns = this._columnDefinitions;\r\n this.sharedService.visibleColumns = this._columnDefinitions;\r\n this.extensionService.createExtensionsBeforeGridCreation(this._columnDefinitions, this.gridOptions);\r\n\r\n // if user entered some Pinning/Frozen \"presets\", we need to apply them in the grid options\r\n if (this.gridOptions.presets?.pinning) {\r\n this.gridOptions = { ...this.gridOptions, ...this.gridOptions.presets.pinning };\r\n }\r\n\r\n // build SlickGrid Grid, also user might optionally pass a custom dataview (e.g. remote model)\r\n this.slickGrid = new Slick.Grid(`#${this.gridId}`, this.customDataView || this.dataView, this._columnDefinitions, this.gridOptions);\r\n this.sharedService.dataView = this.dataView;\r\n this.sharedService.slickGrid = this.slickGrid;\r\n this.sharedService.gridContainerElement = this.elm.nativeElement as HTMLDivElement;\r\n\r\n this.extensionService.bindDifferentExtensions();\r\n this.bindDifferentHooks(this.slickGrid, this.gridOptions, this.dataView);\r\n\r\n // when it's a frozen grid, we need to keep the frozen column id for reference if we ever show/hide column from ColumnPicker/GridMenu afterward\r\n const frozenColumnIndex = this.gridOptions.frozenColumn !== undefined ? this.gridOptions.frozenColumn : -1;\r\n if (frozenColumnIndex >= 0 && frozenColumnIndex <= this._columnDefinitions.length) {\r\n this.sharedService.frozenVisibleColumnId = this._columnDefinitions[frozenColumnIndex].id || '';\r\n }\r\n\r\n // get any possible Services that user want to register\r\n this.registerResources();\r\n\r\n // initialize the SlickGrid grid\r\n this.slickGrid.init();\r\n\r\n // initialized the resizer service only after SlickGrid is initialized\r\n // if we don't we end up binding our resize to a grid element that doesn't yet exist in the DOM and the resizer service will fail silently (because it has a try/catch that unbinds the resize without throwing back)\r\n if (this.gridContainerElement) {\r\n this.resizerService.init(this.slickGrid, this.gridContainerElement as HTMLDivElement);\r\n }\r\n\r\n // user could show a custom footer with the data metrics (dataset length and last updated timestamp)\r\n if (!this.gridOptions.enablePagination && this.gridOptions.showCustomFooter && this.gridOptions.customFooterOptions && this.gridContainerElement) {\r\n this.slickFooter = new SlickFooterComponent(this.slickGrid, this.gridOptions.customFooterOptions, this._eventPubSubService, this.translaterService);\r\n this.slickFooter.renderFooter(this.gridContainerElement);\r\n }\r\n\r\n if (!this.customDataView && this.dataView) {\r\n // load the data in the DataView (unless it's a hierarchical dataset, if so it will be loaded after the initial tree sort)\r\n const initialDataset = this.gridOptions?.enableTreeData ? this.sortTreeDataset(this._dataset) : this._dataset;\r\n this.dataView.beginUpdate();\r\n this.dataView.setItems(initialDataset || [], this.gridOptions.datasetIdPropertyName ?? 'id');\r\n this.dataView.endUpdate();\r\n\r\n // if you don't want the items that are not visible (due to being filtered out or being on a different page)\r\n // to stay selected, pass 'false' to the second arg\r\n const selectionModel = this.slickGrid?.getSelectionModel();\r\n if (selectionModel && this.gridOptions && this.gridOptions.dataView && this.gridOptions.dataView.hasOwnProperty('syncGridSelection')) {\r\n // if we are using a Backend Service, we will do an extra flag check, the reason is because it might have some unintended behaviors\r\n // with the BackendServiceApi because technically the data in the page changes the DataView on every page change.\r\n let preservedRowSelectionWithBackend = false;\r\n if (this.gridOptions.backendServiceApi && this.gridOptions.dataView.hasOwnProperty('syncGridSelectionWithBackendService')) {\r\n preservedRowSelectionWithBackend = this.gridOptions.dataView.syncGridSelectionWithBackendService as boolean;\r\n }\r\n\r\n const syncGridSelection = this.gridOptions.dataView.syncGridSelection;\r\n if (typeof syncGridSelection === 'boolean') {\r\n let preservedRowSelection = syncGridSelection;\r\n if (!this._isLocalGrid) {\r\n // when using BackendServiceApi, we'll be using the \"syncGridSelectionWithBackendService\" flag BUT \"syncGridSelection\" must also be set to True\r\n preservedRowSelection = syncGridSelection && preservedRowSelectionWithBackend;\r\n }\r\n this.dataView.syncGridSelection(this.slickGrid, preservedRowSelection);\r\n } else if (typeof syncGridSelection === 'object') {\r\n this.dataView.syncGridSelection(this.slickGrid, syncGridSelection.preserveHidden, syncGridSelection.preserveHiddenOnSelectionChange);\r\n }\r\n }\r\n\r\n const datasetLn = this.dataView.getLength() || this._dataset && this._dataset.length || 0;\r\n if (datasetLn > 0) {\r\n if (!this._isDatasetInitialized && (this.gridOptions.enableCheckboxSelector || this.gridOptions.enableRowSelection)) {\r\n this.loadRowSelectionPresetWhenExists();\r\n }\r\n this.loadFilterPresetsWhenDatasetInitialized();\r\n this._isDatasetInitialized = true;\r\n }\r\n }\r\n\r\n // user might want to hide the header row on page load but still have `enableFiltering: true`\r\n // if that is the case, we need to hide the headerRow ONLY AFTER all filters got created & dataView exist\r\n if (this._hideHeaderRowAfterPageLoad) {\r\n this.showHeaderRow(false);\r\n this.sharedService.hideHeaderRowAfterPageLoad = this._hideHeaderRowAfterPageLoad;\r\n }\r\n\r\n // publish & dispatch certain events\r\n this._eventPubSubService.publish('onGridCreated', this.slickGrid);\r\n\r\n // after the DataView is created & updated execute some processes\r\n if (!this.customDataView) {\r\n this.executeAfterDataviewCreated(this.slickGrid, this.gridOptions);\r\n }\r\n\r\n // bind resize ONLY after the dataView is ready\r\n this.bindResizeHook(this.slickGrid, this.gridOptions);\r\n\r\n // bind the Backend Service API callback functions only after the grid is initialized\r\n // because the preProcess() and onInit() might get triggered\r\n if (this.gridOptions?.backendServiceApi) {\r\n this.bindBackendCallbackFunctions(this.gridOptions);\r\n }\r\n\r\n // local grid, check if we need to show the Pagination\r\n // if so then also check if there's any presets and finally initialize the PaginationService\r\n // a local grid with Pagination presets will potentially have a different total of items, we'll need to get it from the DataView and update our total\r\n if (this.gridOptions?.enablePagination && this._isLocalGrid) {\r\n this.showPagination = true;\r\n this.loadLocalGridPagination(this.dataset);\r\n }\r\n\r\n this._angularGridInstances = {\r\n // Slick Grid & DataView objects\r\n dataView: this.dataView,\r\n slickGrid: this.slickGrid,\r\n extensions: this.extensionService?.extensionList,\r\n\r\n // public methods\r\n destroy: this.destroy.bind(this),\r\n\r\n // return all available Services (non-singleton)\r\n backendService: this.gridOptions?.backendServiceApi?.service,\r\n filterService: this.filterService,\r\n gridEventService: this.gridEventService,\r\n gridStateService: this.gridStateService,\r\n gridService: this.gridService,\r\n groupingService: this.groupingService,\r\n extensionService: this.extensionService,\r\n paginationService: this.paginationService,\r\n resizerService: this.resizerService,\r\n sortService: this.sortService,\r\n treeDataService: this.treeDataService,\r\n }\r\n\r\n // all instances (SlickGrid, DataView & all Services)\r\n this._eventPubSubService.publish('onAngularGridCreated', this._angularGridInstances);\r\n }\r\n\r\n /**\r\n * On a Pagination changed, we will trigger a Grid State changed with the new pagination info\r\n * Also if we use Row Selection or the Checkbox Selector, we need to reset any selection\r\n */\r\n paginationChanged(pagination: ServicePagination) {\r\n const isSyncGridSelectionEnabled = this.gridStateService?.needToPreserveRowSelection() ?? false;\r\n if (!isSyncGridSelectionEnabled && (this.gridOptions.enableRowSelection || this.gridOptions.enableCheckboxSelector)) {\r\n this.slickGrid.setSelectedRows([]);\r\n }\r\n const { pageNumber, pageSize } = pagination;\r\n if (this.sharedService) {\r\n if (pageSize !== undefined && pageNumber !== undefined) {\r\n this.sharedService.currentPagination = { pageNumber, pageSize };\r\n }\r\n }\r\n this._eventPubSubService.publish('onGridStateChanged', {\r\n change: { newValues: { pageNumber, pageSize }, type: GridStateType.pagination },\r\n gridState: this.gridStateService.getCurrentGridState()\r\n });\r\n this.cd.markForCheck();\r\n }\r\n\r\n /**\r\n * When dataset changes, we need to refresh the entire grid UI & possibly resize it as well\r\n * @param dataset\r\n */\r\n refreshGridData(dataset: any[], totalCount?: number) {\r\n if (this.gridOptions && this.gridOptions.enableEmptyDataWarningMessage && Array.isArray(dataset)) {\r\n const finalTotalCount = totalCount || dataset.length;\r\n this.displayEmptyDataWarning(finalTotalCount < 1);\r\n }\r\n\r\n if (Array.isArray(dataset) && this.slickGrid && this.dataView?.setItems) {\r\n this.dataView.setItems(dataset, this.gridOptions.datasetIdPropertyName ?? 'id');\r\n if (!this.gridOptions.backendServiceApi && !this.gridOptions.enableTreeData) {\r\n this.dataView.reSort();\r\n }\r\n\r\n if (dataset.length > 0) {\r\n if (!this._isDatasetInitialized) {\r\n this.loadFilterPresetsWhenDatasetInitialized();\r\n\r\n if (this.gridOptions.enableCheckboxSelector) {\r\n this.loadRowSelectionPresetWhenExists();\r\n }\r\n }\r\n this._isDatasetInitialized = true;\r\n }\r\n\r\n if (dataset) {\r\n this.slickGrid.invalidate();\r\n }\r\n\r\n // display the Pagination component only after calling this refresh data first, we call it here so that if we preset pagination page number it will be shown correctly\r\n this.showPagination = (this.gridOptions && (this.gridOptions.enablePagination || (this.gridOptions.backendServiceApi && this.gridOptions.enablePagination === undefined))) ? true : false;\r\n\r\n if (this._paginationOptions && this.gridOptions?.pagination && this.gridOptions?.backendServiceApi) {\r\n const paginationOptions = this.setPaginationOptionsWhenPresetDefined(this.gridOptions, this._paginationOptions as Pagination);\r\n // when we have a totalCount use it, else we'll take it from the pagination object\r\n // only update the total items if it's different to avoid refreshing the UI\r\n const totalRecords = (totalCount !== undefined) ? totalCount : (this.gridOptions?.pagination?.totalItems);\r\n if (totalRecords !== undefined && totalRecords !== this.totalItems) {\r\n this.totalItems = +totalRecords;\r\n }\r\n\r\n // initialize the Pagination Service with new pagination options (which might have presets)\r\n if (!this._isPaginationInitialized) {\r\n this.initializePaginationService(paginationOptions);\r\n } else {\r\n // update the pagination service with the new total\r\n this.paginationService.updateTotalItems(this.totalItems);\r\n }\r\n }\r\n\r\n // resize the grid inside a slight timeout, in case other DOM element changed prior to the resize (like a filter/pagination changed)\r\n if (this.slickGrid && this.gridOptions.enableAutoResize) {\r\n const delay = this.gridOptions.autoResize && this.gridOptions.autoResize.delay;\r\n this.resizerService.resizeGrid(delay || 10);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Check if there's any Pagination Presets defined in the Grid Options,\r\n * if there are then load them in the paginationOptions object\r\n */\r\n setPaginationOptionsWhenPresetDefined(gridOptions: GridOption, paginationOptions: Pagination): Pagination {\r\n if (gridOptions.presets?.pagination && paginationOptions && !this._isPaginationInitialized) {\r\n paginationOptions.pageSize = gridOptions.presets.pagination.pageSize;\r\n paginationOptions.pageNumber = gridOptions.presets.pagination.pageNumber;\r\n }\r\n return paginationOptions;\r\n }\r\n\r\n /**\r\n * Dynamically change or update the column definitions list.\r\n * We will re-render the grid so that the new header and data shows up correctly.\r\n * If using i18n, we also need to trigger a re-translate of the column headers\r\n */\r\n updateColumnDefinitionsList(newColumnDefinitions: Column[]) {\r\n // map/swap the internal library Editor to the SlickGrid Editor factory\r\n newColumnDefinitions = this.swapInternalEditorToSlickGridFactoryEditor(newColumnDefinitions);\r\n\r\n if (this.gridOptions.enableTranslate) {\r\n this.extensionService.translateColumnHeaders(false, newColumnDefinitions);\r\n } else {\r\n this.extensionService.renderColumnHeaders(newColumnDefinitions, true);\r\n }\r\n\r\n if (this.gridOptions?.enableAutoSizeColumns) {\r\n this.slickGrid.autosizeColumns();\r\n } else if (this.gridOptions?.enableAutoResizeColumnsByCellContent && this.resizerService?.resizeColumnsByCellContent) {\r\n this.resizerService.resizeColumnsByCellContent();\r\n }\r\n }\r\n\r\n /**\r\n * Show the filter row displayed on first row, we can optionally pass false to hide it.\r\n * @param showing\r\n */\r\n showHeaderRow(showing = true) {\r\n this.slickGrid.setHeaderRowVisibility(showing, false);\r\n if (showing === true && this._isGridInitialized) {\r\n this.slickGrid.setColumns(this.columnDefinitions);\r\n }\r\n return showing;\r\n }\r\n\r\n //\r\n // private functions\r\n // ------------------\r\n\r\n /**\r\n * Loop through all column definitions and copy the original optional `width` properties optionally provided by the user.\r\n * We will use this when doing a resize by cell content, if user provided a `width` it won't override it.\r\n */\r\n private copyColumnWidthsReference(columnDefinitions: Column[]) {\r\n columnDefinitions.forEach(col => col.originalWidth = col.width);\r\n }\r\n\r\n private displayEmptyDataWarning(showWarning = true) {\r\n this.slickEmptyWarning?.showEmptyDataMessage(showWarning);\r\n }\r\n\r\n private bindDifferentHooks(grid: SlickGrid, gridOptions: GridOption, dataView: SlickDataView) {\r\n // on locale change, we have to manually translate the Headers, GridMenu\r\n if (this.translate?.onLangChange) {\r\n // translate some of them on first load, then on each language change\r\n if (gridOptions.enableTranslate) {\r\n this.extensionService.translateAllExtensions();\r\n this.translateColumnHeaderTitleKeys();\r\n this.translateColumnGroupKeys();\r\n }\r\n\r\n this.subscriptions.push(\r\n this.translate.onLangChange.subscribe(() => {\r\n // publish event of the same name that Slickgrid-Universal uses on a language change event\r\n this._eventPubSubService.publish('onLanguageChange');\r\n\r\n if (gridOptions.enableTranslate) {\r\n this.extensionService.translateAllExtensions();\r\n this.translateColumnHeaderTitleKeys();\r\n this.translateColumnGroupKeys();\r\n if (gridOptions.createPreHeaderPanel && !gridOptions.enableDraggableGrouping) {\r\n this.groupingService.translateGroupingAndColSpan();\r\n }\r\n }\r\n })\r\n );\r\n }\r\n\r\n // if user set an onInit Backend, we'll run it right away (and if so, we also need to run preProcess, internalPostProcess & postProcess)\r\n if (gridOptions.backendServiceApi) {\r\n const backendApi = gridOptions.backendServiceApi;\r\n\r\n if (backendApi?.service?.init) {\r\n backendApi.service.init(backendApi.options, gridOptions.pagination, this.slickGrid, this.sharedService);\r\n }\r\n }\r\n\r\n if (dataView && grid) {\r\n const slickgridEventPrefix = this.gridOptions?.defaultSlickgridEventPrefix ?? '';\r\n\r\n // expose all Slick Grid Events through dispatch\r\n for (const prop in grid) {\r\n if (grid.hasOwnProperty(prop) && prop.startsWith('on')) {\r\n const gridEventName = this._eventPubSubService.getEventNameByNamingConvention(prop, slickgridEventPrefix);\r\n this._eventHandler.subscribe((grid as any)[prop], (event, args) => {\r\n return this._eventPubSubService.dispatchCustomEvent(gridEventName, { eventData: event, args });\r\n });\r\n }\r\n }\r\n\r\n // expose all Slick DataView Events through dispatch\r\n for (const prop in dataView) {\r\n if (dataView.hasOwnProperty(prop) && prop.startsWith('on')) {\r\n this._eventHandler.subscribe((dataView as any)[prop], (event, args) => {\r\n const dataViewEventName = this._eventPubSubService.getEventNameByNamingConvention(prop, slickgridEventPrefix);\r\n return this._eventPubSubService.dispatchCustomEvent(dataViewEventName, { eventData: event, args });\r\n });\r\n }\r\n }\r\n\r\n // on cell click, mainly used with the columnDef.action callback\r\n this.gridEventService.bindOnCellChange(grid);\r\n this.gridEventService.bindOnClick(grid);\r\n\r\n if (dataView && grid) {\r\n // bind external sorting (backend) when available or default onSort (dataView)\r\n if (gridOptions.enableSorting) {\r\n // bind external sorting (backend) unless specified to use the local one\r\n if (gridOptions.backendServiceApi && !gridOptions.backendServiceApi.useLocalSorting) {\r\n this.sortService.bindBackendOnSort(grid);\r\n } else {\r\n this.sortService.bindLocalOnSort(grid);\r\n }\r\n }\r\n\r\n // bind external filter (backend) when available or default onFilter (dataView)\r\n if (gridOptions.enableFiltering) {\r\n this.filterService.init(grid);\r\n\r\n // bind external filter (backend) unless specified to use the local one\r\n if (gridOptions.backendServiceApi && !gridOptions.backendServiceApi.useLocalFiltering) {\r\n this.filterService.bindBackendOnFilter(grid);\r\n } else {\r\n this.filterService.bindLocalOnFilter(grid);\r\n }\r\n }\r\n\r\n // load any presets if any (after dataset is initialized)\r\n this.loadColumnPresetsWhenDatasetInitialized();\r\n this.loadFilterPresetsWhenDatasetInitialized();\r\n\r\n // When data changes in the DataView, we need to refresh the metrics and/or display a warning if the dataset is empty\r\n this._eventHandler.subscribe(dataView.onRowCountChanged, () => {\r\n grid.invalidate();\r\n this.handleOnItemCountChanged(this.dataView.getFilteredItemCount() || 0, dataView.getItemCount());\r\n });\r\n this._eventHandler.subscribe(dataView.onSetItemsCalled, (_e, args) => {\r\n grid.invalidate();\r\n this.handleOnItemCountChanged(this.dataView.getFilteredItemCount(), args.itemCount);\r\n\r\n // when user has resize by content enabled, we'll force a full width calculation since we change our entire dataset\r\n if (args.itemCount > 0 && (this.gridOptions.autosizeColumnsByCellContentOnFirstLoad || this.gridOptions.enableAutoResizeColumnsByCellContent)) {\r\n this.resizerService.resizeColumnsByCellContent(!this.gridOptions?.resizeByContentOnlyOnFirstLoad);\r\n }\r\n });\r\n\r\n this._eventHandler.subscribe(dataView.onRowsChanged, (_e, args) => {\r\n // filtering data with local dataset will not always show correctly unless we call this updateRow/render\r\n // also don't use \"invalidateRows\" since it destroys the entire row and as bad user experience when updating a row\r\n // see commit: https://github.com/ghiscoding/aurelia-slickgrid/commit/8c503a4d45fba11cbd8d8cc467fae8d177cc4f60\r\n if (gridOptions && gridOptions.enableFiltering && !gridOptions.enableRowDetailView) {\r\n if (args?.rows && Array.isArray(args.rows)) {\r\n args.rows.forEach((row: number) => grid.updateRow(row));\r\n grid.render();\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // did the user add a colspan callback? If so, hook it into the DataView getItemMetadata\r\n if (gridOptions && gridOptions.colspanCallback && dataView && dataView.getItem && dataView.getItemMetadata) {\r\n dataView.getItemMetadata = (rowNumber: number) => {\r\n let callbackResult = null;\r\n if (gridOptions.colspanCallback && gridOptions.colspanCallback) {\r\n callbackResult = gridOptions.colspanCallback(dataView.getItem(rowNumber));\r\n }\r\n return callbackResult;\r\n };\r\n }\r\n }\r\n\r\n private bindBackendCallbackFunctions(gridOptions: GridOption) {\r\n const backendApi = gridOptions.backendServiceApi;\r\n const backendApiService = backendApi && backendApi.service;\r\n const serviceOptions: BackendServiceOption = backendApiService?.options ?? {};\r\n const isExecuteCommandOnInit = (!serviceOptions) ? false : ((serviceOptions && serviceOptions.hasOwnProperty('executeProcessCommandOnInit')) ? serviceOptions['executeProcessCommandOnInit'] : true);\r\n\r\n if (backendApiService) {\r\n // update backend filters (if need be) BEFORE the query runs (via the onInit command a few lines below)\r\n // if user entered some any \"presets\", we need to reflect them all in the grid\r\n if (gridOptions && gridOptions.presets) {\r\n // Filters \"presets\"\r\n if (backendApiService.updateFilters && Array.isArray(gridOptions.presets.filters) && gridOptions.presets.filters.length > 0) {\r\n backendApiService.updateFilters(gridOptions.presets.filters, true);\r\n }\r\n // Sorters \"presets\"\r\n if (backendApiService.updateSorters && Array.isArray(gridOptions.presets.sorters) && gridOptions.presets.sorters.length > 0) {\r\n // when using multi-column sort, we can have multiple but on single sort then only grab the first sort provided\r\n const sortColumns = this.gridOptions.multiColumnSort ? gridOptions.presets.sorters : gridOptions.presets.sorters.slice(0, 1);\r\n backendApiService.updateSorters(undefined, sortColumns);\r\n }\r\n // Pagination \"presets\"\r\n if (backendApiService.updatePagination && gridOptions.presets.pagination) {\r\n const { pageNumber, pageSize } = gridOptions.presets.pagination;\r\n backendApiService.updatePagination(pageNumber, pageSize);\r\n }\r\n } else {\r\n const columnFilters = this.filterService.getColumnFilters();\r\n if (columnFilters && backendApiService.updateFilters) {\r\n backendApiService.updateFilters(columnFilters, false);\r\n }\r\n }\r\n\r\n // execute onInit command when necessary\r\n if (backendApi && backendApiService && (backendApi.onInit || isExecuteCommandOnInit)) {\r\n const query = (typeof backendApiService.buildQuery === 'function') ? backendApiService.buildQuery() : '';\r\n const process = (isExecuteCommandOnInit) ? (backendApi.process && backendApi.process(query) || null) : (backendApi.onInit && backendApi.onInit(query) || null);\r\n\r\n // wrap this inside a setTimeout to avoid timing issue since the gridOptions needs to be ready before running this onInit\r\n setTimeout(() => {\r\n const backendUtilityService = this.backendUtilityService as BackendUtilityService;\r\n\r\n // keep start time & end timestamps & return it after process execution\r\n const startTime = new Date();\r\n\r\n // run any pre-process, if defined, for example a spinner\r\n if (backendApi.preProcess) {\r\n backendApi.preProcess();\r\n }\r\n\r\n // the processes can be a Promise (like Http)\r\n const totalItems = this.gridOptions?.pagination?.totalItems ?? 0;\r\n if (process instanceof Promise) {\r\n process\r\n .then((processResult: any) => backendUtilityService.executeBackendProcessesCallback(startTime, processResult, backendApi, totalItems))\r\n .catch((error) => backendUtilityService.onBackendError(error, backendApi));\r\n } else if (process && this.rxjs?.isObservable(process)) {\r\n this.subscriptions.push(\r\n (process as Observable<any>).subscribe({\r\n next: (processResult: any) => backendUtilityService.executeBackendProcessesCallback(startTime, processResult, backendApi, totalItems),\r\n error: (error: any) => backendUtilityService.onBackendError(error, backendApi)\r\n })\r\n );\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n private bindResizeHook(grid: SlickGrid, options: GridOption) {\r\n if ((options.autoFitColumnsOnFirstLoad && options.autosizeColumnsByCellContentOnFirstLoad) || (options.enableAutoSizeColumns && options.enableAutoResizeColumnsByCellContent)) {\r\n throw new Error(`[Angular-Slickgrid] You cannot enable both autosize/fit viewport & resize by content, you must choose which resize technique to use. You can enable these 2 options (\"autoFitColumnsOnFirstLoad\" and \"enableAutoSizeColumns\") OR these other 2 options (\"autosizeColumnsByCellContentOnFirstLoad\" and \"enableAutoResizeColumnsByCellContent\").`);\r\n }\r\n\r\n // expand/autofit columns on first page load\r\n if (grid && options.autoFitColumnsOnFirstLoad && options.enableAutoSizeColumns) {\r\n grid.autosizeColumns();\r\n }\r\n\r\n // auto-resize grid on browser resize\r\n if (options.gridHeight || options.gridWidth) {\r\n this.resizerService.resizeGrid(0, { height: options.gridHeight, width: options.gridWidth });\r\n } else {\r\n this.resizerService.resizeGrid();\r\n }\r\n if (options.enableAutoResize) {\r\n if (grid && options.autoFitColumnsOnFirstLoad && options.enableAutoSizeColumns) {\r\n grid.autosizeColumns();\r\n }\r\n }\r\n }\r\n\r\n private executeAfterDataviewCreated(_grid: SlickGrid, gridOptions: GridOption) {\r\n // if user entered some Sort \"presets\", we need to reflect them all in the DOM\r\n if (gridOptions.enableSorting) {\r\n if (gridOptions.presets && Array.isArray(gridOptions.presets.sorters)) {\r\n // when using multi-column sort, we can have multiple but on single sort then only grab the first sort provided\r\n const sortColumns = this.gridOptions.multiColumnSort ? gridOptions.presets.sorters : gridOptions.presets.sorters.slice(0, 1);\r\n this.sortService.loadGridSorters(sortColumns);\r\n }\r\n }\r\n }\r\n\r\n /** When data changes in the DataView, we'll refresh the metrics and/or display a warning if the dataset is empty */\r\n private handleOnItemCountChanged(currentPageRowItemCount: number, totalItemCount: number) {\r\n this._currentDatasetLength = totalItemCount;\r\n this.metrics = {\r\n startTime: new Date(),\r\n endTime: new Date(),\r\n itemCount: currentPageRowItemCount,\r\n totalItemCount\r\n };\r\n // if custom footer is enabled, then we'll update its metrics\r\n if (this.slickFooter) {\r\n this.slickFooter.metrics = this.metrics;\r\n }\r\n\r\n // when using local (in-memory) dataset, we'll display a warning message when filtered data is empty\r\n if (this._isLocalGrid && this.gridOptions?.enableEmptyDataWarningMessage) {\r\n this.displayEmptyDataWarning(currentPageRowItemCount === 0);\r\n }\r\n }\r\n\r\n private initializePaginationService(paginationOptions: Pagination) {\r\n if (this.gridOptions) {\r\n this.paginationData = {\r\n gridOptions: this.gridOptions,\r\n paginationService: this.paginationService,\r\n };\r\n this.paginationService.totalItems = this.totalItems;\r\n this.paginationService.init(this.slickGrid, paginationOptions, this.backendServiceApi);\r\n this.subscriptions.push(\r\n this._eventPubSubService.subscribe('onPaginationChanged', (paginationChanges: ServicePagination) => {\r\n this.paginationChanged(paginationChanges);\r\n }),\r\n this._eventPubSubService.subscribe('onPaginationVisibilityChanged', (visibility: { visible: boolean }) => {\r\n this.showPagination = visibility?.visible ?? false;\r\n if (this.gridOptions?.backendServiceApi) {\r\n this.backendUtilityService?.refreshBackendDataset(this.gridOptions);\r\n }\r\n this.renderPagination(this.showPagination);\r\n })\r\n );\r\n // also initialize (render) the pagination component\r\n this.renderPagination();\r\n this._isPaginationInitialized = true;\r\n }\r\n this.cd.detectChanges();\r\n }\r\n\r\n /** Load the Editor Collection asynchronously and replace the \"collection\" property when Observable resolves */\r\n private loadEditorCollectionAsync(column: Column) {\r\n const collectionAsync = column && column.editor && (column.editor as ColumnEditor).collectionAsync;\r\n if (collectionAsync instanceof Observable) {\r\n this.subscriptions.push(\r\n collectionAsync.subscribe((resolvedCollection) => this.updateEditorCollection(column, resolvedCollection))\r\n );\r\n } else if (collectionAsync instanceof Promise) {\r\n // wait for the \"collectionAsync\", once resolved we will save it into the \"collection\"\r\n // the collectionAsync can be of 3 types HttpClient, HttpFetch or a Promise\r\n collectionAsync.then((response: any | any[]) => {\r\n if (Array.isArray(response)) {\r\n this.updateEditorCollection(column, response); // from Promise\r\n }\r\n });\r\n }\r\n }\r\n\r\n /** Load any possible Columns Grid Presets */\r\n private loadColumnPresetsWhenDatasetInitialized() {\r\n // if user entered some Columns \"presets\", we need to reflect them all in the grid\r\n if (this.gridOptions.presets && Array.isArray(this.gridOptions.presets.columns) && this.gridOptions.presets.columns.length > 0) {\r\n const gridColumns: Column[] = this.gridStateService.getAssociatedGridColumns(this.slickGrid, this.gridOptions.presets.columns);\r\n if (gridColumns && Array.isArray(gridColumns) && gridColumns.length > 0) {\r\n // make sure that the checkbox selector is also visible if it is enabled\r\n if (this.gridOptions.enableCheckboxSelector) {\r\n const checkboxColumn = (Array.isArray(this._columnDefinitions) && this._columnDefinitions.length > 0) ? this._columnDefinitions[0] : null;\r\n if (checkboxColumn && checkboxColumn.id === '_checkbox_selector' && gridColumns[0].id !== '_checkbox_selector') {\r\n gridColumns.unshift(checkboxColumn);\r\n }\r\n }\r\n\r\n // keep copy the original optional `width` properties optionally provided by the user.\r\n // We will use this when doing a resize by cell content, if user provided a `width` it won't override it.\r\n gridColumns.forEach(col => col.originalWidth = col.width);\r\n\r\n // finally set the new presets columns (including checkbox selector if need be)\r\n this.slickGrid.setColumns(gridColumns);\r\n this.sharedService.visibleColumns = gridColumns;\r\n }\r\n }\r\n }\r\n\r\n /** Load any possible Filters Grid Presets */\r\n private loadFilterPresetsWhenDatasetInitialized() {\r\n if (this.gridOptions && !this.customDataView) {\r\n // if user entered some Filter \"presets\", we need to reflect them all in the DOM\r\n // also note that a presets of Tree Data Toggling will also call this method because Tree Data toggling does work with data filtering\r\n // (collapsing a parent will basically use Filter for hidding (aka collapsing) away the child underneat it)\r\n if (this.gridOptions.presets && (Array.isArray(this.gridOptions.presets.filters) || Array.isArray(this.gridOptions.presets?.treeData?.toggledItems))) {\r\n this.filterService.populateColumnFilterSearchTermPresets(this.gridOptions.presets?.filters || []);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * local grid, check if we need to show the Pagination\r\n * if so then also check if there's any presets and finally initialize the PaginationService\r\n * a local grid with Pagination presets will potentially have a different total of items, we'll need to get it from the DataView and update our total\r\n */\r\n private loadLocalGridPagination(dataset?: any[]) {\r\n if (this.gridOptions && this._paginationOptions) {\r\n this.totalItems = Array.isArray(dataset) ? dataset.length : 0;\r\n if (this._paginationOptions && this.dataView?.getPagingInfo) {\r\n const slickPagingInfo = this.dataView.getPagingInfo();\r\n if (slickPagingInfo?.hasOwnProperty('totalRows') && this._paginationOptions.totalItems !== slickPagingInfo.totalRows) {\r\n this.totalItems = slickPagingInfo.totalRows || 0;\r\n }\r\n }\r\n this._paginationOptions.totalItems = this.totalItems;\r\n const paginationOptions = this.setPaginationOptionsWhenPresetDefined(this.gridOptions, this._paginationOptions);\r\n this.initializePaginationService(paginationOptions);\r\n }\r\n }\r\n\r\n /** Load any Row Selections into the DataView that were presets by the user */\r\n private loadRowSelectionPresetWhenExists() {\r\n // if user entered some Row Selections \"presets\"\r\n const presets = this.gridOptions?.presets;\r\n const selectionModel = this.slickGrid?.getSelectionModel();\r\n const enableRowSelection = this.gridOptions && (this.gridOptions.enableCheckboxSelector || this.gridOptions.enableRowSelection);\r\n if (enableRowSelection && selectionModel && presets && presets.rowSelection && (Array.isArray(presets.rowSelection.gridRowIndexes) || Array.isArray(presets.rowSelection.dataContextIds))) {\r\n let dataContextIds = presets.rowSelection.dataContextIds;\r\n let gridRowIndexes = presets.rowSelection.gridRowIndexes;\r\n\r\n // maps the IDs to the Grid Rows and vice versa, the \"dataContextIds\" has precedence over the other\r\n if (Array.isArray(dataContextIds) && dataContextIds.length > 0) {\r\n gridRowIndexes = this.dataView.mapIdsToRows(dataContextIds) || [];\r\n } else if (Array.isArray(gridRowIndexes) && gridRowIndexes.length > 0) {\r\n dataContextIds = this.dataView.mapRowsToIds(gridRowIndexes) || [];\r\n }\r\n this.gridStateService.selectedRowDataContextIds = dataContextIds;\r\n\r\n // change the selected rows except UNLESS it's a Local Grid with Pagination\r\n // local Pagination uses the DataView and that also trigger a change/refresh\r\n // and we don't want to trigger 2 Grid State changes just 1\r\n if ((this._isLocalGrid && !this.gridOptions.enablePagination) || !this._isLocalGrid) {\r\n setTimeout(() => {\r\n if (this.slickGrid && Array.isArray(gridRowIndexes)) {\r\n this.slickGrid.setSelectedRows(gridRowIndexes);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n private mergeGridOptions(gridOptions: GridOption): GridOption {\r\n gridOptions.gridId = this.gridId;\r\n gridOptions.gridContainerId = `slickGridContainer-${this.gridId}`;\r\n\r\n // if we have a backendServiceApi and the enablePagination is undefined, we'll assume that we do want to see it, else get that defined value\r\n gridOptions.enablePagination = ((gridOptions.backendServiceApi && gridOptions.enablePagination === undefined) ? true : gridOptions.enablePagination) || false;\r\n\r\n // use jquery extend to deep merge & copy to avoid immutable properties being changed in GlobalGridOptions after a route change\r\n const options = $.extend(true, {}, GlobalGridOptions, this.forRootConfig, gridOptions) as GridOption;\r\n\r\n // using jQuery extend to do a deep clone has an unwanted side on objects and pageSizes but ES6 spread has other worst side effects\r\n // so we will just overwrite the pageSizes when needed, this is the only one causing issues so far.\r\n // jQuery wrote this on their docs:: On a deep extend, Object and Array are extended, but object wrappers on primitive types such as String, Boolean, and Number are not.\r\n if (options?.pagination && (gridOptions.enablePagination || gridOptions.backendServiceApi) && (this.forRootConfig.pagination || gridOptions.pagination)) {\r\n options.pagination.pageSize = gridOptions.pagination?.pageSize ?? this.forRootConfig.pagination?.pageSize ?? GlobalGridOptions.pagination!.pageSize;\r\n options.pagination.pageSizes = gridOptions.pagination?.pageSizes ?? this.forRootConfig.pagination?.pageSizes ?? GlobalGridOptions.pagination!.pageSizes;\r\n }\r\n\r\n // also make sure to show the header row if user have enabled filtering\r\n this._hideHeaderRowAfterPageLoad = (options.showHeaderRow === false);\r\n if (options.enableFiltering && !options.showHeaderRow) {\r\n options.showHeaderRow = options.enableFiltering;\r\n }\r\n\r\n // when we use Pagination on Local Grid, it doesn't seem to work without enableFiltering\r\n // so we'll enable the filtering but we'll keep the header row hidden\r\n if (options && !options.enableFiltering && options.enablePagination && this._isLocalGrid) {\r\n options.enableFiltering = true;\r\n options.showHeaderRow = false;\r\n this._hideHeaderRowAfterPageLoad = true;\r\n if (this.sharedService) {\r\n this.sharedService.hideHeaderRowAfterPageLoad = true;\r\n }\r\n }\r\n\r\n return options;\r\n }\r\n\r\n /** Pre-Register any Resource that don't require SlickGrid to be instantiated (for example RxJS Resource) */\r\n private preRegisterResources() {\r\n this._registeredResources = this.gridOptions.registerExternalResources || [];\r\n\r\n // Angular-Slickgrid requires RxJS, so we'll register it as the first resource\r\n this.registerRxJsResource(new RxJsResource() as RxJsFacade);\r\n }\r\n\r\n private registerResources() {\r\n // at this point, we consider all the registered services as external services, anything else registered afterward aren't external\r\n if (Array.isArray(this._registeredResources)) {\r\n this.sharedService.externalRegisteredResources = this._registeredResources;\r\n }\r\n\r\n // push all other Services that we want to be registered\r\n this._registeredResources.push(this.gridService, this.gridStateService);\r\n\r\n // when using Grouping/DraggableGrouping/Colspan register its Service\r\n if (this.gridOptions.createPreHeaderPanel && !this.gridOptions.enableDraggableGrouping) {\r\n this._registeredResources.push(this.groupingService);\r\n }\r\n\r\n // when using Tree Data View, register its Service\r\n if (this.gridOptions.enableTreeData) {\r\n this._registeredResources.push(this.treeDataService);\r\n }\r\n\r\n // when user enables translation, we need to translate Headers on first pass & subsequently in the bindDifferentHooks\r\n if (this.gridOptions.enableTranslate) {\r\n this.extensionService.translateColumnHeaders();\r\n }\r\n\r\n if (this.gridOptions.enableRowDetailView) {\r\n this.slickRowDetailView = new SlickRowDetailView(this.angularUtilService, this.appRef, this._eventPubSubService, this.elm.nativeElement, this.rxjs);\r\n this.slickRowDetailView.create(this.columnDefinitions, this.gridOptions);\r\n this._registeredResources.push(this.slickRowDetailView);\r\n this.extensionService.addExtensionToList(ExtensionName.rowDetailView, { name: ExtensionName.rowDetailView, instance: this.slickRowDetailView });\r\n }\r\n\r\n // also initialize (render) the empty warning component\r\n this.slickEmptyWarning = new SlickEmptyWarningComponent();\r\n this._registeredResources.push(this.slickEmptyWarning);\r\n\r\n // bind & initialize all Components/Services that were tagged as enabled\r\n // register all services by executing their init method and providing them with the Grid object\r\n if (Array.isArray(this._registeredResources)) {\r\n for (const resource of this._registeredResources) {\r\n if (typeof resource.init === 'function') {\r\n resource.init(this.slickGrid, this.containerService);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Register the RxJS Resource in all necessary services which uses */\r\n private registerRxJsResource(resource: RxJsFacade) {\r\n this.rxjs = resource;\r\n this.backendUtilityService.addRxJsResource(this.rxjs);\r\n this.filterFactory.addRxJsResource(this.rxjs);\r\n this.filterService.addRxJsResource(this.rxjs);\r\n this.sortService.addRxJsResource(this.rxjs);\r\n this.paginationService.addRxJsResource(this.rxjs);\r\n this.containerService.registerInstance('RxJsResource', this.rxjs);\r\n }\r\n\r\n /**\r\n * Render (or dispose) the Pagination Component, user can optionally provide False (to not show it) which will in term dispose of the Pagination,\r\n * also while disposing we can choose to omit the disposable of the Pagination Service (if we are simply toggling the Pagination, we want to keep the Service alive)\r\n * @param {Boolean} showPagination - show (new render) or not (dispose) the Pagination\r\n * @param {Boolean} shouldDisposePaginationService - when disposing the Pagination, do we also want to dispose of the Pagination Service? (defaults to True)\r\n */\r\n private renderPagination(showPagination = true) {\r\n if (this.gridOptions?.enablePagination && !this._isPaginationInitialized && showPagination) {\r\n this.slickPagination = new SlickPaginationComponent(this.paginationService, this._eventPubSubService, this.sharedService, this.translaterService);\r\n this.slickPagination.renderPagination(this.gridContainerElement as HTMLElement);\r\n this._isPaginationInitialized = true;\r\n } else if (!showPagination) {\r\n if (this.slickPagination) {\r\n this.slickPagination.dispose();\r\n }\r\n this._isPaginationInitialized = false;\r\n }\r\n }\r\n\r\n /**\r\n * Takes a flat dataset with parent/child relationship, sort it (via its tree structure) and return the sorted flat array\r\n * @param {Array<Object>} flatDatasetInput - flat dataset input\r\n * @param {Boolean} forceGridRefresh - optionally force a full grid refresh\r\n * @returns {Array<Object>} sort flat parent/child dataset\r\n */\r\n private sortTreeDataset<T>(flatDatasetInput: T[], forceGridRefresh = false): T[] {\r\n const prevDatasetLn = this._currentDatasetLength;\r\n let sortedDatasetResult;\r\n let flatDatasetOutput: any[] = [];\r\n\r\n // if the hierarchical dataset was already initialized then no need to re-convert it, we can use it directly from the shared service ref\r\n if (this._isDatasetHierarchicalInitialized && this.datasetHierarchical) {\r\n sortedDatasetResult = this.treeDataService.sortHierarchicalDataset(this.datasetHierarchical);\r\n flatDatasetOutput = sortedDatasetResult.flat;\r\n } else if (Array.isArray(flatDatasetInput) && flatDatasetInput.length > 0) {\r\n if (this.gridOptions?.treeDataOptions?.initialSort) {\r\n // else we need to first convert the flat dataset to a hierarchical dataset and then sort\r\n sortedDatasetResult = this.treeDataService.convertFlatParentChildToTreeDatasetAndSort(flatDatasetInput, this._columnDefinitions, this.gridOptions);\r\n this.sharedService.hierarchicalDataset = sortedDatasetResult.hierarchical;\r\n flatDatasetOutput = sortedDatasetResult.flat;\r\n } else {\r\n // else we assume that the user provided an array that is already sorted (user's responsability)\r\n // and so we can simply convert the array to a tree structure and we're done, no need to sort\r\n this.sharedService.hierarchicalDataset = this.treeDataService.convertFlatParentChildToTreeDataset(flatDatasetInput, this.gridOptions);\r\n flatDatasetOutput = flatDatasetInput || [];\r\n }\r\n }\r\n\r\n // if we add/remove item(s) from the dataset, we need to also refresh our tree data filters\r\n if (flatDatasetInput.length > 0 && (forceGridRefresh || flatDatasetInput.length !== prevDatasetLn)) {\r\n this.filterService.refreshTreeDataFilters(flatDatasetOutput);\r\n }\r\n\r\n return flatDatasetOutput;\r\n }\r\n\r\n /**\r\n * For convenience to the user, we provide the property \"editor\" as an Angular-Slickgrid editor complex object\r\n * however \"editor\" is used internally by SlickGrid for it's own Editor Factory\r\n * so in our lib we will swap \"editor\" and copy it into a new property called \"internalColumnEditor\"\r\n * then take back \"editor.model\" and make it the new \"editor\" so that SlickGrid Editor Factory still works\r\n */\r\n private swapInternalEditorToSlickGridFactoryEditor(columnDefinitions: Column[]) {\r\n if (columnDefinitions.some(col => `${col.id}`.includes('.'))) {\r\n console.error('[Angular-Slickgrid] Make sure that none of your Column Definition \"id\" property includes a dot in its name because that will cause some problems with the Editors. For example if your column definition \"field\" property is \"user.firstName\" then use \"firstName\" as the column \"id\".');\r\n }\r\n\r\n return columnDefinitions.map((column: Column | any) => {\r\n // on every Editor that have a \"collectionAsync\", resolve the data and assign it to the \"collection\" property\r\n if (column && column.editor && column.editor.collectionAsync) {\r\n this.loadEditorCollectionAsync(column);\r\n }\r\n return { ...column, editor: column.editor && column.editor.model, internalColumnEditor: { ...column.editor } };\r\n });\r\n }\r\n\r\n private translateColumnHeaderTitleKeys() {\r\n // translate all columns (including hidden columns)\r\n this.extensionUtility.translateItems(this.sharedService.allColumns, 'nameKey', 'name');\r\n }\r\n\r\n private translateColumnGroupKeys() {\r\n // translate all column groups (including hidden columns)\r\n this.extensionUtility.translateItems(this.sharedService.allColumns, 'columnGroupKey', 'columnGroup');\r\n }\r\n\r\n /**\r\n * Update the \"internalColumnEditor.collection\" property.\r\n * Since this is called after the async call resolves, the pointer will not be the same as the \"column\" argument passed.\r\n * Once we found the new pointer, we will reassign the \"editor\" and \"collection\" to the \"internalColumnEditor\" so it has newest collection\r\n */\r\n private updateEditorCollection<T = any>(column: Column<T>, newCollection: T[]) {\r\n (column.editor as ColumnEditor).collection = newCollection;\r\n (column.editor as ColumnEditor).disabled = false;\r\n\r\n // find the new column reference pointer & re-assign the new editor to the internalColumnEditor\r\n const columns = this.slickGrid.getColumns();\r\n if (Array.isArray(columns)) {\r\n const columnRef = columns.find((col: Column) => col.id === column.id);\r\n if (columnRef) {\r\n columnRef.internalColumnEditor = column.editor as ColumnEditor;\r\n }\r\n }\r\n\r\n // get current Editor, remove it from the DOM then re-enable it and re-render it with the new collection.\r\n const currentEditor = this.slickGrid.getCellEditor() as AutoCompleteEditor | SelectEditor;\r\n if (currentEditor?.disable && currentEditor?.renderDomElement) {\r\n currentEditor.destroy();\r\n currentEditor.disable(false);\r\n currentEditor.renderDomElement(newCollection);\r\n }\r\n }\r\n}\r\n","<div id=\"slickGridContainer-{{gridId}}\" class=\"gridPane\">\r\n <div attr.id='{{gridId}}' class=\"slickgrid-container\" style=\"width: 100%\">\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\n\r\nimport { AngularSlickgridComponent } from './../components/angular-slickgrid.component';\r\nimport { GridOption } from './../models/gridOption.interface';\r\nimport { AngularUtilService } from '../services/angularUtil.service';\r\nimport { BsDropDownService } from '../services/bsDropdown.service';\r\nimport { ContainerService } from '../services/container.service';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n TranslateModule\r\n ],\r\n declarations: [\r\n AngularSlickgridComponent,\r\n ],\r\n exports: [\r\n AngularSlickgridComponent,\r\n ],\r\n entryComponents: [AngularSlickgridComponent]\r\n})\r\nexport class AngularSlickgridModule {\r\n static forRoot(config: GridOption = {}): ModuleWithProviders<AngularSlickgridModule> {\r\n return {\r\n ngModule: AngularSlickgridModule,\r\n providers: [\r\n { provide: 'config', useValue: config },\r\n { provide: 'externalService', useValue: null },\r\n AngularUtilService,\r\n BsDropDownService,\r\n ContainerService,\r\n ]\r\n };\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["UniversalSlickRowDetailView","SlickgridConfig"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"angular-slickgrid.mjs","sources":["../../src/app/modules/angular-slickgrid/services/angularUtil.service.ts","../../src/app/modules/angular-slickgrid/services/bsDropdown.service.ts","../../src/app/modules/angular-slickgrid/services/container.service.ts","../../src/app/modules/angular-slickgrid/services/translater.service.ts","../../src/app/modules/angular-slickgrid/services/utilities.ts","../../src/app/modules/angular-slickgrid/extensions/slickRowDetailView.ts","../../src/app/modules/angular-slickgrid/global-grid-options.ts","../../src/app/modules/angular-slickgrid/slickgrid-config.ts","../../src/app/modules/angular-slickgrid/constants.ts","../../src/app/modules/angular-slickgrid/components/angular-slickgrid.component.ts","../../src/app/modules/angular-slickgrid/components/angular-slickgrid.component.html","../../src/app/modules/angular-slickgrid/modules/angular-slickgrid.module.ts","../../src/angular-slickgrid.ts"],"sourcesContent":["import { AngularComponentOutput } from '../models/angularComponentOutput.interface';\r\nimport { ApplicationRef, ComponentFactoryResolver, EmbeddedViewRef, Injectable, Injector } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class AngularUtilService {\r\n constructor(\r\n private compFactoryResolver: ComponentFactoryResolver,\r\n private appRef: ApplicationRef,\r\n private injector: Injector,\r\n ) { }\r\n\r\n // ref https://hackernoon.com/angular-pro-tip-how-to-dynamically-create-components-in-body-ba200cc289e6\r\n createAngularComponent(component: any): AngularComponentOutput {\r\n // Create a component reference from the component\r\n const componentRef = this.compFactoryResolver\r\n .resolveComponentFactory(component)\r\n .create(this.injector);\r\n\r\n // Attach component to the appRef so that it's inside the ng component tree\r\n this.appRef.attachView(componentRef.hostView);\r\n\r\n // Get DOM element from component\r\n let domElem;\r\n const viewRef = (componentRef.hostView as EmbeddedViewRef<any>);\r\n if (viewRef && Array.isArray(viewRef.rootNodes) && viewRef.rootNodes[0]) {\r\n domElem = viewRef.rootNodes[0] as HTMLElement;\r\n }\r\n\r\n return { componentRef, domElement: domElem as HTMLElement };\r\n }\r\n\r\n // ref https://hackernoon.com/angular-pro-tip-how-to-dynamically-create-components-in-body-ba200cc289e6\r\n createAngularComponentAppendToDom(component: any, targetElement?: HTMLElement | Element, clearTargetContent = false): AngularComponentOutput {\r\n const componentOutput = this.createAngularComponent(component);\r\n\r\n // Append DOM element to the HTML element specified\r\n if (targetElement && targetElement.appendChild) {\r\n if (clearTargetContent && targetElement.innerHTML) {\r\n targetElement.innerHTML = '';\r\n }\r\n targetElement.appendChild(componentOutput.domElement);\r\n } else {\r\n document.body.appendChild(componentOutput.domElement); // when no target provided, we'll simply add it to the HTML Body\r\n }\r\n\r\n return componentOutput;\r\n }\r\n}\r\n","\r\nimport { Injectable } from '@angular/core';\r\nimport { AngularUtilService } from './angularUtil.service';\r\n\r\ninterface DropDownServiceParams {\r\n /** the custom action formatter component that contains the dropdown */\r\n component: any;\r\n\r\n /** help to get the data context */\r\n args: any;\r\n\r\n /** parent container */\r\n parent: any;\r\n\r\n /** Offset bottom when using a Drop Up, if we need to reposition the dropdown component */\r\n offsetDropupBottom?: number;\r\n\r\n /** Offset left if we need to reposition the dropdown component */\r\n offsetLeft?: number;\r\n\r\n /** Offset top if we need to reposition the dropdown component */\r\n offsetTop?: number;\r\n}\r\n\r\n// using external non-typed js libraries\r\ndeclare const $: any;\r\n\r\n// Boostrap dropdown service\r\n@Injectable()\r\nexport class BsDropDownService {\r\n private _domContainerElement: any;\r\n private _domElement: any;\r\n\r\n constructor(private angularUtilService: AngularUtilService) { }\r\n\r\n get domElement() {\r\n return this._domElement;\r\n }\r\n\r\n get domContainerElement() {\r\n return this._domContainerElement;\r\n }\r\n\r\n get gridViewport() {\r\n return $('.slick-viewport');\r\n }\r\n\r\n dispose() {\r\n if (this._domElement && this._domElement.remove) {\r\n this._domElement.remove();\r\n }\r\n }\r\n\r\n dropContainerShow() {\r\n if (this._domContainerElement && this._domContainerElement.show) {\r\n this._domContainerElement.show();\r\n }\r\n }\r\n\r\n render(dropdownParams: DropDownServiceParams) {\r\n return new Promise((resolve) => {\r\n const { component, args, parent, offsetTop, offsetLeft, offsetDropupBottom } = dropdownParams;\r\n\r\n const cell = args.cell;\r\n const row = args.row;\r\n\r\n this._domContainerElement = $(`#myDrop-r${row}-c${cell}`);\r\n\r\n if (this._domContainerElement) {\r\n // hide the dropdown we created as a formatter Component, we'll redisplay it later\r\n const cellPos = this._domContainerElement.offset();\r\n\r\n const componentOutput = this.angularUtilService.createAngularComponent(component);\r\n const componentInstance = componentOutput && componentOutput.componentRef && componentOutput.componentRef.instance;\r\n\r\n if (componentInstance) {\r\n const myDropId = componentInstance.dropdownId || 'myDrop';\r\n const dropDownToggleId = componentInstance.dropDownToggleId || 'dropdownMenu1';\r\n this._domElement = $(`#${myDropId}`);\r\n\r\n if (this._domElement) {\r\n // make sure to remove any previous Action dropdown elements, to avoid having multiple element of the same on top of each other\r\n this.dispose();\r\n\r\n // assign the row data to the dropdown component instance\r\n Object.assign(componentInstance, { parent, row: args.row, dataContext: args.grid.getDataItem(args.row) });\r\n\r\n // use a delay to make sure Angular ran at least a full cycle and make sure it finished rendering the Component before using it\r\n setTimeout(() => {\r\n // create a new dropdown element\r\n this._domElement = $(componentOutput.domElement);\r\n const topPos = (cellPos && cellPos.top || 0) + 30 + (offsetTop || 0);\r\n const leftPos = (cellPos && cellPos.left || 0) + (offsetLeft || 0);\r\n this._domElement.appendTo('body');\r\n this._domElement.css('position', 'absolute');\r\n this._domElement.css('top', topPos);\r\n this._domElement.css('left', leftPos);\r\n $(`#${myDropId}`).addClass('open');\r\n $(`#${dropDownToggleId}`).hide();\r\n\r\n // check if it should drop Up or Down\r\n const offset = 35;\r\n const iElement = $('.dropdown-menu');\r\n const iElementWrapper = iElement.parent();\r\n const iElementWrapperOffset = iElementWrapper.offset() || {};\r\n const iElementWrapperOffsetTop = iElementWrapperOffset.top || iElementWrapper && iElementWrapper.length > 0 && iElementWrapper[0].offsetTop;\r\n const iElementHeight = iElement.height();\r\n const windowHeight = window.innerHeight;\r\n const shouldDropUp = (windowHeight - iElementHeight - offset) < iElementWrapperOffsetTop;\r\n let menuMarginTop = '0px';\r\n if (shouldDropUp) {\r\n const offsetBottom = offsetDropupBottom || 0;\r\n menuMarginTop = '-'.concat(`${iElementHeight + offset + offsetBottom + 5}`, 'px');\r\n }\r\n this._domElement.css({ 'margin-top': menuMarginTop });\r\n\r\n // set dropdown margin left according to the document width\r\n const parentOffset = iElementWrapperOffset.left;\r\n const leftMargin = parentOffset - $(document).width();\r\n this._domElement.css({ 'margin-left': (this._domElement.width() + leftMargin + 60) + 'px' });\r\n\r\n try {\r\n this._domElement.dropdown('show'); // required for Bootstrap 4 only\r\n } catch (e) {\r\n // Bootstrap 3 wil throw an error since that method doesn't exist, we can safely disregard it\r\n }\r\n\r\n this._domElement.on('hidden.bs.dropdown', () => this.dropContainerShow());\r\n\r\n // hide dropdown menu on grid scroll\r\n this.gridViewport.on('scroll', () => this.dispose());\r\n\r\n // hide on dropdown click\r\n this._domElement.on('click', () => this.dispose());\r\n resolve(true);\r\n });\r\n }\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ContainerInstance, ContainerService as UniversalContainerService } from '@slickgrid-universal/common';\r\n\r\n@Injectable()\r\nexport class ContainerService implements UniversalContainerService {\r\n dependencies: ContainerInstance[] = [];\r\n\r\n constructor() { }\r\n\r\n get<T = any>(key: string): T | null {\r\n const dependency = this.dependencies.find(dep => dep.key === key);\r\n if (dependency?.instance) {\r\n return dependency.instance;\r\n }\r\n return null;\r\n }\r\n\r\n registerInstance(key: string, instance: any) {\r\n const dependency = this.dependencies.some(dep => dep.key === key);\r\n if (!dependency) {\r\n this.dependencies.push({ key, instance });\r\n }\r\n }\r\n}\r\n","import { Injectable, Optional } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { TranslaterService as UniversalTranslateService } from '@slickgrid-universal/common';\r\n\r\n/**\r\n * This is a Translate Service Wrapper for Slickgrid-Universal monorepo lib to work properly,\r\n * it must implement Slickgrid-Universal TranslaterService interface to work properly\r\n */\r\n@Injectable()\r\nexport class TranslaterService implements UniversalTranslateService {\r\n constructor(@Optional() private readonly translateService: TranslateService) { }\r\n\r\n /**\r\n * Method to return the current language used by the App\r\n * @return {string} current language\r\n */\r\n getCurrentLanguage(): string {\r\n return this.translateService?.currentLang ?? '';\r\n }\r\n\r\n /**\r\n * Method to set the language to use in the App and Translate Service\r\n * @param {string} language\r\n * @return {Promise} output\r\n */\r\n async use(newLang: string): Promise<any> {\r\n return this.translateService?.use?.(newLang);\r\n }\r\n\r\n /**\r\n * Method which receives a translation key and returns the translated value assigned to that key\r\n * @param {string} translation key\r\n * @return {string} translated value\r\n */\r\n translate(translationKey: string): string {\r\n return this.translateService?.instant?.(translationKey || ' ') as string;\r\n }\r\n}\r\n","import { Subscription } from 'rxjs';\r\n\r\n/**\r\n * Unsubscribe all Observables Subscriptions\r\n * It will return an empty array if it all went well\r\n * @param subscriptions\r\n */\r\nexport function unsubscribeAllObservables(subscriptions: Subscription[]): Subscription[] {\r\n if (Array.isArray(subscriptions)) {\r\n subscriptions.forEach((subscription: Subscription) => {\r\n if (subscription && subscription.unsubscribe) {\r\n subscription.unsubscribe();\r\n }\r\n });\r\n subscriptions = [];\r\n }\r\n\r\n return subscriptions;\r\n}\r\n","import { ApplicationRef, ComponentRef, Type, ViewContainerRef } from '@angular/core';\r\nimport {\r\n addToArrayWhenNotExists,\r\n castObservableToPromise,\r\n EventSubscription,\r\n RxJsFacade,\r\n SlickEventHandler,\r\n SlickGrid,\r\n SlickRowSelectionModel,\r\n unsubscribeAll,\r\n} from '@slickgrid-universal/common';\r\nimport { EventPubSubService } from '@slickgrid-universal/event-pub-sub';\r\nimport { SlickRowDetailView as UniversalSlickRowDetailView } from '@slickgrid-universal/row-detail-view-plugin';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport * as DOMPurify from 'dompurify';\r\n\r\nimport { GridOption, RowDetailView } from '../models/index';\r\nimport { AngularUtilService } from '../services/angularUtil.service';\r\n\r\nconst ROW_DETAIL_CONTAINER_PREFIX = 'container_';\r\nconst PRELOAD_CONTAINER_PREFIX = 'container_loading';\r\n\r\nexport interface CreatedView {\r\n id: string | number;\r\n dataContext: any;\r\n componentRef?: ComponentRef<any>;\r\n}\r\n\r\nexport class SlickRowDetailView extends UniversalSlickRowDetailView {\r\n rowDetailContainer!: ViewContainerRef;\r\n protected _eventHandler!: SlickEventHandler;\r\n protected _preloadComponent: Type<object> | undefined;\r\n protected _views: CreatedView[] = [];\r\n protected _viewComponent!: Type<object>;\r\n protected _subscriptions: EventSubscription[] = [];\r\n protected _userProcessFn!: (item: any) => Promise<any> | Observable<any> | Subject<any>;\r\n\r\n constructor(\r\n protected readonly angularUtilService: AngularUtilService,\r\n protected readonly appRef: ApplicationRef,\r\n protected readonly eventPubSubService: EventPubSubService,\r\n protected readonly gridContainerElement: HTMLDivElement,\r\n protected rxjs?: RxJsFacade,\r\n ) {\r\n super();\r\n }\r\n\r\n get addonOptions() {\r\n return this.getOptions();\r\n }\r\n\r\n protected get datasetIdPropName(): string {\r\n return this.gridOptions.datasetIdPropertyName || 'id';\r\n }\r\n\r\n get eventHandler(): SlickEventHandler {\r\n return this._eventHandler;\r\n }\r\n set eventHandler(eventHandler: SlickEventHandler) {\r\n this._eventHandler = eventHandler;\r\n }\r\n\r\n /** Getter for the Grid Options pulled through the Grid Object */\r\n get gridOptions(): GridOption {\r\n return (this._grid?.getOptions() || {}) as GridOption;\r\n }\r\n\r\n get rowDetailViewOptions(): RowDetailView | undefined {\r\n return this.gridOptions.rowDetailView;\r\n }\r\n\r\n addRxJsResource(rxjs: RxJsFacade) {\r\n this.rxjs = rxjs;\r\n }\r\n\r\n /** Dispose of the RowDetailView Extension */\r\n dispose() {\r\n this.disposeAllViewComponents();\r\n this._subscriptions = unsubscribeAll(this._subscriptions); // also unsubscribe all RxJS subscriptions\r\n super.dispose();\r\n }\r\n\r\n /** Dispose of all the opened Row Detail Panels Angular View Components */\r\n disposeAllViewComponents() {\r\n this._views.forEach((compRef) => this.disposeViewComponent(compRef));\r\n this._views = [];\r\n }\r\n\r\n /** Get the instance of the SlickGrid addon (control or plugin). */\r\n getAddonInstance(): SlickRowDetailView | null {\r\n return this;\r\n }\r\n\r\n init(grid: SlickGrid) {\r\n this._grid = grid;\r\n super.init(this._grid);\r\n this.register(grid?.getSelectionModel());\r\n }\r\n\r\n /**\r\n * Create the plugin before the Grid creation, else it will behave oddly.\r\n * Mostly because the column definitions might change after the grid creation\r\n */\r\n register(rowSelectionPlugin?: SlickRowSelectionModel) {\r\n if (typeof this.gridOptions.rowDetailView?.process === 'function') {\r\n // we need to keep the user \"process\" method and replace it with our own execution method\r\n // we do this because when we get the item detail, we need to call \"onAsyncResponse.notify\" for the plugin to work\r\n this._userProcessFn = this.gridOptions.rowDetailView.process as (item: any) => Promise<any>; // keep user's process method\r\n this.gridOptions.rowDetailView.process = (item) => this.onProcessing(item); // replace process method & run our internal one\r\n } else {\r\n throw new Error('[Angular-Slickgrid] You need to provide a \"process\" function for the Row Detail Extension to work properly');\r\n }\r\n\r\n if (this._grid && this.gridOptions?.rowDetailView) {\r\n // load the Preload & RowDetail Templates (could be straight HTML or Angular View/ViewModel)\r\n // when those are Angular View/ViewModel, we need to create View Component & provide the html containers to the Plugin (preTemplate/postTemplate methods)\r\n if (!this.gridOptions.rowDetailView.preTemplate) {\r\n this._preloadComponent = this.gridOptions?.rowDetailView?.preloadComponent;\r\n this.gridOptions.rowDetailView.preTemplate = () => DOMPurify.sanitize(`<div class=\"${PRELOAD_CONTAINER_PREFIX}\"></div>`);\r\n }\r\n if (!this.gridOptions.rowDetailView.postTemplate) {\r\n this._viewComponent = this.gridOptions?.rowDetailView?.viewComponent;\r\n this.gridOptions.rowDetailView.postTemplate = (itemDetail: any) => DOMPurify.sanitize(`<div class=\"${ROW_DETAIL_CONTAINER_PREFIX}${itemDetail[this.datasetIdPropName]}\"></div>`);\r\n }\r\n\r\n // this also requires the Row Selection Model to be registered as well\r\n if (!rowSelectionPlugin || !this._grid.getSelectionModel()) {\r\n rowSelectionPlugin = new SlickRowSelectionModel(this.gridOptions.rowSelectionOptions || { selectActiveRow: true });\r\n this._grid.setSelectionModel(rowSelectionPlugin);\r\n }\r\n\r\n // hook all events\r\n if (this._grid && this.rowDetailViewOptions) {\r\n if (this.rowDetailViewOptions.onExtensionRegistered) {\r\n this.rowDetailViewOptions.onExtensionRegistered(this);\r\n }\r\n\r\n if (this.onAsyncResponse) {\r\n this._eventHandler.subscribe(this.onAsyncResponse, (event, args) => {\r\n if (this.rowDetailViewOptions && typeof this.rowDetailViewOptions.onAsyncResponse === 'function') {\r\n this.rowDetailViewOptions.onAsyncResponse(event, args);\r\n }\r\n });\r\n }\r\n\r\n if (this.onAsyncEndUpdate) {\r\n this._eventHandler.subscribe(this.onAsyncEndUpdate, (e: any, args: { grid: SlickGrid; item: any; }) => {\r\n // triggers after backend called \"onAsyncResponse.notify()\"\r\n this.renderViewModel(args?.item);\r\n\r\n if (this.rowDetailViewOptions && typeof this.rowDetailViewOptions.onAsyncEndUpdate === 'function') {\r\n this.rowDetailViewOptions.onAsyncEndUpdate(e, args);\r\n }\r\n });\r\n }\r\n\r\n if (this.onAfterRowDetailToggle) {\r\n this._eventHandler.subscribe(this.onAfterRowDetailToggle, (e: any, args: { grid: SlickGrid; item: any; expandedRows: number[]; }) => {\r\n // display preload template & re-render all the other Detail Views after toggling\r\n // the preload View will eventually go away once the data gets loaded after the \"onAsyncEndUpdate\" event\r\n this.renderPreloadView();\r\n this.renderAllViewComponents();\r\n\r\n if (this.rowDetailViewOptions && typeof this.rowDetailViewOptions.onAfterRowDetailToggle === 'function') {\r\n this.rowDetailViewOptions.onAfterRowDetailToggle(e, args);\r\n }\r\n });\r\n }\r\n\r\n if (this.onBeforeRowDetailToggle) {\r\n this._eventHandler.subscribe(this.onBeforeRowDetailToggle, (e, args) => {\r\n // before toggling row detail, we need to create View Component if it doesn't exist\r\n this.handleOnBeforeRowDetailToggle(e, args);\r\n\r\n if (this.rowDetailViewOptions && typeof this.rowDetailViewOptions.onBeforeRowDetailToggle === 'function') {\r\n this.rowDetailViewOptions.onBeforeRowDetailToggle(e, args);\r\n }\r\n });\r\n }\r\n\r\n if (this.onRowBackToViewportRange) {\r\n this._eventHandler.subscribe(this.onRowBackToViewportRange, (e: any, args: { grid: SlickGrid; item: any; rowId: number; rowIndex: number; expandedRows: any[]; rowIdsOutOfViewport: number[]; }) => {\r\n // when row is back to viewport range, we will re-render the View Component(s)\r\n this.handleOnRowBackToViewportRange(e, args);\r\n\r\n if (this.rowDetailViewOptions && typeof this.rowDetailViewOptions.onRowBackToViewportRange === 'function') {\r\n this.rowDetailViewOptions.onRowBackToViewportRange(e, args);\r\n }\r\n });\r\n }\r\n\r\n if (this.onRowOutOfViewportRange) {\r\n this._eventHandler.subscribe(this.onRowOutOfViewportRange, (e: any, args: { grid: SlickGrid; item: any; rowId: number; rowIndex: number; expandedRows: any[]; rowIdsOutOfViewport: number[]; }) => {\r\n if (this.rowDetailViewOptions && typeof this.rowDetailViewOptions.onRowOutOfViewportRange === 'function') {\r\n this.rowDetailViewOptions.onRowOutOfViewportRange(e, args);\r\n }\r\n });\r\n }\r\n\r\n // --\r\n // hook some events needed by the Plugin itself\r\n\r\n // we need to redraw the open detail views if we change column position (column reorder)\r\n this._eventHandler.subscribe(this._grid.onColumnsReordered, this.redrawAllViewComponents.bind(this));\r\n\r\n // on row selection changed, we also need to redraw\r\n if (this.gridOptions.enableRowSelection || this.gridOptions.enableCheckboxSelector) {\r\n this._eventHandler.subscribe(this._grid.onSelectedRowsChanged, this.redrawAllViewComponents.bind(this));\r\n }\r\n\r\n // on sort, all row detail are collapsed so we can dispose of all the Views as well\r\n this._eventHandler.subscribe(this._grid.onSort, this.disposeAllViewComponents.bind(this));\r\n\r\n // on filter changed, we need to re-render all Views\r\n this._subscriptions.push(\r\n this.eventPubSubService?.subscribe('onFilterChanged', this.redrawAllViewComponents.bind(this)),\r\n this.eventPubSubService?.subscribe('onGridMenuClearAllFilters', () => setTimeout(() => this.redrawAllViewComponents())),\r\n this.eventPubSubService?.subscribe('onGridMenuClearAllSorting', () => setTimeout(() => this.redrawAllViewComponents())),\r\n );\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /** Redraw (re-render) all the expanded row detail View Components */\r\n redrawAllViewComponents() {\r\n this._views.forEach((compRef) => {\r\n this.redrawViewComponent(compRef);\r\n });\r\n }\r\n\r\n /** Render all the expanded row detail View Components */\r\n renderAllViewComponents() {\r\n this._views.forEach((view) => {\r\n if (view && view.dataContext) {\r\n this.renderViewModel(view.dataContext);\r\n }\r\n });\r\n }\r\n\r\n /** Redraw the necessary View Component */\r\n redrawViewComponent(createdView: CreatedView) {\r\n const containerElements = this.gridContainerElement.getElementsByClassName(`${ROW_DETAIL_CONTAINER_PREFIX}${createdView.id}`);\r\n if (containerElements && containerElements.length >= 0) {\r\n this.renderViewModel(createdView.dataContext);\r\n }\r\n }\r\n\r\n /** Render (or re-render) the View Component (Row Detail) */\r\n renderPreloadView() {\r\n const containerElements = this.gridContainerElement.getElementsByClassName(`${PRELOAD_CONTAINER_PREFIX}`);\r\n if (containerElements && containerElements.length >= 0) {\r\n this.angularUtilService.createAngularComponentAppendToDom(this._preloadComponent, containerElements[containerElements.length - 1], true);\r\n }\r\n }\r\n\r\n /** Render (or re-render) the View Component (Row Detail) */\r\n renderViewModel(item: any): CreatedView | undefined {\r\n const containerElements = this.gridContainerElement.getElementsByClassName(`${ROW_DETAIL_CONTAINER_PREFIX}${item[this.datasetIdPropName]}`);\r\n if (containerElements && containerElements.length > 0) {\r\n const componentOutput = this.angularUtilService.createAngularComponentAppendToDom(this._viewComponent, containerElements[containerElements.length - 1], true);\r\n if (componentOutput && componentOutput.componentRef && componentOutput.componentRef.instance) {\r\n // pass a few properties to the Row Detail template component\r\n Object.assign(componentOutput.componentRef.instance, {\r\n model: item,\r\n addon: this,\r\n grid: this._grid,\r\n dataView: this.dataView,\r\n parent: this.rowDetailViewOptions && this.rowDetailViewOptions.parent,\r\n });\r\n\r\n const viewObj = this._views.find(obj => obj.id === item[this.datasetIdPropName]);\r\n if (viewObj) {\r\n viewObj.componentRef = componentOutput.componentRef;\r\n }\r\n return viewObj;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n // --\r\n // protected functions\r\n // ------------------\r\n\r\n protected disposeViewComponent(expandedView: CreatedView): CreatedView | void {\r\n const compRef = expandedView?.componentRef;\r\n if (compRef) {\r\n this.appRef.detachView(compRef.hostView);\r\n if (compRef?.destroy) {\r\n compRef.destroy();\r\n }\r\n return expandedView;\r\n }\r\n }\r\n\r\n /**\r\n * notify the onAsyncResponse with the \"args.item\" (required property)\r\n * the plugin will then use item to populate the row detail panel with the \"postTemplate\"\r\n * @param item\r\n */\r\n protected notifyTemplate(item: any) {\r\n if (this.onAsyncResponse) {\r\n this.onAsyncResponse.notify({ item }, undefined, this);\r\n }\r\n }\r\n\r\n /**\r\n * On Processing, we will notify the plugin with the new item detail once backend server call completes\r\n * @param item\r\n */\r\n protected async onProcessing(item: any) {\r\n if (item && typeof this._userProcessFn === 'function') {\r\n let awaitedItemDetail: any;\r\n const userProcessFn = this._userProcessFn(item);\r\n\r\n // wait for the \"userProcessFn\", once resolved we will save it into the \"collection\"\r\n const response: any | any[] = await userProcessFn;\r\n\r\n if (response.hasOwnProperty(this.datasetIdPropName)) {\r\n awaitedItemDetail = response; // from Promise\r\n } else if (response && response instanceof Observable || response instanceof Promise) {\r\n awaitedItemDetail = await castObservableToPromise(this.rxjs as RxJsFacade, response); // from Angular-http-client\r\n }\r\n\r\n if (!awaitedItemDetail || !awaitedItemDetail.hasOwnProperty(this.datasetIdPropName)) {\r\n throw new Error(`[Angular-Slickgrid] could not process the Row Detail, you must make sure that your \"process\" callback\r\n (a Promise or an HttpClient call returning an Observable) returns an item object that has an \"${this.datasetIdPropName}\" property`);\r\n }\r\n\r\n // notify the plugin with the new item details\r\n this.notifyTemplate(awaitedItemDetail || {});\r\n }\r\n }\r\n\r\n /**\r\n * Just before the row get expanded or collapsed we will do the following\r\n * First determine if the row is expanding or collapsing,\r\n * if it's expanding we will add it to our View Components reference array if we don't already have it\r\n * or if it's collapsing we will remove it from our View Components reference array\r\n */\r\n protected handleOnBeforeRowDetailToggle(e: Event, args: { grid: SlickGrid; item: any; }) {\r\n // expanding\r\n if (args && args.item && args.item.__collapsed) {\r\n // expanding row detail\r\n const viewInfo: CreatedView = {\r\n id: args.item[this.datasetIdPropName],\r\n dataContext: args.item\r\n };\r\n const idPropName = this.gridOptions.datasetIdPropertyName || 'id';\r\n addToArrayWhenNotExists(this._views, viewInfo, idPropName);\r\n } else {\r\n // collapsing, so dispose of the View/Component\r\n const foundViewIndex = this._views.findIndex((view: CreatedView) => view.id === args.item[this.datasetIdPropName]);\r\n if (foundViewIndex >= 0 && this._views.hasOwnProperty(foundViewIndex)) {\r\n const compRef = this._views[foundViewIndex].componentRef;\r\n if (compRef) {\r\n this.appRef.detachView(compRef.hostView);\r\n compRef.destroy();\r\n }\r\n this._views.splice(foundViewIndex, 1);\r\n }\r\n }\r\n }\r\n\r\n /** When Row comes back to Viewport Range, we need to redraw the View */\r\n protected handleOnRowBackToViewportRange(e: Event, args: { grid: SlickGrid; item: any; rowId: number; rowIndex: number; expandedRows: any[]; rowIdsOutOfViewport: number[]; }) {\r\n if (args?.item) {\r\n this.redrawAllViewComponents();\r\n }\r\n }\r\n}\r\n","import { Column, DelimiterType, EventNamingStyle, FileType, Filters, GridAutosizeColsMode, OperatorType, TreeDataOption } from '@slickgrid-universal/common';\r\nimport { GridOption, RowDetailView } from './models/index';\r\n\r\n/** Global Grid Options Defaults */\r\nexport const GlobalGridOptions: Partial<GridOption> = {\r\n alwaysShowVerticalScroll: true,\r\n autoEdit: false,\r\n asyncEditorLoading: false,\r\n autoFitColumnsOnFirstLoad: true,\r\n autoResize: {\r\n applyResizeToContainer: true,\r\n calculateAvailableSizeBy: 'window',\r\n bottomPadding: 20,\r\n minHeight: 180,\r\n minWidth: 300,\r\n rightPadding: 0\r\n },\r\n cellHighlightCssClass: 'slick-cell-modified',\r\n checkboxSelector: {\r\n cssClass: 'slick-cell-checkboxsel'\r\n },\r\n columnPicker: {\r\n fadeSpeed: 0,\r\n hideForceFitButton: false,\r\n hideSyncResizeButton: true,\r\n headerColumnValueExtractor: pickerHeaderColumnValueExtractor\r\n },\r\n cellMenu: {\r\n autoAdjustDrop: true,\r\n autoAlignSide: true,\r\n hideCloseButton: true,\r\n hideCommandSection: false,\r\n hideOptionSection: false,\r\n },\r\n contextMenu: {\r\n autoAdjustDrop: true,\r\n autoAlignSide: true,\r\n hideCloseButton: true,\r\n hideClearAllGrouping: false,\r\n hideCollapseAllGroups: false,\r\n hideCommandSection: false,\r\n hideCopyCellValueCommand: false,\r\n hideExpandAllGroups: false,\r\n hideExportCsvCommand: false,\r\n hideExportExcelCommand: false,\r\n hideExportTextDelimitedCommand: true,\r\n hideMenuOnScroll: true,\r\n hideOptionSection: false,\r\n iconCopyCellValueCommand: 'fa fa-clone',\r\n iconExportCsvCommand: 'fa fa-download',\r\n iconExportExcelCommand: 'fa fa-file-excel-o text-success',\r\n iconExportTextDelimitedCommand: 'fa fa-download',\r\n },\r\n customFooterOptions: {\r\n dateFormat: 'YYYY-MM-DD, hh:mm a',\r\n hideRowSelectionCount: false,\r\n hideTotalItemCount: false,\r\n hideLastUpdateTimestamp: true,\r\n footerHeight: 25,\r\n leftContainerClass: 'col-xs-12 col-sm-5',\r\n rightContainerClass: 'col-xs-6 col-sm-7',\r\n metricSeparator: '|',\r\n metricTexts: {\r\n items: 'items',\r\n itemsKey: 'ITEMS',\r\n itemsSelected: 'items selected',\r\n itemsSelectedKey: 'ITEMS_SELECTED',\r\n of: 'of',\r\n ofKey: 'OF',\r\n }\r\n },\r\n dataView: {\r\n syncGridSelection: true, // when enabled, this will preserve the row selection even after filtering/sorting/grouping\r\n syncGridSelectionWithBackendService: false, // but disable it when using backend services\r\n },\r\n datasetIdPropertyName: 'id',\r\n defaultFilter: Filters.input,\r\n defaultBackendServiceFilterTypingDebounce: 500,\r\n defaultColumnSortFieldId: 'id',\r\n defaultFilterPlaceholder: '🔎︎',\r\n defaultFilterRangeOperator: OperatorType.rangeInclusive,\r\n editable: false,\r\n enableAutoResize: true,\r\n enableAutoSizeColumns: true,\r\n enableCellNavigation: false,\r\n enableColumnPicker: true,\r\n enableColumnReorder: true,\r\n enableColumnResizeOnDoubleClick: true,\r\n enableContextMenu: true,\r\n enableExcelExport: true, // Excel Export is the new default,\r\n enableExport: false, // CSV/Text with Tab Delimited\r\n enableFilterTrimWhiteSpace: false, // do we want to trim white spaces on all Filters?\r\n enableGridMenu: true,\r\n enableHeaderMenu: true,\r\n enableEmptyDataWarningMessage: true,\r\n emptyDataWarning: {\r\n className: 'slick-empty-data-warning',\r\n message: 'No data to display.',\r\n messageKey: 'EMPTY_DATA_WARNING_MESSAGE',\r\n hideFrozenLeftWarning: false,\r\n hideFrozenRightWarning: false,\r\n leftViewportMarginLeft: '40%',\r\n rightViewportMarginLeft: '40%',\r\n frozenLeftViewportMarginLeft: '0px',\r\n frozenRightViewportMarginLeft: '40%',\r\n },\r\n enableMouseHoverHighlightRow: true,\r\n enableSorting: true,\r\n enableTextSelectionOnCells: true,\r\n eventNamingStyle: EventNamingStyle.camelCase,\r\n explicitInitialization: true,\r\n excelExportOptions: {\r\n addGroupIndentation: true,\r\n exportWithFormatter: false,\r\n filename: 'export',\r\n format: FileType.xlsx,\r\n groupingColumnHeaderTitle: 'Group By',\r\n groupCollapsedSymbol: '⮞',\r\n groupExpandedSymbol: '⮟',\r\n groupingAggregatorRowText: '',\r\n sanitizeDataExport: false,\r\n },\r\n exportOptions: {\r\n delimiter: DelimiterType.comma,\r\n exportWithFormatter: false,\r\n filename: 'export',\r\n format: FileType.csv,\r\n groupingColumnHeaderTitle: 'Group By',\r\n groupingAggregatorRowText: '',\r\n sanitizeDataExport: false,\r\n useUtf8WithBom: true\r\n },\r\n filterTypingDebounce: 0,\r\n forceFitColumns: false,\r\n frozenHeaderWidthCalcDifferential: 0,\r\n gridMenu: {\r\n dropSide: 'left',\r\n commandLabels: {\r\n clearAllFiltersCommandKey: 'CLEAR_ALL_FILTERS',\r\n clearAllSortingCommandKey: 'CLEAR_ALL_SORTING',\r\n clearFrozenColumnsCommandKey: 'CLEAR_PINNING',\r\n exportCsvCommandKey: 'EXPORT_TO_CSV',\r\n exportExcelCommandKey: 'EXPORT_TO_EXCEL',\r\n exportTextDelimitedCommandKey: 'EXPORT_TO_TAB_DELIMITED',\r\n refreshDatasetCommandKey: 'REFRESH_DATASET',\r\n toggleFilterCommandKey: 'TOGGLE_FILTER_ROW',\r\n togglePreHeaderCommandKey: 'TOGGLE_PRE_HEADER_ROW',\r\n },\r\n hideClearAllFiltersCommand: false,\r\n hideClearAllSortingCommand: false,\r\n hideClearFrozenColumnsCommand: true, // opt-in command\r\n hideExportCsvCommand: false,\r\n hideExportExcelCommand: false,\r\n hideExportTextDelimitedCommand: true,\r\n hideForceFitButton: false,\r\n hideRefreshDatasetCommand: false,\r\n hideSyncResizeButton: true,\r\n hideToggleFilterCommand: false,\r\n hideTogglePreHeaderCommand: false,\r\n iconCssClass: 'fa fa-bars',\r\n iconClearAllFiltersCommand: 'fa fa-filter text-danger',\r\n iconClearAllSortingCommand: 'fa fa-unsorted text-danger',\r\n iconClearFrozenColumnsCommand: 'fa fa-times',\r\n iconExportCsvCommand: 'fa fa-download',\r\n iconExportExcelCommand: 'fa fa-file-excel-o text-success',\r\n iconExportTextDelimitedCommand: 'fa fa-download',\r\n iconRefreshDatasetCommand: 'fa fa-refresh',\r\n iconToggleFilterCommand: 'fa fa-random',\r\n iconTogglePreHeaderCommand: 'fa fa-random',\r\n menuWidth: 16,\r\n resizeOnShowHeaderRow: true,\r\n headerColumnValueExtractor: pickerHeaderColumnValueExtractor\r\n },\r\n headerMenu: {\r\n autoAlign: true,\r\n autoAlignOffset: 12,\r\n minWidth: 140,\r\n iconClearFilterCommand: 'fa fa-filter text-danger',\r\n iconClearSortCommand: 'fa fa-unsorted',\r\n iconFreezeColumns: 'fa fa-thumb-tack',\r\n iconSortAscCommand: 'fa fa-sort-amount-asc',\r\n iconSortDescCommand: 'fa fa-sort-amount-desc',\r\n iconColumnHideCommand: 'fa fa-times',\r\n iconColumnResizeByContentCommand: 'fa fa-arrows-h',\r\n hideColumnResizeByContentCommand: false,\r\n hideColumnHideCommand: false,\r\n hideClearFilterCommand: false,\r\n hideClearSortCommand: false,\r\n hideFreezeColumnsCommand: true, // opt-in command\r\n hideSortCommands: false\r\n },\r\n headerRowHeight: 35,\r\n multiColumnSort: true,\r\n numberedMultiColumnSort: true,\r\n tristateMultiColumnSort: false,\r\n sortColNumberInSeparateSpan: true,\r\n suppressActiveCellChangeOnEdit: true,\r\n pagination: {\r\n pageSizes: [10, 15, 20, 25, 30, 40, 50, 75, 100],\r\n pageSize: 25,\r\n totalItems: 0\r\n },\r\n // technically speaking the Row Detail requires the process & viewComponent but we'll ignore it just to set certain options\r\n rowDetailView: {\r\n collapseAllOnSort: true,\r\n cssClass: 'detail-view-toggle',\r\n panelRows: 1,\r\n keyPrefix: '__',\r\n useRowClick: false,\r\n useSimpleViewportCalc: true,\r\n saveDetailViewOnScroll: false,\r\n } as RowDetailView,\r\n rowHeight: 35,\r\n topPanelHeight: 35,\r\n translationNamespaceSeparator: ':',\r\n resetFilterSearchValueAfterOnBeforeCancellation: true,\r\n resizeByContentOnlyOnFirstLoad: true,\r\n resizeByContentOptions: {\r\n alwaysRecalculateColumnWidth: false,\r\n cellCharWidthInPx: 7.8,\r\n cellPaddingWidthInPx: 14,\r\n defaultRatioForStringType: 0.88,\r\n formatterPaddingWidthInPx: 0,\r\n maxItemToInspectCellContentWidth: 1000,\r\n maxItemToInspectSingleColumnWidthByContent: 5000,\r\n widthToRemoveFromExceededWidthReadjustment: 50,\r\n },\r\n treeDataOptions: {\r\n exportIndentMarginLeft: 5,\r\n exportIndentationLeadingChar: '͏͏͏͏͏͏͏͏͏·',\r\n } as unknown as TreeDataOption\r\n};\r\n\r\n/**\r\n * Value Extractor for both ColumnPicker & GridMenu Picker\r\n * when using Column Header Grouping, we'll prefix the column group title\r\n * else we'll simply return the column name title\r\n */\r\nfunction pickerHeaderColumnValueExtractor(column: Column) {\r\n const headerGroup = column && column.columnGroup || '';\r\n if (headerGroup) {\r\n return headerGroup + ' - ' + column.name;\r\n }\r\n return column && column.name || '';\r\n}\r\n","import { GridOption } from './models/gridOption.interface';\r\nimport { GlobalGridOptions } from './global-grid-options';\r\n\r\nexport class SlickgridConfig {\r\n options: Partial<GridOption>;\r\n\r\n constructor() {\r\n this.options = GlobalGridOptions;\r\n }\r\n}\r\n","import { Locale } from '@slickgrid-universal/common';\r\n\r\nexport class Constants {\r\n // English Locale texts when using only 1 Locale instead of I18N\r\n static readonly locales: Locale = {\r\n TEXT_ALL_SELECTED: 'All Selected',\r\n TEXT_ALL_X_RECORDS_SELECTED: 'All {{x}} records selected',\r\n TEXT_APPLY_MASS_UPDATE: 'Apply Mass Update',\r\n TEXT_APPLY_TO_SELECTION: 'Update Selection',\r\n TEXT_CANCEL: 'Cancel',\r\n TEXT_CLEAR_ALL_FILTERS: 'Clear all Filters',\r\n TEXT_CLEAR_ALL_GROUPING: 'Clear all Grouping',\r\n TEXT_CLEAR_ALL_SORTING: 'Clear all Sorting',\r\n TEXT_CLEAR_PINNING: 'Unfreeze Columns/Rows',\r\n TEXT_CLONE: 'Clone',\r\n TEXT_COLLAPSE_ALL_GROUPS: 'Collapse all Groups',\r\n TEXT_CONTAINS: 'Contains',\r\n TEXT_COLUMNS: 'Columns',\r\n TEXT_COLUMN_RESIZE_BY_CONTENT: 'Resize by Content',\r\n TEXT_COMMANDS: 'Commands',\r\n TEXT_COPY: 'Copy',\r\n TEXT_EQUALS: 'Equals',\r\n TEXT_EQUAL_TO: 'Equal to',\r\n TEXT_ENDS_WITH: 'Ends With',\r\n TEXT_ERROR_EDITABLE_GRID_REQUIRED: 'Your grid must be editable in order to use the Composite Editor Modal.',\r\n TEXT_ERROR_ENABLE_CELL_NAVIGATION_REQUIRED: 'Composite Editor requires the flag \"enableCellNavigation\" to be set to True in your Grid Options.',\r\n TEXT_ERROR_NO_CHANGES_DETECTED: 'Sorry we could not detect any changes.',\r\n TEXT_ERROR_NO_EDITOR_FOUND: 'We could not find any Editor in your Column Definition.',\r\n TEXT_ERROR_NO_RECORD_FOUND: 'No records selected for edit or clone operation.',\r\n TEXT_ERROR_ROW_NOT_EDITABLE: 'Current row is not editable.',\r\n TEXT_ERROR_ROW_SELECTION_REQUIRED: 'You must select some rows before trying to apply new value(s).',\r\n TEXT_EXPAND_ALL_GROUPS: 'Expand all Groups',\r\n TEXT_EXPORT_TO_CSV: 'Export in CSV format',\r\n TEXT_EXPORT_TO_TEXT_FORMAT: 'Export in Text format (Tab delimited)',\r\n TEXT_EXPORT_TO_EXCEL: 'Export to Excel',\r\n TEXT_EXPORT_TO_TAB_DELIMITED: 'Export in Text format (Tab delimited)',\r\n TEXT_FORCE_FIT_COLUMNS: 'Force fit columns',\r\n TEXT_FREEZE_COLUMNS: 'Freeze Columns',\r\n TEXT_GREATER_THAN: 'Greater than',\r\n TEXT_GREATER_THAN_OR_EQUAL_TO: 'Greater than or equal to',\r\n TEXT_GROUP_BY: 'Group By',\r\n TEXT_HIDE_COLUMN: 'Hide Column',\r\n TEXT_ITEMS: 'items',\r\n TEXT_ITEMS_PER_PAGE: 'items per page',\r\n TEXT_ITEMS_SELECTED: 'items selected',\r\n TEXT_OF: 'of',\r\n TEXT_OK: 'OK',\r\n TEXT_LAST_UPDATE: 'Last Update',\r\n TEXT_LESS_THAN: 'Less than',\r\n TEXT_LESS_THAN_OR_EQUAL_TO: 'Less than or equal to',\r\n TEXT_NOT_CONTAINS: 'Not contains',\r\n TEXT_NOT_EQUAL_TO: 'Not equal to',\r\n TEXT_PAGE: 'Page',\r\n TEXT_REFRESH_DATASET: 'Refresh Dataset',\r\n TEXT_REMOVE_FILTER: 'Remove Filter',\r\n TEXT_REMOVE_SORT: 'Remove Sort',\r\n TEXT_SAVE: 'Save',\r\n TEXT_SELECT_ALL: 'Select All',\r\n TEXT_SYNCHRONOUS_RESIZE: 'Synchronous resize',\r\n TEXT_SORT_ASCENDING: 'Sort Ascending',\r\n TEXT_SORT_DESCENDING: 'Sort Descending',\r\n TEXT_STARTS_WITH: 'Starts With',\r\n TEXT_TOGGLE_FILTER_ROW: 'Toggle Filter Row',\r\n TEXT_TOGGLE_PRE_HEADER_ROW: 'Toggle Pre-Header Row',\r\n TEXT_X_OF_Y_SELECTED: '# of % selected',\r\n TEXT_X_OF_Y_MASS_SELECTED: '{{x}} of {{y}} selected',\r\n };\r\n\r\n static readonly treeDataProperties = {\r\n CHILDREN_PROP: 'children',\r\n COLLAPSED_PROP: '__collapsed',\r\n HAS_CHILDREN_PROP: '__hasChildren',\r\n TREE_LEVEL_PROP: '__treeLevel',\r\n PARENT_PROP: '__parentId',\r\n };\r\n\r\n // some Validation default texts\r\n static readonly VALIDATION_REQUIRED_FIELD = 'Field is required';\r\n static readonly VALIDATION_EDITOR_VALID_NUMBER = 'Please enter a valid number';\r\n static readonly VALIDATION_EDITOR_VALID_INTEGER = 'Please enter a valid integer number';\r\n static readonly VALIDATION_EDITOR_INTEGER_BETWEEN = 'Please enter a valid integer number between {{minValue}} and {{maxValue}}';\r\n static readonly VALIDATION_EDITOR_INTEGER_MAX = 'Please enter a valid integer number that is lower than {{maxValue}}';\r\n static readonly VALIDATION_EDITOR_INTEGER_MAX_INCLUSIVE = 'Please enter a valid integer number that is lower than or equal to {{maxValue}}';\r\n static readonly VALIDATION_EDITOR_INTEGER_MIN = 'Please enter a valid integer number that is greater than {{minValue}}';\r\n static readonly VALIDATION_EDITOR_INTEGER_MIN_INCLUSIVE = 'Please enter a valid integer number that is greater than or equal to {{minValue}}';\r\n static readonly VALIDATION_EDITOR_NUMBER_BETWEEN = 'Please enter a valid number between {{minValue}} and {{maxValue}}';\r\n static readonly VALIDATION_EDITOR_NUMBER_MAX = 'Please enter a valid number that is lower than {{maxValue}}';\r\n static readonly VALIDATION_EDITOR_NUMBER_MAX_INCLUSIVE = 'Please enter a valid number that is lower than or equal to {{maxValue}}';\r\n static readonly VALIDATION_EDITOR_NUMBER_MIN = 'Please enter a valid number that is greater than {{minValue}}';\r\n static readonly VALIDATION_EDITOR_NUMBER_MIN_INCLUSIVE = 'Please enter a valid number that is greater than or equal to {{minValue}}';\r\n static readonly VALIDATION_EDITOR_DECIMAL_BETWEEN = 'Please enter a valid number with a maximum of {{maxDecimal}} decimals';\r\n static readonly VALIDATION_EDITOR_TEXT_LENGTH_BETWEEN = 'Please make sure your text length is between {{minLength}} and {{maxLength}} characters';\r\n static readonly VALIDATION_EDITOR_TEXT_MAX_LENGTH = 'Please make sure your text is less than {{maxLength}} characters';\r\n static readonly VALIDATION_EDITOR_TEXT_MAX_LENGTH_INCLUSIVE = 'Please make sure your text is less than or equal to {{maxLength}} characters';\r\n static readonly VALIDATION_EDITOR_TEXT_MIN_LENGTH = 'Please make sure your text is more than {{minLength}} character(s)';\r\n static readonly VALIDATION_EDITOR_TEXT_MIN_LENGTH_INCLUSIVE = 'Please make sure your text is at least {{minLength}} character(s)';\r\n}\r\n","// import 3rd party vendor libs\r\n// only import the necessary core lib, each will be imported on demand when enabled (via require)\r\nimport 'jquery-ui/ui/widgets/draggable';\r\nimport 'jquery-ui/ui/widgets/droppable';\r\nimport 'jquery-ui/ui/widgets/sortable';\r\nimport 'slickgrid/lib/jquery.event.drag-2.3.0';\r\nimport 'slickgrid/lib/jquery.mousewheel';\r\nimport 'slickgrid/slick.core';\r\nimport 'slickgrid/slick.grid';\r\nimport 'slickgrid/slick.dataview';\r\n\r\n// ...then everything else...\r\nimport { AfterViewInit, ApplicationRef, ChangeDetectorRef, Component, ElementRef, Inject, Input, OnDestroy, Optional, } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport {\r\n // interfaces/types\r\n AutoCompleteEditor,\r\n BackendServiceApi,\r\n BackendServiceOption,\r\n Column,\r\n ColumnEditor,\r\n DataViewOption,\r\n EventSubscription,\r\n ExtensionName,\r\n ExternalResource,\r\n Locale,\r\n Metrics,\r\n Pagination,\r\n SelectEditor,\r\n ServicePagination,\r\n SlickDataView,\r\n SlickEventHandler,\r\n SlickGrid,\r\n SlickNamespace,\r\n\r\n // services\r\n BackendUtilityService,\r\n CollectionService,\r\n EventNamingStyle,\r\n ExtensionService,\r\n ExtensionUtility,\r\n FilterFactory,\r\n FilterService,\r\n GridEventService,\r\n GridService,\r\n GridStateService,\r\n GroupingAndColspanService,\r\n PaginationService,\r\n ResizerService,\r\n RxJsFacade,\r\n SharedService,\r\n SlickgridConfig,\r\n SlickGroupItemMetadataProvider,\r\n SortService,\r\n TreeDataService,\r\n\r\n // utilities\r\n autoAddEditorFormatterToColumnsWithEditor,\r\n emptyElement,\r\n GridStateType,\r\n unsubscribeAll,\r\n} from '@slickgrid-universal/common';\r\nimport { EventPubSubService } from '@slickgrid-universal/event-pub-sub';\r\nimport { SlickEmptyWarningComponent } from '@slickgrid-universal/empty-warning-component';\r\nimport { SlickFooterComponent } from '@slickgrid-universal/custom-footer-component';\r\nimport { SlickPaginationComponent } from '@slickgrid-universal/pagination-component';\r\nimport { RxJsResource } from '@slickgrid-universal/rxjs-observable';\r\nimport { dequal } from 'dequal/lite';\r\n\r\nimport { Constants } from '../constants';\r\nimport { AngularGridInstance, ExternalTestingDependencies, GridOption, } from './../models/index';\r\nimport { GlobalGridOptions } from './../global-grid-options';\r\nimport { TranslaterService } from '../services/translater.service';\r\n\r\n// Services\r\nimport { AngularUtilService } from '../services/angularUtil.service';\r\nimport { SlickRowDetailView } from '../extensions/slickRowDetailView';\r\nimport { ContainerService } from '../services/container.service';\r\n\r\n// using external non-typed js libraries\r\ndeclare const Slick: SlickNamespace;\r\n\r\n@Component({\r\n selector: 'angular-slickgrid',\r\n templateUrl: './angular-slickgrid.component.html',\r\n providers: [\r\n // make everything transient (non-singleton)\r\n AngularUtilService,\r\n ApplicationRef,\r\n TranslaterService,\r\n ]\r\n})\r\nexport class AngularSlickgridComponent implements AfterViewInit, OnDestroy {\r\n private _dataset?: any[] | null;\r\n private _columnDefinitions!: Column[];\r\n private _currentDatasetLength = 0;\r\n private _eventHandler: SlickEventHandler = new Slick.EventHandler();\r\n private _eventPubSubService!: EventPubSubService;\r\n private _angularGridInstances: AngularGridInstance | undefined;\r\n private _hideHeaderRowAfterPageLoad = false;\r\n private _isGridInitialized = false;\r\n private _isDatasetInitialized = false;\r\n private _isDatasetHierarchicalInitialized = false;\r\n private _isPaginationInitialized = false;\r\n private _isLocalGrid = true;\r\n private _paginationOptions: Pagination | undefined;\r\n private _registeredResources: ExternalResource[] = [];\r\n dataView!: SlickDataView;\r\n slickGrid!: SlickGrid;\r\n groupingDefinition: any = {};\r\n groupItemMetadataProvider?: SlickGroupItemMetadataProvider;\r\n backendServiceApi?: BackendServiceApi;\r\n locales!: Locale;\r\n metrics?: Metrics;\r\n showPagination = false;\r\n serviceList: any[] = [];\r\n totalItems = 0;\r\n paginationData?: {\r\n gridOptions: GridOption;\r\n paginationService: PaginationService;\r\n };\r\n subscriptions: EventSubscription[] = [];\r\n\r\n // components / plugins\r\n slickEmptyWarning?: SlickEmptyWarningComponent;\r\n slickFooter?: SlickFooterComponent;\r\n slickPagination?: SlickPaginationComponent;\r\n slickRowDetailView?: SlickRowDetailView;\r\n\r\n // services\r\n backendUtilityService!: BackendUtilityService;\r\n collectionService: CollectionService;\r\n extensionService: ExtensionService;\r\n extensionUtility: ExtensionUtility;\r\n filterFactory!: FilterFactory;\r\n filterService: FilterService;\r\n gridEventService: GridEventService;\r\n gridService: GridService;\r\n gridStateService: GridStateService;\r\n groupingService: GroupingAndColspanService;\r\n paginationService: PaginationService;\r\n resizerService!: ResizerService;\r\n rxjs?: RxJsFacade;\r\n sharedService: SharedService;\r\n sortService: SortService;\r\n treeDataService: TreeDataService;\r\n\r\n @Input() customDataView: any;\r\n @Input() gridId: string = '';\r\n @Input() gridOptions!: GridOption;\r\n\r\n @Input()\r\n get paginationOptions(): Pagination | undefined {\r\n return this._paginationOptions;\r\n }\r\n set paginationOptions(newPaginationOptions: Pagination | undefined) {\r\n if (newPaginationOptions && this._paginationOptions) {\r\n this._paginationOptions = { ...this.gridOptions.pagination, ...this._paginationOptions, ...newPaginationOptions };\r\n } else {\r\n this._paginationOptions = newPaginationOptions;\r\n }\r\n this.gridOptions.pagination = this._paginationOptions ?? this.gridOptions.pagination;\r\n this.paginationService.updateTotalItems(this.gridOptions.pagination?.totalItems ?? 0, true);\r\n }\r\n\r\n @Input()\r\n set columnDefinitions(columnDefinitions: Column[]) {\r\n this._columnDefinitions = columnDefinitions;\r\n if (this._isGridInitialized) {\r\n this.updateColumnDefinitionsList(columnDefinitions);\r\n }\r\n if (columnDefinitions.length > 0) {\r\n this.copyColumnWidthsReference(columnDefinitions);\r\n }\r\n }\r\n get columnDefinitions(): Column[] {\r\n return this._columnDefinitions;\r\n }\r\n\r\n @Input()\r\n get dataset(): any[] {\r\n return (this.customDataView ? this.slickGrid?.getData?.() : this.dataView?.getItems?.()) || [];\r\n }\r\n set dataset(newDataset: any[]) {\r\n const prevDatasetLn = this._currentDatasetLength;\r\n const isDatasetEqual = dequal(newDataset, this._dataset || []);\r\n let data = newDataset;\r\n\r\n // when Tree Data is enabled and we don't yet have the hierarchical dataset filled, we can force a convert+sort of the array\r\n if (this.slickGrid && this.gridOptions?.enableTreeData && Array.isArray(newDataset) && (newDataset.length > 0 || newDataset.length !== prevDatasetLn || !isDatasetEqual)) {\r\n this._isDatasetHierarchicalInitialized = false;\r\n data = this.sortTreeDataset(newDataset, !isDatasetEqual); // if dataset changed, then force a refresh anyway\r\n }\r\n this._dataset = data;\r\n this.refreshGridData(data || []);\r\n this._currentDatasetLength = (newDataset || []).length;\r\n\r\n // expand/autofit columns on first page load\r\n // we can assume that if the prevDataset was empty then we are on first load\r\n if (this.gridOptions?.autoFitColumnsOnFirstLoad && prevDatasetLn === 0) {\r\n this.slickGrid.autosizeColumns();\r\n }\r\n }\r\n\r\n @Input()\r\n get datasetHierarchical(): any[] | undefined {\r\n return this.sharedService.hierarchicalDataset;\r\n }\r\n set datasetHierarchical(newHierarchicalDataset: any[] | undefined) {\r\n const isDatasetEqual = dequal(newHierarchicalDataset, this.sharedService?.hierarchicalDataset ?? []);\r\n const prevFlatDatasetLn = this._currentDatasetLength;\r\n this.sharedService.hierarchicalDataset = newHierarchicalDataset;\r\n\r\n if (newHierarchicalDataset && this.columnDefinitions && this.filterService?.clearFilters) {\r\n this.filterService.clearFilters();\r\n }\r\n\r\n // when a hierarchical dataset is set afterward, we can reset the flat dataset and call a tree data sort that will overwrite the flat dataset\r\n if (newHierarchicalDataset && this.slickGrid && this.sortService?.processTreeDataInitialSort) {\r\n this.dataView.setItems([], this.gridOptions.datasetIdPropertyName ?? 'id');\r\n this.sortService.processTreeDataInitialSort();\r\n\r\n // we also need to reset/refresh the Tree Data filters because if we inserted new item(s) then it might not show up without doing this refresh\r\n // however we need 1 cpu cycle before having the DataView refreshed, so we need to wrap this check in a setTimeout\r\n setTimeout(() => {\r\n const flatDatasetLn = this.dataView.getItemCount();\r\n if (flatDatasetLn > 0 && (flatDatasetLn !== prevFlatDatasetLn || !isDatasetEqual)) {\r\n this.filterService.refreshTreeDataFilters();\r\n }\r\n });\r\n this._isDatasetHierarchicalInitialized = true;\r\n }\r\n }\r\n\r\n get elementRef(): ElementRef {\r\n return this.elm;\r\n }\r\n\r\n get eventHandler(): SlickEventHandler {\r\n return this._eventHandler;\r\n }\r\n\r\n get gridContainerElement(): HTMLElement | null {\r\n return document.querySelector(`#${this.gridOptions.gridContainerId || ''}`);\r\n }\r\n\r\n /** GETTER to know if dataset was initialized or not */\r\n get isDatasetInitialized(): boolean {\r\n return this._isDatasetInitialized;\r\n }\r\n /** SETTER to change if dataset was initialized or not (stringly used for unit testing purposes) */\r\n set isDatasetInitialized(isInitialized: boolean) {\r\n this._isDatasetInitialized = isInitialized;\r\n }\r\n set isDatasetHierarchicalInitialized(isInitialized: boolean) {\r\n this._isDatasetHierarchicalInitialized = isInitialized;\r\n }\r\n\r\n get registeredResources(): ExternalResource[] {\r\n return this._registeredResources;\r\n }\r\n\r\n constructor(\r\n private readonly angularUtilService: AngularUtilService,\r\n private readonly appRef: ApplicationRef,\r\n private readonly cd: ChangeDetectorRef,\r\n private readonly containerService: ContainerService,\r\n private readonly elm: ElementRef,\r\n @Optional() private readonly translate: TranslateService,\r\n @Optional() private readonly translaterService: TranslaterService,\r\n @Inject('config') private forRootConfig: GridOption,\r\n @Inject('externalService') externalServices: ExternalTestingDependencies\r\n ) {\r\n const slickgridConfig = new SlickgridConfig();\r\n\r\n // initialize and assign all Service Dependencies\r\n this._eventPubSubService = externalServices?.eventPubSubService ?? new EventPubSubService(this.elm.nativeElement);\r\n this._eventPubSubService.eventNamingStyle = EventNamingStyle.camelCase;\r\n\r\n this.backendUtilityService = externalServices?.backendUtilityService ?? new BackendUtilityService();\r\n this.gridEventService = externalServices?.gridEventService ?? new GridEventService();\r\n this.sharedService = externalServices?.sharedService ?? new SharedService();\r\n this.collectionService = externalServices?.collectionService ?? new CollectionService(this.translaterService);\r\n this.extensionUtility = externalServices?.extensionUtility ?? new ExtensionUtility(this.sharedService, this.backendUtilityService, this.translaterService);\r\n this.filterFactory = new FilterFactory(slickgridConfig, this.translaterService, this.collectionService);\r\n this.filterService = externalServices?.filterService ?? new FilterService(this.filterFactory as any, this._eventPubSubService, this.sharedService, this.backendUtilityService);\r\n this.resizerService = externalServices?.resizerService ?? new ResizerService(this._eventPubSubService);\r\n this.sortService = externalServices?.sortService ?? new SortService(this.sharedService, this._eventPubSubService, this.backendUtilityService);\r\n this.treeDataService = externalServices?.treeDataService ?? new TreeDataService(this._eventPubSubService, this.sharedService, this.sortService);\r\n this.paginationService = externalServices?.paginationService ?? new PaginationService(this._eventPubSubService, this.sharedService, this.backendUtilityService);\r\n\r\n this.extensionService = externalServices?.extensionService ?? new ExtensionService(\r\n this.extensionUtility,\r\n this.filterService,\r\n this._eventPubSubService,\r\n this.sharedService,\r\n this.sortService,\r\n this.treeDataService,\r\n this.translaterService,\r\n );\r\n\r\n this.gridStateService = externalServices?.gridStateService ?? new GridStateService(this.extensionService, this.filterService, this._eventPubSubService, this.sharedService, this.sortService, this.treeDataService);\r\n this.gridService = externalServices?.gridService ?? new GridService(this.gridStateService, this.filterService, this._eventPubSubService, this.paginationService, this.sharedService, this.sortService, this.treeDataService);\r\n this.groupingService = externalServices?.groupingAndColspanService ?? new GroupingAndColspanService(this.extensionUtility, this._eventPubSubService);\r\n\r\n this.serviceList = [\r\n this.extensionService,\r\n this.filterService,\r\n this.gridEventService,\r\n this.gridService,\r\n this.gridStateService,\r\n this.groupingService,\r\n this.paginationService,\r\n this.resizerService,\r\n this.sortService,\r\n this.treeDataService,\r\n ];\r\n\r\n // register all Service instances in the container\r\n this.containerService.registerInstance('ExtensionUtility', this.extensionUtility);\r\n this.containerService.registerInstance('FilterService', this.filterService);\r\n this.containerService.registerInstance('CollectionService', this.collectionService);\r\n this.containerService.registerInstance('ExtensionService', this.extensionService);\r\n this.containerService.registerInstance('GridEventService', this.gridEventService);\r\n this.containerService.registerInstance('GridService', this.gridService);\r\n this.containerService.registerInstance('GridStateService', this.gridStateService);\r\n this.containerService.registerInstance('GroupingAndColspanService', this.groupingService);\r\n this.containerService.registerInstance('PaginationService', this.paginationService);\r\n this.containerService.registerInstance('ResizerService', this.resizerService);\r\n this.containerService.registerInstance('SharedService', this.sharedService);\r\n this.containerService.registerInstance('SortService', this.sortService);\r\n this.containerService.registerInstance('EventPubSubService', this._eventPubSubService);\r\n this.containerService.registerInstance('PubSubService', this._eventPubSubService);\r\n this.containerService.registerInstance('TranslaterService', this.translaterService);\r\n this.containerService.registerInstance('TreeDataService', this.treeDataService);\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (!this.gridOptions || !this.columnDefinitions) {\r\n throw new Error('Using `<angular-slickgrid>` requires [gridOptions] and [columnDefinitions], it seems that you might have forgot to provide them since at least of them is undefined.');\r\n }\r\n this.initialization(this._eventHandler);\r\n this._isGridInitialized = true;\r\n\r\n // recheck the empty warning message after grid is shown so that it works in every use case\r\n if (this.gridOptions && this.gridOptions.enableEmptyDataWarningMessage && Array.isArray(this.dataset)) {\r\n const finalTotalCount = this.dataset.length;\r\n this.displayEmptyDataWarning(finalTotalCount < 1);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._eventPubSubService.publish('onBeforeGridDestroy', this.slickGrid);\r\n this.destroy();\r\n this._eventPubSubService.publish('onAfterGridDestroyed', true);\r\n }\r\n\r\n destroy(shouldEmptyDomElementContainer = false) {\r\n // dispose of all Services\r\n this.serviceList.forEach((service: any) => {\r\n if (service && service.dispose) {\r\n service.dispose();\r\n }\r\n });\r\n this.serviceList = [];\r\n\r\n // dispose all registered external resources\r\n if (Array.isArray(this._registeredResources)) {\r\n while (this._registeredResources.length > 0) {\r\n const resource = this._registeredResources.pop();\r\n if (resource?.dispose) {\r\n resource.dispose();\r\n }\r\n }\r\n this._registeredResources = [];\r\n }\r\n\r\n // dispose the Components\r\n this.slickEmptyWarning?.dispose();\r\n this.slickFooter?.dispose();\r\n this.slickPagination?.dispose();\r\n\r\n if (this._eventHandler?.unsubscribeAll) {\r\n this._eventHandler.unsubscribeAll();\r\n }\r\n this._eventPubSubService?.unsubscribeAll();\r\n if (this.dataView) {\r\n if (this.dataView?.setItems) {\r\n this.dataView.setItems([]);\r\n }\r\n if (this.dataView.destroy) {\r\n this.dataView.destroy();\r\n }\r\n }\r\n if (this.slickGrid?.destroy) {\r\n this.slickGrid.destroy(shouldEmptyDomElementContainer);\r\n }\r\n\r\n if (this.backendServiceApi) {\r\n for (const prop of Object.keys(this.backendServiceApi)) {\r\n delete this.backendServiceApi[prop as keyof BackendServiceApi];\r\n }\r\n this.backendServiceApi = undefined;\r\n }\r\n for (const prop of Object.keys(this.columnDefinitions)) {\r\n (this.columnDefinitions as any)[prop] = null;\r\n }\r\n for (const prop of Object.keys(this.sharedService)) {\r\n (this.sharedService as any)[prop] = null;\r\n }\r\n\r\n // we could optionally also empty the content of the grid container DOM element\r\n if (shouldEmptyDomElementContainer) {\r\n this.emptyGridContainerElm();\r\n }\r\n\r\n // also unsubscribe all RxJS subscriptions\r\n this.subscriptions = unsubscribeAll(this.subscriptions);\r\n\r\n this._dataset = null;\r\n this.datasetHierarchical = undefined;\r\n this._columnDefinitions = [];\r\n this._angularGridInstances = undefined;\r\n }\r\n\r\n emptyGridContainerElm() {\r\n const gridContainerId = this.gridOptions?.gridContainerId ?? 'grid1';\r\n const gridContainerElm = document.querySelector(`#${gridContainerId}`);\r\n emptyElement(gridContainerElm);\r\n }\r\n\r\n /**\r\n * Define our internal Post Process callback, it will execute internally after we get back result from the Process backend call\r\n * For now, this is GraphQL Service ONLY feature and it will basically refresh the Dataset & Pagination without having the user to create his own PostProcess every time\r\n */\r\n createBackendApiInternalPostProcessCallback(gridOptions: GridOption) {\r\n const backendApi = gridOptions && gridOptions.backendServiceApi;\r\n if (backendApi && backendApi.service) {\r\n const backendApiService = backendApi.service;\r\n\r\n // internalPostProcess only works (for now) with a GraphQL Service, so make sure it is of that type\r\n if (typeof backendApiService.getDatasetName === 'function') {\r\n backendApi.internalPostProcess = (processResult: any) => {\r\n const datasetName = (backendApi && backendApiService && typeof backendApiService.getDatasetName === 'function') ? backendApiService.getDatasetName() : '';\r\n if (processResult?.data[datasetName]) {\r\n const data = processResult.data[datasetName].hasOwnProperty('nodes') ? (processResult as any).data[datasetName].nodes : (processResult as any).data[datasetName];\r\n const totalCount = processResult.data[datasetName].hasOwnProperty('totalCount') ? (processResult as any).data[datasetName].totalCount : (processResult as any).data[datasetName].length;\r\n this.refreshGridData(data, totalCount || 0);\r\n }\r\n };\r\n }\r\n }\r\n }\r\n\r\n initialization(eventHandler: SlickEventHandler) {\r\n this.gridOptions.translater = this.translaterService;\r\n this._eventHandler = eventHandler;\r\n\r\n // when detecting a frozen grid, we'll automatically enable the mousewheel scroll handler so that we can scroll from both left/right frozen containers\r\n if (this.gridOptions && ((this.gridOptions.frozenRow !== undefined && this.gridOptions.frozenRow >= 0) || this.gridOptions.frozenColumn !== undefined && this.gridOptions.frozenColumn >= 0) && this.gridOptions.enableMouseWheelScrollHandler === undefined) {\r\n this.gridOptions.enableMouseWheelScrollHandler = true;\r\n }\r\n\r\n this._eventPubSubService.eventNamingStyle = this.gridOptions?.eventNamingStyle ?? EventNamingStyle.camelCase;\r\n this._eventPubSubService.publish('onBeforeGridCreate', true);\r\n\r\n // make sure the dataset is initialized (if not it will throw an error that it cannot getLength of null)\r\n this._dataset = this._dataset || [];\r\n this.gridOptions = this.mergeGridOptions(this.gridOptions);\r\n this._paginationOptions = this.gridOptions?.pagination;\r\n this.locales = this.gridOptions?.locales ?? Constants.locales;\r\n this.backendServiceApi = this.gridOptions?.backendServiceApi;\r\n this._isLocalGrid = !this.backendServiceApi; // considered a local grid if it doesn't have a backend service set\r\n\r\n this.createBackendApiInternalPostProcessCallback(this.gridOptions);\r\n\r\n if (!this.customDataView) {\r\n const dataviewInlineFilters = this.gridOptions.dataView && this.gridOptions.dataView.inlineFilters || false;\r\n let dataViewOptions: DataViewOption = { inlineFilters: dataviewInlineFilters };\r\n\r\n if (this.gridOptions.draggableGrouping || this.gridOptions.enableGrouping) {\r\n this.groupItemMetadataProvider = new SlickGroupItemMetadataProvider();\r\n this.sharedService.groupItemMetadataProvider = this.groupItemMetadataProvider;\r\n dataViewOptions = { ...dataViewOptions, groupItemMetadataProvider: this.groupItemMetadataProvider };\r\n }\r\n this.dataView = new Slick.Data.DataView(dataViewOptions);\r\n this._eventPubSubService.publish('onDataviewCreated', this.dataView);\r\n }\r\n\r\n // get any possible Services that user want to register which don't require SlickGrid to be instantiated\r\n // RxJS Resource is in this lot because it has to be registered before anything else and doesn't require SlickGrid to be initialized\r\n this.preRegisterResources();\r\n\r\n // for convenience to the user, we provide the property \"editor\" as an Angular-Slickgrid editor complex object\r\n // however \"editor\" is used internally by SlickGrid for it's own Editor Factory\r\n // so in our lib we will swap \"editor\" and copy it into a new property called \"internalColumnEditor\"\r\n // then take back \"editor.model\" and make it the new \"editor\" so that SlickGrid Editor Factory still works\r\n this._columnDefinitions = this.swapInternalEditorToSlickGridFactoryEditor(this._columnDefinitions);\r\n\r\n // if the user wants to automatically add a Custom Editor Formatter, we need to call the auto add function again\r\n if (this.gridOptions.autoAddCustomEditorFormatter) {\r\n autoAddEditorFormatterToColumnsWithEditor(this._columnDefinitions, this.gridOptions.autoAddCustomEditorFormatter);\r\n }\r\n\r\n // save reference for all columns before they optionally become hidden/visible\r\n this.sharedService.allColumns = this._columnDefinitions;\r\n this.sharedService.visibleColumns = this._columnDefinitions;\r\n this.extensionService.createExtensionsBeforeGridCreation(this._columnDefinitions, this.gridOptions);\r\n\r\n // if user entered some Pinning/Frozen \"presets\", we need to apply them in the grid options\r\n if (this.gridOptions.presets?.pinning) {\r\n this.gridOptions = { ...this.gridOptions, ...this.gridOptions.presets.pinning };\r\n }\r\n\r\n // build SlickGrid Grid, also user might optionally pass a custom dataview (e.g. remote model)\r\n this.slickGrid = new Slick.Grid(`#${this.gridId}`, this.customDataView || this.dataView, this._columnDefinitions, this.gridOptions);\r\n this.sharedService.dataView = this.dataView;\r\n this.sharedService.slickGrid = this.slickGrid;\r\n this.sharedService.gridContainerElement = this.elm.nativeElement as HTMLDivElement;\r\n\r\n this.extensionService.bindDifferentExtensions();\r\n this.bindDifferentHooks(this.slickGrid, this.gridOptions, this.dataView);\r\n\r\n // when it's a frozen grid, we need to keep the frozen column id for reference if we ever show/hide column from ColumnPicker/GridMenu afterward\r\n const frozenColumnIndex = this.gridOptions.frozenColumn !== undefined ? this.gridOptions.frozenColumn : -1;\r\n if (frozenColumnIndex >= 0 && frozenColumnIndex <= this._columnDefinitions.length) {\r\n this.sharedService.frozenVisibleColumnId = this._columnDefinitions[frozenColumnIndex].id || '';\r\n }\r\n\r\n // get any possible Services that user want to register\r\n this.registerResources();\r\n\r\n // initialize the SlickGrid grid\r\n this.slickGrid.init();\r\n\r\n // initialized the resizer service only after SlickGrid is initialized\r\n // if we don't we end up binding our resize to a grid element that doesn't yet exist in the DOM and the resizer service will fail silently (because it has a try/catch that unbinds the resize without throwing back)\r\n if (this.gridContainerElement) {\r\n this.resizerService.init(this.slickGrid, this.gridContainerElement as HTMLDivElement);\r\n }\r\n\r\n // user could show a custom footer with the data metrics (dataset length and last updated timestamp)\r\n if (!this.gridOptions.enablePagination && this.gridOptions.showCustomFooter && this.gridOptions.customFooterOptions && this.gridContainerElement) {\r\n this.slickFooter = new SlickFooterComponent(this.slickGrid, this.gridOptions.customFooterOptions, this._eventPubSubService, this.translaterService);\r\n this.slickFooter.renderFooter(this.gridContainerElement);\r\n }\r\n\r\n if (!this.customDataView && this.dataView) {\r\n // load the data in the DataView (unless it's a hierarchical dataset, if so it will be loaded after the initial tree sort)\r\n const initialDataset = this.gridOptions?.enableTreeData ? this.sortTreeDataset(this._dataset) : this._dataset;\r\n this.dataView.beginUpdate();\r\n this.dataView.setItems(initialDataset || [], this.gridOptions.datasetIdPropertyName ?? 'id');\r\n this.dataView.endUpdate();\r\n\r\n // if you don't want the items that are not visible (due to being filtered out or being on a different page)\r\n // to stay selected, pass 'false' to the second arg\r\n const selectionModel = this.slickGrid?.getSelectionModel();\r\n if (selectionModel && this.gridOptions && this.gridOptions.dataView && this.gridOptions.dataView.hasOwnProperty('syncGridSelection')) {\r\n // if we are using a Backend Service, we will do an extra flag check, the reason is because it might have some unintended behaviors\r\n // with the BackendServiceApi because technically the data in the page changes the DataView on every page change.\r\n let preservedRowSelectionWithBackend = false;\r\n if (this.gridOptions.backendServiceApi && this.gridOptions.dataView.hasOwnProperty('syncGridSelectionWithBackendService')) {\r\n preservedRowSelectionWithBackend = this.gridOptions.dataView.syncGridSelectionWithBackendService as boolean;\r\n }\r\n\r\n const syncGridSelection = this.gridOptions.dataView.syncGridSelection;\r\n if (typeof syncGridSelection === 'boolean') {\r\n let preservedRowSelection = syncGridSelection;\r\n if (!this._isLocalGrid) {\r\n // when using BackendServiceApi, we'll be using the \"syncGridSelectionWithBackendService\" flag BUT \"syncGridSelection\" must also be set to True\r\n preservedRowSelection = syncGridSelection && preservedRowSelectionWithBackend;\r\n }\r\n this.dataView.syncGridSelection(this.slickGrid, preservedRowSelection);\r\n } else if (typeof syncGridSelection === 'object') {\r\n this.dataView.syncGridSelection(this.slickGrid, syncGridSelection.preserveHidden, syncGridSelection.preserveHiddenOnSelectionChange);\r\n }\r\n }\r\n\r\n const datasetLn = this.dataView.getLength() || this._dataset && this._dataset.length || 0;\r\n if (datasetLn > 0) {\r\n if (!this._isDatasetInitialized && (this.gridOptions.enableCheckboxSelector || this.gridOptions.enableRowSelection)) {\r\n this.loadRowSelectionPresetWhenExists();\r\n }\r\n this.loadFilterPresetsWhenDatasetInitialized();\r\n this._isDatasetInitialized = true;\r\n }\r\n }\r\n\r\n // user might want to hide the header row on page load but still have `enableFiltering: true`\r\n // if that is the case, we need to hide the headerRow ONLY AFTER all filters got created & dataView exist\r\n if (this._hideHeaderRowAfterPageLoad) {\r\n this.showHeaderRow(false);\r\n this.sharedService.hideHeaderRowAfterPageLoad = this._hideHeaderRowAfterPageLoad;\r\n }\r\n\r\n // publish & dispatch certain events\r\n this._eventPubSubService.publish('onGridCreated', this.slickGrid);\r\n\r\n // after the DataView is created & updated execute some processes\r\n if (!this.customDataView) {\r\n this.executeAfterDataviewCreated(this.slickGrid, this.gridOptions);\r\n }\r\n\r\n // bind resize ONLY after the dataView is ready\r\n this.bindResizeHook(this.slickGrid, this.gridOptions);\r\n\r\n // bind the Backend Service API callback functions only after the grid is initialized\r\n // because the preProcess() and onInit() might get triggered\r\n if (this.gridOptions?.backendServiceApi) {\r\n this.bindBackendCallbackFunctions(this.gridOptions);\r\n }\r\n\r\n // local grid, check if we need to show the Pagination\r\n // if so then also check if there's any presets and finally initialize the PaginationService\r\n // a local grid with Pagination presets will potentially have a different total of items, we'll need to get it from the DataView and update our total\r\n if (this.gridOptions?.enablePagination && this._isLocalGrid) {\r\n this.showPagination = true;\r\n this.loadLocalGridPagination(this.dataset);\r\n }\r\n\r\n this._angularGridInstances = {\r\n // Slick Grid & DataView objects\r\n dataView: this.dataView,\r\n slickGrid: this.slickGrid,\r\n extensions: this.extensionService?.extensionList,\r\n\r\n // public methods\r\n destroy: this.destroy.bind(this),\r\n\r\n // return all available Services (non-singleton)\r\n backendService: this.gridOptions?.backendServiceApi?.service,\r\n filterService: this.filterService,\r\n gridEventService: this.gridEventService,\r\n gridStateService: this.gridStateService,\r\n gridService: this.gridService,\r\n groupingService: this.groupingService,\r\n extensionService: this.extensionService,\r\n paginationService: this.paginationService,\r\n resizerService: this.resizerService,\r\n sortService: this.sortService,\r\n treeDataService: this.treeDataService,\r\n }\r\n\r\n // all instances (SlickGrid, DataView & all Services)\r\n this._eventPubSubService.publish('onAngularGridCreated', this._angularGridInstances);\r\n }\r\n\r\n /**\r\n * On a Pagination changed, we will trigger a Grid State changed with the new pagination info\r\n * Also if we use Row Selection or the Checkbox Selector, we need to reset any selection\r\n */\r\n paginationChanged(pagination: ServicePagination) {\r\n const isSyncGridSelectionEnabled = this.gridStateService?.needToPreserveRowSelection() ?? false;\r\n if (!isSyncGridSelectionEnabled && (this.gridOptions.enableRowSelection || this.gridOptions.enableCheckboxSelector)) {\r\n this.slickGrid.setSelectedRows([]);\r\n }\r\n const { pageNumber, pageSize } = pagination;\r\n if (this.sharedService) {\r\n if (pageSize !== undefined && pageNumber !== undefined) {\r\n this.sharedService.currentPagination = { pageNumber, pageSize };\r\n }\r\n }\r\n this._eventPubSubService.publish('onGridStateChanged', {\r\n change: { newValues: { pageNumber, pageSize }, type: GridStateType.pagination },\r\n gridState: this.gridStateService.getCurrentGridState()\r\n });\r\n this.cd.markForCheck();\r\n }\r\n\r\n /**\r\n * When dataset changes, we need to refresh the entire grid UI & possibly resize it as well\r\n * @param dataset\r\n */\r\n refreshGridData(dataset: any[], totalCount?: number) {\r\n if (this.gridOptions && this.gridOptions.enableEmptyDataWarningMessage && Array.isArray(dataset)) {\r\n const finalTotalCount = totalCount || dataset.length;\r\n this.displayEmptyDataWarning(finalTotalCount < 1);\r\n }\r\n\r\n if (Array.isArray(dataset) && this.slickGrid && this.dataView?.setItems) {\r\n this.dataView.setItems(dataset, this.gridOptions.datasetIdPropertyName ?? 'id');\r\n if (!this.gridOptions.backendServiceApi && !this.gridOptions.enableTreeData) {\r\n this.dataView.reSort();\r\n }\r\n\r\n if (dataset.length > 0) {\r\n if (!this._isDatasetInitialized) {\r\n this.loadFilterPresetsWhenDatasetInitialized();\r\n\r\n if (this.gridOptions.enableCheckboxSelector) {\r\n this.loadRowSelectionPresetWhenExists();\r\n }\r\n }\r\n this._isDatasetInitialized = true;\r\n }\r\n\r\n if (dataset) {\r\n this.slickGrid.invalidate();\r\n }\r\n\r\n // display the Pagination component only after calling this refresh data first, we call it here so that if we preset pagination page number it will be shown correctly\r\n this.showPagination = (this.gridOptions && (this.gridOptions.enablePagination || (this.gridOptions.backendServiceApi && this.gridOptions.enablePagination === undefined))) ? true : false;\r\n\r\n if (this._paginationOptions && this.gridOptions?.pagination && this.gridOptions?.backendServiceApi) {\r\n const paginationOptions = this.setPaginationOptionsWhenPresetDefined(this.gridOptions, this._paginationOptions as Pagination);\r\n // when we have a totalCount use it, else we'll take it from the pagination object\r\n // only update the total items if it's different to avoid refreshing the UI\r\n const totalRecords = (totalCount !== undefined) ? totalCount : (this.gridOptions?.pagination?.totalItems);\r\n if (totalRecords !== undefined && totalRecords !== this.totalItems) {\r\n this.totalItems = +totalRecords;\r\n }\r\n\r\n // initialize the Pagination Service with new pagination options (which might have presets)\r\n if (!this._isPaginationInitialized) {\r\n this.initializePaginationService(paginationOptions);\r\n } else {\r\n // update the pagination service with the new total\r\n this.paginationService.updateTotalItems(this.totalItems);\r\n }\r\n }\r\n\r\n // resize the grid inside a slight timeout, in case other DOM element changed prior to the resize (like a filter/pagination changed)\r\n if (this.slickGrid && this.gridOptions.enableAutoResize) {\r\n const delay = this.gridOptions.autoResize && this.gridOptions.autoResize.delay;\r\n this.resizerService.resizeGrid(delay || 10);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Check if there's any Pagination Presets defined in the Grid Options,\r\n * if there are then load them in the paginationOptions object\r\n */\r\n setPaginationOptionsWhenPresetDefined(gridOptions: GridOption, paginationOptions: Pagination): Pagination {\r\n if (gridOptions.presets?.pagination && paginationOptions && !this._isPaginationInitialized) {\r\n paginationOptions.pageSize = gridOptions.presets.pagination.pageSize;\r\n paginationOptions.pageNumber = gridOptions.presets.pagination.pageNumber;\r\n }\r\n return paginationOptions;\r\n }\r\n\r\n /**\r\n * Dynamically change or update the column definitions list.\r\n * We will re-render the grid so that the new header and data shows up correctly.\r\n * If using i18n, we also need to trigger a re-translate of the column headers\r\n */\r\n updateColumnDefinitionsList(newColumnDefinitions: Column[]) {\r\n // map/swap the internal library Editor to the SlickGrid Editor factory\r\n newColumnDefinitions = this.swapInternalEditorToSlickGridFactoryEditor(newColumnDefinitions);\r\n\r\n if (this.gridOptions.enableTranslate) {\r\n this.extensionService.translateColumnHeaders(false, newColumnDefinitions);\r\n } else {\r\n this.extensionService.renderColumnHeaders(newColumnDefinitions, true);\r\n }\r\n\r\n if (this.gridOptions?.enableAutoSizeColumns) {\r\n this.slickGrid.autosizeColumns();\r\n } else if (this.gridOptions?.enableAutoResizeColumnsByCellContent && this.resizerService?.resizeColumnsByCellContent) {\r\n this.resizerService.resizeColumnsByCellContent();\r\n }\r\n }\r\n\r\n /**\r\n * Show the filter row displayed on first row, we can optionally pass false to hide it.\r\n * @param showing\r\n */\r\n showHeaderRow(showing = true) {\r\n this.slickGrid.setHeaderRowVisibility(showing, false);\r\n if (showing === true && this._isGridInitialized) {\r\n this.slickGrid.setColumns(this.columnDefinitions);\r\n }\r\n return showing;\r\n }\r\n\r\n //\r\n // private functions\r\n // ------------------\r\n\r\n /**\r\n * Loop through all column definitions and copy the original optional `width` properties optionally provided by the user.\r\n * We will use this when doing a resize by cell content, if user provided a `width` it won't override it.\r\n */\r\n private copyColumnWidthsReference(columnDefinitions: Column[]) {\r\n columnDefinitions.forEach(col => col.originalWidth = col.width);\r\n }\r\n\r\n private displayEmptyDataWarning(showWarning = true) {\r\n this.slickEmptyWarning?.showEmptyDataMessage(showWarning);\r\n }\r\n\r\n private bindDifferentHooks(grid: SlickGrid, gridOptions: GridOption, dataView: SlickDataView) {\r\n // on locale change, we have to manually translate the Headers, GridMenu\r\n if (this.translate?.onLangChange) {\r\n // translate some of them on first load, then on each language change\r\n if (gridOptions.enableTranslate) {\r\n this.extensionService.translateAllExtensions();\r\n this.translateColumnHeaderTitleKeys();\r\n this.translateColumnGroupKeys();\r\n }\r\n\r\n this.subscriptions.push(\r\n this.translate.onLangChange.subscribe(() => {\r\n // publish event of the same name that Slickgrid-Universal uses on a language change event\r\n this._eventPubSubService.publish('onLanguageChange');\r\n\r\n if (gridOptions.enableTranslate) {\r\n this.extensionService.translateAllExtensions();\r\n this.translateColumnHeaderTitleKeys();\r\n this.translateColumnGroupKeys();\r\n if (gridOptions.createPreHeaderPanel && !gridOptions.enableDraggableGrouping) {\r\n this.groupingService.translateGroupingAndColSpan();\r\n }\r\n }\r\n })\r\n );\r\n }\r\n\r\n // if user set an onInit Backend, we'll run it right away (and if so, we also need to run preProcess, internalPostProcess & postProcess)\r\n if (gridOptions.backendServiceApi) {\r\n const backendApi = gridOptions.backendServiceApi;\r\n\r\n if (backendApi?.service?.init) {\r\n backendApi.service.init(backendApi.options, gridOptions.pagination, this.slickGrid, this.sharedService);\r\n }\r\n }\r\n\r\n if (dataView && grid) {\r\n const slickgridEventPrefix = this.gridOptions?.defaultSlickgridEventPrefix ?? '';\r\n\r\n // expose all Slick Grid Events through dispatch\r\n for (const prop in grid) {\r\n if (grid.hasOwnProperty(prop) && prop.startsWith('on')) {\r\n const gridEventName = this._eventPubSubService.getEventNameByNamingConvention(prop, slickgridEventPrefix);\r\n this._eventHandler.subscribe((grid as any)[prop], (event, args) => {\r\n return this._eventPubSubService.dispatchCustomEvent(gridEventName, { eventData: event, args });\r\n });\r\n }\r\n }\r\n\r\n // expose all Slick DataView Events through dispatch\r\n for (const prop in dataView) {\r\n if (dataView.hasOwnProperty(prop) && prop.startsWith('on')) {\r\n this._eventHandler.subscribe((dataView as any)[prop], (event, args) => {\r\n const dataViewEventName = this._eventPubSubService.getEventNameByNamingConvention(prop, slickgridEventPrefix);\r\n return this._eventPubSubService.dispatchCustomEvent(dataViewEventName, { eventData: event, args });\r\n });\r\n }\r\n }\r\n\r\n // on cell click, mainly used with the columnDef.action callback\r\n this.gridEventService.bindOnCellChange(grid);\r\n this.gridEventService.bindOnClick(grid);\r\n\r\n if (dataView && grid) {\r\n // bind external sorting (backend) when available or default onSort (dataView)\r\n if (gridOptions.enableSorting) {\r\n // bind external sorting (backend) unless specified to use the local one\r\n if (gridOptions.backendServiceApi && !gridOptions.backendServiceApi.useLocalSorting) {\r\n this.sortService.bindBackendOnSort(grid);\r\n } else {\r\n this.sortService.bindLocalOnSort(grid);\r\n }\r\n }\r\n\r\n // bind external filter (backend) when available or default onFilter (dataView)\r\n if (gridOptions.enableFiltering) {\r\n this.filterService.init(grid);\r\n\r\n // bind external filter (backend) unless specified to use the local one\r\n if (gridOptions.backendServiceApi && !gridOptions.backendServiceApi.useLocalFiltering) {\r\n this.filterService.bindBackendOnFilter(grid);\r\n } else {\r\n this.filterService.bindLocalOnFilter(grid);\r\n }\r\n }\r\n\r\n // load any presets if any (after dataset is initialized)\r\n this.loadColumnPresetsWhenDatasetInitialized();\r\n this.loadFilterPresetsWhenDatasetInitialized();\r\n\r\n // When data changes in the DataView, we need to refresh the metrics and/or display a warning if the dataset is empty\r\n this._eventHandler.subscribe(dataView.onRowCountChanged, () => {\r\n grid.invalidate();\r\n this.handleOnItemCountChanged(this.dataView.getFilteredItemCount() || 0, dataView.getItemCount());\r\n });\r\n this._eventHandler.subscribe(dataView.onSetItemsCalled, (_e, args) => {\r\n grid.invalidate();\r\n this.handleOnItemCountChanged(this.dataView.getFilteredItemCount(), args.itemCount);\r\n\r\n // when user has resize by content enabled, we'll force a full width calculation since we change our entire dataset\r\n if (args.itemCount > 0 && (this.gridOptions.autosizeColumnsByCellContentOnFirstLoad || this.gridOptions.enableAutoResizeColumnsByCellContent)) {\r\n this.resizerService.resizeColumnsByCellContent(!this.gridOptions?.resizeByContentOnlyOnFirstLoad);\r\n }\r\n });\r\n\r\n this._eventHandler.subscribe(dataView.onRowsChanged, (_e, args) => {\r\n // filtering data with local dataset will not always show correctly unless we call this updateRow/render\r\n // also don't use \"invalidateRows\" since it destroys the entire row and as bad user experience when updating a row\r\n // see commit: https://github.com/ghiscoding/aurelia-slickgrid/commit/8c503a4d45fba11cbd8d8cc467fae8d177cc4f60\r\n if (gridOptions?.enableFiltering && !gridOptions.enableRowDetailView) {\r\n if (args?.rows && Array.isArray(args.rows)) {\r\n args.rows.forEach((row: number) => grid.updateRow(row));\r\n grid.render();\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // did the user add a colspan callback? If so, hook it into the DataView getItemMetadata\r\n if (gridOptions && gridOptions.colspanCallback && dataView && dataView.getItem && dataView.getItemMetadata) {\r\n dataView.getItemMetadata = (rowNumber: number) => {\r\n let callbackResult = null;\r\n if (gridOptions.colspanCallback && gridOptions.colspanCallback) {\r\n callbackResult = gridOptions.colspanCallback(dataView.getItem(rowNumber));\r\n }\r\n return callbackResult;\r\n };\r\n }\r\n }\r\n\r\n private bindBackendCallbackFunctions(gridOptions: GridOption) {\r\n const backendApi = gridOptions.backendServiceApi;\r\n const backendApiService = backendApi && backendApi.service;\r\n const serviceOptions: BackendServiceOption = backendApiService?.options ?? {};\r\n const isExecuteCommandOnInit = (!serviceOptions) ? false : ((serviceOptions && serviceOptions.hasOwnProperty('executeProcessCommandOnInit')) ? serviceOptions['executeProcessCommandOnInit'] : true);\r\n\r\n if (backendApiService) {\r\n // update backend filters (if need be) BEFORE the query runs (via the onInit command a few lines below)\r\n // if user entered some any \"presets\", we need to reflect them all in the grid\r\n if (gridOptions && gridOptions.presets) {\r\n // Filters \"presets\"\r\n if (backendApiService.updateFilters && Array.isArray(gridOptions.presets.filters) && gridOptions.presets.filters.length > 0) {\r\n backendApiService.updateFilters(gridOptions.presets.filters, true);\r\n }\r\n // Sorters \"presets\"\r\n if (backendApiService.updateSorters && Array.isArray(gridOptions.presets.sorters) && gridOptions.presets.sorters.length > 0) {\r\n // when using multi-column sort, we can have multiple but on single sort then only grab the first sort provided\r\n const sortColumns = this.gridOptions.multiColumnSort ? gridOptions.presets.sorters : gridOptions.presets.sorters.slice(0, 1);\r\n backendApiService.updateSorters(undefined, sortColumns);\r\n }\r\n // Pagination \"presets\"\r\n if (backendApiService.updatePagination && gridOptions.presets.pagination) {\r\n const { pageNumber, pageSize } = gridOptions.presets.pagination;\r\n backendApiService.updatePagination(pageNumber, pageSize);\r\n }\r\n } else {\r\n const columnFilters = this.filterService.getColumnFilters();\r\n if (columnFilters && backendApiService.updateFilters) {\r\n backendApiService.updateFilters(columnFilters, false);\r\n }\r\n }\r\n\r\n // execute onInit command when necessary\r\n if (backendApi && backendApiService && (backendApi.onInit || isExecuteCommandOnInit)) {\r\n const query = (typeof backendApiService.buildQuery === 'function') ? backendApiService.buildQuery() : '';\r\n const process = (isExecuteCommandOnInit) ? (backendApi.process && backendApi.process(query) || null) : (backendApi.onInit && backendApi.onInit(query) || null);\r\n\r\n // wrap this inside a setTimeout to avoid timing issue since the gridOptions needs to be ready before running this onInit\r\n setTimeout(() => {\r\n const backendUtilityService = this.backendUtilityService as BackendUtilityService;\r\n\r\n // keep start time & end timestamps & return it after process execution\r\n const startTime = new Date();\r\n\r\n // run any pre-process, if defined, for example a spinner\r\n if (backendApi.preProcess) {\r\n backendApi.preProcess();\r\n }\r\n\r\n // the processes can be a Promise (like Http)\r\n const totalItems = this.gridOptions?.pagination?.totalItems ?? 0;\r\n if (process instanceof Promise) {\r\n process\r\n .then((processResult: any) => backendUtilityService.executeBackendProcessesCallback(startTime, processResult, backendApi, totalItems))\r\n .catch((error) => backendUtilityService.onBackendError(error, backendApi));\r\n } else if (process && this.rxjs?.isObservable(process)) {\r\n this.subscriptions.push(\r\n (process as Observable<any>).subscribe({\r\n next: (processResult: any) => backendUtilityService.executeBackendProcessesCallback(startTime, processResult, backendApi, totalItems),\r\n error: (error: any) => backendUtilityService.onBackendError(error, backendApi)\r\n })\r\n );\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n private bindResizeHook(grid: SlickGrid, options: GridOption) {\r\n if ((options.autoFitColumnsOnFirstLoad && options.autosizeColumnsByCellContentOnFirstLoad) || (options.enableAutoSizeColumns && options.enableAutoResizeColumnsByCellContent)) {\r\n throw new Error(`[Angular-Slickgrid] You cannot enable both autosize/fit viewport & resize by content, you must choose which resize technique to use. You can enable these 2 options (\"autoFitColumnsOnFirstLoad\" and \"enableAutoSizeColumns\") OR these other 2 options (\"autosizeColumnsByCellContentOnFirstLoad\" and \"enableAutoResizeColumnsByCellContent\").`);\r\n }\r\n\r\n // expand/autofit columns on first page load\r\n if (grid && options.autoFitColumnsOnFirstLoad && options.enableAutoSizeColumns) {\r\n grid.autosizeColumns();\r\n }\r\n\r\n // auto-resize grid on browser resize\r\n if (options.gridHeight || options.gridWidth) {\r\n this.resizerService.resizeGrid(0, { height: options.gridHeight, width: options.gridWidth });\r\n } else {\r\n this.resizerService.resizeGrid();\r\n }\r\n if (options.enableAutoResize) {\r\n if (grid && options.autoFitColumnsOnFirstLoad && options.enableAutoSizeColumns) {\r\n grid.autosizeColumns();\r\n }\r\n }\r\n }\r\n\r\n private executeAfterDataviewCreated(_grid: SlickGrid, gridOptions: GridOption) {\r\n // if user entered some Sort \"presets\", we need to reflect them all in the DOM\r\n if (gridOptions.enableSorting) {\r\n if (gridOptions.presets && Array.isArray(gridOptions.presets.sorters)) {\r\n // when using multi-column sort, we can have multiple but on single sort then only grab the first sort provided\r\n const sortColumns = this.gridOptions.multiColumnSort ? gridOptions.presets.sorters : gridOptions.presets.sorters.slice(0, 1);\r\n this.sortService.loadGridSorters(sortColumns);\r\n }\r\n }\r\n }\r\n\r\n /** When data changes in the DataView, we'll refresh the metrics and/or display a warning if the dataset is empty */\r\n private handleOnItemCountChanged(currentPageRowItemCount: number, totalItemCount: number) {\r\n this._currentDatasetLength = totalItemCount;\r\n this.metrics = {\r\n startTime: new Date(),\r\n endTime: new Date(),\r\n itemCount: currentPageRowItemCount,\r\n totalItemCount\r\n };\r\n // if custom footer is enabled, then we'll update its metrics\r\n if (this.slickFooter) {\r\n this.slickFooter.metrics = this.metrics;\r\n }\r\n\r\n // when using local (in-memory) dataset, we'll display a warning message when filtered data is empty\r\n if (this._isLocalGrid && this.gridOptions?.enableEmptyDataWarningMessage) {\r\n this.displayEmptyDataWarning(currentPageRowItemCount === 0);\r\n }\r\n }\r\n\r\n private initializePaginationService(paginationOptions: Pagination) {\r\n if (this.gridOptions) {\r\n this.paginationData = {\r\n gridOptions: this.gridOptions,\r\n paginationService: this.paginationService,\r\n };\r\n this.paginationService.totalItems = this.totalItems;\r\n this.paginationService.init(this.slickGrid, paginationOptions, this.backendServiceApi);\r\n this.subscriptions.push(\r\n this._eventPubSubService.subscribe('onPaginationChanged', (paginationChanges: ServicePagination) => {\r\n this.paginationChanged(paginationChanges);\r\n }),\r\n this._eventPubSubService.subscribe('onPaginationVisibilityChanged', (visibility: { visible: boolean }) => {\r\n this.showPagination = visibility?.visible ?? false;\r\n if (this.gridOptions?.backendServiceApi) {\r\n this.backendUtilityService?.refreshBackendDataset(this.gridOptions);\r\n }\r\n this.renderPagination(this.showPagination);\r\n })\r\n );\r\n // also initialize (render) the pagination component\r\n this.renderPagination();\r\n this._isPaginationInitialized = true;\r\n }\r\n this.cd.detectChanges();\r\n }\r\n\r\n /** Load the Editor Collection asynchronously and replace the \"collection\" property when Observable resolves */\r\n private loadEditorCollectionAsync(column: Column) {\r\n const collectionAsync = column && column.editor && (column.editor as ColumnEditor).collectionAsync;\r\n if (collectionAsync instanceof Observable) {\r\n this.subscriptions.push(\r\n collectionAsync.subscribe((resolvedCollection) => this.updateEditorCollection(column, resolvedCollection))\r\n );\r\n } else if (collectionAsync instanceof Promise) {\r\n // wait for the \"collectionAsync\", once resolved we will save it into the \"collection\"\r\n // the collectionAsync can be of 3 types HttpClient, HttpFetch or a Promise\r\n collectionAsync.then((response: any | any[]) => {\r\n if (Array.isArray(response)) {\r\n this.updateEditorCollection(column, response); // from Promise\r\n }\r\n });\r\n }\r\n }\r\n\r\n /** Load any possible Columns Grid Presets */\r\n private loadColumnPresetsWhenDatasetInitialized() {\r\n // if user entered some Columns \"presets\", we need to reflect them all in the grid\r\n if (this.gridOptions.presets && Array.isArray(this.gridOptions.presets.columns) && this.gridOptions.presets.columns.length > 0) {\r\n const gridColumns: Column[] = this.gridStateService.getAssociatedGridColumns(this.slickGrid, this.gridOptions.presets.columns);\r\n if (gridColumns && Array.isArray(gridColumns) && gridColumns.length > 0) {\r\n // make sure that the checkbox selector is also visible if it is enabled\r\n if (this.gridOptions.enableCheckboxSelector) {\r\n const checkboxColumn = (Array.isArray(this._columnDefinitions) && this._columnDefinitions.length > 0) ? this._columnDefinitions[0] : null;\r\n if (checkboxColumn && checkboxColumn.id === '_checkbox_selector' && gridColumns[0].id !== '_checkbox_selector') {\r\n gridColumns.unshift(checkboxColumn);\r\n }\r\n }\r\n\r\n // keep copy the original optional `width` properties optionally provided by the user.\r\n // We will use this when doing a resize by cell content, if user provided a `width` it won't override it.\r\n gridColumns.forEach(col => col.originalWidth = col.width);\r\n\r\n // finally set the new presets columns (including checkbox selector if need be)\r\n this.slickGrid.setColumns(gridColumns);\r\n this.sharedService.visibleColumns = gridColumns;\r\n }\r\n }\r\n }\r\n\r\n /** Load any possible Filters Grid Presets */\r\n private loadFilterPresetsWhenDatasetInitialized() {\r\n if (this.gridOptions && !this.customDataView) {\r\n // if user entered some Filter \"presets\", we need to reflect them all in the DOM\r\n // also note that a presets of Tree Data Toggling will also call this method because Tree Data toggling does work with data filtering\r\n // (collapsing a parent will basically use Filter for hidding (aka collapsing) away the child underneat it)\r\n if (this.gridOptions.presets && (Array.isArray(this.gridOptions.presets.filters) || Array.isArray(this.gridOptions.presets?.treeData?.toggledItems))) {\r\n this.filterService.populateColumnFilterSearchTermPresets(this.gridOptions.presets?.filters || []);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * local grid, check if we need to show the Pagination\r\n * if so then also check if there's any presets and finally initialize the PaginationService\r\n * a local grid with Pagination presets will potentially have a different total of items, we'll need to get it from the DataView and update our total\r\n */\r\n private loadLocalGridPagination(dataset?: any[]) {\r\n if (this.gridOptions && this._paginationOptions) {\r\n this.totalItems = Array.isArray(dataset) ? dataset.length : 0;\r\n if (this._paginationOptions && this.dataView?.getPagingInfo) {\r\n const slickPagingInfo = this.dataView.getPagingInfo();\r\n if (slickPagingInfo?.hasOwnProperty('totalRows') && this._paginationOptions.totalItems !== slickPagingInfo.totalRows) {\r\n this.totalItems = slickPagingInfo.totalRows || 0;\r\n }\r\n }\r\n this._paginationOptions.totalItems = this.totalItems;\r\n const paginationOptions = this.setPaginationOptionsWhenPresetDefined(this.gridOptions, this._paginationOptions);\r\n this.initializePaginationService(paginationOptions);\r\n }\r\n }\r\n\r\n /** Load any Row Selections into the DataView that were presets by the user */\r\n private loadRowSelectionPresetWhenExists() {\r\n // if user entered some Row Selections \"presets\"\r\n const presets = this.gridOptions?.presets;\r\n const selectionModel = this.slickGrid?.getSelectionModel();\r\n const enableRowSelection = this.gridOptions && (this.gridOptions.enableCheckboxSelector || this.gridOptions.enableRowSelection);\r\n if (enableRowSelection && selectionModel && presets && presets.rowSelection && (Array.isArray(presets.rowSelection.gridRowIndexes) || Array.isArray(presets.rowSelection.dataContextIds))) {\r\n let dataContextIds = presets.rowSelection.dataContextIds;\r\n let gridRowIndexes = presets.rowSelection.gridRowIndexes;\r\n\r\n // maps the IDs to the Grid Rows and vice versa, the \"dataContextIds\" has precedence over the other\r\n if (Array.isArray(dataContextIds) && dataContextIds.length > 0) {\r\n gridRowIndexes = this.dataView.mapIdsToRows(dataContextIds) || [];\r\n } else if (Array.isArray(gridRowIndexes) && gridRowIndexes.length > 0) {\r\n dataContextIds = this.dataView.mapRowsToIds(gridRowIndexes) || [];\r\n }\r\n this.gridStateService.selectedRowDataContextIds = dataContextIds;\r\n\r\n // change the selected rows except UNLESS it's a Local Grid with Pagination\r\n // local Pagination uses the DataView and that also trigger a change/refresh\r\n // and we don't want to trigger 2 Grid State changes just 1\r\n if ((this._isLocalGrid && !this.gridOptions.enablePagination) || !this._isLocalGrid) {\r\n setTimeout(() => {\r\n if (this.slickGrid && Array.isArray(gridRowIndexes)) {\r\n this.slickGrid.setSelectedRows(gridRowIndexes);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n private mergeGridOptions(gridOptions: GridOption): GridOption {\r\n gridOptions.gridId = this.gridId;\r\n gridOptions.gridContainerId = `slickGridContainer-${this.gridId}`;\r\n\r\n // if we have a backendServiceApi and the enablePagination is undefined, we'll assume that we do want to see it, else get that defined value\r\n gridOptions.enablePagination = ((gridOptions.backendServiceApi && gridOptions.enablePagination === undefined) ? true : gridOptions.enablePagination) || false;\r\n\r\n // use jquery extend to deep merge & copy to avoid immutable properties being changed in GlobalGridOptions after a route change\r\n const options = $.extend(true, {}, GlobalGridOptions, this.forRootConfig, gridOptions) as GridOption;\r\n\r\n // using jQuery extend to do a deep clone has an unwanted side on objects and pageSizes but ES6 spread has other worst side effects\r\n // so we will just overwrite the pageSizes when needed, this is the only one causing issues so far.\r\n // jQuery wrote this on their docs:: On a deep extend, Object and Array are extended, but object wrappers on primitive types such as String, Boolean, and Number are not.\r\n if (options?.pagination && (gridOptions.enablePagination || gridOptions.backendServiceApi) && (this.forRootConfig.pagination || gridOptions.pagination)) {\r\n options.pagination.pageSize = gridOptions.pagination?.pageSize ?? this.forRootConfig.pagination?.pageSize ?? GlobalGridOptions.pagination!.pageSize;\r\n options.pagination.pageSizes = gridOptions.pagination?.pageSizes ?? this.forRootConfig.pagination?.pageSizes ?? GlobalGridOptions.pagination!.pageSizes;\r\n }\r\n\r\n // also make sure to show the header row if user have enabled filtering\r\n this._hideHeaderRowAfterPageLoad = (options.showHeaderRow === false);\r\n if (options.enableFiltering && !options.showHeaderRow) {\r\n options.showHeaderRow = options.enableFiltering;\r\n }\r\n\r\n // when we use Pagination on Local Grid, it doesn't seem to work without enableFiltering\r\n // so we'll enable the filtering but we'll keep the header row hidden\r\n if (options && !options.enableFiltering && options.enablePagination && this._isLocalGrid) {\r\n options.enableFiltering = true;\r\n options.showHeaderRow = false;\r\n this._hideHeaderRowAfterPageLoad = true;\r\n if (this.sharedService) {\r\n this.sharedService.hideHeaderRowAfterPageLoad = true;\r\n }\r\n }\r\n\r\n return options;\r\n }\r\n\r\n /** Pre-Register any Resource that don't require SlickGrid to be instantiated (for example RxJS Resource & RowDetail) */\r\n private preRegisterResources() {\r\n this._registeredResources = this.gridOptions.registerExternalResources || [];\r\n\r\n // Angular-Slickgrid requires RxJS, so we'll register it as the first resource\r\n this.registerRxJsResource(new RxJsResource() as RxJsFacade);\r\n\r\n if (this.gridOptions.enableRowDetailView) {\r\n this.slickRowDetailView = new SlickRowDetailView(this.angularUtilService, this.appRef, this._eventPubSubService, this.elm.nativeElement, this.rxjs);\r\n this.slickRowDetailView.create(this.columnDefinitions, this.gridOptions);\r\n this._registeredResources.push(this.slickRowDetailView);\r\n this.extensionService.addExtensionToList(ExtensionName.rowDetailView, { name: ExtensionName.rowDetailView, instance: this.slickRowDetailView });\r\n }\r\n }\r\n\r\n private registerResources() {\r\n // at this point, we consider all the registered services as external services, anything else registered afterward aren't external\r\n if (Array.isArray(this._registeredResources)) {\r\n this.sharedService.externalRegisteredResources = this._registeredResources;\r\n }\r\n\r\n // push all other Services that we want to be registered\r\n this._registeredResources.push(this.gridService, this.gridStateService);\r\n\r\n // when using Grouping/DraggableGrouping/Colspan register its Service\r\n if (this.gridOptions.createPreHeaderPanel && !this.gridOptions.enableDraggableGrouping) {\r\n this._registeredResources.push(this.groupingService);\r\n }\r\n\r\n // when using Tree Data View, register its Service\r\n if (this.gridOptions.enableTreeData) {\r\n this._registeredResources.push(this.treeDataService);\r\n }\r\n\r\n // when user enables translation, we need to translate Headers on first pass & subsequently in the bindDifferentHooks\r\n if (this.gridOptions.enableTranslate) {\r\n this.extensionService.translateColumnHeaders();\r\n }\r\n\r\n // also initialize (render) the empty warning component\r\n this.slickEmptyWarning = new SlickEmptyWarningComponent();\r\n this._registeredResources.push(this.slickEmptyWarning);\r\n\r\n // bind & initialize all Components/Services that were tagged as enabled\r\n // register all services by executing their init method and providing them with the Grid object\r\n if (Array.isArray(this._registeredResources)) {\r\n for (const resource of this._registeredResources) {\r\n if (typeof resource.init === 'function') {\r\n resource.init(this.slickGrid, this.containerService);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Register the RxJS Resource in all necessary services which uses */\r\n private registerRxJsResource(resource: RxJsFacade) {\r\n this.rxjs = resource;\r\n this.backendUtilityService.addRxJsResource(this.rxjs);\r\n this.filterFactory.addRxJsResource(this.rxjs);\r\n this.filterService.addRxJsResource(this.rxjs);\r\n this.sortService.addRxJsResource(this.rxjs);\r\n this.paginationService.addRxJsResource(this.rxjs);\r\n this.containerService.registerInstance('RxJsResource', this.rxjs);\r\n }\r\n\r\n /**\r\n * Render (or dispose) the Pagination Component, user can optionally provide False (to not show it) which will in term dispose of the Pagination,\r\n * also while disposing we can choose to omit the disposable of the Pagination Service (if we are simply toggling the Pagination, we want to keep the Service alive)\r\n * @param {Boolean} showPagination - show (new render) or not (dispose) the Pagination\r\n * @param {Boolean} shouldDisposePaginationService - when disposing the Pagination, do we also want to dispose of the Pagination Service? (defaults to True)\r\n */\r\n private renderPagination(showPagination = true) {\r\n if (this.gridOptions?.enablePagination && !this._isPaginationInitialized && showPagination) {\r\n this.slickPagination = new SlickPaginationComponent(this.paginationService, this._eventPubSubService, this.sharedService, this.translaterService);\r\n this.slickPagination.renderPagination(this.gridContainerElement as HTMLElement);\r\n this._isPaginationInitialized = true;\r\n } else if (!showPagination) {\r\n if (this.slickPagination) {\r\n this.slickPagination.dispose();\r\n }\r\n this._isPaginationInitialized = false;\r\n }\r\n }\r\n\r\n /**\r\n * Takes a flat dataset with parent/child relationship, sort it (via its tree structure) and return the sorted flat array\r\n * @param {Array<Object>} flatDatasetInput - flat dataset input\r\n * @param {Boolean} forceGridRefresh - optionally force a full grid refresh\r\n * @returns {Array<Object>} sort flat parent/child dataset\r\n */\r\n private sortTreeDataset<T>(flatDatasetInput: T[], forceGridRefresh = false): T[] {\r\n const prevDatasetLn = this._currentDatasetLength;\r\n let sortedDatasetResult;\r\n let flatDatasetOutput: any[] = [];\r\n\r\n // if the hierarchical dataset was already initialized then no need to re-convert it, we can use it directly from the shared service ref\r\n if (this._isDatasetHierarchicalInitialized && this.datasetHierarchical) {\r\n sortedDatasetResult = this.treeDataService.sortHierarchicalDataset(this.datasetHierarchical);\r\n flatDatasetOutput = sortedDatasetResult.flat;\r\n } else if (Array.isArray(flatDatasetInput) && flatDatasetInput.length > 0) {\r\n if (this.gridOptions?.treeDataOptions?.initialSort) {\r\n // else we need to first convert the flat dataset to a hierarchical dataset and then sort\r\n sortedDatasetResult = this.treeDataService.convertFlatParentChildToTreeDatasetAndSort(flatDatasetInput, this._columnDefinitions, this.gridOptions);\r\n this.sharedService.hierarchicalDataset = sortedDatasetResult.hierarchical;\r\n flatDatasetOutput = sortedDatasetResult.flat;\r\n } else {\r\n // else we assume that the user provided an array that is already sorted (user's responsability)\r\n // and so we can simply convert the array to a tree structure and we're done, no need to sort\r\n this.sharedService.hierarchicalDataset = this.treeDataService.convertFlatParentChildToTreeDataset(flatDatasetInput, this.gridOptions);\r\n flatDatasetOutput = flatDatasetInput || [];\r\n }\r\n }\r\n\r\n // if we add/remove item(s) from the dataset, we need to also refresh our tree data filters\r\n if (flatDatasetInput.length > 0 && (forceGridRefresh || flatDatasetInput.length !== prevDatasetLn)) {\r\n this.filterService.refreshTreeDataFilters(flatDatasetOutput);\r\n }\r\n\r\n return flatDatasetOutput;\r\n }\r\n\r\n /**\r\n * For convenience to the user, we provide the property \"editor\" as an Angular-Slickgrid editor complex object\r\n * however \"editor\" is used internally by SlickGrid for it's own Editor Factory\r\n * so in our lib we will swap \"editor\" and copy it into a new property called \"internalColumnEditor\"\r\n * then take back \"editor.model\" and make it the new \"editor\" so that SlickGrid Editor Factory still works\r\n */\r\n private swapInternalEditorToSlickGridFactoryEditor(columnDefinitions: Column[]) {\r\n if (columnDefinitions.some(col => `${col.id}`.includes('.'))) {\r\n console.error('[Angular-Slickgrid] Make sure that none of your Column Definition \"id\" property includes a dot in its name because that will cause some problems with the Editors. For example if your column definition \"field\" property is \"user.firstName\" then use \"firstName\" as the column \"id\".');\r\n }\r\n\r\n return columnDefinitions.map((column: Column | any) => {\r\n // on every Editor that have a \"collectionAsync\", resolve the data and assign it to the \"collection\" property\r\n if (column && column.editor && column.editor.collectionAsync) {\r\n this.loadEditorCollectionAsync(column);\r\n }\r\n return { ...column, editor: column.editor && column.editor.model, internalColumnEditor: { ...column.editor } };\r\n });\r\n }\r\n\r\n private translateColumnHeaderTitleKeys() {\r\n // translate all columns (including hidden columns)\r\n this.extensionUtility.translateItems(this.sharedService.allColumns, 'nameKey', 'name');\r\n }\r\n\r\n private translateColumnGroupKeys() {\r\n // translate all column groups (including hidden columns)\r\n this.extensionUtility.translateItems(this.sharedService.allColumns, 'columnGroupKey', 'columnGroup');\r\n }\r\n\r\n /**\r\n * Update the \"internalColumnEditor.collection\" property.\r\n * Since this is called after the async call resolves, the pointer will not be the same as the \"column\" argument passed.\r\n * Once we found the new pointer, we will reassign the \"editor\" and \"collection\" to the \"internalColumnEditor\" so it has newest collection\r\n */\r\n private updateEditorCollection<T = any>(column: Column<T>, newCollection: T[]) {\r\n (column.editor as ColumnEditor).collection = newCollection;\r\n (column.editor as ColumnEditor).disabled = false;\r\n\r\n // find the new column reference pointer & re-assign the new editor to the internalColumnEditor\r\n const columns = this.slickGrid.getColumns();\r\n if (Array.isArray(columns)) {\r\n const columnRef = columns.find((col: Column) => col.id === column.id);\r\n if (columnRef) {\r\n columnRef.internalColumnEditor = column.editor as ColumnEditor;\r\n }\r\n }\r\n\r\n // get current Editor, remove it from the DOM then re-enable it and re-render it with the new collection.\r\n const currentEditor = this.slickGrid.getCellEditor() as AutoCompleteEditor | SelectEditor;\r\n if (currentEditor?.disable && currentEditor?.renderDomElement) {\r\n currentEditor.destroy();\r\n currentEditor.disable(false);\r\n currentEditor.renderDomElement(newCollection);\r\n }\r\n }\r\n}\r\n","<div id=\"slickGridContainer-{{gridId}}\" class=\"gridPane\">\r\n <div attr.id='{{gridId}}' class=\"slickgrid-container\" style=\"width: 100%\">\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\n\r\nimport { AngularSlickgridComponent } from './../components/angular-slickgrid.component';\r\nimport { GridOption } from './../models/gridOption.interface';\r\nimport { AngularUtilService } from '../services/angularUtil.service';\r\nimport { BsDropDownService } from '../services/bsDropdown.service';\r\nimport { ContainerService } from '../services/container.service';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n TranslateModule\r\n ],\r\n declarations: [\r\n AngularSlickgridComponent,\r\n ],\r\n exports: [\r\n AngularSlickgridComponent,\r\n ]\r\n})\r\nexport class AngularSlickgridModule {\r\n static forRoot(config: GridOption = {}): ModuleWithProviders<AngularSlickgridModule> {\r\n return {\r\n ngModule: AngularSlickgridModule,\r\n providers: [\r\n { provide: 'config', useValue: config },\r\n { provide: 'externalService', useValue: null },\r\n AngularUtilService,\r\n BsDropDownService,\r\n ContainerService,\r\n ]\r\n };\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.AngularUtilService","UniversalSlickRowDetailView","SlickgridConfig","i2.ContainerService","i3","i4.TranslaterService"],"mappings":"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"}
|