Skip to content

Commit 2a033a0

Browse files
Merge branch '26_1' of https://github.com/DevExpress/DevExtreme into 26_1_WIP_check_ng22
# Conflicts: # apps/demos/package.json # pnpm-lock.yaml
2 parents 3af643a + fb5f54f commit 2a033a0

41 files changed

Lines changed: 2564 additions & 3744 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/copilot-instructions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ For the full executor catalogue, conventions, and refactoring guidance, see @pac
6464

6565
## Build Pipeline
6666

67-
localization → component generation (Renovation) → transpile (`babel-transform` for JS, `build-typescript` for TS) → bundle (Webpack via `devextreme-nx-infra-plugin:bundle`, debug + prod targets) → TypeScript declarations → SCSS compile (`devextreme-scss`) → npm package preparation. Task orchestration goes through Nx; cross-package builds (`all:build-dev`, `all:build`) live in the `workflows` package. Pre-commit hook runs `lint-staged` (stylelint + eslint --quiet).
67+
clean (`devextreme-nx-infra-plugin:clean` preserving CSS and npm metadata) → localization → component generation (Renovation) → transpile (`babel-transform` for JS, `build-typescript` for TS) → bundle (Webpack via `devextreme-nx-infra-plugin:bundle`, debug + prod targets) → TypeScript declarations → SCSS compile (`devextreme-scss`) → npm package preparation. Task orchestration goes through Nx; cross-package builds (`all:build-dev`, `all:build`) live in the `workflows` package. The `gulpfile.js` clean task is a thin delegate to `pnpm nx clean:artifacts devextreme`. Pre-commit hook runs `lint-staged` (stylelint + eslint --quiet).
6868

6969
## Conventions
7070

apps/demos/menuMeta.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
{
6666
"Name": "Chat",
6767
"Equivalents": "dxChat, dx-chat, chat",
68+
"Badge": "Updated",
6869
"Groups": [
6970
{
7071
"Name": "AI and Chatbot Integration",

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@
122122
"brace-expansion@>=4.0.0 <5.0.6": "^5.0.6",
123123
"yaml@>=2.0.0 <2.8.3": "^2.8.3",
124124
"follow-redirects@<=1.15.11": ">=1.16.0",
125-
"@angular/platform-server@>=21.0.0-next.0 <21.2.13": "^21.2.13",
126125
"ws@>=8.0.0 <8.20.1": "^8.20.1",
127126
"stylelint-config-recommended-vue@1.6.1>stylelint-config-recommended": "^16.0.0",
128127
"uuid@<14.0.0": "~14.0.0",

packages/devextreme-angular/src/server/render.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ export class DxServerModule {
2525
temp.innerHTML = renderToString(el);
2626

2727
const mainElement = temp.childNodes[0];
28+
if (!mainElement) {
29+
return;
30+
}
2831
const childString = mainElement.innerHTML;
2932

3033
for (let i = 0; i < mainElement.attributes.length; i++) {

packages/devextreme/gulpfile.js

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,11 @@
44
const gulp = require('gulp');
55
const multiProcess = require('gulp-multi-process');
66
const env = require('./build/gulp/env-variables');
7-
const cache = require('gulp-cache');
87
const shell = require('gulp-shell');
98
const context = require('./build/gulp/context');
109
const { REMOVE_NON_PRODUCTION_MODULE } = context;
1110

12-
gulp.task('clean', function(callback) {
13-
require('del').sync([
14-
'artifacts/**',
15-
'!artifacts',
16-
'!artifacts/css',
17-
'!artifacts/css/*',
18-
'!artifacts/css/fonts',
19-
'!artifacts/css/fonts/*',
20-
'!artifacts/css/icons',
21-
'!artifacts/css/icons/*',
22-
'!artifacts/npm',
23-
'!artifacts/npm/devextreme',
24-
'!artifacts/npm/devextreme/*.json',
25-
'!artifacts/npm/devextreme-dist',
26-
]);
27-
cache.clearAll();
28-
callback();
29-
});
11+
gulp.task('clean', shell.task('pnpm nx clean:artifacts devextreme'));
3012

3113
require('./build/gulp/bundler-config');
3214
require('./build/gulp/transpile');
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import $ from '@js/core/renderer';
2+
import Sortable from '@js/ui/sortable';
3+
4+
describe('Draggable dispose safety', () => {
5+
beforeEach(() => {
6+
document.body.innerHTML = '';
7+
});
8+
9+
it('should not crash on _stopAnimator when _scrollAnimator is not initialized', () => {
10+
const $container = $('<div>').appendTo(document.body);
11+
const sortable = new Sortable($container, {});
12+
13+
(sortable as any)._scrollAnimator = undefined;
14+
15+
expect(() => {
16+
sortable.dispose();
17+
}).not.toThrow();
18+
});
19+
});

packages/devextreme/js/__internal/m_draggable.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ class Draggable extends DOMComponent<Draggable, Properties> {
439439
}
440440

441441
_stopAnimator() {
442-
this._scrollAnimator.stop();
442+
this._scrollAnimator?.stop();
443443
}
444444

445445
_addWidgetPrefix(className?) {

packages/devextreme/js/__internal/scheduler/m_scheduler.ts

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -598,9 +598,6 @@ class Scheduler extends SchedulerOptionsBaseWidget {
598598
this.updateAppointmentDataSource();
599599
this.updateOption('workSpace', args.fullName, value);
600600
break;
601-
case 'renovateRender':
602-
this.updateOption('workSpace', name, value);
603-
break;
604601
case '_draggingMode':
605602
this.updateOption('workSpace', 'draggingMode', value);
606603
break;
@@ -1569,8 +1566,6 @@ class Scheduler extends SchedulerOptionsBaseWidget {
15691566
}
15701567
},
15711568

1572-
// TODO: SSR does not work correctly with renovated render
1573-
renovateRender: this.isRenovatedRender(isVirtualScrolling),
15741569
}, currentViewOptions);
15751570

15761571
result.notifyScheduler = this.notifyScheduler;
@@ -1589,10 +1584,6 @@ class Scheduler extends SchedulerOptionsBaseWidget {
15891584
return result;
15901585
}
15911586

1592-
private isRenovatedRender(isVirtualScrolling) {
1593-
return (this.option('renovateRender') && hasWindow()) || isVirtualScrolling;
1594-
}
1595-
15961587
private waitAsyncTemplate(callback) {
15971588
if (this._options.silent('templatesRenderAsynchronously')) {
15981589
const timer = setTimeout(() => {

packages/devextreme/js/__internal/scheduler/utils/options/constants.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,6 @@ export const DEFAULT_SCHEDULER_OPTIONS: Properties = {
102102

103103
export const DEFAULT_SCHEDULER_INTERNAL_OPTIONS: SchedulerInternalOptions = {
104104
indicatorTime: undefined,
105-
renovateRender: true,
106105
editing: {
107106
// @ts-expect-error copy from default so that you can rewrite it
108107
...DEFAULT_SCHEDULER_OPTIONS.editing,

packages/devextreme/js/__internal/scheduler/utils/options/types.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ export type NormalizedView = View | AgendaView;
2222

2323
export interface SchedulerInternalOptions {
2424
indicatorTime?: Date;
25-
renovateRender: boolean;
2625
editing: Properties['editing'];
2726
_draggingMode: 'outlook' | 'default';
2827
// TODO: legacy option property name

0 commit comments

Comments
 (0)