@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.
- package/BasicTable/TableBody.d.ts +3 -3
- package/BasicTable/TableBody.js +6 -6
- package/BasicTable/TableBodyRow.d.ts +2 -2
- package/BasicTable/TableBodyRow.js +4 -23
- package/BasicTable/TableFooter.d.ts +2 -2
- package/BasicTable/TableHeader.d.ts +2 -2
- package/BasicTable/index.d.ts +2 -2
- package/BasicTable/index.js +11 -3
- package/BasicTable/types.d.ts +46 -45
- package/BasicTable/useTable.d.ts +2 -50
- package/BasicTable/useTable.js +2 -2
- package/FileUploader/index.d.ts +4 -0
- package/FileUploader/index.js +62 -0
- package/FileUploader/types.d.ts +21 -0
- package/FileUploader/types.js +1 -0
- package/FileUploader/useInteractions.d.ts +17 -0
- package/FileUploader/useInteractions.js +79 -0
- package/README.md +22 -22
- package/index.d.ts +2 -0
- package/index.js +2 -0
- package/package.json +2 -1
@@ -1,4 +1,4 @@
|
|
1
1
|
/// <reference types="react" />
|
2
|
-
import { BasicTableBodyProps } from "./types";
|
3
|
-
declare const
|
4
|
-
export default
|
2
|
+
import { BasicTableBodyProps, KvProps } from "./types";
|
3
|
+
declare const _default: import("react").ForwardRefExoticComponent<BasicTableBodyProps<KvProps, KvProps> & import("react").RefAttributes<HTMLDivElement>>;
|
4
|
+
export default _default;
|
package/BasicTable/TableBody.js
CHANGED
@@ -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
|
-
|
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
|
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
|
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(
|
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:
|
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;
|
package/BasicTable/index.d.ts
CHANGED
@@ -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";
|
package/BasicTable/index.js
CHANGED
@@ -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,
|
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
|
-
})
|
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
|
}
|
package/BasicTable/types.d.ts
CHANGED
@@ -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
|
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
|
-
|
21
|
-
|
22
|
-
|
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
|
-
|
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
|
-
|
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
|
35
|
-
|
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<
|
66
|
-
rows: Array<
|
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<
|
72
|
-
rows: Array<
|
73
|
-
row:
|
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
|
};
|
package/BasicTable/useTable.d.ts
CHANGED
@@ -1,51 +1,3 @@
|
|
1
|
-
|
2
|
-
|
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;
|
package/BasicTable/useTable.js
CHANGED
@@ -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,
|
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(
|
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,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 (
|
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
|
235
|
-
| ------------- |
|
236
|
-
| columns | Array\<
|
237
|
-
| data | Array<{ [name]: unknown }> | | true | table data/rows |
|
238
|
-
| disableSortBy | bool
|
239
|
-
| initialState | { sortBy?: SortByProps }
|
240
|
-
|
|
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
|
246
|
-
| ------- |
|
247
|
-
| headers | Array\<
|
248
|
-
| columns | Array\<
|
249
|
-
| footers | Array\<
|
250
|
-
| rows | Array<
|
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
|
255
|
-
| ---------- |
|
256
|
-
| headers | Array\<
|
257
|
-
| columns | Array\<
|
258
|
-
| footers | Array\<
|
259
|
-
|
|
260
|
-
|
|
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.
|
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
|
},
|