Skip to content

Commit df910e4

Browse files
committed
Move Query initialization to TableListView
1 parent 718500d commit df910e4

2 files changed

Lines changed: 37 additions & 41 deletions

File tree

packages/content-management/table_list/src/table_list_view.tsx

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
EuiTableActionsColumnType,
2020
CriteriaWithPagination,
2121
Query,
22+
Ast,
2223
} from '@elastic/eui';
2324
import { keyBy, uniq, get } from 'lodash';
2425
import { i18n } from '@kbn/i18n';
@@ -83,7 +84,7 @@ export interface State<T extends UserContentCommonSchema = UserContentCommonSche
8384
fetchError?: IHttpFetchError<Error>;
8485
searchQuery: {
8586
text: string;
86-
query: Query | null;
87+
query: Query;
8788
};
8889
selectedIds: string[];
8990
totalItems: number;
@@ -106,6 +107,8 @@ export interface UserContentCommonSchema {
106107
};
107108
}
108109

110+
const ast = Ast.create([]);
111+
109112
function TableListViewComp<T extends UserContentCommonSchema>({
110113
tableListTitle,
111114
entityName,
@@ -161,9 +164,10 @@ function TableListViewComp<T extends UserContentCommonSchema>({
161164
showDeleteModal: false,
162165
hasUpdatedAtMetadata: false,
163166
selectedIds: [],
164-
searchQuery: Boolean(initialQuery)
165-
? { text: initialQuery!, query: null }
166-
: { text: '', query: null },
167+
searchQuery:
168+
initialQuery !== undefined
169+
? { text: initialQuery, query: new Query(ast, undefined, initialQuery) }
170+
: { text: '', query: new Query(ast, undefined, '') },
167171
pagination: {
168172
pageIndex: 0,
169173
totalItemCount: 0,
@@ -190,7 +194,9 @@ function TableListViewComp<T extends UserContentCommonSchema>({
190194
pagination,
191195
tableSort,
192196
} = state;
193-
const hasNoItems = !isFetchingItems && items.length === 0 && searchQuery.query === null;
197+
198+
const hasQuery = searchQuery.text !== '';
199+
const hasNoItems = !isFetchingItems && items.length === 0 && !hasQuery;
194200
const pageDataTestSubject = `${entityName}LandingPage`;
195201
const showFetchError = Boolean(fetchError);
196202
const showLimitError = !showFetchError && totalItems > listingLimit;
@@ -208,7 +214,7 @@ function TableListViewComp<T extends UserContentCommonSchema>({
208214
clearTagSelection,
209215
tagsToTableItemMap,
210216
} = useTags({
211-
searchQuery,
217+
query: searchQuery.query,
212218
updateQuery,
213219
items,
214220
});

packages/content-management/table_list/src/use_tags.ts

Lines changed: 25 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,22 @@
66
* Side Public License, v 1.
77
*/
88
import { useCallback, useMemo } from 'react';
9-
import { Query, Ast } from '@elastic/eui';
9+
import { Query } from '@elastic/eui';
1010

1111
import type { Tag } from './types';
12-
import type { State, UserContentCommonSchema } from './table_list_view';
12+
import type { UserContentCommonSchema } from './table_list_view';
1313

1414
type QueryUpdater = (query: Query, tag: Tag) => Query;
1515

1616
export function useTags({
17-
searchQuery,
17+
query,
1818
updateQuery,
1919
items,
2020
}: {
21-
searchQuery: State['searchQuery'];
21+
query: Query;
2222
updateQuery: (query: Query) => void;
2323
items: UserContentCommonSchema[];
2424
}) {
25-
const initializeQuery = useCallback(() => {
26-
const ast = Ast.create([]);
27-
return new Query(ast, undefined, searchQuery.text);
28-
}, [searchQuery]);
29-
3025
// Return a map of tag.id to an array of saved object ids having that tag
3126
// { 'abc-123': ['saved_object_id_1', 'saved_object_id_2', ...] }
3227
const tagsToTableItemMap = useMemo(() => {
@@ -49,23 +44,22 @@ export function useTags({
4944
const updateTagClauseGetter = useCallback(
5045
(queryUpdater: QueryUpdater) =>
5146
(tag: Tag, q?: Query, doUpdate: boolean = true) => {
52-
const query = q !== undefined ? q : searchQuery.query ?? initializeQuery();
53-
const updatedQuery = queryUpdater(query, tag);
47+
const updatedQuery = queryUpdater(q !== undefined ? q : query, tag);
5448
if (doUpdate) {
5549
updateQuery(updatedQuery);
5650
}
5751
return updatedQuery;
5852
},
59-
[searchQuery.query, initializeQuery, updateQuery]
53+
[query, updateQuery]
6054
);
6155

6256
const hasTagInClauseGetter = useCallback(
6357
(matchValue: 'must' | 'must_not') => (tag: Tag, _query?: Query) => {
64-
const query = Boolean(_query) ? _query! : searchQuery.query ?? initializeQuery();
58+
const q = Boolean(_query) ? _query! : query;
6559
const tagsClauses = query.ast.getFieldClauses('tag');
6660

6761
if (tagsClauses) {
68-
const mustHaveTagClauses = query.ast
62+
const mustHaveTagClauses = q.ast
6963
.getFieldClauses('tag')
7064
.find(({ match }) => match === matchValue)?.value as string[];
7165

@@ -75,27 +69,26 @@ export function useTags({
7569
}
7670
return false;
7771
},
78-
[searchQuery.query, initializeQuery]
72+
[query]
7973
);
8074

8175
const addTagToIncludeClause = useMemo(
82-
() => updateTagClauseGetter((query, tag) => query.addOrFieldValue('tag', tag.name, true, 'eq')),
76+
() => updateTagClauseGetter((q, tag) => q.addOrFieldValue('tag', tag.name, true, 'eq')),
8377
[updateTagClauseGetter]
8478
);
8579

8680
const removeTagFromIncludeClause = useMemo(
87-
() => updateTagClauseGetter((query, tag) => query.removeOrFieldValue('tag', tag.name)),
81+
() => updateTagClauseGetter((q, tag) => q.removeOrFieldValue('tag', tag.name)),
8882
[updateTagClauseGetter]
8983
);
9084

9185
const addTagToExcludeClause = useMemo(
92-
() =>
93-
updateTagClauseGetter((query, tag) => query.addOrFieldValue('tag', tag.name, false, 'eq')),
86+
() => updateTagClauseGetter((q, tag) => q.addOrFieldValue('tag', tag.name, false, 'eq')),
9487
[updateTagClauseGetter]
9588
);
9689

9790
const removeTagFromExcludeClause = useMemo(
98-
() => updateTagClauseGetter((query, tag) => query.removeOrFieldValue('tag', tag.name)),
91+
() => updateTagClauseGetter((q, tag) => q.removeOrFieldValue('tag', tag.name)),
9992
[updateTagClauseGetter]
10093
);
10194

@@ -104,19 +97,19 @@ export function useTags({
10497

10598
const addOrRemoveIncludeTagFilter = useCallback(
10699
(tag: Tag) => {
107-
let query: Query | undefined;
100+
let q: Query | undefined;
108101

109102
// Remove the tag in the "Exclude" list if it is there
110103
if (hasTagInExclude(tag)) {
111-
query = removeTagFromExcludeClause(tag, undefined, false);
104+
q = removeTagFromExcludeClause(tag, undefined, false);
112105
}
113106

114-
if (hasTagInInclude(tag, query)) {
107+
if (hasTagInInclude(tag, q)) {
115108
// Already selected, remove the filter
116-
removeTagFromIncludeClause(tag, query);
109+
removeTagFromIncludeClause(tag, q);
117110
return;
118111
}
119-
addTagToIncludeClause(tag, query);
112+
addTagToIncludeClause(tag, q);
120113
},
121114
[
122115
hasTagInExclude,
@@ -129,20 +122,20 @@ export function useTags({
129122

130123
const addOrRemoveExcludeTagFilter = useCallback(
131124
(tag: Tag) => {
132-
let query: Query | undefined;
125+
let q: Query | undefined;
133126

134127
// Remove the tag in the "Include" list if it is there
135128
if (hasTagInInclude(tag)) {
136-
query = removeTagFromIncludeClause(tag, undefined, false);
129+
q = removeTagFromIncludeClause(tag, undefined, false);
137130
}
138131

139-
if (hasTagInExclude(tag, query)) {
132+
if (hasTagInExclude(tag, q)) {
140133
// Already selected, remove the filter
141-
removeTagFromExcludeClause(tag, query);
134+
removeTagFromExcludeClause(tag, q);
142135
return;
143136
}
144137

145-
addTagToExcludeClause(tag, query);
138+
addTagToExcludeClause(tag, q);
146139
},
147140
[
148141
hasTagInInclude,
@@ -154,13 +147,10 @@ export function useTags({
154147
);
155148

156149
const clearTagSelection = useCallback(() => {
157-
if (!searchQuery.query) {
158-
return;
159-
}
160-
const updatedQuery = searchQuery.query.removeOrFieldClauses('tag');
150+
const updatedQuery = query.removeOrFieldClauses('tag');
161151
updateQuery(updatedQuery);
162152
return updateQuery;
163-
}, [searchQuery.query, updateQuery]);
153+
}, [query, updateQuery]);
164154

165155
return {
166156
addOrRemoveIncludeTagFilter,

0 commit comments

Comments
 (0)