@jobber/components 4.26.7 → 4.26.9-JOB-75261.9
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,7 +1,28 @@
|
|
|
1
1
|
import { ReactElement, ReactNode } from "react";
|
|
2
2
|
export type DataListItemType<T extends DataListObject[]> = Record<keyof T[number], ReactElement>;
|
|
3
|
-
export type DataListItemTypeFromHeader<
|
|
4
|
-
export
|
|
3
|
+
export type DataListItemTypeFromHeader<TData extends DataListObject, THeader extends DataListHeader<TData>> = Record<keyof THeader, ReactElement>;
|
|
4
|
+
export interface DataListObject {
|
|
5
|
+
/**
|
|
6
|
+
* The ID of the data.
|
|
7
|
+
*
|
|
8
|
+
* This is used as a key when looping through the data to prevent accidental
|
|
9
|
+
* rerender when the order of data changes.
|
|
10
|
+
*/
|
|
11
|
+
readonly id: string | number;
|
|
12
|
+
/**
|
|
13
|
+
* Styles the string as an emphasized text that differs from other keys.
|
|
14
|
+
*/
|
|
15
|
+
readonly label?: string | ReactElement;
|
|
16
|
+
/**
|
|
17
|
+
* Creates a styled list of tags that overflows and is truncated with a +N.
|
|
18
|
+
*/
|
|
19
|
+
readonly tags?: string[];
|
|
20
|
+
/**
|
|
21
|
+
* Support any key. The keys in this object are used as way to determine the
|
|
22
|
+
* keys you can use on the DataList header, layout, etc.
|
|
23
|
+
*/
|
|
24
|
+
readonly [key: string]: ReactNode | Date;
|
|
25
|
+
}
|
|
5
26
|
export type DataListHeader<T extends DataListObject> = {
|
|
6
27
|
readonly [K in keyof T]?: string;
|
|
7
28
|
};
|
|
@@ -9,18 +30,20 @@ export interface DataListProps<T extends DataListObject> {
|
|
|
9
30
|
readonly data: T[];
|
|
10
31
|
readonly headers: DataListHeader<T>;
|
|
11
32
|
/**
|
|
12
|
-
*
|
|
33
|
+
* Shows the loading state of the DataList.
|
|
34
|
+
*
|
|
13
35
|
* @default false
|
|
14
36
|
*/
|
|
15
37
|
readonly loading?: boolean;
|
|
16
38
|
/**
|
|
17
39
|
* Temporary prop for setting default state for if filters are applied
|
|
40
|
+
*
|
|
18
41
|
* @default false
|
|
19
42
|
*/
|
|
20
43
|
readonly filterApplied?: boolean;
|
|
21
44
|
readonly children: ReactElement | ReactElement[];
|
|
22
45
|
/**
|
|
23
|
-
* The title of the DataList
|
|
46
|
+
* The title of the DataList.
|
|
24
47
|
*/
|
|
25
48
|
readonly title?: string;
|
|
26
49
|
/**
|
|
@@ -12,7 +12,7 @@ export declare function generateListItemElements<T extends DataListObject>(data:
|
|
|
12
12
|
/**
|
|
13
13
|
* Generate the header elements with the default styling
|
|
14
14
|
*/
|
|
15
|
-
export declare function generateHeaderElements<T extends DataListObject>(headers: DataListHeader<T>): DataListItemTypeFromHeader<DataListHeader<T>> | undefined;
|
|
15
|
+
export declare function generateHeaderElements<T extends DataListObject>(headers: DataListHeader<T>): DataListItemTypeFromHeader<T, DataListHeader<T>> | undefined;
|
|
16
16
|
interface UseDataListEmptyStateProps {
|
|
17
17
|
readonly children?: ReactElement | ReactElement[];
|
|
18
18
|
readonly isFilterApplied: boolean;
|
package/dist/DataTable/Body.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ interface BodyProps<T> {
|
|
|
5
5
|
onRowClick?: (row: Row<T>) => void;
|
|
6
6
|
height?: number;
|
|
7
7
|
emptyState?: ReactNode | ReactNode[];
|
|
8
|
+
loading: boolean;
|
|
8
9
|
}
|
|
9
|
-
export declare function Body<T extends object>({ table, onRowClick, emptyState, }: BodyProps<T>): JSX.Element;
|
|
10
|
+
export declare function Body<T extends object>({ table, onRowClick, emptyState, loading, }: BodyProps<T>): JSX.Element;
|
|
10
11
|
export {};
|
|
@@ -49,5 +49,9 @@ export interface DataTableProps<T> {
|
|
|
49
49
|
* The elements to display when the data table is empty
|
|
50
50
|
*/
|
|
51
51
|
emptyState?: ReactNode | ReactNode[];
|
|
52
|
+
/**
|
|
53
|
+
* When true, shows the loading state of the DataTable
|
|
54
|
+
*/
|
|
55
|
+
loading?: boolean;
|
|
52
56
|
}
|
|
53
|
-
export declare function DataTable<T extends object>({ data, columns, pagination, sorting, height, stickyHeader, pinFirstColumn, onRowClick, emptyState, }: DataTableProps<T>): JSX.Element;
|
|
57
|
+
export declare function DataTable<T extends object>({ data, columns, pagination, sorting, height, stickyHeader, pinFirstColumn, onRowClick, emptyState, loading, }: DataTableProps<T>): JSX.Element;
|
|
@@ -4,6 +4,7 @@ interface PaginationProps<T> {
|
|
|
4
4
|
table: Table<T>;
|
|
5
5
|
itemsPerPage?: number[];
|
|
6
6
|
totalItems: number;
|
|
7
|
+
loading: boolean;
|
|
7
8
|
}
|
|
8
|
-
export declare function Pagination<T extends object>({ table, itemsPerPage, totalItems, }: PaginationProps<T>): JSX.Element;
|
|
9
|
+
export declare function Pagination<T extends object>({ table, itemsPerPage, totalItems, loading, }: PaginationProps<T>): JSX.Element;
|
|
9
10
|
export {};
|
package/dist/DataTable/index.js
CHANGED
|
@@ -7,10 +7,12 @@ var classnames = require('classnames');
|
|
|
7
7
|
var React = require('react');
|
|
8
8
|
var jobberHooks = require('@jobber/hooks/useResizeObserver');
|
|
9
9
|
var styleInject_es = require('../style-inject.es-9d2f5f4e.js');
|
|
10
|
+
var Glimmer = require('../Glimmer-a14ad7fd.js');
|
|
10
11
|
var tslib_es6 = require('../tslib.es6-5b8768b7.js');
|
|
11
12
|
var Option = require('../Option-63267b27.js');
|
|
12
13
|
var Button = require('../Button-7698424c.js');
|
|
13
14
|
var Text = require('../Text-e7ed0974.js');
|
|
15
|
+
require('../Content-a6590328.js');
|
|
14
16
|
require('../FormField-0f880b07.js');
|
|
15
17
|
require('uuid');
|
|
16
18
|
require('react-hook-form');
|
|
@@ -50,14 +52,16 @@ var css_248z$3 = ".m5A5oeRFaMs- {\n position: relative;\n border: calc(16px /
|
|
|
50
52
|
var styles$3 = {"dataTableContainer":"m5A5oeRFaMs-","tableContainer":"cY-5BrIIUg8-","table":"y8xnHe7fwrI-","pinFirstColumn":"t8QYvdtkQXQ-","stickyHeader":"Y21JuHX6fhk-","pinFirstHeaderSortable":"PJEX8dlqCMA-","sortableColumn":"_9ps4aWGs8W0-","clickableRow":"_59XEEB8l5pI-","emptyState":"a2BGGBkY5J8-"};
|
|
51
53
|
styleInject_es.styleInject(css_248z$3);
|
|
52
54
|
|
|
53
|
-
function Body({ table, onRowClick, emptyState, }) {
|
|
55
|
+
function Body({ table, onRowClick, emptyState, loading, }) {
|
|
54
56
|
const bodyRowClasses = classnames__default["default"]({ [styles$3.clickableRow]: !!onRowClick });
|
|
55
57
|
const handleRowClick = React.useCallback((row) => () => {
|
|
56
58
|
if (onRowClick == undefined)
|
|
57
59
|
return;
|
|
58
60
|
onRowClick(row);
|
|
59
61
|
}, [onRowClick]);
|
|
60
|
-
|
|
62
|
+
const loaderRows = table.getState().pagination.pageSize;
|
|
63
|
+
const loaderColumns = table.getAllColumns().length;
|
|
64
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null, !loading ? (table.getRowModel().rows.length ? (React__default["default"].createElement("tbody", null, table.getRowModel().rows.map(row => {
|
|
61
65
|
return (React__default["default"].createElement("tr", { key: row.id, onClick: handleRowClick(row), className: bodyRowClasses }, row.getVisibleCells().map(cell => {
|
|
62
66
|
return (React__default["default"].createElement("td", { key: cell.id, style: {
|
|
63
67
|
width: cell.column.getSize(),
|
|
@@ -65,7 +69,13 @@ function Body({ table, onRowClick, emptyState, }) {
|
|
|
65
69
|
maxWidth: cell.column.columnDef.maxSize,
|
|
66
70
|
} }, reactTable.flexRender(cell.column.columnDef.cell, cell.getContext())));
|
|
67
71
|
})));
|
|
68
|
-
}))) : (React__default["default"].createElement("div", { className: classnames__default["default"](styles$3.emptyState) },
|
|
72
|
+
}))) : (React__default["default"].createElement("div", { className: classnames__default["default"](styles$3.emptyState) },
|
|
73
|
+
emptyState,
|
|
74
|
+
" ",
|
|
75
|
+
React__default["default"].createElement("div", null,
|
|
76
|
+
"is it loading? ",
|
|
77
|
+
loading)))) : (React__default["default"].createElement("tbody", null, Array.from(Array(loaderRows).keys()).map(row => (React__default["default"].createElement("tr", { key: row }, Array.from(Array(loaderColumns).keys()).map(arr => (React__default["default"].createElement("td", { key: arr },
|
|
78
|
+
React__default["default"].createElement(Glimmer.Glimmer, null)))))))))));
|
|
69
79
|
}
|
|
70
80
|
|
|
71
81
|
function createTableSettings(data, columns, options) {
|
|
@@ -126,15 +136,14 @@ var styles$2 = {"pagination":"zn0VRVhObt0-","paginationInfo":"_1d4uh90gfSI-","pa
|
|
|
126
136
|
styleInject_es.styleInject(css_248z$2);
|
|
127
137
|
|
|
128
138
|
const defaultItemsPerPageOptions = ["10", "20", "30", "40", "50"];
|
|
129
|
-
function Pagination({ table, itemsPerPage, totalItems, }) {
|
|
139
|
+
function Pagination({ table, itemsPerPage, totalItems, loading, }) {
|
|
130
140
|
const { pageIndex, pageSize } = table.getState().pagination;
|
|
131
141
|
const totalRows = totalItems;
|
|
132
142
|
const firstPosition = pageIndex * pageSize + 1;
|
|
133
143
|
const secondPosition = Math.min(totalRows, pageSize * (pageIndex + 1));
|
|
134
144
|
const itemsPerPageOptions = React.useMemo(() => { var _a; return (_a = itemsPerPage === null || itemsPerPage === void 0 ? void 0 : itemsPerPage.map(item => String(item))) !== null && _a !== void 0 ? _a : defaultItemsPerPageOptions; }, [itemsPerPage]);
|
|
135
145
|
return secondPosition <= 0 ? (React__default["default"].createElement("div", { className: styles$2.pagination },
|
|
136
|
-
React__default["default"].createElement("div", { className: styles$2.paginationInfo },
|
|
137
|
-
React__default["default"].createElement(Text.Text, null, "No items")))) : (React__default["default"].createElement("div", { className: styles$2.pagination },
|
|
146
|
+
React__default["default"].createElement("div", { className: styles$2.paginationInfo }, !loading ? React__default["default"].createElement(Text.Text, null, "No items") : React__default["default"].createElement(Glimmer.Glimmer, { width: 200 })))) : (React__default["default"].createElement("div", { className: styles$2.pagination },
|
|
138
147
|
React__default["default"].createElement("div", { className: styles$2.paginationInfo }, `Showing ${firstPosition}-${secondPosition} of ${totalRows} items`),
|
|
139
148
|
React__default["default"].createElement("div", { className: styles$2.paginationNav },
|
|
140
149
|
React__default["default"].createElement("div", { className: styles$2.paginationSelect },
|
|
@@ -233,7 +242,7 @@ function Header({ table, stickyHeader, sorting, onRowClick, }) {
|
|
|
233
242
|
}))))));
|
|
234
243
|
}
|
|
235
244
|
|
|
236
|
-
function DataTable({ data, columns, pagination, sorting, height, stickyHeader, pinFirstColumn, onRowClick, emptyState, }) {
|
|
245
|
+
function DataTable({ data, columns, pagination, sorting, height, stickyHeader, pinFirstColumn, onRowClick, emptyState, loading = false, }) {
|
|
237
246
|
const [ref, { exactWidth }] = jobberHooks.useResizeObserver();
|
|
238
247
|
const tableSettings = createTableSettings(data, columns, {
|
|
239
248
|
pagination,
|
|
@@ -247,7 +256,7 @@ function DataTable({ data, columns, pagination, sorting, height, stickyHeader, p
|
|
|
247
256
|
React__default["default"].createElement("div", { className: styles$3.tableContainer, style: { height }, ref: ref },
|
|
248
257
|
React__default["default"].createElement("table", { className: tableClasses },
|
|
249
258
|
React__default["default"].createElement(Header, { table: table, sorting: sorting, onRowClick: onRowClick, stickyHeader: stickyHeader }),
|
|
250
|
-
React__default["default"].createElement(Body, { table: table, onRowClick: onRowClick, height: height ? height * 0.7 : undefined, emptyState: emptyState }),
|
|
259
|
+
React__default["default"].createElement(Body, { table: table, onRowClick: onRowClick, height: height ? height * 0.7 : undefined, emptyState: emptyState, loading: loading }),
|
|
251
260
|
table.getRowModel().rows.length &&
|
|
252
261
|
exactWidth &&
|
|
253
262
|
exactWidth > jobberHooks.Breakpoints.small ? (React__default["default"].createElement(Footer, { table: table, viewType: "desktop" })) : null)),
|
|
@@ -256,7 +265,7 @@ function DataTable({ data, columns, pagination, sorting, height, stickyHeader, p
|
|
|
256
265
|
exactWidth <= jobberHooks.Breakpoints.small ? (React__default["default"].createElement(Footer, { table: table })) : null,
|
|
257
266
|
pagination && (React__default["default"].createElement(Pagination, { table: table, itemsPerPage: pagination.itemsPerPage, totalItems: pagination.manualPagination
|
|
258
267
|
? pagination.totalItems
|
|
259
|
-
: table.getCoreRowModel().rows.length }))));
|
|
268
|
+
: table.getCoreRowModel().rows.length, loading: loading }))));
|
|
260
269
|
}
|
|
261
270
|
|
|
262
271
|
const mockContainerWidth = (exactWidth) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jobber/components",
|
|
3
|
-
"version": "4.26.
|
|
3
|
+
"version": "4.26.9-JOB-75261.9+e2544f82",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
],
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@jobber/design": "^0.44.4",
|
|
23
|
-
"@jobber/formatters": "
|
|
23
|
+
"@jobber/formatters": "^0.2.2",
|
|
24
24
|
"@jobber/hooks": "^2.1.5",
|
|
25
25
|
"@popperjs/core": "^2.0.6",
|
|
26
26
|
"@std-proposal/temporal": "0.0.1",
|
|
@@ -84,5 +84,5 @@
|
|
|
84
84
|
"> 1%",
|
|
85
85
|
"IE 10"
|
|
86
86
|
],
|
|
87
|
-
"gitHead": "
|
|
87
|
+
"gitHead": "e2544f821998f10cae184786edce75cad1b74c28"
|
|
88
88
|
}
|