@jobber/components 2.86.2 → 2.87.0
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/CHANGELOG.md +11 -0
- package/DataTable.d.ts +1 -0
- package/DataTable.js +17 -0
- package/dist/DataTable/Body.d.ts +7 -0
- package/dist/DataTable/DataTable.d.ts +48 -0
- package/dist/DataTable/Footer.d.ts +8 -0
- package/dist/DataTable/Header.d.ts +10 -0
- package/dist/DataTable/createTableSettings.d.ts +6 -0
- package/dist/DataTable/index.d.ts +3 -0
- package/dist/DataTable/index.js +190 -0
- package/dist/DataTable/test-utilities/index.d.ts +1 -0
- package/dist/DataTable/test-utilities/mocks.d.ts +11 -0
- package/dist/DataTable/types.d.ts +83 -0
- package/dist/Option-201e55a7.js +21 -0
- package/dist/Select/index.js +6 -16
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,17 @@ menu: Changelog
|
|
|
8
8
|
All notable changes to this project will be documented in this file.
|
|
9
9
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
10
10
|
|
|
11
|
+
# [2.87.0](https://github.com/GetJobber/atlantis/compare/@jobber/components@2.86.2...@jobber/components@2.87.0) (2022-11-02)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* **components:** Data table component ([#925](https://github.com/GetJobber/atlantis/issues/925)) ([777f4dc](https://github.com/GetJobber/atlantis/commit/777f4dce695e0c28880db77483e6d77903b7b484))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
11
22
|
## [2.86.2](https://github.com/GetJobber/atlantis/compare/@jobber/components@2.86.1...@jobber/components@2.86.2) (2022-11-01)
|
|
12
23
|
|
|
13
24
|
**Note:** Version bump only for package @jobber/components
|
package/DataTable.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./dist/DataTable";
|
package/DataTable.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true,
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
var DataTable = require("./dist/DataTable");
|
|
8
|
+
|
|
9
|
+
Object.keys(DataTable).forEach(function(key) {
|
|
10
|
+
if (key === "default" || key === "__esModule") return;
|
|
11
|
+
Object.defineProperty(exports, key, {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
get: function get() {
|
|
14
|
+
return DataTable[key];
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
});
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ColumnDef, Row } from "@tanstack/react-table";
|
|
2
|
+
import { Pagination, Sorting } from "./types";
|
|
3
|
+
export interface DataTableProps<T> {
|
|
4
|
+
/**
|
|
5
|
+
* The actual data that will be used for the table.
|
|
6
|
+
* Typescript should infer T from typeof data.
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
data: T[];
|
|
10
|
+
/**
|
|
11
|
+
* Should follow the @tanstack/react-table [ColumnDef](https://tanstack.com/table/v8/docs/guide/column-defs).
|
|
12
|
+
* [createColumnHelper](https://tanstack.com/table/v8/docs/guide/column-defs#column-helpers) is also exposed to make it more convenient
|
|
13
|
+
* to create columns.
|
|
14
|
+
*/
|
|
15
|
+
columns: ColumnDef<T>[];
|
|
16
|
+
/**
|
|
17
|
+
* Enables pagination, mostly follows:
|
|
18
|
+
* https://tanstack.com/table/v8/docs/api/features/pagination
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
21
|
+
pagination?: Pagination;
|
|
22
|
+
/**
|
|
23
|
+
* Enables sorting, mostly follows:
|
|
24
|
+
* https://tanstack.com/table/v8/docs/api/features/sorting#table-options
|
|
25
|
+
*
|
|
26
|
+
*/
|
|
27
|
+
sorting?: Sorting;
|
|
28
|
+
/**
|
|
29
|
+
* This will force the table to have the specified hight
|
|
30
|
+
*
|
|
31
|
+
*/
|
|
32
|
+
height?: number;
|
|
33
|
+
/**
|
|
34
|
+
* When set to true makes the header sticky while scrolling vertically
|
|
35
|
+
*
|
|
36
|
+
*/
|
|
37
|
+
stickyHeader?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Pins the firstColumn when scrolling horizontally
|
|
40
|
+
*
|
|
41
|
+
*/
|
|
42
|
+
pinFirstColumn?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Enables row click action. The provided callback will be executed when the row is clicked.
|
|
45
|
+
*/
|
|
46
|
+
onRowClick?: (row: Row<T>) => void;
|
|
47
|
+
}
|
|
48
|
+
export declare function DataTable<T extends object>({ data, columns, pagination, sorting, height, stickyHeader, pinFirstColumn, onRowClick, }: DataTableProps<T>): JSX.Element;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Table } from "@tanstack/react-table";
|
|
2
|
+
interface FooterProps<T> {
|
|
3
|
+
table: Table<T>;
|
|
4
|
+
itemsPerPage?: number[];
|
|
5
|
+
totalItems: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function Footer<T extends object>({ table, itemsPerPage, totalItems, }: FooterProps<T>): JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Row, Table } from "@tanstack/react-table";
|
|
2
|
+
import { Sorting } from "./types";
|
|
3
|
+
interface HeaderProps<T> {
|
|
4
|
+
table: Table<T>;
|
|
5
|
+
stickyHeader?: boolean;
|
|
6
|
+
sorting?: Sorting;
|
|
7
|
+
onRowClick?: (row: Row<T>) => void;
|
|
8
|
+
}
|
|
9
|
+
export declare function Header<T extends object>({ table, stickyHeader, sorting, onRowClick, }: HeaderProps<T>): JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var reactTable = require('@tanstack/react-table');
|
|
6
|
+
var classnames = require('classnames');
|
|
7
|
+
var React = require('react');
|
|
8
|
+
var styleInject_es = require('../style-inject.es-dcee06b6.js');
|
|
9
|
+
var tslib_es6 = require('../tslib.es6-5b50eb8e.js');
|
|
10
|
+
var Option = require('../Option-201e55a7.js');
|
|
11
|
+
var Button = require('../Button-5b2f1636.js');
|
|
12
|
+
var Icon = require('../Icon-d5ad1a6d.js');
|
|
13
|
+
require('../FormField-a92c7bac.js');
|
|
14
|
+
require('uuid');
|
|
15
|
+
require('react-hook-form');
|
|
16
|
+
require('../Text-9bc093e9.js');
|
|
17
|
+
require('../Typography-7e542a72.js');
|
|
18
|
+
require('../InputValidation-24d3621a.js');
|
|
19
|
+
require('framer-motion');
|
|
20
|
+
require('../Spinner-18d3dee6.js');
|
|
21
|
+
require('react-router-dom');
|
|
22
|
+
require('@jobber/design');
|
|
23
|
+
|
|
24
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
25
|
+
|
|
26
|
+
var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
|
|
27
|
+
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
28
|
+
|
|
29
|
+
var css$1 = "._1gVnBnwO8rEyN5yXaSAnJz {\n border: var(--border-base) solid var(--color-border);\n border-radius: var(--radius-base);\n}\n\n._2FsiaQmYMKjm0oAa_Dm7Jv {\n overflow: auto;\n}\n\n._2EflglZd2SRwkv61KFJrg9 {\n width: 100%;\n border-collapse: collapse;\n text-align: left;\n}\n\n._2EflglZd2SRwkv61KFJrg9 thead tr th {\n padding: var(--space-base);\n border-bottom: var(--border-base) solid var(--color-border);\n color: var(--color-heading);\n white-space: nowrap;\n}\n\n._2EflglZd2SRwkv61KFJrg9 thead tr th :first-child {\n display: -ms-flexbox;\n display: flex;\n}\n\n._2EflglZd2SRwkv61KFJrg9 tbody tr {\n border-bottom: var(--border-base) solid var(--color-border);\n}\n\n._2EflglZd2SRwkv61KFJrg9 tbody tr:last-child {\n border-bottom: none;\n}\n\n._2EflglZd2SRwkv61KFJrg9 tbody tr td {\n padding: var(--space-base);\n}\n\n.QRm47JXl1pWi9jKv7PNPG thead tr th:first-child,\n.QRm47JXl1pWi9jKv7PNPG tbody tr td:first-child {\n position: sticky;\n left: 0;\n z-index: 1;\n height: calc(var(--space-largest) + var(--space-smaller));\n background-color: var(--color-white);\n}\n\n.QRm47JXl1pWi9jKv7PNPG th:first-child::after,\n.QRm47JXl1pWi9jKv7PNPG td:first-child::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n right: calc(-1 * var(--space-small));\n width: var(--space-small);\n height: 100%;\n background: linear-gradient(\n 90deg,\n rgba(var(--color-black--rgb), 0.1) 0%,\n rgba(var(--color-black--rgb), 0) 80%\n );\n}\n\n._3VxR0m_2LtggJeSToEDE2y {\n position: sticky;\n top: 0;\n right: 0;\n left: 0;\n z-index: 2;\n box-shadow: var(--shadow-base);\n background-color: var(--color-white);\n}\n\n._1RROVWbMjf1ZfuVpquC4OS:first-child:hover {\n background: var(--color-surface--hover);\n cursor: pointer;\n}\n\n._2uM74VHCeNJuZjyD_SPXR3:hover {\n background: var(--color-surface--hover);\n cursor: pointer;\n}\n\n._3P5HGvBjzojCSGgtBjPjJi:hover,\n._3P5HGvBjzojCSGgtBjPjJi:hover :first-child {\n background: var(--color-surface--background);\n cursor: pointer;\n}\n";
|
|
30
|
+
var styles$1 = {"dataTableContainer":"_1gVnBnwO8rEyN5yXaSAnJz","tableContainer":"_2FsiaQmYMKjm0oAa_Dm7Jv","table":"_2EflglZd2SRwkv61KFJrg9","pinFirstColumn":"QRm47JXl1pWi9jKv7PNPG","stickyHeader":"_3VxR0m_2LtggJeSToEDE2y","pinFirstHeaderSortable":"_1RROVWbMjf1ZfuVpquC4OS","sortableColumn":"_2uM74VHCeNJuZjyD_SPXR3","clickableRow":"_3P5HGvBjzojCSGgtBjPjJi"};
|
|
31
|
+
styleInject_es.styleInject(css$1);
|
|
32
|
+
|
|
33
|
+
function Body(_a) {
|
|
34
|
+
var _b;
|
|
35
|
+
var table = _a.table, onRowClick = _a.onRowClick;
|
|
36
|
+
var bodyRowClasses = classnames__default["default"]((_b = {}, _b[styles$1.clickableRow] = !!onRowClick, _b));
|
|
37
|
+
var handleRowClick = React.useCallback(function (row) { return function () {
|
|
38
|
+
if (onRowClick == undefined)
|
|
39
|
+
return;
|
|
40
|
+
onRowClick(row);
|
|
41
|
+
}; }, [onRowClick]);
|
|
42
|
+
return (React__default["default"].createElement("tbody", null, table.getRowModel().rows.map(function (row) {
|
|
43
|
+
return (React__default["default"].createElement("tr", { key: row.id, onClick: handleRowClick(row), className: bodyRowClasses }, row.getVisibleCells().map(function (cell) {
|
|
44
|
+
return (React__default["default"].createElement("td", { key: cell.id }, reactTable.flexRender(cell.column.columnDef.cell, cell.getContext())));
|
|
45
|
+
})));
|
|
46
|
+
})));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function createTableSettings(data, columns, options) {
|
|
50
|
+
var _a;
|
|
51
|
+
var _b = getPaginationSettings(options === null || options === void 0 ? void 0 : options.pagination), paginationState = _b.state, restPaginationSettings = tslib_es6.__rest(_b, ["state"]);
|
|
52
|
+
var _c = getSortingSettings(options === null || options === void 0 ? void 0 : options.sorting), sortingState = _c.state, restSortingSettings = tslib_es6.__rest(_c, ["state"]);
|
|
53
|
+
var initialPatinationState;
|
|
54
|
+
if ((_a = options === null || options === void 0 ? void 0 : options.pagination) === null || _a === void 0 ? void 0 : _a.itemsPerPage) {
|
|
55
|
+
initialPatinationState = {
|
|
56
|
+
pageIndex: 0,
|
|
57
|
+
pageSize: options.pagination.itemsPerPage[0],
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
var tableSettings = tslib_es6.__assign(tslib_es6.__assign(tslib_es6.__assign({ data: data,
|
|
61
|
+
columns: columns, state: tslib_es6.__assign(tslib_es6.__assign({}, paginationState), sortingState), getCoreRowModel: reactTable.getCoreRowModel() }, restPaginationSettings), restSortingSettings), { initialState: {
|
|
62
|
+
pagination: initialPatinationState,
|
|
63
|
+
} });
|
|
64
|
+
return tableSettings;
|
|
65
|
+
}
|
|
66
|
+
function getPaginationSettings(pagination) {
|
|
67
|
+
var paginationSettings = {};
|
|
68
|
+
if (!pagination) {
|
|
69
|
+
return paginationSettings;
|
|
70
|
+
}
|
|
71
|
+
var manualPagination = pagination.manualPagination;
|
|
72
|
+
paginationSettings.manualPagination = manualPagination;
|
|
73
|
+
if (manualPagination) {
|
|
74
|
+
var state = pagination.state, pageCount = pagination.pageCount, onPaginationChange = pagination.onPaginationChange;
|
|
75
|
+
paginationSettings.state = { pagination: state };
|
|
76
|
+
paginationSettings.pageCount = pageCount;
|
|
77
|
+
paginationSettings.onPaginationChange = onPaginationChange;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
paginationSettings.getPaginationRowModel = reactTable.getPaginationRowModel();
|
|
81
|
+
}
|
|
82
|
+
return paginationSettings;
|
|
83
|
+
}
|
|
84
|
+
function getSortingSettings(sorting) {
|
|
85
|
+
var sortingSettings = {};
|
|
86
|
+
if (!sorting)
|
|
87
|
+
return sortingSettings;
|
|
88
|
+
var manualSorting = sorting.manualSorting;
|
|
89
|
+
sortingSettings.manualSorting = manualSorting;
|
|
90
|
+
if (manualSorting) {
|
|
91
|
+
var onSortingChange = sorting.onSortingChange, state = sorting.state, enableSortingRemoval = sorting.enableSortingRemoval;
|
|
92
|
+
sortingSettings.state = { sorting: state };
|
|
93
|
+
sortingSettings.onSortingChange = onSortingChange;
|
|
94
|
+
sortingSettings.enableSortingRemoval = enableSortingRemoval !== null && enableSortingRemoval !== void 0 ? enableSortingRemoval : true;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
sortingSettings.getSortedRowModel = reactTable.getSortedRowModel();
|
|
98
|
+
}
|
|
99
|
+
return sortingSettings;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
var css = ".xOgYLdnq9RzYdm2Qq5iqC {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: justify;\n justify-content: space-between;\n min-height: calc(var(--space-smaller) + var(--space-largest));\n padding: var(--space-small) var(--space-base);\n border-top: var(--border-base) solid var(--color-border);\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n grid-gap: var(--space-small);\n grid-gap: var(--space-small);\n gap: var(--space-small);\n}\n\n._5tzeLx9ms3KlKYLww3zz2 {\n -ms-flex: 9999;\n flex: 9999;\n white-space: nowrap;\n}\n\n.A-j9vM1Jh_lwiUvFWTrJD {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: justify;\n justify-content: space-between;\n grid-gap: var(--space-base);\n grid-gap: var(--space-base);\n gap: var(--space-base);\n -ms-flex: 1;\n flex: 1;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n min-width: -webkit-fit-content;\n min-width: -moz-fit-content;\n min-width: fit-content;\n}\n\n._1NDStXNYtxDXtO-D6fhMq7 {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n grid-gap: var(--space-small);\n grid-gap: var(--space-small);\n gap: var(--space-small);\n min-width: calc(3 * var(--space-largest) + var(--space-small));\n}\n\n._2jptOEeMFsy02Ak4RJ2Txr {\n min-width: calc(var(--space-extravagant) + var(--space-smaller));\n}\n\n._1hior9YLNayoFJtpVbcrzk {\n display: -ms-flexbox;\n display: flex;\n grid-gap: var(--space-large);\n grid-gap: var(--space-large);\n gap: var(--space-large);\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center\n}\n\n@media (max-width: 639px) {\n\n._1hior9YLNayoFJtpVbcrzk {\n grid-gap: var(--space-base);\n grid-gap: var(--space-base);\n gap: var(--space-base)\n}\n }\n\n@media (max-width: 639px) {\n\n._1hior9YLNayoFJtpVbcrzk {\n grid-gap: var(--space-base);\n grid-gap: var(--space-base);\n gap: var(--space-base)\n}\n }\n\n@media (--handhelds) {\n\n._1hior9YLNayoFJtpVbcrzk {\n grid-gap: var(--space-base);\n grid-gap: var(--space-base);\n gap: var(--space-base)\n}\n }\n";
|
|
103
|
+
var styles = {"pagination":"xOgYLdnq9RzYdm2Qq5iqC","paginationInfo":"_5tzeLx9ms3KlKYLww3zz2","paginationNav":"A-j9vM1Jh_lwiUvFWTrJD","paginationSelect":"_1NDStXNYtxDXtO-D6fhMq7","paginationSelectLabel":"_2jptOEeMFsy02Ak4RJ2Txr","paginationButtons":"_1hior9YLNayoFJtpVbcrzk"};
|
|
104
|
+
styleInject_es.styleInject(css);
|
|
105
|
+
|
|
106
|
+
function Footer(_a) {
|
|
107
|
+
var table = _a.table, itemsPerPage = _a.itemsPerPage, totalItems = _a.totalItems;
|
|
108
|
+
var _b = table.getState().pagination, pageIndex = _b.pageIndex, pageSize = _b.pageSize;
|
|
109
|
+
var totalRows = totalItems;
|
|
110
|
+
var firstPosition = pageIndex * pageSize + 1;
|
|
111
|
+
var secondPosition = Math.min(totalRows, pageSize * (pageIndex + 1));
|
|
112
|
+
var defaultItemsPerPageOptions = React.useMemo(function () { return ["10", "20", "30", "40", "50"]; }, []);
|
|
113
|
+
var itemsPerPageOptions = React.useMemo(function () { var _a; return (_a = itemsPerPage === null || itemsPerPage === void 0 ? void 0 : itemsPerPage.map(function (item) { return String(item); })) !== null && _a !== void 0 ? _a : defaultItemsPerPageOptions; }, [itemsPerPage]);
|
|
114
|
+
return (React__default["default"].createElement("div", { className: styles.pagination },
|
|
115
|
+
React__default["default"].createElement("div", { className: styles.paginationInfo }, "Showing " + firstPosition + "-" + secondPosition + " of " + totalRows + " items"),
|
|
116
|
+
React__default["default"].createElement("div", { className: styles.paginationNav },
|
|
117
|
+
React__default["default"].createElement("div", { className: styles.paginationSelect },
|
|
118
|
+
React__default["default"].createElement(Option.Select, { value: table.getState().pagination.pageSize, onChange: function (value) {
|
|
119
|
+
table.setPageSize(Number(value));
|
|
120
|
+
} }, itemsPerPageOptions.map(function (numOfPages) { return (React__default["default"].createElement(Option.SelectOption, { key: numOfPages, value: numOfPages }, numOfPages)); })),
|
|
121
|
+
React__default["default"].createElement("span", { className: styles.paginationSelectLabel }, "per page")),
|
|
122
|
+
React__default["default"].createElement("div", { className: styles.paginationButtons },
|
|
123
|
+
React__default["default"].createElement(Button.Button, { type: "secondary", variation: "subtle", icon: "arrowLeft", ariaLabel: "arrowLeft", onClick: function () { return table.previousPage(); }, disabled: !table.getCanPreviousPage() }),
|
|
124
|
+
React__default["default"].createElement(Button.Button, { type: "secondary", variation: "subtle", icon: "arrowRight", ariaLabel: "arrowRight", onClick: function () { return table.nextPage(); }, disabled: !table.getCanNextPage() })))));
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function Header(_a) {
|
|
128
|
+
var _b;
|
|
129
|
+
var table = _a.table, stickyHeader = _a.stickyHeader, sorting = _a.sorting, onRowClick = _a.onRowClick;
|
|
130
|
+
var stickyClass = classnames__default["default"]((_b = {}, _b[styles$1.stickyHeader] = stickyHeader, _b));
|
|
131
|
+
return (React__default["default"].createElement("thead", { className: stickyClass }, table.getHeaderGroups().map(function (headerGroup) { return (React__default["default"].createElement("tr", { key: headerGroup.id }, headerGroup.headers.map(function (header) {
|
|
132
|
+
var _a;
|
|
133
|
+
var _b;
|
|
134
|
+
return (React__default["default"].createElement("th", { key: header.id, colSpan: header.colSpan, className: sorting && header.column.getCanSort()
|
|
135
|
+
? classnames__default["default"](styles$1.sortableColumn, (_a = {},
|
|
136
|
+
_a[styles$1.pinFirstHeaderSortable] = !!onRowClick,
|
|
137
|
+
_a))
|
|
138
|
+
: "", onClick: sorting ? header.column.getToggleSortingHandler() : undefined }, header.isPlaceholder ? null : (React__default["default"].createElement("div", null,
|
|
139
|
+
reactTable.flexRender(header.column.columnDef.header, header.getContext()), (_b = {
|
|
140
|
+
asc: React__default["default"].createElement(Icon.Icon, { name: "longArrowUp", color: "green" }),
|
|
141
|
+
desc: React__default["default"].createElement(Icon.Icon, { name: "longArrowDown", color: "green" }),
|
|
142
|
+
}[header.column.getIsSorted()]) !== null && _b !== void 0 ? _b : (React__default["default"].createElement("svg", { style: {
|
|
143
|
+
width: "var(--space-large)",
|
|
144
|
+
height: "var(--space-large)",
|
|
145
|
+
} }))))));
|
|
146
|
+
}))); })));
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function DataTable(_a) {
|
|
150
|
+
var _b;
|
|
151
|
+
var data = _a.data, columns = _a.columns, pagination = _a.pagination, sorting = _a.sorting, height = _a.height, stickyHeader = _a.stickyHeader, pinFirstColumn = _a.pinFirstColumn, onRowClick = _a.onRowClick;
|
|
152
|
+
var tableSettings = createTableSettings(data, columns, {
|
|
153
|
+
pagination: pagination,
|
|
154
|
+
sorting: sorting,
|
|
155
|
+
});
|
|
156
|
+
var tableClasses = classnames__default["default"](styles$1.table, (_b = {},
|
|
157
|
+
_b[styles$1.pinFirstColumn] = pinFirstColumn,
|
|
158
|
+
_b));
|
|
159
|
+
var table = reactTable.useReactTable(tableSettings);
|
|
160
|
+
return (React__default["default"].createElement("div", { className: styles$1.dataTableContainer },
|
|
161
|
+
React__default["default"].createElement("div", { className: styles$1.tableContainer, style: { height: height } },
|
|
162
|
+
React__default["default"].createElement("table", { className: tableClasses },
|
|
163
|
+
React__default["default"].createElement(Header, { table: table, sorting: sorting, onRowClick: onRowClick, stickyHeader: stickyHeader }),
|
|
164
|
+
React__default["default"].createElement(Body, { table: table, onRowClick: onRowClick }))),
|
|
165
|
+
pagination && (React__default["default"].createElement(Footer, { table: table, itemsPerPage: pagination.itemsPerPage, totalItems: pagination.manualPagination
|
|
166
|
+
? pagination.totalItems
|
|
167
|
+
: table.getCoreRowModel().rows.length }))));
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
Object.defineProperty(exports, 'ColumnDef', {
|
|
171
|
+
enumerable: true,
|
|
172
|
+
get: function () { return reactTable.ColumnDef; }
|
|
173
|
+
});
|
|
174
|
+
Object.defineProperty(exports, 'PaginationState', {
|
|
175
|
+
enumerable: true,
|
|
176
|
+
get: function () { return reactTable.PaginationState; }
|
|
177
|
+
});
|
|
178
|
+
Object.defineProperty(exports, 'Row', {
|
|
179
|
+
enumerable: true,
|
|
180
|
+
get: function () { return reactTable.Row; }
|
|
181
|
+
});
|
|
182
|
+
Object.defineProperty(exports, 'SortingState', {
|
|
183
|
+
enumerable: true,
|
|
184
|
+
get: function () { return reactTable.SortingState; }
|
|
185
|
+
});
|
|
186
|
+
Object.defineProperty(exports, 'createColumnHelper', {
|
|
187
|
+
enumerable: true,
|
|
188
|
+
get: function () { return reactTable.createColumnHelper; }
|
|
189
|
+
});
|
|
190
|
+
exports.DataTable = DataTable;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./mocks";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ColumnDef } from "@tanstack/react-table";
|
|
2
|
+
interface Data {
|
|
3
|
+
name: string;
|
|
4
|
+
house: string;
|
|
5
|
+
region: string;
|
|
6
|
+
sigil: string;
|
|
7
|
+
isAlive: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const data: Data[];
|
|
10
|
+
export declare const columns: ColumnDef<Data>[];
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { PaginationState, SortingState } from "@tanstack/react-table";
|
|
2
|
+
import { Dispatch, SetStateAction } from "react";
|
|
3
|
+
export interface ManualPagination {
|
|
4
|
+
/**
|
|
5
|
+
* When manually controlled represents the current pagination state of the table.
|
|
6
|
+
*
|
|
7
|
+
* @type {PaginationState}
|
|
8
|
+
*/
|
|
9
|
+
state: PaginationState;
|
|
10
|
+
/**
|
|
11
|
+
* When manually controlling pagination, you should supply a total pageCount value to the table if you know it.
|
|
12
|
+
* If you do not know how many pages there are, you can set this to -1. (Or should we error?)
|
|
13
|
+
*
|
|
14
|
+
* @type {number}
|
|
15
|
+
*/
|
|
16
|
+
pageCount: number;
|
|
17
|
+
/**
|
|
18
|
+
* If this function is provided, it will be called when the pagination state changes and you will be expected
|
|
19
|
+
* to manage the state yourself. You can pass the managed state back to the table via the state option.
|
|
20
|
+
*/
|
|
21
|
+
onPaginationChange: Dispatch<SetStateAction<PaginationState>>;
|
|
22
|
+
/**
|
|
23
|
+
* Enables manual pagination. If this option is set to true,
|
|
24
|
+
* the table will not automatically paginate and instead will expect you
|
|
25
|
+
* to manually paginate the rows before passing them to the table.
|
|
26
|
+
*
|
|
27
|
+
* @type {boolean}
|
|
28
|
+
*/
|
|
29
|
+
manualPagination: true;
|
|
30
|
+
/**
|
|
31
|
+
* The options to control the pagination
|
|
32
|
+
*
|
|
33
|
+
* @type {number[]}
|
|
34
|
+
* @memberof Pagination
|
|
35
|
+
*/
|
|
36
|
+
itemsPerPage?: number[];
|
|
37
|
+
/**
|
|
38
|
+
* When manual pagination is enable the total numbers of
|
|
39
|
+
* records in the table should be provided.
|
|
40
|
+
*
|
|
41
|
+
* @type {number}
|
|
42
|
+
* @memberof Pagination
|
|
43
|
+
*/
|
|
44
|
+
totalItems: number;
|
|
45
|
+
}
|
|
46
|
+
export interface DefaultPagination {
|
|
47
|
+
manualPagination: false;
|
|
48
|
+
itemsPerPage?: number[];
|
|
49
|
+
}
|
|
50
|
+
export declare type Pagination = DefaultPagination | ManualPagination;
|
|
51
|
+
export interface ManualSorting {
|
|
52
|
+
/**
|
|
53
|
+
* Represents the current sorting state of the table.
|
|
54
|
+
*
|
|
55
|
+
* @type {SortingState}
|
|
56
|
+
*/
|
|
57
|
+
state: SortingState;
|
|
58
|
+
/**
|
|
59
|
+
* Enables manual sorting for the table.
|
|
60
|
+
*
|
|
61
|
+
* @type {boolean}
|
|
62
|
+
*/
|
|
63
|
+
manualSorting: true;
|
|
64
|
+
/**
|
|
65
|
+
* This overrides the default internal state management,
|
|
66
|
+
* so you will need to persist the state change either fully or partially outside of the table.
|
|
67
|
+
*/
|
|
68
|
+
onSortingChange: Dispatch<SetStateAction<SortingState>>;
|
|
69
|
+
/**
|
|
70
|
+
* Enables/Disables the ability to remove sorting for the table.
|
|
71
|
+
*
|
|
72
|
+
*/
|
|
73
|
+
enableSortingRemoval?: boolean;
|
|
74
|
+
}
|
|
75
|
+
export interface DefaultSorting {
|
|
76
|
+
/**
|
|
77
|
+
* Enables manual sorting for the table.
|
|
78
|
+
*
|
|
79
|
+
* @type {boolean}
|
|
80
|
+
*/
|
|
81
|
+
manualSorting: false;
|
|
82
|
+
}
|
|
83
|
+
export declare type Sorting = DefaultSorting | ManualSorting;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var tslib_es6 = require('./tslib.es6-5b50eb8e.js');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var FormField = require('./FormField-a92c7bac.js');
|
|
6
|
+
|
|
7
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
8
|
+
|
|
9
|
+
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
10
|
+
|
|
11
|
+
function Select(props) {
|
|
12
|
+
return React__default["default"].createElement(FormField.FormField, tslib_es6.__assign({ type: "select" }, props));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function SelectOption(_a) {
|
|
16
|
+
var children = _a.children, disabled = _a.disabled, value = _a.value;
|
|
17
|
+
return (React__default["default"].createElement("option", { disabled: disabled, value: value }, children));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
exports.Select = Select;
|
|
21
|
+
exports.SelectOption = SelectOption;
|
package/dist/Select/index.js
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
var Option = require('../Option-201e55a7.js');
|
|
6
|
+
require('../tslib.es6-5b50eb8e.js');
|
|
7
|
+
require('react');
|
|
8
|
+
require('../FormField-a92c7bac.js');
|
|
8
9
|
require('uuid');
|
|
9
10
|
require('react-hook-form');
|
|
10
11
|
require('../style-inject.es-dcee06b6.js');
|
|
@@ -19,18 +20,7 @@ require('../InputValidation-24d3621a.js');
|
|
|
19
20
|
require('framer-motion');
|
|
20
21
|
require('../Spinner-18d3dee6.js');
|
|
21
22
|
|
|
22
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
23
23
|
|
|
24
|
-
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
25
24
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function SelectOption(_a) {
|
|
31
|
-
var children = _a.children, disabled = _a.disabled, value = _a.value;
|
|
32
|
-
return (React__default["default"].createElement("option", { disabled: disabled, value: value }, children));
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
exports.Option = SelectOption;
|
|
36
|
-
exports.Select = Select;
|
|
25
|
+
exports.Option = Option.SelectOption;
|
|
26
|
+
exports.Select = Option.Select;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jobber/components",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.87.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
"@jobber/hooks": "^1.12.1",
|
|
23
23
|
"@popperjs/core": "^2.0.6",
|
|
24
24
|
"@std-proposal/temporal": "0.0.1",
|
|
25
|
+
"@tanstack/react-table": "8.5.13",
|
|
25
26
|
"@types/color": "^3.0.1",
|
|
26
27
|
"@types/lodash": "^4.14.136",
|
|
27
28
|
"@types/react-datepicker": "^4.3.2",
|
|
@@ -83,5 +84,5 @@
|
|
|
83
84
|
"> 1%",
|
|
84
85
|
"IE 10"
|
|
85
86
|
],
|
|
86
|
-
"gitHead": "
|
|
87
|
+
"gitHead": "fce989b8ed43d2375c784579251d446f182424fd"
|
|
87
88
|
}
|