From e782a835d42c088f78eb0782ac538490594744fb Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Sat, 26 Apr 2025 17:19:26 -0400 Subject: [PATCH] feat(filter): add `collectionLazy` callback to Column Filter --- docs/README.md | 2 +- .../editors/select-dropdown-editor.md | 2 +- .../filters/select-filter.md | 37 ++++-- package.json | 26 ++-- src/examples/slickgrid/Example33.tsx | 45 +++++-- src/styles.scss | 4 + test/cypress/e2e/example33.cy.ts | 75 ++++++----- yarn.lock | 118 +++++++++--------- 8 files changed, 185 insertions(+), 124 deletions(-) diff --git a/docs/README.md b/docs/README.md index a1e7e58..ead538f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,4 +2,4 @@ The [`docs`](https://github.com/ghiscoding/slickgrid-react/tree/master/docs) folder of Slickgrid-React is the one-stop-shop for all project related documentation. -Feel free to contribution documentation fixes by editing any of the markdown files in the [`docs`](https://github.com/ghiscoding/slickgrid-react/tree/master/docs) folder. +Feel free to contribute documentation fixes by editing any of the markdown files in the [`docs`](https://github.com/ghiscoding/slickgrid-react/tree/master/docs) folder. diff --git a/docs/column-functionalities/editors/select-dropdown-editor.md b/docs/column-functionalities/editors/select-dropdown-editor.md index 3a629d1..17b79ee 100644 --- a/docs/column-functionalities/editors/select-dropdown-editor.md +++ b/docs/column-functionalities/editors/select-dropdown-editor.md @@ -173,7 +173,7 @@ const columnDefinitions = [ ``` ### Collection Watch -Sometime you wish that whenever you change your filter collection, you'd like the filter to be updated, it won't do that by default but you could use `enableCollectionWatch` for that purpose to add collection observers and re-render the Filter DOM element whenever the collection changes. Also note that using `collectionAsync` will automatically watch for changes, so there's no need to enable this flag for that particular use case. +Sometime you wish that whenever you make a change in your filter collection, you'd like the filter to be updated but it won't do that by default. You could use `enableCollectionWatch` for that purpose which will add a collection observers and re-render the Filter DOM element whenever the collection changes. Also note that using `collectionAsync` will automatically watch for changes, so there's no need to enable this flag for that particular use case. ```typescript const columnDefinitions = [ diff --git a/docs/column-functionalities/filters/select-filter.md b/docs/column-functionalities/filters/select-filter.md index f8f9c00..a6a997b 100644 --- a/docs/column-functionalities/filters/select-filter.md +++ b/docs/column-functionalities/filters/select-filter.md @@ -6,15 +6,16 @@ - [How to add Translation](#how-to-add-translation) - [How to filter empty values](#how-to-filter-empty-values) - Collection Options - - [Add Blank Entry](#collection-add-blank-entry) - - [Add Custom Entry at Beginning/End of Collection](#collection-add-custom-entry-at-the-beginningend-of-the-collection) - - [Custom Structure](#custom-structure-keylabel-pair) - - [Custom Structure with Translation](#custom-structure-with-translation) - - [Collection filterBy/sortBy](#collection-filterbysortby) - - [Collection Label Prefix/Suffix](#collection-label-prefixsuffix) - - [Collection Label Render HTML](#collection-label-render-html) - - [Collection Async Load](#collection-async-load) - - [Collection Watch](#collection-watch) + - [Add Blank Entry](#collection-add-blank-entry) + - [Add Custom Entry at Beginning/End of Collection](#collection-add-custom-entry-at-the-beginningend-of-the-collection) + - [Custom Structure](#custom-structure-keylabel-pair) + - [Custom Structure with Translation](#custom-structure-with-translation) + - [Collection filterBy/sortBy](#collection-filterbysortby) + - [Collection Label Prefix/Suffix](#collection-label-prefixsuffix) + - [Collection Label Render HTML](#collection-label-render-html) + - [Collection Async Load](#collection-async-load) + - [Collection Lazy Load](#collection-lazy-load) + - [Collection Watch](#collection-watch) - [`multiple-select.js` Options](#multiple-selectjs-options) - [Filter Options (`MultipleSelectOption` interface)](#filter-options-multipleselectoption-interface) - [Display shorter selected label text](#display-shorter-selected-label-text) @@ -563,6 +564,24 @@ function addItem() { } ``` +### Collection Lazy Load +In some cases, you might have a grid with a lot of columns and loading the collection only after opening the select dropdown (or never in some cases) might help speeding up the initial grid loading. So for that use case, defining a `collectionLazy` callback can help. + +#### Load the collection through an Http callback + +```ts +const columnDefinitions = [ + { + id: 'prerequisites', name: 'Prerequisites', field: 'prerequisites', + filterable: true, + filter: { + collectionLazy: (col: Column) => this.http.fetch('api/data/pre-requisites'), + model: Filters.multipleSelect, + } + } +]; +``` + ### Collection Watch We can enable the collection watch via the column filter `enableCollectionWatch` flag, or if you use a `collectionAsync` then this will be enabled by default. The collection watch will basically watch for any changes applied to the collection (any mutation changes like `push`, `pop`, `unshift`, ...) and will also watch for the `filter.collection` array replace, when any changes happens then it will re-render the Select Filter with the updated collection list. diff --git a/package.json b/package.json index 1ac9d79..3341899 100644 --- a/package.json +++ b/package.json @@ -81,12 +81,12 @@ "/src/slickgrid-react" ], "dependencies": { - "@slickgrid-universal/common": "~5.13.4", - "@slickgrid-universal/custom-footer-component": "~5.13.4", - "@slickgrid-universal/empty-warning-component": "~5.13.4", + "@slickgrid-universal/common": "~5.14.0", + "@slickgrid-universal/custom-footer-component": "~5.14.0", + "@slickgrid-universal/empty-warning-component": "~5.14.0", "@slickgrid-universal/event-pub-sub": "~5.13.0", - "@slickgrid-universal/pagination-component": "~5.13.4", - "@slickgrid-universal/row-detail-view-plugin": "~5.13.4", + "@slickgrid-universal/pagination-component": "~5.14.0", + "@slickgrid-universal/row-detail-view-plugin": "~5.14.0", "dequal": "^2.0.3", "i18next": "^23.16.8", "sortablejs": "^1.15.6" @@ -101,13 +101,13 @@ "@formkit/tempo": "^0.1.2", "@popperjs/core": "^2.11.8", "@release-it/conventional-changelog": "^10.0.0", - "@slickgrid-universal/composite-editor-component": "~5.13.4", - "@slickgrid-universal/custom-tooltip-plugin": "~5.13.4", - "@slickgrid-universal/excel-export": "~5.13.4", - "@slickgrid-universal/graphql": "~5.13.4", - "@slickgrid-universal/odata": "~5.13.4", - "@slickgrid-universal/rxjs-observable": "~5.13.4", - "@slickgrid-universal/text-export": "~5.13.4", + "@slickgrid-universal/composite-editor-component": "~5.14.0", + "@slickgrid-universal/custom-tooltip-plugin": "~5.14.0", + "@slickgrid-universal/excel-export": "~5.14.0", + "@slickgrid-universal/graphql": "~5.14.0", + "@slickgrid-universal/odata": "~5.14.0", + "@slickgrid-universal/rxjs-observable": "~5.14.0", + "@slickgrid-universal/text-export": "~5.14.0", "@types/fnando__sparkline": "^0.3.7", "@types/i18next-xhr-backend": "^1.4.2", "@types/node": "^22.14.0", @@ -155,4 +155,4 @@ "resolutions": { "caniuse-lite": "1.0.30001707" } -} +} \ No newline at end of file diff --git a/src/examples/slickgrid/Example33.tsx b/src/examples/slickgrid/Example33.tsx index a243c4d..e4e97c2 100644 --- a/src/examples/slickgrid/Example33.tsx +++ b/src/examples/slickgrid/Example33.tsx @@ -21,7 +21,7 @@ import React, { useEffect, useRef, useState } from 'react'; import './example33.scss'; const FAKE_SERVER_DELAY = 500; -const NB_ITEMS = 500; +const NB_ITEMS = 1000; const Example33: React.FC = () => { const [columnDefinitions, setColumnDefinitions] = useState([]); @@ -30,6 +30,7 @@ const Example33: React.FC = () => { const [serverWaitDelay, setServerWaitDelay] = useState(FAKE_SERVER_DELAY); const [editCommandQueue] = useState([]); const [hideSubTitle, setHideSubTitle] = useState(false); + const [showLazyLoading, setShowLazyLoading] = useState(false); const serverWaitDelayRef = useRef(serverWaitDelay); const reactGridRef = useRef(null); @@ -240,18 +241,32 @@ const Example33: React.FC = () => { }, filter: { // collectionAsync: fetch(SAMPLE_COLLECTION_DATA_URL), - collectionAsync: new Promise((resolve) => { - window.setTimeout(() => { - resolve(Array.from(Array(dataset?.length).keys()).map(k => ({ value: k, label: `Task ${k}` }))); + // collectionAsync: new Promise((resolve) => { + // window.setTimeout(() => { + // resolve(Array.from(Array(dataset.value?.length).keys()).map((k) => ({ value: k, label: `Task ${k}` }))); + // }); + // }), + collectionLazy: () => { + setShowLazyLoading(true); + + return new Promise((resolve) => { + window.setTimeout(() => { + setShowLazyLoading(false); + resolve(Array.from(Array((dataset || []).length).keys()).map((k) => ({ value: k, label: `Task ${k}` }))); + }, serverWaitDelayRef.current); }); - }), + }, + // onInstantiated: (msSelect) => console.log('ms-select instance', msSelect), customStructure: { label: 'label', value: 'value', labelPrefix: 'prefix', }, collectionOptions: { - separatorBetweenTextLabels: ' ' + separatorBetweenTextLabels: ' ', + }, + filterOptions: { + minHeight: 70, }, model: Filters.multipleSelect, operator: OperatorType.inContains, @@ -519,13 +534,17 @@ const Example33: React.FC = () => { - -
- - handleServerDelayInputChange($event)} - /> +
+
+ + handleServerDelayInputChange($event)} + /> +
+
+ Lazy loading collection... +
diff --git a/src/styles.scss b/src/styles.scss index 06c22cf..db1a6ca 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -43,6 +43,10 @@ $primary-color: #0e6cfa; display: none; } +.invisible { + opacity: 0; +} + .btn-icon { display: inline-flex; align-items: center; diff --git a/test/cypress/e2e/example33.cy.ts b/test/cypress/e2e/example33.cy.ts index 3fcbe11..71ad1d0 100644 --- a/test/cypress/e2e/example33.cy.ts +++ b/test/cypress/e2e/example33.cy.ts @@ -1,5 +1,18 @@ describe('Example 33 - Regular & Custom Tooltips', () => { - const titles = ['', 'Title', 'Duration', 'Description', 'Description 2', 'Cost', '% Complete', 'Start', 'Finish', 'Effort Driven', 'Prerequisites', 'Action']; + const titles = [ + '', + 'Title', + 'Duration', + 'Description', + 'Description 2', + 'Cost', + '% Complete', + 'Start', + 'Finish', + 'Effort Driven', + 'Prerequisites', + 'Action', + ]; const GRID_ROW_HEIGHT = 33; it('should display Example title', () => { @@ -15,7 +28,7 @@ describe('Example 33 - Regular & Custom Tooltips', () => { }); it('should change server delay to 10ms for faster testing', () => { - cy.get('[data-test="server-delay"]').type('{backspace}{backspace}{backspace}10'); + cy.get('[data-test="server-delay"]').clear().type('50'); }); it('should mouse over 1st row checkbox column and NOT expect any tooltip to show since it is disabled on that column', () => { @@ -98,8 +111,11 @@ describe('Example 33 - Regular & Custom Tooltips', () => { cy.get('@desc6-cell').trigger('mouseover'); cy.get('.slick-custom-tooltip').should('be.visible'); - cy.get('.slick-custom-tooltip').should('not.contain', `regular tooltip (from title attribute)\nTask 6 cell value:\n\nThis is a sample task description.\nIt can be multiline\n\nAnother line...`); - cy.get('.slick-custom-tooltip').should('contain', `This is a sample task description.\nIt can be multiline\n\nAnother line...`); + cy.get('.slick-custom-tooltip').should( + 'not.contain', + 'regular tooltip (from title attribute)\nTask 6 cell value:\n\nThis is a sample task description.\nIt can be multiline\n\nAnother line...' + ); + cy.get('.slick-custom-tooltip').should('contain', 'This is a sample task description.\nIt can be multiline\n\nAnother line...'); cy.get('@desc6-cell').trigger('mouseout'); }); @@ -110,7 +126,10 @@ describe('Example 33 - Regular & Custom Tooltips', () => { cy.get('@desc2-5-cell').trigger('mouseover'); cy.get('.slick-custom-tooltip').should('be.visible'); - cy.get('.slick-custom-tooltip').should('contain', `regular tooltip (from title attribute)\nTask 6 cell value:\n\nThis is a sample task description.\nIt can be multiline\n\nAnother line...`); + cy.get('.slick-custom-tooltip').should( + 'contain', + 'regular tooltip (from title attribute)\nTask 6 cell value:\n\nThis is a sample task description.\nIt can be multiline\n\nAnother line...' + ); cy.get('@desc2-5-cell').trigger('mouseout'); }); @@ -189,19 +208,30 @@ describe('Example 33 - Regular & Custom Tooltips', () => { cy.get('@finish-filter').trigger('mouseout'); }); + it('should open PreRequisite dropdown and expect it be lazily loaded', () => { + cy.get('.slick-headerrow-columns .slick-headerrow-column:nth(10)').as('checkbox10-header'); + cy.get('@checkbox10-header').click(); + cy.get('[data-test="alert-lazy"]').should('be.visible'); + cy.wait(50); + cy.get('@checkbox10-header').click(); + cy.get('[data-test="alert-lazy"]').should('not.be.visible'); + }); + it('should mouse over header-row (filter) Prerequisite column and expect to see tooltip of selected filter options', () => { - cy.get(`.slick-headerrow-columns .slick-headerrow-column:nth(10)`).as('checkbox10-header'); + cy.get('.slick-headerrow-columns .slick-headerrow-column:nth(10)').as('checkbox10-header'); cy.get('@checkbox10-header').trigger('mouseover'); - cy.get('.filter-prerequisites .ms-choice span').contains('15 of 500 selected'); + cy.get('.filter-prerequisites .ms-choice span').contains('15 of 1000 selected'); cy.get('.slick-custom-tooltip').should('be.visible'); - cy.get('.slick-custom-tooltip').contains('Task 1, Task 3, Task 5, Task 7, Task 9, Task 12, Task 15, Task 18, Task 21, Task 25, Task 28, Task 29, Task 30, Task 32, Task 34'); + cy.get('.slick-custom-tooltip').contains( + 'Task 1, Task 3, Task 5, Task 7, Task 9, Task 12, Task 15, Task 18, Task 21, Task 25, Task 28, Task 29, Task 30, Task 32, Task 34' + ); cy.get('@checkbox10-header').trigger('mouseout'); }); it('should mouse over header title on 1st column with checkbox and NOT expect any tooltip to show since it is disabled on that column', () => { - cy.get(`.slick-header-columns .slick-header-column:nth(0)`).as('checkbox-header'); + cy.get('.slick-header-columns .slick-header-column:nth(0)').as('checkbox-header'); cy.get('@checkbox-header').trigger('mouseover'); cy.get('.slick-custom-tooltip').should('not.exist'); @@ -209,7 +239,7 @@ describe('Example 33 - Regular & Custom Tooltips', () => { }); it('should mouse over header title on 2nd column with Title name and expect a tooltip to show rendered from an headerFormatter', () => { - cy.get(`.slick-header-columns .slick-header-column:nth(1)`).as('checkbox0-header'); + cy.get('.slick-header-columns .slick-header-column:nth(1)').as('checkbox0-header'); cy.get('@checkbox0-header').trigger('mouseover'); cy.get('.slick-custom-tooltip').should('be.visible'); @@ -222,7 +252,7 @@ describe('Example 33 - Regular & Custom Tooltips', () => { }); it('should mouse over header title on 2nd column with Finish name and NOT expect any tooltip to show since it is disabled on that column', () => { - cy.get(`.slick-header-columns .slick-header-column:nth(8)`).as('finish-header'); + cy.get('.slick-header-columns .slick-header-column:nth(8)').as('finish-header'); cy.get('@finish-header').trigger('mouseover'); cy.get('.slick-custom-tooltip').should('not.exist'); @@ -231,27 +261,16 @@ describe('Example 33 - Regular & Custom Tooltips', () => { it('should click Prerequisite editor of 1st row (Task 2) and expect Task1 & 2 to be selected in the multiple-select drop', () => { cy.get(`[style="top: ${GRID_ROW_HEIGHT * 0}px;"] > .slick-cell:nth(10)`).as('prereq-cell'); - cy.get('@prereq-cell') - .should('contain', 'Task 2, Task 1') - .click(); + cy.get('@prereq-cell').should('contain', 'Task 2, Task 1').click(); - cy.get('div.ms-drop[data-name=editor-prerequisites]') - .find('li.selected') - .should('have.length', 2); + cy.get('div.ms-drop[data-name=editor-prerequisites]').find('li.selected').should('have.length', 2); - cy.get('div.ms-drop[data-name=editor-prerequisites]') - .find('li.selected:nth(0) span') - .should('contain', 'Task 1'); + cy.get('div.ms-drop[data-name=editor-prerequisites]').find('li.selected:nth(0) span').should('contain', 'Task 1'); - cy.get('div.ms-drop[data-name=editor-prerequisites]') - .find('li.selected:nth(1) span') - .should('contain', 'Task 2'); + cy.get('div.ms-drop[data-name=editor-prerequisites]').find('li.selected:nth(1) span').should('contain', 'Task 2'); - cy.get('div.ms-drop[data-name=editor-prerequisites]') - .find('.ms-ok-button') - .click(); + cy.get('div.ms-drop[data-name=editor-prerequisites]').find('.ms-ok-button').click(); - cy.get('div.ms-drop[data-name=editor-prerequisites]') - .should('not.exist'); + cy.get('div.ms-drop[data-name=editor-prerequisites]').should('not.exist'); }); }); diff --git a/yarn.lock b/yarn.lock index 79afc9c..e90b340 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1005,10 +1005,10 @@ resolved "https://registry.yarnpkg.com/@slickgrid-universal/binding/-/binding-5.12.2.tgz#102dc7db985dc3c52cfd13a176153f385f15a5b0" integrity sha512-o7dTmmW4DVBZi01VQHjO/cIJEH5RNz+rIrnQKwldTRoKC05vKOQTF/vuQAqTkhI7YHzFaspfvdy92oagEt5niw== -"@slickgrid-universal/common@5.13.4", "@slickgrid-universal/common@~5.13.4": - version "5.13.4" - resolved "https://registry.yarnpkg.com/@slickgrid-universal/common/-/common-5.13.4.tgz#95bf278cbb5b5fb5b8d36c8336a35f106b4e1b2f" - integrity sha512-R7CRN3rVLdlPBCNlHs6MGSEFjldFdWrOAWZocDiik2gglI4gXMtaq2YMwmyRFBLlRXciG/92sRARuUXrf9kPmA== +"@slickgrid-universal/common@5.14.0", "@slickgrid-universal/common@~5.14.0": + version "5.14.0" + resolved "https://registry.yarnpkg.com/@slickgrid-universal/common/-/common-5.14.0.tgz#acee0a082cdf8c4c691a5cdb3a6548382b174ebb" + integrity sha512-Mme6d5G+lUqXCt0VOrzSscOJ1oYRSEIOC1v3Gdg+P4rQK0Hhgl0lSAzsGQX6yBrIw7rOX1VN+OZ9zoEqYidILA== dependencies: "@excel-builder-vanilla/types" "^3.1.0" "@formkit/tempo" "^0.1.2" @@ -1024,38 +1024,38 @@ un-flatten-tree "^2.0.12" vanilla-calendar-pro "^2.9.10" -"@slickgrid-universal/composite-editor-component@~5.13.4": - version "5.13.4" - resolved "https://registry.yarnpkg.com/@slickgrid-universal/composite-editor-component/-/composite-editor-component-5.13.4.tgz#ce21d3a8ed1d2e3d78753c89a70ca4b7205e6cf6" - integrity sha512-9TxUVWcHoMuuhdorS4Ef4L3H2ZOgZjVvHduRJLmsUjywxkWBz0A+wBUSELD92yVCeqXP7v05ih5xpbhXD5RWDw== +"@slickgrid-universal/composite-editor-component@~5.14.0": + version "5.14.0" + resolved "https://registry.yarnpkg.com/@slickgrid-universal/composite-editor-component/-/composite-editor-component-5.14.0.tgz#bceee64c63aedcf7bfa6125e9ee0a4653ed8904f" + integrity sha512-oE30MbN2oZ7H6+HFvwuIyokgAotx0f71hBqAGReXLRCBB2E1FavN3SlZ4NgUauviWX/EAsHAT/6CQ3KzKlXH+w== dependencies: "@slickgrid-universal/binding" "5.12.2" - "@slickgrid-universal/common" "5.13.4" + "@slickgrid-universal/common" "5.14.0" "@slickgrid-universal/utils" "5.12.0" -"@slickgrid-universal/custom-footer-component@~5.13.4": - version "5.13.4" - resolved "https://registry.yarnpkg.com/@slickgrid-universal/custom-footer-component/-/custom-footer-component-5.13.4.tgz#4980cf1d24d5665f622a7803334a51641b84433e" - integrity sha512-bunXusxTS9xldas3da2zWMK6TRVKmqiMfvWWhQFdJVdASTLzxkCGJ08ZZQNEjENGMSnDdZsfCwELU7Ec/5mkRw== +"@slickgrid-universal/custom-footer-component@~5.14.0": + version "5.14.0" + resolved "https://registry.yarnpkg.com/@slickgrid-universal/custom-footer-component/-/custom-footer-component-5.14.0.tgz#3309db744f807b3b7c676d3f0f7cc78833a0a709" + integrity sha512-4Fr5F+40KF15rI0VixWdNk4VSvjnsSI5DVqSanrmTCNfntJ7sYQ+UBF/LIQMqj99GMkztzPLOdaniFyABk2+Wg== dependencies: "@formkit/tempo" "^0.1.2" "@slickgrid-universal/binding" "5.12.2" - "@slickgrid-universal/common" "5.13.4" + "@slickgrid-universal/common" "5.14.0" -"@slickgrid-universal/custom-tooltip-plugin@~5.13.4": - version "5.13.4" - resolved "https://registry.yarnpkg.com/@slickgrid-universal/custom-tooltip-plugin/-/custom-tooltip-plugin-5.13.4.tgz#ce1492e0344a3bcb67ef96170f10c564d5b3ee12" - integrity sha512-2pMfflP25fpjZVp84gN8+ZogvaezJSPcUyCLu42qwrn4hGLvqDAmqR35Yj5HymTXlroYoNSIqr/TQdVi8TsKgA== +"@slickgrid-universal/custom-tooltip-plugin@~5.14.0": + version "5.14.0" + resolved "https://registry.yarnpkg.com/@slickgrid-universal/custom-tooltip-plugin/-/custom-tooltip-plugin-5.14.0.tgz#b6806f1dc7386ecdd80579c1fc01f4a9f0f33674" + integrity sha512-K5zocRcCDLSixbpIbCKlARyziTQPEWgd/sPRfy9afbFErORo/rENLUBl2wdNy8K+tnApgB6RIvCSXCSXoudaNA== dependencies: - "@slickgrid-universal/common" "5.13.4" + "@slickgrid-universal/common" "5.14.0" "@slickgrid-universal/utils" "5.12.0" -"@slickgrid-universal/empty-warning-component@~5.13.4": - version "5.13.4" - resolved "https://registry.yarnpkg.com/@slickgrid-universal/empty-warning-component/-/empty-warning-component-5.13.4.tgz#552299a8430c3d5aa969b96d1b1c1645fa0ce717" - integrity sha512-5cB3Ve80BmcScvSRLFLUpBJuPUPckg5bE60hXyR0awA/zqhD6DO9YQpQvkVojdA8PSVb3o7ieprMuwhqJ3I1pQ== +"@slickgrid-universal/empty-warning-component@~5.14.0": + version "5.14.0" + resolved "https://registry.yarnpkg.com/@slickgrid-universal/empty-warning-component/-/empty-warning-component-5.14.0.tgz#8c82f1e9df514797aec07b62d5023e9048ad67e5" + integrity sha512-RaEBZ5Wg24SkSylKpCbfduC9d9uDaMv7KusCLXvws7z2V4nCoAIBZdb694E6lVBXsZu3UMPZMRw5QBukZQJs9g== dependencies: - "@slickgrid-universal/common" "5.13.4" + "@slickgrid-universal/common" "5.14.0" "@slickgrid-universal/event-pub-sub@5.13.0", "@slickgrid-universal/event-pub-sub@~5.13.0": version "5.13.0" @@ -1064,61 +1064,61 @@ dependencies: "@slickgrid-universal/utils" "5.12.0" -"@slickgrid-universal/excel-export@~5.13.4": - version "5.13.4" - resolved "https://registry.yarnpkg.com/@slickgrid-universal/excel-export/-/excel-export-5.13.4.tgz#e252004d189a5273e3a7019f78d047a6e9c8df36" - integrity sha512-/TzsUz81/Q/IDvg+XNhlcPbwzZXUMG2ci403ZL17tzpOjm8LPztqXwUjFUL77361JGLF0/Sc2LsR3HaTSUVSMQ== +"@slickgrid-universal/excel-export@~5.14.0": + version "5.14.0" + resolved "https://registry.yarnpkg.com/@slickgrid-universal/excel-export/-/excel-export-5.14.0.tgz#5ef360c70f6106221e414b5f0797e09c073c260d" + integrity sha512-CTqWaj7wuWZDKgAiF3qVS3Ejb6cunDNdRrrLOoBmi6qGMu8vwvCna9RoTH15d5MSqoDJUSD/YWyO+iGTYOJQvA== dependencies: - "@slickgrid-universal/common" "5.13.4" + "@slickgrid-universal/common" "5.14.0" "@slickgrid-universal/utils" "5.12.0" excel-builder-vanilla "^3.1.0" -"@slickgrid-universal/graphql@~5.13.4": - version "5.13.4" - resolved "https://registry.yarnpkg.com/@slickgrid-universal/graphql/-/graphql-5.13.4.tgz#6ddda7bc80276a2f684a52d594e714c62e878fb3" - integrity sha512-WImxKwR1Td/lR97UVmZe7uTSgfPYFOT6FYyXjePRfuOE1GKXgRUpM24Urz66ytjRau8imZR3uWJ32XoX23pICw== +"@slickgrid-universal/graphql@~5.14.0": + version "5.14.0" + resolved "https://registry.yarnpkg.com/@slickgrid-universal/graphql/-/graphql-5.14.0.tgz#4eb0f53a716ee77e101a5f20749aa787b13fb799" + integrity sha512-mkq8kev6jrLdYWbHviiHocTjHUKmmf+GDYWo0vsOcyhEyZf9KiQPhDjUJ+QlpujJixHNsAJKRuQeLByvoQiapQ== dependencies: - "@slickgrid-universal/common" "5.13.4" + "@slickgrid-universal/common" "5.14.0" "@slickgrid-universal/utils" "5.12.0" -"@slickgrid-universal/odata@~5.13.4": - version "5.13.4" - resolved "https://registry.yarnpkg.com/@slickgrid-universal/odata/-/odata-5.13.4.tgz#e81f33ca7a532475102301f24f3901dc66a444b4" - integrity sha512-WH5FeuBru5PHZmQn8UbvBrXh6AUXySZ6oT4S6stQbvGAmZZS8jQlLXKjEorldH9nvu8gjvv/+9vcNF2Hg2w8OA== +"@slickgrid-universal/odata@~5.14.0": + version "5.14.0" + resolved "https://registry.yarnpkg.com/@slickgrid-universal/odata/-/odata-5.14.0.tgz#74a05b7f556d9c286759d15edf913c7d3cb9e1ea" + integrity sha512-HQOcvhLNlOYUcMkYgAGXsF5OWcHCaWsGknbVV2kMMXAKxCjMPQyHm246LkJEUX7hlSMKCBBbHHXmjen+vTpzNg== dependencies: - "@slickgrid-universal/common" "5.13.4" + "@slickgrid-universal/common" "5.14.0" "@slickgrid-universal/utils" "5.12.0" -"@slickgrid-universal/pagination-component@~5.13.4": - version "5.13.4" - resolved "https://registry.yarnpkg.com/@slickgrid-universal/pagination-component/-/pagination-component-5.13.4.tgz#07d29046b2e6399a7fe163b9dbf108fec9ecd6a9" - integrity sha512-FbeR31l4cdjaHTIIEEXKvROiBivRy2oHvsKY1DngrW1T6EucRLhguLkVwRlPACpe2tnb/varls3bbh2UD2VDTA== +"@slickgrid-universal/pagination-component@~5.14.0": + version "5.14.0" + resolved "https://registry.yarnpkg.com/@slickgrid-universal/pagination-component/-/pagination-component-5.14.0.tgz#9caabcfb68153226f2f0dd95828d95f9c906d242" + integrity sha512-+HrGGdsnjYcEeT4xB6trCBvOgNHv847X58ccpCYORxXmLIDUmToCNuN+lYvCKvFQh1on3GPpy0v+6A+qZrmLbQ== dependencies: "@slickgrid-universal/binding" "5.12.2" - "@slickgrid-universal/common" "5.13.4" + "@slickgrid-universal/common" "5.14.0" -"@slickgrid-universal/row-detail-view-plugin@~5.13.4": - version "5.13.4" - resolved "https://registry.yarnpkg.com/@slickgrid-universal/row-detail-view-plugin/-/row-detail-view-plugin-5.13.4.tgz#f8efd5ad794027ad5f3f073b202cf0472c75d651" - integrity sha512-6+ALm+RYrEXSvLV3WNIqjyvsN6/Yno8s953SmrdKDR0UDF2HV4DYBo7K4tMH6Up4SwEMXR6wrtHsHJCuN4/VJQ== +"@slickgrid-universal/row-detail-view-plugin@~5.14.0": + version "5.14.0" + resolved "https://registry.yarnpkg.com/@slickgrid-universal/row-detail-view-plugin/-/row-detail-view-plugin-5.14.0.tgz#00bb5d87b3383ada85d5e804be62d5d89ef991cb" + integrity sha512-xyEr0ucwchqAshuidKhcBPDrw/jwtGxUbQJg28W1LiMD+vQbsF5LlGiIB53lfBGniC34lHWiX1B/RI3Z9z0kXA== dependencies: - "@slickgrid-universal/common" "5.13.4" + "@slickgrid-universal/common" "5.14.0" "@slickgrid-universal/utils" "5.12.0" -"@slickgrid-universal/rxjs-observable@~5.13.4": - version "5.13.4" - resolved "https://registry.yarnpkg.com/@slickgrid-universal/rxjs-observable/-/rxjs-observable-5.13.4.tgz#f93d27cb71f77eac9f554a444f523f8d1e92f408" - integrity sha512-vKp20VY2CN0Xy5zAuepa8Y+2vUFKkxUsiKdGm83qTifilubT8yA7n1kpw/UaTRyw4TqYe+klBSogRyIxkfqofw== +"@slickgrid-universal/rxjs-observable@~5.14.0": + version "5.14.0" + resolved "https://registry.yarnpkg.com/@slickgrid-universal/rxjs-observable/-/rxjs-observable-5.14.0.tgz#91b17dc147604d0848b9d7b3fc4b23ba1f2b3c33" + integrity sha512-RA5CiFicA0P8IUOLBJjmkCZNJ5Qzfwk8NKNXfh0RSFKrr53386m/59XYh2pmDt65YmgGbpu5iTZ1qgDhUMiKoA== dependencies: - "@slickgrid-universal/common" "5.13.4" + "@slickgrid-universal/common" "5.14.0" rxjs "^7.8.2" -"@slickgrid-universal/text-export@~5.13.4": - version "5.13.4" - resolved "https://registry.yarnpkg.com/@slickgrid-universal/text-export/-/text-export-5.13.4.tgz#b43ce3c9a85c057b9e46f27ceccabd28591221d3" - integrity sha512-7vW9+CODvgwKOXq09JcDrazbY1Rz/3ldXsm/NbsgL8uv0M1/QqjCcRMjlk5CAxnC+zVuf1t6kJkcR0CB7CnGew== +"@slickgrid-universal/text-export@~5.14.0": + version "5.14.0" + resolved "https://registry.yarnpkg.com/@slickgrid-universal/text-export/-/text-export-5.14.0.tgz#d10c25e129f7f2bdfd47f132c2d1118240f2d157" + integrity sha512-1zzVaGIWtAaFephZEIUNWZqIoVS4XOdcHvvRIR4Q1wuzSok6+uK1TN7z4zDT5/vh22dKbMPuNb6eNPPOOZWZLg== dependencies: - "@slickgrid-universal/common" "5.13.4" + "@slickgrid-universal/common" "5.14.0" "@slickgrid-universal/utils" "5.12.0" text-encoding-utf-8 "^1.0.2"