Skip to content

Commit ecceab8

Browse files
CardView, FilterBuilder, Sortable, TreeList: fix ts issues in strict mode (#31996)
1 parent f214150 commit ecceab8

File tree

40 files changed

+152
-123
lines changed

40 files changed

+152
-123
lines changed

apps/demos/Demos/CardView/ColumnChooser/React/App.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@ import CardView, {
44
Column, CardCover, SearchPanel, ColumnChooser, ColumnChooserSearch, ColumnChooserSelection,
55
} from 'devextreme-react/card-view';
66
import CheckBox from 'devextreme-react/check-box';
7+
import type { CheckBoxTypes } from 'devextreme-react/check-box';
78
import SelectBox from 'devextreme-react/select-box';
89

910
import { employees } from './data.ts';
1011
import type { Employee } from './data.ts';
1112

13+
type CheckBoxValue = CheckBoxTypes.Properties['value'];
14+
1215
function altExpr({ First_Name, Last_Name }: Employee): string {
1316
return `Photo of ${First_Name} ${Last_Name}`;
1417
}
@@ -28,10 +31,10 @@ type ColumnChooserMode = typeof columnChooserModes[number];
2831

2932
const App = () => {
3033
const [columnChooserMode, setColumnChooserMode] = useState<ColumnChooserMode>('select');
31-
const [searchEnabled, setSearchEnabled] = useState(true);
32-
const [allowSelectAll, setAllowSelectAll] = useState(true);
33-
const [selectByClick, setSelectByClick] = useState(true);
34-
const [allowColumnReordering, setAllowColumnReordering] = useState(false);
34+
const [searchEnabled, setSearchEnabled] = useState<CheckBoxValue>(true);
35+
const [allowSelectAll, setAllowSelectAll] = useState<CheckBoxValue>(true);
36+
const [selectByClick, setSelectByClick] = useState<CheckBoxValue>(true);
37+
const [allowColumnReordering, setAllowColumnReordering] = useState<CheckBoxValue>(false);
3538

3639
return <>
3740
<div className="options-panel">

apps/demos/Demos/CardView/ColumnHeaderFilter/React/App.tsx

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
import React from 'react';
1+
import React, { type ComponentProps } from 'react';
22

33
import CardView, { Column, HeaderFilter, ColumnHeaderFilter, ColumnHeaderFilterSearch } from 'devextreme-react/card-view';
4+
import type { CardViewTypes } from 'devextreme-react/card-view';
5+
import type { DataSourceOptions } from 'devextreme-react/common/data';
46

57
import { orders } from './data.ts';
68
import type { Order, OrderFilter } from './data.ts';
@@ -10,6 +12,7 @@ function getOrderDay(rowData: Order) {
1012
}
1113

1214
function calculateOrderDateFilterExpression(
15+
this: CardViewTypes.Column,
1316
value: string,
1417
selectedFilterOperations: string | null,
1518
target: string
@@ -57,20 +60,22 @@ interface HeaderFilterDataResult {
5760
value: string;
5861
}
5962

60-
interface HeaderFilterData {
61-
dataSource: {
62-
postProcess?: ((results: HeaderFilterDataResult[]) => HeaderFilterDataResult[]) | null;
63-
};
63+
interface HeaderFilterDataSourceOptions {
64+
component: Record<string, any>;
65+
dataSource: DataSourceOptions<HeaderFilterDataResult> | null;
6466
}
6567

66-
function orderDateHeaderFilterDataSource(data: HeaderFilterData): void {
67-
data.dataSource.postProcess = function (results: HeaderFilterDataResult[]) {
68-
results.push({
69-
text: 'Weekends',
70-
value: 'weekends',
71-
});
72-
return results;
73-
};
68+
function orderDateHeaderFilterDataSource(options: HeaderFilterDataSourceOptions): void {
69+
if (options.dataSource) {
70+
options.dataSource.postProcess = function (results: HeaderFilterDataResult[]) {
71+
results.push({
72+
text: 'Weekends',
73+
value: 'weekends',
74+
});
75+
76+
return results;
77+
};
78+
}
7479
}
7580

7681
const App = () => (
@@ -94,7 +99,7 @@ const App = () => (
9499
<Column
95100
dataField="OrderDate"
96101
dataType="date"
97-
calculateFilterExpression={calculateOrderDateFilterExpression}
102+
calculateFilterExpression={calculateOrderDateFilterExpression as ComponentProps<typeof Column>['calculateFilterExpression']}
98103
>
99104
<ColumnHeaderFilter
100105
dataSource={orderDateHeaderFilterDataSource}

apps/demos/Demos/CardView/ColumnHeaderFilter/ReactJs/App.js

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,16 @@ const saleAmountHeaderFilterDataSource = [
4747
value: ['SaleAmount', '>=', 20000],
4848
},
4949
];
50-
function orderDateHeaderFilterDataSource(data) {
51-
data.dataSource.postProcess = function (results) {
52-
results.push({
53-
text: 'Weekends',
54-
value: 'weekends',
55-
});
56-
return results;
57-
};
50+
function orderDateHeaderFilterDataSource(options) {
51+
if (options.dataSource) {
52+
options.dataSource.postProcess = function (results) {
53+
results.push({
54+
text: 'Weekends',
55+
value: 'weekends',
56+
});
57+
return results;
58+
};
59+
}
5860
}
5961
const App = () => (
6062
<CardView

apps/demos/Demos/CardView/DataValidation/React/data.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export interface Employee {
1818
departmentID: number;
1919
department: string;
2020
status: string;
21-
notes: string;
21+
notes: string | null;
2222
pictureName: string;
2323
picture: string;
2424
}

apps/demos/Demos/CardView/Overview/React/App.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ function StatusComponent({ data }: { data: CardViewTypes.FieldTemplateData }) {
6767
Terminated: 'status--terminated',
6868
};
6969

70-
const className = classNameMap[data.field.value];
70+
const className = classNameMap[data.field.value as Employee['Status']];
7171

7272
return (
7373
<div className={`status ${className}`}>
@@ -84,7 +84,7 @@ function EmailComponent({ data }: { data: CardViewTypes.FieldTemplateData }) {
8484
}
8585

8686
function App() {
87-
const cardView = useRef<CardViewRef>();
87+
const cardView = useRef<CardViewRef>(null);
8888

8989
return (
9090
<CardView

apps/demos/Demos/CardView/Overview/React/data.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export interface Employee {
1111
Birth_Date: string;
1212
Hire_Date: string;
1313
Department: string;
14-
Status: string;
14+
Status: 'Salaried' | 'Commission' | 'Terminated';
1515
}
1616

1717
export const employees: Employee[] = [{

apps/demos/Demos/CardView/Overview/ReactJs/App.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ function EmailComponent({ data }) {
7373
return <a href={`mailto:${data.field.value}`}>{data.field.text}</a>;
7474
}
7575
function App() {
76-
const cardView = useRef();
76+
const cardView = useRef(null);
7777
return (
7878
<CardView
7979
dataSource={employees}

apps/demos/Demos/CardView/PopupEditing/React/data.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export interface Employee {
1818
departmentID: number;
1919
department: string;
2020
status: string;
21-
notes: string;
21+
notes: string | null;
2222
pictureName: string;
2323
picture: string;
2424
}

apps/demos/Demos/CardView/Selection/React/App.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@ import React, { useState, useRef, useCallback } from 'react';
33
import CardView, { Column, CardCover, Selection } from 'devextreme-react/card-view';
44
import type { CardViewRef } from 'devextreme-react/card-view';
55
import CheckBox from 'devextreme-react/check-box';
6+
import type { CheckBoxTypes } from 'devextreme-react/check-box';
67
import type { SingleOrMultiple, SelectAllMode } from 'devextreme-react/common';
78
import type { SelectionColumnDisplayMode } from 'devextreme-react/common/grids';
89
import SelectBox from 'devextreme-react/select-box';
910

1011
import { employees } from './data.ts';
1112
import type { Employee } from './data.ts';
1213

14+
type CheckBoxValue = CheckBoxTypes.Properties['value'];
15+
1316
function altExpr({ FullName }: Employee): string {
1417
return `Photo of ${FullName}`;
1518
}
@@ -24,7 +27,7 @@ const selectAllModeLabel = { 'aria-label': 'Select All Mode' };
2427

2528
const App = () => {
2629
const [selectionMode, setSelectionMode] = useState<SingleOrMultiple>('multiple');
27-
const [allowSelectAll, setAllowSelectAll] = useState(true);
30+
const [allowSelectAll, setAllowSelectAll] = useState<CheckBoxValue>(true);
2831
const [showCheckBoxesMode, setShowCheckBoxesMode] = useState<SelectionColumnDisplayMode>('always');
2932
const [selectAllMode, setSelectAllMode] = useState<SelectAllMode>('allPages');
3033

apps/demos/Demos/FilterBuilder/Customization/React/App.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ function App() {
1313
const [dataSourceText, setDataSourceText] = useState('');
1414

1515
const updateTexts = useCallback((e: FilterBuilderTypes.InitializedEvent) => {
16-
setFilterText(formatValue(e.component.option('value')));
17-
setDataSourceText(formatValue(e.component.getFilterExpression()));
16+
setFilterText(formatValue(e.component?.option('value')));
17+
setDataSourceText(formatValue(e.component?.getFilterExpression()));
1818
}, []);
1919

2020
const onValueChanged = useCallback((e: FilterBuilderTypes.ValueChangedEvent) => {

0 commit comments

Comments
 (0)