Skip to content

Commit f5b8732

Browse files
chore: bump scaffolders (#1019)
* bump scaffolders * update vue router * fix React lint and interactivity * next.js app changes * roll back vue * middleware BC in Next.js 16 * Node.js deprecation of spawn args + shell: true * try manual args join * revert trying to fix Node.js deprecation * update puppeteer to use the latest headless mode for Chrome * fix lockfiles * bump next.js again * suppress tests * .
1 parent 64a7bf9 commit f5b8732

File tree

18 files changed

+7858
-21984
lines changed

18 files changed

+7858
-21984
lines changed

package-lock.json

Lines changed: 4750 additions & 11282 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"@angular-eslint/schematics": "^0.2.0-beta.1",
1717
"lerna": "^5.6.2",
1818
"pre-commit": "^1.2.2",
19-
"puppeteer": "^21.11.0"
19+
"puppeteer": "^24.32.1"
2020
},
2121
"pre-commit": "lint",
2222
"overrides": {

packages/devextreme-cli/package-lock.json

Lines changed: 2750 additions & 10479 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/devextreme-cli/src/applications/application.nextjs.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ const create = async(appName, options) => {
7979
'--src-dir',
8080
'--app',
8181
'--no-turbopack',
82+
'--no-react-compiler',
8283
'--import-alias "@/*"',
8384
];
8485

packages/devextreme-cli/src/applications/application.react.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ const create = async(appName, options) => {
8282

8383
const commandArguments = [`-p=create-vite@${depsVersionTag || latestVersions['create-vite']}`, 'create-vite', appName];
8484

85-
commandArguments.push(`--template react${transpiler === 'swc' ? '-swc' : ''}${templateOptions.isTypeScript ? '-ts' : ''}`);
85+
commandArguments.push(`--template react${transpiler === 'swc' ? '-swc' : ''}${templateOptions.isTypeScript ? '-ts' : ''} --no-rolldown --no-interactive`);
8686

8787
await runCommand('npx', commandArguments);
8888

packages/devextreme-cli/src/applications/application.vue.js

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,10 @@ const defaultStyles = [
1717
const preparePackageJsonForTemplate = (appPath, appName) => {
1818
const dependencies = [
1919
{ name: 'sass-embedded', version: '^1.85.1' },
20-
{ name: 'vue-router', version: '^3.0.1' },
20+
{ name: 'vue-router', version: '^4.0.1' },
2121
{ name: 'devextreme-cli', version: latestVersions['devextreme-cli'], dev: true }
2222
];
2323

24-
const nameDepends = dependencies.map(d => d.name);
25-
const indexVueRouter = nameDepends.indexOf('vue-router');
26-
27-
dependencies[indexVueRouter].version = '^4.0.1';
28-
2924
const scripts = [
3025
{ name: 'build-themes', value: 'devextreme build' },
3126
{ name: 'postinstall', value: 'npm run build-themes' }

packages/devextreme-cli/src/templates/nextjs/application/src/components/change-password-form/ChangePasswordForm.tsx

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
'use client'
2-
import <%=#isTypeScript%>React, <%=/isTypeScript%>{ useState, useRef, useCallback } from 'react';
2+
import <%=#isTypeScript%>React, <%=/isTypeScript%>{ useState, useCallback } from 'react';
33
import { useRouter } from 'next/navigation';
44
import Form, {
55
Item,
66
Label,
77
ButtonItem,
88
ButtonOptions,
99
RequiredRule,
10-
CustomRule,
10+
CustomRule,<%=#isTypeScript%>
11+
type FormTypes,<%=/isTypeScript%>
1112
} from 'devextreme-react/form';
1213
import LoadIndicator from 'devextreme-react/load-indicator';
1314
import notify from 'devextreme/ui/notify';
@@ -17,11 +18,22 @@ import { changePassword } from '@/app/actions/auth';
1718
export default function ChangePasswordForm() {
1819
const router = useRouter();
1920
const [loading, setLoading] = useState(false);
20-
const formData = useRef({ password: '' });
21+
const [formData, setFormData] = useState({ password: '' });
22+
23+
const onFieldDataChanged = useCallback((e<%=#isTypeScript%>: FormTypes.FieldDataChangedEvent<%=/isTypeScript%>) => {
24+
const { dataField, value } = e;
25+
26+
if (dataField) {
27+
setFormData(formData => ({
28+
...formData,
29+
[dataField]: value,
30+
}));
31+
}
32+
}, []);
2133

2234
const onSubmit = useCallback(async (e<%=#isTypeScript%>: React.FormEvent<HTMLFormElement><%=/isTypeScript%>) => {
2335
e.preventDefault();
24-
const { password } = formData.current;
36+
const { password } = formData;
2537
setLoading(true);
2638

2739
const result = await changePassword(password);
@@ -32,16 +44,16 @@ export default function ChangePasswordForm() {
3244
} else {
3345
notify(result.message, 'error', 2000);
3446
}
35-
}, [router]);
47+
}, [router, formData]);
3648

3749
const confirmPassword = useCallback(
38-
({ value }<%=#isTypeScript%>: ValidationCallbackData<%=/isTypeScript%>) => value === formData.current.password,
39-
[]
50+
({ value }<%=#isTypeScript%>: ValidationCallbackData<%=/isTypeScript%>) => value === formData.password,
51+
[formData]
4052
);
4153

4254
return (
4355
<form onSubmit={onSubmit}>
44-
<Form formData={formData.current} disabled={loading}>
56+
<Form formData={formData} disabled={loading} onFieldDataChanged={onFieldDataChanged}>
4557
<Item
4658
dataField={'password'}
4759
editorType={'dxTextBox'}

packages/devextreme-cli/src/templates/nextjs/application/src/components/create-account-form/CreateAccountForm.tsx

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
'use client'
2-
import <%=#isTypeScript%>React, <%=/isTypeScript%>{ useState, useRef, useCallback } from 'react';
2+
import <%=#isTypeScript%>React, <%=/isTypeScript%>{ useState, useCallback } from 'react';
33
import { useRouter } from 'next/navigation';
44
import Link from 'next/link';
55
import Form, {
@@ -9,7 +9,8 @@ import Form, {
99
ButtonOptions,
1010
RequiredRule,
1111
CustomRule,
12-
EmailRule
12+
EmailRule,<%=#isTypeScript%>
13+
type FormTypes,<%=/isTypeScript%>
1314
} from 'devextreme-react/form';
1415
import notify from 'devextreme/ui/notify';
1516
import LoadIndicator from 'devextreme-react/load-indicator';
@@ -20,11 +21,22 @@ import './CreateAccountForm.scss';
2021
export default function CreateAccountForm() {
2122
const router = useRouter();
2223
const [loading, setLoading] = useState(false);
23-
const formData = useRef({ email: '', password: '' });
24+
const [formData, setFormData] = useState({ email: '', password: '' });
25+
26+
const onFieldDataChanged = useCallback((e<%=#isTypeScript%>: FormTypes.FieldDataChangedEvent<%=/isTypeScript%>) => {
27+
const { dataField, value } = e;
28+
29+
if (dataField) {
30+
setFormData(formData => ({
31+
...formData,
32+
[dataField]: value,
33+
}));
34+
}
35+
}, []);
2436

2537
const onSubmit = useCallback(async (e<%=#isTypeScript%>: React.FormEvent<HTMLFormElement><%=/isTypeScript%>) => {
2638
e.preventDefault();
27-
const { email, password } = formData.current;
39+
const { email, password } = formData;
2840
setLoading(true);
2941

3042
const result = await signUp(email, password);
@@ -35,16 +47,16 @@ export default function CreateAccountForm() {
3547
} else {
3648
notify(result.message, 'error', 2000);
3749
}
38-
}, [router]);
50+
}, [router, formData]);
3951

4052
const confirmPassword = useCallback(
41-
({ value }<%=#isTypeScript%>: ValidationCallbackData<%=/isTypeScript%>) => value === formData.current.password,
42-
[]
53+
({ value }<%=#isTypeScript%>: ValidationCallbackData<%=/isTypeScript%>) => value === formData.password,
54+
[formData]
4355
);
4456

4557
return (
4658
<form className={'create-account-form'} onSubmit={onSubmit}>
47-
<Form formData={formData.current} disabled={loading}>
59+
<Form formData={formData} disabled={loading} onFieldDataChanged={onFieldDataChanged}>
4860
<Item
4961
dataField={'email'}
5062
editorType={'dxTextBox'}

packages/devextreme-cli/src/templates/nextjs/application/src/components/login-form/LoginForm.tsx

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
'use client'
2-
import <%=#isTypeScript%>React, <%=/isTypeScript%>{ useState, useRef, useCallback } from 'react';
2+
import <%=#isTypeScript%>React, <%=/isTypeScript%>{ useState, useCallback } from 'react';
33
import { useRouter } from 'next/navigation';
44
import Link from 'next/link';
55
import Form, {
@@ -8,7 +8,8 @@ import Form, {
88
ButtonItem,
99
ButtonOptions,
1010
RequiredRule,
11-
EmailRule
11+
EmailRule,<%=#isTypeScript%>
12+
type FormTypes,<%=/isTypeScript%>
1213
} from 'devextreme-react/form';
1314
import LoadIndicator from 'devextreme-react/load-indicator';
1415
import Button from 'devextreme-react/button';
@@ -20,11 +21,22 @@ import './LoginForm.scss';
2021
export default function LoginForm() {
2122
const router = useRouter();
2223
const [loading, setLoading] = useState(false);
23-
const formData = useRef({ email: '', password: '' });
24+
const [formData, setFormData] = useState({ email: '', password: '' });
25+
26+
const onFieldDataChanged = useCallback((e<%=#isTypeScript%>: FormTypes.FieldDataChangedEvent<%=/isTypeScript%>) => {
27+
const { dataField, value } = e;
28+
29+
if (dataField) {
30+
setFormData(formData => ({
31+
...formData,
32+
[dataField]: value,
33+
}));
34+
}
35+
}, []);
2436

2537
const onSubmit = useCallback(async (e<%=#isTypeScript%>: React.FormEvent<HTMLFormElement><%=/isTypeScript%>) => {
2638
e.preventDefault();
27-
const { email, password } = formData.current;
39+
const { email, password } = formData;
2840
setLoading(true);
2941

3042
const result = await signIn(email, password);
@@ -34,15 +46,15 @@ export default function LoginForm() {
3446
} else {
3547
router.push('/');
3648
}
37-
}, [router]);
49+
}, [router, formData]);
3850

3951
const onCreateAccountClick = useCallback(() => {
4052
router.push('/auth/create-account');
4153
}, [router]);
4254

4355
return (
4456
<form className={'login-form'} onSubmit={onSubmit}>
45-
<Form formData={formData.current} disabled={loading}>
57+
<Form formData={formData} disabled={loading} onFieldDataChanged={onFieldDataChanged}>
4658
<Item
4759
dataField={'email'}
4860
editorType={'dxTextBox'}

packages/devextreme-cli/src/templates/nextjs/application/src/components/reset-password-form/ResetPasswordForm.tsx

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
'use client'
2-
import <%=#isTypeScript%>React, <%=/isTypeScript%>{ useState, useRef, useCallback } from 'react';
2+
import <%=#isTypeScript%>React, <%=/isTypeScript%>{ useState, useCallback } from 'react';
33
import { useRouter } from 'next/navigation';
44
import Link from 'next/link';
55
import Form, {
@@ -8,7 +8,8 @@ import Form, {
88
ButtonItem,
99
ButtonOptions,
1010
RequiredRule,
11-
EmailRule
11+
EmailRule,<%=#isTypeScript%>
12+
type FormTypes,<%=/isTypeScript%>
1213
} from 'devextreme-react/form';
1314
import LoadIndicator from 'devextreme-react/load-indicator';
1415
import notify from 'devextreme/ui/notify';
@@ -20,11 +21,22 @@ const notificationText = 'We\'ve sent a link to reset your password. Check your
2021
export default function ResetPasswordForm() {
2122
const router = useRouter();
2223
const [loading, setLoading] = useState(false);
23-
const formData = useRef({ email: '', password: '' });
24+
const [formData, setFormData] = useState({ email: '', password: '' });
25+
26+
const onFieldDataChanged = useCallback((e<%=#isTypeScript%>: FormTypes.FieldDataChangedEvent<%=/isTypeScript%>) => {
27+
const { dataField, value } = e;
28+
29+
if (dataField) {
30+
setFormData(formData => ({
31+
...formData,
32+
[dataField]: value,
33+
}));
34+
}
35+
}, []);
2436

2537
const onSubmit = useCallback(async (e<%=#isTypeScript%>: React.FormEvent<HTMLFormElement><%=/isTypeScript%>) => {
2638
e.preventDefault();
27-
const { email } = formData.current;
39+
const { email } = formData;
2840
setLoading(true);
2941

3042
const result = await resetPassword(email);
@@ -36,11 +48,11 @@ export default function ResetPasswordForm() {
3648
} else {
3749
notify(result.message, 'error', 2000);
3850
}
39-
}, [router]);
51+
}, [router, formData]);
4052

4153
return (
4254
<form className={'reset-password-form'} onSubmit={onSubmit}>
43-
<Form formData={formData.current} disabled={loading}>
55+
<Form formData={formData} disabled={loading} onFieldDataChanged={onFieldDataChanged}>
4456
<Item
4557
dataField={'email'}
4658
editorType={'dxTextBox'}

0 commit comments

Comments
 (0)