Skip to content

Commit f80eb70

Browse files
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into 26_1_WIP_check_ng22
# Conflicts: # pnpm-lock.yaml # pnpm-workspace.yaml
2 parents ee18c3b + bef91cc commit f80eb70

24 files changed

Lines changed: 2365 additions & 2876 deletions

File tree

.github/workflows/build_all.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,10 @@ jobs:
109109
working-directory: ./e2e/devextreme-bundler
110110
run: |
111111
pnpm install --filter devextreme-bundler-test --frozen-lockfile
112-
pnpm add --filter devextreme-bundler-test ./devextreme.tgz
112+
pnpm add --ignore-workspace --allow-build=core-js --allow-build=inferno ./devextreme.tgz
113113
114114
- name: Build bundle
115115
working-directory: ./e2e/devextreme-bundler
116116
run: |
117-
pnpm exec devextreme-bundler-init custom-bundle
118-
pnpm exec devextreme-bundler custom-bundle
117+
./node_modules/.bin/devextreme-bundler-init custom-bundle
118+
./node_modules/.bin/devextreme-bundler custom-bundle

.github/workflows/visual-tests-demos.yml

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ jobs:
233233

234234
- name: Install tgz
235235
working-directory: apps/demos
236-
run: pnpm add ../../devextreme-installer.tgz ../../devextreme-dist-installer.tgz ../../devextreme-react-installer.tgz ../../devextreme-vue-installer.tgz ../../devextreme-angular-installer.tgz
236+
run: pnpm add --ignore-workspace --allow-build=core-js --allow-build=inferno devextreme-aspnet-data@5.1.0 devextreme-aspnet-data-nojquery@5.1.0 ../../devextreme-installer.tgz ../../devextreme-dist-installer.tgz ../../devextreme-react-installer.tgz ../../devextreme-vue-installer.tgz ../../devextreme-angular-installer.tgz && rm -f pnpm-workspace.yaml pnpm-lock.yaml
237237

238238
# - name: Build wrappers
239239
# run: pnpm exec nx run-many -t pack -p devextreme-angular devextreme-react devetreme-vue
@@ -304,7 +304,8 @@ jobs:
304304
run: pnpm install --frozen-lockfile
305305

306306
- name: Install tgz
307-
run: pnpm add -w ./devextreme-installer.tgz ./devextreme-dist-installer.tgz ./devextreme-react-installer.tgz ./devextreme-vue-installer.tgz ./devextreme-angular-installer.tgz
307+
working-directory: apps/demos
308+
run: pnpm add --ignore-workspace --allow-build=core-js --allow-build=inferno devextreme-aspnet-data@5.1.0 devextreme-aspnet-data-nojquery@5.1.0 ../../devextreme-installer.tgz ../../devextreme-dist-installer.tgz ../../devextreme-react-installer.tgz ../../devextreme-vue-installer.tgz ../../devextreme-angular-installer.tgz && rm -f pnpm-workspace.yaml pnpm-lock.yaml
308309

309310
- name: Demos - Check Vue TS
310311
working-directory: apps/demos
@@ -374,7 +375,8 @@ jobs:
374375
run: pnpm install --frozen-lockfile
375376

376377
- name: Install tgz
377-
run: pnpm add -w ./devextreme-installer.tgz ./devextreme-dist-installer.tgz ./devextreme-react-installer.tgz ./devextreme-vue-installer.tgz ./devextreme-angular-installer.tgz
378+
working-directory: apps/demos
379+
run: pnpm add --ignore-workspace --allow-build=core-js --allow-build=inferno devextreme-aspnet-data@5.1.0 devextreme-aspnet-data-nojquery@5.1.0 ../../devextreme-installer.tgz ../../devextreme-dist-installer.tgz ../../devextreme-react-installer.tgz ../../devextreme-vue-installer.tgz ../../devextreme-angular-installer.tgz && rm -f pnpm-workspace.yaml pnpm-lock.yaml
378380

