Skip to content
Open
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
9 changes: 5 additions & 4 deletions apps/demos/Demos/Switch/Overview/React/App.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import React, { useCallback, useState } from 'react';
import Switch, { type SwitchTypes } from 'devextreme-react/switch';
import Switch from 'devextreme-react/switch';
import type { SwitchTypes } from 'devextreme-react/switch';

function App() {
const [value, setValue] = useState(false);
const [value, setValue] = useState<boolean>(false);

const valueChanged = useCallback((e: SwitchTypes.ValueChangedEvent) => {
setValue(e.value);
const valueChanged = useCallback(({ value }: SwitchTypes.ValueChangedEvent): void => {
setValue(value);
}, []);

return (
Expand Down
4 changes: 2 additions & 2 deletions apps/demos/Demos/Switch/Overview/ReactJs/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import Switch from 'devextreme-react/switch';

function App() {
const [value, setValue] = useState(false);
const valueChanged = useCallback((e) => {
setValue(e.value);
const valueChanged = useCallback(({ value }) => {
setValue(value);
}, []);
return (
<div>
Expand Down
26 changes: 12 additions & 14 deletions apps/demos/Demos/TagBox/Grouping/React/App.tsx
Original file line number Diff line number Diff line change
@@ -1,34 +1,32 @@
import React, { useState } from 'react';
import React from 'react';
import { TagBox } from 'devextreme-react/tag-box';
import { DataSource } from 'devextreme-react/common/data';
import Group from './Group.tsx';

import productsData from './data.ts';
import Group from './Group.tsx';
import { products } from './data.ts';

const defaultValues = {
grouped: [17, 19],
search: [17, 19],
template: [18],
};
} satisfies Record<string, number[]>;

const productLabel = { 'aria-label': 'Product' };

function App() {
const [products] = useState(
new DataSource({
store: productsData,
key: 'ID',
group: 'Category',
}),
);
const productStore = new DataSource({
store: products,
key: 'ID',
group: 'Category',
});

return (
<div className="dx-fieldset">
<div className="dx-field">
<div className="dx-field-label">Grouped items</div>
<div className="dx-field-value">
<TagBox
dataSource={products}
dataSource={productStore}
inputAttr={productLabel}
valueExpr="ID"
defaultValue={defaultValues.grouped}
Expand All @@ -42,7 +40,7 @@ function App() {
<div className="dx-field-label">Grouped items with search enabled</div>
<div className="dx-field-value">
<TagBox
dataSource={products}
dataSource={productStore}
valueExpr="ID"
inputAttr={productLabel}
defaultValue={defaultValues.search}
Expand All @@ -57,7 +55,7 @@ function App() {
<div className="dx-field-label">Grouped items with a custom group template</div>
<div className="dx-field-value">
<TagBox
dataSource={products}
dataSource={productStore}
valueExpr="ID"
inputAttr={productLabel}
defaultValue={defaultValues.template}
Expand Down
6 changes: 5 additions & 1 deletion apps/demos/Demos/TagBox/Grouping/React/Group.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import React from 'react';

export default function Group({ key }) {
interface GroupProps {
key: string;
}

export default function Group({ key }: GroupProps) {
return (
<div className="custom-icon">
<span className="dx-icon-box icon"></span> {key}
Expand Down
4 changes: 3 additions & 1 deletion apps/demos/Demos/TagBox/Grouping/React/data.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
export default [{
import type { Product } from './types.ts';

export const products: Product[] = [{
ID: 1,
Name: 'HD Video Player',
Category: 'Video Players',
Expand Down
5 changes: 5 additions & 0 deletions apps/demos/Demos/TagBox/Grouping/React/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export type Product = {
ID: number;
Name: string;
Category: string;
};
22 changes: 10 additions & 12 deletions apps/demos/Demos/TagBox/Grouping/ReactJs/App.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import React, { useState } from 'react';
import React from 'react';
import { TagBox } from 'devextreme-react/tag-box';
import { DataSource } from 'devextreme-react/common/data';
import Group from './Group.js';
import productsData from './data.js';
import { products } from './data.js';

const defaultValues = {
grouped: [17, 19],
Expand All @@ -11,20 +11,18 @@ const defaultValues = {
};
const productLabel = { 'aria-label': 'Product' };
function App() {
const [products] = useState(
new DataSource({
store: productsData,
key: 'ID',
group: 'Category',
}),
);
const productStore = new DataSource({
store: products,
key: 'ID',
group: 'Category',
});
return (
<div className="dx-fieldset">
<div className="dx-field">
<div className="dx-field-label">Grouped items</div>
<div className="dx-field-value">
<TagBox
dataSource={products}
dataSource={productStore}
inputAttr={productLabel}
valueExpr="ID"
defaultValue={defaultValues.grouped}
Expand All @@ -38,7 +36,7 @@ function App() {
<div className="dx-field-label">Grouped items with search enabled</div>
<div className="dx-field-value">
<TagBox
dataSource={products}
dataSource={productStore}
valueExpr="ID"
inputAttr={productLabel}
defaultValue={defaultValues.search}
Expand All @@ -53,7 +51,7 @@ function App() {
<div className="dx-field-label">Grouped items with a custom group template</div>
<div className="dx-field-value">
<TagBox
dataSource={products}
dataSource={productStore}
valueExpr="ID"
inputAttr={productLabel}
defaultValue={defaultValues.template}
Expand Down
2 changes: 1 addition & 1 deletion apps/demos/Demos/TagBox/Grouping/ReactJs/data.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export default [
export const products = [
{
ID: 1,
Name: 'HD Video Player',
Expand Down
35 changes: 17 additions & 18 deletions apps/demos/Demos/TagBox/Overview/React/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,25 @@ import { ArrayStore } from 'devextreme-react/common/data';

import Item from './Item.tsx';
import Tag from './Tag.tsx';
import {
simpleProducts, products, productLabel, Product,
} from './data.ts';
import { simpleProducts, products, productLabel } from './data.ts';
import type { Product } from './types.ts';

const disabledValue = [simpleProducts[0]];
const value = [1, 2];
const disabledValue: string[] = [simpleProducts[0]];
const value: number[] = [1, 2];
const dataSource = new ArrayStore({
data: products,
key: 'Id',
});

function App() {
const [editableProducts, setEditableProducts] = useState([...simpleProducts]);
const [target, setTarget] = useState(null);
const [product, setProduct] = useState<Product>({});
const [editableProducts, setEditableProducts] = useState<string[]>([...simpleProducts]);
const [target, setTarget] = useState<HTMLElement | null>(null);
const [product, setProduct] = useState<Product | null>(null);

const onCustomItemCreating = useCallback(
(args: TagBoxTypes.CustomItemCreatingEvent) => {
(args: TagBoxTypes.CustomItemCreatingEvent): void => {
const newValue = args.text;
const isItemInDataSource = editableProducts.some((item) => item === newValue);
const isItemInDataSource = editableProducts.some((item: string): boolean => item === newValue);
if (!isItemInDataSource) {
setEditableProducts([newValue, ...editableProducts]);
}
Expand All @@ -34,15 +33,15 @@ function App() {
[editableProducts],
);

const onMouseEnter = useCallback((e: { currentTarget: any }, newProduct) => {
const onMouseEnter = useCallback((e: React.MouseEvent<HTMLElement>, newProduct: Product): void => {
setTarget(e.currentTarget);
setProduct(newProduct);
}, []);

const getAltText = useCallback((text: String) => `${text}. Picture`, []);
const getAltText = useCallback((text: string): string => `${text}. Picture`, []);

return (
<React.Fragment>
<>
<div className="dx-fieldset">
<div className="dx-field">
<div className="dx-field-label">Default mode</div>
Expand Down Expand Up @@ -168,25 +167,25 @@ function App() {
>
<p>
<b>Name: </b>
<span>{product.Name}</span>
<span>{product?.Name}</span>
</p>
<p>
<b>Price: </b>
<span>{product.Price}</span>
<span>{product?.Price}</span>
</p>
<p>
<b>In-stock: </b>
<span>{product.Current_Inventory}</span>
<span>{product?.Current_Inventory}</span>
</p>
<p>
<b>Category: </b>
<span>{product.Category}</span>
<span>{product?.Category}</span>
</p>
</Popover>
</div>
</div>
</div>
</React.Fragment>
</>
);
}

Expand Down
5 changes: 3 additions & 2 deletions apps/demos/Demos/TagBox/Overview/React/Item.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import React from 'react';
import type { Product } from './types.ts';

interface ItemProps {
data: any;
getAltText: any;
data: Product;
getAltText: (text: string) => string;
}

export default function Item({ data, getAltText }: ItemProps) {
Expand Down
13 changes: 7 additions & 6 deletions apps/demos/Demos/TagBox/Overview/React/Tag.tsx
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
import React from 'react';
import type { Product } from './types.ts';

interface TagProps {
product: any;
onMouseEnter: any;
getAltText: any;
product: Product;
onMouseEnter: (e: React.MouseEvent, product: Product) => void;
getAltText: (text: string) => string;
}

export default function Tag({ product, onMouseEnter, getAltText }: TagProps) {
const isDisabled = product.Name === 'SuperHD Video Player';
return (
<React.Fragment>
<>
<div
className={`dx-tag-content ${isDisabled && 'disabled-tag'}`}
onMouseEnter={(e) => onMouseEnter(e, product)}
onMouseEnter={(e: React.MouseEvent): void => onMouseEnter(e, product)}
aria-disabled={isDisabled}
>
<img
Expand All @@ -23,6 +24,6 @@ export default function Tag({ product, onMouseEnter, getAltText }: TagProps) {
<span>{product.Name}</span>
{!isDisabled && <div className="dx-tag-remove-button"></div>}
</div>
</React.Fragment>
</>
);
}
15 changes: 3 additions & 12 deletions apps/demos/Demos/TagBox/Overview/React/data.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
export const simpleProducts = [
import type { Product } from './types.ts';

export const simpleProducts: string[] = [
'HD Video Player',
'SuperHD Video Player',
'SuperPlasma 50',
Expand All @@ -15,17 +17,6 @@ export const simpleProducts = [
'ExcelRemote IP',
];

export type Product = {
Id?: number,
Name?: string,
Price?: number,
Current_Inventory?: number,
Backorder?: number,
Manufacturing?: number,
Category?: string,
ImageSrc?: string,
};

export const products: Product[] = [{
Id: 1,
Name: 'HD Video Player',
Expand Down
10 changes: 10 additions & 0 deletions apps/demos/Demos/TagBox/Overview/React/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
export type Product = {
Id: number,
Name: string,
Price: number,
Current_Inventory: number,
Backorder: number,
Manufacturing: number,
Category: string,
ImageSrc: string,
};
14 changes: 7 additions & 7 deletions apps/demos/Demos/TagBox/Overview/ReactJs/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const dataSource = new ArrayStore({
function App() {
const [editableProducts, setEditableProducts] = useState([...simpleProducts]);
const [target, setTarget] = useState(null);
const [product, setProduct] = useState({});
const [product, setProduct] = useState(null);
const onCustomItemCreating = useCallback(
(args) => {
const newValue = args.text;
Expand All @@ -33,7 +33,7 @@ function App() {
}, []);
const getAltText = useCallback((text) => `${text}. Picture`, []);
return (
<React.Fragment>
<>
<div className="dx-fieldset">
<div className="dx-field">
<div className="dx-field-label">Default mode</div>
Expand Down Expand Up @@ -159,25 +159,25 @@ function App() {
>
<p>
<b>Name: </b>
<span>{product.Name}</span>
<span>{product?.Name}</span>
</p>
<p>
<b>Price: </b>
<span>{product.Price}</span>
<span>{product?.Price}</span>
</p>
<p>
<b>In-stock: </b>
<span>{product.Current_Inventory}</span>
<span>{product?.Current_Inventory}</span>
</p>
<p>
<b>Category: </b>
<span>{product.Category}</span>
<span>{product?.Category}</span>
</p>
</Popover>
</div>
</div>
</div>
</React.Fragment>
</>
);
}
export default App;
Loading
Loading