Skip to content

Commit 9c2d7d1

Browse files
simplify state and update types
1 parent c0fa084 commit 9c2d7d1

File tree

3 files changed

+49
-39
lines changed

3 files changed

+49
-39
lines changed

x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_list.tsx

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,7 @@ export const TransformList: FC<Props> = ({
8282
const { refresh } = useRefreshTransformList({ isLoading: setIsLoading });
8383

8484
const [searchQueryText, setSearchQueryText] = useState<string>('');
85-
const [filteredTransforms, setFilteredTransforms] = useState<{
86-
active: boolean;
87-
items: TransformListRow[];
88-
}>({
89-
active: false,
90-
items: [],
91-
});
85+
const [filteredTransforms, setFilteredTransforms] = useState<TransformListRow[]>([]);
9286
const [expandedRowItemIds, setExpandedRowItemIds] = useState<TransformId[]>([]);
9387
const [transformSelection, setTransformSelection] = useState<TransformListRow[]>([]);
9488
const [isActionsMenuOpen, setIsActionsMenuOpen] = useState(false);
@@ -109,12 +103,12 @@ export const TransformList: FC<Props> = ({
109103
transformSelection
110104
);
111105

112-
const setQueryClauses = (queryClauses: any) => {
106+
const updateFilteredItems = (queryClauses: any) => {
113107
if (queryClauses.length) {
114108
const filtered = filterTransforms(transforms, queryClauses);
115-
setFilteredTransforms({ active: true, items: filtered });
109+
setFilteredTransforms(filtered);
116110
} else {
117-
setFilteredTransforms({ active: false, items: [] });
111+
setFilteredTransforms(transforms);
118112
}
119113
};
120114

@@ -126,18 +120,18 @@ export const TransformList: FC<Props> = ({
126120
if (query && query.ast !== undefined && query.ast.clauses !== undefined) {
127121
clauses = query.ast.clauses;
128122
}
129-
setQueryClauses(clauses);
123+
updateFilteredItems(clauses);
130124
} else {
131-
setQueryClauses([]);
125+
updateFilteredItems([]);
132126
}
133127
};
134128
filterList();
135129
// eslint-disable-next-line
136-
}, [searchQueryText, transforms]); // missing dependency setQueryClauses
130+
}, [searchQueryText, transforms]); // missing dependency updateFilteredItems
137131

