@symply.io/basic-components 1.0.4 → 1.0.6-beta.1

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.
@@ -1,4 +1,4 @@
1
1
  /// <reference types="react" />
2
- import { BasicTableBodyProps } from "./types";
3
- declare const BasicTableBody: import("react").ForwardRefExoticComponent<BasicTableBodyProps & import("react").RefAttributes<HTMLDivElement>>;
4
- export default BasicTableBody;
2
+ import { BasicTableBodyProps, KvProps } from "./types";
3
+ declare const _default: import("react").ForwardRefExoticComponent<BasicTableBodyProps<KvProps, KvProps> & import("react").RefAttributes<HTMLDivElement>>;
4
+ export default _default;
@@ -14,8 +14,8 @@ import { forwardRef } from "react";
14
14
  import Grid from "@mui/material/Grid";
15
15
  import useTheme from "@mui/material/styles/useTheme";
16
16
  import TableBodyRow from "./TableBodyRow";
17
- var BasicTableBody = forwardRef(function (props, ref) {
18
- var rows = props.rows, columns = props.columns, forFrozen = props.forFrozen, noDataText = props.noDataText;
17
+ function BasicTableBody(props, ref) {
18
+ var rows = props.rows, columns = props.columns, forFrozen = props.forFrozen, noDataText = props.noDataText, onRowClick = props.onRowClick;
19
19
  var theme = useTheme();
20
20
  return (_jsx(Grid, __assign({ item: true, sx: {
21
21
  maxHeight: "41vh",
@@ -26,8 +26,8 @@ var BasicTableBody = forwardRef(function (props, ref) {
26
26
  "&::-webkit-scrollbar": {
27
27
  width: forFrozen ? 0 : "initial"
28
28
  }
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, forFrozen: forFrozen, columns: columns }, "BasicTable_".concat(index)));
29
+ } }, { children: _jsx("div", __assign({ ref: ref }, { children: rows.length > 0 ? (rows.map(function (row, index) {
30
+ return (_jsx(TableBodyRow, { row: row, rows: rows, forFrozen: forFrozen, columns: columns, onRowClick: onRowClick }, "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",
@@ -46,5 +46,5 @@ var BasicTableBody = forwardRef(function (props, ref) {
46
46
  paddingLeft: theme.spacing(0.625),
47
47
  paddingRight: theme.spacing(0.625)
48
48
  } }, { children: noDataText })) }))) })) })));
49
- });
50
- export default BasicTableBody;
49
+ }
50
+ export default forwardRef(BasicTableBody);
@@ -1,3 +1,3 @@
1
- import { BasicTableBodyRowProps } from "./types";
2
- declare function BasicTableBodyRow(props: BasicTableBodyRowProps): JSX.Element;
1
+ import { BasicTableBodyRowProps, KvProps } from "./types";
2
+ declare function BasicTableBodyRow<RowProps extends KvProps, ExtraProps extends KvProps>(props: BasicTableBodyRowProps<RowProps, ExtraProps>): JSX.Element;
3
3
  export default BasicTableBodyRow;
@@ -9,33 +9,14 @@ 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
- };
23
12
  import { jsx as _jsx } from "react/jsx-runtime";
24
- import { cloneElement, useMemo } from "react";
13
+ import { cloneElement } from "react";
25
14
  import colorAlpha from "color-alpha";
26
15
  import Grid from "@mui/material/Grid";
27
16
  import useTheme from "@mui/material/styles/useTheme";
28
17
  function BasicTableBodyRow(props) {
29
- var row = props.row, rows = props.rows, columns = props.columns, forFrozen = props.forFrozen;
30
- var onRowClick = row.onRowClick, rawRow = __rest(row, ["onRowClick"]);
18
+ var row = props.row, rows = props.rows, columns = props.columns, forFrozen = props.forFrozen, onRowClick = props.onRowClick;
31
19
  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]);
39
20
  return (_jsx(Grid, __assign({ container: true, justifyContent: "space-evenly", alignItems: "center", wrap: "nowrap", sx: {
40
21
  height: theme.spacing(7.5),
41
22
  borderBottomWidth: "thin",
@@ -58,7 +39,7 @@ function BasicTableBodyRow(props) {
58
39
  }
59
40
  }, onClick: onRowClick
60
41
  ? function () {
61
- onRowClick({ row: rawRow });
42
+ onRowClick(row);
62
43
  }
63
44
  : undefined }, { children: columns.map(function (col) {
64
45
  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;
@@ -67,7 +48,7 @@ function BasicTableBodyRow(props) {
67
48
  width: width,
68
49
  paddingLeft: theme.spacing(0.625),
69
50
  paddingRight: theme.spacing(0.625)
70
- } }, { children: cloneElement(Cell, { column: col, rows: rawRows, row: rawRow }) }), accessor));
51
+ } }, { children: cloneElement(Cell, { column: col, rows: rows, row: row }) }), accessor));
71
52
  }) })));
