Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16,032 changes: 4,750 additions & 11,282 deletions package-lock.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"@angular-eslint/schematics": "^0.2.0-beta.1",
"lerna": "^5.6.2",
"pre-commit": "^1.2.2",
"puppeteer": "^21.11.0"
"puppeteer": "^24.32.1"
},
"pre-commit": "lint",
"overrides": {
Expand Down
13,229 changes: 2,750 additions & 10,479 deletions packages/devextreme-cli/package-lock.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ const create = async(appName, options) => {
'--src-dir',
'--app',
'--no-turbopack',
'--no-react-compiler',
'--import-alias "@/*"',
];

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ const create = async(appName, options) => {

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

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

await runCommand('npx', commandArguments);

Expand Down
7 changes: 1 addition & 6 deletions packages/devextreme-cli/src/applications/application.vue.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,10 @@ const defaultStyles = [
const preparePackageJsonForTemplate = (appPath, appName) => {
const dependencies = [
{ name: 'sass-embedded', version: '^1.85.1' },
{ name: 'vue-router', version: '^3.0.1' },
{ name: 'vue-router', version: '^4.0.1' },
{ name: 'devextreme-cli', version: latestVersions['devextreme-cli'], dev: true }
];

const nameDepends = dependencies.map(d => d.name);
const indexVueRouter = nameDepends.indexOf('vue-router');

dependencies[indexVueRouter].version = '^4.0.1';

const scripts = [
{ name: 'build-themes', value: 'devextreme build' },
{ name: 'postinstall', value: 'npm run build-themes' }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
'use client'
import <%=#isTypeScript%>React, <%=/isTypeScript%>{ useState, useRef, useCallback } from 'react';
import <%=#isTypeScript%>React, <%=/isTypeScript%>{ useState, useCallback } from 'react';
import { useRouter } from 'next/navigation';
import Form, {
Item,
Label,
ButtonItem,
ButtonOptions,
RequiredRule,
CustomRule,
CustomRule,<%=#isTypeScript%>
type FormTypes,<%=/isTypeScript%>
} from 'devextreme-react/form';
import LoadIndicator from 'devextreme-react/load-indicator';
import notify from 'devextreme/ui/notify';
Expand All @@ -17,11 +18,22 @@ import { changePassword } from '@/app/actions/auth';
export default function ChangePasswordForm() {
const router = useRouter();
const [loading, setLoading] = useState(false);
const formData = useRef({ password: '' });
const [formData, setFormData] = useState({ password: '' });

const onFieldDataChanged = useCallback((e<%=#isTypeScript%>: FormTypes.FieldDataChangedEvent<%=/isTypeScript%>) => {
const { dataField, value } = e;

if (dataField) {
setFormData(formData => ({
...formData,
[dataField]: value,
}));
}
}, []);

const onSubmit = useCallback(async (e<%=#isTypeScript%>: React.FormEvent<HTMLFormElement><%=/isTypeScript%>) => {
e.preventDefault();
const { password } = formData.current;
const { password } = formData;
setLoading(true);

const result = await changePassword(password);
Expand All @@ -32,16 +44,16 @@ export default function ChangePasswordForm() {
} else {
notify(result.message, 'error', 2000);
}
}, [router]);
}, [router, formData]);

const confirmPassword = useCallback(
({ value }<%=#isTypeScript%>: ValidationCallbackData<%=/isTypeScript%>) => value === formData.current.password,
[]
({ value }<%=#isTypeScript%>: ValidationCallbackData<%=/isTypeScript%>) => value === formData.password,
[formData]
);

return (
<form onSubmit={onSubmit}>
<Form formData={formData.current} disabled={loading}>
<Form formData={formData} disabled={loading} onFieldDataChanged={onFieldDataChanged}>
<Item
dataField={'password'}
editorType={'dxTextBox'}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
'use client'
import <%=#isTypeScript%>React, <%=/isTypeScript%>{ useState, useRef, useCallback } from 'react';
import <%=#isTypeScript%>React, <%=/isTypeScript%>{ useState, useCallback } from 'react';
import { useRouter } from 'next/navigation';
import Link from 'next/link';
import Form, {
Expand All @@ -9,7 +9,8 @@ import Form, {
ButtonOptions,
RequiredRule,
CustomRule,
EmailRule
EmailRule,<%=#isTypeScript%>
type FormTypes,<%=/isTypeScript%>
} from 'devextreme-react/form';
import notify from 'devextreme/ui/notify';
import LoadIndicator from 'devextreme-react/load-indicator';
Expand All @@ -20,11 +21,22 @@ import './CreateAccountForm.scss';
export default function CreateAccountForm() {
const router = useRouter();
const [loading, setLoading] = useState(false);
const formData = useRef({ email: '', password: '' });
const [formData, setFormData] = useState({ email: '', password: '' });

const onFieldDataChanged = useCallback((e<%=#isTypeScript%>: FormTypes.FieldDataChangedEvent<%=/isTypeScript%>) => {
const { dataField, value } = e;

if (dataField) {
setFormData(formData => ({
...formData,
[dataField]: value,
}));
}
}, []);

const onSubmit = useCallback(async (e<%=#isTypeScript%>: React.FormEvent<HTMLFormElement><%=/isTypeScript%>) => {
e.preventDefault();
const { email, password } = formData.current;
const { email, password } = formData;
setLoading(true);

const result = await signUp(email, password);
Expand All @@ -35,16 +47,16 @@ export default function CreateAccountForm() {
} else {
notify(result.message, 'error', 2000);
}
}, [router]);
}, [router, formData]);

const confirmPassword = useCallback(
({ value }<%=#isTypeScript%>: ValidationCallbackData<%=/isTypeScript%>) => value === formData.current.password,
[]
({ value }<%=#isTypeScript%>: ValidationCallbackData<%=/isTypeScript%>) => value === formData.password,
[formData]
);

return (
<form className={'create-account-form'} onSubmit={onSubmit}>
<Form formData={formData.current} disabled={loading}>
<Form formData={formData} disabled={loading} onFieldDataChanged={onFieldDataChanged}>
<Item
dataField={'email'}
editorType={'dxTextBox'}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
'use client'
import <%=#isTypeScript%>React, <%=/isTypeScript%>{ useState, useRef, useCallback } from 'react';
import <%=#isTypeScript%>React, <%=/isTypeScript%>{ useState, useCallback } from 'react';
import { useRouter } from 'next/navigation';
import Link from 'next/link';
import Form, {
Expand All @@ -8,7 +8,8 @@ import Form, {
ButtonItem,
ButtonOptions,
RequiredRule,
EmailRule
EmailRule,<%=#isTypeScript%>
type FormTypes,<%=/isTypeScript%>
} from 'devextreme-react/form';
import LoadIndicator from 'devextreme-react/load-indicator';
import Button from 'devextreme-react/button';
Expand All @@ -20,11 +21,22 @@ import './LoginForm.scss';
export default function LoginForm() {
const router = useRouter();
const [loading, setLoading] = useState(false);
const formData = useRef({ email: '', password: '' });
const [formData, setFormData] = useState({ email: '', password: '' });

const onFieldDataChanged = useCallback((e<%=#isTypeScript%>: FormTypes.FieldDataChangedEvent<%=/isTypeScript%>) => {
const { dataField, value } = e;

if (dataField) {
setFormData(formData => ({
...formData,
[dataField]: value,
}));
}
}, []);

const onSubmit = useCallback(async (e<%=#isTypeScript%>: React.FormEvent<HTMLFormElement><%=/isTypeScript%>) => {
e.preventDefault();
const { email, password } = formData.current;
const { email, password } = formData;
setLoading(true);

const result = await signIn(email, password);
Expand All @@ -34,15 +46,15 @@ export default function LoginForm() {
} else {
router.push('/');
}
}, [router]);
}, [router, formData]);

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

return (
<form className={'login-form'} onSubmit={onSubmit}>
<Form formData={formData.current} disabled={loading}>
<Form formData={formData} disabled={loading} onFieldDataChanged={onFieldDataChanged}>
<Item
dataField={'email'}
editorType={'dxTextBox'}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
'use client'
import <%=#isTypeScript%>React, <%=/isTypeScript%>{ useState, useRef, useCallback } from 'react';
import <%=#isTypeScript%>React, <%=/isTypeScript%>{ useState, useCallback } from 'react';
import { useRouter } from 'next/navigation';
import Link from 'next/link';
import Form, {
Expand All @@ -8,7 +8,8 @@ import Form, {
ButtonItem,
ButtonOptions,
RequiredRule,
EmailRule
EmailRule,<%=#isTypeScript%>
type FormTypes,<%=/isTypeScript%>
} from 'devextreme-react/form';
import LoadIndicator from 'devextreme-react/load-indicator';
import notify from 'devextreme/ui/notify';
Expand All @@ -20,11 +21,22 @@ const notificationText = 'We\'ve sent a link to reset your password. Check your
export default function ResetPasswordForm() {
const router = useRouter();
const [loading, setLoading] = useState(false);
const formData = useRef({ email: '', password: '' });
const [formData, setFormData] = useState({ email: '', password: '' });

const onFieldDataChanged = useCallback((e<%=#isTypeScript%>: FormTypes.FieldDataChangedEvent<%=/isTypeScript%>) => {
const { dataField, value } = e;

if (dataField) {
setFormData(formData => ({
...formData,
[dataField]: value,
}));
}
}, []);

const onSubmit = useCallback(async (e<%=#isTypeScript%>: React.FormEvent<HTMLFormElement><%=/isTypeScript%>) => {
e.preventDefault();
const { email } = formData.current;
const { email } = formData;
setLoading(true);

const result = await resetPassword(email);
Expand All @@ -36,11 +48,11 @@ export default function ResetPasswordForm() {
} else {
notify(result.message, 'error', 2000);
}
}, [router]);
}, [router, formData]);

return (
<form className={'reset-password-form'} onSubmit={onSubmit}>
<Form formData={formData.current} disabled={loading}>
<Form formData={formData} disabled={loading} onFieldDataChanged={onFieldDataChanged}>
<Item
dataField={'email'}
editorType={'dxTextBox'}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ async function _DEMO_logIn() {
// return NextResponse.redirect(new URL('/auth/login', req.nextUrl))
}

export default async function middleware(req<%=#isTypeScript%>: NextRequest<%=/isTypeScript%>) {
export default async function proxy(req<%=#isTypeScript%>: NextRequest<%=/isTypeScript%>) {
const path = req.nextUrl.pathname;

if (!isProtectedRoute(path)) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import <%=#isTypeScript%>React, <%=/isTypeScript%>{ useState, useRef, useCallback } from 'react';
import <%=#isTypeScript%>React, <%=/isTypeScript%>{ useState, useCallback } from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import Form, {
Item,
Label,
ButtonItem,
ButtonOptions,
RequiredRule,
CustomRule,
CustomRule,<%=#isTypeScript%>
type FormTypes,<%=/isTypeScript%>
} from 'devextreme-react/form';
import LoadIndicator from 'devextreme-react/load-indicator';
import notify from 'devextreme/ui/notify';
Expand All @@ -16,12 +17,23 @@ import { changePassword } from '../../api/auth';
export default function ChangePasswordForm() {
const navigate = useNavigate();
const [loading, setLoading] = useState(false);
const formData = useRef({ password: '' });
const [formData, setFormData] = useState({ password: '' });
const { recoveryCode } = useParams();

const onFieldDataChanged = useCallback((e<%=#isTypeScript%>: FormTypes.FieldDataChangedEvent<%=/isTypeScript%>) => {
const { dataField, value } = e;

if (dataField) {
setFormData(formData => ({
...formData,
[dataField]: value,
}));
}
}, []);

const onSubmit = useCallback(async (e<%=#isTypeScript%>: React.FormEvent<HTMLFormElement><%=/isTypeScript%>) => {
e.preventDefault();
const { password } = formData.current;
const { password } = formData;
setLoading(true);

const result = await changePassword(password, recoveryCode);
Expand All @@ -32,16 +44,16 @@ export default function ChangePasswordForm() {
} else {
notify(result.message, 'error', 2000);
}
}, [navigate, recoveryCode]);
}, [navigate, recoveryCode, formData]);

const confirmPassword = useCallback(
({ value }<%=#isTypeScript%>: ValidationCallbackData<%=/isTypeScript%>) => value === formData.current.password,
[]
({ value }<%=#isTypeScript%>: ValidationCallbackData<%=/isTypeScript%>) => value === formData.password,
[formData]
);

return (
<form onSubmit={onSubmit}>
<Form formData={formData.current} disabled={loading}>
<Form formData={formData} disabled={loading} onFieldDataChanged={onFieldDataChanged}>
<Item
dataField={'password'}
editorType={'dxTextBox'}
Expand Down
Loading
Loading