@symply.io/basic-components 1.0.3 → 1.0.4

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.
package/.gitignore CHANGED
@@ -12,4 +12,5 @@ yarn-debug.log*
12
12
  yarn-error.log*
13
13
  *.js
14
14
  *.d.ts
15
- dist
15
+ dist
16
+ .eslintrc.json
@@ -12,11 +12,11 @@ var __assign = (this && this.__assign) || function () {
12
12
  import { jsx as _jsx } from "react/jsx-runtime";
13
13
  import { forwardRef } from "react";
14
14
  import Grid from "@mui/material/Grid";
15
- import useCustomTheme from "../useCustomTheme";
15
+ import useTheme from "@mui/material/styles/useTheme";
16
16
  import TableBodyRow from "./TableBodyRow";
17
17
  var BasicTableBody = forwardRef(function (props, ref) {
18
18
  var rows = props.rows, columns = props.columns, forFrozen = props.forFrozen, noDataText = props.noDataText;
19
- var theme = useCustomTheme();
19
+ var theme = useTheme();
20
20
  return (_jsx(Grid, __assign({ item: true, sx: {
21
21
  maxHeight: "41vh",
22
22
  overflowY: "auto",
@@ -27,7 +27,7 @@ var BasicTableBody = forwardRef(function (props, ref) {
27
27
  width: forFrozen ? 0 : "initial"
28
28
  }
29
29
  } }, { children: _jsx("div", __assign({ ref: ref }, { children: rows && rows.length > 0 ? (rows.map(function (row, index) {
30
- return (_jsx(TableBodyRow, { row: row, rows: rows, columns: columns }, "BasicTable_".concat(index)));
30
+ return (_jsx(TableBodyRow, { row: row, rows: rows, forFrozen: forFrozen, columns: columns }, "BasicTable_".concat(index)));
31
31
  })) : (_jsx(Grid, __assign({ container: true, justifyContent: "space-around", alignItems: "center", wrap: "nowrap", sx: {
32
32
  height: theme.spacing(7.5),
33
33
  borderBottomWidth: "thin",
@@ -9,13 +9,33 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
+ var __rest = (this && this.__rest) || function (s, e) {
13
+ var t = {};
14
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
15
+ t[p] = s[p];
16
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
17
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
18
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
19
+ t[p[i]] = s[p[i]];
20
+ }
21
+ return t;
22
+ };
12
23
  import { jsx as _jsx } from "react/jsx-runtime";
13
- import { cloneElement } from "react";
24
+ import { cloneElement, useMemo } from "react";
25
+ import colorAlpha from "color-alpha";
14
26
  import Grid from "@mui/material/Grid";
15
- import useCustomTheme from "../useCustomTheme";
27
+ import useTheme from "@mui/material/styles/useTheme";
16
28
  function BasicTableBodyRow(props) {
17
- var row = props.row, rows = props.rows, columns = props.columns;
18
- var theme = useCustomTheme();
29
+ var row = props.row, rows = props.rows, columns = props.columns, forFrozen = props.forFrozen;
30
+ var onRowClick = row.onRowClick, rawRow = __rest(row, ["onRowClick"]);
31
+ var theme = useTheme();
32
+ var rawRows = useMemo(function () {
33
+ return rows.map(function (r) {
34
+ var newRow = __assign({}, r);
35
+ delete newRow.onRowClick;
36
+ return newRow;
37
+ });
38
+ }, [rows]);
19
39
  return (_jsx(Grid, __assign({ container: true, justifyContent: "space-evenly", alignItems: "center", wrap: "nowrap", sx: {
20
40
  height: theme.spacing(7.5),
21
41
  borderBottomWidth: "thin",
@@ -23,6 +43,12 @@ function BasicTableBodyRow(props) {
23
43
  borderBottomStyle: "solid",
24
44
  padding: theme.spacing(0.5, 0),
25
45
  minHeight: theme.spacing(6),
46
+ "&:hover": {
47
+ cursor: !forFrozen && onRowClick ? "pointer" : "default",
48
+ backgroundColor: !forFrozen && onRowClick
49
+ ? colorAlpha(theme.palette.primary.main, 0.1)
50
+ : "initial"
51
+ },
26
52
  "& :nth-of-last-type(1)": {
27
53
  borderBottom: "none"
28
54
  },
@@ -30,14 +56,18 @@ function BasicTableBodyRow(props) {
30
56
  fontSize: "0.9rem",
31
57
  fontWeight: 600
32
58
  }
33
- } }, { children: columns.map(function (col) {
59
+ }, onClick: onRowClick
60
+ ? function () {
61
+ onRowClick({ row: rawRow });
62
+ }
63
+ : undefined }, { children: columns.map(function (col) {
34
64
  var accessor = col.accessor, Cell = col.Cell, _a = col.minWidth, minWidth = _a === void 0 ? "120px!important" : _a, width = col.width, _b = col.align, align = _b === void 0 ? "center" : _b;
35
65
  return (_jsx(Grid, __assign({ item: true, textAlign: align, sx: {
36
66
  minWidth: minWidth,
37
67
  width: width,
38
68
  paddingLeft: theme.spacing(0.625),
39
69
  paddingRight: theme.spacing(0.625)
40
- } }, { children: cloneElement(Cell, { column: col, rows: rows, row: row }) }), accessor));
70
+ } }, { children: cloneElement(Cell, { column: col, rows: rawRows, row: rawRow }) }), accessor));
41
71
  }) })));
42
72
  }
43
73
  export default BasicTableBodyRow;
@@ -12,10 +12,10 @@ var __assign = (this && this.__assign) || function () {
12
12
  import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
13
13
  import { cloneElement } from "react";
14
14
  import Grid from "@mui/material/Grid";
15
- import useCustomTheme from "../useCustomTheme";
15
+ import useTheme from "@mui/material/styles/useTheme";
16
16
  function BasicTableFooter(props) {
17
17
  var footers = props.footers;
18
- var theme = useCustomTheme();
18
+ var theme = useTheme();
19
19
  return footers && footers.length > 0 ? (_jsx(Grid, __assign({ item: true, sx: {
20
20
  backgroundColor: "#eaf0f6",
21
21
  padding: theme.spacing(1.5, 0),
@@ -12,10 +12,10 @@ var __assign = (this && this.__assign) || function () {
12
12
  import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
13
13
  import { cloneElement } from "react";
14
14
  import Grid from "@mui/material/Grid";
15
- import useCustomTheme from "../useCustomTheme";
15
+ import useTheme from "@mui/material/styles/useTheme";
16
16
  function BasicTableHeader(props) {
17
17
  var headers = props.headers;
18
- var theme = useCustomTheme();
18
+ var theme = useTheme();
19
19
  return headers && headers.length > 0 ? (_jsx(Grid, __assign({ item: true, sx: {
20
20
  backgroundColor: "#eaf0f6",
21
21
  padding: theme.spacing(1.5, 0),
@@ -34,12 +34,17 @@ interface IBodyColumn extends IColumn {
34
34
  export interface IRow {
35
35
  [name: string]: any;
36
36
  }
37
+ interface RowClickProps {
38
+ onRowClick?: (props: {
39
+ row: IRow;
40
+ }) => unknown;
41
+ }
37
42
  export interface SortingProps {
38
43
  field: string;
39
44
  isSorted?: boolean;
40
45
  descending?: boolean;
41
46
  }
42
- export interface UseTableProps {
47
+ export interface UseTableProps extends RowClickProps {
43
48
  data: Array<IRow>;
44
49
  columns: Array<IColumn>;
45
50
  initialState?: InitialStateProps;
@@ -58,14 +63,15 @@ export interface BasicTableFooterProps {
58
63
  }
59
64
  export interface BasicTableBodyProps {
60
65
  columns: Array<IBodyColumn>;
61
- rows: Array<IRow>;
66
+ rows: Array<IRow & RowClickProps>;
62
67
  noDataText?: string;
63
68
  forFrozen?: boolean;
64
69
  }
65
70
  export interface BasicTableBodyRowProps {
66
71
  columns: Array<IBodyColumn>;
67
- rows: Array<IRow>;
68
- row: IRow;
72
+ rows: Array<IRow & RowClickProps>;
73
+ row: IRow & RowClickProps;
74
+ forFrozen?: boolean;
69
75
  }
70
76
  export declare type BasicTableProps = BasicTableHeaderProps & Omit<BasicTableBodyProps, "forFrozen"> & Partial<BasicTableFooterProps> & {
71
77
  primaryColor?: CSSProperties["color"];
@@ -42,6 +42,10 @@ declare function useTable(props: UseTableProps): {
42
42
  width?: number | undefined;
43
43
  Cell: import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
44
44
  }[];
45
- rows: import("./types").IRow[];
45
+ rows: {
46
+ onRowClick: ((props: {
47
+ row: import("./types").IRow;
48
+ }) => unknown) | undefined;
49
+ }[];
46
50
  };
47
51
  export default useTable;
@@ -23,7 +23,7 @@ var __rest = (this && this.__rest) || function (s, e) {
23
23
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
24
24
  import { cloneElement, useState, useMemo, useCallback } from "react";
25
25
  function useTable(props) {
26
- var data = props.data, columns = props.columns, initialState = props.initialState, disableSortBy = props.disableSortBy, onSort = props.onSort, rest = __rest(props, ["data", "columns", "initialState", "disableSortBy", "onSort"]);
26
+ var data = props.data, columns = props.columns, initialState = props.initialState, disableSortBy = props.disableSortBy, onSort = props.onSort, onRowClick = props.onRowClick, rest = __rest(props, ["data", "columns", "initialState", "disableSortBy", "onSort", "onRowClick"]);
27
27
  if (!data) {
28
28
  throw new Error('"data" is required but got null or undefined');
29
29
  }
@@ -66,7 +66,7 @@ function useTable(props) {
66
66
  }
67
67
  return "↓";
68
68
  }, [sortingProps]);
69
- var rows = useMemo(function () { return data.map(function (d) { return d; }); }, [data]);
69
+ var rows = useMemo(function () { return data.map(function (d) { return (__assign(__assign({}, d), { onRowClick: onRowClick })); }); }, [data]);
70
70
  var cols = useMemo(function () {
71
71
  return columns.map(function (col) {
72
72
  var Body = col.Body;
@@ -7,7 +7,7 @@ function useInteractions(props) {
7
7
  if (!event.target.value || /^\d+$/g.test(event.target.value)) {
8
8
  onChange(event.target.value);
9
9
  }
10
- }, []);
10
+ }, [onChange]);
11
11
  var onOpenTooltip = useCallback(function () {
12
12
  setTooltipOpen(true);
13
13
  }, []);
@@ -18,7 +18,7 @@ function useInteractions(props) {
18
18
  tooltipOpen: tooltipOpen,
19
19
  handleChange: handleChange,
20
20
  onOpenTooltip: onOpenTooltip,
21
- onCloseTooltip: onCloseTooltip,
21
+ onCloseTooltip: onCloseTooltip
22
22
  };
23
23
  }
24
24
  export default useInteractions;
@@ -2,7 +2,7 @@ import { useState, useCallback, useMemo } from "react";
2
2
  function useInteractions(props) {
3
3
  var value = props.value, integerOnly = props.integerOnly, _a = props.minValue, minValue = _a === void 0 ? Number.MIN_SAFE_INTEGER : _a, _b = props.maxValue, maxValue = _b === void 0 ? Number.MAX_SAFE_INTEGER : _b, onChange = props.onChange;
4
4
  var _c = useState(false), tooltipOpen = _c[0], setTooltipOpen = _c[1];
5
- var exceedError = useMemo(function () { return !!value && (Number(value) < minValue || Number(value) > maxValue); }, []);
5
+ var exceedError = useMemo(function () { return !!value && (Number(value) < minValue || Number(value) > maxValue); }, [value, minValue, maxValue]);
6
6
  var handleChange = useCallback(function (event) {
7
7
  event.preventDefault();
8
8
  var val = event.currentTarget.value;
@@ -15,7 +15,7 @@ function useInteractions(props) {
15
15
  else if (val !== "" && val !== "-" && !/^(-?\d*)(\.\d*)?$/g.test(val))
16
16
  return;
17
17
  onChange(val);
18
- }, []);
18
+ }, [onChange, minValue, integerOnly]);
19
19
  var handleBlur = useCallback(function () {
20
20
  var excludedValue = [
21
21
  null,
@@ -25,7 +25,7 @@ function useInteractions(props) {
25
25
  "-",
26
26
  "-.",
27
27
  "null",
28
- "undefined",
28
+ "undefined"
29
29
  ];
30
30
  var strVal = String(value).trim();
31
31
  if (strVal !== null && strVal.lastIndexOf(".") === strVal.length - 1) {
@@ -35,7 +35,7 @@ function useInteractions(props) {
35
35
  else if (excludedValue.includes(strVal)) {
36
36
  onChange("");
37
37
  }
38
- }, []);
38
+ }, [value, onChange]);
39
39
  var onOpenTooltip = useCallback(function () {
40
40
  setTooltipOpen(true);
41
41
  }, []);
@@ -48,7 +48,7 @@ function useInteractions(props) {
48
48
  handleBlur: handleBlur,
49
49
  handleChange: handleChange,
50
50
  onOpenTooltip: onOpenTooltip,
51
- onCloseTooltip: onCloseTooltip,
51
+ onCloseTooltip: onCloseTooltip
52
52
  };
53
53
  }
54
54
  export default useInteractions;
package/README.md CHANGED
@@ -237,6 +237,7 @@ import BasicTable, { useTable } from '@symply.io/basic-components/BasicTable';
237
237
  | data | Array<{ [name]: unknown }> | | true | table data/rows |
238
238
  | disableSortBy | bool | | false | If true, the whole table can't be sortable. |
239
239
  | initialState | { sortBy?: SortByProps } | | false | Set the initial states |
240
+ | onRowClick | func | | false | The function for row clicking. |
240
241
  | onSort | func | | false | The function for sorting rows. |
241
242
 
242
243
  <h5>Hook Returns</h5>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symply.io/basic-components",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "Basic and reusable components for all frontend of Symply apps",
5
5
  "keywords": [
6
6
  "react",