@jobber/components 4.26.8 → 4.26.9-JOB-75261.10

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,8 @@ 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) }, emptyState))) : (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 },
73
+ React__default["default"].createElement(Glimmer.Glimmer, null)))))))))));
69
74
  }
70
75
 
71
76
  function createTableSettings(data, columns, options) {
@@ -126,15 +131,14 @@ var styles$2 = {"pagination":"zn0VRVhObt0-","paginationInfo":"_1d4uh90gfSI-","pa
126
131
  styleInject_es.styleInject(css_248z$2);
127
132
 
128
133
  const defaultItemsPerPageOptions = ["10", "20", "30", "40", "50"];
129
- function Pagination({ table, itemsPerPage, totalItems, }) {
134
+ function Pagination({ table, itemsPerPage, totalItems, loading, }) {
130
135
  const { pageIndex, pageSize } = table.getState().pagination;
131
136
  const totalRows = totalItems;
132
137
  const firstPosition = pageIndex * pageSize + 1;
133
138
  const secondPosition = Math.min(totalRows, pageSize * (pageIndex + 1));
134
139
  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
140
  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 },
141
+ 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
142
  React__default["default"].createElement("div", { className: styles$2.paginationInfo }, `Showing ${firstPosition}-${secondPosition} of ${totalRows} items`),
139
143
  React__default["default"].createElement("div", { className: styles$2.paginationNav },
140
144
  React__default["default"].createElement("div", { className: styles$2.paginationSelect },
@@ -233,7 +237,7 @@ function Header({ table, stickyHeader, sorting, onRowClick, }) {
233
237
  }))))));
234
238
  }
235
239
 
236
- function DataTable({ data, columns, pagination, sorting, height, stickyHeader, pinFirstColumn, onRowClick, emptyState, }) {
240
+ function DataTable({ data, columns, pagination, sorting, height, stickyHeader, pinFirstColumn, onRowClick, emptyState, loading = false, }) {
237
241
  const [ref, { exactWidth }] = jobberHooks.useResizeObserver();
238
242
  const tableSettings = createTableSettings(data, columns, {
239
243
  pagination,
@@ -247,7 +251,7 @@ function DataTable({ data, columns, pagination, sorting, height, stickyHeader, p
247
251
  React__default["default"].createElement("div", { className: styles$3.tableContainer, style: { height }, ref: ref },
248
252
  React__default["default"].createElement("table", { className: tableClasses },
249
253
  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 }),
254
+ React__default["default"].createElement(Body, { table: table, onRowClick: onRowClick, height: height ? height * 0.7 : undefined, emptyState: emptyState, loading: loading }),
251
255
  table.getRowModel().rows.length &&
252
256
  exactWidth &&
253
257
  exactWidth > jobberHooks.Breakpoints.small ? (React__default["default"].createElement(Footer, { table: table, viewType: "desktop" })) : null)),
@@ -256,7 +260,7 @@ function DataTable({ data, columns, pagination, sorting, height, stickyHeader, p
256
260
  exactWidth <= jobberHooks.Breakpoints.small ? (React__default["default"].createElement(Footer, { table: table })) : null,
257
261
  pagination && (React__default["default"].createElement(Pagination, { table: table, itemsPerPage: pagination.itemsPerPage, totalItems: pagination.manualPagination
258
262
  ? pagination.totalItems
259
- : table.getCoreRowModel().rows.length }))));
263
+ : table.getCoreRowModel().rows.length, loading: loading }))));
260
264
  }
261
265
 
262
266
  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.10+493a1c3c",
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": "493a1c3c084f53371d31038edb0ccb07a2f57cce"
88
88
  }