379381
- name: Run lint on all demos
380382
if: needs.determine-framework-tests-scope.outputs.framework-tests-scope == 'all'
@@ -501,7 +503,7 @@ jobs:
501503
- name: Install tgz
502504
if: steps.changed-react-demos.outputs.has-react-demos == 'true'
503505
working-directory: apps/demos
504-
run: pnpm add ../../devextreme-installer.tgz ../../devextreme-dist-installer.tgz ../../devextreme-react-installer.tgz ../../devextreme-vue-installer.tgz ../../devextreme-angular-installer.tgz
506+
run: pnpm add --ignore-workspace --allow-build=core-js --allow-build=inferno devextreme-aspnet-data@5.1.0 devextreme-aspnet-data-nojquery@5.1.0 ../../devextreme-installer.tgz ../../devextreme-dist-installer.tgz ../../devextreme-react-installer.tgz ../../devextreme-vue-installer.tgz ../../devextreme-angular-installer.tgz && rm -f pnpm-workspace.yaml pnpm-lock.yaml
505507

506508
- name: Prepare JS
507509
if: steps.changed-react-demos.outputs.has-react-demos == 'true'
@@ -577,7 +579,7 @@ jobs:
577579

578580
- name: Install tgz
579581
working-directory: apps/demos
580-
run: pnpm add ../../devextreme-installer.tgz ../../devextreme-dist-installer.tgz ../../devextreme-react-installer.tgz ../../devextreme-vue-installer.tgz ../../devextreme-angular-installer.tgz
582+
run: pnpm add --ignore-workspace --allow-build=core-js --allow-build=inferno devextreme-aspnet-data@5.1.0 devextreme-aspnet-data-nojquery@5.1.0 ../../devextreme-installer.tgz ../../devextreme-dist-installer.tgz ../../devextreme-react-installer.tgz ../../devextreme-vue-installer.tgz ../../devextreme-angular-installer.tgz && rm -f pnpm-workspace.yaml pnpm-lock.yaml
581583

582584
- name: Prepare JS
583585
working-directory: apps/demos
@@ -853,7 +855,7 @@ jobs:
853855

854856
- name: Install tgz
855857
working-directory: apps/demos
856-
run: pnpm add ../../devextreme-installer.tgz ../../devextreme-dist-installer.tgz ../../devextreme-react-installer.tgz ../../devextreme-vue-installer.tgz ../../devextreme-angular-installer.tgz
858+
run: pnpm add --ignore-workspace --allow-build=core-js --allow-build=inferno devextreme-aspnet-data@5.1.0 devextreme-aspnet-data-nojquery@5.1.0 ../../devextreme-installer.tgz ../../devextreme-dist-installer.tgz ../../devextreme-react-installer.tgz ../../devextreme-vue-installer.tgz ../../devextreme-angular-installer.tgz && rm -f pnpm-workspace.yaml pnpm-lock.yaml
857859

858860
- name: Prepare JS
859861
working-directory: apps/demos
@@ -990,7 +992,7 @@ jobs:
990992

991993
- name: Install tgz
992994
working-directory: apps/demos
993-
run: pnpm add ../../devextreme-installer.tgz ../../devextreme-dist-installer.tgz ../../devextreme-react-installer.tgz ../../devextreme-vue-installer.tgz ../../devextreme-angular-installer.tgz
995+
run: pnpm add --ignore-workspace --allow-build=core-js --allow-build=inferno devextreme-aspnet-data@5.1.0 devextreme-aspnet-data-nojquery@5.1.0 ../../devextreme-installer.tgz ../../devextreme-dist-installer.tgz ../../devextreme-react-installer.tgz ../../devextreme-vue-installer.tgz ../../devextreme-angular-installer.tgz && rm -f pnpm-workspace.yaml pnpm-lock.yaml
994996

995997
- name: Prepare JS
996998
working-directory: apps/demos
@@ -1229,7 +1231,7 @@ jobs:
12291231

12301232
- name: Install tgz
12311233
working-directory: apps/demos
1232-
run: pnpm add ../../devextreme-installer.tgz ../../devextreme-dist-installer.tgz ../../devextreme-react-installer.tgz ../../devextreme-vue-installer.tgz ../../devextreme-angular-installer.tgz
1234+
run: pnpm add --ignore-workspace --allow-build=core-js --allow-build=inferno devextreme-aspnet-data@5.1.0 devextreme-aspnet-data-nojquery@5.1.0 ../../devextreme-installer.tgz ../../devextreme-dist-installer.tgz ../../devextreme-react-installer.tgz ../../devextreme-vue-installer.tgz ../../devextreme-angular-installer.tgz && rm -f pnpm-workspace.yaml pnpm-lock.yaml
12331235

