@aivenio/aquarium 2.2.0 → 2.3.1
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/dist/atoms.cjs +21 -6
- package/dist/atoms.mjs +21 -6
- package/dist/src/atoms/DataList/DataList.d.ts +6 -2
- package/dist/src/atoms/DataList/DataList.js +15 -4
- package/dist/src/molecules/DataList/DataList.d.ts +2 -2
- package/dist/src/molecules/DataList/DataList.js +3 -3
- package/dist/src/molecules/DataList/DataListComponents.d.ts +3 -3
- package/dist/src/molecules/DataList/DataListComponents.js +15 -2
- package/dist/src/molecules/DataList/DataListGroup.js +10 -6
- package/dist/src/molecules/DataList/DataListSkeleton.js +2 -2
- package/dist/src/molecules/DataTable/DataTable.js +3 -3
- package/dist/src/molecules/ItemList/ItemList.d.ts +39 -0
- package/dist/src/molecules/ItemList/ItemList.js +72 -0
- package/dist/src/molecules/ItemList/ItemList.spec.d.ts +24 -0
- package/dist/src/molecules/ItemList/ItemList.spec.js +100 -0
- package/dist/src/molecules/ItemList/types.d.ts +114 -0
- package/dist/src/molecules/ItemList/types.js +2 -0
- package/dist/src/molecules/PageHeader/PageHeader.d.ts +3 -3
- package/dist/src/molecules/PageHeader/PageHeader.js +5 -1
- package/dist/src/molecules/index.d.ts +3 -0
- package/dist/src/molecules/index.js +4 -1
- package/dist/src/utils/table/sortByColumn.d.ts +3 -0
- package/dist/src/utils/table/sortByColumn.js +23 -0
- package/dist/src/utils/table/types.d.ts +23 -3
- package/dist/src/utils/table/types.js +3 -1
- package/dist/src/utils/table/useSortState.d.ts +15 -0
- package/dist/src/utils/table/useSortState.js +3 -0
- package/dist/src/utils/table/useTableSort.d.ts +3 -3
- package/dist/src/utils/table/useTableSort.js +2 -2
- package/dist/src/utils/table/utils.d.ts +2 -2
- package/dist/src/utils/table/utils.js +3 -3
- package/dist/styles.css +18 -0
- package/dist/system.cjs +182 -23
- package/dist/system.mjs +178 -23
- package/dist/tsconfig.module.tsbuildinfo +1 -1
- package/dist/types/tailwindGenerated.d.ts +1 -1
- package/package.json +2 -2
@@ -0,0 +1,39 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { type InfiniteListProps } from '../../../src/molecules/List/List';
|
3
|
+
import { type DataTableRowId, type ItemListColumn, type MenuColumnType } from '../../../src/utils/table/types';
|
4
|
+
import { type SortState } from '../../../src/utils/table/useSortState';
|
5
|
+
export type Item = Record<string, unknown> & {
|
6
|
+
/**
|
7
|
+
* Assigned ID for each data row.
|
8
|
+
* Used as a key. Use something unqiue derived from the data, not index.
|
9
|
+
*/
|
10
|
+
id: DataTableRowId;
|
11
|
+
/**
|
12
|
+
* Reserved key for each item, will be used to render sub-items
|
13
|
+
*/
|
14
|
+
items?: Item[];
|
15
|
+
};
|
16
|
+
type NotMenuColumn<I extends Item> = Exclude<ItemListColumn<I>, MenuColumnType<I>>;
|
17
|
+
export type Columns<I extends Item> = Array<NotMenuColumn<I>> | [...Array<NotMenuColumn<I>>, MenuColumnType<I>];
|
18
|
+
type ItemListProps<I extends Item> = InfiniteListProps & {
|
19
|
+
/**
|
20
|
+
* Array of column definitions that correspond to the data.
|
21
|
+
*/
|
22
|
+
columns: Columns<I>;
|
23
|
+
/**
|
24
|
+
* Array of data to be displayed.
|
25
|
+
*/
|
26
|
+
items: I[];
|
27
|
+
/**
|
28
|
+
* Optional callback function that is called when user clicks column header to change table sorting.
|
29
|
+
* If provided, no sortig will be done by the component.
|
30
|
+
*/
|
31
|
+
onSortChanged?: (sortState: SortState) => void;
|
32
|
+
/**
|
33
|
+
* Determines if table header should stick to top when scrolling.
|
34
|
+
* @default true
|
35
|
+
*/
|
36
|
+
sticky?: boolean;
|
37
|
+
};
|
38
|
+
export declare const ItemList: <I extends Item>({ columns, items, onSortChanged, sticky, ...infiniteProps }: ItemListProps<I>) => React.JSX.Element;
|
39
|
+
export {};
|
@@ -0,0 +1,72 @@
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
2
|
+
var t = {};
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
4
|
+
t[p] = s[p];
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
8
|
+
t[p[i]] = s[p[i]];
|
9
|
+
}
|
10
|
+
return t;
|
11
|
+
};
|
12
|
+
import React from 'react';
|
13
|
+
import { List } from '../../../src/molecules/List/List';
|
14
|
+
import { Template } from '../../../src/molecules/Template/Template';
|
15
|
+
import { DataList } from '../../../src/atoms/DataList/DataList';
|
16
|
+
import { sortByColumn } from '../../../src/utils/table/sortByColumn';
|
17
|
+
import { cellProps, columnHasSort, } from '../../../src/utils/table/types';
|
18
|
+
import { useSortState } from '../../../src/utils/table/useSortState';
|
19
|
+
import { DataListCell } from '../DataList/DataListComponents';
|
20
|
+
export const ItemList = (_a) => {
|
21
|
+
var { columns, items, onSortChanged, sticky } = _a, infiniteProps = __rest(_a, ["columns", "items", "onSortChanged", "sticky"]);
|
22
|
+
const templateColumns = columns.map((column) => { var _a; return (_a = column.width) !== null && _a !== void 0 ? _a : 'auto'; });
|
23
|
+
const [sortState, setSortState] = useSortState();
|
24
|
+
const sortedItems = onSortChanged ? items : sortByColumn(items, columns, sortState); // If onSortChanged is provided its assumed that the parent is managing the sorting
|
25
|
+
return (React.createElement(Template, { className: "Aquarium-ItemList", columns: templateColumns, role: "table" },
|
26
|
+
React.createElement(DataList.Row, { header: true }, columns.map((column) => {
|
27
|
+
if (columnHasSort(column)) {
|
28
|
+
return (React.createElement(DataList.SortCell, Object.assign({ sticky: sticky, direction: (sortState === null || sortState === void 0 ? void 0 : sortState.headerName) === column.headerName ? sortState.direction : 'none', onClick: () => {
|
29
|
+
const newState =
|
30
|
+
// In case column is already sorted, either ascending or descending
|
31
|
+
sortState && sortState.headerName === column.headerName
|
32
|
+
? sortState.direction === 'ascending'
|
33
|
+
? // In case column is sorted ascending, sort it descending
|
34
|
+
{ headerName: column.headerName, direction: 'descending' }
|
35
|
+
: // In case column is sorted ascending, sort it descending
|
36
|
+
undefined
|
37
|
+
: // Nothing is set, sort it ascending
|
38
|
+
{ headerName: column.headerName, direction: 'ascending' };
|
39
|
+
setSortState(newState);
|
40
|
+
onSortChanged === null || onSortChanged === void 0 ? void 0 : onSortChanged(newState);
|
41
|
+
} }, cellProps(column)), column.headerName));
|
42
|
+
}
|
43
|
+
return (React.createElement(DataList.HeadCell, Object.assign({}, cellProps(column), { sticky: sticky }), column.headerName));
|
44
|
+
})),
|
45
|
+
React.createElement(Rows, Object.assign({ columns: columns, items: sortedItems, level: 0 }, infiniteProps))));
|
46
|
+
};
|
47
|
+
const Rows = (_a) => {
|
48
|
+
var { columns, items, level, isLastGroup } = _a, infiniteProps = __rest(_a, ["columns", "items", "level", "isLastGroup"]);
|
49
|
+
return (React.createElement(List, Object.assign({}, (level === 0 ? infiniteProps : {}), { items: items, renderItem: (item, itemIndex) => {
|
50
|
+
const hasSubItems = item.items && item.items.length > 0;
|
51
|
+
const isLastItem = itemIndex === items.length - 1;
|
52
|
+
/**
|
53
|
+
* No divider if
|
54
|
+
* 1. It's the last item in the main level. Between main level items there should be divider except for the last one.
|
55
|
+
* 2. Level is greater than 0 and we are either in last group or not last item. Inside groups there should never be dividers except if its the last item.
|
56
|
+
* 3. It has sub-items. If there are sub-items it means that this item is a group and should not have divider.
|
57
|
+
*/
|
58
|
+
const noDivider = (level === 0 && isLastItem) || (level > 0 && (isLastGroup || !isLastItem)) || hasSubItems;
|
59
|
+
return (React.createElement(React.Fragment, { key: item.id },
|
60
|
+
React.createElement(DataList.Row, { noDivider: noDivider },
|
61
|
+
React.createElement(List, { items: columns, renderItem: (column, columnIndex) => (React.createElement(DataList.Cell, Object.assign({}, cellProps(column), { style: level > 1 && columnIndex === 0 ? { paddingLeft: (level - 1) * 60 } : undefined }),
|
62
|
+
level > 0 && columnIndex === 0 && React.createElement(DataList.TreeLine, { isLast: itemIndex === items.length - 1 }),
|
63
|
+
React.createElement(DataListCell, { column: column, row: item, index: columnIndex, rows: items }))) })),
|
64
|
+
item.items && (React.createElement(WithGroup, { level: level },
|
65
|
+
React.createElement(Rows, { columns: columns, items: item.items, level: level + 1,
|
66
|
+
// We are in last group if we are last item on main level or isLastGroup has been passed from above, meaning we are in a nested group of last item
|
67
|
+
isLastGroup: (level === 0 && itemIndex === items.length - 1) || isLastGroup })))));
|
68
|
+
} })));
|
69
|
+
};
|
70
|
+
// rowgroups are not allowed to contain other rowgroups so we will only use this role for first level groups
|
71
|
+
const WithGroup = ({ level, children }) => level === 0 ? React.createElement(DataList.Row, { isGroup: true }, children) : children;
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXRlbUxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbW9sZWN1bGVzL0l0ZW1MaXN0L0l0ZW1MaXN0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQTBCLElBQUksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFDTCxTQUFTLEVBQ1QsYUFBYSxHQUlkLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFrQixZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUU1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUF3QzlELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFpQixFQU10QixFQUFFLEVBQUU7UUFOa0IsRUFDdkMsT0FBTyxFQUNQLEtBQUssRUFDTCxhQUFhLEVBQ2IsTUFBTSxPQUVXLEVBRGQsYUFBYSxjQUx1QiwrQ0FNeEMsQ0FEaUI7SUFFaEIsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLFdBQUMsT0FBQSxNQUFBLE1BQU0sQ0FBQyxLQUFLLG1DQUFJLE1BQU0sQ0FBQSxFQUFBLENBQUMsQ0FBQztJQUN4RSxNQUFNLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDO0lBQ2pELE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLENB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
|
@@ -0,0 +1,24 @@
|
|
1
|
+
export declare const createService: (type?: string) => () => {
|
2
|
+
id: string;
|
3
|
+
name: string;
|
4
|
+
type: string | undefined;
|
5
|
+
};
|
6
|
+
export declare const serviceItems: {
|
7
|
+
items: ({
|
8
|
+
id: string;
|
9
|
+
name: string;
|
10
|
+
type: string | undefined;
|
11
|
+
} | {
|
12
|
+
items: {
|
13
|
+
id: string;
|
14
|
+
name: string;
|
15
|
+
type: string | undefined;
|
16
|
+
}[];
|
17
|
+
id: string;
|
18
|
+
name: string;
|
19
|
+
type: string | undefined;
|
20
|
+
})[];
|
21
|
+
id: string;
|
22
|
+
name: string;
|
23
|
+
type: string | undefined;
|
24
|
+
}[];
|
@@ -0,0 +1,100 @@
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8
|
+
});
|
9
|
+
};
|
10
|
+
import React from 'react';
|
11
|
+
import { faker } from '@faker-js/faker';
|
12
|
+
import { render, screen, within } from '@testing-library/react';
|
13
|
+
import userEvent from '@testing-library/user-event';
|
14
|
+
import { ItemList } from './ItemList';
|
15
|
+
export const createService = (type) => () => ({
|
16
|
+
id: faker.string.uuid(),
|
17
|
+
name: faker.word.adjective() + ' ' + faker.word.noun(),
|
18
|
+
type,
|
19
|
+
});
|
20
|
+
function recursiveFlat(items) {
|
21
|
+
const flattenedItems = [];
|
22
|
+
items.forEach((item) => {
|
23
|
+
flattenedItems.push(item);
|
24
|
+
if (Array.isArray(item.items)) {
|
25
|
+
flattenedItems.push(...recursiveFlat(item.items));
|
26
|
+
}
|
27
|
+
});
|
28
|
+
return flattenedItems;
|
29
|
+
}
|
30
|
+
export const serviceItems = [
|
31
|
+
Object.assign(Object.assign({}, createService('pg')()), { items: faker.helpers.multiple(createService('pg'), { count: 3 }) }),
|
32
|
+
Object.assign(Object.assign({}, createService('kafka')()), { items: faker.helpers.multiple(createService('kafka'), { count: 5 }) }),
|
33
|
+
Object.assign(Object.assign({}, createService('mysql')()), { items: [
|
34
|
+
...faker.helpers.multiple(createService('mysql'), { count: 2 }),
|
35
|
+
Object.assign(Object.assign({}, createService('mysql')()), { items: faker.helpers.multiple(createService('mysql'), { count: 4 }) }),
|
36
|
+
] }),
|
37
|
+
];
|
38
|
+
const getRowContents = () => {
|
39
|
+
const [_header, ...rows] = screen.getAllByRole('row');
|
40
|
+
return rows.map((row) => row.textContent);
|
41
|
+
};
|
42
|
+
describe('<ItemList />', () => {
|
43
|
+
describe('given recursive list', () => {
|
44
|
+
beforeEach(() => {
|
45
|
+
render(React.createElement(ItemList, { items: serviceItems, columns: [
|
46
|
+
{
|
47
|
+
headerName: 'Service',
|
48
|
+
type: 'text',
|
49
|
+
field: 'name',
|
50
|
+
},
|
51
|
+
] }));
|
52
|
+
});
|
53
|
+
it('should render all items recursively', () => {
|
54
|
+
expect(getRowContents()).toEqual(recursiveFlat(serviceItems).map((item) => item.name));
|
55
|
+
});
|
56
|
+
it('should contain 3 row groups', () => {
|
57
|
+
const rowgroups = screen.getAllByRole('rowgroup');
|
58
|
+
expect(rowgroups).toHaveLength(3);
|
59
|
+
});
|
60
|
+
it('rowgroups should contain their respective rows', () => {
|
61
|
+
const [pg, kafka, mysql] = screen.getAllByRole('rowgroup');
|
62
|
+
expect(within(pg)
|
63
|
+
.getAllByRole('row')
|
64
|
+
.map((node) => node.textContent)).toEqual(serviceItems[0].items.map((item) => item.name));
|
65
|
+
expect(within(kafka)
|
66
|
+
.getAllByRole('row')
|
67
|
+
.map((node) => node.textContent)).toEqual(serviceItems[1].items.map((item) => item.name));
|
68
|
+
expect(within(mysql)
|
69
|
+
.getAllByRole('row')
|
70
|
+
.map((node) => node.textContent)).toEqual(recursiveFlat(serviceItems[2].items).map((item) => item.name));
|
71
|
+
});
|
72
|
+
});
|
73
|
+
describe('given a flat list', () => {
|
74
|
+
const services = faker.helpers.multiple(createService('pg'), { count: 10 });
|
75
|
+
beforeEach(() => {
|
76
|
+
render(React.createElement(ItemList, { items: services, columns: [
|
77
|
+
{
|
78
|
+
headerName: 'Service',
|
79
|
+
type: 'text',
|
80
|
+
field: 'name',
|
81
|
+
sort: (a, b) => a.name.localeCompare(b.name),
|
82
|
+
},
|
83
|
+
] }));
|
84
|
+
});
|
85
|
+
it('should allow sorting', () => __awaiter(void 0, void 0, void 0, function* () {
|
86
|
+
const user = userEvent.setup();
|
87
|
+
const header = screen.getByRole('button', { name: 'Service' });
|
88
|
+
// Initial state
|
89
|
+
const expected = services.map((item) => item.name);
|
90
|
+
expect(getRowContents()).toEqual(expected);
|
91
|
+
// Sort ascending
|
92
|
+
yield user.click(header);
|
93
|
+
expect(getRowContents()).toEqual([...expected].sort((a, b) => a.localeCompare(b)));
|
94
|
+
// Sort descending
|
95
|
+
yield user.click(header);
|
96
|
+
expect(getRowContents()).toEqual([...expected].sort((a, b) => b.localeCompare(a)));
|
97
|
+
}));
|
98
|
+
});
|
99
|
+
});
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXRlbUxpc3Quc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2xlY3VsZXMvSXRlbUxpc3QvSXRlbUxpc3Quc3BlYy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLFNBQVMsTUFBTSw2QkFBNkIsQ0FBQztBQUVwRCxPQUFPLEVBQWEsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNyRCxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7SUFDdkIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO0lBQ3RELElBQUk7Q0FDTCxDQUFDLENBQUM7QUFFSCxTQUFTLGFBQWEsQ0FBQyxLQUFhO0lBQ2xDLE1BQU0sY0FBYyxHQUFXLEVBQUUsQ0FBQztJQUNsQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDckIsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUIsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwRCxDQUFDO0lBQ0gsQ0FBQyxD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
|
@@ -0,0 +1,114 @@
|
|
1
|
+
import type { Key } from 'react';
|
2
|
+
import type { DropdownMenuItemsComponent } from '../../../src/molecules/DropdownMenu/DropdownMenu';
|
3
|
+
import type { ChipStatus, TableItem, Weight } from '../../../src/system';
|
4
|
+
import type { ActionType } from '../../../types/ActionType';
|
5
|
+
export type Item = Record<string, unknown> & {
|
6
|
+
/**
|
7
|
+
* Assigned ID for each data row.
|
8
|
+
* Used as a key. Use something unqiue derived from the data, not index.
|
9
|
+
*/
|
10
|
+
id: React.Key;
|
11
|
+
/**
|
12
|
+
* Reserved key for each item, will be used to render sub-items
|
13
|
+
*/
|
14
|
+
items?: Item[];
|
15
|
+
};
|
16
|
+
export type Column = {
|
17
|
+
/**
|
18
|
+
* Type of the column.
|
19
|
+
*/
|
20
|
+
type: 'action' | 'custom' | 'item' | 'menu' | 'number' | 'status' | 'text';
|
21
|
+
/**
|
22
|
+
* Display name for the column. Also works as a title for the column. Should be unique.
|
23
|
+
*/
|
24
|
+
headerName: string;
|
25
|
+
/**
|
26
|
+
* Determines if the header name should be visible.
|
27
|
+
* Because headerName is used as a key use this to toggle visibility instead of empty string as headerName.
|
28
|
+
*/
|
29
|
+
headerInvisible?: boolean;
|
30
|
+
};
|
31
|
+
type Sortable<R> = {
|
32
|
+
/**
|
33
|
+
* Optional compare function for sorting.
|
34
|
+
*/
|
35
|
+
sort?: (a: R, b: R) => number;
|
36
|
+
};
|
37
|
+
export type TextColumn<R> = Sortable<R> & {
|
38
|
+
/**
|
39
|
+
* Type of the column.
|
40
|
+
*/
|
41
|
+
type: 'text';
|
42
|
+
};
|
43
|
+
export type NumberColumn<R> = Sortable<R> & {
|
44
|
+
/**
|
45
|
+
* Type of the column.
|
46
|
+
*/
|
47
|
+
type: 'number';
|
48
|
+
};
|
49
|
+
export type ActionColumn<R> = Sortable<R> & {
|
50
|
+
/**
|
51
|
+
* Type of the column.
|
52
|
+
*/
|
53
|
+
type: 'action';
|
54
|
+
/**
|
55
|
+
* Callback function that resolves to Button props.
|
56
|
+
*/
|
57
|
+
action: (row: R, index: number, rows: R[] | undefined) => ActionType;
|
58
|
+
};
|
59
|
+
export type MenuColumn<R> = {
|
60
|
+
/**
|
61
|
+
* Type of the column.
|
62
|
+
*/
|
63
|
+
type: 'menu';
|
64
|
+
/**
|
65
|
+
* Menu items definition. Can be same or unique for each row. No menu will be rendered if undefined is returned.
|
66
|
+
*/
|
67
|
+
menu: (row: R, index: number) => DropdownMenuItemsComponent | undefined;
|
68
|
+
/**
|
69
|
+
* Called when an item from the menu is selected.
|
70
|
+
*/
|
71
|
+
onAction: (action: Key, row: R, index: number) => void;
|
72
|
+
};
|
73
|
+
type ItemColumn<R> = Sortable<R> & {
|
74
|
+
/**
|
75
|
+
* Type of the column.
|
76
|
+
*/
|
77
|
+
type: 'item';
|
78
|
+
/**
|
79
|
+
* Callback function that resolves to TableItem props
|
80
|
+
*/
|
81
|
+
item: (row: R, index: number, rows: R[] | undefined) => TableItem | undefined;
|
82
|
+
};
|
83
|
+
export type TableStatus = {
|
84
|
+
status: ChipStatus;
|
85
|
+
text: number | string;
|
86
|
+
};
|
87
|
+
type StatusColumn<R> = Sortable<R> & {
|
88
|
+
/**
|
89
|
+
* Type of the column.
|
90
|
+
*/
|
91
|
+
type: 'status';
|
92
|
+
/**
|
93
|
+
* Callback function that resolves to StatusChip props
|
94
|
+
*/
|
95
|
+
status: (row: R, index: number, rows: R[] | undefined) => TableStatus | undefined;
|
96
|
+
};
|
97
|
+
export type CustomColumn<R> = Sortable<R> & {
|
98
|
+
/**
|
99
|
+
* Type of the column.
|
100
|
+
*/
|
101
|
+
type: 'custom';
|
102
|
+
/**
|
103
|
+
* Custom render function if no other column type suits your needs.
|
104
|
+
*/
|
105
|
+
render: (row: R, index: number, rows: R[] | undefined) => React.ReactNode;
|
106
|
+
};
|
107
|
+
export type WeightColumn = {
|
108
|
+
/**
|
109
|
+
* Width of the column. Number for pixels and string for percentages
|
110
|
+
*/
|
111
|
+
width?: Weight | number;
|
112
|
+
};
|
113
|
+
export type ListColumn<I extends Item> = Column & WeightColumn & (ActionColumn<I> | CustomColumn<I> | ItemColumn<I> | MenuColumn<I> | NumberColumn<I> | StatusColumn<I> | TextColumn<I>);
|
114
|
+
export {};
|
@@ -32,11 +32,11 @@ export type PageHeaderProps = CommonPageHeaderProps & {
|
|
32
32
|
imageAlt?: string;
|
33
33
|
/**
|
34
34
|
* Optional secondary actions. There can be one or more secondary actions in the header.
|
35
|
-
* The number of secondary actions is
|
35
|
+
* The max number of secondary actions is 2.
|
36
36
|
* This can either be a callback function or a link.
|
37
|
-
*
|
37
|
+
* Use "menu" props instead if there are more than 2 secondary actions.
|
38
38
|
*/
|
39
|
-
secondaryActions?:
|
39
|
+
secondaryActions?: AsyncActionType | LinkActionType | [AsyncActionType | LinkActionType, AsyncActionType | LinkActionType] | [AsyncActionType | LinkActionType];
|
40
40
|
/**
|
41
41
|
* Optional list of chips, which will be rendered as chips underneath the page title.
|
42
42
|
*/
|
@@ -13,6 +13,10 @@ import { defaultContextualMenuPlacement } from '../../../types/ContextualMenu';
|
|
13
13
|
import more from '../../../src/icons/more';
|
14
14
|
const CommonPageHeader = ({ title, subtitle, image, imageAlt, primaryAction, secondaryAction, secondaryActions = secondaryAction ? [secondaryAction] : undefined, chips = [], breadcrumbs, menu, menuLabel, menuAriaLabel = menuLabel !== null && menuLabel !== void 0 ? menuLabel : 'Context menu', onAction, onMenuOpenChange, isSubHeader = false, }) => {
|
15
15
|
var _a, _b;
|
16
|
+
const actions = [primaryAction, ...castArray(secondaryActions)].filter(Boolean);
|
17
|
+
if (actions.length > 2) {
|
18
|
+
throw new Error('Limit the combined `primaryAction` and `secondaryActions` to 2 actions. Use the `menu` prop for additional actions.');
|
19
|
+
}
|
16
20
|
return (React.createElement(BasePageHeader, { className: "Aquarium-PageHeader" },
|
17
21
|
React.createElement(BasePageHeader.Container, null,
|
18
22
|
breadcrumbs && (React.createElement(Box, { marginBottom: "3" },
|
@@ -40,4 +44,4 @@ PageHeader.displayName = 'PageHeader';
|
|
40
44
|
const SubHeader = (props) => React.createElement(CommonPageHeader, Object.assign({}, props, { isSubHeader: true }));
|
41
45
|
PageHeader.SubHeader = SubHeader;
|
42
46
|
PageHeader.SubHeader.displayName = 'PageHeader.SubHeader';
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFnZUhlYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2xlY3VsZXMvUGFnZUhlYWRlci9QYWdlSGVhZGVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxTQUFTLE1BQU0sa0JBQWtCLENBQUM7QUFFekMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQXlCLE1BQU0sdUNBQXVDLENBQUM7QUFDM0YsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXhELE9BQU8sRUFBRSxVQUFVLElBQUksY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFL0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4QyxPQUFPLEVBQWtDLDhCQUE4QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEcsT0FBTyxJQUFJLE1BQU0sZ0JBQWdCLENBQUM7QUFrRWxDLE1BQU0sZ0JBQWdCLEdBQTBELENBQUMsRUFDL0UsS0FBSyxFQUNMLFFBQVEsRUFDUixLQUFLLEVBQ0wsUUFBUSxFQUNSLGFBQWEsRUFDYixlQUFlLEVBQ2YsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQ2xFLEtBQUssR0FBRyxFQUFFLEVBQ1YsV0FBVyxFQUNYLElBQUksRUFDSixTQUFTLEVBQ1Qs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
|
@@ -71,10 +71,13 @@ export * from './TimePicker/TimePicker';
|
|
71
71
|
export * from './Toast/Toast';
|
72
72
|
export * from './Tooltip/Tooltip';
|
73
73
|
export * from './Typography/Typography';
|
74
|
+
export * from '../utils/table/sortByColumn';
|
74
75
|
export * from '../utils/table/types';
|
75
76
|
export * from '../utils/table/useScrollTarget';
|
77
|
+
export * from '../utils/table/useSortState';
|
76
78
|
export * from '../utils/table/useTableSelect';
|
77
79
|
export * from '../utils/table/useTableSort';
|
80
|
+
export * from './ItemList/ItemList';
|
78
81
|
export * from './Pagination/usePagination';
|
79
82
|
export declare const SelectItem: import("react").ForwardRefExoticComponent<import("react").HTMLAttributes<HTMLLIElement> & {
|
80
83
|
key: string;
|
@@ -74,10 +74,13 @@ export * from './Toast/Toast';
|
|
74
74
|
export * from './Tooltip/Tooltip';
|
75
75
|
export * from './Typography/Typography';
|
76
76
|
// Exported atoms and utility functions
|
77
|
+
export * from '../utils/table/sortByColumn';
|
77
78
|
export * from '../utils/table/types';
|
78
79
|
export * from '../utils/table/useScrollTarget';
|
80
|
+
export * from '../utils/table/useSortState';
|
79
81
|
export * from '../utils/table/useTableSelect';
|
80
82
|
export * from '../utils/table/useTableSort';
|
83
|
+
export * from './ItemList/ItemList';
|
81
84
|
export * from './Pagination/usePagination';
|
82
85
|
export const SelectItem = Select.Item;
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9sZWN1bGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVoRCxzREFBc0Q7QUFDdEQsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHlCQUF5QixDQUFDO0FBRXhDLHVDQUF1QztBQUN2QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNEJBQTRCLENBQUM7QUFFM0MsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMifQ==
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { columnHasSort } from '../../../src/molecules';
|
2
|
+
export const sortByColumn = (items, column, sortState) => {
|
3
|
+
const sortedColumn = column.find((column) => column.headerName === (sortState === null || sortState === void 0 ? void 0 : sortState.headerName));
|
4
|
+
if (sortState && sortedColumn && columnHasSort(sortedColumn)) {
|
5
|
+
const sortFunction = sortedColumn.sort;
|
6
|
+
if (sortFunction) {
|
7
|
+
const ascending = [...items].sort((a, b) => sortFunction(a, b, sortState.direction));
|
8
|
+
if (sortState.direction === 'descending') {
|
9
|
+
return ascending.reverse();
|
10
|
+
}
|
11
|
+
else {
|
12
|
+
return ascending;
|
13
|
+
}
|
14
|
+
}
|
15
|
+
// Sort function not in column definition, this should never be reached
|
16
|
+
return items;
|
17
|
+
}
|
18
|
+
else {
|
19
|
+
// sortState is undefined or we did not find a sortable column
|
20
|
+
return items;
|
21
|
+
}
|
22
|
+
};
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydEJ5Q29sdW1uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3RhYmxlL3NvcnRCeUNvbHVtbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUEyQixNQUFNLGVBQWUsQ0FBQztBQUl2RSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBaUIsS0FBVSxFQUFFLE1BQWtCLEVBQUUsU0FBb0IsRUFBRSxFQUFFO0lBQ25HLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLE1BQUssU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLFVBQVUsQ0FBQSxDQUFDLENBQUM7SUFDMUYsSUFBSSxTQUFTLElBQUksWUFBWSxJQUFJLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQzdELE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7UUFDdkMsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDckYsSUFBSSxTQUFTLENBQUMsU0FBUyxLQUFLLFlBQVksRUFBRSxDQUFDO2dCQUN6QyxPQUFPLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM3QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztRQUNILENBQUM7UUFDRCx1RUFBdUU7UUFDdkUsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO1NBQU0sQ0FBQztRQUNOLDhEQUE4RDtRQUM5RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDLENBQUMifQ==
|
@@ -14,7 +14,7 @@ export type Column = {
|
|
14
14
|
/**
|
15
15
|
* Type of the column.
|
16
16
|
*/
|
17
|
-
type: 'action' | 'custom' | 'item' | 'number' | 'status' | 'text';
|
17
|
+
type: 'action' | 'custom' | 'item' | 'menu' | 'number' | 'status' | 'text';
|
18
18
|
/**
|
19
19
|
* Display name for the column.
|
20
20
|
*/
|
@@ -88,6 +88,20 @@ export type ActionColumn<R> = CustomSortable<R> & {
|
|
88
88
|
*/
|
89
89
|
action: (row: R, index: number, rows: R[] | undefined) => ActionType;
|
90
90
|
};
|
91
|
+
export type MenuColumn<R> = {
|
92
|
+
/**
|
93
|
+
* Type of the column.
|
94
|
+
*/
|
95
|
+
type: 'menu';
|
96
|
+
/**
|
97
|
+
* Menu items definition. Can be same or unique for each row. No menu will be rendered if undefined is returned.
|
98
|
+
*/
|
99
|
+
menu: (row: R, index: number) => DropdownMenuItemsComponent | undefined;
|
100
|
+
/**
|
101
|
+
* Called when an item from the menu is selected.
|
102
|
+
*/
|
103
|
+
onAction: (action: Key, row: R, index: number) => void;
|
104
|
+
};
|
91
105
|
export type CustomColumn<R> = CustomSortable<R> & {
|
92
106
|
/**
|
93
107
|
* Type of the column.
|
@@ -130,7 +144,7 @@ type StatusColumn<R> = Column & CustomSortable<R> & {
|
|
130
144
|
*/
|
131
145
|
status: (row: R, index: number, rows: R[] | undefined) => TableStatus | undefined;
|
132
146
|
};
|
133
|
-
type
|
147
|
+
export type WeightColumn = Column & {
|
134
148
|
/**
|
135
149
|
* Width of the column. Number for pixels and string for percentages
|
136
150
|
*/
|
@@ -142,7 +156,11 @@ type TableColumn = Column & {
|
|
142
156
|
*/
|
143
157
|
width?: number | `${number}%`;
|
144
158
|
};
|
145
|
-
export type
|
159
|
+
export type MenuColumnType<R extends DataTableRow> = Column & ColumnBase<R> & MenuColumn<R> & {
|
160
|
+
width?: 'auto';
|
161
|
+
};
|
162
|
+
export type ItemListColumn<R extends DataTableRow> = DataColumn<R, WeightColumn> | MenuColumnType<R>;
|
163
|
+
export type DataListColumn<R extends DataTableRow> = DataColumn<R, WeightColumn>;
|
146
164
|
export type DataTableColumn<R extends DataTableRow> = DataColumn<R, TableColumn>;
|
147
165
|
type DataColumn<R extends DataTableRow, C extends Column> = C & ColumnBase<R> & (ActionColumn<R> | CustomColumn<R> | ItemColumn<R> | NumberColumn<R> | StatusColumn<R> | TextColumn<R>);
|
148
166
|
export type DataTableRowId = number | string;
|
@@ -169,6 +187,8 @@ type CellProps = {
|
|
169
187
|
stickyColumn?: StickyColumn;
|
170
188
|
};
|
171
189
|
export declare const cellProps: <C extends Column>(column: C) => CellProps;
|
190
|
+
type SortableColumn<R extends DataTableRow> = ActionColumn<R> | CustomColumn<R> | FieldColumn<R> | ItemColumn<R> | NumberColumn<R> | StatusColumn<R> | TextColumn<R>;
|
191
|
+
export declare const columnHasSort: <R extends DataTableRow>(column: DataColumn<R, any>) => column is SortableColumn<R>;
|
172
192
|
export declare const columnIsFieldColumn: <R extends DataTableRow>(column?: DataColumn<R, any>) => column is FieldColumn<R>;
|
173
193
|
export type DataTableMenuProps<R extends DataTableRow> = AllOrNone<Omit<CommonContextualMenuProps, 'menu' | 'onAction'> & {
|
174
194
|
/**
|
@@ -8,6 +8,7 @@ export const cellProps = (column) => {
|
|
8
8
|
var _a;
|
9
9
|
let align;
|
10
10
|
switch (column.type) {
|
11
|
+
case 'menu':
|
11
12
|
case 'action':
|
12
13
|
case 'number': {
|
13
14
|
align = 'right';
|
@@ -27,8 +28,9 @@ export const cellProps = (column) => {
|
|
27
28
|
stickyColumn: column.sticky,
|
28
29
|
};
|
29
30
|
};
|
31
|
+
export const columnHasSort = (column) => (columnIsFieldColumn(column) && column.sortable) || Boolean(column.sort);
|
30
32
|
export const columnIsFieldColumn = (column) => Boolean(column && column.field);
|
31
33
|
export function isOnSortChangedDirection(value) {
|
32
34
|
return value === undefined || ['ascending', 'descending'].includes(value);
|
33
35
|
}
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvdGFibGUvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseUNBQXlDO0FBRXpDLE9BQU8sT0FBTyxNQUFNLGdCQUFnQixDQUFDO0FBNE5yQyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FDNUIsSUFBa0MsRUFDRixFQUFFO0lBQ2xDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsU0FBb0MsRUFBMEIsRUFBRSxDQUM5RixTQUFTLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBVWxGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFtQixNQUFTLEVBQWEsRUFBRTs7SUFDbEUsSUFBSSxLQUE0QixDQUFDO0lBRWpDLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BCLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDZCxLQUFLLEdBQUcsT0FBTyxDQUFDO1lBQ2hCLE1BQU07UUFDUixDQUFDO1FBRUQsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2QsS0FBSyxHQUFHLFNBQVMsQ0FBQztZQUNsQixNQUFNO1FBQ1IsQ0FBQztRQUVELE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDUixLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLEdBQUcsRUFBRSxNQUFBLE1BQU0sQ0FBQyxHQUFHLG1DQUFJLE1BQU0sQ0FBQyxVQUFVO1FBQ3BDLEtBQUs7UUFDTCxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU07S0FDNUIsQ0FBQztBQUNKLENBQUMsQ0FBQztBQVdGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUF5QixNQUEwQixFQUErQixFQUFFLENBQy9HLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBRSxNQUE0QixDQUFDLElBQUksQ0FBQyxDQUFDO0FBRWxHLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQXlCLE1BQTJCLEVBQTRCLEVBQUUsQ0FDbkgsT0FBTyxDQUFDLE1BQU0sSUFBSyxNQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBMkJ0RCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsS0FBeUI7SUFDaEUsT0FBTyxLQUFLLEtBQUssU0FBUyxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1RSxDQUFDIn0=
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import type { SortDirection } from '../../../src/utils/table/types';
|
3
|
+
type Direction = Extract<SortDirection, 'ascending' | 'descending'>;
|
4
|
+
export type SortState = {
|
5
|
+
headerName: string;
|
6
|
+
direction: Direction;
|
7
|
+
} | undefined;
|
8
|
+
export declare const useSortState: (initialSortState?: SortState) => [{
|
9
|
+
headerName: string;
|
10
|
+
direction: Direction;
|
11
|
+
} | undefined, React.Dispatch<React.SetStateAction<{
|
12
|
+
headerName: string;
|
13
|
+
direction: Direction;
|
14
|
+
} | undefined>>];
|
15
|
+
export {};
|
@@ -0,0 +1,3 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
export const useSortState = (initialSortState) => React.useState(initialSortState);
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlU29ydFN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3RhYmxlL3VzZVNvcnRTdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFPMUIsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsZ0JBQTRCLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyJ9
|
@@ -1,11 +1,11 @@
|
|
1
|
-
import { type DataListColumn, type DataTableColumn, type DataTableRow, type OnSortChangedDirection, type Sort } from '../../../src/utils/table/types';
|
1
|
+
import { type DataListColumn, type DataTableColumn, type DataTableRow, type ItemListColumn, type OnSortChangedDirection, type Sort } from '../../../src/utils/table/types';
|
2
2
|
import type { AllOrNone } from '../../../types/utils';
|
3
3
|
type OnSortChangedCallback = (args: {
|
4
4
|
key: string | undefined;
|
5
5
|
direction: OnSortChangedDirection;
|
6
6
|
} | null) => void;
|
7
|
-
type UseTableSortOptions<C extends DataListColumn<R> | DataTableColumn<R>, R extends DataTableRow> = AllOrNone<Sort<C>> & {
|
7
|
+
type UseTableSortOptions<C extends DataListColumn<R> | DataTableColumn<R> | ItemListColumn<R>, R extends DataTableRow> = AllOrNone<Sort<C>> & {
|
8
8
|
onSortChanged?: OnSortChangedCallback;
|
9
9
|
};
|
10
|
-
export declare const useTableSort: <C extends DataListColumn<R> | DataTableColumn<R>, R extends DataTableRow>({ column, direction, onSortChanged
|
10
|
+
export declare const useTableSort: <C extends DataListColumn<R> | DataTableColumn<R> | ItemListColumn<R>, R extends DataTableRow>({ column, direction, onSortChanged }?: UseTableSortOptions<C, R>) => [Sort<C> | undefined, (column: C) => void];
|
11
11
|
export {};
|