@pallasoft/ps-table-components 1.22.2 → 1.24.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/dist/components/ps-data-table.d.ts +2 -1
- package/dist/components/ps-data-table.js +54 -15
- package/dist/components/ps-table-reorder-frame.js +15 -2
- package/dist/components/ps-table-reorder-handle.js +1 -1
- package/dist/components/ps-table-sort-header.js +1 -1
- package/dist/components/ps-table-sortable-row.d.ts +5 -1
- package/dist/components/ps-table-sortable-row.js +12 -4
- package/dist/constants/ps-table-drop-classes.d.ts +2 -0
- package/dist/constants/ps-table-drop-classes.js +8 -0
- package/dist/constants/ps-table-drop-placement.d.ts +6 -0
- package/dist/constants/ps-table-drop-placement.js +8 -0
- package/dist/constants/ps-table-pin-classes.d.ts +16 -0
- package/dist/constants/ps-table-pin-classes.js +19 -0
- package/dist/constants/table-breakpoint.d.ts +7 -0
- package/dist/constants/table-breakpoint.js +13 -0
- package/dist/esm/components/ps-data-table.js +55 -16
- package/dist/esm/components/ps-table-reorder-frame.js +15 -2
- package/dist/esm/components/ps-table-reorder-handle.js +1 -1
- package/dist/esm/components/ps-table-sort-header.js +1 -1
- package/dist/esm/components/ps-table-sortable-row.js +12 -4
- package/dist/esm/constants/ps-table-drop-classes.js +5 -0
- package/dist/esm/constants/ps-table-drop-placement.js +5 -0
- package/dist/esm/constants/ps-table-pin-classes.js +16 -0
- package/dist/esm/constants/table-breakpoint.js +10 -0
- package/dist/esm/hooks/use-ps-table-overflow.js +19 -0
- package/dist/esm/hooks/use-ps-table-reorder.js +89 -15
- package/dist/esm/index.js +10 -0
- package/dist/esm/interfaces/table-drop.js +1 -0
- package/dist/esm/interfaces/table-nesting-announcements.js +1 -0
- package/dist/esm/interfaces/table-overflow-edges.js +1 -0
- package/dist/esm/interfaces/table-pin-classes.js +1 -0
- package/dist/esm/interfaces/table-reorder-nesting-binding.js +1 -0
- package/dist/esm/interfaces/table-reorder-nesting.js +1 -0
- package/dist/esm/services/ps-table-column-size-service.js +7 -0
- package/dist/esm/services/ps-table-overflow-service.js +11 -0
- package/dist/esm/services/ps-table-pin-service.js +22 -0
- package/dist/esm/services/ps-table-reorder-service.js +38 -1
- package/dist/hooks/use-ps-table-overflow.d.ts +6 -0
- package/dist/hooks/use-ps-table-overflow.js +23 -0
- package/dist/hooks/use-ps-table-reorder.d.ts +6 -2
- package/dist/hooks/use-ps-table-reorder.js +87 -13
- package/dist/index.d.ts +10 -0
- package/dist/index.js +10 -0
- package/dist/interfaces/table-column.d.ts +5 -0
- package/dist/interfaces/table-drop.d.ts +5 -0
- package/dist/interfaces/table-drop.js +2 -0
- package/dist/interfaces/table-nesting-announcements.d.ts +5 -0
- package/dist/interfaces/table-nesting-announcements.js +2 -0
- package/dist/interfaces/table-overflow-edges.d.ts +4 -0
- package/dist/interfaces/table-overflow-edges.js +2 -0
- package/dist/interfaces/table-pin-classes.d.ts +5 -0
- package/dist/interfaces/table-pin-classes.js +2 -0
- package/dist/interfaces/table-reorder-nesting-binding.d.ts +8 -0
- package/dist/interfaces/table-reorder-nesting-binding.js +2 -0
- package/dist/interfaces/table-reorder-nesting.d.ts +8 -0
- package/dist/interfaces/table-reorder-nesting.js +2 -0
- package/dist/interfaces/table-reorder-row-props.d.ts +3 -0
- package/dist/interfaces/table-reorder.d.ts +4 -2
- package/dist/services/ps-table-column-size-service.d.ts +1 -0
- package/dist/services/ps-table-column-size-service.js +7 -0
- package/dist/services/ps-table-overflow-service.d.ts +6 -0
- package/dist/services/ps-table-overflow-service.js +15 -0
- package/dist/services/ps-table-pin-service.d.ts +5 -0
- package/dist/services/ps-table-pin-service.js +26 -0
- package/dist/services/ps-table-reorder-service.d.ts +11 -0
- package/dist/services/ps-table-reorder-service.js +38 -1
- package/package.json +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PsTableDropPlacement } from '../constants/ps-table-drop-placement';
|
|
1
2
|
export class PsTableReorderService {
|
|
2
3
|
static runs(items, getKey, getId) {
|
|
3
4
|
const runs = [];
|
|
@@ -32,11 +33,47 @@ export class PsTableReorderService {
|
|
|
32
33
|
next.splice(to, 0, moved);
|
|
33
34
|
return next;
|
|
34
35
|
}
|
|
36
|
+
static pointerY(event, deltaY) {
|
|
37
|
+
if (event instanceof MouseEvent)
|
|
38
|
+
return event.clientY + deltaY;
|
|
39
|
+
if (typeof TouchEvent !== 'undefined' &&
|
|
40
|
+
event instanceof TouchEvent &&
|
|
41
|
+
event.touches.length > 0)
|
|
42
|
+
return event.touches[0].clientY + deltaY;
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
static dropPlacement(pointerY, rect, fallback, isAllowed) {
|
|
46
|
+
const allowed = PsTableReorderService.candidates(pointerY, rect, fallback).find(isAllowed);
|
|
47
|
+
return allowed === undefined ? null : allowed;
|
|
48
|
+
}
|
|
49
|
+
static candidates(pointerY, rect, fallback) {
|
|
50
|
+
if (pointerY === null || rect.height <= 0)
|
|
51
|
+
return [fallback];
|
|
52
|
+
const ratio = (pointerY - rect.top) / rect.height;
|
|
53
|
+
if (ratio < PsTableReorderService.edgeRatio)
|
|
54
|
+
return [PsTableDropPlacement.before, PsTableDropPlacement.into];
|
|
55
|
+
if (ratio > 1 - PsTableReorderService.edgeRatio)
|
|
56
|
+
return [PsTableDropPlacement.after, PsTableDropPlacement.into];
|
|
57
|
+
return [
|
|
58
|
+
PsTableDropPlacement.into,
|
|
59
|
+
ratio < 0.5 ? PsTableDropPlacement.before : PsTableDropPlacement.after,
|
|
60
|
+
];
|
|
61
|
+
}
|
|
35
62
|
}
|
|
63
|
+
PsTableReorderService.edgeRatio = 0.25;
|
|
64
|
+
PsTableReorderService.treeKey = 'tree';
|
|
36
65
|
PsTableReorderService.plain = {
|
|
37
66
|
Row: 'tr',
|
|
38
67
|
isActive: false,
|
|
39
|
-
rowProps: (rowId) => ({
|
|
68
|
+
rowProps: (rowId) => ({
|
|
69
|
+
dropPlacement: null,
|
|
70
|
+
handleLabel: '',
|
|
71
|
+
hasHandle: false,
|
|
72
|
+
isDisabled: true,
|
|
73
|
+
isDropTarget: false,
|
|
74
|
+
rowId,
|
|
75
|
+
}),
|
|
40
76
|
run: (_runId, _ids, children) => children,
|
|
41
77
|
};
|
|
78
|
+
PsTableReorderService.still = () => null;
|
|
42
79
|
PsTableReorderService.lockToVerticalAxis = ({ transform }) => ({ ...transform, x: 0 });
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.usePsTableOverflow = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const ps_table_overflow_service_1 = require("../services/ps-table-overflow-service");
|
|
6
|
+
const usePsTableOverflow = (layoutKey) => {
|
|
7
|
+
const ref = (0, react_1.useRef)(null);
|
|
8
|
+
const [edges, setEdges] = (0, react_1.useState)(ps_table_overflow_service_1.PsTableOverflowService.none);
|
|
9
|
+
const update = (0, react_1.useCallback)(() => {
|
|
10
|
+
const element = ref.current;
|
|
11
|
+
if (element === null)
|
|
12
|
+
return;
|
|
13
|
+
const next = ps_table_overflow_service_1.PsTableOverflowService.edges(element.scrollLeft, element.clientWidth, element.scrollWidth);
|
|
14
|
+
setEdges((current) => (ps_table_overflow_service_1.PsTableOverflowService.isSame(current, next) ? current : next));
|
|
15
|
+
}, []);
|
|
16
|
+
(0, react_1.useEffect)(() => {
|
|
17
|
+
update();
|
|
18
|
+
window.addEventListener('resize', update);
|
|
19
|
+
return () => window.removeEventListener('resize', update);
|
|
20
|
+
}, [layoutKey, update]);
|
|
21
|
+
return { edges, ref, update };
|
|
22
|
+
};
|
|
23
|
+
exports.usePsTableOverflow = usePsTableOverflow;
|
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
import { type DndContextProps } from '@dnd-kit/core';
|
|
2
|
+
import type { PsTableDrop } from '../interfaces/table-drop';
|
|
2
3
|
import type { PsTableReorderAnnouncements } from '../interfaces/table-reorder-announcements';
|
|
3
4
|
import type { PsTableReorderItem } from '../interfaces/table-reorder-item';
|
|
5
|
+
import type { PsTableReorderNestingBinding } from '../interfaces/table-reorder-nesting-binding';
|
|
4
6
|
import type { PsTableReorderPlacement } from '../interfaces/table-reorder-placement';
|
|
5
7
|
export interface UsePsTableReorderInput {
|
|
6
8
|
announcements: PsTableReorderAnnouncements;
|
|
7
9
|
enabled: boolean;
|
|
8
10
|
instructions: string;
|
|
9
11
|
items: PsTableReorderItem[];
|
|
10
|
-
|
|
12
|
+
nesting?: PsTableReorderNestingBinding;
|
|
13
|
+
onReorder?: (groupKey: string, orderedIds: string[]) => void;
|
|
11
14
|
}
|
|
12
15
|
export interface PsTableReorderState {
|
|
13
16
|
activeId: string | null;
|
|
14
17
|
activeRunId: string | null;
|
|
15
18
|
contextProps: Omit<DndContextProps, 'children'>;
|
|
19
|
+
drop: PsTableDrop | null;
|
|
16
20
|
placements: Map<string, PsTableReorderPlacement>;
|
|
17
21
|
}
|
|
18
|
-
export declare const usePsTableReorder: ({ announcements: texts, enabled, instructions, items, onReorder, }: UsePsTableReorderInput) => PsTableReorderState;
|
|
22
|
+
export declare const usePsTableReorder: ({ announcements: texts, enabled, instructions, items, nesting, onReorder, }: UsePsTableReorderInput) => PsTableReorderState;
|
|
@@ -4,9 +4,16 @@ exports.usePsTableReorder = void 0;
|
|
|
4
4
|
const react_1 = require("react");
|
|
5
5
|
const core_1 = require("@dnd-kit/core");
|
|
6
6
|
const ps_core_components_1 = require("@pallasoft/ps-core-components");
|
|
7
|
+
const ps_table_drop_placement_1 = require("../constants/ps-table-drop-placement");
|
|
7
8
|
const ps_table_reorder_service_1 = require("../services/ps-table-reorder-service");
|
|
8
|
-
const
|
|
9
|
+
const pointerThenCenter = (args) => {
|
|
10
|
+
const within = (0, core_1.pointerWithin)(args);
|
|
11
|
+
return within.length > 0 ? within : (0, core_1.closestCenter)(args);
|
|
12
|
+
};
|
|
13
|
+
const usePsTableReorder = ({ announcements: texts, enabled, instructions, items, nesting, onReorder, }) => {
|
|
9
14
|
const [activeId, setActiveId] = (0, react_1.useState)(null);
|
|
15
|
+
const [drop, setDrop] = (0, react_1.useState)(null);
|
|
16
|
+
const dropRef = (0, react_1.useRef)(null);
|
|
10
17
|
const sensors = (0, ps_core_components_1.usePsDragSensors)();
|
|
11
18
|
const runs = (0, react_1.useMemo)(() => enabled
|
|
12
19
|
? ps_table_reorder_service_1.PsTableReorderService.runs(items, (item) => item.groupKey, (item) => item.id)
|
|
@@ -14,6 +21,7 @@ const usePsTableReorder = ({ announcements: texts, enabled, instructions, items,
|
|
|
14
21
|
const placements = (0, react_1.useMemo)(() => ps_table_reorder_service_1.PsTableReorderService.placements(runs, (item) => item.id), [runs]);
|
|
15
22
|
const activePlacement = activeId === null ? undefined : placements.get(activeId);
|
|
16
23
|
const itemById = (0, react_1.useMemo)(() => new Map(items.map((item) => [item.id, item])), [items]);
|
|
24
|
+
const indexById = (0, react_1.useMemo)(() => new Map(items.map((item, index) => [item.id, index])), [items]);
|
|
17
25
|
const labelOf = (id) => {
|
|
18
26
|
const item = itemById.get(id);
|
|
19
27
|
return item === undefined ? id : item.label;
|
|
@@ -26,23 +34,83 @@ const usePsTableReorder = ({ announcements: texts, enabled, instructions, items,
|
|
|
26
34
|
const placement = placements.get(id);
|
|
27
35
|
return placement === undefined ? 0 : placement.size;
|
|
28
36
|
};
|
|
37
|
+
const edgeFor = (activeKey, overId) => {
|
|
38
|
+
const activeIndex = indexById.get(activeKey);
|
|
39
|
+
const overIndex = indexById.get(overId);
|
|
40
|
+
return activeIndex !== undefined && overIndex !== undefined && activeIndex < overIndex
|
|
41
|
+
? ps_table_drop_placement_1.PsTableDropPlacement.after
|
|
42
|
+
: ps_table_drop_placement_1.PsTableDropPlacement.before;
|
|
43
|
+
};
|
|
44
|
+
const resolveDrop = (event) => {
|
|
45
|
+
if (nesting === undefined || event.over === null || event.over.id === event.active.id)
|
|
46
|
+
return null;
|
|
47
|
+
const activeKey = String(event.active.id);
|
|
48
|
+
const overId = String(event.over.id);
|
|
49
|
+
const placement = ps_table_reorder_service_1.PsTableReorderService.dropPlacement(ps_table_reorder_service_1.PsTableReorderService.pointerY(event.activatorEvent, event.delta.y), event.over.rect, edgeFor(activeKey, overId), (candidate) => nesting.canDrop(activeKey, overId, candidate));
|
|
50
|
+
return placement === null ? null : { overId, placement };
|
|
51
|
+
};
|
|
52
|
+
const announcedDrop = (activeKey, overId) => {
|
|
53
|
+
if (nesting === undefined)
|
|
54
|
+
return null;
|
|
55
|
+
const known = dropRef.current;
|
|
56
|
+
if (known !== null && known.overId === overId)
|
|
57
|
+
return known;
|
|
58
|
+
const placement = edgeFor(activeKey, overId);
|
|
59
|
+
return nesting.canDrop(activeKey, overId, placement) ? { overId, placement } : null;
|
|
60
|
+
};
|
|
61
|
+
const describeDrop = (active, target) => nesting === undefined
|
|
62
|
+
? undefined
|
|
63
|
+
: nesting.announcements[target.placement](labelOf(active), labelOf(target.overId));
|
|
29
64
|
const announcements = {
|
|
30
65
|
onDragCancel: ({ active }) => texts.cancelled(labelOf(String(active.id))),
|
|
31
|
-
onDragEnd: ({ active, over }) =>
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
66
|
+
onDragEnd: ({ active, over }) => {
|
|
67
|
+
if (nesting !== undefined) {
|
|
68
|
+
const target = over === null ? null : announcedDrop(String(active.id), String(over.id));
|
|
69
|
+
return target === null
|
|
70
|
+
? texts.cancelled(labelOf(String(active.id)))
|
|
71
|
+
: describeDrop(String(active.id), target);
|
|
72
|
+
}
|
|
73
|
+
return over === null
|
|
74
|
+
? texts.cancelled(labelOf(String(active.id)))
|
|
75
|
+
: texts.dropped(labelOf(String(active.id)), positionOf(String(over.id)), countOf(String(over.id)));
|
|
76
|
+
},
|
|
77
|
+
onDragOver: ({ active, over }) => {
|
|
78
|
+
if (over === null)
|
|
79
|
+
return undefined;
|
|
80
|
+
if (nesting !== undefined) {
|
|
81
|
+
const target = announcedDrop(String(active.id), String(over.id));
|
|
82
|
+
return target === null ? undefined : describeDrop(String(active.id), target);
|
|
83
|
+
}
|
|
84
|
+
return texts.moved(labelOf(String(active.id)), positionOf(String(over.id)), countOf(String(over.id)));
|
|
85
|
+
},
|
|
37
86
|
onDragStart: ({ active }) => texts.lifted(labelOf(String(active.id)), positionOf(String(active.id)), countOf(String(active.id))),
|
|
38
87
|
};
|
|
39
|
-
const
|
|
88
|
+
const handleDragMove = (event) => {
|
|
89
|
+
const next = resolveDrop(event);
|
|
90
|
+
dropRef.current = next;
|
|
91
|
+
setDrop((current) => current !== null &&
|
|
92
|
+
next !== null &&
|
|
93
|
+
current.overId === next.overId &&
|
|
94
|
+
current.placement === next.placement
|
|
95
|
+
? current
|
|
96
|
+
: next);
|
|
97
|
+
};
|
|
98
|
+
const handleDragEnd = (event) => {
|
|
99
|
+
const { active, over } = event;
|
|
100
|
+
const target = resolveDrop(event);
|
|
40
101
|
setActiveId(null);
|
|
41
|
-
|
|
102
|
+
setDrop(null);
|
|
103
|
+
dropRef.current = null;
|
|
104
|
+
if (nesting !== undefined) {
|
|
105
|
+
if (target !== null)
|
|
106
|
+
nesting.onMove(String(active.id), target.overId, target.placement);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (over === null || active.id === over.id || onReorder === undefined)
|
|
42
110
|
return;
|
|
43
111
|
const placement = placements.get(String(active.id));
|
|
44
|
-
const
|
|
45
|
-
if (placement === undefined ||
|
|
112
|
+
const sibling = placements.get(String(over.id));
|
|
113
|
+
if (placement === undefined || sibling === undefined || placement.runId !== sibling.runId)
|
|
46
114
|
return;
|
|
47
115
|
const run = runs.find((candidate) => candidate.id === placement.runId);
|
|
48
116
|
if (run === undefined)
|
|
@@ -54,13 +122,19 @@ const usePsTableReorder = ({ announcements: texts, enabled, instructions, items,
|
|
|
54
122
|
activeRunId: activePlacement === undefined ? null : activePlacement.runId,
|
|
55
123
|
contextProps: {
|
|
56
124
|
accessibility: { announcements, screenReaderInstructions: { draggable: instructions } },
|
|
57
|
-
collisionDetection: core_1.closestCenter,
|
|
125
|
+
collisionDetection: nesting === undefined ? core_1.closestCenter : pointerThenCenter,
|
|
58
126
|
modifiers: [ps_table_reorder_service_1.PsTableReorderService.lockToVerticalAxis],
|
|
59
|
-
onDragCancel: () =>
|
|
127
|
+
onDragCancel: () => {
|
|
128
|
+
setActiveId(null);
|
|
129
|
+
setDrop(null);
|
|
130
|
+
dropRef.current = null;
|
|
131
|
+
},
|
|
60
132
|
onDragEnd: handleDragEnd,
|
|
133
|
+
onDragMove: nesting === undefined ? undefined : handleDragMove,
|
|
61
134
|
onDragStart: ({ active }) => setActiveId(String(active.id)),
|
|
62
135
|
sensors,
|
|
63
136
|
},
|
|
137
|
+
drop,
|
|
64
138
|
placements,
|
|
65
139
|
};
|
|
66
140
|
};
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,9 @@ export * from './components/ps-streamed-rows';
|
|
|
3
3
|
export * from './components/ps-table-stream-status';
|
|
4
4
|
export * from './components/ps-table-group-header';
|
|
5
5
|
export * from './components/ps-table-pagination';
|
|
6
|
+
export * from './constants/table-breakpoint';
|
|
6
7
|
export * from './constants/table-card-role';
|
|
8
|
+
export * from './constants/ps-table-pin-classes';
|
|
7
9
|
export * from './constants/table-column-size';
|
|
8
10
|
export * from './constants/table-filter-kind';
|
|
9
11
|
export * from './interfaces/table-column';
|
|
@@ -27,6 +29,11 @@ export * from './services/ps-table-group-service';
|
|
|
27
29
|
export * from './services/ps-table-query-service';
|
|
28
30
|
export * from './services/ps-table-search-service';
|
|
29
31
|
export * from './services/ps-table-scroll-service';
|
|
32
|
+
export * from './services/ps-table-pin-service';
|
|
33
|
+
export * from './services/ps-table-overflow-service';
|
|
34
|
+
export * from './hooks/use-ps-table-overflow';
|
|
35
|
+
export * from './interfaces/table-pin-classes';
|
|
36
|
+
export * from './interfaces/table-overflow-edges';
|
|
30
37
|
export * from './services/ps-table-stream-service';
|
|
31
38
|
export * from './components/ps-table-export-button';
|
|
32
39
|
export * from './constants/ps-table-download-config';
|
|
@@ -36,4 +43,7 @@ export * from './hooks/use-ps-table-page';
|
|
|
36
43
|
export * from './interfaces/ps-table-page-state';
|
|
37
44
|
export * from './interfaces/table-reorder';
|
|
38
45
|
export * from './interfaces/table-reorder-announcements';
|
|
46
|
+
export * from './interfaces/table-reorder-nesting';
|
|
47
|
+
export * from './interfaces/table-nesting-announcements';
|
|
48
|
+
export * from './constants/ps-table-drop-placement';
|
|
39
49
|
export * from './services/ps-table-reorder-service';
|
package/dist/index.js
CHANGED
|
@@ -19,7 +19,9 @@ __exportStar(require("./components/ps-streamed-rows"), exports);
|
|
|
19
19
|
__exportStar(require("./components/ps-table-stream-status"), exports);
|
|
20
20
|
__exportStar(require("./components/ps-table-group-header"), exports);
|
|
21
21
|
__exportStar(require("./components/ps-table-pagination"), exports);
|
|
22
|
+
__exportStar(require("./constants/table-breakpoint"), exports);
|
|
22
23
|
__exportStar(require("./constants/table-card-role"), exports);
|
|
24
|
+
__exportStar(require("./constants/ps-table-pin-classes"), exports);
|
|
23
25
|
__exportStar(require("./constants/table-column-size"), exports);
|
|
24
26
|
__exportStar(require("./constants/table-filter-kind"), exports);
|
|
25
27
|
__exportStar(require("./interfaces/table-column"), exports);
|
|
@@ -43,6 +45,11 @@ __exportStar(require("./services/ps-table-group-service"), exports);
|
|
|
43
45
|
__exportStar(require("./services/ps-table-query-service"), exports);
|
|
44
46
|
__exportStar(require("./services/ps-table-search-service"), exports);
|
|
45
47
|
__exportStar(require("./services/ps-table-scroll-service"), exports);
|
|
48
|
+
__exportStar(require("./services/ps-table-pin-service"), exports);
|
|
49
|
+
__exportStar(require("./services/ps-table-overflow-service"), exports);
|
|
50
|
+
__exportStar(require("./hooks/use-ps-table-overflow"), exports);
|
|
51
|
+
__exportStar(require("./interfaces/table-pin-classes"), exports);
|
|
52
|
+
__exportStar(require("./interfaces/table-overflow-edges"), exports);
|
|
46
53
|
__exportStar(require("./services/ps-table-stream-service"), exports);
|
|
47
54
|
__exportStar(require("./components/ps-table-export-button"), exports);
|
|
48
55
|
__exportStar(require("./constants/ps-table-download-config"), exports);
|
|
@@ -52,4 +59,7 @@ __exportStar(require("./hooks/use-ps-table-page"), exports);
|
|
|
52
59
|
__exportStar(require("./interfaces/ps-table-page-state"), exports);
|
|
53
60
|
__exportStar(require("./interfaces/table-reorder"), exports);
|
|
54
61
|
__exportStar(require("./interfaces/table-reorder-announcements"), exports);
|
|
62
|
+
__exportStar(require("./interfaces/table-reorder-nesting"), exports);
|
|
63
|
+
__exportStar(require("./interfaces/table-nesting-announcements"), exports);
|
|
64
|
+
__exportStar(require("./constants/ps-table-drop-placement"), exports);
|
|
55
65
|
__exportStar(require("./services/ps-table-reorder-service"), exports);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
|
+
import type { PsTableBreakpoint } from '../constants/table-breakpoint';
|
|
2
3
|
import type { PsTableCardRole } from '../constants/table-card-role';
|
|
3
4
|
import type { PsTableColumnSize } from '../constants/table-column-size';
|
|
4
5
|
import type { PsTableColumnFilter } from './table-column-filter';
|
|
@@ -9,10 +10,14 @@ export interface PsTableColumn<RowData> {
|
|
|
9
10
|
cardRole?: PsTableCardRole;
|
|
10
11
|
filter?: PsTableColumnFilter<RowData>;
|
|
11
12
|
footer?: ReactNode;
|
|
13
|
+
hideBelow?: PsTableBreakpoint;
|
|
12
14
|
hideOnCards?: boolean;
|
|
13
15
|
id: string;
|
|
14
16
|
label: string;
|
|
17
|
+
/** Formatted text of the cell (for example the money string). The column is widened to fit the longest value, so numbers never truncate. */
|
|
18
|
+
measure?: (row: RowData) => string;
|
|
15
19
|
minWidth?: string;
|
|
20
|
+
pinEnd?: boolean;
|
|
16
21
|
render: (row: RowData) => ReactNode;
|
|
17
22
|
size?: PsTableColumnSize;
|
|
18
23
|
sortValue?: (row: RowData) => string | number | null;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { PsTableDropPlacement } from '../constants/ps-table-drop-placement';
|
|
2
|
+
import type { PsTableNestingAnnouncements } from './table-nesting-announcements';
|
|
3
|
+
export interface PsTableReorderNestingBinding {
|
|
4
|
+
announcements: PsTableNestingAnnouncements;
|
|
5
|
+
canDrag: (id: string) => boolean;
|
|
6
|
+
canDrop: (activeId: string, targetId: string, placement: PsTableDropPlacement) => boolean;
|
|
7
|
+
onMove: (activeId: string, targetId: string, placement: PsTableDropPlacement) => void;
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { PsTableDropPlacement } from '../constants/ps-table-drop-placement';
|
|
2
|
+
import type { PsTableNestingAnnouncements } from './table-nesting-announcements';
|
|
3
|
+
export interface PsTableReorderNesting<RowData> {
|
|
4
|
+
announcements: PsTableNestingAnnouncements;
|
|
5
|
+
canDrag: (row: RowData) => boolean;
|
|
6
|
+
canDrop: (active: RowData, target: RowData, placement: PsTableDropPlacement) => boolean;
|
|
7
|
+
onMove: (active: RowData, target: RowData, placement: PsTableDropPlacement) => void;
|
|
8
|
+
}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import type { PsTableDropPlacement } from '../constants/ps-table-drop-placement';
|
|
1
2
|
export interface PsTableReorderRowProps {
|
|
3
|
+
dropPlacement: PsTableDropPlacement | null;
|
|
2
4
|
handleLabel: string;
|
|
3
5
|
hasHandle: boolean;
|
|
4
6
|
isDisabled: boolean;
|
|
7
|
+
isDropTarget: boolean;
|
|
5
8
|
rowId: string;
|
|
6
9
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { PsTableReorderAnnouncements } from './table-reorder-announcements';
|
|
2
|
+
import type { PsTableReorderNesting } from './table-reorder-nesting';
|
|
2
3
|
export interface PsTableReorder<RowData> {
|
|
3
4
|
announcements: PsTableReorderAnnouncements;
|
|
4
5
|
cardsReason?: string;
|
|
@@ -6,7 +7,8 @@ export interface PsTableReorder<RowData> {
|
|
|
6
7
|
disabledReason?: string;
|
|
7
8
|
enabled: boolean;
|
|
8
9
|
getHandleLabel: (rowLabel: string) => string;
|
|
9
|
-
groupKey
|
|
10
|
+
groupKey?: (row: RowData) => string;
|
|
10
11
|
instructions: string;
|
|
11
|
-
|
|
12
|
+
nesting?: PsTableReorderNesting<RowData>;
|
|
13
|
+
onReorder?: (groupKey: string, orderedIds: string[]) => void;
|
|
12
14
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { PsTableColumnSize } from '../constants/table-column-size';
|
|
2
2
|
import type { PsTableColumn } from '../interfaces/table-column';
|
|
3
3
|
export declare class PsTableColumnSizeService {
|
|
4
|
+
static fittedMinWidthOf<RowData>(column: PsTableColumn<RowData>, rows: RowData[]): string | undefined;
|
|
4
5
|
static sizeOf<RowData>(column: PsTableColumn<RowData>): PsTableColumnSize;
|
|
5
6
|
static minWidthOf<RowData>(column: PsTableColumn<RowData>): string;
|
|
6
7
|
static maxWidthOf<RowData>(column: PsTableColumn<RowData>): string | undefined;
|
|
@@ -4,6 +4,13 @@ exports.PsTableColumnSizeService = void 0;
|
|
|
4
4
|
const table_column_size_1 = require("../constants/table-column-size");
|
|
5
5
|
const table_filter_kind_1 = require("../constants/table-filter-kind");
|
|
6
6
|
class PsTableColumnSizeService {
|
|
7
|
+
static fittedMinWidthOf(column, rows) {
|
|
8
|
+
const measure = column.measure;
|
|
9
|
+
if (measure === undefined)
|
|
10
|
+
return undefined;
|
|
11
|
+
const longest = rows.reduce((length, row) => Math.max(length, measure(row).length), 0);
|
|
12
|
+
return `max(${PsTableColumnSizeService.minWidthOf(column)}, calc(${(longest * 1.1).toFixed(1)}ch + 3rem))`;
|
|
13
|
+
}
|
|
7
14
|
static sizeOf(column) {
|
|
8
15
|
if (column.size !== undefined)
|
|
9
16
|
return column.size;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { PsTableOverflowEdges } from '../interfaces/table-overflow-edges';
|
|
2
|
+
export declare class PsTableOverflowService {
|
|
3
|
+
static readonly none: PsTableOverflowEdges;
|
|
4
|
+
static edges(scrollLeft: number, clientWidth: number, scrollWidth: number): PsTableOverflowEdges;
|
|
5
|
+
static isSame(current: PsTableOverflowEdges, next: PsTableOverflowEdges): boolean;
|
|
6
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PsTableOverflowService = void 0;
|
|
4
|
+
class PsTableOverflowService {
|
|
5
|
+
static edges(scrollLeft, clientWidth, scrollWidth) {
|
|
6
|
+
const start = Math.abs(scrollLeft) > 0.5;
|
|
7
|
+
const end = scrollWidth - clientWidth - Math.abs(scrollLeft) > 0.5;
|
|
8
|
+
return { end, start };
|
|
9
|
+
}
|
|
10
|
+
static isSame(current, next) {
|
|
11
|
+
return current.end === next.end && current.start === next.start;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.PsTableOverflowService = PsTableOverflowService;
|
|
15
|
+
PsTableOverflowService.none = { end: false, start: false };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { PsTableLeadingPinClasses } from '../interfaces/table-pin-classes';
|
|
2
|
+
export declare class PsTablePinService {
|
|
3
|
+
static leading(isPinned: boolean, hasReorder: boolean, isSelectable: boolean): PsTableLeadingPinClasses;
|
|
4
|
+
static end(isPinned: boolean): string;
|
|
5
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PsTablePinService = void 0;
|
|
4
|
+
const ps_table_pin_classes_1 = require("../constants/ps-table-pin-classes");
|
|
5
|
+
class PsTablePinService {
|
|
6
|
+
static leading(isPinned, hasReorder, isSelectable) {
|
|
7
|
+
if (!isPinned)
|
|
8
|
+
return { first: '', reorder: '', select: '' };
|
|
9
|
+
const firstOffset = hasReorder && isSelectable
|
|
10
|
+
? ps_table_pin_classes_1.PsTablePinClasses.first.both
|
|
11
|
+
: hasReorder
|
|
12
|
+
? ps_table_pin_classes_1.PsTablePinClasses.first.reorder
|
|
13
|
+
: isSelectable
|
|
14
|
+
? ps_table_pin_classes_1.PsTablePinClasses.first.select
|
|
15
|
+
: ps_table_pin_classes_1.PsTablePinClasses.first.none;
|
|
16
|
+
return {
|
|
17
|
+
first: `${ps_table_pin_classes_1.PsTablePinClasses.cell} ${ps_table_pin_classes_1.PsTablePinClasses.edge} ${firstOffset}`,
|
|
18
|
+
reorder: `${ps_table_pin_classes_1.PsTablePinClasses.cell} ${ps_table_pin_classes_1.PsTablePinClasses.reorder}`,
|
|
19
|
+
select: `${ps_table_pin_classes_1.PsTablePinClasses.cell} ${hasReorder ? ps_table_pin_classes_1.PsTablePinClasses.select.withReorder : ps_table_pin_classes_1.PsTablePinClasses.select.alone}`,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
static end(isPinned) {
|
|
23
|
+
return isPinned ? ps_table_pin_classes_1.PsTablePinClasses.end : '';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.PsTablePinService = PsTablePinService;
|
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
import type { Modifier } from '@dnd-kit/core';
|
|
2
|
+
import type { SortingStrategy } from '@dnd-kit/sortable';
|
|
3
|
+
import { PsTableDropPlacement } from '../constants/ps-table-drop-placement';
|
|
2
4
|
import type { PsTableReorderApi } from '../interfaces/table-reorder-api';
|
|
3
5
|
import type { PsTableReorderPlacement } from '../interfaces/table-reorder-placement';
|
|
4
6
|
import type { PsTableReorderRun } from '../interfaces/table-reorder-run';
|
|
5
7
|
export declare class PsTableReorderService {
|
|
8
|
+
static readonly edgeRatio = 0.25;
|
|
9
|
+
static readonly treeKey = "tree";
|
|
6
10
|
static readonly plain: PsTableReorderApi;
|
|
7
11
|
static runs<Item>(items: Item[], getKey: (item: Item) => string, getId: (item: Item) => string): PsTableReorderRun<Item>[];
|
|
8
12
|
static placements<Item>(runs: PsTableReorderRun<Item>[], getId: (item: Item) => string): Map<string, PsTableReorderPlacement>;
|
|
9
13
|
static move(ids: string[], activeId: string, overId: string): string[];
|
|
14
|
+
static pointerY(event: Event | null, deltaY: number): number | null;
|
|
15
|
+
static dropPlacement(pointerY: number | null, rect: {
|
|
16
|
+
height: number;
|
|
17
|
+
top: number;
|
|
18
|
+
}, fallback: PsTableDropPlacement, isAllowed: (placement: PsTableDropPlacement) => boolean): PsTableDropPlacement | null;
|
|
19
|
+
private static candidates;
|
|
20
|
+
static readonly still: SortingStrategy;
|
|
10
21
|
static readonly lockToVerticalAxis: Modifier;
|
|
11
22
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PsTableReorderService = void 0;
|
|
4
|
+
const ps_table_drop_placement_1 = require("../constants/ps-table-drop-placement");
|
|
4
5
|
class PsTableReorderService {
|
|
5
6
|
static runs(items, getKey, getId) {
|
|
6
7
|
const runs = [];
|
|
@@ -35,12 +36,48 @@ class PsTableReorderService {
|
|
|
35
36
|
next.splice(to, 0, moved);
|
|
36
37
|
return next;
|
|
37
38
|
}
|
|
39
|
+
static pointerY(event, deltaY) {
|
|
40
|
+
if (event instanceof MouseEvent)
|
|
41
|
+
return event.clientY + deltaY;
|
|
42
|
+
if (typeof TouchEvent !== 'undefined' &&
|
|
43
|
+
event instanceof TouchEvent &&
|
|
44
|
+
event.touches.length > 0)
|
|
45
|
+
return event.touches[0].clientY + deltaY;
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
static dropPlacement(pointerY, rect, fallback, isAllowed) {
|
|
49
|
+
const allowed = PsTableReorderService.candidates(pointerY, rect, fallback).find(isAllowed);
|
|
50
|
+
return allowed === undefined ? null : allowed;
|
|
51
|
+
}
|
|
52
|
+
static candidates(pointerY, rect, fallback) {
|
|
53
|
+
if (pointerY === null || rect.height <= 0)
|
|
54
|
+
return [fallback];
|
|
55
|
+
const ratio = (pointerY - rect.top) / rect.height;
|
|
56
|
+
if (ratio < PsTableReorderService.edgeRatio)
|
|
57
|
+
return [ps_table_drop_placement_1.PsTableDropPlacement.before, ps_table_drop_placement_1.PsTableDropPlacement.into];
|
|
58
|
+
if (ratio > 1 - PsTableReorderService.edgeRatio)
|
|
59
|
+
return [ps_table_drop_placement_1.PsTableDropPlacement.after, ps_table_drop_placement_1.PsTableDropPlacement.into];
|
|
60
|
+
return [
|
|
61
|
+
ps_table_drop_placement_1.PsTableDropPlacement.into,
|
|
62
|
+
ratio < 0.5 ? ps_table_drop_placement_1.PsTableDropPlacement.before : ps_table_drop_placement_1.PsTableDropPlacement.after,
|
|
63
|
+
];
|
|
64
|
+
}
|
|
38
65
|
}
|
|
39
66
|
exports.PsTableReorderService = PsTableReorderService;
|
|
67
|
+
PsTableReorderService.edgeRatio = 0.25;
|
|
68
|
+
PsTableReorderService.treeKey = 'tree';
|
|
40
69
|
PsTableReorderService.plain = {
|
|
41
70
|
Row: 'tr',
|
|
42
71
|
isActive: false,
|
|
43
|
-
rowProps: (rowId) => ({
|
|
72
|
+
rowProps: (rowId) => ({
|
|
73
|
+
dropPlacement: null,
|
|
74
|
+
handleLabel: '',
|
|
75
|
+
hasHandle: false,
|
|
76
|
+
isDisabled: true,
|
|
77
|
+
isDropTarget: false,
|
|
78
|
+
rowId,
|
|
79
|
+
}),
|
|
44
80
|
run: (_runId, _ids, children) => children,
|
|
45
81
|
};
|
|
82
|
+
PsTableReorderService.still = () => null;
|
|
46
83
|
PsTableReorderService.lockToVerticalAxis = ({ transform }) => ({ ...transform, x: 0 });
|