@databiosphere/findable-ui 5.0.0 → 6.0.0

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 (183) hide show
  1. package/README.md +5 -1
  2. package/lib/components/ComponentCreator/ComponentCreator.d.ts +4 -2
  3. package/lib/components/ComponentCreator/ComponentCreator.js +6 -8
  4. package/lib/components/Detail/components/DetailViewTable/detailViewTable.d.ts +3 -3
  5. package/lib/components/Detail/components/DetailViewTable/detailViewTable.js +1 -1
  6. package/lib/components/Detail/components/Table/common/utils.d.ts +2 -2
  7. package/lib/components/Detail/components/Table/components/TableBody/tableBody.d.ts +3 -3
  8. package/lib/components/Detail/components/Table/components/TableRows/components/CollapsableRows/collapsableRows.d.ts +3 -3
  9. package/lib/components/Detail/components/Table/components/TableRows/components/CollapsableRows/collapsableRows.js +2 -4
  10. package/lib/components/Detail/components/Table/components/TableRows/tableRows.d.ts +2 -2
  11. package/lib/components/Detail/components/Table/components/TableRows/tableRows.js +2 -1
  12. package/lib/components/Detail/components/Table/table.d.ts +3 -4
  13. package/lib/components/Detail/components/Table/table.js +2 -1
  14. package/lib/components/Filter/components/Filters/filters.d.ts +1 -1
  15. package/lib/components/Index/components/Cell/cell.d.ts +3 -0
  16. package/lib/components/Index/components/Cell/cell.js +3 -0
  17. package/lib/components/Index/components/NTag/components/Tooltip/tooltip.d.ts +3 -0
  18. package/lib/components/Index/components/NTag/components/Tooltip/tooltip.js +3 -0
  19. package/lib/components/Index/components/NTag/nTag.d.ts +3 -0
  20. package/lib/components/Index/components/NTag/nTag.js +3 -0
  21. package/lib/components/Index/components/NTagCell/nTagCell.d.ts +6 -1
  22. package/lib/components/Index/components/NTagCell/nTagCell.js +6 -2
  23. package/lib/components/Layout/components/Outline/common/constants.d.ts +1 -1
  24. package/lib/components/Links/components/Link/components/ExploreViewLink/exploreViewLink.d.ts +1 -1
  25. package/lib/components/Links/components/Link/link.d.ts +3 -1
  26. package/lib/components/Links/components/Link/link.js +4 -4
  27. package/lib/components/Table/common/gridTable.styles.js +8 -2
  28. package/lib/components/Table/common/utils.d.ts +19 -14
  29. package/lib/components/Table/common/utils.js +26 -11
  30. package/lib/components/Table/components/DownloadEntityResults/downloadEntityResults.d.ts +3 -3
  31. package/lib/components/Table/components/PaginationSummary/paginationSummary.js +9 -8
  32. package/lib/components/Table/components/TableBody/tableBody.d.ts +3 -3
  33. package/lib/components/Table/components/TableCell/common/utils.d.ts +3 -3
  34. package/lib/components/Table/components/TableCell/components/BasicCell/basicCell.d.ts +7 -0
  35. package/lib/components/Table/components/TableCell/components/BasicCell/basicCell.js +55 -0
  36. package/lib/components/Table/components/TableCell/components/NTagCell/components/NTag/components/Tooltip/tooltip.d.ts +6 -0
  37. package/lib/components/Table/components/TableCell/components/NTagCell/components/NTag/components/Tooltip/tooltip.js +93 -0
  38. package/lib/components/Table/components/TableCell/components/NTagCell/components/NTag/components/Tooltip/tooltip.styles.d.ts +5 -0
  39. package/lib/components/Table/components/TableCell/components/NTagCell/components/NTag/components/Tooltip/tooltip.styles.js +16 -0
  40. package/lib/components/Table/components/TableCell/components/NTagCell/components/NTag/nTag.d.ts +7 -0
  41. package/lib/components/Table/components/TableCell/components/NTagCell/components/NTag/nTag.js +24 -0
  42. package/lib/components/Table/components/TableCell/components/NTagCell/nTagCell.d.ts +9 -0
  43. package/lib/components/Table/components/TableCell/components/NTagCell/nTagCell.js +53 -0
  44. package/lib/components/Table/components/TableCell/components/RowSelectionCell/rowSelectionCell.d.ts +2 -2
  45. package/lib/components/Table/components/TableHead/components/HeadSelectionCell/headSelectionCell.d.ts +2 -2
  46. package/lib/components/Table/components/TableHead/tableHead.d.ts +3 -3
  47. package/lib/components/Table/components/TableRow/tableRow.styles.d.ts +16 -0
  48. package/lib/components/Table/components/TableRow/tableRow.styles.js +22 -0
  49. package/lib/components/Table/components/TableRows/components/CollapsableRows/collapsableRows.d.ts +3 -3
  50. package/lib/components/Table/components/TableRows/components/CollapsableRows/collapsableRows.js +3 -2
  51. package/lib/components/Table/components/TableRows/tableRows.d.ts +3 -3
  52. package/lib/components/Table/components/TableRows/tableRows.js +3 -1
  53. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/RowDrawer/common/constants.d.ts +2 -0
  54. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/RowDrawer/common/constants.js +12 -0
  55. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/RowDrawer/rowDrawer.d.ts +9 -0
  56. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/RowDrawer/rowDrawer.js +32 -0
  57. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/RowDrawer/rowDrawer.styles.d.ts +6 -0
  58. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/RowDrawer/rowDrawer.styles.js +35 -0
  59. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/Section/components/RowDetail/rowDetail.d.ts +12 -0
  60. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/Section/components/RowDetail/rowDetail.js +32 -0
  61. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/Section/components/RowDetail/rowDetail.styles.d.ts +5 -0
  62. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/Section/components/RowDetail/rowDetail.styles.js +50 -0
  63. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/Section/section.d.ts +7 -0
  64. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/Section/section.js +16 -0
  65. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/Section/section.styles.d.ts +5 -0
  66. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/Section/section.styles.js +17 -0
  67. package/lib/components/Table/components/TableToolbar/components/RowPreview/rowPreview.d.ts +8 -0
  68. package/lib/components/Table/components/TableToolbar/components/RowPreview/rowPreview.js +14 -0
  69. package/lib/components/Table/components/TableToolbar/components/RowSelection/rowSelection.d.ts +3 -3
  70. package/lib/components/Table/components/TableToolbar/tableToolbar.d.ts +3 -3
  71. package/lib/components/Table/components/TableToolbar/tableToolbar.js +9 -6
  72. package/lib/components/Table/features/RowPreview/constants.d.ts +2 -0
  73. package/lib/components/Table/features/RowPreview/constants.js +45 -0
  74. package/lib/components/Table/features/RowPreview/entities.d.ts +22 -0
  75. package/lib/components/Table/features/RowPreview/entities.js +2 -0
  76. package/lib/components/Table/features/RowPreview/utils.d.ts +33 -0
  77. package/lib/components/Table/features/RowPreview/utils.js +89 -0
  78. package/lib/components/Table/features/entities.d.ts +7 -0
  79. package/lib/components/Table/features/entities.js +2 -0
  80. package/lib/components/Table/table.d.ts +4 -12
  81. package/lib/components/Table/table.js +26 -38
  82. package/lib/components/TableCreator/common/entities.d.ts +1 -1
  83. package/lib/components/TableCreator/tableCreator.d.ts +2 -9
  84. package/lib/components/TableCreator/tableCreator.js +4 -4
  85. package/lib/components/common/Button/button.d.ts +1 -1
  86. package/lib/components/common/Drawer/components/DrawerTitle/drawerTitle.d.ts +7 -0
  87. package/lib/components/common/Drawer/components/DrawerTitle/drawerTitle.js +17 -0
  88. package/lib/components/common/Drawer/components/DrawerTitle/drawerTitle.styles.d.ts +5 -0
  89. package/lib/components/common/Drawer/components/DrawerTitle/drawerTitle.styles.js +17 -0
  90. package/lib/components/common/Drawer/components/drawer.styles.d.ts +5 -0
  91. package/lib/components/common/Drawer/components/drawer.styles.js +11 -0
  92. package/lib/components/common/Drawer/drawer.d.ts +7 -0
  93. package/lib/components/common/Drawer/drawer.js +24 -0
  94. package/lib/components/common/Grid/grid.d.ts +1 -1
  95. package/lib/components/common/Typography/common/entities.d.ts +2 -0
  96. package/lib/components/common/Typography/common/entities.js +2 -0
  97. package/lib/config/entities.d.ts +7 -25
  98. package/lib/providers/exploreState/entities.d.ts +3 -2
  99. package/lib/providers/exploreState/initializer/constants.js +1 -3
  100. package/lib/providers/exploreState/initializer/utils.js +1 -0
  101. package/lib/providers/exploreState/payloads/entities.d.ts +6 -11
  102. package/lib/providers/exploreState/utils.d.ts +12 -10
  103. package/lib/providers/exploreState/utils.js +20 -24
  104. package/lib/providers/exploreState.d.ts +12 -32
  105. package/lib/providers/exploreState.js +47 -36
  106. package/lib/styles/common/mixins/colors.d.ts +2 -1
  107. package/lib/styles/common/mixins/colors.js +3 -1
  108. package/lib/theme/common/components.js +11 -2
  109. package/lib/theme/common/palette.d.ts +3 -1
  110. package/lib/theme/common/palette.js +4 -1
  111. package/lib/views/ExploreView/exploreView.js +4 -6
  112. package/package.json +2 -2
  113. package/src/components/ComponentCreator/ComponentCreator.tsx +6 -1
  114. package/src/components/Detail/components/DetailViewTable/detailViewTable.tsx +4 -4
  115. package/src/components/Detail/components/Table/common/utils.ts +2 -2
  116. package/src/components/Detail/components/Table/components/TableBody/tableBody.tsx +3 -3
  117. package/src/components/Detail/components/Table/components/TableRows/components/CollapsableRows/collapsableRows.tsx +5 -7
  118. package/src/components/Detail/components/Table/components/TableRows/tableRows.tsx +10 -6
  119. package/src/components/Detail/components/Table/table.tsx +6 -3
  120. package/src/components/Filter/components/Filters/filters.tsx +1 -1
  121. package/src/components/Index/components/Cell/cell.tsx +4 -0
  122. package/src/components/Index/components/NTag/components/Tooltip/tooltip.tsx +4 -0
  123. package/src/components/Index/components/NTag/nTag.tsx +4 -0
  124. package/src/components/Index/components/NTagCell/nTagCell.tsx +22 -3
  125. package/src/components/Layout/components/Outline/common/constants.ts +1 -1
  126. package/src/components/Links/components/Link/components/ExploreViewLink/exploreViewLink.tsx +1 -1
  127. package/src/components/Links/components/Link/link.tsx +15 -2
  128. package/src/components/Table/common/gridTable.styles.ts +8 -2
  129. package/src/components/Table/common/utils.ts +55 -24
  130. package/src/components/Table/components/DownloadEntityResults/downloadEntityResults.tsx +3 -3
  131. package/src/components/Table/components/PaginationSummary/paginationSummary.tsx +11 -9
  132. package/src/components/Table/components/TableBody/tableBody.tsx +3 -3
  133. package/src/components/Table/components/TableCell/common/utils.ts +3 -3
  134. package/src/components/Table/components/TableCell/components/BasicCell/basicCell.tsx +52 -0
  135. package/src/components/Table/components/TableCell/components/NTagCell/components/NTag/components/Tooltip/tooltip.styles.ts +11 -0
  136. package/src/components/Table/components/TableCell/components/NTagCell/components/NTag/components/Tooltip/tooltip.tsx +86 -0
  137. package/src/components/Table/components/TableCell/components/NTagCell/components/NTag/nTag.tsx +21 -0
  138. package/src/components/Table/components/TableCell/components/NTagCell/nTagCell.tsx +70 -0
  139. package/src/components/Table/components/TableCell/components/RowSelectionCell/rowSelectionCell.tsx +2 -3
  140. package/src/components/Table/components/TableHead/components/HeadSelectionCell/headSelectionCell.tsx +2 -3
  141. package/src/components/Table/components/TableHead/tableHead.tsx +3 -3
  142. package/src/components/Table/components/TableRow/tableRow.styles.ts +22 -0
  143. package/src/components/Table/components/TableRows/components/CollapsableRows/collapsableRows.tsx +8 -6
  144. package/src/components/Table/components/TableRows/tableRows.tsx +9 -6
  145. package/src/components/Table/components/TableToolbar/components/RowPreview/components/RowDrawer/common/constants.ts +11 -0
  146. package/src/components/Table/components/TableToolbar/components/RowPreview/components/RowDrawer/rowDrawer.styles.ts +31 -0
  147. package/src/components/Table/components/TableToolbar/components/RowPreview/components/RowDrawer/rowDrawer.tsx +52 -0
  148. package/src/components/Table/components/TableToolbar/components/RowPreview/components/Section/components/RowDetail/rowDetail.styles.ts +48 -0
  149. package/src/components/Table/components/TableToolbar/components/RowPreview/components/Section/components/RowDetail/rowDetail.tsx +53 -0
  150. package/src/components/Table/components/TableToolbar/components/RowPreview/components/Section/section.styles.ts +12 -0
  151. package/src/components/Table/components/TableToolbar/components/RowPreview/components/Section/section.tsx +25 -0
  152. package/src/components/Table/components/TableToolbar/components/RowPreview/rowPreview.tsx +19 -0
  153. package/src/components/Table/components/TableToolbar/components/RowSelection/rowSelection.tsx +3 -3
  154. package/src/components/Table/components/TableToolbar/tableToolbar.tsx +9 -4
  155. package/src/components/Table/features/RowPreview/constants.ts +65 -0
  156. package/src/components/Table/features/RowPreview/entities.ts +25 -0
  157. package/src/components/Table/features/RowPreview/utils.ts +93 -0
  158. package/src/components/Table/features/entities.ts +13 -0
  159. package/src/components/Table/table.tsx +40 -50
  160. package/src/components/TableCreator/common/entities.ts +1 -1
  161. package/src/components/TableCreator/tableCreator.tsx +15 -22
  162. package/src/components/common/Button/button.tsx +1 -2
  163. package/src/components/common/Drawer/components/DrawerTitle/drawerTitle.styles.ts +12 -0
  164. package/src/components/common/Drawer/components/DrawerTitle/drawerTitle.tsx +27 -0
  165. package/src/components/common/Drawer/components/drawer.styles.ts +6 -0
  166. package/src/components/common/Drawer/drawer.tsx +21 -0
  167. package/src/components/common/Grid/grid.tsx +1 -3
  168. package/src/components/common/Section/components/CollapsableSection/collapsableSection.tsx +1 -2
  169. package/src/components/common/Typography/common/entities.ts +5 -0
  170. package/src/config/entities.ts +7 -37
  171. package/src/providers/exploreState/entities.ts +7 -2
  172. package/src/providers/exploreState/initializer/constants.ts +1 -3
  173. package/src/providers/exploreState/initializer/utils.ts +2 -1
  174. package/src/providers/exploreState/payloads/entities.ts +7 -18
  175. package/src/providers/exploreState/utils.ts +25 -36
  176. package/src/providers/exploreState.tsx +93 -73
  177. package/src/styles/common/mixins/colors.ts +4 -1
  178. package/src/theme/common/components.ts +12 -0
  179. package/src/theme/common/palette.ts +4 -5
  180. package/src/theme/theme.ts +1 -2
  181. package/src/views/ExploreView/exploreView.tsx +3 -25
  182. package/types/data-explorer-ui.d.ts +21 -2
  183. package/src/hooks/useEntityListRelatedView.ts +0 -78
