@griddo/ax 10.3.23 → 10.3.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/package.json +2 -2
  2. package/src/__tests__/components/Gallery/GalleryFilters/Orientation/Orientation.test.tsx +5 -2
  3. package/src/__tests__/components/Gallery/GalleryFilters/SortBy/SortBy.test.tsx +5 -4
  4. package/src/__tests__/components/Gallery/GalleryFilters/Type/Type.test.tsx +5 -2
  5. package/src/__tests__/components/TableFilters/CategoryFilter/CategoryFilter.test.tsx +12 -11
  6. package/src/__tests__/components/TableFilters/DateFilter/DateFilter.test.tsx +17 -16
  7. package/src/__tests__/components/TableFilters/LiveFilter/LiveFilter.test.tsx +14 -13
  8. package/src/__tests__/components/TableFilters/NameFilter/NameFilter.test.tsx +21 -20
  9. package/src/__tests__/components/TableFilters/RoleFilter/RoleFilter.test.tsx +6 -5
  10. package/src/__tests__/components/TableFilters/SiteFilter/SiteFilter.test.tsx +8 -7
  11. package/src/__tests__/components/TableFilters/StatusFilter/StatusFilter.test.tsx +21 -20
  12. package/src/__tests__/components/TableFilters/TranslationsFilter/TranslationsFilter.test.tsx +24 -23
  13. package/src/__tests__/components/TableFilters/TypeFilter/TypeFilter.test.tsx +6 -5
  14. package/src/__tests__/components/TableFilters/UsersFilter/UsersFilter.test.tsx +17 -16
  15. package/src/api/sites.tsx +5 -9
  16. package/src/components/Button/index.tsx +3 -1
  17. package/src/components/Button/style.tsx +6 -0
  18. package/src/components/ConfigPanel/Form/ConnectedField/PageConnectedField/TemplateManager/index.tsx +2 -2
  19. package/src/components/ConfigPanel/Form/ConnectedField/PageConnectedField/index.tsx +1 -1
  20. package/src/components/Fields/ArrayFieldGroup/ArrayFieldInline/index.tsx +3 -2
  21. package/src/components/Fields/ArrayFieldGroup/ArrayFieldItem/index.tsx +3 -1
  22. package/src/components/Fields/ArrayFieldGroup/index.tsx +5 -2
  23. package/src/components/Fields/CheckField/style.tsx +2 -2
  24. package/src/components/Fields/ColorPicker/index.tsx +4 -2
  25. package/src/components/Fields/ColorPicker/style.tsx +4 -0
  26. package/src/components/Fields/DateField/DatePickerInput/index.tsx +1 -1
  27. package/src/components/Fields/FileField/index.tsx +3 -1
  28. package/src/components/Fields/FileField/style.tsx +9 -4
  29. package/src/components/Fields/SliderField/index.tsx +4 -2
  30. package/src/components/Fields/SliderField/style.tsx +53 -4
  31. package/src/components/Fields/TimeField/style.tsx +6 -5
  32. package/src/components/FileGallery/index.tsx +26 -16
  33. package/src/components/FileGallery/style.tsx +12 -1
  34. package/src/components/FilterTagsBar/index.tsx +61 -0
  35. package/src/components/FilterTagsBar/style.tsx +30 -0
  36. package/src/components/FloatingMenu/index.tsx +5 -1
  37. package/src/components/Gallery/GalleryFilters/Orientation/index.tsx +14 -6
  38. package/src/components/Gallery/GalleryFilters/SortBy/index.tsx +24 -8
  39. package/src/components/Gallery/GalleryFilters/Type/index.tsx +22 -9
  40. package/src/components/Gallery/GalleryPanel/GalleryDragAndDrop/style.tsx +2 -1
  41. package/src/components/Gallery/hooks.tsx +37 -23
  42. package/src/components/Gallery/index.tsx +38 -20
  43. package/src/components/Gallery/style.tsx +15 -2
  44. package/src/components/MainWrapper/AppBar/index.tsx +3 -0
  45. package/src/components/MainWrapper/index.tsx +1 -0
  46. package/src/components/SearchTagsBar/index.tsx +43 -0
  47. package/src/components/SearchTagsBar/style.tsx +30 -0
  48. package/src/components/TableFilters/CategoryFilter/index.tsx +17 -10
  49. package/src/components/TableFilters/CheckGroupFilter/index.tsx +12 -9
  50. package/src/components/TableFilters/DateFilter/index.tsx +3 -2
  51. package/src/components/TableFilters/LastAccessFilter/index.tsx +4 -4
  52. package/src/components/TableFilters/LiveFilter/index.tsx +26 -22
  53. package/src/components/TableFilters/NameFilter/index.tsx +4 -3
  54. package/src/components/TableFilters/PermissionsFilter/index.tsx +4 -3
  55. package/src/components/TableFilters/RoleFilter/index.tsx +17 -7
  56. package/src/components/TableFilters/SiteFilter/index.tsx +23 -8
  57. package/src/components/TableFilters/StateFilter/index.tsx +15 -6
  58. package/src/components/TableFilters/StatusFilter/index.tsx +3 -2
  59. package/src/components/TableFilters/TranslationsFilter/index.tsx +19 -11
  60. package/src/components/TableFilters/TypeFilter/index.tsx +9 -5
  61. package/src/components/TableFilters/UsersFilter/index.tsx +4 -3
  62. package/src/components/Tag/index.tsx +5 -4
  63. package/src/components/index.tsx +4 -0
  64. package/src/containers/Navigation/Menu/actions.tsx +1 -13
  65. package/src/containers/Navigation/Menu/constants.tsx +0 -1
  66. package/src/containers/Navigation/Menu/interfaces.tsx +1 -7
  67. package/src/containers/Navigation/Menu/reducer.tsx +0 -4
  68. package/src/containers/Sites/actions.tsx +2 -1
  69. package/src/containers/Sites/interfaces.tsx +2 -2
  70. package/src/containers/Sites/reducer.tsx +2 -2
  71. package/src/containers/StructuredData/actions.tsx +2 -1
  72. package/src/forms/editor.tsx +1 -1
  73. package/src/modules/Categories/CategoriesList/CategoryItem/style.tsx +2 -0
  74. package/src/modules/Content/BulkHeader/TableHeader/index.tsx +26 -14
  75. package/src/modules/Content/BulkHeader/index.tsx +3 -3
  76. package/src/modules/Content/PageItem/index.tsx +21 -23
  77. package/src/modules/Content/PageItem/style.tsx +2 -0
  78. package/src/modules/Content/hooks.tsx +23 -13
  79. package/src/modules/Content/index.tsx +44 -11
  80. package/src/modules/Content/style.tsx +19 -1
  81. package/src/modules/FileDrive/Breadcrumb/style.tsx +1 -1
  82. package/src/modules/FileDrive/FileDragAndDrop/index.tsx +7 -6
  83. package/src/modules/FileDrive/FileDragAndDrop/style.tsx +2 -0
  84. package/src/modules/FileDrive/FileFilters/SortBy/index.tsx +24 -8
  85. package/src/modules/FileDrive/FileFilters/Type/index.tsx +26 -22
  86. package/src/modules/FileDrive/hooks.tsx +28 -13
  87. package/src/modules/FileDrive/index.tsx +31 -18
  88. package/src/modules/FileDrive/style.tsx +20 -1
  89. package/src/modules/Navigation/Defaults/Item/style.tsx +2 -0
  90. package/src/modules/Navigation/Menus/List/Nav/index.tsx +10 -12
  91. package/src/modules/Navigation/Menus/List/Table/SidePanel/index.tsx +0 -2
  92. package/src/modules/Navigation/Menus/List/index.tsx +8 -5
  93. package/src/modules/Redirects/BulkHeader/TableHeader/index.tsx +4 -2
  94. package/src/modules/Redirects/BulkHeader/index.tsx +3 -2
  95. package/src/modules/Redirects/hooks.tsx +23 -15
  96. package/src/modules/Redirects/index.tsx +61 -44
  97. package/src/modules/Redirects/style.tsx +10 -0
  98. package/src/modules/Settings/Integrations/BulkHeader/TableHeader/index.tsx +7 -11
  99. package/src/modules/Settings/Integrations/BulkHeader/index.tsx +4 -8
  100. package/src/modules/Settings/Integrations/hooks.tsx +23 -19
  101. package/src/modules/Settings/Integrations/index.tsx +22 -26
  102. package/src/modules/Settings/Integrations/style.tsx +7 -0
  103. package/src/modules/Sites/SitesList/GridView/GridHeaderFilter/index.tsx +8 -7
  104. package/src/modules/Sites/SitesList/ListView/BulkHeader/TableHeader/index.tsx +10 -5
  105. package/src/modules/Sites/SitesList/ListView/BulkHeader/index.tsx +4 -3
  106. package/src/modules/Sites/SitesList/hooks.tsx +26 -20
  107. package/src/modules/Sites/SitesList/index.tsx +53 -22
  108. package/src/modules/Sites/SitesList/style.tsx +16 -0
  109. package/src/modules/StructuredData/StructuredDataList/BulkHeader/TableHeader/index.tsx +3 -3
  110. package/src/modules/StructuredData/StructuredDataList/BulkHeader/index.tsx +3 -3
  111. package/src/modules/StructuredData/StructuredDataList/GlobalPageItem/index.tsx +3 -3
  112. package/src/modules/StructuredData/StructuredDataList/GlobalPageItem/style.tsx +2 -0
  113. package/src/modules/StructuredData/StructuredDataList/StructuredDataItem/style.tsx +2 -0
  114. package/src/modules/StructuredData/StructuredDataList/hooks.tsx +25 -15
  115. package/src/modules/StructuredData/StructuredDataList/index.tsx +57 -14
  116. package/src/modules/StructuredData/StructuredDataList/style.tsx +10 -1
  117. package/src/modules/Users/Roles/BulkHeader/TableHeader/index.tsx +2 -2
  118. package/src/modules/Users/Roles/BulkHeader/index.tsx +2 -5
  119. package/src/modules/Users/Roles/hooks.tsx +24 -15
  120. package/src/modules/Users/Roles/index.tsx +7 -18
  121. package/src/modules/Users/UserList/BulkHeader/TableHeader/index.tsx +5 -18
  122. package/src/modules/Users/UserList/BulkHeader/index.tsx +15 -13
  123. package/src/modules/Users/UserList/hooks.tsx +27 -25
  124. package/src/modules/Users/UserList/index.tsx +69 -43
  125. package/src/modules/Users/UserList/style.tsx +10 -1
  126. package/src/types/index.tsx +19 -13
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import { BulkSelectionOptions } from "@ax/components";
3
- import { IRole } from "@ax/types";
3
+ import { IQueryValue, IRole } from "@ax/types";
4
4
  import { usePermission } from "@ax/hooks";
