@jobber/components 4.26.8 → 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.
@@ -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 {};
@@ -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
- return table.getRowModel().rows.length ? (React__default["default"].createElement("tbody", null, table.getRowModel().rows.map(row => {
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) }, 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.8",
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": "535d5a01bbcd69430f027660cb2e2b5de058a31e"
87
+ "gitHead": "e2544f821998f10cae184786edce75cad1b74c28"
88
88
  }