72
53
  }
73
54
  export default BasicTableBodyRow;
@@ -1,3 +1,3 @@
1
- import { BasicTableFooterProps } from "./types";
2
- declare function BasicTableFooter(props: BasicTableFooterProps): JSX.Element;
1
+ import { BasicTableFooterProps, KvProps } from "./types";
2
+ declare function BasicTableFooter<RowProps extends KvProps, ExtraProps extends KvProps>(props: BasicTableFooterProps<RowProps, ExtraProps>): JSX.Element;
3
3
  export default BasicTableFooter;
@@ -1,3 +1,3 @@
1
- import { BasicTableHeaderProps } from "./types";
2
- declare function BasicTableHeader(props: BasicTableHeaderProps): JSX.Element;
1
+ import { BasicTableHeaderProps, KvProps } from "./types";
2
+ declare function BasicTableHeader<RowProps extends KvProps, ExtraProps extends KvProps>(props: BasicTableHeaderProps<RowProps, ExtraProps>): JSX.Element;
3
3
  export default BasicTableHeader;
@@ -1,5 +1,5 @@
1
- import { BasicTableProps } from "./types";
2
- declare function BasicTable(props: BasicTableProps): JSX.Element;
1
+ import { BasicTableProps, KvProps } from "./types";
2
+ declare function BasicTable<RowProps extends KvProps, ExtraProps extends KvProps>(props: BasicTableProps<RowProps, ExtraProps>): JSX.Element;
3
3
  export default BasicTable;
4
4
  export * from "./types";
5
5
  export { default as useTable } from "./useTable";
@@ -22,7 +22,7 @@ import TableHeader from "./TableHeader";
22
22
  import TableFooter from "./TableFooter";
23
23
  function BasicTable(props) {
24
24
  var _a;
25
- var _b = props.columns, columns = _b === void 0 ? [] : _b, _c = props.rows, rows = _c === void 0 ? [] : _c, _d = props.headers, headers = _d === void 0 ? [] : _d, _e = props.footers, footers = _e === void 0 ? [] : _e, _f = props.noDataText, noDataText = _f === void 0 ? "No Data!" : _f, primaryColor = props.primaryColor, secondaryColor = props.secondaryColor;
25
+ var _b = props.columns, columns = _b === void 0 ? [] : _b, _c = props.rows, rows = _c === void 0 ? [] : _c, _d = props.headers, headers = _d === void 0 ? [] : _d, _e = props.footers, footers = _e === void 0 ? [] : _e, _f = props.noDataText, noDataText = _f === void 0 ? "No Data!" : _f, primaryColor = props.primaryColor, secondaryColor = props.secondaryColor, onRowClick = props.onRowClick;
26
26
  var theme = useCustomTheme({ primaryColor: primaryColor, secondaryColor: secondaryColor });
27
27
  var isUpMd = useMediaQuery(theme.breakpoints.up("md"));
28
28
  var fronzenColsCount = useMemo(function () { var _a; return (_a = columns.filter(function (col) { return col.canBeFrozen; })) === null || _a === void 0 ? void 0 : _a.length; }, [columns]);
@@ -63,7 +63,11 @@ function BasicTable(props) {
63
63
  zIndex: 999,
64
64
  backgroundColor: "Menu",
65
65
  boxShadow: "6px 0 6px -4px rgba(0,0,0,0.15)"
66
- } }, { children: _jsxs(Grid, __assign({ container: true, direction: "column", justifyContent: "center" }, { children: [_jsx(TableHeader, { headers: headers.filter(function (header) { return header.canBeFrozen; }) }), _jsx(TableBody, { forFrozen: true, rows: rows, ref: fixedRef, columns: columns.filter(function (col) { return col.canBeFrozen; }) }), _jsx(TableFooter, { footers: footers.filter(function (footer) { return footer.canBeFrozen; }) })] })) }))), _jsx(Grid, __assign({ item: true, style: {
66
+ } }, { children: _jsxs(Grid, __assign({ container: true, direction: "column", justifyContent: "center" }, { children: [_jsx(TableHeader, { headers: headers.filter(function (header) { return header.canBeFrozen; }) }), _jsx(TableBody, { forFrozen: true, rows: rows, ref: fixedRef, onRowClick: onRowClick
67
+ ? function (row) {
68
+ onRowClick(row);
69
+ }
70
+ : undefined, columns: columns.filter(function (col) { return col.canBeFrozen; }) }), _jsx(TableFooter, { footers: footers.filter(function (footer) { return footer.canBeFrozen; }) })] })) }))), _jsx(Grid, __assign({ item: true, style: {
67
71
  width: "100%",
68
72
  marginLeft: canFreeze ? frozenWidth || 0 : 0,
69
73
  overflow: "auto"
@@ -71,7 +75,11 @@ function BasicTable(props) {
71
75
  return isUpMd ? !header.canBeFrozen : true;
72
76
  }) }), _jsx(TableBody, { rows: rows, ref: dynamicRef, noDataText: noDataText, columns: columns.filter(function (col) {
73
77
  return isUpMd ? !col.canBeFrozen : true;
74
- }) }), _jsx(TableFooter, { footers: footers.filter(function (footer) {
78
+ }), onRowClick: onRowClick
79
+ ? function (row) {
80
+ onRowClick(row);
81
+ }
82
+ : undefined }), _jsx(TableFooter, { footers: footers.filter(function (footer) {
75
83
  return isUpMd ? !footer.canBeFrozen : true;
76
84
  }) })] })) }))] })) })) })));
