jattac.libs.web.responsive-table 0.0.18 → 0.0.19
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/.eslintrc.json +8 -8
- package/.prettierrc +5 -5
- package/LICENSE +21 -21
- package/README.md +79 -79
- package/dist/UI/ResponsiveTable.d.ts +3 -0
- package/dist/index.js +19 -3
- package/dist/index.js.map +1 -1
- package/package.json +58 -58
- package/rollup.config.js +23 -23
- package/src/Data/IResponsiveTableColumnDefinition.tsx +11 -11
- package/src/Styles/ResponsiveTable.module.css +70 -70
- package/src/UI/ResponsiveTable.tsx +230 -211
- package/src/index.tsx +5 -5
- package/src/typings.d.ts +14 -14
- package/tsconfig.json +22 -22
- package/update-dependancies.sh +4 -4
- package/dist/UI/FormField.d.ts +0 -22
package/.eslintrc.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
{
|
|
2
|
-
"parser": "@typescript-eslint/parser",
|
|
3
|
-
"plugins": ["@typescript-eslint"],
|
|
4
|
-
"extends": ["plugin:@typescript-eslint/recommended"],
|
|
5
|
-
"rules": {
|
|
6
|
-
"@typescript-eslint/no-var-requires": "warn"
|
|
7
|
-
}
|
|
8
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"parser": "@typescript-eslint/parser",
|
|
3
|
+
"plugins": ["@typescript-eslint"],
|
|
4
|
+
"extends": ["plugin:@typescript-eslint/recommended"],
|
|
5
|
+
"rules": {
|
|
6
|
+
"@typescript-eslint/no-var-requires": "warn"
|
|
7
|
+
}
|
|
8
|
+
}
|
package/.prettierrc
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
{
|
|
2
|
-
"semi": true,
|
|
3
|
-
"singleQuote": true,
|
|
4
|
-
"printWidth": 120
|
|
5
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"semi": true,
|
|
3
|
+
"singleQuote": true,
|
|
4
|
+
"printWidth": 120
|
|
5
|
+
}
|
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2023 Nyingi Maina
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 Nyingi Maina
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
# ResponsiveTable
|
|
2
|
-
|
|
3
|
-
ResponsiveTable is a reusable React component that displays tabular data in a responsive layout.
|
|
4
|
-
|
|
5
|
-
## Features
|
|
6
|
-
|
|
7
|
-
- Handles mobile and desktop layouts
|
|
8
|
-
- Customizable columns
|
|
9
|
-
- Dynamic column definitions
|
|
10
|
-
- Card-style mobile view
|
|
11
|
-
- Generic types for flexible data
|
|
12
|
-
|
|
13
|
-
## Usage
|
|
14
|
-
|
|
15
|
-
```jsx
|
|
16
|
-
<ResponsiveTable columnDefinitions={columns} data={data} />
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
- 'columnDefinitions' defines an array of columns, which can be a simple configuration object or dynamic function
|
|
20
|
-
- 'data' is an array of data objects to display in rows
|
|
21
|
-
|
|
22
|
-
The component handles switching layout based on screen width to optimize for desktop and mobile.
|
|
23
|
-
|
|
24
|
-
## Custom Columns
|
|
25
|
-
|
|
26
|
-
Columns can be configured using the 'IResponsiveTableColumnDefinition' interface.
|
|
27
|
-
|
|
28
|
-
Some key configuration options:
|
|
29
|
-
|
|
30
|
-
- 'displayLabel': Header label
|
|
31
|
-
- 'dataKey': Maps column to data property
|
|
32
|
-
- 'cellRenderer': Renders cell value
|
|
33
|
-
|
|
34
|
-
See docs for more details on customization.
|
|
35
|
-
|
|
36
|
-
## Dynamic Columns
|
|
37
|
-
|
|
38
|
-
Column definitions can also be a function allowing dynamic configurations per row.
|
|
39
|
-
|
|
40
|
-
## Props
|
|
41
|
-
|
|
42
|
-
Prop definitions provide detailed specification of component contract.
|
|
43
|
-
|
|
44
|
-
### IProps
|
|
45
|
-
|
|
46
|
-
```ts
|
|
47
|
-
interface IProps<TData> {
|
|
48
|
-
/** Column definitions */
|
|
49
|
-
columnDefinitions: ColumnDefinition<TData>[];
|
|
50
|
-
|
|
51
|
-
/** Table data rows */
|
|
52
|
-
data: TData[];
|
|
53
|
-
|
|
54
|
-
/** Optional styling */
|
|
55
|
-
className?: string;
|
|
56
|
-
|
|
57
|
-
/** row click handler */
|
|
58
|
-
onRowClicked?: (row: TData) => void;
|
|
59
|
-
|
|
60
|
-
/** not data component */
|
|
61
|
-
noDataComponent?: ReactNode;
|
|
62
|
-
}
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
```ts
|
|
66
|
-
type ColumnDefinition<TData> =
|
|
67
|
-
| IResponsiveTableColumnDefinition<TData>
|
|
68
|
-
| ((rowData: TData, rowIndex?: number) => IResponsiveTableColumnDefinition<TData>);
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
```ts
|
|
72
|
-
interface IResponsiveTableColumnDefinition<TData> {
|
|
73
|
-
displayLabel: string | ReactNode;
|
|
74
|
-
|
|
75
|
-
dataKey?: keyof TData;
|
|
76
|
-
|
|
77
|
-
cellRenderer: (rowData: TData) => ReactNode;
|
|
78
|
-
}
|
|
79
|
-
```
|
|
1
|
+
# ResponsiveTable
|
|
2
|
+
|
|
3
|
+
ResponsiveTable is a reusable React component that displays tabular data in a responsive layout.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- Handles mobile and desktop layouts
|
|
8
|
+
- Customizable columns
|
|
9
|
+
- Dynamic column definitions
|
|
10
|
+
- Card-style mobile view
|
|
11
|
+
- Generic types for flexible data
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
```jsx
|
|
16
|
+
<ResponsiveTable columnDefinitions={columns} data={data} />
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
- 'columnDefinitions' defines an array of columns, which can be a simple configuration object or dynamic function
|
|
20
|
+
- 'data' is an array of data objects to display in rows
|
|
21
|
+
|
|
22
|
+
The component handles switching layout based on screen width to optimize for desktop and mobile.
|
|
23
|
+
|
|
24
|
+
## Custom Columns
|
|
25
|
+
|
|
26
|
+
Columns can be configured using the 'IResponsiveTableColumnDefinition' interface.
|
|
27
|
+
|
|
28
|
+
Some key configuration options:
|
|
29
|
+
|
|
30
|
+
- 'displayLabel': Header label
|
|
31
|
+
- 'dataKey': Maps column to data property
|
|
32
|
+
- 'cellRenderer': Renders cell value
|
|
33
|
+
|
|
34
|
+
See docs for more details on customization.
|
|
35
|
+
|
|
36
|
+
## Dynamic Columns
|
|
37
|
+
|
|
38
|
+
Column definitions can also be a function allowing dynamic configurations per row.
|
|
39
|
+
|
|
40
|
+
## Props
|
|
41
|
+
|
|
42
|
+
Prop definitions provide detailed specification of component contract.
|
|
43
|
+
|
|
44
|
+
### IProps
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
interface IProps<TData> {
|
|
48
|
+
/** Column definitions */
|
|
49
|
+
columnDefinitions: ColumnDefinition<TData>[];
|
|
50
|
+
|
|
51
|
+
/** Table data rows */
|
|
52
|
+
data: TData[];
|
|
53
|
+
|
|
54
|
+
/** Optional styling */
|
|
55
|
+
className?: string;
|
|
56
|
+
|
|
57
|
+
/** row click handler */
|
|
58
|
+
onRowClicked?: (row: TData) => void;
|
|
59
|
+
|
|
60
|
+
/** not data component */
|
|
61
|
+
noDataComponent?: ReactNode;
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
type ColumnDefinition<TData> =
|
|
67
|
+
| IResponsiveTableColumnDefinition<TData>
|
|
68
|
+
| ((rowData: TData, rowIndex?: number) => IResponsiveTableColumnDefinition<TData>);
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
interface IResponsiveTableColumnDefinition<TData> {
|
|
73
|
+
displayLabel: string | ReactNode;
|
|
74
|
+
|
|
75
|
+
dataKey?: keyof TData;
|
|
76
|
+
|
|
77
|
+
cellRenderer: (rowData: TData) => ReactNode;
|
|
78
|
+
}
|
|
79
|
+
```
|
|
@@ -6,6 +6,7 @@ interface IProps<TData> {
|
|
|
6
6
|
data: TData[];
|
|
7
7
|
noDataComponent?: ReactNode;
|
|
8
8
|
maxHeight?: string;
|
|
9
|
+
onRowClick?: (item: TData) => void;
|
|
9
10
|
}
|
|
10
11
|
interface IState {
|
|
11
12
|
isMobile: boolean;
|
|
@@ -23,6 +24,8 @@ declare class ResponsiveTable<TData> extends Component<IProps<TData>, IState> {
|
|
|
23
24
|
private getRawColumnDefinition;
|
|
24
25
|
private onHeaderClickCallback;
|
|
25
26
|
private getClickableHeaderClassName;
|
|
27
|
+
private get rowClickFunction();
|
|
28
|
+
private get rowClickStyle();
|
|
26
29
|
private get mobileView();
|
|
27
30
|
private get largeScreenView();
|
|
28
31
|
render(): React.ReactNode;
|
package/dist/index.js
CHANGED
|
@@ -29,7 +29,7 @@ function styleInject(css, ref) {
|
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
var css_248z = ".ResponsiveTable-module_card__b-U2v {\n border: 1px solid #ccc;\n margin-bottom: 10px;\n border-radius: 8px;\n overflow: hidden;\n box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);\n}\n\n.ResponsiveTable-module_card-header__Ttk51 {\n background-color: #f0f0f0;\n padding: 10px;\n font-weight: bold;\n}\n\n.ResponsiveTable-module_card-body__XIy0h {\n padding: 10px;\n}\n\n.ResponsiveTable-module_responsiveTable__4y-Od {\n width: 100%;\n border-collapse: collapse;\n}\n\n.ResponsiveTable-module_responsiveTable__4y-Od thead th {\n background-color: #f2f2f2;\n position: sticky;\n top: 0;\n z-index: 2;\n}\n\n.ResponsiveTable-module_responsiveTable__4y-Od th,\n.ResponsiveTable-module_responsiveTable__4y-Od td {\n padding: 12px;\n border-bottom: 1px solid #dddddd;\n text-align: left;\n}\n\n/* Alternate row colors */\n.ResponsiveTable-module_responsiveTable__4y-Od tr:nth-child(even) {\n background-color: #f9f9f9;\n}\n\n/* Change background color on hover */\n.ResponsiveTable-module_responsiveTable__4y-Od tr:hover {\n background-color: #d9edf7;\n}\n\n.ResponsiveTable-module_clickableHeader__xHQhF {\n cursor: pointer;\n color: #007bff;\n}\n\n.ResponsiveTable-module_clickableHeader__xHQhF:hover {\n text-decoration: underline;\n}\n\n.ResponsiveTable-module_noDataWrapper__Rj-k3 {\n color: #ca3333;\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n gap: 10px;\n}\n\n.ResponsiveTable-module_noData__IpwNq {\n text-align: center;\n font-weight: bold;\n padding: 30px;\n}\n";
|
|
32
|
+
var css_248z = ".ResponsiveTable-module_card__b-U2v {\r\n border: 1px solid #ccc;\r\n margin-bottom: 10px;\r\n border-radius: 8px;\r\n overflow: hidden;\r\n box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.ResponsiveTable-module_card-header__Ttk51 {\r\n background-color: #f0f0f0;\r\n padding: 10px;\r\n font-weight: bold;\r\n}\r\n\r\n.ResponsiveTable-module_card-body__XIy0h {\r\n padding: 10px;\r\n}\r\n\r\n.ResponsiveTable-module_responsiveTable__4y-Od {\r\n width: 100%;\r\n border-collapse: collapse;\r\n}\r\n\r\n.ResponsiveTable-module_responsiveTable__4y-Od thead th {\r\n background-color: #f2f2f2;\r\n position: sticky;\r\n top: 0;\r\n z-index: 2;\r\n}\r\n\r\n.ResponsiveTable-module_responsiveTable__4y-Od th,\r\n.ResponsiveTable-module_responsiveTable__4y-Od td {\r\n padding: 12px;\r\n border-bottom: 1px solid #dddddd;\r\n text-align: left;\r\n}\r\n\r\n/* Alternate row colors */\r\n.ResponsiveTable-module_responsiveTable__4y-Od tr:nth-child(even) {\r\n background-color: #f9f9f9;\r\n}\r\n\r\n/* Change background color on hover */\r\n.ResponsiveTable-module_responsiveTable__4y-Od tr:hover {\r\n background-color: #d9edf7;\r\n}\r\n\r\n.ResponsiveTable-module_clickableHeader__xHQhF {\r\n cursor: pointer;\r\n color: #007bff;\r\n}\r\n\r\n.ResponsiveTable-module_clickableHeader__xHQhF:hover {\r\n text-decoration: underline;\r\n}\r\n\r\n.ResponsiveTable-module_noDataWrapper__Rj-k3 {\r\n color: #ca3333;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height: 100%;\r\n gap: 10px;\r\n}\r\n\r\n.ResponsiveTable-module_noData__IpwNq {\r\n text-align: center;\r\n font-weight: bold;\r\n padding: 30px;\r\n}\r\n";
|
|
33
33
|
var styles = {"card":"ResponsiveTable-module_card__b-U2v","card-header":"ResponsiveTable-module_card-header__Ttk51","card-body":"ResponsiveTable-module_card-body__XIy0h","responsiveTable":"ResponsiveTable-module_responsiveTable__4y-Od","clickableHeader":"ResponsiveTable-module_clickableHeader__xHQhF","noDataWrapper":"ResponsiveTable-module_noDataWrapper__Rj-k3","noData":"ResponsiveTable-module_noData__IpwNq"};
|
|
34
34
|
styleInject(css_248z);
|
|
35
35
|
|
|
@@ -107,8 +107,24 @@ class ResponsiveTable extends React.Component {
|
|
|
107
107
|
: '';
|
|
108
108
|
return clickableHeaderClassName;
|
|
109
109
|
}
|
|
110
|
+
get rowClickFunction() {
|
|
111
|
+
if (this.props.onRowClick) {
|
|
112
|
+
return this.props.onRowClick;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
return () => { };
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
get rowClickStyle() {
|
|
119
|
+
if (this.props.onRowClick) {
|
|
120
|
+
return { cursor: 'pointers' };
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
return {};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
110
126
|
get mobileView() {
|
|
111
|
-
return (React.createElement("div", null, this.data.map((row, rowIndex) => (React.createElement("div", { key: rowIndex, className: styles['card'] },
|
|
127
|
+
return (React.createElement("div", null, this.data.map((row, rowIndex) => (React.createElement("div", { key: rowIndex, className: styles['card'], onClick: () => this.rowClickFunction(row) },
|
|
112
128
|
React.createElement("div", { className: styles['card-header'] }, " "),
|
|
113
129
|
React.createElement("div", { className: styles['card-body'] }, this.props.columnDefinitions.map((columnDefinition, colIndex) => {
|
|
114
130
|
const colDef = this.getColumnDefinition(columnDefinition, rowIndex);
|
|
@@ -138,7 +154,7 @@ class ResponsiveTable extends React.Component {
|
|
|
138
154
|
? () => onHeaderClickCallback(this.getColumnDefinition(columnDefinition, 0).interactivity.id)
|
|
139
155
|
: undefined }, this.getColumnDefinition(columnDefinition, 0).displayLabel));
|
|
140
156
|
}))),
|
|
141
|
-
React.createElement("tbody", null, this.data.map((row, rowIndex) => (React.createElement("tr", { key: rowIndex }, this.props.columnDefinitions.map((columnDefinition, colIndex) => (React.createElement("td", { key: colIndex }, this.getColumnDefinition(columnDefinition, rowIndex).cellRenderer(row)))))))))));
|
|
157
|
+
React.createElement("tbody", null, this.data.map((row, rowIndex) => (React.createElement("tr", { key: rowIndex }, this.props.columnDefinitions.map((columnDefinition, colIndex) => (React.createElement("td", { style: Object.assign({}, this.rowClickStyle), onClick: () => this.rowClickFunction(row), key: colIndex }, this.getColumnDefinition(columnDefinition, rowIndex).cellRenderer(row)))))))))));
|
|
142
158
|
}
|
|
143
159
|
render() {
|
|
144
160
|
if (!this.hasData) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../node_modules/style-inject/dist/style-inject.es.js","../src/UI/ResponsiveTable.tsx"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n",null],"names":["Component"],"mappings":";;;;AAAA,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;AAC/B,EAAE,KAAK,GAAG,KAAK,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;AACjC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B;AACA,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO,EAAE;AAC1D;AACA,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC9C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AAC1B;AACA,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAChD,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC9B,KAAK;AACL,GAAG,MAAM;AACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC5B,GAAG;AACH;AACA,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;AACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC;AACnC,GAAG,MAAM;AACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;AACpD,GAAG;AACH;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../node_modules/style-inject/dist/style-inject.es.js","../src/UI/ResponsiveTable.tsx"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n",null],"names":["Component"],"mappings":"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","x_google_ignoreList":[0]}
|
package/package.json
CHANGED
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "jattac.libs.web.responsive-table",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"description": "",
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"module": "dist/index.es.js",
|
|
7
|
-
"types": "dist/index.d.ts",
|
|
8
|
-
"scripts": {
|
|
9
|
-
"build": "rollup -c",
|
|
10
|
-
"lint": "eslint './{src,app}/**/*.{ts,tsx}'",
|
|
11
|
-
"size": "size-limit",
|
|
12
|
-
"prepare": "npm run build"
|
|
13
|
-
},
|
|
14
|
-
"keywords": [
|
|
15
|
-
"react",
|
|
16
|
-
"typescript"
|
|
17
|
-
],
|
|
18
|
-
"author": "Nyingi Maina",
|
|
19
|
-
"license": "MIT",
|
|
20
|
-
"peerDependencies": {
|
|
21
|
-
"react": ">=18.2.0",
|
|
22
|
-
"react-dom": ">=18.2.0",
|
|
23
|
-
"typescript": ">=3.7.0"
|
|
24
|
-
},
|
|
25
|
-
"devDependencies": {
|
|
26
|
-
"@rollup/plugin-commonjs": "^25.0.7",
|
|
27
|
-
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
28
|
-
"@rollup/plugin-typescript": "^11.1.5",
|
|
29
|
-
"@size-limit/preset-small-lib": "^10.0.1",
|
|
30
|
-
"@testing-library/react": "^14.0.0",
|
|
31
|
-
"@types/react": "^18.2.33",
|
|
32
|
-
"@types/react-dom": "^18.2.14",
|
|
33
|
-
"@typescript-eslint/eslint-plugin": "^6.9.1",
|
|
34
|
-
"@typescript-eslint/parser": "^6.9.1",
|
|
35
|
-
"eslint": "^8.52.0",
|
|
36
|
-
"eslint-config-prettier": "^9.0.0",
|
|
37
|
-
"eslint-plugin-prettier": "^5.0.1",
|
|
38
|
-
"eslint-plugin-react": "^7.33.2",
|
|
39
|
-
"identity-obj-proxy": "^3.0.0",
|
|
40
|
-
"npm": "^10.2.2",
|
|
41
|
-
"postcss": "^8.4.31",
|
|
42
|
-
"prettier": "^3.0.3",
|
|
43
|
-
"react": "^18.2.0",
|
|
44
|
-
"react-dom": "^18.2.0",
|
|
45
|
-
"rollup": "^4.2.0",
|
|
46
|
-
"rollup-plugin-copy": "^3.5.0",
|
|
47
|
-
"rollup-plugin-delete": "^2.0.0",
|
|
48
|
-
"rollup-plugin-generate-package-json": "^3.2.0",
|
|
49
|
-
"rollup-plugin-peer-deps-external": "^2.2.4",
|
|
50
|
-
"rollup-plugin-postcss": "^4.0.2",
|
|
51
|
-
"size-limit": "^10.0.1",
|
|
52
|
-
"typescript": "^5.2.2"
|
|
53
|
-
},
|
|
54
|
-
"dependencies": {
|
|
55
|
-
"@rollup/plugin-terser": "^0.4.4",
|
|
56
|
-
"tslib": "^2.6.2"
|
|
57
|
-
}
|
|
58
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "jattac.libs.web.responsive-table",
|
|
3
|
+
"version": "0.0.19",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"module": "dist/index.es.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "rollup -c",
|
|
10
|
+
"lint": "eslint './{src,app}/**/*.{ts,tsx}'",
|
|
11
|
+
"size": "size-limit",
|
|
12
|
+
"prepare": "npm run build"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"react",
|
|
16
|
+
"typescript"
|
|
17
|
+
],
|
|
18
|
+
"author": "Nyingi Maina",
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"peerDependencies": {
|
|
21
|
+
"react": ">=18.2.0",
|
|
22
|
+
"react-dom": ">=18.2.0",
|
|
23
|
+
"typescript": ">=3.7.0"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@rollup/plugin-commonjs": "^25.0.7",
|
|
27
|
+
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
28
|
+
"@rollup/plugin-typescript": "^11.1.5",
|
|
29
|
+
"@size-limit/preset-small-lib": "^10.0.1",
|
|
30
|
+
"@testing-library/react": "^14.0.0",
|
|
31
|
+
"@types/react": "^18.2.33",
|
|
32
|
+
"@types/react-dom": "^18.2.14",
|
|
33
|
+
"@typescript-eslint/eslint-plugin": "^6.9.1",
|
|
34
|
+
"@typescript-eslint/parser": "^6.9.1",
|
|
35
|
+
"eslint": "^8.52.0",
|
|
36
|
+
"eslint-config-prettier": "^9.0.0",
|
|
37
|
+
"eslint-plugin-prettier": "^5.0.1",
|
|
38
|
+
"eslint-plugin-react": "^7.33.2",
|
|
39
|
+
"identity-obj-proxy": "^3.0.0",
|
|
40
|
+
"npm": "^10.2.2",
|
|
41
|
+
"postcss": "^8.4.31",
|
|
42
|
+
"prettier": "^3.0.3",
|
|
43
|
+
"react": "^18.2.0",
|
|
44
|
+
"react-dom": "^18.2.0",
|
|
45
|
+
"rollup": "^4.2.0",
|
|
46
|
+
"rollup-plugin-copy": "^3.5.0",
|
|
47
|
+
"rollup-plugin-delete": "^2.0.0",
|
|
48
|
+
"rollup-plugin-generate-package-json": "^3.2.0",
|
|
49
|
+
"rollup-plugin-peer-deps-external": "^2.2.4",
|
|
50
|
+
"rollup-plugin-postcss": "^4.0.2",
|
|
51
|
+
"size-limit": "^10.0.1",
|
|
52
|
+
"typescript": "^5.2.2"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@rollup/plugin-terser": "^0.4.4",
|
|
56
|
+
"tslib": "^2.6.2"
|
|
57
|
+
}
|
|
58
|
+
}
|
package/rollup.config.js
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
const postcss = require('rollup-plugin-postcss');
|
|
2
|
-
const typescript = require('@rollup/plugin-typescript');
|
|
3
|
-
const peerDepsExternal = require('rollup-plugin-peer-deps-external');
|
|
4
|
-
const resolve = require('@rollup/plugin-node-resolve').default;
|
|
5
|
-
const commonjs = require('@rollup/plugin-commonjs');
|
|
6
|
-
|
|
7
|
-
module.exports = {
|
|
8
|
-
input: 'src/index.tsx',
|
|
9
|
-
output: {
|
|
10
|
-
dir: 'dist',
|
|
11
|
-
format: 'cjs',
|
|
12
|
-
sourcemap: true,
|
|
13
|
-
},
|
|
14
|
-
plugins: [
|
|
15
|
-
peerDepsExternal(),
|
|
16
|
-
resolve(),
|
|
17
|
-
typescript(),
|
|
18
|
-
commonjs(),
|
|
19
|
-
postcss({
|
|
20
|
-
modules: true,
|
|
21
|
-
}),
|
|
22
|
-
],
|
|
23
|
-
};
|
|
1
|
+
const postcss = require('rollup-plugin-postcss');
|
|
2
|
+
const typescript = require('@rollup/plugin-typescript');
|
|
3
|
+
const peerDepsExternal = require('rollup-plugin-peer-deps-external');
|
|
4
|
+
const resolve = require('@rollup/plugin-node-resolve').default;
|
|
5
|
+
const commonjs = require('@rollup/plugin-commonjs');
|
|
6
|
+
|
|
7
|
+
module.exports = {
|
|
8
|
+
input: 'src/index.tsx',
|
|
9
|
+
output: {
|
|
10
|
+
dir: 'dist',
|
|
11
|
+
format: 'cjs',
|
|
12
|
+
sourcemap: true,
|
|
13
|
+
},
|
|
14
|
+
plugins: [
|
|
15
|
+
peerDepsExternal(),
|
|
16
|
+
resolve(),
|
|
17
|
+
typescript(),
|
|
18
|
+
commonjs(),
|
|
19
|
+
postcss({
|
|
20
|
+
modules: true,
|
|
21
|
+
}),
|
|
22
|
+
],
|
|
23
|
+
};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
2
|
-
|
|
3
|
-
export default interface IResponsiveTableColumnDefinition<TData> {
|
|
4
|
-
displayLabel: ReactNode;
|
|
5
|
-
cellRenderer: (data: TData) => ReactNode;
|
|
6
|
-
interactivity?: {
|
|
7
|
-
id: string;
|
|
8
|
-
onHeaderClick?: (id: string) => void;
|
|
9
|
-
className?: string;
|
|
10
|
-
};
|
|
11
|
-
}
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
export default interface IResponsiveTableColumnDefinition<TData> {
|
|
4
|
+
displayLabel: ReactNode;
|
|
5
|
+
cellRenderer: (data: TData) => ReactNode;
|
|
6
|
+
interactivity?: {
|
|
7
|
+
id: string;
|
|
8
|
+
onHeaderClick?: (id: string) => void;
|
|
9
|
+
className?: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
@@ -1,70 +1,70 @@
|
|
|
1
|
-
.card {
|
|
2
|
-
border: 1px solid #ccc;
|
|
3
|
-
margin-bottom: 10px;
|
|
4
|
-
border-radius: 8px;
|
|
5
|
-
overflow: hidden;
|
|
6
|
-
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
.card-header {
|
|
10
|
-
background-color: #f0f0f0;
|
|
11
|
-
padding: 10px;
|
|
12
|
-
font-weight: bold;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
.card-body {
|
|
16
|
-
padding: 10px;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
.responsiveTable {
|
|
20
|
-
width: 100%;
|
|
21
|
-
border-collapse: collapse;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
.responsiveTable thead th {
|
|
25
|
-
background-color: #f2f2f2;
|
|
26
|
-
position: sticky;
|
|
27
|
-
top: 0;
|
|
28
|
-
z-index: 2;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
.responsiveTable th,
|
|
32
|
-
.responsiveTable td {
|
|
33
|
-
padding: 12px;
|
|
34
|
-
border-bottom: 1px solid #dddddd;
|
|
35
|
-
text-align: left;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/* Alternate row colors */
|
|
39
|
-
.responsiveTable tr:nth-child(even) {
|
|
40
|
-
background-color: #f9f9f9;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/* Change background color on hover */
|
|
44
|
-
.responsiveTable tr:hover {
|
|
45
|
-
background-color: #d9edf7;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
.clickableHeader {
|
|
49
|
-
cursor: pointer;
|
|
50
|
-
color: #007bff;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
.clickableHeader:hover {
|
|
54
|
-
text-decoration: underline;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
.noDataWrapper {
|
|
58
|
-
color: #ca3333;
|
|
59
|
-
display: flex;
|
|
60
|
-
justify-content: center;
|
|
61
|
-
align-items: center;
|
|
62
|
-
height: 100%;
|
|
63
|
-
gap: 10px;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
.noData {
|
|
67
|
-
text-align: center;
|
|
68
|
-
font-weight: bold;
|
|
69
|
-
padding: 30px;
|
|
70
|
-
}
|
|
1
|
+
.card {
|
|
2
|
+
border: 1px solid #ccc;
|
|
3
|
+
margin-bottom: 10px;
|
|
4
|
+
border-radius: 8px;
|
|
5
|
+
overflow: hidden;
|
|
6
|
+
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.card-header {
|
|
10
|
+
background-color: #f0f0f0;
|
|
11
|
+
padding: 10px;
|
|
12
|
+
font-weight: bold;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.card-body {
|
|
16
|
+
padding: 10px;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.responsiveTable {
|
|
20
|
+
width: 100%;
|
|
21
|
+
border-collapse: collapse;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.responsiveTable thead th {
|
|
25
|
+
background-color: #f2f2f2;
|
|
26
|
+
position: sticky;
|
|
27
|
+
top: 0;
|
|
28
|
+
z-index: 2;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.responsiveTable th,
|
|
32
|
+
.responsiveTable td {
|
|
33
|
+
padding: 12px;
|
|
34
|
+
border-bottom: 1px solid #dddddd;
|
|
35
|
+
text-align: left;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* Alternate row colors */
|
|
39
|
+
.responsiveTable tr:nth-child(even) {
|
|
40
|
+
background-color: #f9f9f9;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* Change background color on hover */
|
|
44
|
+
.responsiveTable tr:hover {
|
|
45
|
+
background-color: #d9edf7;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.clickableHeader {
|
|
49
|
+
cursor: pointer;
|
|
50
|
+
color: #007bff;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.clickableHeader:hover {
|
|
54
|
+
text-decoration: underline;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.noDataWrapper {
|
|
58
|
+
color: #ca3333;
|
|
59
|
+
display: flex;
|
|
60
|
+
justify-content: center;
|
|
61
|
+
align-items: center;
|
|
62
|
+
height: 100%;
|
|
63
|
+
gap: 10px;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.noData {
|
|
67
|
+
text-align: center;
|
|
68
|
+
font-weight: bold;
|
|
69
|
+
padding: 30px;
|
|
70
|
+
}
|
|
@@ -1,211 +1,230 @@
|
|
|
1
|
-
import React, { CSSProperties, Component, ReactNode } from 'react';
|
|
2
|
-
import styles from '../Styles/ResponsiveTable.module.css';
|
|
3
|
-
import IResponsiveTableColumnDefinition from '../Data/IResponsiveTableColumnDefinition';
|
|
4
|
-
|
|
5
|
-
type ColumnDefinition<TData> =
|
|
6
|
-
| IResponsiveTableColumnDefinition<TData>
|
|
7
|
-
| ((data: TData, rowIndex?: number) => IResponsiveTableColumnDefinition<TData>);
|
|
8
|
-
interface IProps<TData> {
|
|
9
|
-
columnDefinitions: ColumnDefinition<TData>[];
|
|
10
|
-
data: TData[];
|
|
11
|
-
noDataComponent?: ReactNode;
|
|
12
|
-
maxHeight?: string;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
);
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
);
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
|
|
1
|
+
import React, { CSSProperties, Component, ReactNode } from 'react';
|
|
2
|
+
import styles from '../Styles/ResponsiveTable.module.css';
|
|
3
|
+
import IResponsiveTableColumnDefinition from '../Data/IResponsiveTableColumnDefinition';
|
|
4
|
+
|
|
5
|
+
type ColumnDefinition<TData> =
|
|
6
|
+
| IResponsiveTableColumnDefinition<TData>
|
|
7
|
+
| ((data: TData, rowIndex?: number) => IResponsiveTableColumnDefinition<TData>);
|
|
8
|
+
interface IProps<TData> {
|
|
9
|
+
columnDefinitions: ColumnDefinition<TData>[];
|
|
10
|
+
data: TData[];
|
|
11
|
+
noDataComponent?: ReactNode;
|
|
12
|
+
maxHeight?: string;
|
|
13
|
+
onRowClick?: (item: TData) => void;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface IState {
|
|
17
|
+
isMobile: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Class component
|
|
21
|
+
class ResponsiveTable<TData> extends Component<IProps<TData>, IState> {
|
|
22
|
+
constructor(props: IProps<TData>) {
|
|
23
|
+
super(props);
|
|
24
|
+
this.state = {
|
|
25
|
+
isMobile: false,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
private get data(): TData[] {
|
|
30
|
+
if (Array.isArray(this.props.data) && this.props.data.length > 0) {
|
|
31
|
+
return this.props.data;
|
|
32
|
+
} else {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
private get noDataSvg(): ReactNode {
|
|
38
|
+
return (
|
|
39
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="#ccc" height="40" width="40" viewBox="0 0 24 24">
|
|
40
|
+
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-1-14h2v6h-2zm0 8h2v2h-2z" />
|
|
41
|
+
</svg>
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
private get hasData(): boolean {
|
|
46
|
+
return this.data.length > 0;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
private get noDataComponent(): ReactNode {
|
|
50
|
+
return (
|
|
51
|
+
this.props.noDataComponent || (
|
|
52
|
+
<div className={styles.noDataWrapper}>
|
|
53
|
+
{this.noDataSvg}
|
|
54
|
+
<div className={styles.noData}>No data</div>
|
|
55
|
+
</div>
|
|
56
|
+
)
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
componentDidMount(): void {
|
|
61
|
+
this.setState(() => {
|
|
62
|
+
return { isMobile: window.innerWidth <= 600 };
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
window.addEventListener('resize', this.handleResize);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
componentWillUnmount(): void {
|
|
69
|
+
window.removeEventListener('resize', this.handleResize);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
handleResize = (): void => {
|
|
73
|
+
this.setState(() => {
|
|
74
|
+
return { isMobile: window.innerWidth <= 600 };
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
private getColumnDefinition(
|
|
79
|
+
columnDefinition: ColumnDefinition<TData>,
|
|
80
|
+
rowIndex: number,
|
|
81
|
+
): IResponsiveTableColumnDefinition<TData> {
|
|
82
|
+
if (!this.hasData) {
|
|
83
|
+
return { displayLabel: '', cellRenderer: () => '' };
|
|
84
|
+
}
|
|
85
|
+
return columnDefinition instanceof Function ? columnDefinition(this.data[0], rowIndex) : columnDefinition;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
private getRawColumnDefinition(columnDefinition: ColumnDefinition<TData>): IResponsiveTableColumnDefinition<TData> {
|
|
89
|
+
let rawColumnDefinition: IResponsiveTableColumnDefinition<TData> = {} as IResponsiveTableColumnDefinition<TData>;
|
|
90
|
+
if (columnDefinition instanceof Function) {
|
|
91
|
+
rawColumnDefinition = columnDefinition(this.data[0], 0);
|
|
92
|
+
} else {
|
|
93
|
+
rawColumnDefinition = columnDefinition as IResponsiveTableColumnDefinition<TData>;
|
|
94
|
+
}
|
|
95
|
+
return rawColumnDefinition;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private onHeaderClickCallback(columnDefinition: ColumnDefinition<TData>): ((id: string) => void) | undefined {
|
|
99
|
+
const rawColumnDefinition = this.getRawColumnDefinition(columnDefinition);
|
|
100
|
+
if (rawColumnDefinition.interactivity && rawColumnDefinition.interactivity.onHeaderClick) {
|
|
101
|
+
return rawColumnDefinition.interactivity.onHeaderClick;
|
|
102
|
+
} else {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
private getClickableHeaderClassName(
|
|
108
|
+
onHeaderClickCallback: ((id: string) => void) | undefined,
|
|
109
|
+
colDef: ColumnDefinition<TData>,
|
|
110
|
+
): string {
|
|
111
|
+
const rawColumnDefinition = this.getRawColumnDefinition(colDef);
|
|
112
|
+
const clickableHeaderClassName = onHeaderClickCallback
|
|
113
|
+
? rawColumnDefinition.interactivity!.className || styles.clickableHeader
|
|
114
|
+
: '';
|
|
115
|
+
return clickableHeaderClassName;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
private get rowClickFunction(): (item: TData) => void {
|
|
119
|
+
if (this.props.onRowClick) {
|
|
120
|
+
return this.props.onRowClick;
|
|
121
|
+
} else {
|
|
122
|
+
return () => {};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
private get rowClickStyle(): CSSProperties {
|
|
127
|
+
if (this.props.onRowClick) {
|
|
128
|
+
return { cursor: 'pointers' } as CSSProperties;
|
|
129
|
+
} else {
|
|
130
|
+
return {};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
private get mobileView(): ReactNode {
|
|
135
|
+
return (
|
|
136
|
+
<div>
|
|
137
|
+
{this.data.map((row, rowIndex) => (
|
|
138
|
+
<div key={rowIndex} className={styles['card']} onClick={() => this.rowClickFunction(row)}>
|
|
139
|
+
<div className={styles['card-header']}> </div>
|
|
140
|
+
<div className={styles['card-body']}>
|
|
141
|
+
{this.props.columnDefinitions.map((columnDefinition, colIndex) => {
|
|
142
|
+
const colDef = this.getColumnDefinition(columnDefinition, rowIndex);
|
|
143
|
+
const onHeaderClickCallback = this.onHeaderClickCallback(colDef);
|
|
144
|
+
const clickableHeaderClassName = this.getClickableHeaderClassName(onHeaderClickCallback, colDef);
|
|
145
|
+
return (
|
|
146
|
+
<div key={colIndex}>
|
|
147
|
+
<p>
|
|
148
|
+
<span
|
|
149
|
+
className={`font-bold ${clickableHeaderClassName}`}
|
|
150
|
+
onClick={
|
|
151
|
+
onHeaderClickCallback ? () => onHeaderClickCallback(colDef.interactivity!.id) : undefined
|
|
152
|
+
}
|
|
153
|
+
>
|
|
154
|
+
{colDef.displayLabel}:
|
|
155
|
+
</span>{' '}
|
|
156
|
+
{colDef.cellRenderer(row)}
|
|
157
|
+
</p>
|
|
158
|
+
</div>
|
|
159
|
+
);
|
|
160
|
+
})}
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
))}
|
|
164
|
+
</div>
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
private get largeScreenView(): ReactNode {
|
|
169
|
+
const useFixedHeaders = this.props.maxHeight ? true : false;
|
|
170
|
+
|
|
171
|
+
const fixedHeadersStyle = useFixedHeaders
|
|
172
|
+
? ({ maxHeight: this.props.maxHeight, overflowY: 'auto' } as CSSProperties)
|
|
173
|
+
: {};
|
|
174
|
+
|
|
175
|
+
return (
|
|
176
|
+
<div style={fixedHeadersStyle}>
|
|
177
|
+
<table className={styles['responsiveTable']}>
|
|
178
|
+
<thead>
|
|
179
|
+
<tr>
|
|
180
|
+
{this.props.columnDefinitions.map((columnDefinition, colIndex) => {
|
|
181
|
+
const onHeaderClickCallback = this.onHeaderClickCallback(columnDefinition);
|
|
182
|
+
const clickableHeaderClassName = this.getClickableHeaderClassName(
|
|
183
|
+
onHeaderClickCallback,
|
|
184
|
+
columnDefinition,
|
|
185
|
+
);
|
|
186
|
+
return (
|
|
187
|
+
<th
|
|
188
|
+
key={colIndex}
|
|
189
|
+
className={`${clickableHeaderClassName}`}
|
|
190
|
+
onClick={
|
|
191
|
+
onHeaderClickCallback
|
|
192
|
+
? () => onHeaderClickCallback(this.getColumnDefinition(columnDefinition, 0).interactivity!.id)
|
|
193
|
+
: undefined
|
|
194
|
+
}
|
|
195
|
+
>
|
|
196
|
+
{this.getColumnDefinition(columnDefinition, 0).displayLabel}
|
|
197
|
+
</th>
|
|
198
|
+
);
|
|
199
|
+
})}
|
|
200
|
+
</tr>
|
|
201
|
+
</thead>
|
|
202
|
+
<tbody>
|
|
203
|
+
{this.data.map((row, rowIndex) => (
|
|
204
|
+
<tr key={rowIndex}>
|
|
205
|
+
{this.props.columnDefinitions.map((columnDefinition, colIndex) => (
|
|
206
|
+
<td style={{ ...this.rowClickStyle }} onClick={() => this.rowClickFunction(row)} key={colIndex}>
|
|
207
|
+
{this.getColumnDefinition(columnDefinition, rowIndex).cellRenderer(row)}
|
|
208
|
+
</td>
|
|
209
|
+
))}
|
|
210
|
+
</tr>
|
|
211
|
+
))}
|
|
212
|
+
</tbody>
|
|
213
|
+
</table>
|
|
214
|
+
</div>
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
render() {
|
|
219
|
+
if (!this.hasData) {
|
|
220
|
+
return this.noDataComponent;
|
|
221
|
+
}
|
|
222
|
+
if (this.state.isMobile) {
|
|
223
|
+
return this.mobileView;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
return this.largeScreenView;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export default ResponsiveTable;
|
package/src/index.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import IResponsiveTableColumnDefinition from "./Data/IResponsiveTableColumnDefinition";
|
|
2
|
-
import ResponsiveTable from "./UI/ResponsiveTable";
|
|
3
|
-
|
|
4
|
-
export {IResponsiveTableColumnDefinition}
|
|
5
|
-
export default ResponsiveTable
|
|
1
|
+
import IResponsiveTableColumnDefinition from "./Data/IResponsiveTableColumnDefinition";
|
|
2
|
+
import ResponsiveTable from "./UI/ResponsiveTable";
|
|
3
|
+
|
|
4
|
+
export {IResponsiveTableColumnDefinition}
|
|
5
|
+
export default ResponsiveTable
|
package/src/typings.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
declare module '*.css' {
|
|
2
|
-
const content: { [className: string]: string };
|
|
3
|
-
export default content;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
7
|
-
interface SvgrComponent extends React.StatelessComponent<React.SVGAttributes<SVGElement>> {}
|
|
8
|
-
|
|
9
|
-
declare module '*.svg' {
|
|
10
|
-
const svgUrl: string;
|
|
11
|
-
const svgComponent: SvgrComponent;
|
|
12
|
-
export default svgUrl;
|
|
13
|
-
export { svgComponent as ReactComponent };
|
|
14
|
-
}
|
|
1
|
+
declare module '*.css' {
|
|
2
|
+
const content: { [className: string]: string };
|
|
3
|
+
export default content;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
7
|
+
interface SvgrComponent extends React.StatelessComponent<React.SVGAttributes<SVGElement>> {}
|
|
8
|
+
|
|
9
|
+
declare module '*.svg' {
|
|
10
|
+
const svgUrl: string;
|
|
11
|
+
const svgComponent: SvgrComponent;
|
|
12
|
+
export default svgUrl;
|
|
13
|
+
export { svgComponent as ReactComponent };
|
|
14
|
+
}
|
package/tsconfig.json
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"outDir": "dist",
|
|
4
|
-
"module": "esnext",
|
|
5
|
-
"target": "es2015",
|
|
6
|
-
"lib": ["dom", "esnext"],
|
|
7
|
-
"moduleResolution": "node",
|
|
8
|
-
"jsx": "react",
|
|
9
|
-
"sourceMap": true,
|
|
10
|
-
"declaration": true,
|
|
11
|
-
"esModuleInterop": true,
|
|
12
|
-
"noImplicitReturns": true,
|
|
13
|
-
"noImplicitThis": true,
|
|
14
|
-
"noImplicitAny": true,
|
|
15
|
-
"strictNullChecks": true,
|
|
16
|
-
"noUnusedLocals": true,
|
|
17
|
-
"noUnusedParameters": true,
|
|
18
|
-
"allowSyntheticDefaultImports": true
|
|
19
|
-
},
|
|
20
|
-
"include": ["src"],
|
|
21
|
-
"exclude": ["node_modules", "dist"]
|
|
22
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"outDir": "dist",
|
|
4
|
+
"module": "esnext",
|
|
5
|
+
"target": "es2015",
|
|
6
|
+
"lib": ["dom", "esnext"],
|
|
7
|
+
"moduleResolution": "node",
|
|
8
|
+
"jsx": "react",
|
|
9
|
+
"sourceMap": true,
|
|
10
|
+
"declaration": true,
|
|
11
|
+
"esModuleInterop": true,
|
|
12
|
+
"noImplicitReturns": true,
|
|
13
|
+
"noImplicitThis": true,
|
|
14
|
+
"noImplicitAny": true,
|
|
15
|
+
"strictNullChecks": true,
|
|
16
|
+
"noUnusedLocals": true,
|
|
17
|
+
"noUnusedParameters": true,
|
|
18
|
+
"allowSyntheticDefaultImports": true
|
|
19
|
+
},
|
|
20
|
+
"include": ["src"],
|
|
21
|
+
"exclude": ["node_modules", "dist"]
|
|
22
|
+
}
|
package/update-dependancies.sh
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
# Update all dependencies
|
|
4
|
-
npm update
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Update all dependencies
|
|
4
|
+
npm update
|
package/dist/UI/FormField.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { PureComponent, ReactNode } from 'react';
|
|
2
|
-
import { IValidationError } from 'jattac.libs.web.validationhelper';
|
|
3
|
-
import React from 'react';
|
|
4
|
-
interface IFormFieldProps {
|
|
5
|
-
children: ReactNode;
|
|
6
|
-
label: ReactNode;
|
|
7
|
-
hint?: ReactNode;
|
|
8
|
-
id: string;
|
|
9
|
-
validationErrors?: IValidationError[];
|
|
10
|
-
optional?: boolean;
|
|
11
|
-
}
|
|
12
|
-
export default class FormField extends PureComponent<IFormFieldProps> {
|
|
13
|
-
private contentRef;
|
|
14
|
-
private get firstInputOfContentRef();
|
|
15
|
-
private get validationError();
|
|
16
|
-
private setKeyOfFirstInput;
|
|
17
|
-
componentDidMount(): void;
|
|
18
|
-
private get isRequired();
|
|
19
|
-
private get errorDisplay();
|
|
20
|
-
render(): React.JSX.Element;
|
|
21
|
-
}
|
|
22
|
-
export { type IFormFieldProps };
|