@@ -191,6 +195,6 @@ export default function App() {
type="default"
id="validate"
/>
-
+ >
);
}
diff --git a/apps/demos/Demos/Common/EditorAppearanceVariants/React/data.ts b/apps/demos/Demos/Common/EditorAppearanceVariants/React/data.ts
index 1b3a5f300a52..d0dd83023d14 100644
--- a/apps/demos/Demos/Common/EditorAppearanceVariants/React/data.ts
+++ b/apps/demos/Demos/Common/EditorAppearanceVariants/React/data.ts
@@ -1,6 +1,8 @@
-export const states = ['AL', 'AK', 'AZ', 'AR', 'CA', 'CO', 'CT', 'DE', 'FL', 'GA', 'HI', 'ID', 'IL', 'IN', 'IA', 'KS', 'KY', 'LA', 'ME', 'MD', 'MA', 'MI', 'MN', 'MS', 'MO', 'MT', 'NE', 'NV', 'NH', 'NJ', 'NM', 'NY', 'NC', 'ND', 'OH', 'OK', 'OR', 'PA', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VT', 'VA', 'WA', 'WV', 'WI', 'WY'];
-export const stylingModes = ['outlined', 'filled', 'underlined'];
-export const labelModes = ['static', 'floating', 'hidden', 'outside'];
+import type { EditorStyle, LabelMode } from 'devextreme-react/common';
+
+export const states: string[] = ['AL', 'AK', 'AZ', 'AR', 'CA', 'CO', 'CT', 'DE', 'FL', 'GA', 'HI', 'ID', 'IL', 'IN', 'IA', 'KS', 'KY', 'LA', 'ME', 'MD', 'MA', 'MI', 'MN', 'MS', 'MO', 'MT', 'NE', 'NV', 'NH', 'NJ', 'NM', 'NY', 'NC', 'ND', 'OH', 'OK', 'OR', 'PA', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VT', 'VA', 'WA', 'WV', 'WI', 'WY'];
+export const stylingModes: EditorStyle[] = ['outlined', 'filled', 'underlined'];
+export const labelModes: LabelMode[] = ['static', 'floating', 'hidden', 'outside'];
export const notesLabel = { 'aria-label': 'Notes' };
export const birthDateLabel = { 'aria-label': 'Birth Date' };
export const hireDateLabel = { 'aria-label': 'Hire Date' };
diff --git a/apps/demos/Demos/Common/EditorAppearanceVariants/ReactJs/App.js b/apps/demos/Demos/Common/EditorAppearanceVariants/ReactJs/App.js
index 82df0a5ef85a..1f5d7487d83f 100644
--- a/apps/demos/Demos/Common/EditorAppearanceVariants/ReactJs/App.js
+++ b/apps/demos/Demos/Common/EditorAppearanceVariants/ReactJs/App.js
@@ -37,20 +37,14 @@ export default function App() {
const defaultStylingMode = 'outlined';
const [stylingMode, setStylingMode] = useState(defaultStylingMode);
const [labelMode, setLabelMode] = useState('static');
- const changeStylingMode = useCallback(
- ({ value }) => {
- setStylingMode(value);
- },
- [setStylingMode],
- );
- const labelModeChange = useCallback(
- ({ value }) => {
- setLabelMode(value);
- },
- [setLabelMode],
- );
+ const changeStylingMode = useCallback(({ value }) => {
+ setStylingMode(value);
+ }, []);
+ const labelModeChange = useCallback(({ value }) => {
+ setLabelMode(value);
+ }, []);
return (
-
+ <>
Options
@@ -183,6 +177,6 @@ export default function App() {
type="default"
id="validate"
/>
-
+ >
);
}
diff --git a/apps/demos/Demos/Common/EditorsOverview/React/App.tsx b/apps/demos/Demos/Common/EditorsOverview/React/App.tsx
index 4a12a9d5903e..88ac202fc159 100644
--- a/apps/demos/Demos/Common/EditorsOverview/React/App.tsx
+++ b/apps/demos/Demos/Common/EditorsOverview/React/App.tsx
@@ -1,10 +1,15 @@
import React, { useCallback, useState } from 'react';
-import ColorBox, { type ColorBoxTypes } from 'devextreme-react/color-box';
-import NumberBox, { type NumberBoxTypes } from 'devextreme-react/number-box';
-import SelectBox, { type SelectBoxTypes } from 'devextreme-react/select-box';
-import Switch, { type SwitchTypes } from 'devextreme-react/switch';
-import TextBox, { type TextBoxTypes } from 'devextreme-react/text-box';
+import ColorBox from 'devextreme-react/color-box';
+import type { ColorBoxTypes } from 'devextreme-react/color-box';
+import NumberBox from 'devextreme-react/number-box';
+import type { NumberBoxTypes } from 'devextreme-react/number-box';
+import SelectBox from 'devextreme-react/select-box';
+import type { SelectBoxTypes } from 'devextreme-react/select-box';
+import Switch from 'devextreme-react/switch';
+import type { SwitchTypes } from 'devextreme-react/switch';
+import TextBox from 'devextreme-react/text-box';
+import type { TextBoxTypes } from 'devextreme-react/text-box';
import Logo from './Logo.tsx';
@@ -15,7 +20,7 @@ const titleLabel = { 'aria-label': 'Title' };
const transformLabel = { 'aria-label': 'Transform' };
const noFlipTransform = 'scaleX(1)';
-const transformations = [
+const transformations: { key: string, items: { name: string, value: string }[] }[] = [
{
key: 'Flip',
items: [
@@ -36,41 +41,41 @@ const transformations = [
];
function App() {
- const [text, setText] = useState('UI Superhero');
- const [width, setWidth] = useState(370);
- const [height, setHeight] = useState(260);
- const [color, setColor] = useState('#f05b41');
- const [transform, setTransform] = useState(noFlipTransform);
- const [border, setBorder] = useState(false);
+ const [text, setText] = useState
('UI Superhero');
+ const [width, setWidth] = useState(370);
+ const [height, setHeight] = useState(260);
+ const [color, setColor] = useState('#f05b41');
+ const [transform, setTransform] = useState(noFlipTransform);
+ const [border, setBorder] = useState(false);
- const handleTextChange = useCallback((e: TextBoxTypes.ValueChangedEvent) => {
- setText(e.value);
+ const handleTextChange = useCallback(({ value }: TextBoxTypes.ValueChangedEvent): void => {
+ setText(value);
}, []);
- const handleColorChange = useCallback((e: ColorBoxTypes.ValueChangedEvent) => {
- setColor(e.value);
+ const handleColorChange = useCallback(({ value }: ColorBoxTypes.ValueChangedEvent): void => {
+ setColor(value);
}, []);
- const handleHeightChange = useCallback((e: NumberBoxTypes.ValueChangedEvent) => {
- setWidth((e.value * 37) / 26);
- setHeight(e.value);
+ const handleHeightChange = useCallback(({ value }: NumberBoxTypes.ValueChangedEvent): void => {
+ setWidth((value * 37) / 26);
+ setHeight(value);
}, []);
- const handleWidthChange = useCallback((e: NumberBoxTypes.ValueChangedEvent) => {
- setWidth(e.value);
- setHeight((e.value * 26) / 37);
+ const handleWidthChange = useCallback(({ value }: NumberBoxTypes.ValueChangedEvent): void => {
+ setWidth(value);
+ setHeight((value * 26) / 37);
}, []);
- const handleTransformChange = useCallback((e: SelectBoxTypes.ValueChangedEvent) => {
- setTransform(e.value);
+ const handleTransformChange = useCallback(({ value }: SelectBoxTypes.ValueChangedEvent): void => {
+ setTransform(value);
}, []);
- const handleBorderChange = useCallback((e: SwitchTypes.ValueChangedEvent) => {
- setBorder(e.value);
+ const handleBorderChange = useCallback(({ value }: SwitchTypes.ValueChangedEvent): void => {
+ setBorder(value);
}, []);
return (
-
+ <>
@@ -163,7 +168,7 @@ function App() {
transform={transform}
border={border}
/>
-
+ >
);
}
diff --git a/apps/demos/Demos/Common/EditorsOverview/React/Logo.tsx b/apps/demos/Demos/Common/EditorsOverview/React/Logo.tsx
index 767ce8fd7e26..9c43a86d3c55 100644
--- a/apps/demos/Demos/Common/EditorsOverview/React/Logo.tsx
+++ b/apps/demos/Demos/Common/EditorsOverview/React/Logo.tsx
@@ -9,185 +9,191 @@ interface LogoProps {
border: boolean;
}
-class Logo extends React.PureComponent
{
- render() {
- const { props } = this;
- return (
+function Logo(props: LogoProps) {
+ const {
+ text,
+ width,
+ height,
+ color,
+ transform,
+ border,
+ } = props;
+
+ return (
+
-
-
-
-
- {props.text}
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {text}
- );
- }
+
+ );
}
export default Logo;
diff --git a/apps/demos/Demos/Common/EditorsOverview/ReactJs/App.js b/apps/demos/Demos/Common/EditorsOverview/ReactJs/App.js
index 1a7785282082..ff70d120db72 100644
--- a/apps/demos/Demos/Common/EditorsOverview/ReactJs/App.js
+++ b/apps/demos/Demos/Common/EditorsOverview/ReactJs/App.js
@@ -38,28 +38,28 @@ function App() {
const [color, setColor] = useState('#f05b41');
const [transform, setTransform] = useState(noFlipTransform);
const [border, setBorder] = useState(false);
- const handleTextChange = useCallback((e) => {
- setText(e.value);
+ const handleTextChange = useCallback(({ value }) => {
+ setText(value);
}, []);
- const handleColorChange = useCallback((e) => {
- setColor(e.value);
+ const handleColorChange = useCallback(({ value }) => {
+ setColor(value);
}, []);
- const handleHeightChange = useCallback((e) => {
- setWidth((e.value * 37) / 26);
- setHeight(e.value);
+ const handleHeightChange = useCallback(({ value }) => {
+ setWidth((value * 37) / 26);
+ setHeight(value);
}, []);
- const handleWidthChange = useCallback((e) => {
- setWidth(e.value);
- setHeight((e.value * 26) / 37);
+ const handleWidthChange = useCallback(({ value }) => {
+ setWidth(value);
+ setHeight((value * 26) / 37);
}, []);
- const handleTransformChange = useCallback((e) => {
- setTransform(e.value);
+ const handleTransformChange = useCallback(({ value }) => {
+ setTransform(value);
}, []);
- const handleBorderChange = useCallback((e) => {
- setBorder(e.value);
+ const handleBorderChange = useCallback(({ value }) => {
+ setBorder(value);
}, []);
return (
-
+ <>
@@ -152,7 +152,7 @@ function App() {
transform={transform}
border={border}
/>
-
+ >
);
}
export default App;
diff --git a/apps/demos/Demos/Common/EditorsOverview/ReactJs/Logo.js b/apps/demos/Demos/Common/EditorsOverview/ReactJs/Logo.js
index 263f14662db0..37d92fb81f7c 100644
--- a/apps/demos/Demos/Common/EditorsOverview/ReactJs/Logo.js
+++ b/apps/demos/Demos/Common/EditorsOverview/ReactJs/Logo.js
@@ -1,183 +1,183 @@
import React from 'react';
-class Logo extends React.PureComponent {
- render() {
- const { props } = this;
- return (
+function Logo(props) {
+ const {
+ text, width, height, color, transform, border,
+ } = props;
+ return (
+
-
-
-
-
- {props.text}
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {text}
- );
- }
+
+ );
}
export default Logo;
diff --git a/apps/demos/Demos/Common/EditorsRightToLeftSupport/React/App.tsx b/apps/demos/Demos/Common/EditorsRightToLeftSupport/React/App.tsx
index fb2aaa83b81d..fd53c233ab28 100644
--- a/apps/demos/Demos/Common/EditorsRightToLeftSupport/React/App.tsx
+++ b/apps/demos/Demos/Common/EditorsRightToLeftSupport/React/App.tsx
@@ -1,6 +1,7 @@
import React, { useCallback, useState } from 'react';
import { NumberBox } from 'devextreme-react/number-box';
-import { SelectBox, type SelectBoxTypes } from 'devextreme-react/select-box';
+import { SelectBox } from 'devextreme-react/select-box';
+import type { SelectBoxTypes } from 'devextreme-react/select-box';
import { Switch } from 'devextreme-react/switch';
import { TextBox } from 'devextreme-react/text-box';
import { Autocomplete } from 'devextreme-react/autocomplete';
@@ -18,15 +19,15 @@ import {
autocompleteLabel,
} from './data.ts';
-const languages = ['Arabic: Right-to-Left direction', 'English: Left-to-Right direction'];
-const tagBoxDefaultValue = [europeanUnion[0].id];
+const languages: string[] = ['Arabic: Right-to-Left direction', 'English: Left-to-Right direction'];
+const tagBoxDefaultValue: number[] = [europeanUnion[0].id];
function App() {
- const [rtlEnabled, setRtlEnabled] = useState(false);
- const [displayExpr, setDisplayExpr] = useState('nameEn');
- const [textValue, setTextValue] = useState('text');
+ const [rtlEnabled, setRtlEnabled] = useState
(false);
+ const [displayExpr, setDisplayExpr] = useState('nameEn');
+ const [textValue, setTextValue] = useState('text');
- const onLanguageChanged = useCallback((args: SelectBoxTypes.ValueChangedEvent) => {
+ const onLanguageChanged = useCallback((args: SelectBoxTypes.ValueChangedEvent): void => {
const isRTL = args.value === languages[0];
setDisplayExpr(isRTL ? 'nameAr' : 'nameEn');
diff --git a/apps/demos/Demos/Common/EditorsRightToLeftSupport/React/data.ts b/apps/demos/Demos/Common/EditorsRightToLeftSupport/React/data.ts
index e141d7406927..b4c322d95e7e 100644
--- a/apps/demos/Demos/Common/EditorsRightToLeftSupport/React/data.ts
+++ b/apps/demos/Demos/Common/EditorsRightToLeftSupport/React/data.ts
@@ -1,4 +1,6 @@
-export const europeanUnion = [{
+import type { EuropeanUnionCountries } from './types.ts';
+
+export const europeanUnion: EuropeanUnionCountries[] = [{
id: 1,
nameAr: 'النمسا',
nameEn: 'Austria',
diff --git a/apps/demos/Demos/Common/EditorsRightToLeftSupport/React/types.ts b/apps/demos/Demos/Common/EditorsRightToLeftSupport/React/types.ts
new file mode 100644
index 000000000000..1bc6db523e2d
--- /dev/null
+++ b/apps/demos/Demos/Common/EditorsRightToLeftSupport/React/types.ts
@@ -0,0 +1,5 @@
+export type EuropeanUnionCountries = {
+ id: number,
+ nameAr: string,
+ nameEn: string,
+};
diff --git a/apps/demos/Demos/Common/PopupAndNotificationsOverview/React/App.tsx b/apps/demos/Demos/Common/PopupAndNotificationsOverview/React/App.tsx
index 114ea1387338..bab79a36c7bc 100644
--- a/apps/demos/Demos/Common/PopupAndNotificationsOverview/React/App.tsx
+++ b/apps/demos/Demos/Common/PopupAndNotificationsOverview/React/App.tsx
@@ -3,6 +3,7 @@ import notify from 'devextreme/ui/notify';
import Button from 'devextreme-react/button';
import Popup from 'devextreme-react/popup';
import { housesSource } from './data.ts';
+import type { HouseType } from './types.ts';
import { House } from './House.tsx';
const ADD_TO_FAVORITES = 'Add to Favorites';
@@ -20,13 +21,13 @@ const favButtonAttrs = {
};
export default function App() {
- const [houses, setHouses] = useState(housesSource);
+ const [houses, setHouses] = useState(housesSource);
const [currentHouse, setCurrentHouse] = useState(housesSource[0]);
- const [popupVisible, setPopupVisible] = useState(false);
+ const [popupVisible, setPopupVisible] = useState(false);
const changeFavoriteState = useCallback(() => {
const updatedHouses = [...houses];
- const updatedCurrentHouse = updatedHouses.find((house) => house === currentHouse);
+ const updatedCurrentHouse = updatedHouses.find((house: HouseType): boolean => house === currentHouse);
updatedCurrentHouse.Favorite = !updatedCurrentHouse.Favorite;
setHouses(updatedHouses);
@@ -36,7 +37,7 @@ export default function App() {
},
updatedCurrentHouse.Favorite ? 'success' : 'error',
2000);
- }, [houses, currentHouse, setHouses]);
+ }, [houses, currentHouse]);
const renderPopup = useCallback(() => (
@@ -58,22 +59,22 @@ export default function App() {
), [currentHouse, changeFavoriteState]);
- const showHouse = useCallback((house) => {
+ const showHouse = useCallback((house: HouseType): void => {
setCurrentHouse(house);
setPopupVisible(true);
- }, [setCurrentHouse, setPopupVisible]);
+ }, []);
const handlePopupHidden = useCallback(() => {
setPopupVisible(false);
- }, [setPopupVisible]);
+ }, []);
return (
{
- houses.map((h) =>
)
}
void;
}
export function House(props: HouseProps) {
diff --git a/apps/demos/Demos/Common/PopupAndNotificationsOverview/React/data.ts b/apps/demos/Demos/Common/PopupAndNotificationsOverview/React/data.ts
index 6f0084f5cfd0..df4b5c42b8c2 100644
--- a/apps/demos/Demos/Common/PopupAndNotificationsOverview/React/data.ts
+++ b/apps/demos/Demos/Common/PopupAndNotificationsOverview/React/data.ts
@@ -1,4 +1,6 @@
-export const housesSource = [{
+import type { HouseType } from './types.ts';
+
+export const housesSource: HouseType[] = [{
ID: '1',
Favorite: false,
Address: '652 Avonwick Gate',
diff --git a/apps/demos/Demos/Common/PopupAndNotificationsOverview/React/types.ts b/apps/demos/Demos/Common/PopupAndNotificationsOverview/React/types.ts
new file mode 100644
index 000000000000..ed1cf6849aa0
--- /dev/null
+++ b/apps/demos/Demos/Common/PopupAndNotificationsOverview/React/types.ts
@@ -0,0 +1,24 @@
+export type HouseType = {
+ ID: string;
+ Favorite: boolean;
+ Address: string;
+ City: string;
+ State: string;
+ ZipCode: string;
+ Beds: string;
+ Baths: string;
+ HouseSize: number;
+ LotSize: string;
+ Price: number;
+ Coordinates: string;
+ Features: string;
+ YearBuilt: string;
+ Type: string;
+ Status: string;
+ Image: string;
+ Agent: {
+ Name: string;
+ Phone: string;
+ Picture: string;
+ };
+};
diff --git a/apps/demos/Demos/Common/PopupAndNotificationsOverview/ReactJs/App.js b/apps/demos/Demos/Common/PopupAndNotificationsOverview/ReactJs/App.js
index 1e176f320036..2047bd8c506b 100644
--- a/apps/demos/Demos/Common/PopupAndNotificationsOverview/ReactJs/App.js
+++ b/apps/demos/Demos/Common/PopupAndNotificationsOverview/ReactJs/App.js
@@ -35,7 +35,7 @@ export default function App() {
updatedCurrentHouse.Favorite ? 'success' : 'error',
2000,
);
- }, [houses, currentHouse, setHouses]);
+ }, [houses, currentHouse]);
const renderPopup = useCallback(
() => (
@@ -66,23 +66,20 @@ export default function App() {
),
[currentHouse, changeFavoriteState],
);
- const showHouse = useCallback(
- (house) => {
- setCurrentHouse(house);
- setPopupVisible(true);
- },
- [setCurrentHouse, setPopupVisible],
- );
+ const showHouse = useCallback((house) => {
+ setCurrentHouse(house);
+ setPopupVisible(true);
+ }, []);
const handlePopupHidden = useCallback(() => {
setPopupVisible(false);
- }, [setPopupVisible]);
+ }, []);
return (
- {houses.map((h) => (
+ {houses.map((house) => (
))}
(new Date(1981, 3, 27));
const now = new Date();
const firstWorkDay2017 = new Date(2017, 0, 3);
const min = new Date(1900, 0, 1);
const dateClear = new Date(2015, 11, 1, 6);
- const disabledDates = service.getFederalHolidays();
+ const disabledDates = federalHolidays;
const diffInDay = useMemo(
- () =>
+ (): string =>
`${Math.floor(
Math.abs((new Date().getTime() - value.getTime()) / (24 * 60 * 60 * 1000)),
)} days`,
[value],
);
- const onValueChanged = useCallback((e: DateBoxTypes.ValueChangedEvent) => {
+ const onValueChanged = useCallback((e: DateBoxTypes.ValueChangedEvent): void => {
setValue(e.value);
}, []);
diff --git a/apps/demos/Demos/DateBox/Overview/React/data.ts b/apps/demos/Demos/DateBox/Overview/React/data.ts
index dcc94a4d6bd3..2412382450c3 100644
--- a/apps/demos/Demos/DateBox/Overview/React/data.ts
+++ b/apps/demos/Demos/DateBox/Overview/React/data.ts
@@ -1,4 +1,4 @@
-const federalHolidays = [
+export const federalHolidays: Date[] = [
new Date(2017, 0, 1),
new Date(2017, 0, 2),
new Date(2017, 0, 16),
@@ -11,9 +11,3 @@ const federalHolidays = [
new Date(2017, 10, 23),
new Date(2017, 11, 25),
];
-
-export default {
- getFederalHolidays() {
- return federalHolidays;
- },
-};
diff --git a/apps/demos/Demos/DateBox/Overview/ReactJs/App.js b/apps/demos/Demos/DateBox/Overview/ReactJs/App.js
index 43fcb1dea6df..4a8861f2e833 100644
--- a/apps/demos/Demos/DateBox/Overview/ReactJs/App.js
+++ b/apps/demos/Demos/DateBox/Overview/ReactJs/App.js
@@ -1,6 +1,6 @@
import React, { useCallback, useMemo, useState } from 'react';
import DateBox from 'devextreme-react/date-box';
-import service from './data.js';
+import { federalHolidays } from './data.js';
const dateTimeLabel = { 'aria-label': 'Date Time' };
const dateLabel = { 'aria-label': 'Date' };
@@ -16,7 +16,7 @@ function App() {
const firstWorkDay2017 = new Date(2017, 0, 3);
const min = new Date(1900, 0, 1);
const dateClear = new Date(2015, 11, 1, 6);
- const disabledDates = service.getFederalHolidays();
+ const disabledDates = federalHolidays;
const diffInDay = useMemo(
() =>
`${Math.floor(
diff --git a/apps/demos/Demos/DateBox/Overview/ReactJs/data.js b/apps/demos/Demos/DateBox/Overview/ReactJs/data.js
index 4df8804adab1..484d2efe2142 100644
--- a/apps/demos/Demos/DateBox/Overview/ReactJs/data.js
+++ b/apps/demos/Demos/DateBox/Overview/ReactJs/data.js
@@ -1,4 +1,4 @@
-const federalHolidays = [
+export const federalHolidays = [
new Date(2017, 0, 1),
new Date(2017, 0, 2),
new Date(2017, 0, 16),
@@ -11,8 +11,3 @@ const federalHolidays = [
new Date(2017, 10, 23),
new Date(2017, 11, 25),
];
-export default {
- getFederalHolidays() {
- return federalHolidays;
- },
-};
diff --git a/apps/demos/Demos/DateRangeBox/Formatting/React/App.tsx b/apps/demos/Demos/DateRangeBox/Formatting/React/App.tsx
index 6a6186dffc63..4e8e838f875d 100644
--- a/apps/demos/Demos/DateRangeBox/Formatting/React/App.tsx
+++ b/apps/demos/Demos/DateRangeBox/Formatting/React/App.tsx
@@ -1,12 +1,13 @@
import React from 'react';
import DateRangeBox from 'devextreme-react/date-range-box';
+import type { DateRangeBoxTypes } from 'devextreme-react/date-range-box';
const msInDay = 1000 * 60 * 60 * 24;
const now = new Date();
const startDate = new Date(now.getTime() - msInDay * 3);
const endDate = new Date(now.getTime() + msInDay * 3);
-const commonSettings = {
+const commonSettings: DateRangeBoxTypes.Properties = {
showClearButton: true,
useMaskBehavior: true,
openOnFieldClick: false,
diff --git a/apps/demos/Demos/DateRangeBox/Overview/React/App.tsx b/apps/demos/Demos/DateRangeBox/Overview/React/App.tsx
index 05fae88a1776..b3340acc6632 100644
--- a/apps/demos/Demos/DateRangeBox/Overview/React/App.tsx
+++ b/apps/demos/Demos/DateRangeBox/Overview/React/App.tsx
@@ -1,5 +1,6 @@
import React, { useCallback, useState } from 'react';
import DateRangeBox from 'devextreme-react/date-range-box';
+import type { DateRangeBoxTypes } from 'devextreme-react/date-range-box';
const msInDay = 1000 * 60 * 60 * 24;
const now = new Date();
@@ -11,17 +12,17 @@ const initialValue: [Date, Date] = [
const min = new Date(now.setDate(1));
const max = new Date(now.setDate(lastDay));
-function convertRangeToDays([startDate, endDate]: [Date, Date]) {
+function convertRangeToDays([startDate, endDate]: [Date, Date]): number {
const diffInDay = Math.floor(Math.abs((endDate.valueOf() - startDate.valueOf()) / msInDay));
return diffInDay + 1;
}
export default function App() {
- const [selectedDays, setSelectedDays] = useState(convertRangeToDays(initialValue));
+ const [selectedDays, setSelectedDays] = useState(convertRangeToDays(initialValue));
const onCurrentValueChange = useCallback(
- ({ value: [startDate, endDate] }) => {
+ ({ value: [startDate, endDate] }: DateRangeBoxTypes.ValueChangedEvent): void => {
let daysCount = 0;
if (startDate && endDate) {
@@ -30,7 +31,7 @@ export default function App() {
setSelectedDays(daysCount);
},
- [setSelectedDays],
+ [],
);
return (
diff --git a/apps/demos/Demos/DateRangeBox/Overview/ReactJs/App.js b/apps/demos/Demos/DateRangeBox/Overview/ReactJs/App.js
index d7c77795b41a..3cdbd491c234 100644
--- a/apps/demos/Demos/DateRangeBox/Overview/ReactJs/App.js
+++ b/apps/demos/Demos/DateRangeBox/Overview/ReactJs/App.js
@@ -13,16 +13,13 @@ function convertRangeToDays([startDate, endDate]) {
}
export default function App() {
const [selectedDays, setSelectedDays] = useState(convertRangeToDays(initialValue));
- const onCurrentValueChange = useCallback(
- ({ value: [startDate, endDate] }) => {
- let daysCount = 0;
- if (startDate && endDate) {
- daysCount = convertRangeToDays([startDate, endDate]);
- }
- setSelectedDays(daysCount);
- },
- [setSelectedDays],
- );
+ const onCurrentValueChange = useCallback(({ value: [startDate, endDate] }) => {
+ let daysCount = 0;
+ if (startDate && endDate) {
+ daysCount = convertRangeToDays([startDate, endDate]);
+ }
+ setSelectedDays(daysCount);
+ }, []);
return (
diff --git a/apps/demos/Demos/DropDownBox/MultipleSelection/React/App.tsx b/apps/demos/Demos/DropDownBox/MultipleSelection/React/App.tsx
index 59137e33ae82..21ecddeba9a9 100644
--- a/apps/demos/Demos/DropDownBox/MultipleSelection/React/App.tsx
+++ b/apps/demos/Demos/DropDownBox/MultipleSelection/React/App.tsx
@@ -1,20 +1,22 @@
import React, { useCallback, useRef, useState } from 'react';
-import DropDownBox, { type DropDownBoxTypes } from 'devextreme-react/drop-down-box';
-import TreeView, { TreeViewRef } from 'devextreme-react/tree-view';
+import DropDownBox from 'devextreme-react/drop-down-box';
+import type { DropDownBoxTypes } from 'devextreme-react/drop-down-box';
+import TreeView from 'devextreme-react/tree-view';
+import type { TreeViewRef } from 'devextreme-react/tree-view';
import DataGrid, {
Selection,
Paging,
FilterRow,
Scrolling,
- type DataGridTypes,
} from 'devextreme-react/data-grid';
+import type { DataGridTypes } from 'devextreme-react/data-grid';
import { CustomStore } from 'devextreme-react/common/data';
import 'whatwg-fetch';
const gridColumns = ['CompanyName', 'City', 'Phone'];
const ownerLabel = { 'aria-label': 'Owner' };
-const makeAsyncDataSource = (jsonFile: string) =>
+const makeAsyncDataSource = (jsonFile: string): CustomStore =>
new CustomStore({
loadMode: 'raw',
key: 'ID',
@@ -27,12 +29,12 @@ const treeDataSource = makeAsyncDataSource('treeProducts.json');
const gridDataSource = makeAsyncDataSource('customers.json');
function App() {
- const [treeBoxValue, setTreeBoxValue] = useState(['1_1']);
- const [gridBoxValue, setGridBoxValue] = useState([3]);
- const treeViewRef = useRef
();
+ const [treeBoxValue, setTreeBoxValue] = useState(['1_1']);
+ const [gridBoxValue, setGridBoxValue] = useState([3]);
+ const treeViewRef = useRef(null);
const syncTreeViewSelection = useCallback(
- (e: DropDownBoxTypes.ValueChangedEvent | any) => {
+ (e): void => {
const treeView = (e.component.selectItem && e.component)
|| (treeViewRef.current?.instance());
@@ -41,7 +43,7 @@ function App() {
treeView.unselectAll();
} else {
const values = e.value || treeBoxValue;
- values?.forEach((value) => {
+ values?.forEach((value): void => {
treeView.selectItem(value);
});
}
@@ -54,18 +56,18 @@ function App() {
[treeBoxValue],
);
- const syncDataGridSelection = useCallback((e: DropDownBoxTypes.ValueChangedEvent) => {
+ const syncDataGridSelection = useCallback((e: DropDownBoxTypes.ValueChangedEvent): void => {
setGridBoxValue(e.value || []);
}, []);
const treeViewItemSelectionChanged = useCallback(
- (e: { component: { getSelectedNodeKeys: () => any } }) => {
+ (e: { component: { getSelectedNodeKeys: () => any } }): void => {
setTreeBoxValue(e.component.getSelectedNodeKeys());
},
[],
);
- const dataGridOnSelectionChanged = useCallback((e: DataGridTypes.SelectionChangedEvent) => {
+ const dataGridOnSelectionChanged = useCallback((e: DataGridTypes.SelectionChangedEvent): void => {
setGridBoxValue((e.selectedRowKeys.length && e.selectedRowKeys) || []);
}, []);
diff --git a/apps/demos/Demos/DropDownBox/MultipleSelection/ReactJs/App.js b/apps/demos/Demos/DropDownBox/MultipleSelection/ReactJs/App.js
index 27927c8c928d..f20f08ecef81 100644
--- a/apps/demos/Demos/DropDownBox/MultipleSelection/ReactJs/App.js
+++ b/apps/demos/Demos/DropDownBox/MultipleSelection/ReactJs/App.js
@@ -22,7 +22,7 @@ const gridDataSource = makeAsyncDataSource('customers.json');
function App() {
const [treeBoxValue, setTreeBoxValue] = useState(['1_1']);
const [gridBoxValue, setGridBoxValue] = useState([3]);
- const treeViewRef = useRef();
+ const treeViewRef = useRef(null);
const syncTreeViewSelection = useCallback(
(e) => {
const treeView = (e.component.selectItem && e.component) || treeViewRef.current?.instance();
diff --git a/apps/demos/Demos/DropDownBox/SingleSelection/React/App.tsx b/apps/demos/Demos/DropDownBox/SingleSelection/React/App.tsx
index 191ad20da1b2..c13227354eb0 100644
--- a/apps/demos/Demos/DropDownBox/SingleSelection/React/App.tsx
+++ b/apps/demos/Demos/DropDownBox/SingleSelection/React/App.tsx
@@ -1,52 +1,57 @@
import React, { useCallback, useRef, useState } from 'react';
-import DropDownBox, { type DropDownBoxTypes } from 'devextreme-react/drop-down-box';
-import TreeView, { type TreeViewTypes } from 'devextreme-react/tree-view';
+import DropDownBox from 'devextreme-react/drop-down-box';
+import type { DropDownBoxTypes } from 'devextreme-react/drop-down-box';
+import TreeView from 'devextreme-react/tree-view';
+import type { TreeViewTypes, TreeViewRef } from 'devextreme-react/tree-view';
import DataGrid, {
- Selection, Paging, FilterRow, Scrolling,
+ Selection,
+ Paging,
+ FilterRow,
+ Scrolling,
} from 'devextreme-react/data-grid';
import { CustomStore } from 'devextreme-react/common/data';
import 'whatwg-fetch';
-const gridColumns = ['CompanyName', 'City', 'Phone'];
+const gridColumns: string[] = ['CompanyName', 'City', 'Phone'];
const ownerLabel = { 'aria-label': 'Owner' };
-const makeAsyncDataSource = (jsonFile: string) =>
+const makeAsyncDataSource = (jsonFile: string): CustomStore =>
new CustomStore({
loadMode: 'raw',
key: 'ID',
load() {
- return fetch(`../../../../data/${jsonFile}`).then((response) => response.json());
+ return fetch(`../../../../data/${jsonFile}`).then((response: Response) => response.json());
},
});
const treeDataSource = makeAsyncDataSource('treeProducts.json');
const gridDataSource = makeAsyncDataSource('customers.json');
-const gridBoxDisplayExpr = (item: { CompanyName: any; Phone: any }) =>
+const gridBoxDisplayExpr = (item: { CompanyName: any; Phone: any }): string =>
item && `${item.CompanyName} <${item.Phone}>`;
function App() {
- const treeViewRef = useRef(null);
- const [treeBoxValue, setTreeBoxValue] = useState('1_1');
- const [gridBoxValue, setGridBoxValue] = useState([3]);
- const [isGridBoxOpened, setIsGridBoxOpened] = useState(false);
- const [isTreeBoxOpened, setIsTreeBoxOpened] = useState(false);
+ const treeViewRef = useRef(null);
+ const [treeBoxValue, setTreeBoxValue] = useState('1_1');
+ const [gridBoxValue, setGridBoxValue] = useState([3]);
+ const [isGridBoxOpened, setIsGridBoxOpened] = useState(false);
+ const [isTreeBoxOpened, setIsTreeBoxOpened] = useState(false);
const treeViewItemSelectionChanged = useCallback(
- (e: { component: { getSelectedNodeKeys: () => any } }) => {
+ (e: { component: { getSelectedNodeKeys: () => any } }): void => {
const selectedKeys = e.component.getSelectedNodeKeys();
setTreeBoxValue(selectedKeys.length > 0 ? selectedKeys[0] : null);
},
[],
);
- const dataGridOnSelectionChanged = useCallback((e: { selectedRowKeys: any }) => {
+ const dataGridOnSelectionChanged = useCallback((e: { selectedRowKeys: any }): void => {
setGridBoxValue(e.selectedRowKeys);
setIsGridBoxOpened(false);
}, []);
const treeViewOnContentReady = useCallback(
- (e: TreeViewTypes.ContentReadyEvent) => {
+ (e: TreeViewTypes.ContentReadyEvent): void => {
e.component.selectItem(treeBoxValue);
},
[treeBoxValue],
@@ -93,7 +98,7 @@ function App() {
[gridBoxValue, dataGridOnSelectionChanged],
);
- const syncTreeViewSelection = useCallback((e: DropDownBoxTypes.ValueChangedEvent) => {
+ const syncTreeViewSelection = useCallback((e: DropDownBoxTypes.ValueChangedEvent): void => {
setTreeBoxValue(e.value);
if (!treeViewRef.current) return;
@@ -106,17 +111,17 @@ function App() {
setIsTreeBoxOpened(false);
}, []);
- const syncDataGridSelection = useCallback((e: DropDownBoxTypes.ValueChangedEvent) => {
+ const syncDataGridSelection = useCallback((e: DropDownBoxTypes.ValueChangedEvent): void => {
setGridBoxValue(e.value);
}, []);
- const onGridBoxOpened = useCallback((e: DropDownBoxTypes.OptionChangedEvent) => {
+ const onGridBoxOpened = useCallback((e: DropDownBoxTypes.OptionChangedEvent): void => {
if (e.name === 'opened') {
setIsGridBoxOpened(e.value);
}
}, []);
- const onTreeBoxOpened = useCallback((e: DropDownBoxTypes.OptionChangedEvent) => {
+ const onTreeBoxOpened = useCallback((e: DropDownBoxTypes.OptionChangedEvent): void => {
if (e.name === 'opened') {
setIsTreeBoxOpened(e.value);
}
diff --git a/apps/demos/Demos/DropDownButton/Overview/React/App.tsx b/apps/demos/Demos/DropDownButton/Overview/React/App.tsx
index 809ba74a0707..6f3e1cf92f15 100644
--- a/apps/demos/Demos/DropDownButton/Overview/React/App.tsx
+++ b/apps/demos/Demos/DropDownButton/Overview/React/App.tsx
@@ -1,52 +1,60 @@
import React, { useCallback, useMemo, useState } from 'react';
-import DropDownButton, { type DropDownButtonTypes } from 'devextreme-react/drop-down-button';
+import DropDownButton from 'devextreme-react/drop-down-button';
+import type { DropDownButtonTypes, DropDownButtonRef } from 'devextreme-react/drop-down-button';
import Toolbar from 'devextreme-react/toolbar';
+import type { ToolbarTypes } from 'devextreme-react/toolbar';
import { Template } from 'devextreme-react/core/template';
-import { type ButtonTypes } from 'devextreme-react/button';
+import type { ButtonTypes } from 'devextreme-react/button';
import notify from 'devextreme/ui/notify';
-import service from './data.ts';
+import {
+ colors,
+ downloads,
+ alignments,
+ profileSettings,
+ fontSizes,
+ lineHeights,
+} from './data.ts';
+import type { TextAlign } from './types.ts';
import ColorIcon from './ColorIcon.tsx';
import DropDownButtonTemplate from './DropDownButtonTemplate.tsx';
import 'whatwg-fetch';
-type TextAlign = 'center' | 'end' | 'justify' | 'left' | 'match-parent' | 'right' | 'start';
-
const buttonDropDownOptions = { width: 230 };
-const data = service.getData();
-
const itemTemplateRender: React.FC<{ size: number; text: string }> = (item) => (
{item.text}
);
-const App: React.FC = () => {
+const App = () => {
const [alignment, setAlignment] = useState('left');
- const [color, setColor] = useState(null);
- const [fontSize, setFontSize] = useState(14);
- const [lineHeight, setLineHeight] = useState(1.35);
- const [colorPicker, setColorPicker] = useState(null);
+ const [color, setColor] = useState(null);
+ const [fontSize, setFontSize] = useState(14);
+ const [lineHeight, setLineHeight] = useState(1.35);
+
+ type ColorPicker = ReturnType;
+ const [colorPicker, setColorPicker] = useState(undefined);
- const onButtonClick = useCallback((e: ButtonTypes.ClickEvent) => {
+ const onButtonClick = useCallback((e: ButtonTypes.ClickEvent): void => {
notify(`Go to ${e.element.querySelector('.button-title').textContent}'s profile`, 'success', 600);
}, []);
- const onItemClick = useCallback((e: DropDownButtonTypes.ItemClickEvent) => {
+ const onItemClick = useCallback((e: DropDownButtonTypes.ItemClickEvent): void => {
notify(e.itemData.name || e.itemData, 'success', 600);
}, []);
- const onColorClick = useCallback((selectedColor) => {
+ const onColorClick = useCallback((selectedColor: string): void => {
setColor(selectedColor);
- const squareIcon = colorPicker.element().getElementsByClassName('dx-icon-square')[0];
+ const squareIcon = colorPicker?.element().getElementsByClassName('dx-icon-square')[0] as HTMLElement;
squareIcon.style.color = selectedColor;
- colorPicker.close();
+ colorPicker?.close();
}, [colorPicker]);
- const onInitialized = useCallback((e: DropDownButtonTypes.InitializedEvent) => {
+ const onInitialized = useCallback((e: DropDownButtonTypes.InitializedEvent): void => {
setColorPicker(e.component);
- }, [setColorPicker]);
+ }, []);
- const toolbarItems = useMemo(() => [
+ const toolbarItems = useMemo((): ToolbarTypes.Item[] => [
{
location: 'before',
widget: 'dxDropDownButton',
@@ -57,17 +65,17 @@ const App: React.FC = () => {
width: 125,
stylingMode: 'text',
useSelectMode: true,
- onSelectionChanged: (e): void => {
+ onSelectionChanged: (e: DropDownButtonTypes.SelectionChangedEvent): void => {
setAlignment(e.item.name.toLowerCase());
},
- items: data.alignments,
+ items: alignments,
},
},
{
location: 'before',
widget: 'dxDropDownButton',
options: {
- items: data.colors,
+ items: colors,
icon: 'square',
stylingMode: 'text',
dropDownOptions: { width: 'auto' },
@@ -83,7 +91,7 @@ const App: React.FC = () => {
displayExpr: 'text',
keyExpr: 'size',
useSelectMode: true,
- items: data.fontSizes,
+ items: fontSizes,
selectedItemKey: 14,
onSelectionChanged: (e: DropDownButtonTypes.SelectionChangedEvent): void => {
setFontSize(e.item.size);
@@ -100,14 +108,14 @@ const App: React.FC = () => {
displayExpr: 'text',
keyExpr: 'lineHeight',
useSelectMode: true,
- items: data.lineHeights,
+ items: lineHeights,
selectedItemKey: 1.35,
onSelectionChanged: (e: DropDownButtonTypes.SelectionChangedEvent): void => {
setLineHeight(e.item.lineHeight);
},
},
},
- ], [setAlignment, setFontSize, setLineHeight, onInitialized]);
+ ], [onInitialized]);
return (
@@ -122,7 +130,7 @@ const App: React.FC = () => {
text="Download Trial"
icon="save"
dropDownOptions={buttonDropDownOptions}
- items={data.downloads}
+ items={downloads}
onItemClick={onItemClick}
/>
@@ -137,7 +145,7 @@ const App: React.FC = () => {
id="custom-template"
splitButton={true}
useSelectMode={false}
- items={data.profileSettings}
+ items={profileSettings}
displayExpr="name"
keyExpr="id"
onButtonClick={onButtonClick}
@@ -155,7 +163,7 @@ const App: React.FC = () => {
- {data.colors.map((colorValue, i) => (
+ {colors.map((colorValue: string | null, i: number) => (
))}
@@ -165,7 +173,7 @@ const App: React.FC = () => {
void;
}
-class ColorIcon extends React.Component
{
- constructor(props) {
- super(props);
- this.onClick = this.onClick.bind(this);
- }
-
- onClick(): void {
- this.props.onClick(this.props.color);
- }
-
- render() {
- return (
-
- );
- }
-}
+const ColorIcon = ({ color, onClick }: ColorIconProps) => (
+ onClick(color)}
+ className="color dx-icon dx-icon-square"
+ style={{ color }}
+ />
+);
export default ColorIcon;
diff --git a/apps/demos/Demos/DropDownButton/Overview/React/DropDownButtonTemplate.tsx b/apps/demos/Demos/DropDownButton/Overview/React/DropDownButtonTemplate.tsx
index ab433b020eef..f86956107a39 100644
--- a/apps/demos/Demos/DropDownButton/Overview/React/DropDownButtonTemplate.tsx
+++ b/apps/demos/Demos/DropDownButton/Overview/React/DropDownButtonTemplate.tsx
@@ -1,24 +1,33 @@
import React from 'react';
-const Avatar: React.FC<{ icon: string }> = ({ icon }) => (
+interface AvatarProps {
+ icon: string;
+}
+
+const Avatar = ({ icon }: AvatarProps) => (
);
-const ButtonDescription: React.FC<{ text: string; description: string }> = ({ text, description }) => (
+interface ButtonDescriptionProps {
+ text: string;
+ description: string;
+}
+
+const ButtonDescription = ({ text, description }: ButtonDescriptionProps) => (
);
-const DropDownButtonTemplate: React.FC = () => (
-
+const DropDownButtonTemplate = () => (
+ <>
-
+ >
);
export default DropDownButtonTemplate;
diff --git a/apps/demos/Demos/DropDownButton/Overview/React/data.ts b/apps/demos/Demos/DropDownButton/Overview/React/data.ts
index 837c6bb27781..749de34aa2f2 100644
--- a/apps/demos/Demos/DropDownButton/Overview/React/data.ts
+++ b/apps/demos/Demos/DropDownButton/Overview/React/data.ts
@@ -1,36 +1,33 @@
-const colors = [null, '#980000', '#ff0000', '#ff9900', '#ffff00', '#00ff00', '#00ffff', '#4a86e8', '#0000ff', '#9900ff', '#ff00ff', '#ff3466'];
-const profileSettings = [
+import type { ProfileSetting, Alignment, FontSize, LineHeight } from './types.ts';
+
+export const colors: (string | null)[] = [null, '#980000', '#ff0000', '#ff9900', '#ffff00', '#00ff00', '#00ffff', '#4a86e8', '#0000ff', '#9900ff', '#ff00ff', '#ff3466'];
+
+export const profileSettings: ProfileSetting[] = [
{ id: 1, name: 'Profile', icon: 'user' },
- {
- id: 4, name: 'Messages', icon: 'email', badge: '5',
- },
+ { id: 4, name: 'Messages', icon: 'email', badge: '5' },
{ id: 2, name: 'Friends', icon: 'group' },
{ id: 3, name: 'Exit', icon: 'runner' },
];
-const downloads = ['Download Trial For Visual Studio', 'Download Trial For All Platforms', 'Package Managers'];
-const alignments = [
+export const downloads: string[] = ['Download Trial For Visual Studio', 'Download Trial For All Platforms', 'Package Managers'];
+
+export const alignments: Alignment[] = [
{ id: 1, name: 'Left', icon: 'alignleft' },
{ id: 4, name: 'Right', icon: 'alignright' },
{ id: 2, name: 'Center', icon: 'aligncenter' },
{ id: 3, name: 'Justify', icon: 'alignjustify' },
];
-const fontSizes = [
+
+export const fontSizes: FontSize[] = [
{ size: 10, text: '10px' },
{ size: 12, text: '12px' },
{ size: 14, text: '14px' },
{ size: 16, text: '16px' },
{ size: 18, text: '18px' },
];
-const lineHeights = [
+
+export const lineHeights: LineHeight[] = [
{ lineHeight: 1, text: '1' },
{ lineHeight: 1.35, text: '1.35' },
{ lineHeight: 1.5, text: '1.5' },
{ lineHeight: 2, text: '2' },
];
-export default {
- getData() {
- return {
- colors, profileSettings, downloads, alignments, fontSizes, lineHeights,
- };
- },
-};
diff --git a/apps/demos/Demos/DropDownButton/Overview/React/types.ts b/apps/demos/Demos/DropDownButton/Overview/React/types.ts
new file mode 100644
index 000000000000..36b2dfcb0ab7
--- /dev/null
+++ b/apps/demos/Demos/DropDownButton/Overview/React/types.ts
@@ -0,0 +1,24 @@
+export type ProfileSetting = {
+ id: number;
+ name: string;
+ icon: string;
+ badge?: string;
+};
+
+export type Alignment = {
+ id: number;
+ name: string;
+ icon: string;
+};
+
+export type FontSize = {
+ size: number;
+ text: string;
+};
+
+export type LineHeight = {
+ lineHeight: number;
+ text: string;
+};
+
+export type TextAlign = 'center' | 'end' | 'justify' | 'left' | 'match-parent' | 'right' | 'start';
diff --git a/apps/demos/Demos/DropDownButton/Overview/ReactJs/App.js b/apps/demos/Demos/DropDownButton/Overview/ReactJs/App.js
index cf85242afe6f..48469d8d386f 100644
--- a/apps/demos/Demos/DropDownButton/Overview/ReactJs/App.js
+++ b/apps/demos/Demos/DropDownButton/Overview/ReactJs/App.js
@@ -3,20 +3,21 @@ import DropDownButton from 'devextreme-react/drop-down-button';
import Toolbar from 'devextreme-react/toolbar';
import { Template } from 'devextreme-react/core/template';
import notify from 'devextreme/ui/notify';
-import service from './data.js';
+import {
+ colors, downloads, alignments, profileSettings, fontSizes, lineHeights,
+} from './data.js';
import ColorIcon from './ColorIcon.js';
import DropDownButtonTemplate from './DropDownButtonTemplate.js';
import 'whatwg-fetch';
const buttonDropDownOptions = { width: 230 };
-const data = service.getData();
const itemTemplateRender = (item) => {item.text}
;
const App = () => {
const [alignment, setAlignment] = useState('left');
const [color, setColor] = useState(null);
const [fontSize, setFontSize] = useState(14);
const [lineHeight, setLineHeight] = useState(1.35);
- const [colorPicker, setColorPicker] = useState(null);
+ const [colorPicker, setColorPicker] = useState(undefined);
const onButtonClick = useCallback((e) => {
notify(
`Go to ${e.element.querySelector('.button-title').textContent}'s profile`,
@@ -30,18 +31,15 @@ const App = () => {
const onColorClick = useCallback(
(selectedColor) => {
setColor(selectedColor);
- const squareIcon = colorPicker.element().getElementsByClassName('dx-icon-square')[0];
+ const squareIcon = colorPicker?.element().getElementsByClassName('dx-icon-square')[0];
squareIcon.style.color = selectedColor;
- colorPicker.close();
+ colorPicker?.close();
},
[colorPicker],
);
- const onInitialized = useCallback(
- (e) => {
- setColorPicker(e.component);
- },
- [setColorPicker],
- );
+ const onInitialized = useCallback((e) => {
+ setColorPicker(e.component);
+ }, []);
const toolbarItems = useMemo(
() => [
{
@@ -57,14 +55,14 @@ const App = () => {
onSelectionChanged: (e) => {
setAlignment(e.item.name.toLowerCase());
},
- items: data.alignments,
+ items: alignments,
},
},
{
location: 'before',
widget: 'dxDropDownButton',
options: {
- items: data.colors,
+ items: colors,
icon: 'square',
stylingMode: 'text',
dropDownOptions: { width: 'auto' },
@@ -80,7 +78,7 @@ const App = () => {
displayExpr: 'text',
keyExpr: 'size',
useSelectMode: true,
- items: data.fontSizes,
+ items: fontSizes,
selectedItemKey: 14,
onSelectionChanged: (e) => {
setFontSize(e.item.size);
@@ -97,7 +95,7 @@ const App = () => {
displayExpr: 'text',
keyExpr: 'lineHeight',
useSelectMode: true,
- items: data.lineHeights,
+ items: lineHeights,
selectedItemKey: 1.35,
onSelectionChanged: (e) => {
setLineHeight(e.item.lineHeight);
@@ -105,7 +103,7 @@ const App = () => {
},
},
],
- [setAlignment, setFontSize, setLineHeight, onInitialized],
+ [onInitialized],
);
return (
@@ -118,7 +116,7 @@ const App = () => {
text="Download Trial"
icon="save"
dropDownOptions={buttonDropDownOptions}
- items={data.downloads}
+ items={downloads}
onItemClick={onItemClick}
/>
@@ -131,7 +129,7 @@ const App = () => {
id="custom-template"
splitButton={true}
useSelectMode={false}
- items={data.profileSettings}
+ items={profileSettings}
displayExpr="name"
keyExpr="id"
onButtonClick={onButtonClick}
@@ -148,7 +146,7 @@ const App = () => {
- {data.colors.map((colorValue, i) => (
+ {colors.map((colorValue, i) => (
{
- );
- }
-}
+const ColorIcon = ({ color, onClick }) => (
+ onClick(color)}
+ className="color dx-icon dx-icon-square"
+ style={{ color }}
+ />
+);
export default ColorIcon;
diff --git a/apps/demos/Demos/DropDownButton/Overview/ReactJs/DropDownButtonTemplate.js b/apps/demos/Demos/DropDownButton/Overview/ReactJs/DropDownButtonTemplate.js
index a49c8cd02df0..2387a543f85b 100644
--- a/apps/demos/Demos/DropDownButton/Overview/ReactJs/DropDownButtonTemplate.js
+++ b/apps/demos/Demos/DropDownButton/Overview/ReactJs/DropDownButtonTemplate.js
@@ -17,12 +17,12 @@ const ButtonDescription = ({ text, description }) => (
);
const DropDownButtonTemplate = () => (
-
+ <>
-
+ >
);
export default DropDownButtonTemplate;
diff --git a/apps/demos/Demos/DropDownButton/Overview/ReactJs/data.js b/apps/demos/Demos/DropDownButton/Overview/ReactJs/data.js
index 43ee0a4edc19..5b01a104cf49 100644
--- a/apps/demos/Demos/DropDownButton/Overview/ReactJs/data.js
+++ b/apps/demos/Demos/DropDownButton/Overview/ReactJs/data.js
@@ -1,4 +1,4 @@
-const colors = [
+export const colors = [
null,
'#980000',
'#ff0000',
@@ -12,50 +12,35 @@ const colors = [
'#ff00ff',
'#ff3466',
];
-const profileSettings = [
+export const profileSettings = [
{ id: 1, name: 'Profile', icon: 'user' },
{
- id: 4,
- name: 'Messages',
- icon: 'email',
- badge: '5',
+ id: 4, name: 'Messages', icon: 'email', badge: '5',
},
{ id: 2, name: 'Friends', icon: 'group' },
{ id: 3, name: 'Exit', icon: 'runner' },
];
-const downloads = [
+export const downloads = [
'Download Trial For Visual Studio',
'Download Trial For All Platforms',
'Package Managers',
];
-const alignments = [
+export const alignments = [
{ id: 1, name: 'Left', icon: 'alignleft' },
{ id: 4, name: 'Right', icon: 'alignright' },
{ id: 2, name: 'Center', icon: 'aligncenter' },
{ id: 3, name: 'Justify', icon: 'alignjustify' },
];
-const fontSizes = [
+export const fontSizes = [
{ size: 10, text: '10px' },
{ size: 12, text: '12px' },
{ size: 14, text: '14px' },
{ size: 16, text: '16px' },
{ size: 18, text: '18px' },
];
-const lineHeights = [
+export const lineHeights = [
{ lineHeight: 1, text: '1' },
{ lineHeight: 1.35, text: '1.35' },
{ lineHeight: 1.5, text: '1.5' },
{ lineHeight: 2, text: '2' },
];
-export default {
- getData() {
- return {
- colors,
- profileSettings,
- downloads,
- alignments,
- fontSizes,
- lineHeights,
- };
- },
-};
diff --git a/apps/demos/tsconfig.react-check.json b/apps/demos/tsconfig.react-check.json
index d9c378485ca1..c28d5038b33e 100644
--- a/apps/demos/tsconfig.react-check.json
+++ b/apps/demos/tsconfig.react-check.json
@@ -10,7 +10,7 @@
"jsx": "react-jsx",
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
- "lib": ["es2022", "DOM", "DOM.Iterable"]
+ "lib": ["es2023", "DOM", "DOM.Iterable"]
},
"include": [
"Demos/Scheduler/**/React/**/*.tsx",
@@ -80,6 +80,34 @@
"Demos/Common/FormsOverview/**/React/**/*.tsx",
"Demos/Common/ListsOverview/**/React/**/*.tsx",
"Demos/Common/NavigationOverview/**/React/**/*.tsx",
- "Demos/Common/NavigationRightToLeftSupport/**/React/**/*.tsx"
+ "Demos/Common/NavigationRightToLeftSupport/**/React/**/*.tsx",
+ "Demos/Common/EditorsOverview/**/React/**/*.ts",
+ "Demos/Common/EditorsOverview/**/React/**/*.tsx",
+ "Demos/Common/CustomTextEditorButtons/**/React/**/*.ts",
+ "Demos/Common/CustomTextEditorButtons/**/React/**/*.tsx",
+ "Demos/Common/EditorAppearanceVariants/**/React/**/*.ts",
+ "Demos/Common/EditorAppearanceVariants/**/React/**/*.tsx",
+ "Demos/Common/EditorsRightToLeftSupport/**/React/**/*.ts",
+ "Demos/Common/EditorsRightToLeftSupport/**/React/**/*.tsx",
+ "Demos/Common/PopupAndNotificationsOverview/**/React/**/*.ts",
+ "Demos/Common/PopupAndNotificationsOverview/**/React/**/*.tsx",
+ "Demos/Autocomplete/**/React/**/*.ts",
+ "Demos/Autocomplete/**/React/**/*.tsx",
+ "Demos/Calendar/**/React/**/*.ts",
+ "Demos/Calendar/**/React/**/*.tsx",
+ "Demos/Chat/**/React/**/*.ts",
+ "Demos/Chat/**/React/**/*.tsx",
+ "Demos/CheckBox/**/React/**/*.ts",
+ "Demos/CheckBox/**/React/**/*.tsx",
+ "Demos/ColorBox/**/React/**/*.ts",
+ "Demos/ColorBox/**/React/**/*.tsx",
+ "Demos/DateBox/**/React/**/*.ts",
+ "Demos/DateBox/**/React/**/*.tsx",
+ "Demos/DateRangeBox/**/React/**/*.ts",
+ "Demos/DateRangeBox/**/React/**/*.tsx",
+ "Demos/DropDownBox/**/React/**/*.ts",
+ "Demos/DropDownBox/**/React/**/*.tsx",
+ "Demos/DropDownButton/**/React/**/*.ts",
+ "Demos/DropDownButton/**/React/**/*.tsx"
]
}
diff --git a/apps/demos/utils/ts-to-js-converter/converter.ts b/apps/demos/utils/ts-to-js-converter/converter.ts
index 1d14a38cbc4c..4101fe599c6e 100644
--- a/apps/demos/utils/ts-to-js-converter/converter.ts
+++ b/apps/demos/utils/ts-to-js-converter/converter.ts
@@ -53,7 +53,7 @@ const makeConfig = (
jsx: 'react-native',
allowJs: true,
target: 'ES2020',
- lib: ['ES2020', 'dom'],
+ lib: ['ES2023', 'dom'],
types,
noEmit: false,
skipLibCheck: true,