@@ -0,0 +1,93 @@
1
+ import { Row, RowData, Table } from "@tanstack/react-table";
2
+
3
+ /**
4
+ * Returns true if the row is selected for preview.
5
+ * @param row - Row.
6
+ * @param table - Table.
7
+ * @returns true if the row is selected for preview.
8
+ */
9
+ export function getIsPreview<T extends RowData>(
10
+ row: Row<T>,
11
+ table: Table<T>
12
+ ): boolean {
13
+ const keyValue = getRowPreviewKeyValue(table);
14
+ if (!keyValue) return false;
15
+ const [key, value] = keyValue;
16
+ if (!value) return false;
17
+ return key === row.id;
18
+ }
19
+
20
+ /**
21
+ * Returns true if any row is selected for preview.
22
+ * @param table - Table.
23
+ * @returns true if any row is selected for preview.
24
+ */
25
+ export function getIsRowPreview<T extends RowData>(table: Table<T>): boolean {
26
+ const keyValue = getRowPreviewKeyValue(table);
27
+ if (!keyValue) return false;
28
+ const [, value] = keyValue;
29
+ return value;
30
+ }
31
+
32
+ /**
33
+ * Returns row selected for preview. Row data is returned even if the row is no longer "previewed" i.e. selected for preview.
34
+ * @param table - Table.
35
+ * @returns row selected for preview.
36
+ */
37
+ export function getRowPreviewRow<T extends RowData>(
38
+ table: Table<T>
39
+ ): Row<T> | undefined {
40
+ const keyValue = getRowPreviewKeyValue(table);
41
+ if (!keyValue) return;
42
+ const [key] = keyValue;
43
+ // We return the original row data, even if the row is no longer "previewed" i.e. selected for preview.
44
+ // This is to ensure any drawer or modal that is still open can display the row data, until the modal or drawer is closed.
45
+ const rowsById = table.getRowModel().rowsById;
46
+ return rowsById[key];
47
+ }
48
+
49
+ /**
50
+ * Returns the key, value tuple of the row selected for preview.
51
+ * @param table - Table.
52
+ * @returns row preview key, value tuple.
53
+ */
54
+ function getRowPreviewKeyValue<T extends RowData>(
55
+ table: Table<T>
56
+ ): [string, boolean] | undefined {
57
+ const { getState } = table;
58
+ const { rowPreview } = getState();
59
+ if (!rowPreview) return;
60
+ const [[key, value]] = Object.entries(rowPreview);
61
+ return [key, value];
62
+ }
63
+
64
+ /**
65
+ * Toggles the preview state of the row.
66
+ * If the row is already selected for preview, the preview state is toggled off.
67
+ * If the row is not selected for preview, the preview state is updated.
68
+ * @param row - Row.
69
+ * @param table - Table.
70
+ */
71
+ export function togglePreview<T extends RowData>(
72
+ row: Row<T>,
73
+ table: Table<T>
74
+ ): void {
75
+ if (row.getIsPreview()) {
76
+ table.toggleRowPreview();
77
+ return;
78
+ }
79
+ table.setRowPreview({ [row.id]: true });
80
+ }
81
+
82
+ /**
83
+ * Toggles the preview state of any row selected for preview.
84
+ * @param table - Table.
85
+ */
86
+ export function toggleRowPreview<T extends RowData>(table: Table<T>): void {
87
+ const keyValue = getRowPreviewKeyValue(table);
88
+ if (!keyValue) {
89
+ return;
90
+ }
91
+ const [key, value] = keyValue;
92
+ table.setRowPreview({ [key]: !value });
93
+ }
@@ -0,0 +1,13 @@
1
+ import { RowData } from "@tanstack/react-table";
2
+ import {
3
+ RowPreviewInstance,
4
+ RowPreviewOptions,
5
+ RowPreviewRow,
6
+ RowPreviewTableState,
7
+ } from "./RowPreview/entities";
8
+
9
+ export type CustomFeatureInitialTableState = Partial<RowPreviewTableState>;
10
+ export type CustomFeatureInstance<T extends RowData> = RowPreviewInstance<T>;
11
+ export type CustomFeatureOptions = RowPreviewOptions;
12
+ export type CustomFeatureRow = RowPreviewRow;
13
+ export type CustomFeatureTableState = RowPreviewTableState;
@@ -2,20 +2,21 @@ import { TableContainer } from "@mui/material";
2
2
  import {
3
3
  ColumnDef,
4
4
  ColumnSort,
5
+ CoreOptions,
5
6
  getCoreRowModel,
6
7
  getFacetedRowModel,
7
8
  getFilteredRowModel,
8
9
  getPaginationRowModel,
9
10
  getSortedRowModel,
10
11
  InitialTableState,
12
+ RowData,
11
13
  RowSelectionState,
12
14
  TableState,
13
15
  Updater,
14
16
  useReactTable,
15
17
  VisibilityState,
16
18
  } from "@tanstack/react-table";