5
5
  import TableHeader from "./TableHeader";
6
6
 
@@ -23,13 +23,15 @@ const BulkHeader = (props: IProps): JSX.Element => {
23
23
 
24
24
  const isAllowedToRemoveUsers = usePermission("usersRoles.removeUsers");
25
25
 
26
- const bulkActions = isAllowedToRemoveUsers ? [
27
- {
28
- icon: "delete",
29
- text: isSiteView ? "Remove from this site" : "delete",
30
- action: bulkDelete,
31
- },
32
- ] : [];
26
+ const bulkActions = isAllowedToRemoveUsers
27
+ ? [
28
+ {
29
+ icon: "delete",
30
+ text: isSiteView ? "Remove from this site" : "delete",
31
+ action: bulkDelete,
32
+ },
33
+ ]
34
+ : [];
33
35
 
34
36
  return showBulk ? (
35
37
  <BulkSelectionOptions
@@ -56,16 +58,16 @@ const BulkHeader = (props: IProps): JSX.Element => {
56
58
  interface IProps {
57
59
  showBulk: boolean;
58
60
  isSiteView?: boolean;
59
- checkState: any;
61
+ checkState: Record<string, boolean>;
60
62
  bulkDelete: () => void;
61
63
  selectItems: () => void;
62
64
  selectAllItems: () => void;
63
65
  totalItems: number;
64
66
  isScrolling: boolean;
65
- sortItems: (orderPointer: string, isAscending: boolean) => void;
66
- sortedListStatus: any;
67
- filterValues: any;
68
- filterItems: (filterPointer: string, filtersSelected: string) => void;
67
+ sortItems: (orderPointer: IQueryValue[], isAscending: boolean) => void;
68
+ sortedListStatus: { isAscending: boolean; sortedByName: boolean; sortedByDateCreated: boolean };
69
+ filterValues: Record<string, IQueryValue[]>;
70
+ filterItems: (filterPointer: string, filtersSelected: IQueryValue[]) => void;
69
71
  roles: IRole[];
70
72
  }
71
73
 
@@ -1,5 +1,5 @@
1
1
  import { useState } from "react";
2
- import { IUsersQueryValues } from "@ax/types";
2
+ import { IQueryValue, IUsersQueryValues } from "@ax/types";
3
3
 
4
4
  const useSortedListStatus = () => {
5
5
  const sortedInitialState: { isAscending: boolean; sortedByName: boolean; sortedByDateCreated: boolean } = {
@@ -16,23 +16,30 @@ const useSortedListStatus = () => {
16
16
  };
17
17
  };
18
18
 
19
- const useFilterQuery = (): IUseFilterQuery => {
20
- const initialQueryValues = {
21
- order: "",
22
- filterSites: "noFilter",
23
- filterRoles: "all",
19
+ const useFilterQuery = () => {
20
+ const initialQueryValues: Record<string, IQueryValue[]> = {
21
+ order: [],
22
+ filterSites: [{ value: "all", label: "All" }],
23
+ filterRoles: [{ value: "all", label: "All" }],
24
24
  };
25
25
 
26
26
  const [query, setQuery] = useState(initialQueryValues);
27
+ const [currentFilterQuery, setCurrentFilterQuery] = useState("");
27
28
 
28
29
  const setFilterQuery = (filterValues: IUsersQueryValues) => {
29
30
  const { order, filterSites, filterRoles } = filterValues;
30
-
31
- const filterRolesValue = filterRoles === "all" ? "" : filterRoles;
32
31
  let filterQuery = "";
33
32
 
34
- const currentQuery = (pointer: string, values: string) => {
35
- return filterQuery ? filterQuery.concat(`&${pointer}=${values}`) : `?${pointer}=${values}`;
33
+ const currentQuery = (pointer: string, values: IQueryValue[]): string => {
34
+ const stringValues = Array.isArray(values) && values.length
35
+ ? values.map((value) => (value.value !== "all" ? value.value : "")).join(",")
36
+ : "";
37
+
38
+ return !stringValues.length
39
+ ? filterQuery
40
+ : filterQuery.length
41
+ ? filterQuery.concat(`&${pointer}=${stringValues}`)
42
+ : `?${pointer}=${stringValues}`;
36
43
  };
37
44
 
38
45
  const isNotInitialValue = (pointer: keyof IUsersQueryValues) => {
@@ -41,40 +48,35 @@ const useFilterQuery = (): IUseFilterQuery => {
41
48
 
42
49
  if (isNotInitialValue("order")) filterQuery = currentQuery("order", order);
43
50
  if (isNotInitialValue("filterSites")) filterQuery = currentQuery("filterSites", filterSites);
44
- if (isNotInitialValue("filterRoles")) filterQuery = currentQuery("filterRoles", filterRolesValue);
51
+ if (isNotInitialValue("filterRoles")) filterQuery = currentQuery("filterRoles", filterRoles);
45
52
 
46
- return filterQuery;
53
+ setCurrentFilterQuery(filterQuery);
47
54
  };
48
55
 
49
- const setFiltersSelection = (pointer: string, filter: string, isAscendent?: boolean) => {
56
+ const setFiltersSelection = (pointer: string, filter: IQueryValue[], isAscendent?: boolean) => {
50
57
  const { order, filterSites, filterRoles } = query;
51
58
  const orderMethod = isAscendent ? "asc" : "desc";
52
59
  const filterValues = {
53
- order: pointer === "order" ? `${filter}-${orderMethod}` : order,
60
+ order: pointer === "order" ? [{ value: `${filter[0].value}-${orderMethod}`, label: filter[0].label }] : order,
54
61
  filterSites: pointer === "filterSites" ? filter : filterSites,
55
62
  filterRoles: pointer === "filterRoles" ? filter : filterRoles,
56
63
  };
57
64
 
58
65
  setQuery(filterValues);
59
-
60
- return filterValues;
66
+ setFilterQuery(filterValues);
61
67
  };
62
68
 
63
- const resetFilterQuery = () => setQuery(initialQueryValues);
69
+ const resetFilterQuery = () => {
70
+ setQuery(initialQueryValues);
71
+ setCurrentFilterQuery("");
72
+ }
64
73
 
65
74
  return {
66
75
  setFiltersSelection,
67
- setFilterQuery,
68
76
  resetFilterQuery,
69
77
  filterValues: query,
78
+ filterQuery: currentFilterQuery,
70
79
  };
71
80
  };
72
81
 
73
- interface IUseFilterQuery {
74
- setFiltersSelection(pointer: string, filter: string, isAscendent?: boolean): IUsersQueryValues;
75
- setFilterQuery(filterValues: IUsersQueryValues): string;
76
- resetFilterQuery(): void;
77
- filterValues: IUsersQueryValues;
78
- }
79
-
80
82
  export { useSortedListStatus, useFilterQuery };
@@ -1,13 +1,23 @@
1
1
  import React, { useEffect, useRef, useState } from "react";
2
2
  import { connect } from "react-redux";
3
3
 
4
- import { IRootState, IUser, ISite, IGetRoles, IRole, IGetSitesParams } from "@ax/types";
4
+ import { IRootState, IUser, ISite, IGetRoles, IRole, IGetSitesParams, IQueryValue } from "@ax/types";
5
5
  import { useBulkSelection, useModal, usePermission, useToast } from "@ax/hooks";
6
6
  import { appActions } from "@ax/containers/App";
7
7
  import { usersActions } from "@ax/containers/Users";
8
8
  import { sitesActions } from "@ax/containers/Sites";
9
9
 
10
- import { MainWrapper, TableList, ErrorToast, EmptyState, Modal, Nav, Toast } from "@ax/components";
10
+ import {
11
+ MainWrapper,
12
+ TableList,
13
+ ErrorToast,
14
+ EmptyState,
15
+ Modal,
16
+ Nav,
17
+ Toast,
18
+ SearchTagsBar,
19
+ FilterTagsBar,
20
+ } from "@ax/components";
11
21
 
12
22
  import BulkHeader from "./BulkHeader";
13
23
  import UserItem from "./UserItem";
@@ -40,11 +50,10 @@ const UserList = (props: IUserListProps): JSX.Element => {
40
50
  const [page, setPage] = useState(1);
41
51
  const [isScrolling, setIsScrolling] = useState(false);
42
52
  const [searchQuery, setSearchQuery] = useState<string>("");
43
- const [currentFilterQuery, setCurrentFilterQuery] = useState("");
44
53
  const [usersDeleted, setUSersDeleted] = useState(1);
45
54
 
46
55
  const { sortedListStatus, setSortedListStatus } = useSortedListStatus();
47
- const { setFiltersSelection, setFilterQuery, filterValues } = useFilterQuery();
56
+ const { setFiltersSelection, resetFilterQuery, filterValues, filterQuery } = useFilterQuery();
48
57
  const { isVisible, toggleToast, setIsVisible } = useToast();
49
58
 
50
59
  const tableRef = useRef<HTMLDivElement>(null);
@@ -69,14 +78,14 @@ const UserList = (props: IUserListProps): JSX.Element => {
69
78
 
70
79
  useEffect(() => {
71
80
  const handleGetUsers = async () => {
72
- const query = searchQuery ? (currentFilterQuery ? `&query=${searchQuery}` : `?query=${searchQuery}`) : "";
81
+ const query = searchQuery ? (filterQuery ? `&query=${searchQuery}` : `?query=${searchQuery}`) : "";
73
82
  const currentFilterQuerySite =
74
- isSiteView && currentFilterQuery ? `${currentFilterQuery}&site=${currentSiteInfo.id}` : currentFilterQuery;
83
+ isSiteView && filterQuery ? `${filterQuery}&site=${currentSiteInfo.id}` : filterQuery;
75
84
  await getUsers({ filterQuery: currentFilterQuerySite, query }, currentSiteInfo?.id);
76
85
  };
77
86
  handleGetUsers();
78
87
  // eslint-disable-next-line react-hooks/exhaustive-deps
79
- }, [currentFilterQuery, searchQuery]);
88
+ }, [filterQuery, searchQuery]);
80
89
 
81
90
  useEffect(() => {
82
91
  if (wrapperRef.current) {
@@ -88,7 +97,7 @@ const UserList = (props: IUserListProps): JSX.Element => {
88
97
  useEffect(() => {
89
98
  const handleRolesSites = async () => {
90
99
  const siteId = isSiteView ? currentSiteInfo.id : "global";
91
- await getRoles({ siteId });
100
+ await getRoles({ siteId }, undefined, false);
92
101
  await getSites({ pagination: false, recentSitesNumber: 0 });
93
102
  };
94
103
  handleRolesSites();
@@ -139,20 +148,16 @@ const UserList = (props: IUserListProps): JSX.Element => {
139
148
  }
140
149
  : undefined;
141
150
 
142
- const sortItems = async (orderPointer: string, isAscending: boolean) => {
151
+ const sortItems = async (orderPointer: IQueryValue[], isAscending: boolean) => {
143
152
  setPage(firstPage);
144
- const sortedState = getSortedListStatus(orderPointer, isAscending);
153
+ const sortedState = getSortedListStatus(orderPointer[0].value.toString(), isAscending);
145
154
  setSortedListStatus(sortedState);
146
- const filtersSelection = setFiltersSelection("order", orderPointer, isAscending);
147
- const filterQuery = setFilterQuery(filtersSelection);
148
- setCurrentFilterQuery(filterQuery);
155
+ setFiltersSelection("order", orderPointer, isAscending);
149
156
  };
150
157
 
151
- const filterItems = async (filterPointer: string, filtersSelected: string) => {
158
+ const filterItems = async (filterPointer: string, filtersSelected: IQueryValue[]) => {
152
159
  setPage(firstPage);
153
- const filtersSelection = setFiltersSelection(filterPointer, filtersSelected);
154
- const filterQuery = setFilterQuery(filtersSelection);
155
- setCurrentFilterQuery(filterQuery);
160
+ setFiltersSelection(filterPointer, filtersSelected);
156
161
  };
157
162
 
158
163
  const handleClick = (id: number) => async () => {
@@ -194,8 +199,18 @@ const UserList = (props: IUserListProps): JSX.Element => {
194
199
  const mainDeleteAction = { title: isSiteView ? "Remove from this site" : "Delete Users", onClick: bulkDelete };
195
200
  const secondaryDeleteAction = { title: "Cancel", onClick: toggleModal };
196
201
 
202
+ const filterLabels = {
203
+ filterRoles: "Role",
204
+ filterSites: "Site",
205
+ };
206
+
197
207
  return (
198
- <MainWrapper title="Users & Roles" rightButton={rightButtonProps} searchAction={setSearchQuery}>
208
+ <MainWrapper
209
+ title="Users & Roles"
210
+ rightButton={rightButtonProps}
211
+ searchAction={setSearchQuery}
212
+ searchValue={searchQuery}
213
+ >
199
214
  <S.UsersWrapper ref={wrapperRef} data-testid="users-wrapper">
200
215
  <Nav current={currentNavItem} items={navItems} onClick={handleMenuClick} />
201
216
  <S.TableListWrapper>
@@ -207,30 +222,41 @@ const UserList = (props: IUserListProps): JSX.Element => {
207
222
  hasFixedHeader={true}
208
223
  tableRef={tableRef}
209
224
  >
210
- {isEmpty ? (
211
- <S.EmptyWrapper data-testid="empty-wrapper">
212
- <EmptyState message="No users found" />
213
- </S.EmptyWrapper>
214
- ) : (
215
- pageUsers &&
216
- pageUsers.map((user: any) => {
217
- const isItemSelected = isSelected(user.id);
218
- return (
219
- <UserItem
220
- siteId={currentSiteInfo?.id}
221
- isSiteView={isSiteView}
222
- key={user.id}
223
- user={user}
224
- sites={sites}
225
- isSelected={isItemSelected}
226
- onChange={addToBulkSelection}
227
- onClick={handleClick(user.id)}
228
- roles={roles}
229
- toggleDeleteToast={handleToggleToast}
230
- />
231
- );
232
- })
233
- )}
225
+ <>
226
+ <S.SearchTags>
227
+ <SearchTagsBar query={searchQuery} setQuery={setSearchQuery} />
228
+ <FilterTagsBar
229
+ filters={filterValues}
230
+ setFilters={setFiltersSelection}
231
+ resetFilters={resetFilterQuery}
232
+ labels={filterLabels}
233
+ />
234
+ </S.SearchTags>
235
+ {isEmpty ? (
236
+ <S.EmptyWrapper data-testid="empty-wrapper">
237
+ <EmptyState message="No users found" />
238
+ </S.EmptyWrapper>
239
+ ) : (
240
+ pageUsers &&
241
+ pageUsers.map((user: any) => {
242
+ const isItemSelected = isSelected(user.id);
243
+ return (
244
+ <UserItem
245
+ siteId={currentSiteInfo?.id}
246
+ isSiteView={isSiteView}
247
+ key={user.id}
248
+ user={user}
249
+ sites={sites}
250
+ isSelected={isItemSelected}
251
+ onChange={addToBulkSelection}
252
+ onClick={handleClick(user.id)}
253
+ roles={roles}
254
+ toggleDeleteToast={handleToggleToast}
255
+ />
256
+ );
257
+ })
258
+ )}
259
+ </>
234
260
  </TableList>
235
261
  </S.TableListWrapper>
236
262
  </S.UsersWrapper>
@@ -285,7 +311,7 @@ interface IDispatchProps {
285
311
  setHistoryPush(route: string): void;
286
312
  deleteUser(id: number[]): Promise<boolean>;
287
313
  removeUsersBulk(siteId: number, users: number[]): void;
288
- getRoles(params: IGetRoles): Promise<void>;
314
+ getRoles(params: IGetRoles, token?: string, hasLoading?: boolean): Promise<void>;
289
315
  getSites(params: IGetSitesParams): Promise<void>;
290
316
  }
291
317
 
@@ -31,4 +31,13 @@ const ModalContent = styled.div`
31
31
  }
32
32
  `;
33
33
 
34
- export { UsersWrapper, NotificationWrapper, TableListWrapper, EmptyWrapper, ModalContent };
34
+ const SearchTags = styled.div`
35
+ & > div:nth-child(1) {
36
+ margin-bottom: ${(p) => p.theme.spacing.xs};
37
+ }
38
+ & > div:nth-child(2) {
39
+ margin-bottom: ${(p) => p.theme.spacing.xs};
40
+ }
41
+ `;
42
+
43
+ export { UsersWrapper, NotificationWrapper, TableListWrapper, EmptyWrapper, ModalContent, SearchTags };
@@ -359,6 +359,7 @@ export interface IMenu {
359
359
 
360
360
  export interface IMenuItem {
361
361
  id: number;
362
+ name: string;
362
363
  editorID?: number;
363
364
  label: string;
364
365
  url: any;
@@ -665,28 +666,33 @@ export interface IStructuredDataSortedInitialState {
665
666
  }
666
667
 
667
668
  export interface IStructuredDataQueryValues {
668
- types: string;
669
- translated: string;
670
- liveStatus: string;
671
- order: string;
672
- filterSites: string;
673
- categories: string;
674
- related: string;
669
+ types: IQueryValue[];
670
+ translated: IQueryValue[];
671
+ liveStatus: IQueryValue[];
672
+ order: IQueryValue[];
673
+ filterSites: IQueryValue[];
674
+ categories: IQueryValue[];
675
+ related: IQueryValue[];
676
+ }
677
+
678
+ export interface IQueryValue {
679
+ value: string | number;
680
+ label: string;
675
681
  }
676
682
 
677
683
  export interface IUsersQueryValues {
678
- order: string;
679
- filterSites: string;
680
- filterRoles: string;
684
+ order: IQueryValue[];
685
+ filterSites: IQueryValue[];
686
+ filterRoles: IQueryValue[];
681
687
  }
682
688
 
683
689
  export interface IRolesQueryValues {
684
- order: string;
690
+ order: IQueryValue[];
685
691
  }
686
692
 
687
693
  export interface ISitesQueryValues {
688
- order: string;
689
- liveStatus: string;
694
+ order: IQueryValue[];
695
+ liveStatus: IQueryValue[];
690
696
  }
691
697
 
692
698
  export interface IDataPackConfigImportCategory {