@pega/lists-react 10.0.0-build.1.9 → 10.0.0-build.10.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/README.md +284 -83
- package/lib/Core/Components/AggregateMenu.d.ts.map +1 -1
- package/lib/Core/Components/AggregateMenu.js +2 -1
- package/lib/Core/Components/AggregateMenu.js.map +1 -1
- package/lib/Core/Components/Card/CardFieldValue.d.ts +8 -0
- package/lib/Core/Components/Card/CardFieldValue.d.ts.map +1 -0
- package/lib/Core/Components/Card/CardFieldValue.js +8 -0
- package/lib/Core/Components/Card/CardFieldValue.js.map +1 -0
- package/lib/Core/Components/Card/CardHeader.d.ts +9 -0
- package/lib/Core/Components/Card/CardHeader.d.ts.map +1 -0
- package/lib/Core/{Views/Gallery/Components/GalleryHeader.js → Components/Card/CardHeader.js} +6 -5
- package/lib/Core/Components/Card/CardHeader.js.map +1 -0
- package/lib/Core/Components/Card/CardSubHeading.d.ts +10 -0
- package/lib/Core/Components/Card/CardSubHeading.d.ts.map +1 -0
- package/lib/Core/Components/Card/CardSubHeading.js +9 -0
- package/lib/Core/Components/Card/CardSubHeading.js.map +1 -0
- package/lib/Core/Components/Card/cardData.d.ts +48 -0
- package/lib/Core/Components/Card/cardData.d.ts.map +1 -0
- package/lib/Core/{Views/Gallery/utils.js → Components/Card/cardData.js} +55 -52
- package/lib/Core/Components/Card/cardData.js.map +1 -0
- package/lib/Core/Components/Card/index.d.ts +4 -0
- package/lib/Core/Components/Card/index.d.ts.map +1 -0
- package/lib/Core/Components/Card/index.js +4 -0
- package/lib/Core/Components/Card/index.js.map +1 -0
- package/lib/Core/Components/DefaultComponents/CellRenderers/RowActionMenu.d.ts.map +1 -1
- package/lib/Core/Components/DefaultComponents/CellRenderers/RowActionMenu.js +6 -53
- package/lib/Core/Components/DefaultComponents/CellRenderers/RowActionMenu.js.map +1 -1
- package/lib/Core/Components/DefaultComponents/CellRenderers/RowDeleteAction.d.ts.map +1 -1
- package/lib/Core/Components/DefaultComponents/CellRenderers/RowDeleteAction.js +12 -2
- package/lib/Core/Components/DefaultComponents/CellRenderers/RowDeleteAction.js.map +1 -1
- package/lib/Core/Components/DefaultComponents/CellRenderers/RowSelectHandle.js +9 -2
- package/lib/Core/Components/DefaultComponents/CellRenderers/RowSelectHandle.js.map +1 -1
- package/lib/Core/Components/DefaultComponents/EmptyContainer.d.ts +2 -1
- package/lib/Core/Components/DefaultComponents/EmptyContainer.d.ts.map +1 -1
- package/lib/Core/Components/DefaultComponents/EmptyContainer.js +3 -3
- package/lib/Core/Components/DefaultComponents/EmptyContainer.js.map +1 -1
- package/lib/Core/Components/DefaultComponents/PersonalizationCreateEdit.d.ts.map +1 -1
- package/lib/Core/Components/DefaultComponents/PersonalizationCreateEdit.js +5 -4
- package/lib/Core/Components/DefaultComponents/PersonalizationCreateEdit.js.map +1 -1
- package/lib/Core/Components/DefaultComponents/index.d.ts +2 -1
- package/lib/Core/Components/DefaultComponents/index.d.ts.map +1 -1
- package/lib/Core/Components/DynamicFieldConfiguration.d.ts +3 -1
- package/lib/Core/Components/DynamicFieldConfiguration.d.ts.map +1 -1
- package/lib/Core/Components/DynamicFieldConfiguration.js +7 -4
- package/lib/Core/Components/DynamicFieldConfiguration.js.map +1 -1
- package/lib/Core/Components/Filters/AdvanceFilter.d.ts.map +1 -1
- package/lib/Core/Components/Filters/AdvanceFilter.js +5 -5
- package/lib/Core/Components/Filters/AdvanceFilter.js.map +1 -1
- package/lib/Core/Components/Filters/BooleanFilter.js +2 -2
- package/lib/Core/Components/Filters/BooleanFilter.js.map +1 -1
- package/lib/Core/Components/Filters/CommonFilter.js +1 -1
- package/lib/Core/Components/Filters/CommonFilter.js.map +1 -1
- package/lib/Core/Components/Filters/SelectFilter.d.ts.map +1 -1
- package/lib/Core/Components/Filters/SelectFilter.js +24 -5
- package/lib/Core/Components/Filters/SelectFilter.js.map +1 -1
- package/lib/Core/Components/Filters/SimpleFilter.js +2 -3
- package/lib/Core/Components/Filters/SimpleFilter.js.map +1 -1
- package/lib/Core/Components/GroupRenderer/index.d.ts.map +1 -1
- package/lib/Core/Components/GroupRenderer/index.js +7 -2
- package/lib/Core/Components/GroupRenderer/index.js.map +1 -1
- package/lib/Core/Components/HeaderMenu/index.d.ts.map +1 -1
- package/lib/Core/Components/HeaderMenu/index.js +2 -3
- package/lib/Core/Components/HeaderMenu/index.js.map +1 -1
- package/lib/Core/Components/NotificationManager.js +1 -1
- package/lib/Core/Components/NotificationManager.js.map +1 -1
- package/lib/Core/Components/RFColumnConfigurator.d.ts +1 -1
- package/lib/Core/Components/RFColumnConfigurator.d.ts.map +1 -1
- package/lib/Core/Components/RFColumnConfigurator.js +9 -6
- package/lib/Core/Components/RFColumnConfigurator.js.map +1 -1
- package/lib/Core/Components/RSWrapper/index.d.ts.map +1 -1
- package/lib/Core/Components/RSWrapper/index.js +4 -0
- package/lib/Core/Components/RSWrapper/index.js.map +1 -1
- package/lib/Core/Components/RenderingEngine/ComponentResolverFactory.d.ts +1 -0
- package/lib/Core/Components/RenderingEngine/ComponentResolverFactory.d.ts.map +1 -1
- package/lib/Core/Components/RenderingEngine/ComponentResolverFactory.js +6 -1
- package/lib/Core/Components/RenderingEngine/ComponentResolverFactory.js.map +1 -1
- package/lib/Core/Components/Toolbar/AdvanceToolbar.d.ts.map +1 -1
- package/lib/Core/Components/Toolbar/AdvanceToolbar.js +13 -4
- package/lib/Core/Components/Toolbar/AdvanceToolbar.js.map +1 -1
- package/lib/Core/Components/Toolbar/ColumnSelector.d.ts.map +1 -1
- package/lib/Core/Components/Toolbar/ColumnSelector.js +13 -3
- package/lib/Core/Components/Toolbar/ColumnSelector.js.map +1 -1
- package/lib/Core/Components/Toolbar/FieldSelector.js +1 -1
- package/lib/Core/Components/Toolbar/FieldSelector.js.map +1 -1
- package/lib/Core/Components/Toolbar/Map/MapToolbar.d.ts +2 -2
- package/lib/Core/Components/Toolbar/Map/MapToolbar.d.ts.map +1 -1
- package/lib/Core/Components/Toolbar/Map/MapToolbar.js +17 -18
- package/lib/Core/Components/Toolbar/Map/MapToolbar.js.map +1 -1
- package/lib/Core/Components/Toolbar/RefreshBanner.d.ts +5 -1
- package/lib/Core/Components/Toolbar/RefreshBanner.d.ts.map +1 -1
- package/lib/Core/Components/Toolbar/RefreshBanner.js +22 -6
- package/lib/Core/Components/Toolbar/RefreshBanner.js.map +1 -1
- package/lib/Core/Components/Toolbar/SimpleToolbar.d.ts.map +1 -1
- package/lib/Core/Components/Toolbar/SimpleToolbar.js +2 -2
- package/lib/Core/Components/Toolbar/SimpleToolbar.js.map +1 -1
- package/lib/Core/Components/Toolbar/hooks/useFilter.d.ts.map +1 -1
- package/lib/Core/Components/Toolbar/hooks/useFilter.js +1 -1
- package/lib/Core/Components/Toolbar/hooks/useFilter.js.map +1 -1
- package/lib/Core/Components/Toolbar/hooks/useMore.d.ts.map +1 -1
- package/lib/Core/Components/Toolbar/hooks/useMore.js +23 -5
- package/lib/Core/Components/Toolbar/hooks/useMore.js.map +1 -1
- package/lib/Core/Components/Toolbar/hooks/usePersonalization.d.ts +1 -0
- package/lib/Core/Components/Toolbar/hooks/usePersonalization.d.ts.map +1 -1
- package/lib/Core/Components/Toolbar/hooks/usePersonalization.js +4 -2
- package/lib/Core/Components/Toolbar/hooks/usePersonalization.js.map +1 -1
- package/lib/Core/Components/Toolbar/utils/utils.d.ts +3 -3
- package/lib/Core/Components/Toolbar/utils/utils.d.ts.map +1 -1
- package/lib/Core/Components/Toolbar/utils/utils.js +16 -10
- package/lib/Core/Components/Toolbar/utils/utils.js.map +1 -1
- package/lib/Core/Components/Virtualise/VariableHeightVirtualizer/VariableHeightVirtualizer.d.ts.map +1 -1
- package/lib/Core/Components/Virtualise/VariableHeightVirtualizer/VariableHeightVirtualizer.js +2 -2
- package/lib/Core/Components/Virtualise/VariableHeightVirtualizer/VariableHeightVirtualizer.js.map +1 -1
- package/lib/Core/Components/Virtualise/VirtualizeInfinite.js +6 -4
- package/lib/Core/Components/Virtualise/VirtualizeInfinite.js.map +1 -1
- package/lib/Core/Components/Virtualise/index.js +7 -5
- package/lib/Core/Components/Virtualise/index.js.map +1 -1
- package/lib/Core/Utils/fetchRowActions.d.ts +16 -0
- package/lib/Core/Utils/fetchRowActions.d.ts.map +1 -0
- package/lib/Core/Utils/fetchRowActions.js +60 -0
- package/lib/Core/Utils/fetchRowActions.js.map +1 -0
- package/lib/Core/Utils/styles.d.ts +9 -0
- package/lib/Core/Utils/styles.d.ts.map +1 -1
- package/lib/Core/Utils/styles.js +8 -3
- package/lib/Core/Utils/styles.js.map +1 -1
- package/lib/Core/Views/Gallery/Components/GalleryCard.d.ts +1 -1
- package/lib/Core/Views/Gallery/Components/GalleryCard.d.ts.map +1 -1
- package/lib/Core/Views/Gallery/Components/GalleryCard.js +13 -9
- package/lib/Core/Views/Gallery/Components/GalleryCard.js.map +1 -1
- package/lib/Core/Views/Gallery/Components/GalleryCheckboxCard.d.ts.map +1 -1
- package/lib/Core/Views/Gallery/Components/GalleryCheckboxCard.js +8 -5
- package/lib/Core/Views/Gallery/Components/GalleryCheckboxCard.js.map +1 -1
- package/lib/Core/Views/Gallery/Gallery.types.d.ts +1 -0
- package/lib/Core/Views/Gallery/Gallery.types.d.ts.map +1 -1
- package/lib/Core/Views/Gallery/Gallery.types.js.map +1 -1
- package/lib/Core/Views/Gallery/GalleryContainer.d.ts.map +1 -1
- package/lib/Core/Views/Gallery/GalleryContainer.js +1 -1
- package/lib/Core/Views/Gallery/GalleryContainer.js.map +1 -1
- package/lib/Core/Views/Gallery/index.d.ts +1 -1
- package/lib/Core/Views/Gallery/index.d.ts.map +1 -1
- package/lib/Core/Views/Gallery/index.js +6 -9
- package/lib/Core/Views/Gallery/index.js.map +1 -1
- package/lib/Core/Views/Kanban/Kanban.styles.d.ts +16 -0
- package/lib/Core/Views/Kanban/Kanban.styles.d.ts.map +1 -0
- package/lib/Core/Views/Kanban/Kanban.styles.js +58 -0
- package/lib/Core/Views/Kanban/Kanban.styles.js.map +1 -0
- package/lib/Core/Views/Kanban/Kanban.types.d.ts +10 -0
- package/lib/Core/Views/Kanban/Kanban.types.d.ts.map +1 -0
- package/lib/Core/Views/Kanban/Kanban.types.js +2 -0
- package/lib/Core/Views/Kanban/Kanban.types.js.map +1 -0
- package/lib/Core/Views/Kanban/KanbanCard.d.ts +7 -0
- package/lib/Core/Views/Kanban/KanbanCard.d.ts.map +1 -0
- package/lib/Core/Views/Kanban/KanbanCard.js +23 -0
- package/lib/Core/Views/Kanban/KanbanCard.js.map +1 -0
- package/lib/Core/Views/Kanban/KanbanLane.d.ts +23 -0
- package/lib/Core/Views/Kanban/KanbanLane.d.ts.map +1 -0
- package/lib/Core/Views/Kanban/KanbanLane.js +21 -0
- package/lib/Core/Views/Kanban/KanbanLane.js.map +1 -0
- package/lib/Core/Views/Kanban/KanbanLaneHeader.d.ts +12 -0
- package/lib/Core/Views/Kanban/KanbanLaneHeader.d.ts.map +1 -0
- package/lib/Core/Views/Kanban/KanbanLaneHeader.js +16 -0
- package/lib/Core/Views/Kanban/KanbanLaneHeader.js.map +1 -0
- package/lib/Core/Views/Kanban/KanbanLaneVirtualizer.d.ts +20 -0
- package/lib/Core/Views/Kanban/KanbanLaneVirtualizer.d.ts.map +1 -0
- package/lib/Core/Views/Kanban/KanbanLaneVirtualizer.js +37 -0
- package/lib/Core/Views/Kanban/KanbanLaneVirtualizer.js.map +1 -0
- package/lib/Core/Views/Kanban/hooks/useKanbanLanesVirtualization.d.ts +19 -0
- package/lib/Core/Views/Kanban/hooks/useKanbanLanesVirtualization.d.ts.map +1 -0
- package/lib/Core/Views/Kanban/hooks/useKanbanLanesVirtualization.js +32 -0
- package/lib/Core/Views/Kanban/hooks/useKanbanLanesVirtualization.js.map +1 -0
- package/lib/Core/Views/Kanban/index.d.ts +9 -0
- package/lib/Core/Views/Kanban/index.d.ts.map +1 -0
- package/lib/Core/Views/Kanban/index.js +63 -0
- package/lib/Core/Views/Kanban/index.js.map +1 -0
- package/lib/Core/Views/Table/CellWrapper.d.ts +3 -1
- package/lib/Core/Views/Table/CellWrapper.d.ts.map +1 -1
- package/lib/Core/Views/Table/CellWrapper.js +4 -3
- package/lib/Core/Views/Table/CellWrapper.js.map +1 -1
- package/lib/Core/Views/Table/Row.d.ts.map +1 -1
- package/lib/Core/Views/Table/Row.js +22 -10
- package/lib/Core/Views/Table/Row.js.map +1 -1
- package/lib/Core/Views/Table/StyledTableContainer.d.ts.map +1 -1
- package/lib/Core/Views/Table/StyledTableContainer.js +110 -32
- package/lib/Core/Views/Table/StyledTableContainer.js.map +1 -1
- package/lib/Core/Views/Table/VirtualizeWrapper.d.ts +3 -1
- package/lib/Core/Views/Table/VirtualizeWrapper.d.ts.map +1 -1
- package/lib/Core/Views/Table/VirtualizeWrapper.js +6 -5
- package/lib/Core/Views/Table/VirtualizeWrapper.js.map +1 -1
- package/lib/Core/Views/Table/index.d.ts.map +1 -1
- package/lib/Core/Views/Table/index.js +15 -6
- package/lib/Core/Views/Table/index.js.map +1 -1
- package/lib/Core/Views/Table/useMasterDetailCleanup.d.ts +11 -0
- package/lib/Core/Views/Table/useMasterDetailCleanup.d.ts.map +1 -0
- package/lib/Core/Views/Table/useMasterDetailCleanup.js +27 -0
- package/lib/Core/Views/Table/useMasterDetailCleanup.js.map +1 -0
- package/lib/Core/Views/Table/useMasterDetailHost.d.ts +14 -0
- package/lib/Core/Views/Table/useMasterDetailHost.d.ts.map +1 -0
- package/lib/Core/Views/Table/useMasterDetailHost.js +56 -0
- package/lib/Core/Views/Table/useMasterDetailHost.js.map +1 -0
- package/lib/Core/Views/Table/useMasterDetailRenderer.d.ts +13 -0
- package/lib/Core/Views/Table/useMasterDetailRenderer.d.ts.map +1 -0
- package/lib/Core/Views/Table/useMasterDetailRenderer.js +23 -0
- package/lib/Core/Views/Table/useMasterDetailRenderer.js.map +1 -0
- package/lib/Core/Views/Table/useMasterDetailRow.d.ts +9 -0
- package/lib/Core/Views/Table/useMasterDetailRow.d.ts.map +1 -0
- package/lib/Core/Views/Table/useMasterDetailRow.js +55 -0
- package/lib/Core/Views/Table/useMasterDetailRow.js.map +1 -0
- package/lib/Core/Views/Table/useMasterDetailState.d.ts +21 -0
- package/lib/Core/Views/Table/useMasterDetailState.d.ts.map +1 -0
- package/lib/Core/Views/Table/useMasterDetailState.js +33 -0
- package/lib/Core/Views/Table/useMasterDetailState.js.map +1 -0
- package/lib/Core/Views/Timeline/Timeline.d.ts.map +1 -1
- package/lib/Core/Views/Timeline/Timeline.js +2 -2
- package/lib/Core/Views/Timeline/Timeline.js.map +1 -1
- package/lib/Core/Views/Timeline/Timeline.styles.d.ts +2 -2
- package/lib/Core/Views/Timeline/Timeline.types.d.ts +9 -10
- package/lib/Core/Views/Timeline/Timeline.types.d.ts.map +1 -1
- package/lib/Core/Views/Timeline/Timeline.types.js.map +1 -1
- package/lib/Core/Views/Timeline/TimelineGroup.d.ts +4 -10
- package/lib/Core/Views/Timeline/TimelineGroup.d.ts.map +1 -1
- package/lib/Core/Views/Timeline/TimelineGroup.js +5 -6
- package/lib/Core/Views/Timeline/TimelineGroup.js.map +1 -1
- package/lib/Core/Views/Timeline/index.d.ts.map +1 -1
- package/lib/Core/Views/Timeline/index.js +38 -10
- package/lib/Core/Views/Timeline/index.js.map +1 -1
- package/lib/Core/Views/Timeline/utils.d.ts.map +1 -1
- package/lib/Core/Views/Timeline/utils.js +2 -1
- package/lib/Core/Views/Timeline/utils.js.map +1 -1
- package/lib/Core/constants.d.ts +4 -0
- package/lib/Core/constants.d.ts.map +1 -1
- package/lib/Core/constants.js +4 -0
- package/lib/Core/constants.js.map +1 -1
- package/lib/Core/templateFeatureSupport.js +2 -2
- package/lib/Core/templateFeatureSupport.js.map +1 -1
- package/package.json +9 -8
- package/lib/Core/Hooks/a11y/useAnnounceGroup.d.ts +0 -11
- package/lib/Core/Hooks/a11y/useAnnounceGroup.d.ts.map +0 -1
- package/lib/Core/Hooks/a11y/useAnnounceGroup.js +0 -52
- package/lib/Core/Hooks/a11y/useAnnounceGroup.js.map +0 -1
- package/lib/Core/Views/Gallery/Components/GalleryFieldValue.d.ts +0 -8
- package/lib/Core/Views/Gallery/Components/GalleryFieldValue.d.ts.map +0 -1
- package/lib/Core/Views/Gallery/Components/GalleryFieldValue.js +0 -8
- package/lib/Core/Views/Gallery/Components/GalleryFieldValue.js.map +0 -1
- package/lib/Core/Views/Gallery/Components/GalleryHeader.d.ts +0 -8
- package/lib/Core/Views/Gallery/Components/GalleryHeader.d.ts.map +0 -1
- package/lib/Core/Views/Gallery/Components/GalleryHeader.js.map +0 -1
- package/lib/Core/Views/Gallery/hooks/useRowActions.d.ts +0 -9
- package/lib/Core/Views/Gallery/hooks/useRowActions.d.ts.map +0 -1
- package/lib/Core/Views/Gallery/hooks/useRowActions.js +0 -25
- package/lib/Core/Views/Gallery/hooks/useRowActions.js.map +0 -1
- package/lib/Core/Views/Gallery/utils.d.ts +0 -36
- package/lib/Core/Views/Gallery/utils.d.ts.map +0 -1
- package/lib/Core/Views/Gallery/utils.js.map +0 -1
|
@@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
|
|
|
3
3
|
import { useCallback, useRef, useEffect } from 'react';
|
|
4
4
|
import { useLiveLog } from '@pega/cosmos-react-core/lib/hooks';
|
|
5
5
|
import { useFullscreenContext, useTheme } from '@pega/cosmos-react-core';
|
|
6
|
+
import { MasterDetail } from '@pega/cosmos-react-work';
|
|
6
7
|
import { expandCollapseAllMeta } from 'pega-repeating-structures-core';
|
|
7
8
|
import { createClassName as cx } from '../../Utils';
|
|
8
9
|
import NotificationManager from '../../Components/NotificationManager';
|
|
@@ -22,10 +23,14 @@ import TableA11y from './TableA11y';
|
|
|
22
23
|
import Body from './Body';
|
|
23
24
|
import Virtualiser from './VirtualizeWrapper';
|
|
24
25
|
import Headers from './Headers';
|
|
26
|
+
import useMasterDetailHost from './useMasterDetailHost';
|
|
25
27
|
const contextMenuSelector = { query: '.cell:not([role="columnheader"])' };
|
|
28
|
+
const MASTER_DETAIL_MIN_HEIGHT = '16rem';
|
|
26
29
|
function StyledTable({ view }) {
|
|
27
30
|
const isFullscreen = !!useFullscreenContext()?.[0];
|
|
28
|
-
const { columns, rows, groupHeaders, meta: { toolbarActions } = {} } = view;
|
|
31
|
+
const { columns, rows, groupHeaders, meta: { toolbarActions, masterDetail: masterDetailConfig } = {} } = view;
|
|
32
|
+
const isMasterDetail = !!masterDetailConfig;
|
|
33
|
+
const minHeight = isMasterDetail ? MASTER_DETAIL_MIN_HEIGHT : undefined;
|
|
29
34
|
const rowHeight = 40;
|
|
30
35
|
const footerHeight = 57;
|
|
31
36
|
const isSmallOrAbove = view?.state?.responsive?.sm;
|
|
@@ -59,11 +64,13 @@ function StyledTable({ view }) {
|
|
|
59
64
|
addActionSelector: addAction ? `[aria-label="${addAction.text}"]` : undefined
|
|
60
65
|
}, FOCUSABLE_SELECTORS, {
|
|
61
66
|
TAB: 9,
|
|
67
|
+
ENTER: 13,
|
|
62
68
|
LEFT: 37,
|
|
63
69
|
UP: 38,
|
|
64
70
|
RIGHT: 39,
|
|
65
71
|
DOWN: 40
|
|
66
72
|
}, null, announcePolite, translate, ACTIONABLE_SELECTORS, translate('Interactive content')));
|
|
73
|
+
const masterDetail = useMasterDetailHost({ view });
|
|
67
74
|
useEffect(() => {
|
|
68
75
|
a11yRef.current.setContainer(containerRef.current);
|
|
69
76
|
return () => {
|
|
@@ -88,11 +95,13 @@ function StyledTable({ view }) {
|
|
|
88
95
|
a11yRef.current.clickHandler(e);
|
|
89
96
|
}
|
|
90
97
|
}, []);
|
|
91
|
-
|
|
92
|
-
'
|
|
93
|
-
}),
|
|
94
|
-
|
|
95
|
-
|
|
98
|
+
const tableContent = (_jsx(RepeatingStructureA11y, { view: view, a11yRef: a11yRef, children: _jsxs("div", { className: cx('container', view.className, {
|
|
99
|
+
'small-screen-table': !isSmallOrAbove
|
|
100
|
+
}), ref: containerRef, ...view.getUIProps(), onClick: onClickHandler, onFocusCapture: e => a11yRef.current.onFocusHandler(e), onBlurCapture: e => a11yRef.current.onBlurHandler(e), children: [view.state?.groups?.length ? (_jsxs(_Fragment, { children: [_jsx(GroupingHeaderCell, { view: view }), _jsx(Virtualiser, { id: 'rootVirtualiser', view: view, renderHeader: renderHeader, renderFooter: renderFooter, isFullscreen: isFullscreen, minHeight: minHeight, children: _jsx(Body, { groupHeaders: groupHeaders, columns: columns, hierarchicalGroupEnabled: view.hierarchicalGroupEnabled }) })] })) : (_jsx(Virtualiser, { id: 'rootVirtualiser', view: view, renderHeader: renderHeader, renderFooter: renderFooter, isFullscreen: isFullscreen, minHeight: minHeight, useVariableRowHeightVirtualization: true })), _jsx(LoadingIndicator, { view: view, show: !rows || !!view.isLoading }), _jsx(ContextMenuContainer, { view: view, selector: contextMenuSelector })] }) }));
|
|
101
|
+
const tableContainer = (_jsxs(StyledTableContainer, { style: containerStyles, "data-test-id": 'table', "data-testid": 'table', className: cx('t-container', {
|
|
102
|
+
'show-expand-collapse-all': view.showGroupingExpandCollapseAll
|
|
103
|
+
}), theme: theme, view: view, isFullscreen: isFullscreen, children: [_jsx(WarningBanner, { warningMessages: view.warningMessages }), _jsx(Toolbar, { view: view }), _jsx(RenderView, { type: EXTERNAL_FILTERS, view: view }), _jsx(NotificationManager, { view: view }), isMasterDetail ? (_jsx(MasterDetail, { master: tableContent, detail: masterDetail.detail, ...masterDetail.masterDetailProps })) : (tableContent)] }));
|
|
104
|
+
return _jsx(RsCardWrapper, { children: tableContainer });
|
|
96
105
|
}
|
|
97
106
|
StyledTable.propTypes = {
|
|
98
107
|
view: PropTypes.objectOf(PropTypes.any).isRequired
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../Core/Views/Table/index.jsx"],"names":[],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport { useCallback, useRef, useEffect } from 'react';\n\nimport { useLiveLog } from '@pega/cosmos-react-core/lib/hooks';\nimport { useFullscreenContext, useTheme } from '@pega/cosmos-react-core';\nimport { expandCollapseAllMeta } from 'pega-repeating-structures-core';\n\nimport { createClassName as cx } from '../../Utils';\nimport NotificationManager from '../../Components/NotificationManager';\nimport WarningBanner from '../../Components/WarningBanner';\nimport Toolbar from '../../Components/Toolbar';\nimport ContextMenuContainer from '../../Components/ContextMenu/ContextMenuContainer';\nimport LoadingIndicator from '../../Components/LoadingIndicator';\nimport TableFooter from '../../Components/Footer';\nimport RepeatingStructureA11y from '../../Components/A11y/RepeatingStructureA11y';\nimport RenderView from '../../Components/RenderingEngine/RenderView';\nimport { EXTERNAL_FILTERS, FOCUSABLE_SELECTORS, ACTIONABLE_SELECTORS } from '../../constants';\nimport useTranslate from '../../Hooks/useTranslate';\nimport RsCardWrapper from '../RsCardWrapper';\n\nimport GroupingHeaderCell from './GroupingHeaderCell';\nimport StyledTableContainer from './StyledTableContainer';\nimport TableA11y from './TableA11y';\nimport Body from './Body';\nimport Virtualiser from './VirtualizeWrapper';\nimport Headers from './Headers';\n\nconst contextMenuSelector = { query: '.cell:not([role=\"columnheader\"])' };\n\nfunction StyledTable({ view }) {\n const isFullscreen = !!useFullscreenContext()?.[0];\n const { columns, rows, groupHeaders, meta: { toolbarActions } = {} } = view;\n const rowHeight = 40;\n const footerHeight = 57;\n const isSmallOrAbove = view?.state?.responsive?.sm;\n const expandCollapseAllWidth = view.showGroupingExpandCollapseAll\n ? expandCollapseAllMeta.width\n : 0;\n\n const containerStyles = {\n '--row-height': `${rowHeight}px`,\n '--footer-height': `${footerHeight}px`,\n '--expand-collapse-all-width': `${expandCollapseAllWidth}px`\n };\n const renderHeader = useCallback(\n () => <Headers ref={view.setItemElement} columns={columns} isVisible={!!rows} />,\n [columns, rows, view]\n );\n const renderFooter = useCallback(() => <TableFooter view={view} />, [view]);\n const addAction = toolbarActions?.find(action => action.id === 'Add_Record');\n const theme = useTheme();\n const containerRef = useRef(null);\n const { announcePolite } = useLiveLog();\n const [translate] = useTranslate();\n const a11yRef = useRef(\n new TableA11y(\n {\n topFocusRef: '.top',\n bottomFocusRef: '.bottom',\n focusElementSelector: '.cell',\n parentElementSelector: '.row',\n aboveLoader: '.above-loader',\n belowLoader: '.below-loader',\n expandCollpaseAll: '.expand-collapse-all',\n stickyGroupHeaderSelector: '.stickyGroupHeader',\n aggregateCell: '.aggregateCell',\n tableLoader: '.table-loader',\n footer: '.footer',\n addActionSelector: addAction ? `[aria-label=\"${addAction.text}\"]` : undefined\n },\n FOCUSABLE_SELECTORS,\n {\n TAB: 9,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40\n },\n null,\n announcePolite,\n translate,\n ACTIONABLE_SELECTORS,\n translate('Interactive content')\n )\n );\n\n useEffect(() => {\n a11yRef.current.setContainer(containerRef.current);\n\n return () => {\n containerRef.current = null;\n a11yRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n a11yRef.current.itemsLoadedCallback();\n });\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const handler = e => a11yRef.current.a11yHandler(e);\n container.addEventListener('keydown', handler);\n return () => container.removeEventListener('keydown', handler);\n }, []);\n\n const onClickHandler = useCallback(e => {\n const pointerType = e.nativeEvent.pointerType;\n if (pointerType) {\n a11yRef.current.clickHandler(e);\n }\n }, []);\n\n return (\n <RsCardWrapper>\n <StyledTableContainer\n style={containerStyles}\n data-test-id='table'\n data-testid='table'\n className={cx('t-container', {\n 'show-expand-collapse-all': view.showGroupingExpandCollapseAll\n })}\n theme={theme}\n view={view}\n isFullscreen={isFullscreen}\n >\n <WarningBanner warningMessages={view.warningMessages} />\n <Toolbar view={view} />\n <RenderView type={EXTERNAL_FILTERS} view={view} />\n <NotificationManager view={view} />\n <RepeatingStructureA11y view={view} a11yRef={a11yRef}>\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */}\n <div\n className={cx('container', view.className, {\n 'small-screen-table': !isSmallOrAbove\n })}\n ref={containerRef}\n {...view.getUIProps()}\n onClick={onClickHandler}\n onFocusCapture={e => a11yRef.current.onFocusHandler(e)}\n onBlurCapture={e => a11yRef.current.onBlurHandler(e)}\n >\n {view.state?.groups?.length ? (\n <>\n <GroupingHeaderCell view={view} />\n <Virtualiser\n id='rootVirtualiser'\n view={view}\n renderHeader={renderHeader}\n renderFooter={renderFooter}\n isFullscreen={isFullscreen}\n >\n <Body\n groupHeaders={groupHeaders}\n columns={columns}\n hierarchicalGroupEnabled={view.hierarchicalGroupEnabled}\n />\n </Virtualiser>\n </>\n ) : (\n <Virtualiser\n id='rootVirtualiser'\n view={view}\n renderHeader={renderHeader}\n renderFooter={renderFooter}\n isFullscreen={isFullscreen}\n useVariableRowHeightVirtualization\n />\n )}\n <LoadingIndicator view={view} show={!rows || !!view.isLoading} />\n <ContextMenuContainer view={view} selector={contextMenuSelector} />\n </div>\n </RepeatingStructureA11y>\n </StyledTableContainer>\n </RsCardWrapper>\n );\n}\n\nStyledTable.propTypes = {\n view: PropTypes.objectOf(PropTypes.any).isRequired\n};\n\nexport default StyledTable;\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../Core/Views/Table/index.jsx"],"names":[],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport { useCallback, useRef, useEffect } from 'react';\n\nimport { useLiveLog } from '@pega/cosmos-react-core/lib/hooks';\nimport { useFullscreenContext, useTheme } from '@pega/cosmos-react-core';\nimport { MasterDetail } from '@pega/cosmos-react-work';\nimport { expandCollapseAllMeta } from 'pega-repeating-structures-core';\n\nimport { createClassName as cx } from '../../Utils';\nimport NotificationManager from '../../Components/NotificationManager';\nimport WarningBanner from '../../Components/WarningBanner';\nimport Toolbar from '../../Components/Toolbar';\nimport ContextMenuContainer from '../../Components/ContextMenu/ContextMenuContainer';\nimport LoadingIndicator from '../../Components/LoadingIndicator';\nimport TableFooter from '../../Components/Footer';\nimport RepeatingStructureA11y from '../../Components/A11y/RepeatingStructureA11y';\nimport RenderView from '../../Components/RenderingEngine/RenderView';\nimport { EXTERNAL_FILTERS, FOCUSABLE_SELECTORS, ACTIONABLE_SELECTORS } from '../../constants';\nimport useTranslate from '../../Hooks/useTranslate';\nimport RsCardWrapper from '../RsCardWrapper';\n\nimport GroupingHeaderCell from './GroupingHeaderCell';\nimport StyledTableContainer from './StyledTableContainer';\nimport TableA11y from './TableA11y';\nimport Body from './Body';\nimport Virtualiser from './VirtualizeWrapper';\nimport Headers from './Headers';\nimport useMasterDetailHost from './useMasterDetailHost';\n\nconst contextMenuSelector = { query: '.cell:not([role=\"columnheader\"])' };\nconst MASTER_DETAIL_MIN_HEIGHT = '16rem';\n\nfunction StyledTable({ view }) {\n const isFullscreen = !!useFullscreenContext()?.[0];\n const {\n columns,\n rows,\n groupHeaders,\n meta: { toolbarActions, masterDetail: masterDetailConfig } = {}\n } = view;\n const isMasterDetail = !!masterDetailConfig;\n const minHeight = isMasterDetail ? MASTER_DETAIL_MIN_HEIGHT : undefined;\n\n const rowHeight = 40;\n const footerHeight = 57;\n const isSmallOrAbove = view?.state?.responsive?.sm;\n const expandCollapseAllWidth = view.showGroupingExpandCollapseAll\n ? expandCollapseAllMeta.width\n : 0;\n\n const containerStyles = {\n '--row-height': `${rowHeight}px`,\n '--footer-height': `${footerHeight}px`,\n '--expand-collapse-all-width': `${expandCollapseAllWidth}px`\n };\n const renderHeader = useCallback(\n () => <Headers ref={view.setItemElement} columns={columns} isVisible={!!rows} />,\n [columns, rows, view]\n );\n const renderFooter = useCallback(() => <TableFooter view={view} />, [view]);\n const addAction = toolbarActions?.find(action => action.id === 'Add_Record');\n const theme = useTheme();\n const containerRef = useRef(null);\n const { announcePolite } = useLiveLog();\n const [translate] = useTranslate();\n const a11yRef = useRef(\n new TableA11y(\n {\n topFocusRef: '.top',\n bottomFocusRef: '.bottom',\n focusElementSelector: '.cell',\n parentElementSelector: '.row',\n aboveLoader: '.above-loader',\n belowLoader: '.below-loader',\n expandCollpaseAll: '.expand-collapse-all',\n stickyGroupHeaderSelector: '.stickyGroupHeader',\n aggregateCell: '.aggregateCell',\n tableLoader: '.table-loader',\n footer: '.footer',\n addActionSelector: addAction ? `[aria-label=\"${addAction.text}\"]` : undefined\n },\n FOCUSABLE_SELECTORS,\n {\n TAB: 9,\n ENTER: 13,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40\n },\n null,\n announcePolite,\n translate,\n ACTIONABLE_SELECTORS,\n translate('Interactive content')\n )\n );\n\n const masterDetail = useMasterDetailHost({ view });\n\n useEffect(() => {\n a11yRef.current.setContainer(containerRef.current);\n\n return () => {\n containerRef.current = null;\n a11yRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n a11yRef.current.itemsLoadedCallback();\n });\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const handler = e => a11yRef.current.a11yHandler(e);\n container.addEventListener('keydown', handler);\n return () => container.removeEventListener('keydown', handler);\n }, []);\n\n const onClickHandler = useCallback(e => {\n const pointerType = e.nativeEvent.pointerType;\n if (pointerType) {\n a11yRef.current.clickHandler(e);\n }\n }, []);\n\n const tableContent = (\n <RepeatingStructureA11y view={view} a11yRef={a11yRef}>\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */}\n <div\n className={cx('container', view.className, {\n 'small-screen-table': !isSmallOrAbove\n })}\n ref={containerRef}\n {...view.getUIProps()}\n onClick={onClickHandler}\n onFocusCapture={e => a11yRef.current.onFocusHandler(e)}\n onBlurCapture={e => a11yRef.current.onBlurHandler(e)}\n >\n {view.state?.groups?.length ? (\n <>\n <GroupingHeaderCell view={view} />\n <Virtualiser\n id='rootVirtualiser'\n view={view}\n renderHeader={renderHeader}\n renderFooter={renderFooter}\n isFullscreen={isFullscreen}\n minHeight={minHeight}\n >\n <Body\n groupHeaders={groupHeaders}\n columns={columns}\n hierarchicalGroupEnabled={view.hierarchicalGroupEnabled}\n />\n </Virtualiser>\n </>\n ) : (\n <Virtualiser\n id='rootVirtualiser'\n view={view}\n renderHeader={renderHeader}\n renderFooter={renderFooter}\n isFullscreen={isFullscreen}\n minHeight={minHeight}\n useVariableRowHeightVirtualization\n />\n )}\n <LoadingIndicator view={view} show={!rows || !!view.isLoading} />\n <ContextMenuContainer view={view} selector={contextMenuSelector} />\n </div>\n </RepeatingStructureA11y>\n );\n\n const tableContainer = (\n <StyledTableContainer\n style={containerStyles}\n data-test-id='table'\n data-testid='table'\n className={cx('t-container', {\n 'show-expand-collapse-all': view.showGroupingExpandCollapseAll\n })}\n theme={theme}\n view={view}\n isFullscreen={isFullscreen}\n >\n <WarningBanner warningMessages={view.warningMessages} />\n <Toolbar view={view} />\n <RenderView type={EXTERNAL_FILTERS} view={view} />\n <NotificationManager view={view} />\n\n {isMasterDetail ? (\n <MasterDetail\n master={tableContent}\n detail={masterDetail.detail}\n {...masterDetail.masterDetailProps}\n />\n ) : (\n tableContent\n )}\n </StyledTableContainer>\n );\n\n return <RsCardWrapper>{tableContainer}</RsCardWrapper>;\n}\n\nStyledTable.propTypes = {\n view: PropTypes.objectOf(PropTypes.any).isRequired\n};\n\nexport default StyledTable;\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface UseMasterDetailCleanupResult {
|
|
2
|
+
registerDetailCleanup: (cleanup?: () => void) => void;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Owns final Master Detail cleanup for the stable table host.
|
|
6
|
+
*
|
|
7
|
+
* Detail renderers remount while navigating rows, so they register their platform-specific cleanup
|
|
8
|
+
* here and the host invokes it only when Master Detail closes or the host unmounts.
|
|
9
|
+
*/
|
|
10
|
+
export default function useMasterDetailCleanup(isMasterDetailOpen: boolean): UseMasterDetailCleanupResult;
|
|
11
|
+
//# sourceMappingURL=useMasterDetailCleanup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMasterDetailCleanup.d.ts","sourceRoot":"","sources":["../../../../Core/Views/Table/useMasterDetailCleanup.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,4BAA4B;IAC3C,qBAAqB,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CACvD;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAC5C,kBAAkB,EAAE,OAAO,GAC1B,4BAA4B,CAuB9B"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Owns final Master Detail cleanup for the stable table host.
|
|
4
|
+
*
|
|
5
|
+
* Detail renderers remount while navigating rows, so they register their platform-specific cleanup
|
|
6
|
+
* here and the host invokes it only when Master Detail closes or the host unmounts.
|
|
7
|
+
*/
|
|
8
|
+
export default function useMasterDetailCleanup(isMasterDetailOpen) {
|
|
9
|
+
const detailCleanupRef = useRef();
|
|
10
|
+
const wasMasterDetailOpenRef = useRef(false);
|
|
11
|
+
const registerDetailCleanup = useCallback((cleanup) => {
|
|
12
|
+
detailCleanupRef.current = cleanup;
|
|
13
|
+
}, []);
|
|
14
|
+
const runDetailCleanup = useCallback(() => {
|
|
15
|
+
detailCleanupRef.current?.();
|
|
16
|
+
detailCleanupRef.current = undefined;
|
|
17
|
+
}, []);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
if (wasMasterDetailOpenRef.current && !isMasterDetailOpen) {
|
|
20
|
+
runDetailCleanup();
|
|
21
|
+
}
|
|
22
|
+
wasMasterDetailOpenRef.current = isMasterDetailOpen;
|
|
23
|
+
}, [isMasterDetailOpen, runDetailCleanup]);
|
|
24
|
+
useEffect(() => runDetailCleanup, [runDetailCleanup]);
|
|
25
|
+
return { registerDetailCleanup };
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=useMasterDetailCleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMasterDetailCleanup.js","sourceRoot":"","sources":["../../../../Core/Views/Table/useMasterDetailCleanup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAMvD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAC5C,kBAA2B;IAE3B,MAAM,gBAAgB,GAAG,MAAM,EAA4B,CAAC;IAC5D,MAAM,sBAAsB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE7C,MAAM,qBAAqB,GAAG,WAAW,CAAC,CAAC,OAAoB,EAAE,EAAE;QACjE,gBAAgB,CAAC,OAAO,GAAG,OAAO,CAAC;IACrC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;QACxC,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7B,gBAAgB,CAAC,OAAO,GAAG,SAAS,CAAC;IACvC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,sBAAsB,CAAC,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1D,gBAAgB,EAAE,CAAC;QACrB,CAAC;QACD,sBAAsB,CAAC,OAAO,GAAG,kBAAkB,CAAC;IACtD,CAAC,EAAE,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE3C,SAAS,CAAC,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEtD,OAAO,EAAE,qBAAqB,EAAE,CAAC;AACnC,CAAC","sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\n\nexport interface UseMasterDetailCleanupResult {\n registerDetailCleanup: (cleanup?: () => void) => void;\n}\n\n/**\n * Owns final Master Detail cleanup for the stable table host.\n *\n * Detail renderers remount while navigating rows, so they register their platform-specific cleanup\n * here and the host invokes it only when Master Detail closes or the host unmounts.\n */\nexport default function useMasterDetailCleanup(\n isMasterDetailOpen: boolean\n): UseMasterDetailCleanupResult {\n const detailCleanupRef = useRef<(() => void) | undefined>();\n const wasMasterDetailOpenRef = useRef(false);\n\n const registerDetailCleanup = useCallback((cleanup?: () => void) => {\n detailCleanupRef.current = cleanup;\n }, []);\n\n const runDetailCleanup = useCallback(() => {\n detailCleanupRef.current?.();\n detailCleanupRef.current = undefined;\n }, []);\n\n useEffect(() => {\n if (wasMasterDetailOpenRef.current && !isMasterDetailOpen) {\n runDetailCleanup();\n }\n wasMasterDetailOpenRef.current = isMasterDetailOpen;\n }, [isMasterDetailOpen, runDetailCleanup]);\n\n useEffect(() => runDetailCleanup, [runDetailCleanup]);\n\n return { registerDetailCleanup };\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { MasterDetailProps } from '@pega/cosmos-react-work';
|
|
3
|
+
import type { RsCoreTypes } from 'pega-repeating-structures-core';
|
|
4
|
+
interface UseMasterDetailHostParams {
|
|
5
|
+
view: RsCoreTypes.View;
|
|
6
|
+
onClose?: () => void;
|
|
7
|
+
}
|
|
8
|
+
export interface UseMasterDetailHostResult {
|
|
9
|
+
detail: ReactNode | undefined;
|
|
10
|
+
masterDetailProps: Pick<MasterDetailProps, 'open' | 'selection' | 'loading' | 'nestedNavigation' | 'presentation' | 'onClose'>;
|
|
11
|
+
}
|
|
12
|
+
export default function useMasterDetailHost({ view, onClose }: UseMasterDetailHostParams): UseMasterDetailHostResult;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=useMasterDetailHost.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMasterDetailHost.d.ts","sourceRoot":"","sources":["../../../../Core/Views/Table/useMasterDetailHost.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AASlE,UAAU,yBAAyB;IACjC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,iBAAiB,EAAE,IAAI,CACrB,iBAAiB,EACjB,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,kBAAkB,GAAG,cAAc,GAAG,SAAS,CACnF,CAAC;CACH;AAED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,IAAI,EACJ,OAAO,EACR,EAAE,yBAAyB,GAAG,yBAAyB,CAwDvD"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
import useTranslate from '../../Hooks/useTranslate';
|
|
3
|
+
import fetchRowActions from '../../Utils/fetchRowActions';
|
|
4
|
+
import useMasterDetailState from './useMasterDetailState';
|
|
5
|
+
import useMasterDetailRenderer from './useMasterDetailRenderer';
|
|
6
|
+
import useMasterDetailCleanup from './useMasterDetailCleanup';
|
|
7
|
+
export default function useMasterDetailHost({ view, onClose }) {
|
|
8
|
+
const { masterDetail } = view;
|
|
9
|
+
const masterDetailConfig = view.meta.masterDetail;
|
|
10
|
+
const presentation = view.state?.responsive?.sm === false ? 'overlay' : 'docked';
|
|
11
|
+
const rowContext = masterDetail?.row.getContext?.();
|
|
12
|
+
const headerColumn = view.columns?.find(column => column.isFirstDataColumn);
|
|
13
|
+
const { detailState, onDetailStateChange } = useMasterDetailState(masterDetail);
|
|
14
|
+
const { registerDetailCleanup } = useMasterDetailCleanup(!!masterDetail);
|
|
15
|
+
const closeMasterDetail = useCallback(() => {
|
|
16
|
+
view.type.closeMasterDetail();
|
|
17
|
+
onClose?.();
|
|
18
|
+
}, [onClose, view.type]);
|
|
19
|
+
const previous = useCallback(() => view.type.navigateMasterDetail('previous'), [view.type]);
|
|
20
|
+
const next = useCallback(() => view.type.navigateMasterDetail('next'), [view.type]);
|
|
21
|
+
const [translate] = useTranslate();
|
|
22
|
+
const fetchActions = useCallback(() => fetchRowActions({
|
|
23
|
+
getExecutionContext: masterDetail?.row.getContext,
|
|
24
|
+
meta: view.meta,
|
|
25
|
+
translate
|
|
26
|
+
}), [masterDetail?.row, translate, view.meta]);
|
|
27
|
+
const headerValue = headerColumn?.getContext(rowContext).getValue()?.toString();
|
|
28
|
+
const selection = masterDetail
|
|
29
|
+
? {
|
|
30
|
+
id: masterDetail.rowKey,
|
|
31
|
+
header: headerValue,
|
|
32
|
+
accessibleName: headerValue,
|
|
33
|
+
onPrevious: masterDetail.hasPrevious ? previous : undefined,
|
|
34
|
+
onNext: masterDetail.hasNext ? next : undefined,
|
|
35
|
+
actions: view.meta.editing || view.meta.deleting ? fetchActions : undefined,
|
|
36
|
+
icon: masterDetailConfig?.icon
|
|
37
|
+
}
|
|
38
|
+
: undefined;
|
|
39
|
+
return {
|
|
40
|
+
detail: useMasterDetailRenderer({
|
|
41
|
+
view,
|
|
42
|
+
masterDetail,
|
|
43
|
+
onDetailStateChange,
|
|
44
|
+
registerDetailCleanup
|
|
45
|
+
}),
|
|
46
|
+
masterDetailProps: {
|
|
47
|
+
open: !!masterDetail,
|
|
48
|
+
selection,
|
|
49
|
+
loading: detailState.loading,
|
|
50
|
+
nestedNavigation: detailState.nestedNavigation,
|
|
51
|
+
presentation,
|
|
52
|
+
onClose: closeMasterDetail
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=useMasterDetailHost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMasterDetailHost.js","sourceRoot":"","sources":["../../../../Core/Views/Table/useMasterDetailHost.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback } from 'react';\nimport type { ReactNode } from 'react';\n\nimport type { MasterDetailProps } from '@pega/cosmos-react-work';\nimport type { RsCoreTypes } from 'pega-repeating-structures-core';\n\nimport useTranslate from '../../Hooks/useTranslate';\nimport fetchRowActions from '../../Utils/fetchRowActions';\n\nimport useMasterDetailState from './useMasterDetailState';\nimport useMasterDetailRenderer from './useMasterDetailRenderer';\nimport useMasterDetailCleanup from './useMasterDetailCleanup';\n\ninterface UseMasterDetailHostParams {\n view: RsCoreTypes.View;\n onClose?: () => void;\n}\n\nexport interface UseMasterDetailHostResult {\n detail: ReactNode | undefined;\n masterDetailProps: Pick<\n MasterDetailProps,\n 'open' | 'selection' | 'loading' | 'nestedNavigation' | 'presentation' | 'onClose'\n >;\n}\n\nexport default function useMasterDetailHost({\n view,\n onClose\n}: UseMasterDetailHostParams): UseMasterDetailHostResult {\n const { masterDetail } = view;\n const masterDetailConfig = view.meta.masterDetail;\n const presentation = view.state?.responsive?.sm === false ? 'overlay' : 'docked';\n const rowContext = masterDetail?.row.getContext?.();\n const headerColumn = view.columns?.find(column => column.isFirstDataColumn);\n const { detailState, onDetailStateChange } = useMasterDetailState(masterDetail);\n const { registerDetailCleanup } = useMasterDetailCleanup(!!masterDetail);\n\n const closeMasterDetail = useCallback(() => {\n view.type.closeMasterDetail();\n onClose?.();\n }, [onClose, view.type]);\n\n const previous = useCallback(() => view.type.navigateMasterDetail('previous'), [view.type]);\n const next = useCallback(() => view.type.navigateMasterDetail('next'), [view.type]);\n\n const [translate] = useTranslate();\n const fetchActions = useCallback(\n () =>\n fetchRowActions({\n getExecutionContext: masterDetail?.row.getContext,\n meta: view.meta,\n translate\n }),\n [masterDetail?.row, translate, view.meta]\n );\n\n const headerValue = headerColumn?.getContext(rowContext).getValue()?.toString();\n const selection = masterDetail\n ? {\n id: masterDetail.rowKey,\n header: headerValue,\n accessibleName: headerValue,\n onPrevious: masterDetail.hasPrevious ? previous : undefined,\n onNext: masterDetail.hasNext ? next : undefined,\n actions: view.meta.editing || view.meta.deleting ? fetchActions : undefined,\n icon: masterDetailConfig?.icon\n }\n : undefined;\n return {\n detail: useMasterDetailRenderer({\n view,\n masterDetail,\n onDetailStateChange,\n registerDetailCleanup\n }),\n masterDetailProps: {\n open: !!masterDetail,\n selection,\n loading: detailState.loading,\n nestedNavigation: detailState.nestedNavigation,\n presentation,\n onClose: closeMasterDetail\n }\n };\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { RsCoreTypes } from 'pega-repeating-structures-core';
|
|
3
|
+
import type { DetailState } from './useMasterDetailState';
|
|
4
|
+
interface UseMasterDetailRendererParams {
|
|
5
|
+
view: RsCoreTypes.View;
|
|
6
|
+
masterDetail: RsCoreTypes.View['masterDetail'];
|
|
7
|
+
onDetailStateChange: (state: Partial<DetailState>) => void;
|
|
8
|
+
registerDetailCleanup: (cleanup?: () => void) => void;
|
|
9
|
+
}
|
|
10
|
+
/** Resolves and renders configured detail content for the active Master Detail selection. */
|
|
11
|
+
export default function useMasterDetailRenderer({ view, masterDetail, onDetailStateChange, registerDetailCleanup }: UseMasterDetailRendererParams): ReactNode | undefined;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=useMasterDetailRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMasterDetailRenderer.d.ts","sourceRoot":"","sources":["../../../../Core/Views/Table/useMasterDetailRenderer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAKlE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,UAAU,6BAA6B;IACrC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC;IACvB,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC/C,mBAAmB,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC3D,qBAAqB,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CACvD;AAED,6FAA6F;AAC7F,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,EAC9C,IAAI,EACJ,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACtB,EAAE,6BAA6B,GAAG,SAAS,GAAG,SAAS,CAmBvD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Fragment, useMemo } from 'react';
|
|
3
|
+
import { createUID } from '@pega/cosmos-react-core';
|
|
4
|
+
import { resolveComponent } from '../../Components/RenderingEngine/ComponentResolverFactory';
|
|
5
|
+
import { MASTER_DETAIL_RENDERER_KEY } from '../../constants';
|
|
6
|
+
/** Resolves and renders configured detail content for the active Master Detail selection. */
|
|
7
|
+
export default function useMasterDetailRenderer({ view, masterDetail, onDetailStateChange, registerDetailCleanup }) {
|
|
8
|
+
// Remount the detail renderer when its row is regenerated or an explicit detail refresh is requested.
|
|
9
|
+
const detailRenderKey = useMemo(() => createUID(), [masterDetail?.row, masterDetail?.refreshKey]);
|
|
10
|
+
const rowContext = masterDetail?.row.getContext?.();
|
|
11
|
+
if (!masterDetail || !view.meta.masterDetail)
|
|
12
|
+
return undefined;
|
|
13
|
+
const detail = resolveComponent(MASTER_DETAIL_RENDERER_KEY, view.renderFactory, {
|
|
14
|
+
rowContext,
|
|
15
|
+
context: rowContext?.getValue?.(),
|
|
16
|
+
nestedTarget: masterDetail.nestedTarget,
|
|
17
|
+
viewName: masterDetail.viewName ?? view.meta.masterDetail?.viewName,
|
|
18
|
+
onDetailStateChange,
|
|
19
|
+
registerDetailCleanup
|
|
20
|
+
});
|
|
21
|
+
return detail ? (_jsx(Fragment, { children: detail }, `${masterDetail.rowKey}:${detailRenderKey}`)) : undefined;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=useMasterDetailRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMasterDetailRenderer.js","sourceRoot":"","sources":["../../../../Core/Views/Table/useMasterDetailRenderer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAC7F,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAW7D,6FAA6F;AAC7F,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,EAC9C,IAAI,EACJ,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACS;IAC9B,sGAAsG;IACtG,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;IAClG,MAAM,UAAU,GAAG,YAAY,EAAE,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;IAEpD,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC;IAE/D,MAAM,MAAM,GAAG,gBAAgB,CAAC,0BAA0B,EAAE,IAAI,CAAC,aAAa,EAAE;QAC9E,UAAU;QACV,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE;QACjC,YAAY,EAAE,YAAY,CAAC,YAAY;QACvC,QAAQ,EAAE,YAAY,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ;QACnE,mBAAmB;QACnB,qBAAqB;KACtB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,CAAC,CAAC,CACd,KAAC,QAAQ,cAAoD,MAAM,IAApD,GAAG,YAAY,CAAC,MAAM,IAAI,eAAe,EAAE,CAAqB,CAChF,CAAC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC","sourcesContent":["import { Fragment, useMemo } from 'react';\nimport type { ReactNode } from 'react';\n\nimport { createUID } from '@pega/cosmos-react-core';\nimport type { RsCoreTypes } from 'pega-repeating-structures-core';\n\nimport { resolveComponent } from '../../Components/RenderingEngine/ComponentResolverFactory';\nimport { MASTER_DETAIL_RENDERER_KEY } from '../../constants';\n\nimport type { DetailState } from './useMasterDetailState';\n\ninterface UseMasterDetailRendererParams {\n view: RsCoreTypes.View;\n masterDetail: RsCoreTypes.View['masterDetail'];\n onDetailStateChange: (state: Partial<DetailState>) => void;\n registerDetailCleanup: (cleanup?: () => void) => void;\n}\n\n/** Resolves and renders configured detail content for the active Master Detail selection. */\nexport default function useMasterDetailRenderer({\n view,\n masterDetail,\n onDetailStateChange,\n registerDetailCleanup\n}: UseMasterDetailRendererParams): ReactNode | undefined {\n // Remount the detail renderer when its row is regenerated or an explicit detail refresh is requested.\n const detailRenderKey = useMemo(() => createUID(), [masterDetail?.row, masterDetail?.refreshKey]);\n const rowContext = masterDetail?.row.getContext?.();\n\n if (!masterDetail || !view.meta.masterDetail) return undefined;\n\n const detail = resolveComponent(MASTER_DETAIL_RENDERER_KEY, view.renderFactory, {\n rowContext,\n context: rowContext?.getValue?.(),\n nestedTarget: masterDetail.nestedTarget,\n viewName: masterDetail.viewName ?? view.meta.masterDetail?.viewName,\n onDetailStateChange,\n registerDetailCleanup\n });\n\n return detail ? (\n <Fragment key={`${masterDetail.rowKey}:${detailRenderKey}`}>{detail}</Fragment>\n ) : undefined;\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MouseEvent, KeyboardEvent } from 'react';
|
|
2
|
+
import type { RsCoreTypes } from 'pega-repeating-structures-core';
|
|
3
|
+
export default function useMasterDetailRow(row: RsCoreTypes.Row): {
|
|
4
|
+
isMasterDetailEnabled: boolean;
|
|
5
|
+
onRowClick: (event: MouseEvent) => void;
|
|
6
|
+
onCellKeyDownCapture: (event: KeyboardEvent) => void;
|
|
7
|
+
rowElementRef: import("react").MutableRefObject<HTMLElement | null>;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=useMasterDetailRow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMasterDetailRow.d.ts","sourceRoot":"","sources":["../../../../Core/Views/Table/useMasterDetailRow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAclE,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG;;wBAiBnD,UAAU;kCAUV,aAAa;;EAgCxB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
2
|
+
import { isInstance } from '@pega/cosmos-react-core';
|
|
3
|
+
import { ACTIONABLE_SELECTORS, FOCUSABLE_SELECTORS } from '../../constants';
|
|
4
|
+
const INTERACTIVE_SELECTOR = [
|
|
5
|
+
...FOCUSABLE_SELECTORS,
|
|
6
|
+
...ACTIONABLE_SELECTORS,
|
|
7
|
+
'.cell-action',
|
|
8
|
+
'[role="button"]',
|
|
9
|
+
'[role="menuitem"]',
|
|
10
|
+
'[aria-haspopup="menu"]'
|
|
11
|
+
].join(',');
|
|
12
|
+
export default function useMasterDetailRow(row) {
|
|
13
|
+
const rowElementRef = useRef(null);
|
|
14
|
+
const isMasterDetailEnabled = !!row.parent?.meta?.masterDetail;
|
|
15
|
+
const isRowSelectionEnabled = !!row.parent?.meta?.selectionMode &&
|
|
16
|
+
!(row.parent?.columns?.find(column => column.field.name === 'RowSelect')?.disableSelection ??
|
|
17
|
+
row.parent?.meta?.disableSelectionOnLoad);
|
|
18
|
+
const selectRowIfEnabled = useCallback(() => {
|
|
19
|
+
if (isRowSelectionEnabled) {
|
|
20
|
+
row.selectRow(!row.$selected);
|
|
21
|
+
}
|
|
22
|
+
}, [isRowSelectionEnabled, row]);
|
|
23
|
+
const onRowClick = useCallback((event) => {
|
|
24
|
+
if (isInstance(event.target, Element) && event.target.closest(INTERACTIVE_SELECTOR))
|
|
25
|
+
return;
|
|
26
|
+
selectRowIfEnabled();
|
|
27
|
+
row.openMasterDetail?.();
|
|
28
|
+
}, [row, selectRowIfEnabled]);
|
|
29
|
+
const onCellKeyDownCapture = useCallback((event) => {
|
|
30
|
+
if (event.key !== 'Enter' || event.target !== event.currentTarget)
|
|
31
|
+
return;
|
|
32
|
+
event.preventDefault();
|
|
33
|
+
event.stopPropagation();
|
|
34
|
+
selectRowIfEnabled();
|
|
35
|
+
row.openMasterDetail?.();
|
|
36
|
+
}, [row, selectRowIfEnabled]);
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
const rowElement = rowElementRef.current;
|
|
39
|
+
if (!row.masterDetailActive || !rowElement)
|
|
40
|
+
return;
|
|
41
|
+
const scrollContainer = row.parent?.virtualizeElements?.rootVirtualiser?.getParentContainer?.();
|
|
42
|
+
if (!scrollContainer) {
|
|
43
|
+
rowElement.scrollIntoView({ block: 'nearest' });
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const rowRect = rowElement.getBoundingClientRect();
|
|
47
|
+
const viewportRect = scrollContainer.getBoundingClientRect();
|
|
48
|
+
const isOutsideViewport = rowRect.top < viewportRect.top || rowRect.bottom > viewportRect.bottom;
|
|
49
|
+
if (isOutsideViewport) {
|
|
50
|
+
rowElement.scrollIntoView({ block: 'nearest' });
|
|
51
|
+
}
|
|
52
|
+
}, [row.masterDetailActive]);
|
|
53
|
+
return { isMasterDetailEnabled, onRowClick, onCellKeyDownCapture, rowElementRef };
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=useMasterDetailRow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMasterDetailRow.js","sourceRoot":"","sources":["../../../../Core/Views/Table/useMasterDetailRow.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\nimport type { MouseEvent, KeyboardEvent } from 'react';\n\nimport type { RsCoreTypes } from 'pega-repeating-structures-core';\nimport { isInstance } from '@pega/cosmos-react-core';\n\nimport { ACTIONABLE_SELECTORS, FOCUSABLE_SELECTORS } from '../../constants';\n\nconst INTERACTIVE_SELECTOR = [\n ...FOCUSABLE_SELECTORS,\n ...ACTIONABLE_SELECTORS,\n '.cell-action',\n '[role=\"button\"]',\n '[role=\"menuitem\"]',\n '[aria-haspopup=\"menu\"]'\n].join(',');\n\nexport default function useMasterDetailRow(row: RsCoreTypes.Row) {\n const rowElementRef = useRef<HTMLElement | null>(null);\n const isMasterDetailEnabled = !!row.parent?.meta?.masterDetail;\n const isRowSelectionEnabled =\n !!row.parent?.meta?.selectionMode &&\n !(\n row.parent?.columns?.find(column => column.field.name === 'RowSelect')?.disableSelection ??\n row.parent?.meta?.disableSelectionOnLoad\n );\n\n const selectRowIfEnabled = useCallback(() => {\n if (isRowSelectionEnabled) {\n row.selectRow(!row.$selected);\n }\n }, [isRowSelectionEnabled, row]);\n\n const onRowClick = useCallback(\n (event: MouseEvent) => {\n if (isInstance(event.target, Element) && event.target.closest(INTERACTIVE_SELECTOR)) return;\n\n selectRowIfEnabled();\n row.openMasterDetail?.();\n },\n [row, selectRowIfEnabled]\n );\n\n const onCellKeyDownCapture = useCallback(\n (event: KeyboardEvent) => {\n if (event.key !== 'Enter' || event.target !== event.currentTarget) return;\n\n event.preventDefault();\n event.stopPropagation();\n selectRowIfEnabled();\n row.openMasterDetail?.();\n },\n [row, selectRowIfEnabled]\n );\n\n useEffect(() => {\n const rowElement = rowElementRef.current;\n if (!row.masterDetailActive || !rowElement) return;\n\n const scrollContainer = row.parent?.virtualizeElements?.rootVirtualiser?.getParentContainer?.();\n if (!scrollContainer) {\n rowElement.scrollIntoView({ block: 'nearest' });\n return;\n }\n\n const rowRect = rowElement.getBoundingClientRect();\n const viewportRect = scrollContainer.getBoundingClientRect();\n const isOutsideViewport =\n rowRect.top < viewportRect.top || rowRect.bottom > viewportRect.bottom;\n\n if (isOutsideViewport) {\n rowElement.scrollIntoView({ block: 'nearest' });\n }\n }, [row.masterDetailActive]);\n\n return { isMasterDetailEnabled, onRowClick, onCellKeyDownCapture, rowElementRef };\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { RsCoreTypes } from 'pega-repeating-structures-core';
|
|
3
|
+
export interface DetailNestedNavigation {
|
|
4
|
+
onBack?: () => void;
|
|
5
|
+
title?: ReactNode;
|
|
6
|
+
subtitle?: ReactNode;
|
|
7
|
+
icon?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface DetailState {
|
|
10
|
+
rowKey?: string;
|
|
11
|
+
loading?: boolean;
|
|
12
|
+
nestedNavigation?: DetailNestedNavigation;
|
|
13
|
+
}
|
|
14
|
+
interface UseMasterDetailStateResult {
|
|
15
|
+
detailState: DetailState;
|
|
16
|
+
onDetailStateChange: (nextState: Partial<DetailState>) => void;
|
|
17
|
+
}
|
|
18
|
+
/** Manages transient renderer state for the currently open Master Detail item. */
|
|
19
|
+
export default function useMasterDetailState(masterDetail: RsCoreTypes.View['masterDetail']): UseMasterDetailStateResult;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=useMasterDetailState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMasterDetailState.d.ts","sourceRoot":"","sources":["../../../../Core/Views/Table/useMasterDetailState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAElE,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;CAC3C;AAED,UAAU,0BAA0B;IAClC,WAAW,EAAE,WAAW,CAAC;IACzB,mBAAmB,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;CAChE;AAED,kFAAkF;AAClF,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAC1C,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,GAC7C,0BAA0B,CAoC5B"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
2
|
+
/** Manages transient renderer state for the currently open Master Detail item. */
|
|
3
|
+
export default function useMasterDetailState(masterDetail) {
|
|
4
|
+
const [detailState, setDetailState] = useState({});
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
if (!masterDetail) {
|
|
7
|
+
setDetailState({});
|
|
8
|
+
}
|
|
9
|
+
}, [masterDetail]);
|
|
10
|
+
const onDetailStateChange = useCallback((nextState) => {
|
|
11
|
+
if (!masterDetail)
|
|
12
|
+
return;
|
|
13
|
+
setDetailState(previousState => {
|
|
14
|
+
if (previousState.rowKey !== masterDetail.rowKey) {
|
|
15
|
+
return { rowKey: masterDetail.rowKey, ...nextState };
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
...previousState,
|
|
19
|
+
...nextState,
|
|
20
|
+
nestedNavigation: nextState.nestedNavigation
|
|
21
|
+
? { ...previousState.nestedNavigation, ...nextState.nestedNavigation }
|
|
22
|
+
: previousState.nestedNavigation
|
|
23
|
+
};
|
|
24
|
+
});
|
|
25
|
+
}, [masterDetail]);
|
|
26
|
+
return {
|
|
27
|
+
detailState: detailState.rowKey === masterDetail?.rowKey
|
|
28
|
+
? detailState
|
|
29
|
+
: { loading: false, nestedNavigation: undefined },
|
|
30
|
+
onDetailStateChange
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=useMasterDetailState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMasterDetailState.js","sourceRoot":"","sources":["../../../../Core/Views/Table/useMasterDetailState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAuBzD,kFAAkF;AAClF,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAC1C,YAA8C;IAE9C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAc,EAAE,CAAC,CAAC;IAEhE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,cAAc,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,SAA+B,EAAE,EAAE;QAClC,IAAI,CAAC,YAAY;YAAE,OAAO;QAE1B,cAAc,CAAC,aAAa,CAAC,EAAE;YAC7B,IAAI,aAAa,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;gBACjD,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;YACvD,CAAC;YACD,OAAO;gBACL,GAAG,aAAa;gBAChB,GAAG,SAAS;gBACZ,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;oBAC1C,CAAC,CAAC,EAAE,GAAG,aAAa,CAAC,gBAAgB,EAAE,GAAG,SAAS,CAAC,gBAAgB,EAAE;oBACtE,CAAC,CAAC,aAAa,CAAC,gBAAgB;aACnC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,EACD,CAAC,YAAY,CAAC,CACf,CAAC;IAEF,OAAO;QACL,WAAW,EACT,WAAW,CAAC,MAAM,KAAK,YAAY,EAAE,MAAM;YACzC,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE;QACrD,mBAAmB;KACpB,CAAC;AACJ,CAAC","sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport type { ReactNode } from 'react';\n\nimport type { RsCoreTypes } from 'pega-repeating-structures-core';\n\nexport interface DetailNestedNavigation {\n onBack?: () => void;\n title?: ReactNode;\n subtitle?: ReactNode;\n icon?: string;\n}\n\nexport interface DetailState {\n rowKey?: string;\n loading?: boolean;\n nestedNavigation?: DetailNestedNavigation;\n}\n\ninterface UseMasterDetailStateResult {\n detailState: DetailState;\n onDetailStateChange: (nextState: Partial<DetailState>) => void;\n}\n\n/** Manages transient renderer state for the currently open Master Detail item. */\nexport default function useMasterDetailState(\n masterDetail: RsCoreTypes.View['masterDetail']\n): UseMasterDetailStateResult {\n const [detailState, setDetailState] = useState<DetailState>({});\n\n useEffect(() => {\n if (!masterDetail) {\n setDetailState({});\n }\n }, [masterDetail]);\n\n const onDetailStateChange = useCallback(\n (nextState: Partial<DetailState>) => {\n if (!masterDetail) return;\n\n setDetailState(previousState => {\n if (previousState.rowKey !== masterDetail.rowKey) {\n return { rowKey: masterDetail.rowKey, ...nextState };\n }\n return {\n ...previousState,\n ...nextState,\n nestedNavigation: nextState.nestedNavigation\n ? { ...previousState.nestedNavigation, ...nextState.nestedNavigation }\n : previousState.nestedNavigation\n };\n });\n },\n [masterDetail]\n );\n\n return {\n detailState:\n detailState.rowKey === masterDetail?.rowKey\n ? detailState\n : { loading: false, nestedNavigation: undefined },\n onDetailStateChange\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Timeline.d.ts","sourceRoot":"","sources":["../../../../Core/Views/Timeline/Timeline.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAE/E,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAC;AAWlD,QAAA,MAAM,QAAQ,EAAE,+BAA+B,CAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"Timeline.d.ts","sourceRoot":"","sources":["../../../../Core/Views/Timeline/Timeline.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAE/E,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAC;AAWlD,QAAA,MAAM,QAAQ,EAAE,+BAA+B,CAAC,aAAa,CAmE3D,CAAC;AAEH,eAAe,QAAQ,CAAC"}
|
|
@@ -4,7 +4,7 @@ import { Progress, useConsolidatedRef, useItemIntersection, Grid } from '@pega/c
|
|
|
4
4
|
import { StyledTimeline, StyledLoadingCell, StyledTimelineListItem, StyledTimelineEndMarker, timelineItemsGridProps } from './Timeline.styles';
|
|
5
5
|
import TimelineItem from './TimelineItem';
|
|
6
6
|
import TimelineGroup from './TimelineGroup';
|
|
7
|
-
const Timeline = forwardRef(function Timeline({ activities, currentTime, groupBy,
|
|
7
|
+
const Timeline = forwardRef(function Timeline({ activities, currentTime, groupBy, loading, loadMore, toggleGroupExpansion, ...restProps }, ref) {
|
|
8
8
|
const listRef = useConsolidatedRef(ref);
|
|
9
9
|
const ungroupedActivities = useMemo(() => activities.flatMap(({ activity }) => activity), [activities]);
|
|
10
10
|
const visibleGroups = groupBy ? activities.filter(({ activity }) => activity.length > 0) : [];
|
|
@@ -17,7 +17,7 @@ const Timeline = forwardRef(function Timeline({ activities, currentTime, groupBy
|
|
|
17
17
|
: ':scope li > div, :scope > [data-timeline-end]');
|
|
18
18
|
return (_jsxs(Grid, { ...restProps, ...timelineItemsGridProps, as: StyledTimeline, ref: listRef, children: [!groupBy
|
|
19
19
|
? ungroupedActivities.map((item, index) => (_jsx(TimelineItem, { item: item, prevItemDate: ungroupedActivities[index - 1]?.date, nextItemDate: ungroupedActivities[index + 1]?.date, currentTime: currentTime }, item.id)))
|
|
20
|
-
: visibleGroups.map(({ header, activity }) => (_jsx(TimelineGroup, { header: header, activity: activity, groupBy: groupBy, currentTime: currentTime,
|
|
20
|
+
: visibleGroups.map(({ header, headerContent, activity }) => (_jsx(TimelineGroup, { header: header, headerContent: headerContent, activity: activity, groupBy: groupBy, currentTime: currentTime, toggleGroupExpansion: toggleGroupExpansion }, header.uniqueId))), itemCount > 0 && _jsx(StyledTimelineEndMarker, { "data-timeline-end": true, "aria-hidden": 'true' }), loading && (_jsx(StyledTimelineListItem, { children: _jsx(StyledLoadingCell, { children: _jsx(Progress, { placement: 'local' }) }) }))] }));
|
|
21
21
|
});
|
|
22
22
|
export default Timeline;
|
|
23
23
|
//# sourceMappingURL=Timeline.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Timeline.js","sourceRoot":"","sources":["../../../../Core/Views/Timeline/Timeline.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAG5C,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAIlG,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,MAAM,QAAQ,GAAmD,UAAU,CAAC,SAAS,QAAQ,CAC3F,EACE,UAAU,EACV,WAAW,EACX,OAAO,EACP,
|
|
1
|
+
{"version":3,"file":"Timeline.js","sourceRoot":"","sources":["../../../../Core/Views/Timeline/Timeline.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAG5C,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAIlG,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,MAAM,QAAQ,GAAmD,UAAU,CAAC,SAAS,QAAQ,CAC3F,EACE,UAAU,EACV,WAAW,EACX,OAAO,EACP,OAAO,EACP,QAAQ,EACR,oBAAoB,EACpB,GAAG,SAAS,EACmB,EACjC,GAAyB;IAEzB,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAExC,MAAM,mBAAmB,GAAG,OAAO,CACjC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EACpD,CAAC,UAAU,CAAC,CACb,CAAC;IAEF,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9F,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC;IAE9E,mBAAmB,CACjB,OAAO,EACP,SAAS,EACT,GAAG,EAAE;QACH,IAAI,CAAC,OAAO;YAAE,QAAQ,EAAE,EAAE,CAAC;IAC7B,CAAC,EACD,OAAO;QACL,CAAC,CAAC,8DAA8D;QAChE,CAAC,CAAC,+CAA+C,CACpD,CAAC;IAEF,OAAO,CACL,MAAC,IAAI,OAAK,SAAS,KAAM,sBAAsB,EAAE,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,aAC9E,CAAC,OAAO;gBACP,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CACvC,KAAC,YAAY,IAEX,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,mBAAmB,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,EAClD,YAAY,EAAE,mBAAmB,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,EAClD,WAAW,EAAE,WAAW,IAJnB,IAAI,CAAC,EAAE,CAKZ,CACH,CAAC;gBACJ,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CACzD,KAAC,aAAa,IAEZ,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,oBAAoB,EAAE,oBAAoB,IANrC,MAAM,CAAC,QAAQ,CAOpB,CACH,CAAC,EACL,SAAS,GAAG,CAAC,IAAI,KAAC,uBAAuB,8CAA+B,MAAM,GAAG,EACjF,OAAO,IAAI,CACV,KAAC,sBAAsB,cACrB,KAAC,iBAAiB,cAChB,KAAC,QAAQ,IAAC,SAAS,EAAC,OAAO,GAAG,GACZ,GACG,CAC1B,IACI,CACR,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { forwardRef, useMemo } from 'react';\nimport type { PropsWithoutRef } from 'react';\n\nimport { Progress, useConsolidatedRef, useItemIntersection, Grid } from '@pega/cosmos-react-core';\nimport type { ForwardRefForwardPropsComponent } from '@pega/cosmos-react-core';\n\nimport type TimelineProps from './Timeline.types';\nimport {\n StyledTimeline,\n StyledLoadingCell,\n StyledTimelineListItem,\n StyledTimelineEndMarker,\n timelineItemsGridProps\n} from './Timeline.styles';\nimport TimelineItem from './TimelineItem';\nimport TimelineGroup from './TimelineGroup';\n\nconst Timeline: ForwardRefForwardPropsComponent<TimelineProps> = forwardRef(function Timeline(\n {\n activities,\n currentTime,\n groupBy,\n loading,\n loadMore,\n toggleGroupExpansion,\n ...restProps\n }: PropsWithoutRef<TimelineProps>,\n ref: TimelineProps['ref']\n) {\n const listRef = useConsolidatedRef(ref);\n\n const ungroupedActivities = useMemo(\n () => activities.flatMap(({ activity }) => activity),\n [activities]\n );\n\n const visibleGroups = groupBy ? activities.filter(({ activity }) => activity.length > 0) : [];\n\n const itemCount = groupBy ? visibleGroups.length : ungroupedActivities.length;\n\n useItemIntersection(\n listRef,\n itemCount,\n () => {\n if (!loading) loadMore?.();\n },\n groupBy\n ? ':scope > [data-timeline-group], :scope > [data-timeline-end]'\n : ':scope li > div, :scope > [data-timeline-end]'\n );\n\n return (\n <Grid {...restProps} {...timelineItemsGridProps} as={StyledTimeline} ref={listRef}>\n {!groupBy\n ? ungroupedActivities.map((item, index) => (\n <TimelineItem\n key={item.id}\n item={item}\n prevItemDate={ungroupedActivities[index - 1]?.date}\n nextItemDate={ungroupedActivities[index + 1]?.date}\n currentTime={currentTime}\n />\n ))\n : visibleGroups.map(({ header, headerContent, activity }) => (\n <TimelineGroup\n key={header.uniqueId}\n header={header}\n headerContent={headerContent}\n activity={activity}\n groupBy={groupBy}\n currentTime={currentTime}\n toggleGroupExpansion={toggleGroupExpansion}\n />\n ))}\n {itemCount > 0 && <StyledTimelineEndMarker data-timeline-end aria-hidden='true' />}\n {loading && (\n <StyledTimelineListItem>\n <StyledLoadingCell>\n <Progress placement='local' />\n </StyledLoadingCell>\n </StyledTimelineListItem>\n )}\n </Grid>\n );\n});\n\nexport default Timeline;\n"]}
|
|
@@ -380,8 +380,8 @@ export declare const StyledGroupContentList: import("styled-components/dist/type
|
|
|
380
380
|
export declare const StyledTimelineListItem: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>, never>> & string;
|
|
381
381
|
export declare const StyledTimelineEndMarker: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>, never>> & string;
|
|
382
382
|
export declare const StyledTimeline: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").OlHTMLAttributes<HTMLOListElement>, HTMLOListElement>, never>> & string;
|
|
383
|
-
export declare const StyledTime: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<Omit<Omit<import("@pega/cosmos-react-core").DateTimeDisplayProps, "ref"> & import("react").RefAttributes<
|
|
384
|
-
ref?: ((instance:
|
|
383
|
+
export declare const StyledTime: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<Omit<Omit<import("@pega/cosmos-react-core").DateTimeDisplayProps, "ref"> & import("react").RefAttributes<HTMLTimeElement> & import("@pega/cosmos-react-core").ForwardProps, "ref"> & {
|
|
384
|
+
ref?: ((instance: HTMLTimeElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLTimeElement> | null | undefined;
|
|
385
385
|
}, never>> & string & Omit<import("@pega/cosmos-react-core").ForwardRefForwardPropsComponent<import("@pega/cosmos-react-core").DateTimeDisplayProps>, keyof import("react").Component<any, {}, any>>;
|
|
386
386
|
export declare const StyledLoadingCell: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
387
387
|
export declare const timelineItemsGridProps: {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ReactElement, ReactNode, Ref } from 'react';
|
|
2
2
|
import type { BaseProps, DateTimeDisplayProps, FieldValueListProps, IconProps, NoChildrenProp, StatusProps } from '@pega/cosmos-react-core';
|
|
3
3
|
import type { Group } from 'pega-repeating-structures-core/types/State.types';
|
|
4
|
+
import type { RsCoreTypes } from 'pega-repeating-structures-core';
|
|
4
5
|
export interface ActivityObject {
|
|
5
6
|
/** Unique id for activity */
|
|
6
7
|
id: string;
|
|
@@ -25,22 +26,18 @@ export interface ActivityObject {
|
|
|
25
26
|
/** The set of field values to render in the list. */
|
|
26
27
|
content?: FieldValueListProps['fields'] | ReactElement;
|
|
27
28
|
}
|
|
29
|
+
export interface ActivityGroup {
|
|
30
|
+
header: RsCoreTypes.GroupGenerator;
|
|
31
|
+
headerContent: ReactNode;
|
|
32
|
+
activity: ActivityObject[];
|
|
33
|
+
}
|
|
28
34
|
export default interface TimelineProps extends BaseProps, NoChildrenProp {
|
|
29
35
|
/** List of activity */
|
|
30
|
-
activities:
|
|
31
|
-
header: ReactNode;
|
|
32
|
-
activity: ActivityObject[];
|
|
33
|
-
}[];
|
|
36
|
+
activities: ActivityGroup[];
|
|
34
37
|
/** Current time as Date */
|
|
35
38
|
currentTime: Date;
|
|
36
39
|
/** Grouping configuration */
|
|
37
40
|
groupBy?: Group;
|
|
38
|
-
/**
|
|
39
|
-
* Whether groups are expanded by default.
|
|
40
|
-
* Only applies when `groupBy` is provided.
|
|
41
|
-
* @default true
|
|
42
|
-
*/
|
|
43
|
-
defaultGroupsExpanded?: boolean;
|
|
44
41
|
/**
|
|
45
42
|
* Show a Progress indicator at the end of a list where newly loaded items will be appended.
|
|
46
43
|
* @default false
|
|
@@ -48,6 +45,8 @@ export default interface TimelineProps extends BaseProps, NoChildrenProp {
|
|
|
48
45
|
loading?: boolean;
|
|
49
46
|
/** Callback to fetch more activity items */
|
|
50
47
|
loadMore?: () => void;
|
|
48
|
+
/** Triggers the expand or collapse action for a group header. */
|
|
49
|
+
toggleGroupExpansion: RsCoreTypes.View['type']['toggleGroupExpansion'];
|
|
51
50
|
/** Ref for the wrapping element. */
|
|
52
51
|
ref?: Ref<HTMLTableElement>;
|
|
53
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Timeline.types.d.ts","sourceRoot":"","sources":["../../../../Core/Views/Timeline/Timeline.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE1D,OAAO,KAAK,EACV,SAAS,EACT,oBAAoB,EACpB,mBAAmB,EACnB,SAAS,EACT,cAAc,EACd,WAAW,EACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kDAAkD,CAAC;
|
|
1
|
+
{"version":3,"file":"Timeline.types.d.ts","sourceRoot":"","sources":["../../../../Core/Views/Timeline/Timeline.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE1D,OAAO,KAAK,EACV,SAAS,EACT,oBAAoB,EACpB,mBAAmB,EACnB,SAAS,EACT,cAAc,EACd,WAAW,EACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kDAAkD,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAElE,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,+DAA+D;IAC/D,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC7B;;;OAGG;IACH,WAAW,CAAC,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAC9C,kDAAkD;IAClD,KAAK,EAAE,SAAS,CAAC;IACjB,mEAAmE;IACnE,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACzB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gDAAgD;IAChD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,qDAAqD;IACrD,OAAO,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC;CACxD;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,CAAC,cAAc,CAAC;IACnC,aAAa,EAAE,SAAS,CAAC;IACzB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,MAAM,CAAC,OAAO,WAAW,aAAc,SAAQ,SAAS,EAAE,cAAc;IACtE,uBAAuB;IACvB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,2BAA2B;IAC3B,WAAW,EAAE,IAAI,CAAC;IAClB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,iEAAiE;IACjE,oBAAoB,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC;IACvE,oCAAoC;IACpC,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;CAC7B"}
|