@databiosphere/findable-ui 4.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 (184) 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/components/ExploreViewLink/exploreViewLink.js +13 -1
  26. package/lib/components/Links/components/Link/link.d.ts +3 -1
  27. package/lib/components/Links/components/Link/link.js +4 -4
  28. package/lib/components/Table/common/gridTable.styles.js +8 -2
  29. package/lib/components/Table/common/utils.d.ts +19 -14
  30. package/lib/components/Table/common/utils.js +26 -11
  31. package/lib/components/Table/components/DownloadEntityResults/downloadEntityResults.d.ts +3 -3
  32. package/lib/components/Table/components/PaginationSummary/paginationSummary.js +9 -8
  33. package/lib/components/Table/components/TableBody/tableBody.d.ts +3 -3
  34. package/lib/components/Table/components/TableCell/common/utils.d.ts +3 -3
  35. package/lib/components/Table/components/TableCell/components/BasicCell/basicCell.d.ts +7 -0
  36. package/lib/components/Table/components/TableCell/components/BasicCell/basicCell.js +55 -0
  37. package/lib/components/Table/components/TableCell/components/NTagCell/components/NTag/components/Tooltip/tooltip.d.ts +6 -0
  38. package/lib/components/Table/components/TableCell/components/NTagCell/components/NTag/components/Tooltip/tooltip.js +93 -0
  39. package/lib/components/Table/components/TableCell/components/NTagCell/components/NTag/components/Tooltip/tooltip.styles.d.ts +5 -0
  40. package/lib/components/Table/components/TableCell/components/NTagCell/components/NTag/components/Tooltip/tooltip.styles.js +16 -0
  41. package/lib/components/Table/components/TableCell/components/NTagCell/components/NTag/nTag.d.ts +7 -0
  42. package/lib/components/Table/components/TableCell/components/NTagCell/components/NTag/nTag.js +24 -0
  43. package/lib/components/Table/components/TableCell/components/NTagCell/nTagCell.d.ts +9 -0
  44. package/lib/components/Table/components/TableCell/components/NTagCell/nTagCell.js +53 -0
  45. package/lib/components/Table/components/TableCell/components/RowSelectionCell/rowSelectionCell.d.ts +2 -2
  46. package/lib/components/Table/components/TableHead/components/HeadSelectionCell/headSelectionCell.d.ts +2 -2
  47. package/lib/components/Table/components/TableHead/tableHead.d.ts +3 -3
  48. package/lib/components/Table/components/TableRow/tableRow.styles.d.ts +16 -0
  49. package/lib/components/Table/components/TableRow/tableRow.styles.js +22 -0
  50. package/lib/components/Table/components/TableRows/components/CollapsableRows/collapsableRows.d.ts +3 -3
  51. package/lib/components/Table/components/TableRows/components/CollapsableRows/collapsableRows.js +3 -2
  52. package/lib/components/Table/components/TableRows/tableRows.d.ts +3 -3
  53. package/lib/components/Table/components/TableRows/tableRows.js +3 -1
  54. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/RowDrawer/common/constants.d.ts +2 -0
  55. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/RowDrawer/common/constants.js +12 -0
  56. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/RowDrawer/rowDrawer.d.ts +9 -0
  57. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/RowDrawer/rowDrawer.js +32 -0
  58. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/RowDrawer/rowDrawer.styles.d.ts +6 -0
  59. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/RowDrawer/rowDrawer.styles.js +35 -0
  60. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/Section/components/RowDetail/rowDetail.d.ts +12 -0
  61. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/Section/components/RowDetail/rowDetail.js +32 -0
  62. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/Section/components/RowDetail/rowDetail.styles.d.ts +5 -0
  63. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/Section/components/RowDetail/rowDetail.styles.js +50 -0
  64. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/Section/section.d.ts +7 -0
  65. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/Section/section.js +16 -0
  66. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/Section/section.styles.d.ts +5 -0
  67. package/lib/components/Table/components/TableToolbar/components/RowPreview/components/Section/section.styles.js +17 -0
  68. package/lib/components/Table/components/TableToolbar/components/RowPreview/rowPreview.d.ts +8 -0
  69. package/lib/components/Table/components/TableToolbar/components/RowPreview/rowPreview.js +14 -0
  70. package/lib/components/Table/components/TableToolbar/components/RowSelection/rowSelection.d.ts +3 -3
  71. package/lib/components/Table/components/TableToolbar/tableToolbar.d.ts +3 -3
  72. package/lib/components/Table/components/TableToolbar/tableToolbar.js +9 -6
  73. package/lib/components/Table/features/RowPreview/constants.d.ts +2 -0
  74. package/lib/components/Table/features/RowPreview/constants.js +45 -0
  75. package/lib/components/Table/features/RowPreview/entities.d.ts +22 -0
  76. package/lib/components/Table/features/RowPreview/entities.js +2 -0
  77. package/lib/components/Table/features/RowPreview/utils.d.ts +33 -0
  78. package/lib/components/Table/features/RowPreview/utils.js +89 -0
  79. package/lib/components/Table/features/entities.d.ts +7 -0
  80. package/lib/components/Table/features/entities.js +2 -0
  81. package/lib/components/Table/table.d.ts +4 -12
  82. package/lib/components/Table/table.js +27 -39
  83. package/lib/components/TableCreator/common/entities.d.ts +1 -1
  84. package/lib/components/TableCreator/tableCreator.d.ts +2 -9
  85. package/lib/components/TableCreator/tableCreator.js +4 -4
  86. package/lib/components/common/Button/button.d.ts +1 -1
  87. package/lib/components/common/Drawer/components/DrawerTitle/drawerTitle.d.ts +7 -0
  88. package/lib/components/common/Drawer/components/DrawerTitle/drawerTitle.js +17 -0
  89. package/lib/components/common/Drawer/components/DrawerTitle/drawerTitle.styles.d.ts +5 -0
  90. package/lib/components/common/Drawer/components/DrawerTitle/drawerTitle.styles.js +17 -0
  91. package/lib/components/common/Drawer/components/drawer.styles.d.ts +5 -0
  92. package/lib/components/common/Drawer/components/drawer.styles.js +11 -0
  93. package/lib/components/common/Drawer/drawer.d.ts +7 -0
  94. package/lib/components/common/Drawer/drawer.js +24 -0
  95. package/lib/components/common/Grid/grid.d.ts +1 -1
  96. package/lib/components/common/Typography/common/entities.d.ts +2 -0
  97. package/lib/components/common/Typography/common/entities.js +2 -0
  98. package/lib/config/entities.d.ts +8 -26
  99. package/lib/providers/exploreState/entities.d.ts +3 -2
  100. package/lib/providers/exploreState/initializer/constants.js +1 -3
  101. package/lib/providers/exploreState/initializer/utils.js +2 -2
  102. package/lib/providers/exploreState/payloads/entities.d.ts +7 -11
  103. package/lib/providers/exploreState/utils.d.ts +12 -10
  104. package/lib/providers/exploreState/utils.js +20 -24
  105. package/lib/providers/exploreState.d.ts +12 -32
  106. package/lib/providers/exploreState.js +48 -36
  107. package/lib/styles/common/mixins/colors.d.ts +2 -1
  108. package/lib/styles/common/mixins/colors.js +3 -1
  109. package/lib/theme/common/components.js +11 -2
  110. package/lib/theme/common/palette.d.ts +3 -1
  111. package/lib/theme/common/palette.js +4 -1
  112. package/lib/views/ExploreView/exploreView.js +4 -6
  113. package/package.json +2 -2
  114. package/src/components/ComponentCreator/ComponentCreator.tsx +6 -1
  115. package/src/components/Detail/components/DetailViewTable/detailViewTable.tsx +4 -4
  116. package/src/components/Detail/components/Table/common/utils.ts +2 -2
  117. package/src/components/Detail/components/Table/components/TableBody/tableBody.tsx +3 -3
  118. package/src/components/Detail/components/Table/components/TableRows/components/CollapsableRows/collapsableRows.tsx +5 -7
  119. package/src/components/Detail/components/Table/components/TableRows/tableRows.tsx +10 -6
  120. package/src/components/Detail/components/Table/table.tsx +6 -3
  121. package/src/components/Filter/components/Filters/filters.tsx +1 -1
  122. package/src/components/Index/components/Cell/cell.tsx +4 -0
  123. package/src/components/Index/components/NTag/components/Tooltip/tooltip.tsx +4 -0
  124. package/src/components/Index/components/NTag/nTag.tsx +4 -0
  125. package/src/components/Index/components/NTagCell/nTagCell.tsx +22 -3
  126. package/src/components/Layout/components/Outline/common/constants.ts +1 -1
  127. package/src/components/Links/components/Link/components/ExploreViewLink/exploreViewLink.tsx +18 -2
  128. package/src/components/Links/components/Link/link.tsx +15 -2
  129. package/src/components/Table/common/gridTable.styles.ts +8 -2
  130. package/src/components/Table/common/utils.ts +55 -24
  131. package/src/components/Table/components/DownloadEntityResults/downloadEntityResults.tsx +3 -3
  132. package/src/components/Table/components/PaginationSummary/paginationSummary.tsx +11 -9
  133. package/src/components/Table/components/TableBody/tableBody.tsx +3 -3
  134. package/src/components/Table/components/TableCell/common/utils.ts +3 -3
  135. package/src/components/Table/components/TableCell/components/BasicCell/basicCell.tsx +52 -0
  136. package/src/components/Table/components/TableCell/components/NTagCell/components/NTag/components/Tooltip/tooltip.styles.ts +11 -0
  137. package/src/components/Table/components/TableCell/components/NTagCell/components/NTag/components/Tooltip/tooltip.tsx +86 -0
  138. package/src/components/Table/components/TableCell/components/NTagCell/components/NTag/nTag.tsx +21 -0
  139. package/src/components/Table/components/TableCell/components/NTagCell/nTagCell.tsx +70 -0
  140. package/src/components/Table/components/TableCell/components/RowSelectionCell/rowSelectionCell.tsx +2 -3
  141. package/src/components/Table/components/TableHead/components/HeadSelectionCell/headSelectionCell.tsx +2 -3
  142. package/src/components/Table/components/TableHead/tableHead.tsx +3 -3
  143. package/src/components/Table/components/TableRow/tableRow.styles.ts +22 -0
  144. package/src/components/Table/components/TableRows/components/CollapsableRows/collapsableRows.tsx +8 -6
  145. package/src/components/Table/components/TableRows/tableRows.tsx +9 -6
  146. package/src/components/Table/components/TableToolbar/components/RowPreview/components/RowDrawer/common/constants.ts +11 -0
  147. package/src/components/Table/components/TableToolbar/components/RowPreview/components/RowDrawer/rowDrawer.styles.ts +31 -0
  148. package/src/components/Table/components/TableToolbar/components/RowPreview/components/RowDrawer/rowDrawer.tsx +52 -0
  149. package/src/components/Table/components/TableToolbar/components/RowPreview/components/Section/components/RowDetail/rowDetail.styles.ts +48 -0
  150. package/src/components/Table/components/TableToolbar/components/RowPreview/components/Section/components/RowDetail/rowDetail.tsx +53 -0
  151. package/src/components/Table/components/TableToolbar/components/RowPreview/components/Section/section.styles.ts +12 -0
  152. package/src/components/Table/components/TableToolbar/components/RowPreview/components/Section/section.tsx +25 -0
  153. package/src/components/Table/components/TableToolbar/components/RowPreview/rowPreview.tsx +19 -0
  154. package/src/components/Table/components/TableToolbar/components/RowSelection/rowSelection.tsx +3 -3
  155. package/src/components/Table/components/TableToolbar/tableToolbar.tsx +9 -4
  156. package/src/components/Table/features/RowPreview/constants.ts +65 -0
  157. package/src/components/Table/features/RowPreview/entities.ts +25 -0
  158. package/src/components/Table/features/RowPreview/utils.ts +93 -0
  159. package/src/components/Table/features/entities.ts +13 -0
  160. package/src/components/Table/table.tsx +41 -51
  161. package/src/components/TableCreator/common/entities.ts +1 -1
  162. package/src/components/TableCreator/tableCreator.tsx +15 -22
  163. package/src/components/common/Button/button.tsx +1 -2
  164. package/src/components/common/Drawer/components/DrawerTitle/drawerTitle.styles.ts +12 -0
  165. package/src/components/common/Drawer/components/DrawerTitle/drawerTitle.tsx +27 -0
  166. package/src/components/common/Drawer/components/drawer.styles.ts +6 -0
  167. package/src/components/common/Drawer/drawer.tsx +21 -0
  168. package/src/components/common/Grid/grid.tsx +1 -3
  169. package/src/components/common/Section/components/CollapsableSection/collapsableSection.tsx +1 -2
  170. package/src/components/common/Typography/common/entities.ts +5 -0
  171. package/src/config/entities.ts +8 -38
  172. package/src/providers/exploreState/entities.ts +7 -2
  173. package/src/providers/exploreState/initializer/constants.ts +1 -3
  174. package/src/providers/exploreState/initializer/utils.ts +3 -3
  175. package/src/providers/exploreState/payloads/entities.ts +8 -18
  176. package/src/providers/exploreState/utils.ts +25 -36
  177. package/src/providers/exploreState.tsx +95 -69
  178. package/src/styles/common/mixins/colors.ts +4 -1
  179. package/src/theme/common/components.ts +12 -0
  180. package/src/theme/common/palette.ts +4 -5
  181. package/src/theme/theme.ts +1 -2
  182. package/src/views/ExploreView/exploreView.tsx +3 -25
  183. package/types/data-explorer-ui.d.ts +21 -2
  184. package/src/hooks/useEntityListRelatedView.ts +0 -78