17
- import { CoreOptions } from "@tanstack/table-core";
18
- import React, { useEffect } from "react";
19
+ import React, { useEffect, useMemo } from "react";
19
20
  import { track } from "../../common/analytics/analytics";
20
21
  import {
21
22
  EVENT_NAME,
@@ -23,7 +24,6 @@ import {
23
24
  PAGINATION_DIRECTION,
24
25
  SORT_DIRECTION,
25
26
  } from "../../common/analytics/entities";
26
- import { Pagination } from "../../common/entities";
27
27
  import { ListViewConfig } from "../../config/entities";
28
28
  import {
29
29
  BREAKPOINT_FN_NAME,
@@ -32,7 +32,7 @@ import {
32
32
  import { useExploreMode } from "../../hooks/useExploreMode";
33
33
  import { useExploreState } from "../../hooks/useExploreState";
34
34
  import { useScroll } from "../../hooks/useScroll";
35
- import { ENTITY_VIEW, ExploreActionKind } from "../../providers/exploreState";
35
+ import { ExploreActionKind } from "../../providers/exploreState";
36
36
  import { DEFAULT_PAGINATION_STATE } from "../../providers/exploreState/initializer/constants";
37
37
  import { TABLET } from "../../theme/common/breakpoints";
38
38
  import { FluidPaper, GridPaper } from "../common/Paper/paper.styles";
@@ -42,26 +42,24 @@ import {
42
42
  buildCategoryViews,
43
43
  getFacetedUniqueValuesWithArrayValues,
44
44
  getGridTemplateColumns,
45
+ getTableStatePagination,
45
46
  isClientFilteringEnabled,
46
47
  } from "./common/utils";
47
48
  import { Pagination as DXPagination } from "./components/Pagination/pagination";
48
49
  import { TableBody } from "./components/TableBody/tableBody";
49
50
  import { TableHead } from "./components/TableHead/tableHead";
50
51
  import { TableToolbar } from "./components/TableToolbar/tableToolbar";
52
+ import { ROW_PREVIEW } from "./features/RowPreview/constants";
53
+ import { RowPreviewState } from "./features/RowPreview/entities";
51
54
  import { GridTable } from "./table.styles";
52
55
 
53
- export interface TableProps<T extends object> {
56
+ export interface TableProps<T extends RowData> {
54
57
  columns: ColumnDef<T>[];
55
- count?: number;
56
58
  getRowId?: CoreOptions<T>["getRowId"];
57
59
  initialState: InitialTableState;
58
60
  items: T[];
59
61
  listView?: ListViewConfig;
60
62
  loading?: boolean;
61
- pages?: number;
62
- pageSize: number;
63
- pagination?: Pagination;
64
- total?: number;
65
63
  }
66
64
 
67
65
  /**
@@ -74,16 +72,14 @@ export interface TableProps<T extends object> {
74
72
  * @param tableProps.initialState - Initial table state.
75
73
  * @param tableProps.items - Row data to display.
76
74
  * @param tableProps.listView - List view configuration.
77
- * @param tableProps.total - Total number of rows in the result set.
78
75
  * @returns Configured table element for display.
79
76
  */
80
- export const TableComponent = <T extends object>({
77
+ export const TableComponent = <T extends RowData>({
81
78
  columns,
82
79
  getRowId,
83
80
  initialState,
84
81
  items,
85
82
  listView,
86
- total,
87
83
  }: // eslint-disable-next-line sonarjs/cognitive-complexity -- TODO fix component length / complexity
88
84
  TableProps<T>): JSX.Element => {
89
85
  const tabletDown = useBreakpointHelper(BREAKPOINT_FN_NAME.DOWN, TABLET);
@@ -92,20 +88,25 @@ TableProps<T>): JSX.Element => {
92
88
  const {
93
89
  entityPageState,
94
90
  filterState,
95
- isRelatedView,
96
91
  listItems,
97
92
  loading,
98
93
  paginationState,
94
+ rowPreview,
99
95
  tabValue,
100
96
  } = exploreState;
101
97
  const { columnsVisibility, enableRowSelection, rowSelection, sorting } =
102
98
  entityPageState[tabValue];
103
- const { currentPage, pages, pageSize } = paginationState;
104
- const { disablePagination = false } = listView || {};
99
+ const { currentPage, pages, pageSize, rows: pageCount } = paginationState;
100
+ const { disablePagination = false, enableRowPreview = false } =
101
+ listView || {};
105
102
  const clientFiltering = isClientFilteringEnabled(exploreMode);
106
103
  const rowDirection = tabletDown
107
104
  ? ROW_DIRECTION.VERTICAL
108
105
  : ROW_DIRECTION.DEFAULT;
106
+ const pagination = useMemo(
107
+ () => getTableStatePagination(currentPage - 1, pageSize),
108
+ [currentPage, pageSize]
109
+ );
109
110
 
110
111
  const onSortingChange = (updater: Updater<ColumnSort[]>): void => {
111
112
  exploreDispatch({
@@ -132,6 +133,13 @@ TableProps<T>): JSX.Element => {
132
133
  });
133
134
  };
134
135
 
136
+ const onRowPreviewChange = (updater: Updater<RowPreviewState>): void => {
137
+ exploreDispatch({
138
+ payload: typeof updater === "function" ? updater(rowPreview) : updater,
139
+ type: ExploreActionKind.UpdateRowPreview,
140
+ });
141
+ };
142
+
135
143
  const onRowSelectionChange = (updater: Updater<RowSelectionState>): void => {
136
144
  exploreDispatch({
137
145
  payload: typeof updater === "function" ? updater(rowSelection) : updater,
@@ -141,19 +149,19 @@ TableProps<T>): JSX.Element => {
141
149
 
142
150
  const state: Partial<TableState> = {
143
151
  columnVisibility: columnsVisibility,
144
- pagination: {
145
- pageIndex: 0,
146
- pageSize: disablePagination ? Number.MAX_SAFE_INTEGER : pageSize,
147
- },
152
+ pagination,
153
+ rowPreview,
148
154
  rowSelection,
149
155
  sorting,
150
156
  };
151
157
  const tableInstance = useReactTable({
158
+ _features: [ROW_PREVIEW],
152
159
  columns,
153
160
  data: items,
154
161
  enableColumnFilters: true, // client-side filtering.
155
162
  enableFilters: true, // client-side filtering.
156
163
  enableMultiSort: clientFiltering,
164
+ enableRowPreview,
157
165
  enableRowSelection,
158
166
  enableSorting: true, // client-side filtering.
159
167
  enableSortingRemoval: false, // client-side filtering.
@@ -167,12 +175,13 @@ TableProps<T>): JSX.Element => {
167
175
  getRowId,
168
176
  getSortedRowModel: clientFiltering ? getSortedRowModel() : undefined,
169
177
  initialState,
170
- manualPagination: clientFiltering,
178
+ manualPagination: true,
171
179
  manualSorting: !clientFiltering,
172
180
  onColumnVisibilityChange,
181
+ onRowPreviewChange,
173
182
  onRowSelectionChange,
174
183
  onSortingChange,
175
- pageCount: total,
184
+ pageCount,
176
185
  state,
177
186
  });
178
187
  const {
@@ -206,7 +215,6 @@ TableProps<T>): JSX.Element => {
206
215
  [EVENT_PARAM.PAGINATION_DIRECTION]: PAGINATION_DIRECTION.NEXT,
207
216
  });
208
217
  }
209
- // const nextPage = pagination?.nextPage ?? tableNextPage;
210
218
  nextPage();
211
219
  scrollTop();
212
220
  };
@@ -229,27 +237,20 @@ TableProps<T>): JSX.Element => {
229
237
  scrollTop();
230
238
  };
231
239
 
232
- // Sets or resets react table column filters `columnFilters` state - for client-side filtering only - with update of filterState.
233
- // - `columnFilters` state is "cleared" for related view, and
234
- // - `columnFilters` state is "set" for all other views.
240
+ // Sets react table column filters `columnFilters` state - for client-side filtering only - with update of filterState.
235
241
  useEffect(() => {
236
242
  if (clientFiltering) {
237
- if (isRelatedView) {
238
- tableInstance.resetColumnFilters();
239
- } else {
240
- tableInstance.setColumnFilters(
241
- filterState.map(({ categoryKey, value }) => ({
242
- id: categoryKey,
243
- value,
244
- }))
245
- );
246
- }
243
+ tableInstance.setColumnFilters(
244
+ filterState.map(({ categoryKey, value }) => ({
245
+ id: categoryKey,
246
+ value,
247
+ }))
248
+ );
247
249
  }
248
- }, [clientFiltering, filterState, isRelatedView, tableInstance]);
250
+ }, [clientFiltering, filterState, tableInstance]);
249
251
 
250
252
  // Process explore response - client-side filtering only.
251
253
  useEffect(() => {
252
- if (isRelatedView) return;
253
254
  if (!listItems || listItems.length === 0) return;
254
255
  if (clientFiltering) {
255
256
  exploreDispatch({
@@ -271,21 +272,10 @@ TableProps<T>): JSX.Element => {
271
272
  clientFiltering,
272
273
  columnFilters,
273
274
  exploreDispatch,
274
- isRelatedView,
275
275
  listItems,
276
276
  results,
277
277
  ]);
278
278
 
279
- // Unmount - reset entity view to "exact".
280
- useEffect(() => {
281
- return () => {
282
- exploreDispatch({
283
- payload: ENTITY_VIEW.EXACT,
284
- type: ExploreActionKind.ToggleEntityView,
285
- });
286
- };
287
- }, [exploreDispatch]);
288
-
289
279
  function canNextPage(): boolean {
290
280
  return currentPage < pages;
291
281
  }
@@ -297,7 +287,7 @@ TableProps<T>): JSX.Element => {
297
287
  return noResults ? (
298
288
  <NoResults Paper={FluidPaper} title={"No Results found"} />
299
289
  ) : (
300
- <FluidPaper>
290
+ <FluidPaper variant="table">
301
291
  <GridPaper>
302
292
  <TableToolbar
303
293
  listView={listView}
@@ -1,4 +1,4 @@
1
- import { ColumnMeta } from "@tanstack/table-core";
1
+ import { ColumnMeta } from "@tanstack/react-table";
2
2
  import { ColumnConfig } from "../../../config/entities";
3
3
 
4
4
  export interface BaseColumnConfig<T, TValue> extends ColumnConfig<T> {
@@ -1,7 +1,12 @@
1
- import { CellContext, ColumnDef, ColumnSort } from "@tanstack/react-table";
2
- import { CoreOptions, HeaderContext, RowData } from "@tanstack/table-core";
1
+ import {
2
+ CellContext,
3
+ ColumnDef,
4
+ ColumnSort,
5
+ CoreOptions,
6
+ HeaderContext,
7
+ RowData,
8
+ } from "@tanstack/react-table";
3
9
  import React, { useMemo } from "react";
4
- import { Pagination } from "../../common/entities";
5
10
  import { ColumnConfig, ListViewConfig } from "../../config/entities";
6
11
  import { PAPER_PANEL_STYLE } from "../common/Paper/paper";
7
12
  import { ComponentCreator } from "../ComponentCreator/ComponentCreator";
@@ -25,19 +30,17 @@ export interface TableCreatorProps<T> {
25
30
  items: T[];
26
31
  listView?: ListViewConfig;
27
32
  loading?: boolean;
28
- pageCount?: number;
29
- pages: number;
30
- pageSize: number;
31
- pagination?: Pagination;
32
- total?: number;
33
33
  }
34
34
 
35
- const createCell = <T extends RowData>(config: ColumnConfig<T>) =>
36
- function CellCreator({ row }: CellContext<T, unknown>): JSX.Element {
35
+ const createCell = <T extends RowData = RowData, TData = unknown>(
36
+ config: ColumnConfig<T>
37
+ ) =>
38
+ function CellCreator(cellContext: CellContext<T, TData>): JSX.Element {
37
39
  return (
38
40
  <ComponentCreator
39
41
  components={[config.componentConfig]}
40
- response={row.original}
42
+ response={cellContext.row.original}
43
+ viewContext={{ cellContext }}
41
44
  />
42
45
  );
43
46
  };
@@ -52,18 +55,13 @@ const createRowSelectionCell = <T extends RowData>() =>
52
55
  return <RowSelectionCell row={row} />;
53
56
  };
54
57
 
55
- export const TableCreator = <T extends object>({
58
+ export const TableCreator = <T extends RowData>({
56
59
  columns,
57
60
  defaultSort,
58
61
  getRowId,
59
62
  items,
60
63
  listView,
61
64
  loading,
62
- pageCount,
63
- pages,
64
- pageSize,
65
- pagination,
66
- total,
67
65
  }: TableCreatorProps<T>): JSX.Element => {
68
66
  const columnDefs: ColumnDef<T>[] = useMemo(
69
67
  () =>
@@ -98,16 +96,11 @@ export const TableCreator = <T extends object>({
98
96
  />
99
97
  <Table<T>
100
98
  columns={columnDefs}
101
- count={pageCount}
102
99
  getRowId={getRowId}
103
100
  initialState={initialState}
104
101
  items={items}
105
102
  listView={listView}
106
103
  loading={loading}
107
- pages={pages}
108
- pageSize={pageSize}
109
- pagination={pagination}
110
- total={total}
111
104
  />
112
105
  </TableCreatorContainer>
113
106
  );
@@ -1,5 +1,4 @@
1
- import { Button as MButton } from "@mui/material";
2
- import { ButtonProps as MButtonProps } from "@mui/material/Button/Button";
1
+ import { Button as MButton, ButtonProps as MButtonProps } from "@mui/material";
3
2
  import React, { ElementType, forwardRef } from "react";
4
3
 
5
4
  /**
@@ -0,0 +1,12 @@
1
+ import styled from "@emotion/styled";
2
+
3
+ export const DrawerTitle = styled.div`
4
+ align-items: center;
5
+ display: flex;
6
+ justify-content: space-between;
7
+ padding: 14px 24px;
8
+
9
+ .MuiIconButton-root {
10
+ margin-right: -12px;
11
+ }
12
+ `;
@@ -0,0 +1,27 @@
1
+ import CloseRoundedIcon from "@mui/icons-material/CloseRounded";
2
+ import { IconButton } from "@mui/material";
3
+ import React, { ReactNode } from "react";
4
+ import { DrawerTitle as Title } from "./drawerTitle.styles";
5
+
6
+ export interface DrawerTitleProps {
7
+ className?: string;
8
+ onClose?: () => void;
9
+ title?: ReactNode;
10
+ }
11
+
12
+ export const DrawerTitle = ({
13
+ className,
14
+ onClose,
15
+ title,
16
+ }: DrawerTitleProps): JSX.Element => {
17
+ return (
18
+ <Title className={className}>
19
+ {title}
20
+ {onClose && (
21
+ <IconButton color="ink" edge="end" onClick={onClose} size="xsmall">
22
+ <CloseRoundedIcon color="inkLight" fontSize="small" />
23
+ </IconButton>
24
+ )}
25
+ </Title>
26
+ );
27
+ };
@@ -0,0 +1,6 @@
1
+ import styled from "@emotion/styled";
2
+
3
+ export const DrawerContent = styled.div`
4
+ overflow-y: auto;
5
+ overscroll-behavior: none;
6
+ `;
@@ -0,0 +1,21 @@
1
+ import { Drawer as MDrawer, DrawerProps as MDrawerProps } from "@mui/material";
2
+ import React, { ReactNode } from "react";
3
+
4
+ export interface DrawerProps extends MDrawerProps {
5
+ children?: ReactNode | ReactNode[];
6
+ className?: string;
7
+ }
8
+
9
+ export const Drawer = ({
10
+ children,
11
+ className,
12
+ onClose,
13
+ open,
14
+ ...props /* Spread props to allow for Mui Drawer specific prop overrides e.g. "hideBackdrop". */
15
+ }: DrawerProps): JSX.Element => {
16
+ return (
17
+ <MDrawer className={className} onClose={onClose} open={open} {...props}>
18
+ {children}
19
+ </MDrawer>
20
+ );
21
+ };
@@ -1,10 +1,8 @@
1
1
  import { Box, SxProps } from "@mui/material";
2
2
  import React, { ReactNode } from "react";
3
3
 
4
- // TODO the prop "children" should not necessarily be optional, but it is for now to avoid typescript errors with the use of this component within site configuration files.
5
-
6
4
  export interface GridProps {
7
- children?: ReactNode | ReactNode[];
5
+ children: ReactNode | ReactNode[];
8
6
  gridSx?: SxProps;
9
7
  }
10
8
 
@@ -1,7 +1,6 @@
1
1
  import AddRoundedIcon from "@mui/icons-material/AddRounded";
2
2
  import RemoveRoundedIcon from "@mui/icons-material/RemoveRounded";
3
- import { Collapse } from "@mui/material";
4
- import { CollapseProps } from "@mui/material/Collapse/Collapse";
3
+ import { Collapse, CollapseProps } from "@mui/material";
5
4
  import React, { ReactNode, useEffect, useState } from "react";
6
5
  import {
7
6
  BREAKPOINT_FN_NAME,
@@ -0,0 +1,5 @@
1
+ import { TypographyProps as MTypographyProps } from "@mui/material";
2
+
3
+ export type TypographyProps =
4
+ | Omit<MTypographyProps, "children" | "component" | "ref">
5
+ | undefined;
@@ -1,12 +1,7 @@
1
1
  import { TabProps as MTabProps, Theme, ThemeOptions } from "@mui/material";
2
- import { ColumnSort } from "@tanstack/react-table";
2
+ import { CellContext, ColumnSort, RowData } from "@tanstack/react-table";
3
3
  import { JSXElementConstructor, ReactNode } from "react";
4
- import {
5
- CategoryKey,
6
- SelectCategoryValueView,
7
- SelectedFilter,
8
- SelectedFilterValue,
9
- } from "../common/entities";
4
+ import { SelectCategoryValueView, SelectedFilter } from "../common/entities";
10
5
  import { HeroTitle } from "../components/common/Title/title";
11
6
  import { FooterProps } from "../components/Layout/components/Footer/footer";
12
7
  import { HeaderProps } from "../components/Layout/components/Header/header";
@@ -119,7 +114,7 @@ export interface ComponentConfig<
119
114
  props?: React.ComponentProps<T>;
120
115
  viewBuilder?: (
121
116
  model: D,
122
- viewContext?: ViewContext
117
+ viewContext?: ViewContext<D>
123
118
  ) => React.ComponentProps<T>;
124
119
  }
125
120
 
@@ -265,9 +260,10 @@ export interface ListConfig<T = any> {
265
260
  export interface ListViewConfig {
266
261
  disablePagination?: boolean;
267
262
  enableDownload?: boolean;
263
+ enableRowPreview?: boolean;
268
264
  enableRowSelection?: boolean;
269
265
  listHero?: ComponentsConfig;
270
- relatedView?: RelatedViewConfig;
266
+ rowPreviewView?: ComponentsConfig; // Row preview view is expected to be a modal or drawer or similar.
271
267
  rowSelectionView?: ComponentsConfig;
272
268
  subTitleHero?: ComponentsConfig;
273
269
  }
@@ -304,15 +300,6 @@ export interface Override {
304
300
  withdrawn?: boolean;
305
301
  }
306
302
 
307
- /**
308
- * Related search function.
309
- */
310
- type RelatedSearchFunction = (
311
- searchKey: CategoryKey | undefined,
312
- resultKey: CategoryKey | undefined,
313
- selectedCategoryValues: SelectedFilterValue | undefined
314
- ) => Promise<RelatedSearchResult | undefined>;
315
-
316
303
  export interface SavedFilter {
317
304
  filters: SelectedFilter[];
318
305
  sorting?: ColumnSort[];
@@ -356,24 +343,6 @@ interface TrackingConfig {
356
343
  trackFilterOpened?: TrackFilterOpenedFunction;
357
344
  }
358
345
 
359
- /**
360
- * Product of the related search function.
361
- */
362
- export interface RelatedSearchResult {
363
- resultKey: CategoryKey; // The related search function resultant search values' category key.
364
- searchKey: CategoryKey; // The related search function search parameters' category key.
365
- values: string[]; // Resultant search values.
366
- }
367
-
368
- /**
369
- * Related view configuration.
370
- */
371
- export interface RelatedViewConfig {
372
- relatedSearchFn: RelatedSearchFunction;
373
- resultKey: CategoryKey; // The related search function resultant search values' category key.
374
- searchKey: CategoryKey; // The related search function search parameters' category key.
375
- }
376
-
377
346
  /**
378
347
  * Interface that will hold the whole configuration for a given site.
379
348
  */
@@ -459,8 +428,9 @@ export type ThemeOptionsFn = (theme: Theme) => ThemeOptions;
459
428
  /**
460
429
  * View context.
461
430
  */
462
- export interface ViewContext {
431
+ export interface ViewContext<T extends RowData, TData = unknown> {
463
432
  authState: Pick<AuthContextProps, "authenticationStatus" | "isAuthenticated">;
433
+ cellContext?: CellContext<T, TData>;
464
434
  entityConfig: EntityConfig;
465
435
  exploreState: ExploreState;
466
436
  fileManifestState: FileManifestState;
@@ -1,11 +1,15 @@
1
- import { ColumnSort, RowSelectionState } from "@tanstack/react-table";
2
- import { VisibilityState } from "@tanstack/table-core/src/features/Visibility";
1
+ import {
2
+ ColumnSort,
3
+ RowSelectionState,
4
+ VisibilityState,
5
+ } from "@tanstack/react-table";
3
6
  import {
4
7
  CategoryValueKey,
5
8
  SelectCategory,
6
9
  SelectCategoryView,
7
10
  SelectedFilter,
8
11
  } from "../../common/entities";
12
+ import { RowPreviewState } from "../../components/Table/features/RowPreview/entities";
9
13
  import {
10
14
  CategoryConfig,
11
15
  CategoryGroup,
@@ -18,6 +22,7 @@ export interface EntityPageState {
18
22
  categoryGroupConfigKey: CategoryGroupConfigKey;
19
23
  columnsVisibility: VisibilityState;
20
24
  enableRowSelection: boolean;
25
+ rowPreview: RowPreviewState;
21
26
  rowSelection: RowSelectionState;
22
27
  sorting: ColumnSort[];
23
28
  }
@@ -34,11 +34,9 @@ export const INITIAL_STATE: ExploreState = {
34
34
  featureFlagState: undefined,
35
35
  filterCount: 0,
36
36
  filterState: [],
37
- isRelatedView: false,
38
37
  listItems: [],
39
- listView: undefined,
40
38
  loading: true,
41
39
  paginationState: DEFAULT_PAGINATION_STATE,
42
- relatedListItems: undefined,
40
+ rowPreview: undefined,
43
41
  tabValue: "",
44
42
  };