12341236
- name: Start CSP Server
12351237
run: node apps/demos/utils/server/csp-server.js 8080 &

.mise.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tools]
22
node = "24.15.0"
3-
pnpm = "9.15.9"
3+
pnpm = "11.5.1"
44

55
[hooks]
66
enter = "mise install"

.npmrc

Lines changed: 0 additions & 5 deletions
This file was deleted.

apps/demos/Demos/DataGrid/AIAssistant/description.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,4 @@ To enable the AI Assistant, configure the [aiIntegration](/Documentation/ApiRefe
2828

2929
Our Chat implementation supports [speech-to-text input](/Documentation/ApiReference/UI_Components/dxChat/Configuration/#speechToTextEnabled), ideal for hands-free interaction or entering longer prompts.
3030

31-
This demo also configures [suggestions](/Documentation/ApiReference/UI_Components/dxChat/Configuration/#suggestions) for the AI Assistant Chat. These buttons allow you to interact with the assistant in one click using predefined prompts. For additional information about suggestions, refer to the following demo: [DevExtreme Chat - Prompt Suggestions](/Demos/WidgetsGallery/Demo/Chat/PromptSuggestions/).
32-
33-
[note] This functionality is available as a [community technology preview (CTP)](https://www.devexpress.com/aboutus/pre-release.xml). Should you have any questions or suggestions prior to its official release, please create a new ticket in the [DevExpress Support Center](https://supportcenter.devexpress.com/ticket/create).
31+
This demo also configures [suggestions](/Documentation/ApiReference/UI_Components/dxChat/Configuration/#suggestions) for the AI Assistant Chat. These buttons allow you to interact with the assistant in one click using predefined prompts. For additional information about suggestions, refer to the following demo: [DevExtreme Chat - Prompt Suggestions](/Demos/WidgetsGallery/Demo/Chat/PromptSuggestions/).

apps/demos/package.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
"devextreme-angular": "workspace:*",
1313
"devextreme-dist": "workspace:*",
1414
"devextreme-react": "workspace:*",
15-
"devextreme-vue": "workspace:*"
15+
"devextreme-vue": "workspace:*",
16+
"eslint-migration-utils": "workspace:*"
1617
},
1718
"dependencies": {
1819
"@angular/animations": "^22.0.0",
@@ -100,6 +101,7 @@
100101
"@babel/preset-typescript": "7.28.5",
101102
"@eslint/compat": "1.4.1",
102103
"@eslint/eslintrc": "catalog:",
104+
"@eslint/js": "catalog:",
103105
"@rollup/plugin-babel": "6.1.0",
104106
"@rollup/plugin-node-resolve": "15.3.1",
105107
"@rollup/plugin-replace": "5.0.7",
@@ -123,12 +125,15 @@
123125
"devextreme-screenshot-comparer": "2.0.17",
124126
"eslint": "catalog:",
125127
"eslint-config-airbnb-typescript": "catalog:",
128+
"eslint-config-devextreme": "catalog:",
126129
"eslint-plugin-deprecation": "3.0.0",
127130
"eslint-plugin-import": "catalog:",
131+
"eslint-plugin-jest": "29.15.0",
128132
"eslint-plugin-no-only-tests": "catalog:",
129133
"eslint-plugin-react": "7.37.5",
130134
"eslint-plugin-react-hooks": "5.2.0",
131135
"eslint-plugin-react-perf": "3.3.3",
136+
"eslint-plugin-spellcheck": "0.0.20",
132137
"eslint-plugin-vue": "catalog:",
133138
"express": "4.22.1",
134139
"glob": "11.1.0",

e2e/bundlers/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"devextreme": "workspace:*",
2222
"eslint": "catalog:",
2323
"@eslint/eslintrc": "catalog:",
24+
"@eslint/js": "catalog:",
2425
"@stylistic/eslint-plugin": "catalog:",
2526
"@typescript-eslint/parser": "catalog:",
2627
"eslint-config-devextreme": "catalog:",

e2e/compilation-cases/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"typescript": "catalog:angular",
1515
"eslint": "catalog:",
1616
"@eslint/eslintrc": "catalog:",
17+
"@eslint/js": "catalog:",
1718
"@stylistic/eslint-plugin": "catalog:",
1819
"@typescript-eslint/eslint-plugin": "catalog:",
1920
"@typescript-eslint/parser": "catalog:",

e2e/testcafe-devextreme/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"update-failed-etalons": "node update_failed_etalons.mjs"
88
},
99
"devDependencies": {
10-
"@babel/eslint-parser": "catalog:eslint8",
10+
"@babel/eslint-parser": "catalog:",
1111
"@babel/plugin-transform-runtime": "7.29.0",
1212
"@testcafe-community/axe": "3.5.0",
1313
"@types/jquery": "catalog:",
@@ -24,6 +24,7 @@
2424
"ts-node": "10.9.2",
2525
"eslint": "catalog:",
2626
"@eslint/eslintrc": "catalog:",
27+
"@eslint/js": "catalog:",
2728
"@stylistic/eslint-plugin": "catalog:",
2829
"@typescript-eslint/eslint-plugin": "catalog:",
2930
"@typescript-eslint/parser": "catalog:",

e2e/testcafe-devextreme/tests/dataGrid/common/pager.ts

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,85 @@ test('Page index should not reset when scrolling while the grid is being refresh
238238
height: 440,
239239
}));
240240

241+
test('Pager info should show page 1 of 1 after changing pageSize to \'all\' with virtual scrolling (T1327238)', async (t) => {
242+
const dataGrid = new DataGrid('#container');
243+
const pager = dataGrid.getPager();
244+
245+
await t
246+
.expect(pager.getInfoText().textContent)
247+
.eql('Page 5 of 10 (100 items)');
248+
249+
await t
250+
.click(pager.getPageSize(1).element)
251+
.expect(pager.getInfoText().textContent)
252+
.eql('Page 1 of 1 (100 items)');
253+
}).before(async () => createWidget('dxDataGrid', {
254+
dataSource: [...new Array(100).keys()].map((i) => ({ id: i })),
255+
keyExpr: 'id',
256+
showBorders: true,
257+
scrolling: {
258+
mode: 'virtual',
259+
},
260+
paging: {
261+
pageSize: 10,
262+
pageIndex: 4,
263+
},
264+
pager: {
265+
visible: true,
266+
allowedPageSizes: [10, 'all'],
267+
showPageSizeSelector: true,
268+
showInfo: true,
269+
showNavigationButtons: true,
270+
},
271+
height: 400,
272+
}));
273+
274+
test('Pager info should show page 1 of 1 after changing pageSize to \'all\' and enabling virtual scrolling (T1327238)', async (t) => {
275+
const dataGrid = new DataGrid('#container');
276+
const pager = dataGrid.getPager();
277+
278+
await t
279+
.expect(pager.getInfoText().textContent)
280+
.eql('Page 5 of 10 (100 items)');
281+
282+
await t
283+
.click(pager.getPageSize(1).element)
284+
.expect(pager.getInfoText().textContent)
285+
.eql('Page 1 of 1 (100 items)');
286+
}).before(async () => createWidget('dxDataGrid', {
287+
dataSource: [...new Array(100).keys()].map((i) => ({ id: i })),
288+
keyExpr: 'id',
289+
showBorders: true,
290+
scrolling: {
291+
mode: 'standard',
292+
},
293+
paging: {
294+
pageSize: 10,
295+
pageIndex: 4,
296+
},
297+
pager: {
298+
visible: true,
299+
allowedPageSizes: [10, 'all'],
300+
showPageSizeSelector: true,
301+
showInfo: true,
302+
showNavigationButtons: true,
303+
},
304+
height: 400,
305+
onOptionChanged: (e) => {
306+
if (e.fullName === 'paging.pageSize') {
307+
const setVirtual = e.value === 0;
308+
const targetRenderingMode = setVirtual ? 'virtual' : 'standard';
309+
const currentRenderingMode = e.component.option('scrolling.mode');
310+
if (currentRenderingMode !== targetRenderingMode) {
311+
e.component.beginUpdate();
312+
e.component.option('scrolling.mode', targetRenderingMode);
313+
e.component.repaint();
314+
e.component.endUpdate();
315+
}
316+
}
317+
},
318+
}));
319+
241320
test('No error should occur if dataSource is not defined and pageIndex is promise chained (T1256070)', async (t) => {
242321
const dataGrid = new DataGrid('#container');
243322

0 commit comments

Comments
 (0)