@@ -1,5 +1,5 @@
1
1
  import { TableBody as MTableBody } from "@mui/material";
2
- import { Table } from "@tanstack/react-table";
2
+ import { RowData, Table } from "@tanstack/react-table";
3
3
  import { useWindowVirtualizer } from "@tanstack/react-virtual";
4
4
  import React, { useCallback } from "react";
5
5
  import { ROW_DIRECTION } from "../../common/entities";
@@ -9,12 +9,12 @@ import { TableRows } from "../TableRows/tableRows";
9
9
 
10
10
  const OVERSCAN = 20;
11
11
 
12
- export interface TableBodyProps<T> {
12
+ export interface TableBodyProps<T extends RowData> {
13
13
  rowDirection: ROW_DIRECTION;
14
14
  tableInstance: Table<T>;
15
15
  }
16
16
 
17
- export const TableBody = <T extends object>({
17
+ export const TableBody = <T extends RowData>({
18
18
  rowDirection,
19
19
  tableInstance,
20
20
  }: TableBodyProps<T>): JSX.Element => {
@@ -1,5 +1,5 @@
1
- import { TableCellProps as MTableCellProps } from "@mui/material/TableCell/TableCell";
2
- import { CoreCell, CoreHeader } from "@tanstack/table-core";
1
+ import { TableCellProps as MTableCellProps } from "@mui/material";
2
+ import { CoreCell, CoreHeader, RowData } from "@tanstack/react-table";
3
3
  import { ACCESSOR_KEYS } from "../../../../TableCreator/common/constants";
4
4
 
5
5
  /**
@@ -7,7 +7,7 @@ import { ACCESSOR_KEYS } from "../../../../TableCreator/common/constants";
7
7
  * @param id - Cell ID.
8
8
  * @returns table cell padding.
9
9
  */
10
- export function getTableCellPadding<T extends object, TValue>(
10
+ export function getTableCellPadding<T extends RowData, TValue>(
11
11
  id: CoreHeader<T, TValue>["id"] | CoreCell<T, TValue>["id"]
12
12
  ): MTableCellProps["padding"] {
13
13
  if (id === ACCESSOR_KEYS.SELECT) {
@@ -0,0 +1,52 @@
1
+ import { Typography } from "@mui/material";
2
+ import React, { Fragment, ReactNode } from "react";
3
+ import { LABEL } from "../../../../../../apis/azul/common/entities";
4
+ import { TypographyProps } from "../../../../../common/Typography/common/entities";
5
+
6
+ export interface BasicCellProps {
7
+ TypographyProps?: TypographyProps;
8
+ value?: ReactNode;
9
+ }
10
+
11
+ export const BasicCell = ({
12
+ TypographyProps,
13
+ value = LABEL.UNSPECIFIED,
14
+ }: BasicCellProps): JSX.Element | null => {
15
+ if (isValueNumberOrString(value)) {
16
+ return (
17
+ <Typography variant="inherit" {...TypographyProps}>
18
+ {value}
19
+ </Typography>
20
+ );
21
+ }
22
+ if (isValueArray(value)) {
23
+ return (
24
+ <Fragment>
25
+ {value.map((v: number | string) => (
26
+ <Typography key={v} variant="inherit" {...TypographyProps}>
27
+ {v}
28
+ </Typography>
29
+ ))}
30
+ </Fragment>
31
+ );
32
+ }
33
+ return null;
34
+ };
35
+
36
+ /**
37
+ * Returns true if value is an array of strings.
38
+ * @param value - Value.
39
+ * @returns value is an array of strings.
40
+ */
41
+ function isValueArray(value: ReactNode): value is (number | string)[] {
42
+ return Array.isArray(value) && value.every(isValueNumberOrString);
43
+ }
44
+
45
+ /**
46
+ * Returns true if value is a number or a string.
47
+ * @param value - Value.
48
+ * @returns true if value is a number or a string.
49
+ */
50
+ function isValueNumberOrString(value: ReactNode): value is number | string {
51
+ return typeof value === "number" || typeof value === "string";
52
+ }
@@ -0,0 +1,11 @@
1
+ import styled from "@emotion/styled";
2
+
3
+ export const TooltipContent = styled.span`
4
+ overflow: scroll;
5
+ overscroll-behavior: none;
6
+ padding: 8px 12px;
7
+
8
+ &::-webkit-scrollbar {
9
+ display: none;
10
+ }
11
+ `;
@@ -0,0 +1,86 @@
1
+ import {
2
+ PopperProps,
3
+ Tooltip as MTooltip,
4
+ TooltipProps as MTooltipProps,
5
+ } from "@mui/material";
6
+ import { detectOverflow } from "@popperjs/core";
7
+ import { State } from "@popperjs/core/lib/types";
8
+ import React, { useMemo, useState } from "react";
9
+ import { TooltipContent } from "./tooltip.styles";
10
+
11
+ const DEFAULT_FLIP_MODIFIER = {
12
+ enabled: true,
13
+ name: "flip",
14
+ options: {
15
+ fallbackPlacements: ["bottom", "right", "left"],
16
+ },
17
+ };
18
+
19
+ const DEFAULT_PREVENT_OVERFLOW_MODIFIER = {
20
+ enabled: true,
21
+ name: "preventOverflow",
22
+ options: {
23
+ padding: 16,
24
+ },
25
+ };
26
+
27
+ export interface TooltipProps extends MTooltipProps {
28
+ className?: string;
29
+ }
30
+
31
+ export const Tooltip = ({
32
+ children,
33
+ className,
34
+ title,
35
+ ...props /* Spread props to allow for Mui Tooltip specific prop overrides. */
36
+ }: TooltipProps): JSX.Element => {
37
+ const [maxHeight, setMaxHeight] = useState<number>();
38
+ const modifiers: PopperProps["modifiers"] = useMemo(
39
+ () => [
40
+ {
41
+ enabled: true,
42
+ fn: ({ state }): void => setMaxHeight(calculateMaxHeight(state)),
43
+ name: "maxHeight",
44
+ phase: "main",
45
+ requiresIfExists: ["offset"],
46
+ },
47
+ DEFAULT_FLIP_MODIFIER,
48
+ DEFAULT_PREVENT_OVERFLOW_MODIFIER,
49
+ ],
50
+ []
51
+ );
52
+ return (
53
+ <MTooltip
54
+ arrow
55
+ className={className}
56
+ onClose={(): void => setMaxHeight(undefined)}
57
+ slotProps={{
58
+ popper: { modifiers },
59
+ tooltip: { style: { display: "flex", maxHeight, padding: 0 } },
60
+ }}
61
+ title={<TooltipContent>{title}</TooltipContent>}
62
+ {...props}
63
+ >
64
+ {children}
65
+ </MTooltip>
66
+ );
67
+ };
68
+
69
+ /**
70
+ * Calculate the max height of the tooltip based on the current popper modifier state.
71
+ * @param state - Popper modifier state.
72
+ * @returns tooltip maximum height.
73
+ */
74
+ function calculateMaxHeight(state: State): number | undefined {
75
+ const overflow = detectOverflow(state);
76
+ const { placement } = state;
77
+ if (placement === "left" || placement === "right") {
78
+ return window.innerHeight - 32;
79
+ }
80
+ if (placement === "top") {
81
+ return state.rects.popper.height - overflow.top - 24;
82
+ }
83
+ if (placement === "bottom") {
84
+ return state.rects.popper.height - overflow.bottom - 24;
85
+ }
86
+ }
@@ -0,0 +1,21 @@
1
+ import React, { ReactElement } from "react";
2
+ import { Tooltip } from "./components/Tooltip/tooltip";
3
+
4
+ export interface NTagProps {
5
+ className?: string;
6
+ Tag: ReactElement;
7
+ TooltipTitle: ReactElement;
8
+ }
9
+
10
+ export const NTag = ({
11
+ className,
12
+ Tag,
13
+ TooltipTitle,
14
+ ...props /* Spread props to allow for Mui Tooltip specific prop overrides. */
15
+ }: NTagProps): JSX.Element => {
16
+ return (
17
+ <Tooltip className={className} title={TooltipTitle} {...props}>
18
+ {Tag}
19
+ </Tooltip>
20
+ );
21
+ };
@@ -0,0 +1,70 @@
1
+ import {
2
+ Chip as MChip,
3
+ ChipProps as MChipProps,
4
+ Typography,
5
+ } from "@mui/material";
6
+ import React, { forwardRef } from "react";
7
+ import { TEXT_BODY_SMALL_400 } from "../../../../../../theme/common/typography";
8
+ import { TypographyProps } from "../../../../../common/Typography/common/entities";
9
+ import { NTag } from "./components/NTag/nTag";
10
+
11
+ // Template constants
12
+ const MAX_DISPLAYABLE_VALUES = 1;
13
+
14
+ export type MetadataValue = string;
15
+
16
+ export interface NTagCellProps {
17
+ label: string;
18
+ TypographyProps?: TypographyProps;
19
+ values: MetadataValue[];
20
+ }
21
+
22
+ /**
23
+ * String-concatenates the specified list of metadata values to a string value, joined by a comma ",".
24
+ * @param metadataValues - List of metadata values.
25
+ * @returns the metadata values in a string, each value joined by a comma.
26
+ */
27
+ function stringifyMetadataValues(metadataValues: MetadataValue[]): string {
28
+ return metadataValues.join(", ");
29
+ }
30
+
31
+ /**
32
+ * Renders tag for NTag component.
33
+ * Tooltip children require forward ref.
34
+ */
35
+ const Tag = forwardRef<HTMLDivElement, MChipProps>(function Tag(props, ref) {
36
+ return <MChip ref={ref} {...props} />;
37
+ });
38
+
39
+ export const NTagCell = ({
40
+ label,
41
+ TypographyProps,
42
+ values,
43
+ }: NTagCellProps): JSX.Element => {
44
+ const metadataCount = values.length;
45
+ const showNTag = metadataCount > MAX_DISPLAYABLE_VALUES;
46
+ return (
47
+ <>
48
+ {showNTag ? (
49
+ <NTag
50
+ Tag={<Tag label={`${metadataCount} ${label}`} variant="ntag" />}
51
+ TooltipTitle={
52
+ <Typography display="block" variant={TEXT_BODY_SMALL_400}>
53
+ {stringifyMetadataValues(values)}
54
+ </Typography>
55
+ }
56
+ />
57
+ ) : (
58
+ values.map((value, v) => (
59
+ <Typography
60
+ key={`${value}${v}`}
61
+ variant="inherit"
62
+ {...TypographyProps}
63
+ >
64
+ {value}
65
+ </Typography>
66
+ ))
67
+ )}
68
+ </>
69
+ );
70
+ };
@@ -1,11 +1,10 @@
1
1
  import { Checkbox as MCheckbox } from "@mui/material";
2
- import { Row } from "@tanstack/react-table";
3
- import { RowData } from "@tanstack/table-core";
2
+ import { Row, RowData } from "@tanstack/react-table";
4
3
  import React from "react";
5
4
  import { CheckedIcon } from "../../../../../common/CustomIcon/components/CheckedIcon/checkedIcon";
6
5
  import { UncheckedIcon } from "../../../../../common/CustomIcon/components/UncheckedIcon/uncheckedIcon";
7
6
 
8
- export interface RowSelectionCellProps<T> {
7
+ export interface RowSelectionCellProps<T extends RowData> {
9
8
  row: Row<T>;
10
9
  }
11
10
 
@@ -1,12 +1,11 @@
1
1
  import { Checkbox } from "@mui/material";
2
- import { Table } from "@tanstack/react-table";
3
- import { RowData } from "@tanstack/table-core";
2
+ import { RowData, Table } from "@tanstack/react-table";
4
3
  import React from "react";
5
4
  import { CheckedIcon } from "../../../../../common/CustomIcon/components/CheckedIcon/checkedIcon";
6
5
  import { IndeterminateIcon } from "../../../../../common/CustomIcon/components/IndeterminateIcon/indeterminateIcon";
7
6
  import { UncheckedIcon } from "../../../../../common/CustomIcon/components/UncheckedIcon/uncheckedIcon";
8
7
 
9
- export interface HeadSelectionCellProps<T> {
8
+ export interface HeadSelectionCellProps<T extends RowData> {
10
9
  tableInstance: Table<T>;
11
10
  }
12
11
 
@@ -4,18 +4,18 @@ import {
4
4
  TableRow as MTableRow,
5
5
  TableSortLabel,
6
6
  } from "@mui/material";
7
- import { flexRender, Table } from "@tanstack/react-table";
7
+ import { flexRender, RowData, Table } from "@tanstack/react-table";
8
8
  import React, { Fragment } from "react";
9
9
  import { ROW_DIRECTION } from "../../common/entities";
10
10
  import { getTableSortLabelProps } from "../../common/utils";
11
11
  import { getTableCellPadding } from "../TableCell/common/utils";
12
12
 
13
- export interface TableHeadProps<T> {
13
+ export interface TableHeadProps<T extends RowData> {
14
14
  rowDirection: ROW_DIRECTION;
15
15
  tableInstance: Table<T>;
16
16
  }
17
17
 
18
- export const TableHead = <T extends object>({
18
+ export const TableHead = <T extends RowData>({
19
19
  rowDirection,
20
20
  tableInstance,
21
21
  }: TableHeadProps<T>): JSX.Element => {
@@ -0,0 +1,22 @@
1
+ import { css } from "@emotion/react";
2
+ import styled from "@emotion/styled";
3
+ import { TableRow as MTableRow } from "@mui/material";
4
+ import { primaryLightest } from "../../../../styles/common/mixins/colors";
5
+
6
+ interface Props {
7
+ isPreview?: boolean;
8
+ }
9
+
10
+ export const TableRow = styled(MTableRow, {
11
+ shouldForwardProp: (prop) => prop !== "isPreview",
12
+ })<Props>`
13
+ && {
14
+ transition: background-color 300ms ease-in;
15
+
16
+ ${(props) =>
17
+ props.isPreview &&
18
+ css`
19
+ background-color: ${primaryLightest(props)};
20
+ `}
21
+ }
22
+ `;
@@ -1,16 +1,16 @@
1
- import { TableRow as MTableRow } from "@mui/material";
2
- import { Row, Table } from "@tanstack/react-table";
1
+ import { Row, RowData, Table } from "@tanstack/react-table";
3
2
  import { Virtualizer } from "@tanstack/react-virtual";
4
3
  import React, { Fragment } from "react";
5
4
  import { isCollapsableRowDisabled } from "../../../../common/utils";
6
5
  import { CollapsableCell } from "../../../TableCell/components/CollapsableCell/collapsableCell";
6
+ import { TableRow } from "../../../TableRow/tableRow.styles";
7
7
 
8
- export interface CollapsableRowsProps<T> {
8
+ export interface CollapsableRowsProps<T extends RowData> {
9
9
  tableInstance: Table<T>;
10
10
  virtualizer: Virtualizer<Window, Element>;
11
11
  }
12
12
 
13
- export const CollapsableRows = <T extends object>({
13
+ export const CollapsableRows = <T extends RowData>({
14
14
  tableInstance,
15
15
  virtualizer,
16
16
  }: CollapsableRowsProps<T>): JSX.Element => {
@@ -21,17 +21,19 @@ export const CollapsableRows = <T extends object>({
21
21
  <Fragment>
22
22
  {virtualItems.map((virtualRow) => {
23
23
  const row = rows[virtualRow.index] as Row<T>;
24
+ const { getIsPreview } = row;
24
25
  return (
25
- <MTableRow
26
+ <TableRow
26
27
  key={row.id}
27
28
  data-index={virtualRow.index}
29
+ isPreview={getIsPreview()}
28
30
  ref={virtualizer.measureElement}
29
31
  >
30
32
  <CollapsableCell
31
33
  isDisabled={isCollapsableRowDisabled(tableInstance)}
32
34
  row={row}
33
35
  />
34
- </MTableRow>
36
+ </TableRow>
35
37
  );
36
38
  })}
37
39
  </Fragment>
@@ -1,15 +1,16 @@
1
- import { TableCell as MTableCell, TableRow as MTableRow } from "@mui/material";
2
- import { flexRender, Row, Table } from "@tanstack/react-table";
1
+ import { TableCell as MTableCell } from "@mui/material";
2
+ import { flexRender, Row, RowData, Table } from "@tanstack/react-table";
3
3
  import { Virtualizer } from "@tanstack/react-virtual";
4
4
  import React, { Fragment } from "react";
5
5
  import { getTableCellPadding } from "../TableCell/common/utils";
6
+ import { TableRow } from "../TableRow/tableRow.styles";
6
7
 
7
- export interface TableRowsProps<T> {
8
+ export interface TableRowsProps<T extends RowData> {
8
9
  tableInstance: Table<T>;
9
10
  virtualizer: Virtualizer<Window, Element>;
10
11
  }
11
12
 
12
- export const TableRows = <T extends object>({
13
+ export const TableRows = <T extends RowData>({
13
14
  tableInstance,
14
15
  virtualizer,
15
16
  }: TableRowsProps<T>): JSX.Element => {
@@ -20,10 +21,12 @@ export const TableRows = <T extends object>({
20
21
  <Fragment>
21
22
  {virtualItems.map((virtualRow) => {
22
23
  const row = rows[virtualRow.index] as Row<T>;
24
+ const { getIsPreview } = row;
23
25
  return (
24
- <MTableRow
26
+ <TableRow
25
27
  key={row.id}
26
28
  data-index={virtualRow.index}
29
+ isPreview={getIsPreview()}
27
30
  ref={virtualizer.measureElement}
28
31
  >
29
32
  {row.getVisibleCells().map((cell) => (
@@ -34,7 +37,7 @@ export const TableRows = <T extends object>({
34
37
  {flexRender(cell.column.columnDef.cell, cell.getContext())}
35
38
  </MTableCell>
36
39
  ))}
37
- </MTableRow>
40
+ </TableRow>
38
41
  );
39
42
  })}
40
43
  </Fragment>
@@ -0,0 +1,11 @@
1
+ import { DrawerProps as MDrawerProps } from "@mui/material";
2
+
3
+ export const DEFAULT_DRAWER_PROPS: Partial<MDrawerProps> = {
4
+ PaperProps: {
5
+ elevation: 2,
6
+ },
7
+ anchor: "right",
8
+ disableEnforceFocus: true,
9
+ disableScrollLock: true,
10
+ hideBackdrop: true,
11
+ };
@@ -0,0 +1,31 @@
1
+ import styled from "@emotion/styled";
2
+ import { mediaTabletUp } from "../../../../../../../../styles/common/mixins/breakpoints";
3
+ import { smokeMain } from "../../../../../../../../styles/common/mixins/colors";
4
+ import { DrawerTitle as DXDrawerTitle } from "../../../../../../../common/Drawer/components/DrawerTitle/drawerTitle";
5
+ import { Drawer as DXDrawer } from "../../../../../../../common/Drawer/drawer";
6
+
7
+ export const Drawer = styled(DXDrawer)`
8
+ &.MuiDrawer-modal {
9
+ pointer-events: none;
10
+
11
+ .MuiDrawer-paper {
12
+ border-left: 1px solid ${smokeMain};
13
+ box-shadow: -8px 0 8px -4px #10182808, 0 20px 24px -4px #10182814;
14
+ pointer-events: all;
15
+ max-width: min(506px, 84vw);
16
+ width: 100%;
17
+ }
18
+
19
+ ${mediaTabletUp} {
20
+ .MuiDrawer-paper {
21
+ max-width: min(506px, 50vw);
22
+ }
23
+ }
24
+ }
25
+ `;
26
+
27
+ export const DrawerTitle = styled(DXDrawerTitle)`
28
+ .MuiTypography-text-heading-small {
29
+ font-size: 20px;
30
+ }
31
+ `;
@@ -0,0 +1,52 @@
1
+ import {
2
+ Divider,
3
+ DrawerProps as MDrawerProps,
4
+ Typography as MTypography,
5
+ } from "@mui/material";
6
+ import { RowData, Table } from "@tanstack/react-table";
7
+ import React, { ReactNode } from "react";
8
+ import { TEXT_HEADING_SMALL } from "../../../../../../../../theme/common/typography";
9
+ import { DrawerContent } from "../../../../../../../common/Drawer/components/drawer.styles";
10
+ import { DEFAULT_DRAWER_PROPS } from "./common/constants";
11
+ import { Drawer, DrawerTitle } from "./rowDrawer.styles";
12
+
13
+ export interface RowDrawerProps<T extends RowData>
14
+ extends Omit<MDrawerProps, "content" | "title"> {
15
+ className?: string;
16
+ tableInstance: Table<T>;
17
+ title: ReactNode;
18
+ }
19
+
20
+ export const RowDrawer = <T extends RowData>({
21
+ children,
22
+ className,
23
+ tableInstance,
24
+ title,
25
+ ...props /* Spread props to allow for Mui Drawer specific prop overrides. */
26
+ }: RowDrawerProps<T>): JSX.Element => {
27
+ const { getIsRowPreview, resetRowPreview, toggleRowPreview } = tableInstance;
28
+ return (
29
+ <Drawer
30
+ {...DEFAULT_DRAWER_PROPS}
31
+ className={className}
32
+ onTransitionExited={resetRowPreview}
33
+ open={getIsRowPreview()}
34
+ {...props}
35
+ >
36
+ <DrawerTitle
37
+ onClose={(): void => toggleRowPreview?.()}
38
+ title={
39
+ typeof title === "string" ? (
40
+ <MTypography component="div" noWrap variant={TEXT_HEADING_SMALL}>
41
+ {title}
42
+ </MTypography>
43
+ ) : (
44
+ title
45
+ )
46
+ }
47
+ />
48
+ <Divider />
49
+ <DrawerContent>{children}</DrawerContent>
50
+ </Drawer>
51
+ );
52
+ };
@@ -0,0 +1,48 @@
1
+ import styled from "@emotion/styled";
2
+ import {
3
+ mediaDesktopSmallUp,
4
+ mediaTabletUp,
5
+ } from "../../../../../../../../../../styles/common/mixins/breakpoints";
6
+ import { textBody400 } from "../../../../../../../../../../styles/common/mixins/fonts";
7
+
8
+ export const Section = styled.div`
9
+ ${textBody400};
10
+ display: grid;
11
+ gap: 16px;
12
+ grid-auto-rows: minmax(40px, auto);
13
+ grid-template-columns: minmax(0, 1fr);
14
+ overflow-wrap: break-word;
15
+ padding: 16px 24px;
16
+
17
+ > .MuiGrid-root {
18
+ display: grid;
19
+ gap: 4px;
20
+ grid-column: 1 / -1;
21
+ grid-template-columns: inherit;
22
+ }
23
+
24
+ > .MuiButton-textPrimary {
25
+ grid-column: 1 / -1;
26
+ justify-self: flex-start;
27
+ text-align: left;
28
+ text-transform: none;
29
+ }
30
+
31
+ ${mediaTabletUp} {
32
+ gap: 0 8px;
33
+ grid-template-columns: repeat(2, minmax(0, 1fr));
34
+ padding: 8px 24px;
35
+
36
+ > .MuiGrid-root {
37
+ display: contents;
38
+
39
+ > * {
40
+ margin: 10px 0;
41
+ }
42
+ }
43
+ }
44
+
45
+ ${mediaDesktopSmallUp} {
46
+ grid-template-columns: 194px minmax(0, 1fr);
47
+ }
48
+ `;
@@ -0,0 +1,53 @@
1
+ import { Grid, Typography } from "@mui/material";
2
+ import { RowData, Table } from "@tanstack/react-table";
3
+ import React from "react";
4
+ import { ListConfig } from "../../../../../../../../../../config/entities";
5
+ import { TEXT_BODY_400 } from "../../../../../../../../../../theme/common/typography";
6
+ import { ButtonTextPrimary } from "../../../../../../../../../common/Button/components/ButtonTextPrimary/buttonTextPrimary";
7
+ import { ComponentCreator } from "../../../../../../../../../ComponentCreator/ComponentCreator";
8
+ import { Section } from "./rowDetail.styles";
9
+
10
+ const MIN_COLUMNS = 6;
11
+
12
+ interface RowDetailProps<T extends RowData> {
13
+ className?: string;
14
+ columns: ListConfig<T>["columns"];
15
+ expanded?: boolean;
16
+ minColumns?: number;
17
+ tableInstance: Table<T>;
18
+ }
19
+
20
+ export const RowDetail = <T extends RowData>({
21
+ className,
22
+ columns,
23
+ expanded = true,
24
+ minColumns = MIN_COLUMNS,
25
+ tableInstance,
26
+ }: RowDetailProps<T>): JSX.Element | null => {
27
+ const [showMore, setShowMore] = React.useState<boolean>(expanded);
28
+ const { getRowPreviewRow } = tableInstance;
29
+ const { original: rowData } = getRowPreviewRow() || {};
30
+ const visibleColumns = showMore ? columns : columns.slice(0, minColumns);
31
+ const buttonText = showMore ? "Show less" : "Show more";
32
+ const onToggleShowMore = (): void => setShowMore(!showMore);
33
+ if (!rowData) return null;
34
+ return (
35
+ <Section className={className}>
36
+ {visibleColumns.map(({ componentConfig, header }, i) => (
37
+ <Grid key={i}>
38
+ <Typography
39
+ color="ink.light"
40
+ variant={TEXT_BODY_400}
41
+ {...componentConfig.props?.TypographyProps}
42
+ >
43
+ {header}
44
+ </Typography>
45
+ <ComponentCreator components={[componentConfig]} response={rowData} />
46
+ </Grid>
47
+ ))}
48
+ <ButtonTextPrimary onClick={onToggleShowMore}>
49
+ {buttonText}
50
+ </ButtonTextPrimary>
51
+ </Section>
52
+ );
53
+ };
@@ -0,0 +1,12 @@
1
+ import styled from "@emotion/styled";
2
+
3
+ export const Section = styled.div`
4
+ display: grid;
5
+ gap: 16px;
6
+ padding: 16px 24px 24px;
7
+
8
+ .MuiTypography-text-heading-small {
9
+ font-size: 18px;
10
+ line-height: 26px;
11
+ }
12
+ `;