138-
const { onTableChange, pageOfItems, pagination, sorting } = useTableSettings(
132+
const { onTableChange, pageOfItems, pagination, sorting } = useTableSettings<TransformListRow>(
139133
TRANSFORM_LIST_COLUMN.ID,
140-
filteredTransforms.active ? filteredTransforms.items : transforms
134+
filteredTransforms
141135
);
142136

143137
// Before the transforms have been loaded for the first time, display the loading indicator only.

x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_search_bar.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,27 +12,28 @@ import {
1212
EuiFlexGroup,
1313
EuiFlexItem,
1414
EuiFormRow,
15+
SearchFilterConfig,
1516
} from '@elastic/eui';
1617
import { i18n } from '@kbn/i18n';
1718
import { TermClause, FieldClause, Value } from './common';
1819
import { TRANSFORM_STATE } from '../../../../../../common';
1920
import { TRANSFORM_MODE, TransformListRow } from '../../../../common';
2021
import { getTaskStateBadge } from './use_columns';
2122

22-
const filters = [
23+
const filters: SearchFilterConfig[] = [
2324
{
24-
type: 'field_value_selection' as const,
25+
type: 'field_value_selection',
2526
field: 'state.state',
2627
name: i18n.translate('xpack.transform.statusFilter', { defaultMessage: 'Status' }),
27-
multiSelect: 'or' as const,
28+
multiSelect: 'or',
2829
options: Object.values(TRANSFORM_STATE).map((val) => ({
2930
value: val,
3031
name: val,
3132
view: getTaskStateBadge(val),
3233
})),
3334
},
3435
{
35-
type: 'field_value_selection' as const,
36+
type: 'field_value_selection',
3637
field: 'mode',
3738
name: i18n.translate('xpack.transform.modeFilter', { defaultMessage: 'Mode' }),
3839
multiSelect: false,
@@ -116,7 +117,7 @@ export const filterTransforms = (
116117

117118
function getError(errorMessage: string | null) {
118119
if (errorMessage) {
119-
return i18n.translate('xpack.ml.transformList.searchBar.invalidSearchErrorMessage', {
120+
return i18n.translate('xpack.transform.transformList.searchBar.invalidSearchErrorMessage', {
120121
defaultMessage: 'Invalid search: {errorMessage}',
121122
values: { errorMessage },
122123
});

x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_table_settings.ts

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { useState } from 'react';
88
import { Direction, EuiBasicTableProps, EuiTableSortingType } from '@elastic/eui';
99
import sortBy from 'lodash/sortBy';
1010
import get from 'lodash/get';
11-
import { TransformListRow } from '../../../../common';
1211

1312
const PAGE_SIZE = 10;
1413
const PAGE_SIZE_OPTIONS = [10, 25, 50];
@@ -17,27 +16,46 @@ const propertyMap = {
1716
Mode: 'mode',
1817
};
1918

20-
interface AnalyticsBasicTableSettings {
19+
// Copying from EUI EuiBasicTable types as type is not correctly picked up for table's onChange
20+
// Can be removed when https://github.com/elastic/eui/issues/4011 is addressed in EUI
21+
export interface Criteria<T> {
22+
page?: {
23+
index: number;
24+
size: number;
25+
};
26+
sort?: {
27+
field: keyof T;
28+
direction: Direction;
29+
};
30+
}
31+
export interface CriteriaWithPagination<T> extends Criteria<T> {
32+
page: {
33+
index: number;
34+
size: number;
35+
};
36+
}
37+
38+
interface AnalyticsBasicTableSettings<T> {
2139
pageIndex: number;
2240
pageSize: number;
2341
totalItemCount: number;
2442
hidePerPageOptions: boolean;
25-
sortField: string;
43+
sortField: keyof T;
2644
sortDirection: Direction;
2745
}
2846

29-
interface UseTableSettingsReturnValue {
30-
onTableChange: EuiBasicTableProps<TransformListRow>['onChange'];
31-
pageOfItems: TransformListRow[];
32-
pagination: EuiBasicTableProps<TransformListRow>['pagination'];
47+
interface UseTableSettingsReturnValue<T> {
48+
onTableChange: EuiBasicTableProps<T>['onChange'];
49+
pageOfItems: T[];
50+
pagination: EuiBasicTableProps<T>['pagination'];
3351
sorting: EuiTableSortingType<any>;
3452
}
3553

36-
export function useTableSettings(
37-
sortByField: string,
38-
items: TransformListRow[]
39-
): UseTableSettingsReturnValue {
40-
const [tableSettings, setTableSettings] = useState<AnalyticsBasicTableSettings>({
54+
export function useTableSettings<TypeOfItem>(
55+
sortByField: keyof TypeOfItem,
56+
items: TypeOfItem[]
57+
): UseTableSettingsReturnValue<TypeOfItem> {
58+
const [tableSettings, setTableSettings] = useState<AnalyticsBasicTableSettings<TypeOfItem>>({
4159
pageIndex: 0,
4260
pageSize: PAGE_SIZE,
4361
totalItemCount: 0,
@@ -47,10 +65,10 @@ export function useTableSettings(
4765
});
4866

4967
const getPageOfItems = (
50-
list: any[],
68+
list: TypeOfItem[],
5169
index: number,
5270
size: number,
53-
sortField: string,
71+
sortField: keyof TypeOfItem,
5472
sortDirection: Direction
5573
) => {
5674
list = sortBy(list, (item) =>
@@ -73,13 +91,10 @@ export function useTableSettings(
7391
};
7492
};
7593

76-
const onTableChange = ({
94+
const onTableChange: EuiBasicTableProps<TypeOfItem>['onChange'] = ({
7795
page = { index: 0, size: PAGE_SIZE },
7896
sort = { field: sortByField, direction: 'asc' },
79-
}: {
80-
page?: { index: number; size: number };
81-
sort?: { field: string; direction: Direction };
82-
}) => {
97+
}: CriteriaWithPagination<TypeOfItem>) => {
8398
const { index, size } = page;
8499
const { field, direction } = sort;
85100

0 commit comments

Comments
 (0)