77
85
  }
@@ -1,4 +1,5 @@
1
1
  import { ReactElement, CSSProperties } from "react";
2
+ export declare type KvProps = Record<string, unknown>;
2
3
  interface SortByProps {
3
4
  id: string;
4
5
  desc: boolean;
@@ -6,7 +7,15 @@ interface SortByProps {
6
7
  interface InitialStateProps {
7
8
  sortBy?: SortByProps;
8
9
  }
9
- export interface IColumn {
10
+ export interface SortingProps {
11
+ field: string;
12
+ isSorted?: boolean;
13
+ descending?: boolean;
14
+ }
15
+ export interface UseScrollProps {
16
+ canFreeze?: boolean;
17
+ }
18
+ export declare type ColumnBaseProps = {
10
19
  Header: ReactElement;
11
20
  headerTip?: string;
12
21
  Body: ReactElement;
@@ -17,63 +26,55 @@ export interface IColumn {
17
26
  canBeFrozen?: boolean;
18
27
  minWidth?: number;
19
28
  width?: number;
20
- [name: string]: any;
21
- }
22
- interface IHeader extends IColumn {
29
+ };
30
+ export declare type UseTableBaseProps<RowProps extends KvProps> = {
31
+ data: Array<RowProps>;
32
+ columns: Array<ColumnBaseProps>;
33
+ initialState?: InitialStateProps;
34
+ disableSortBy?: boolean;
35
+ onSort?: (props: SortingProps) => unknown;
36
+ };
37
+ export declare type UseTableProps<RowProps extends KvProps, ExtraProps extends KvProps> = UseTableBaseProps<RowProps> & ExtraProps;
38
+ export declare type HeaderProps<RowProps extends KvProps, ExtraProps extends KvProps> = ColumnBaseProps & Omit<UseTableProps<RowProps, ExtraProps>, keyof UseTableBaseProps<RowProps>> & {
23
39
  Cell: ReactElement;
24
40
  title: string;
25
41
  canSort?: boolean;
26
42
  onSort: (props: SortingProps) => unknown;
27
- }
28
- interface IFooter extends IColumn {
43
+ };
44
+ export declare type FooterProps<RowProps extends KvProps, ExtraProps extends KvProps> = ColumnBaseProps & Omit<UseTableProps<RowProps, ExtraProps>, keyof UseTableBaseProps<RowProps>> & {
29
45
  Cell: ReactElement;
30
- }
31
- interface IBodyColumn extends IColumn {
46
+ };
47
+ export declare type ColumnProps<RowProps extends KvProps, ExtraProps extends KvProps> = ColumnBaseProps & Omit<UseTableProps<RowProps, ExtraProps>, keyof UseTableBaseProps<RowProps>>;
48
+ export declare type ColumnWithCellProps<RowProps extends KvProps, ExtraProps extends KvProps> = ColumnProps<RowProps, ExtraProps> & {
32
49
  Cell: ReactElement;
50
+ };
51
+ export declare type UserTableReturns<RowProps extends KvProps, ExtraProps extends KvProps> = {
52
+ headers: Array<HeaderProps<RowProps, ExtraProps>>;
53
+ footers: Array<FooterProps<RowProps, ExtraProps>>;
54
+ columns: Array<ColumnWithCellProps<RowProps, ExtraProps>>;
55
+ rows: Array<RowProps>;
56
+ };
57
+ export interface BasicTableHeaderProps<RowProps extends KvProps, ExtraProps extends KvProps> {
58
+ headers: Array<HeaderProps<RowProps, ExtraProps>>;
33
59
  }
34
- export interface IRow {
35
- [name: string]: any;
36
- }
37
- interface RowClickProps {
38
- onRowClick?: (props: {
39
- row: IRow;
40
- }) => unknown;
41
- }
42
- export interface SortingProps {
43
- field: string;
44
- isSorted?: boolean;
45
- descending?: boolean;
46
- }
47
- export interface UseTableProps extends RowClickProps {
48
- data: Array<IRow>;
49
- columns: Array<IColumn>;
50
- initialState?: InitialStateProps;
51
- disableSortBy?: boolean;
52
- onSort?: (props: SortingProps) => unknown;
53
- [name: string]: any;
54
- }
55
- export interface UseScrollProps {
56
- canFreeze?: boolean;
57
- }
58
- export interface BasicTableHeaderProps {
59
- headers: Array<IHeader>;
60
- }
61
- export interface BasicTableFooterProps {
62
- footers: Array<IFooter>;
60
+ export interface BasicTableFooterProps<RowProps extends KvProps, ExtraProps extends KvProps> {
61
+ footers: Array<FooterProps<RowProps, ExtraProps>>;
63
62
  }
64
- export interface BasicTableBodyProps {
65
- columns: Array<IBodyColumn>;
66
- rows: Array<IRow & RowClickProps>;
63
+ export interface BasicTableBodyProps<RowProps extends KvProps, ExtraProps extends KvProps> {
64
+ columns: Array<ColumnWithCellProps<RowProps, ExtraProps>>;
65
+ rows: Array<RowProps>;
67
66
  noDataText?: string;
68
67
  forFrozen?: boolean;
68
+ onRowClick?: (row: RowProps) => unknown;
69
69
  }
70
- export interface BasicTableBodyRowProps {
71
- columns: Array<IBodyColumn>;
72
- rows: Array<IRow & RowClickProps>;
73
- row: IRow & RowClickProps;
70
+ export interface BasicTableBodyRowProps<RowProps extends KvProps, ExtraProps extends KvProps> {
71
+ columns: Array<ColumnWithCellProps<RowProps, ExtraProps>>;
72
+ rows: Array<RowProps>;
73
+ row: RowProps;
74
74
  forFrozen?: boolean;
75
+ onRowClick?: (row: RowProps) => unknown;
75
76
  }
76
- export declare type BasicTableProps = BasicTableHeaderProps & Omit<BasicTableBodyProps, "forFrozen"> & Partial<BasicTableFooterProps> & {
77
+ export declare type BasicTableProps<RowProps extends KvProps, ExtraProps extends KvProps> = BasicTableHeaderProps<RowProps, ExtraProps> & Omit<BasicTableBodyProps<RowProps, ExtraProps>, "forFrozen"> & Partial<BasicTableFooterProps<RowProps, ExtraProps>> & {
77
78
  primaryColor?: CSSProperties["color"];
78
79
  secondaryColor?: CSSProperties["color"];
79
80
  };
@@ -1,51 +1,3 @@
1
- /// <reference types="react" />
2
- import { UseTableProps, SortingProps } from "./types";
3
- declare function useTable(props: UseTableProps): {
4
- headers: {
5
- Header: import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
6
- headerTip?: string | undefined;
7
- Body: import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
8
- Footer?: import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | undefined;
9
- align?: "left" | "right" | "center" | undefined;
10
- accessor: string;
11
- canSort: boolean | undefined;
12
- canBeFrozen?: boolean | undefined;
13
- minWidth?: number | undefined;
14
- width?: number | undefined;
15
- Cell: JSX.Element;
16
- title: string;
17
- onSort: ({ field }: Pick<SortingProps, "field">) => void;
18
- }[];
19
- footers: {
20
- Header: import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
21
- headerTip?: string | undefined;
22
- Body: import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
23
- Footer?: import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | undefined;
24
- align?: "left" | "right" | "center" | undefined;
25
- accessor: string;
26
- canSort?: boolean | undefined;
27
- canBeFrozen?: boolean | undefined;
28
- minWidth?: number | undefined;
29
- width?: number | undefined;
30
- Cell: import("react").FunctionComponentElement<any>;
31
- }[];
32
- columns: {
33
- Header: import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
34
- headerTip?: string | undefined;
35
- Body: import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
36
- Footer?: import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | undefined;
37
- align?: "left" | "right" | "center" | undefined;
38
- accessor: string;
39
- canSort?: boolean | undefined;
40
- canBeFrozen?: boolean | undefined;
41
- minWidth?: number | undefined;
42
- width?: number | undefined;
43
- Cell: import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
44
- }[];
45
- rows: {
46
- onRowClick: ((props: {
47
- row: import("./types").IRow;
48
- }) => unknown) | undefined;
49
- }[];
50
- };
1
+ import { UseTableProps, KvProps, UserTableReturns } from "./types";
2
+ declare function useTable<T extends KvProps, F extends KvProps>(props: UseTableProps<T, F>): UserTableReturns<T, F>;
51
3
  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, onRowClick = props.onRowClick, rest = __rest(props, ["data", "columns", "initialState", "disableSortBy", "onSort", "onRowClick"]);
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"]);
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 (__assign(__assign({}, d), { onRowClick: onRowClick })); }); }, [data]);
69
+ var rows = useMemo(function () { return data.map(function (d) { return (__assign({}, d)); }); }, [data]);
70
70
  var cols = useMemo(function () {
71
71
  return columns.map(function (col) {
72
72
  var Body = col.Body;
@@ -0,0 +1,4 @@
1
+ import { FileUploaderProps } from "./types";
2
+ declare function FileUploader(props: FileUploaderProps): JSX.Element;
3
+ export default FileUploader;
4
+ export * from "./types";
@@ -0,0 +1,62 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
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
+ };
23
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
24
+ import Link from "@mui/material/Link";
25
+ import Grid from "@mui/material/Grid";
26
+ import Button from "@mui/material/Button";
27
+ import Typography from "@mui/material/Typography";
28
+ import useMediaQuery from "@mui/material/useMediaQuery";
29
+ import CircularProgress from "@mui/material/CircularProgress";
30
+ import ThemeProvider from "@mui/material/styles/ThemeProvider";
31
+ import useInteractions from "./useInteractions";
32
+ import useCustomTheme from "../useCustomTheme";
33
+ function FileUploader(props) {
34
+ var _a = props.height, height = _a === void 0 ? "150px" : _a, _b = props.maxWidth, maxWidth = _b === void 0 ? "430px" : _b, loading = props.loading, disabled = props.disabled, dropFileText = props.dropFileText, chooseFileText = props.chooseFileText, primaryColor = props.primaryColor, secondaryColor = props.secondaryColor, rest = __rest(props, ["height", "maxWidth", "loading", "disabled", "dropFileText", "chooseFileText", "primaryColor", "secondaryColor"]);
35
+ var theme = useCustomTheme({ primaryColor: primaryColor, secondaryColor: secondaryColor });
36
+ var lessThanSm = useMediaQuery(theme.breakpoints.down("sm"));
37
+ var _c = useInteractions(__assign(__assign({}, rest), { disabled: disabled })), alertArgs = _c.alertArgs, rootProps = _c.rootProps, onCloseAlert = _c.onCloseAlert, onSelectFile = _c.onSelectFile, getRootProps = _c.getRootProps, getInputProps = _c.getInputProps;
38
+ return (_jsx(ThemeProvider, __assign({ theme: theme }, { children: lessThanSm ? (_jsxs("div", __assign({}, getRootProps(), { children: [_jsx("input", __assign({}, getInputProps())), _jsx(Link, __assign({ color: disabled ? theme.palette.grey[400] : theme.palette.primary.main, sx: {
39
+ fontFamily: "Roboto, Helvetica, Arial, sans-serif",
40
+ cursor: disabled ? "not-allowed" : "pointer"
41
+ } }, { children: loading ? (_jsx(CircularProgress, { sx: { height: "25px", width: "25px" } })) : (chooseFileText || "Choose a file") }))] }))) : (_jsx(Grid, __assign({ container: true, direction: "column", justifyContent: "center", alignItems: "center", sx: {
42
+ border: "1px dashed #0099a7",
43
+ borderRadius: "5px",
44
+ outline: "none",
45
+ backgroundColor: "#F2F2F2",
46
+ maxWidth: maxWidth,
47
+ height: height,
48
+ width: "100%"
49
+ } }, rootProps, { children: loading ? (_jsx(CircularProgress, { style: { height: "30px", width: "30px" } })) : (_jsxs("div", { children: [_jsx("input", __assign({}, getInputProps())), _jsx(Typography, __assign({ component: "p", variant: "caption", sx: {
50
+ fontSize: ".875rem",
51
+ textAlign: "center"
52
+ } }, { children: dropFileText || "Drop files here" })), _jsx(Button, __assign({ variant: "contained", onClick: onSelectFile, sx: {
53
+ backgroundColor: "white !important",
54
+ color: disabled
55
+ ? theme.palette.grey[400]
56
+ : theme.palette.primary.main,
57
+ fontFamily: "Roboto, Helvetica, Arial, sans-serif",
58
+ cursor: disabled ? "not-allowed" : "pointer"
59
+ }, disabled: disabled }, { children: _jsx(Typography, { children: chooseFileText || "Choose a file" }) }))] })) }))) })));
60
+ }
61
+ export default FileUploader;
62
+ export * from "./types";
@@ -0,0 +1,21 @@
1
+ import { CSSProperties } from "react";
2
+ import { DropzoneProps } from "react-dropzone";
3
+ export interface InterfaceProps {
4
+ sizeExceededErrorText?: string;
5
+ wrongFileTypeErrorText?: string;
6
+ onUpload: (files: Array<File>) => void;
7
+ disabled?: boolean;
8
+ maxSize?: number;
9
+ accept?: DropzoneProps["accept"];
10
+ maxFiles?: DropzoneProps["maxFiles"];
11
+ multiple?: DropzoneProps["multiple"];
12
+ }
13
+ export interface FileUploaderProps extends InterfaceProps {
14
+ loading?: boolean;
15
+ dropFileText?: string;
16
+ chooseFileText?: string;
17
+ height?: CSSProperties["height"];
18
+ maxWidth?: CSSProperties["maxWidth"];
19
+ primaryColor?: CSSProperties["color"];
20
+ secondaryColor?: CSSProperties["color"];
21
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,17 @@
1
+ /// <reference types="react" />
2
+ import { InterfaceProps } from "./types";
3
+ declare function useInteractions(props: InterfaceProps): {
4
+ alertArgs: {
5
+ open: boolean;
6
+ message: string;
7
+ };
8
+ rootProps: {
9
+ onClick: (e: import("react").MouseEvent<HTMLElement, MouseEvent>) => void;
10
+ onKeyDown: (e: import("react").KeyboardEvent<HTMLElement>) => void;
11
+ };
12
+ onCloseAlert: () => void;
13
+ onSelectFile: () => void;
14
+ getRootProps: <T extends import("react-dropzone").DropzoneRootProps>(props?: T | undefined) => T;
15
+ getInputProps: <T_1 extends import("react-dropzone").DropzoneInputProps>(props?: T_1 | undefined) => T_1;
16
+ };
17
+ export default useInteractions;
@@ -0,0 +1,79 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { useState, useCallback, useMemo } from "react";
13
+ import { useDropzone } from "react-dropzone";
14
+ function useInteractions(props) {
15
+ var multiple = props.multiple, disabled = props.disabled, maxFiles = props.maxFiles, _a = props.maxSize, maxSize = _a === void 0 ? 1024 * 1024 * 5 : _a, accept = props.accept, onUpload = props.onUpload, sizeExceededErrorText = props.sizeExceededErrorText, wrongFileTypeErrorText = props.wrongFileTypeErrorText;
16
+ var ERROR_TYPE_MSG = useMemo(function () {
17
+ return wrongFileTypeErrorText ||
18
+ "The type of the file you uploaded is not accepted, please reupload!";
19
+ }, [wrongFileTypeErrorText]);
20
+ var ERROR_SIZE_MSG = useMemo(function () {
21
+ return sizeExceededErrorText ||
22
+ "Your file exceed the max size of ".concat(maxSize / 1024 / 1024, "MB.");
23
+ }, [sizeExceededErrorText, maxSize]);
24
+ var _b = useState({ open: false, message: "" }), alertArgs = _b[0], setAlertArgs = _b[1];
25
+ var onOpenAlert = useCallback(function (message) {
26
+ setAlertArgs(function (args) { return (__assign(__assign({}, args), { open: true, message: message })); });
27
+ }, []);
28
+ var onCloseAlert = useCallback(function () {
29
+ setAlertArgs({ open: false, message: "" });
30
+ }, []);
31
+ var onDrop = useCallback(function (acceptedFiles, rejectedFiles) {
32
+ if (rejectedFiles && rejectedFiles.length > 0) {
33
+ rejectedFiles.some(function (rejectedFile) {
34
+ var file = rejectedFile.file, errors = rejectedFile.errors;
35
+ if (accept && !Object.keys(accept).includes(file.type)) {
36
+ onOpenAlert(ERROR_TYPE_MSG);
37
+ return true;
38
+ }
39
+ if (file.size > maxSize) {
40
+ onOpenAlert(ERROR_SIZE_MSG);
41
+ return true;
42
+ }
43
+ if (errors.length > 0) {
44
+ onOpenAlert(errors.join("; "));
45
+ return true;
46
+ }
47
+ return false;
48
+ });
49
+ }
50
+ else {
51
+ onUpload(acceptedFiles);
52
+ }
53
+ }, [accept, onUpload]);
54
+ var _c = useDropzone({
55
+ onDrop: onDrop,
56
+ accept: accept,
57
+ multiple: multiple,
58
+ disabled: disabled,
59
+ maxSize: maxSize,
60
+ maxFiles: maxFiles
61
+ }), getRootProps = _c.getRootProps, getInputProps = _c.getInputProps, onSelectFile = _c.open;
62
+ var rootProps = getRootProps({
63
+ onClick: function (e) { return e.stopPropagation(); },
64
+ onKeyDown: function (e) {
65
+ if (e.key === "Space" || e.key === "Enter") {
66
+ e.stopPropagation();
67
+ }
68
+ }
69
+ });
70
+ return {
71
+ alertArgs: alertArgs,
72
+ rootProps: rootProps,
73
+ onCloseAlert: onCloseAlert,
74
+ onSelectFile: onSelectFile,
75
+ getRootProps: getRootProps,
76
+ getInputProps: getInputProps
77
+ };
78
+ }
79
+ export default useInteractions;
package/README.md CHANGED
@@ -214,7 +214,7 @@ import { BasicTable, useTable } from '@symply.io/basic-components';
214
214
  import BasicTable, { useTable } from '@symply.io/basic-components/BasicTable';
215
215
  ```
216
216
 
217
- <h5>Column Props (IColumn)</h5>
217
+ <h5>Column Props (ColumnBaseProps)</h5>
218
218
 
219
219
  | Name | Type | Default | Required | Description |
220
220
  | ----------- | --------------------------- | ------- | -------- | ----------------------------------------------------- |
@@ -231,33 +231,33 @@ import BasicTable, { useTable } from '@symply.io/basic-components/BasicTable';
231
231
 
232
232
  <h5>Hook Props</h5>
233
233
 
234
- | Name | Type | Default | Required | Description |
235
- | ------------- | -------------------------- | ------- | -------- | ------------------------------------------- |
236
- | columns | Array\<IColumn\> | | true | table columns |
237
- | data | Array<{ [name]: unknown }> | | true | table data/rows |
238
- | disableSortBy | bool | | false | If true, the whole table can't be sortable. |
239
- | initialState | { sortBy?: SortByProps } | | false | Set the initial states |
240
- | onRowClick | func | | false | The function for row clicking. |
241
- | onSort | func | | false | The function for sorting rows. |
234
+ | Name | Type | Default | Required | Description |
235
+ | ------------- | ---------------------------------- | ------- | -------- | ------------------------------------------- |
236
+ | columns | Array\<ColumnBaseProps\> | | true | table columns |
237
+ | data | Array<{ [name: string]: unknown }> | | true | table data/rows |
238
+ | disableSortBy | bool | | false | If true, the whole table can't be sortable. |
239
+ | initialState | { sortBy?: SortByProps } | | false | Set the initial states |
240
+ | onSort | func | | false | The function for sorting rows. |
242
241
 
243
242
  <h5>Hook Returns</h5>
244
243
 
245
- | Name | Type | Description |
246
- | ------- | -------------------- | ------------------------- |
247
- | headers | Array\<IHeader\> | The cells for the header. |
248
- | columns | Array\<IBodyColumn\> | The cells for the body. |
249
- | footers | Array\<IFooter> | The cells for the footer. |
250
- | rows | Array<IRow\> | The rows for the table. |
244
+ | Name | Type | Description |
245
+ | ------- | ---------------------------- | ------------------------- |
246
+ | headers | Array\<HeaderProps\> | The cells for the header. |
247
+ | columns | Array\<ColumnWithCellProps\> | The cells for the body. |
248
+ | footers | Array\<FooterProps> | The cells for the footer. |
249
+ | rows | Array<RowProps\> | The rows for the table. |
251
250
 
252
251
  <h5>Component Props</h5>
253
252
 
254
- | Name | Type | Default | Required | Description |
255
- | ---------- | -------------------- | ---------- | -------- | ----------------------------------------- |
256
- | headers | Array\<IHeader\> | | true | The cells for the header. (from the hook) |
257
- | columns | Array\<IBodyColumn\> | | true | The cells for the body. (from the hook) |
258
- | footers | Array\<IFooter> | [] | false | The cells for the footer. (from the hook) |
259
- | noDataText | string | 'No Data!' | false | The text when no data rendered. |
260
- | rows | Array<IRow\> | | true | The rows for the table. (from the hook) |
253
+ | Name | Type | Default | Required | Description |
254
+ | ---------- | ---------------------------- | ---------- | -------- | ----------------------------------------- |
255
+ | headers | Array\<HeaderProps\> | | true | The cells for the header. (from the hook) |
256
+ | columns | Array\<ColumnWithCellProps\> | | true | The cells for the body. (from the hook) |
257
+ | footers | Array\<FooterProps> | [] | false | The cells for the footer. (from the hook) |
258
+ | onRowClick | func | | false | The function for row clicking. |
259
+ | noDataText | string | 'No Data!' | false | The text when no data rendered. |
260
+ | rows | Array<RowProps\> | | true | The rows for the table. (from the hook) |
261
261
 
262
262
 
263
263
 
package/index.d.ts CHANGED
@@ -10,6 +10,7 @@ export * from "./DateInput";
10
10
  export * from "./DigitInput";
11
11
  export * from "./DynamicHeaderBar";
12
12
  export * from "./FeinInput";
13
+ export * from "./FileUploader";
13
14
  export * from "./FormRadioGroup";
14
15
  export * from "./FormSelector";
15
16
  export * from "./HelpCaption";
@@ -35,6 +36,7 @@ export { default as Copyright } from "./Copyright";
35
36
  export { default as DigitInput } from "./DigitInput";
36
37
  export { default as DynamicHeaderBar } from "./DynamicHeaderBar";
37
38
  export { default as FeinInput } from "./FeinInput";
39
+ export { default as FileUploader } from "./FileUploader";
38
40
  export { default as FormRadioGroup } from "./FormRadioGroup";
39
41
  export { default as HelpCaption } from "./HelpCaption";
40
42
  export { default as LoadingModal } from "./LoadingModal";
package/index.js CHANGED
@@ -10,6 +10,7 @@ export * from "./DateInput";
10
10
  export * from "./DigitInput";
11
11
  export * from "./DynamicHeaderBar";
12
12
  export * from "./FeinInput";
13
+ export * from "./FileUploader";
13
14
  export * from "./FormRadioGroup";
14
15
  export * from "./FormSelector";
15
16
  export * from "./HelpCaption";
@@ -35,6 +36,7 @@ export { default as Copyright } from "./Copyright";
35
36
  export { default as DigitInput } from "./DigitInput";
36
37
  export { default as DynamicHeaderBar } from "./DynamicHeaderBar";
37
38
  export { default as FeinInput } from "./FeinInput";
39
+ export { default as FileUploader } from "./FileUploader";
38
40
  export { default as FormRadioGroup } from "./FormRadioGroup";
39
41
  export { default as HelpCaption } from "./HelpCaption";
40
42
  export { default as LoadingModal } from "./LoadingModal";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symply.io/basic-components",
3
- "version": "1.0.4",
3
+ "version": "1.0.6-beta.1",
4
4
  "description": "Basic and reusable components for all frontend of Symply apps",
5
5
  "keywords": [
6
6
  "react",
@@ -58,6 +58,7 @@
58
58
  "@mui/system": "~5.4.2",
59
59
  "@reach/router": "^1.3.4",
60
60
  "color-alpha": "^1.1.3",
61
+ "react-dropzone": "~14.2.3",
61
62
  "react-player": "^2.9.0",
62
63
  "rifm": "^0.12.1"
63
64
  },