@elliemae/ds-shuttle-v2 3.13.0-next.4 → 3.13.1-rc.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/cjs/DSShuttleV2.js +3 -2
- package/dist/cjs/DSShuttleV2.js.map +3 -3
- package/dist/cjs/config/{useAutoCalculated/useDataStructure.js → configureAutoCalculated.js} +12 -22
- package/dist/cjs/config/configureAutoCalculated.js.map +7 -0
- package/dist/cjs/config/itemMovementHelpers.js +1 -17
- package/dist/cjs/config/itemMovementHelpers.js.map +2 -2
- package/dist/cjs/config/useFocusTracker/useFocusActionTrackers.js +6 -6
- package/dist/cjs/config/useFocusTracker/useFocusActionTrackers.js.map +2 -2
- package/dist/cjs/config/useShuttleV2.js +5 -4
- package/dist/cjs/config/useShuttleV2.js.map +2 -2
- package/dist/cjs/config/useStore/useStore.js +5 -14
- package/dist/cjs/config/useStore/useStore.js.map +2 -2
- package/dist/cjs/constants/index.js +0 -4
- package/dist/cjs/constants/index.js.map +2 -2
- package/dist/cjs/index.js +1 -5
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/parts/Header.js +1 -2
- package/dist/cjs/parts/Header.js.map +2 -2
- package/dist/cjs/parts/Item/Item.js +11 -64
- package/dist/cjs/parts/Item/Item.js.map +3 -3
- package/dist/cjs/parts/Item/ItemActions/ItemActions.js +9 -10
- package/dist/cjs/parts/Item/ItemActions/ItemActions.js.map +2 -2
- package/dist/cjs/parts/Item/ItemActions/useActionsLogicHandlers.js +1 -16
- package/dist/cjs/parts/Item/ItemActions/useActionsLogicHandlers.js.map +2 -2
- package/dist/cjs/parts/Item/ItemActions/useInnerRefHandlers.js +4 -18
- package/dist/cjs/parts/Item/ItemActions/useInnerRefHandlers.js.map +2 -2
- package/dist/cjs/parts/Item/ItemMiddleSection.js +3 -4
- package/dist/cjs/parts/Item/ItemMiddleSection.js.map +2 -2
- package/dist/cjs/parts/Item/ItemSelection.js +1 -2
- package/dist/cjs/parts/Item/ItemSelection.js.map +2 -2
- package/dist/cjs/parts/Item/useItemArrowNavigation.js +0 -7
- package/dist/cjs/parts/Item/useItemArrowNavigation.js.map +2 -2
- package/dist/cjs/parts/Item/useSelectionLogic.js +1 -12
- package/dist/cjs/parts/Item/useSelectionLogic.js.map +2 -2
- package/dist/cjs/parts/MainContent.js +1 -2
- package/dist/cjs/parts/MainContent.js.map +2 -2
- package/dist/cjs/parts/Panel/bottom/LoadMoreBtn.js +1 -5
- package/dist/cjs/parts/Panel/bottom/LoadMoreBtn.js.map +2 -2
- package/dist/cjs/parts/Panel/bottom/LoadingMore.js +1 -5
- package/dist/cjs/parts/Panel/bottom/LoadingMore.js.map +2 -2
- package/dist/cjs/parts/Panel/bottom/PanelContentBottomSection.js +1 -2
- package/dist/cjs/parts/Panel/bottom/PanelContentBottomSection.js.map +2 -2
- package/dist/cjs/parts/Panel/bottom/useLoadMoreBtnArrowNavigation.js +1 -14
- package/dist/cjs/parts/Panel/bottom/useLoadMoreBtnArrowNavigation.js.map +2 -2
- package/dist/cjs/parts/Panel/middle/EmptyItems.js +1 -2
- package/dist/cjs/parts/Panel/middle/EmptyItems.js.map +2 -2
- package/dist/cjs/parts/Panel/middle/ItemListWrapper.js +102 -48
- package/dist/cjs/parts/Panel/middle/ItemListWrapper.js.map +2 -2
- package/dist/cjs/parts/Panel/middle/LoadingItems.js +1 -2
- package/dist/cjs/parts/Panel/middle/LoadingItems.js.map +2 -2
- package/dist/cjs/parts/Panel/middle/MultipleSelectionAction.js +7 -9
- package/dist/cjs/parts/Panel/middle/MultipleSelectionAction.js.map +2 -2
- package/dist/cjs/parts/Panel/middle/PanelContentMiddleSection.js +7 -120
- package/dist/cjs/parts/Panel/middle/PanelContentMiddleSection.js.map +2 -2
- package/dist/cjs/parts/Panel/top/PanelContentTopSection.js +1 -2
- package/dist/cjs/parts/Panel/top/PanelContentTopSection.js.map +2 -2
- package/dist/cjs/parts/Panel/top/PanelFilterSection.js +2 -3
- package/dist/cjs/parts/Panel/top/PanelFilterSection.js.map +2 -2
- package/dist/cjs/parts/Panel/top/SelectionHeader.js +3 -7
- package/dist/cjs/parts/Panel/top/SelectionHeader.js.map +2 -2
- package/dist/cjs/parts/PanelWrapper.js +2 -3
- package/dist/cjs/parts/PanelWrapper.js.map +2 -2
- package/dist/cjs/react-desc-prop-types.js +2 -14
- package/dist/cjs/react-desc-prop-types.js.map +2 -2
- package/dist/esm/DSShuttleV2.js +3 -2
- package/dist/esm/DSShuttleV2.js.map +3 -3
- package/dist/esm/config/{useAutoCalculated/useDataStructure.js → configureAutoCalculated.js} +9 -19
- package/dist/esm/config/configureAutoCalculated.js.map +7 -0
- package/dist/esm/config/itemMovementHelpers.js +1 -17
- package/dist/esm/config/itemMovementHelpers.js.map +2 -2
- package/dist/esm/config/useFocusTracker/useFocusActionTrackers.js +6 -6
- package/dist/esm/config/useFocusTracker/useFocusActionTrackers.js.map +2 -2
- package/dist/esm/config/useShuttleV2.js +5 -4
- package/dist/esm/config/useShuttleV2.js.map +2 -2
- package/dist/esm/config/useStore/useStore.js +5 -14
- package/dist/esm/config/useStore/useStore.js.map +2 -2
- package/dist/esm/constants/index.js +0 -4
- package/dist/esm/constants/index.js.map +2 -2
- package/dist/esm/index.js +1 -5
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/parts/Header.js +1 -2
- package/dist/esm/parts/Header.js.map +2 -2
- package/dist/esm/parts/Item/Item.js +13 -66
- package/dist/esm/parts/Item/Item.js.map +2 -2
- package/dist/esm/parts/Item/ItemActions/ItemActions.js +9 -10
- package/dist/esm/parts/Item/ItemActions/ItemActions.js.map +2 -2
- package/dist/esm/parts/Item/ItemActions/useActionsLogicHandlers.js +1 -16
- package/dist/esm/parts/Item/ItemActions/useActionsLogicHandlers.js.map +2 -2
- package/dist/esm/parts/Item/ItemActions/useInnerRefHandlers.js +4 -18
- package/dist/esm/parts/Item/ItemActions/useInnerRefHandlers.js.map +2 -2
- package/dist/esm/parts/Item/ItemMiddleSection.js +3 -4
- package/dist/esm/parts/Item/ItemMiddleSection.js.map +2 -2
- package/dist/esm/parts/Item/ItemSelection.js +1 -2
- package/dist/esm/parts/Item/ItemSelection.js.map +2 -2
- package/dist/esm/parts/Item/useItemArrowNavigation.js +0 -7
- package/dist/esm/parts/Item/useItemArrowNavigation.js.map +2 -2
- package/dist/esm/parts/Item/useSelectionLogic.js +2 -13
- package/dist/esm/parts/Item/useSelectionLogic.js.map +2 -2
- package/dist/esm/parts/MainContent.js +1 -2
- package/dist/esm/parts/MainContent.js.map +2 -2
- package/dist/esm/parts/Panel/bottom/LoadMoreBtn.js +1 -5
- package/dist/esm/parts/Panel/bottom/LoadMoreBtn.js.map +2 -2
- package/dist/esm/parts/Panel/bottom/LoadingMore.js +1 -5
- package/dist/esm/parts/Panel/bottom/LoadingMore.js.map +2 -2
- package/dist/esm/parts/Panel/bottom/PanelContentBottomSection.js +1 -2
- package/dist/esm/parts/Panel/bottom/PanelContentBottomSection.js.map +2 -2
- package/dist/esm/parts/Panel/bottom/useLoadMoreBtnArrowNavigation.js +1 -14
- package/dist/esm/parts/Panel/bottom/useLoadMoreBtnArrowNavigation.js.map +2 -2
- package/dist/esm/parts/Panel/middle/EmptyItems.js +1 -2
- package/dist/esm/parts/Panel/middle/EmptyItems.js.map +2 -2
- package/dist/esm/parts/Panel/middle/ItemListWrapper.js +104 -50
- package/dist/esm/parts/Panel/middle/ItemListWrapper.js.map +2 -2
- package/dist/esm/parts/Panel/middle/LoadingItems.js +1 -2
- package/dist/esm/parts/Panel/middle/LoadingItems.js.map +2 -2
- package/dist/esm/parts/Panel/middle/MultipleSelectionAction.js +7 -9
- package/dist/esm/parts/Panel/middle/MultipleSelectionAction.js.map +2 -2
- package/dist/esm/parts/Panel/middle/PanelContentMiddleSection.js +9 -122
- package/dist/esm/parts/Panel/middle/PanelContentMiddleSection.js.map +2 -2
- package/dist/esm/parts/Panel/top/PanelContentTopSection.js +1 -2
- package/dist/esm/parts/Panel/top/PanelContentTopSection.js.map +2 -2
- package/dist/esm/parts/Panel/top/PanelFilterSection.js +2 -3
- package/dist/esm/parts/Panel/top/PanelFilterSection.js.map +2 -2
- package/dist/esm/parts/Panel/top/SelectionHeader.js +3 -7
- package/dist/esm/parts/Panel/top/SelectionHeader.js.map +2 -2
- package/dist/esm/parts/PanelWrapper.js +2 -3
- package/dist/esm/parts/PanelWrapper.js.map +2 -2
- package/dist/esm/react-desc-prop-types.js +2 -14
- package/dist/esm/react-desc-prop-types.js.map +2 -2
- package/package.json +11 -12
- package/dist/cjs/config/DSShuttleV2Definitions.js +0 -67
- package/dist/cjs/config/DSShuttleV2Definitions.js.map +0 -7
- package/dist/cjs/config/useAutoCalculated/index.js +0 -39
- package/dist/cjs/config/useAutoCalculated/index.js.map +0 -7
- package/dist/cjs/config/useAutoCalculated/useDataStructure.js.map +0 -7
- package/dist/cjs/config/useAutoCalculated/useShuttleVirtualized.js +0 -98
- package/dist/cjs/config/useAutoCalculated/useShuttleVirtualized.js.map +0 -7
- package/dist/cjs/parts/Dnd/DndHandle.js +0 -64
- package/dist/cjs/parts/Dnd/DndHandle.js.map +0 -7
- package/dist/cjs/parts/Dnd/DropIndicator.js +0 -88
- package/dist/cjs/parts/Dnd/DropIndicator.js.map +0 -7
- package/dist/cjs/parts/HoC/withConditionalDnDRowContext.js +0 -90
- package/dist/cjs/parts/HoC/withConditionalDnDRowContext.js.map +0 -7
- package/dist/cjs/parts/HoC/withConditionalUseSortable.js +0 -38
- package/dist/cjs/parts/HoC/withConditionalUseSortable.js.map +0 -7
- package/dist/cjs/parts/Item/ItemOverlay.js +0 -61
- package/dist/cjs/parts/Item/ItemOverlay.js.map +0 -7
- package/dist/esm/config/DSShuttleV2Definitions.js +0 -41
- package/dist/esm/config/DSShuttleV2Definitions.js.map +0 -7
- package/dist/esm/config/useAutoCalculated/index.js +0 -13
- package/dist/esm/config/useAutoCalculated/index.js.map +0 -7
- package/dist/esm/config/useAutoCalculated/useDataStructure.js.map +0 -7
- package/dist/esm/config/useAutoCalculated/useShuttleVirtualized.js +0 -72
- package/dist/esm/config/useAutoCalculated/useShuttleVirtualized.js.map +0 -7
- package/dist/esm/parts/Dnd/DndHandle.js +0 -38
- package/dist/esm/parts/Dnd/DndHandle.js.map +0 -7
- package/dist/esm/parts/Dnd/DropIndicator.js +0 -62
- package/dist/esm/parts/Dnd/DropIndicator.js.map +0 -7
- package/dist/esm/parts/HoC/withConditionalDnDRowContext.js +0 -64
- package/dist/esm/parts/HoC/withConditionalDnDRowContext.js.map +0 -7
- package/dist/esm/parts/HoC/withConditionalUseSortable.js +0 -12
- package/dist/esm/parts/HoC/withConditionalUseSortable.js.map +0 -7
- package/dist/esm/parts/Item/ItemOverlay.js +0 -35
- package/dist/esm/parts/Item/ItemOverlay.js.map +0 -7
|
@@ -1,71 +1,125 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import React2 from "react";
|
|
4
|
+
import { useOnSpecificFocus } from "@elliemae/ds-utilities";
|
|
4
5
|
import { Grid } from "@elliemae/ds-grid";
|
|
5
6
|
import { styled } from "@elliemae/ds-system";
|
|
6
7
|
import { useInternalStore, usePropsStore } from "../../../config/useStore";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
|
|
8
|
+
import { useFocusTracker } from "../../../config/useFocusTracker";
|
|
9
|
+
import { REGIONS_FOCUSES } from "../../../constants";
|
|
10
|
+
import { Item } from "../../Item/Item";
|
|
11
|
+
import { MultipleSelectionAction } from "./MultipleSelectionAction";
|
|
12
|
+
const StyledItemsWrapper = styled(Grid, { name: "ds-shuttle-v2", slot: "items-wrapper" })`
|
|
11
13
|
position: relative;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
:focus,
|
|
15
|
+
:focus-visible {
|
|
16
|
+
outline: 2px solid brand-700;
|
|
17
|
+
outline-offset: -2px;
|
|
18
|
+
// .ds-shuttle-v2-move-multiple-wrapper {
|
|
19
|
+
// top: 2px;
|
|
20
|
+
// right: 2px;
|
|
21
|
+
// height: calc(100% - 4px);
|
|
22
|
+
// width: calc(65px - 2px);
|
|
23
|
+
// }
|
|
24
|
+
}
|
|
19
25
|
`;
|
|
26
|
+
const useInnerRefHandlers = ({ isDestinationPanel }) => {
|
|
27
|
+
const focusRegion = useInternalStore((state) => state.focusRegion);
|
|
28
|
+
const focusItem = useInternalStore((state) => state.focusItem);
|
|
29
|
+
const focusItemAction = useInternalStore((state) => state.focusItemAction);
|
|
30
|
+
const currRegion = isDestinationPanel ? REGIONS_FOCUSES.DESTINATION_PANEL : REGIONS_FOCUSES.SOURCE_PANEL;
|
|
31
|
+
const shouldFocus = React2.useMemo(
|
|
32
|
+
() => focusRegion === currRegion && focusItem === "" && focusItemAction === "",
|
|
33
|
+
[currRegion, focusItem, focusItemAction, focusRegion]
|
|
34
|
+
);
|
|
35
|
+
const innerRefHandlerParentItem = React2.useCallback(
|
|
36
|
+
(node) => {
|
|
37
|
+
if (shouldFocus) {
|
|
38
|
+
node?.focus();
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
[shouldFocus]
|
|
42
|
+
);
|
|
43
|
+
return React2.useMemo(() => ({ shouldFocus, innerRefHandlerParentItem }), [shouldFocus, innerRefHandlerParentItem]);
|
|
44
|
+
};
|
|
20
45
|
const ItemListWrapper = React2.memo((panelMetaInfo) => {
|
|
21
46
|
const { isDestinationPanel } = panelMetaInfo;
|
|
22
47
|
const itemList = useInternalStore(
|
|
23
48
|
(state) => isDestinationPanel ? state.destinationConfiguredData : state.sourceConfiguredData
|
|
24
49
|
);
|
|
25
|
-
const
|
|
26
|
-
(state) => isDestinationPanel ? state.
|
|
27
|
-
);
|
|
28
|
-
const virtualItems = useInternalStore(
|
|
29
|
-
(state) => isDestinationPanel ? state.destinationVirtualItems : state.sourceVirtualItems
|
|
30
|
-
);
|
|
31
|
-
const withDragNDrop = usePropsStore(
|
|
32
|
-
(state) => isDestinationPanel ? !state.removeDragAndDropFromDestination : state.addDragAndDropFromSource
|
|
50
|
+
const withLoadMore = usePropsStore(
|
|
51
|
+
(state) => isDestinationPanel ? state.destinationWithLoadMore : state.sourceWithLoadMore
|
|
33
52
|
);
|
|
53
|
+
const destinationHasMultipleSelectedItems = useInternalStore((store) => store.destinationHasMultipleSelectedItems);
|
|
54
|
+
const sourceHasMultipleSelectedItems = useInternalStore((store) => store.sourceHasMultipleSelectedItems);
|
|
55
|
+
const hasMultipleSelection = isDestinationPanel ? destinationHasMultipleSelectedItems : sourceHasMultipleSelectedItems;
|
|
34
56
|
const rows = React2.useMemo(
|
|
35
57
|
() => [`repeat(${itemList?.length ? itemList?.length : "0"},min-content)`],
|
|
36
58
|
[itemList.length]
|
|
37
59
|
);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
const {
|
|
61
|
+
trackFocusRegionPanel,
|
|
62
|
+
trackFocusItemFirst,
|
|
63
|
+
trackFocusItemLast,
|
|
64
|
+
trackFocusActionParent,
|
|
65
|
+
trackFocusRegionPanelItem,
|
|
66
|
+
trackFocusLoadMoreBtn
|
|
67
|
+
} = useFocusTracker();
|
|
68
|
+
const config = React2.useMemo(
|
|
69
|
+
() => ({
|
|
70
|
+
onFocus: () => {
|
|
71
|
+
trackFocusRegionPanel(isDestinationPanel);
|
|
72
|
+
}
|
|
73
|
+
}),
|
|
74
|
+
[trackFocusRegionPanel, isDestinationPanel]
|
|
75
|
+
);
|
|
76
|
+
const onPanelFocus = useOnSpecificFocus(config);
|
|
77
|
+
const onPanelKeyDown = React2.useCallback(
|
|
78
|
+
(e) => {
|
|
79
|
+
const { key } = e;
|
|
80
|
+
if (["Home", "End", "ArrowUp", "ArrowDown"].includes(key)) {
|
|
81
|
+
e.preventDefault();
|
|
82
|
+
e.stopPropagation();
|
|
83
|
+
trackFocusRegionPanelItem(isDestinationPanel);
|
|
84
|
+
trackFocusActionParent();
|
|
85
|
+
if (key === "ArrowDown" || key === "Home")
|
|
86
|
+
trackFocusItemFirst();
|
|
87
|
+
if (key === "ArrowUp" || key === "End") {
|
|
88
|
+
if (withLoadMore)
|
|
89
|
+
trackFocusLoadMoreBtn();
|
|
90
|
+
else
|
|
91
|
+
trackFocusItemLast();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
[
|
|
96
|
+
isDestinationPanel,
|
|
97
|
+
trackFocusActionParent,
|
|
98
|
+
trackFocusItemFirst,
|
|
99
|
+
trackFocusItemLast,
|
|
100
|
+
trackFocusLoadMoreBtn,
|
|
101
|
+
trackFocusRegionPanelItem,
|
|
102
|
+
withLoadMore
|
|
103
|
+
]
|
|
104
|
+
);
|
|
105
|
+
const { innerRefHandlerParentItem } = useInnerRefHandlers(panelMetaInfo);
|
|
106
|
+
return /* @__PURE__ */ jsxs(
|
|
107
|
+
StyledItemsWrapper,
|
|
108
|
+
{
|
|
109
|
+
alignItems: "flex-start",
|
|
110
|
+
rows,
|
|
111
|
+
tabIndex: 0,
|
|
112
|
+
ref: innerRefHandlerParentItem,
|
|
113
|
+
onFocus: onPanelFocus,
|
|
114
|
+
onKeyDown: onPanelKeyDown,
|
|
115
|
+
children: [
|
|
116
|
+
itemList.map((item) => /* @__PURE__ */ jsx(Item, { item, isDestinationPanel }, item.original.id)),
|
|
117
|
+
hasMultipleSelection ? /* @__PURE__ */ jsx(MultipleSelectionAction, { isDestinationPanel }) : null
|
|
118
|
+
]
|
|
119
|
+
}
|
|
120
|
+
);
|
|
64
121
|
});
|
|
65
|
-
const ItemListWrapperWithContext = withConditionalDnDRowContext(ItemListWrapper);
|
|
66
|
-
var ItemListWrapper_default = ItemListWrapperWithContext;
|
|
67
122
|
export {
|
|
68
|
-
|
|
69
|
-
ItemListWrapper_default as default
|
|
123
|
+
ItemListWrapper
|
|
70
124
|
};
|
|
71
125
|
//# sourceMappingURL=ItemListWrapper.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/parts/Panel/middle/ItemListWrapper.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { Grid } from '@elliemae/ds-grid';\nimport { styled } from '@elliemae/ds-system';\nimport { useInternalStore, usePropsStore } from '../../../config/useStore';\nimport { type DSShuttleV2T } from '../../../react-desc-prop-types';\nimport {
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { useOnSpecificFocus } from '@elliemae/ds-utilities';\nimport { Grid } from '@elliemae/ds-grid';\nimport { styled } from '@elliemae/ds-system';\nimport { useInternalStore, usePropsStore } from '../../../config/useStore';\nimport { useFocusTracker } from '../../../config/useFocusTracker';\nimport { type DSShuttleV2T } from '../../../react-desc-prop-types';\nimport { REGIONS_FOCUSES } from '../../../constants';\nimport { Item } from '../../Item/Item';\nimport { MultipleSelectionAction } from './MultipleSelectionAction';\n\nconst StyledItemsWrapper = styled(Grid, { name: 'ds-shuttle-v2', slot: 'items-wrapper' })`\n position: relative;\n :focus,\n :focus-visible {\n outline: 2px solid brand-700;\n outline-offset: -2px;\n // .ds-shuttle-v2-move-multiple-wrapper {\n // top: 2px;\n // right: 2px;\n // height: calc(100% - 4px);\n // width: calc(65px - 2px);\n // }\n }\n`;\n\nconst useInnerRefHandlers = ({ isDestinationPanel }: DSShuttleV2T.PanelMetaInfo) => {\n const focusRegion = useInternalStore((state) => state.focusRegion);\n const focusItem = useInternalStore((state) => state.focusItem);\n const focusItemAction = useInternalStore((state) => state.focusItemAction);\n const currRegion = isDestinationPanel ? REGIONS_FOCUSES.DESTINATION_PANEL : REGIONS_FOCUSES.SOURCE_PANEL;\n\n const shouldFocus = React.useMemo(\n () => focusRegion === currRegion && focusItem === '' && focusItemAction === '',\n [currRegion, focusItem, focusItemAction, focusRegion],\n );\n const innerRefHandlerParentItem = React.useCallback(\n (node: HTMLDivElement) => {\n if (shouldFocus) {\n node?.focus();\n }\n },\n [shouldFocus],\n );\n return React.useMemo(() => ({ shouldFocus, innerRefHandlerParentItem }), [shouldFocus, innerRefHandlerParentItem]);\n};\n\nexport const ItemListWrapper = React.memo((panelMetaInfo: DSShuttleV2T.PanelMetaInfo) => {\n const { isDestinationPanel } = panelMetaInfo;\n const itemList = useInternalStore((state) =>\n isDestinationPanel ? state.destinationConfiguredData : state.sourceConfiguredData,\n );\n const withLoadMore = usePropsStore((state) =>\n isDestinationPanel ? state.destinationWithLoadMore : state.sourceWithLoadMore,\n );\n const destinationHasMultipleSelectedItems = useInternalStore((store) => store.destinationHasMultipleSelectedItems);\n const sourceHasMultipleSelectedItems = useInternalStore((store) => store.sourceHasMultipleSelectedItems);\n const hasMultipleSelection = isDestinationPanel\n ? destinationHasMultipleSelectedItems\n : sourceHasMultipleSelectedItems;\n\n const rows = React.useMemo(\n () => [`repeat(${itemList?.length ? itemList?.length : '0'},min-content)`],\n [itemList.length],\n );\n const {\n trackFocusRegionPanel,\n trackFocusItemFirst,\n trackFocusItemLast,\n trackFocusActionParent,\n trackFocusRegionPanelItem,\n trackFocusLoadMoreBtn,\n } = useFocusTracker();\n const config = React.useMemo(\n () => ({\n onFocus: () => {\n trackFocusRegionPanel(isDestinationPanel);\n },\n }),\n [trackFocusRegionPanel, isDestinationPanel],\n );\n const onPanelFocus = useOnSpecificFocus(config);\n\n const onPanelKeyDown = React.useCallback<React.KeyboardEventHandler<HTMLDivElement>>(\n (e) => {\n const { key } = e;\n if (['Home', 'End', 'ArrowUp', 'ArrowDown'].includes(key)) {\n e.preventDefault();\n e.stopPropagation();\n trackFocusRegionPanelItem(isDestinationPanel);\n trackFocusActionParent();\n // we won't receive ArrowUp/ArrowDown if this happens in a child because children are stopping propagation\n if (key === 'ArrowDown' || key === 'Home') trackFocusItemFirst();\n if (key === 'ArrowUp' || key === 'End') {\n if (withLoadMore) trackFocusLoadMoreBtn();\n else trackFocusItemLast();\n }\n }\n },\n [\n isDestinationPanel,\n trackFocusActionParent,\n trackFocusItemFirst,\n trackFocusItemLast,\n trackFocusLoadMoreBtn,\n trackFocusRegionPanelItem,\n withLoadMore,\n ],\n );\n const { innerRefHandlerParentItem } = useInnerRefHandlers(panelMetaInfo);\n return (\n <StyledItemsWrapper\n alignItems=\"flex-start\"\n rows={rows}\n tabIndex={0}\n ref={innerRefHandlerParentItem}\n onFocus={onPanelFocus}\n onKeyDown={onPanelKeyDown}\n >\n {itemList.map((item) => (\n <Item key={item.original.id} item={item} isDestinationPanel={isDestinationPanel} />\n ))}\n {hasMultipleSelection ? <MultipleSelectionAction isDestinationPanel={isDestinationPanel} /> : null}\n </StyledItemsWrapper>\n );\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -3,8 +3,7 @@ import { jsx } from "react/jsx-runtime";
|
|
|
3
3
|
import { styled } from "@elliemae/ds-system";
|
|
4
4
|
import { Grid } from "@elliemae/ds-grid";
|
|
5
5
|
import { DSCircularIndeterminateIndicator } from "@elliemae/ds-circular-progress-indicator";
|
|
6
|
-
|
|
7
|
-
const StyledLoadingListWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.LOADING_LIST_WRAPPER })`
|
|
6
|
+
const StyledLoadingListWrapper = styled(Grid, { name: "ds-shuttle-v2", slot: "loading-list-wrapper" })`
|
|
8
7
|
color: neutral-500;
|
|
9
8
|
`;
|
|
10
9
|
const LoadingItems = (panelMetaInfo) => /* @__PURE__ */ jsx(StyledLoadingListWrapper, { alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsx(DSCircularIndeterminateIndicator, { size: "xl", text: "Loading..." }) });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/parts/Panel/middle/LoadingItems.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-unused-vars */\nimport React from 'react';\nimport { styled } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport { DSCircularIndeterminateIndicator } from '@elliemae/ds-circular-progress-indicator';\nimport { type DSShuttleV2T } from '../../../react-desc-prop-types';\
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-unused-vars */\nimport React from 'react';\nimport { styled } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport { DSCircularIndeterminateIndicator } from '@elliemae/ds-circular-progress-indicator';\nimport { type DSShuttleV2T } from '../../../react-desc-prop-types';\n\nconst StyledLoadingListWrapper = styled(Grid, { name: 'ds-shuttle-v2', slot: 'loading-list-wrapper' })`\n color: neutral-500;\n`;\nexport const LoadingItems = (panelMetaInfo: DSShuttleV2T.PanelMetaInfo) => (\n <StyledLoadingListWrapper alignItems=\"center\" justifyContent=\"center\">\n <DSCircularIndeterminateIndicator size=\"xl\" text=\"Loading...\" />\n </StyledLoadingListWrapper>\n);\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACanB;AAVJ,SAAS,cAAc;AACvB,SAAS,YAAY;AACrB,SAAS,wCAAwC;AAGjD,MAAM,2BAA2B,OAAO,MAAM,EAAE,MAAM,iBAAiB,MAAM,uBAAuB,CAAC;AAAA;AAAA;AAG9F,MAAM,eAAe,CAAC,kBAC3B,oBAAC,4BAAyB,YAAW,UAAS,gBAAe,UAC3D,8BAAC,oCAAiC,MAAK,MAAK,MAAK,cAAa,GAChE;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -7,13 +7,11 @@ import { DSButtonV2 } from "@elliemae/ds-button";
|
|
|
7
7
|
import { ArrowShortRight, CloseMedium } from "@elliemae/ds-icons";
|
|
8
8
|
import { useHandleMoveSelection } from "../../../config/itemMovementHelpers";
|
|
9
9
|
import { useFocusTracker } from "../../../config/useFocusTracker";
|
|
10
|
-
|
|
11
|
-
const StyledMoveMultipleWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.MOVE_MULTIPLE_WRAPPER })`
|
|
10
|
+
const StyledMoveMultipleWrapper = styled(Grid, { name: "ds-shuttle-v2", slot: "move-multiple-wrapper" })`
|
|
12
11
|
position: absolute;
|
|
13
12
|
background-color: neutral-000;
|
|
14
13
|
top: 0px;
|
|
15
14
|
right: 0px;
|
|
16
|
-
transform: translateX(0);
|
|
17
15
|
height: 100%;
|
|
18
16
|
width: 65px;
|
|
19
17
|
:hover {
|
|
@@ -27,23 +25,23 @@ const StyledMoveMultipleWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DS
|
|
|
27
25
|
}
|
|
28
26
|
`;
|
|
29
27
|
const StyledButton = styled(DSButtonV2, {
|
|
30
|
-
name:
|
|
31
|
-
slot:
|
|
28
|
+
name: "ds-shuttle-v2",
|
|
29
|
+
slot: "move-multiple-btn"
|
|
32
30
|
})`
|
|
33
31
|
width: 100%;
|
|
34
32
|
height: 100%;
|
|
35
33
|
`;
|
|
36
34
|
const StyledCloseMediumIcon = styled(CloseMedium, {
|
|
37
|
-
name:
|
|
38
|
-
slot:
|
|
35
|
+
name: "ds-shuttle-v2",
|
|
36
|
+
slot: "item-action-btn-to-source-icon"
|
|
39
37
|
})`
|
|
40
38
|
> svg {
|
|
41
39
|
fill: brand-600;
|
|
42
40
|
}
|
|
43
41
|
`;
|
|
44
42
|
const StyledArrowShortRightIcon = styled(ArrowShortRight, {
|
|
45
|
-
name:
|
|
46
|
-
slot:
|
|
43
|
+
name: "ds-shuttle-v2",
|
|
44
|
+
slot: "item-action-btn-to-destination-icon"
|
|
47
45
|
})`
|
|
48
46
|
> svg {
|
|
49
47
|
fill: brand-600;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/parts/Panel/middle/MultipleSelectionAction.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { styled } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport { DSButtonV2, type DSButtonT } from '@elliemae/ds-button';\nimport { ArrowShortRight, CloseMedium } from '@elliemae/ds-icons';\nimport { type DSShuttleV2T } from '../../../react-desc-prop-types';\nimport { useHandleMoveSelection } from '../../../config/itemMovementHelpers';\nimport { useFocusTracker } from '../../../config/useFocusTracker';\
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { styled } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport { DSButtonV2, type DSButtonT } from '@elliemae/ds-button';\nimport { ArrowShortRight, CloseMedium } from '@elliemae/ds-icons';\nimport { type DSShuttleV2T } from '../../../react-desc-prop-types';\nimport { useHandleMoveSelection } from '../../../config/itemMovementHelpers';\nimport { useFocusTracker } from '../../../config/useFocusTracker';\n\nconst StyledMoveMultipleWrapper = styled(Grid, { name: 'ds-shuttle-v2', slot: 'move-multiple-wrapper' })`\n position: absolute;\n background-color: neutral-000;\n top: 0px;\n right: 0px;\n height: 100%;\n width: 65px;\n :hover {\n background-color: brand-200;\n > svg {\n fill: brand-700;\n }\n }\n > svg {\n fill: brand-600;\n }\n`;\nconst StyledButton = styled(DSButtonV2, {\n name: 'ds-shuttle-v2',\n slot: 'move-multiple-btn',\n})`\n width: 100%;\n height: 100%;\n`;\nconst StyledCloseMediumIcon = styled(CloseMedium, {\n name: 'ds-shuttle-v2',\n slot: 'item-action-btn-to-source-icon',\n})`\n > svg {\n fill: brand-600;\n }\n`;\nconst StyledArrowShortRightIcon = styled(ArrowShortRight, {\n name: 'ds-shuttle-v2',\n slot: 'item-action-btn-to-destination-icon',\n})`\n > svg {\n fill: brand-600;\n }\n`;\nconst gridFullFraction = ['1fr'];\n\nexport const MultipleSelectionAction = React.memo((panelMeta: DSShuttleV2T.PanelMetaInfo) => {\n const { isDestinationPanel } = panelMeta;\n const { moveSelection } = useHandleMoveSelection(panelMeta);\n const { trackFocusRegionPanel, trackFocusRegionPanelFocusAll, trackFocusItemReset, trackFocusActionReset } =\n useFocusTracker();\n const handleMoveAllAction = React.useCallback<Required<DSButtonT.Props>['onClick']>(\n (event) => {\n moveSelection(event);\n trackFocusItemReset();\n trackFocusActionReset();\n trackFocusRegionPanel(isDestinationPanel);\n },\n [isDestinationPanel, moveSelection, trackFocusActionReset, trackFocusItemReset, trackFocusRegionPanel],\n );\n const handleMoveAllBtnFocus: React.FocusEventHandler<HTMLButtonElement> = React.useCallback(() => {\n trackFocusItemReset();\n trackFocusActionReset();\n trackFocusRegionPanelFocusAll(isDestinationPanel);\n }, [isDestinationPanel, trackFocusActionReset, trackFocusItemReset, trackFocusRegionPanelFocusAll]);\n\n return (\n <StyledMoveMultipleWrapper\n boxShadow=\"xs\"\n alignItems=\"center\"\n justifyContent=\"center\"\n cols={gridFullFraction}\n rows={gridFullFraction}\n >\n <StyledButton buttonType=\"icon\" onClick={handleMoveAllAction} onFocus={handleMoveAllBtnFocus}>\n {isDestinationPanel ? (\n <StyledCloseMediumIcon width=\"20px\" height=\"20px\" />\n ) : (\n <StyledArrowShortRightIcon width=\"20px\" height=\"20px\" />\n )}\n </StyledButton>\n </StyledMoveMultipleWrapper>\n );\n});\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACiFb;AAjFV,OAAOA,YAAW;AAClB,SAAS,cAAc;AACvB,SAAS,YAAY;AACrB,SAAS,kBAAkC;AAC3C,SAAS,iBAAiB,mBAAmB;AAE7C,SAAS,8BAA8B;AACvC,SAAS,uBAAuB;AAEhC,MAAM,4BAA4B,OAAO,MAAM,EAAE,MAAM,iBAAiB,MAAM,wBAAwB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBvG,MAAM,eAAe,OAAO,YAAY;AAAA,EACtC,MAAM;AAAA,EACN,MAAM;AACR,CAAC;AAAA;AAAA;AAAA;AAID,MAAM,wBAAwB,OAAO,aAAa;AAAA,EAChD,MAAM;AAAA,EACN,MAAM;AACR,CAAC;AAAA;AAAA;AAAA;AAAA;AAKD,MAAM,4BAA4B,OAAO,iBAAiB;AAAA,EACxD,MAAM;AAAA,EACN,MAAM;AACR,CAAC;AAAA;AAAA;AAAA;AAAA;AAKD,MAAM,mBAAmB,CAAC,KAAK;AAExB,MAAM,0BAA0BA,OAAM,KAAK,CAAC,cAA0C;AAC3F,QAAM,EAAE,mBAAmB,IAAI;AAC/B,QAAM,EAAE,cAAc,IAAI,uBAAuB,SAAS;AAC1D,QAAM,EAAE,uBAAuB,+BAA+B,qBAAqB,sBAAsB,IACvG,gBAAgB;AAClB,QAAM,sBAAsBA,OAAM;AAAA,IAChC,CAAC,UAAU;AACT,oBAAc,KAAK;AACnB,0BAAoB;AACpB,4BAAsB;AACtB,4BAAsB,kBAAkB;AAAA,IAC1C;AAAA,IACA,CAAC,oBAAoB,eAAe,uBAAuB,qBAAqB,qBAAqB;AAAA,EACvG;AACA,QAAM,wBAAoEA,OAAM,YAAY,MAAM;AAChG,wBAAoB;AACpB,0BAAsB;AACtB,kCAA8B,kBAAkB;AAAA,EAClD,GAAG,CAAC,oBAAoB,uBAAuB,qBAAqB,6BAA6B,CAAC;AAElG,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,YAAW;AAAA,MACX,gBAAe;AAAA,MACf,MAAM;AAAA,MACN,MAAM;AAAA,MAEN,8BAAC,gBAAa,YAAW,QAAO,SAAS,qBAAqB,SAAS,uBACpE,+BACC,oBAAC,yBAAsB,OAAM,QAAO,QAAO,QAAO,IAElD,oBAAC,6BAA0B,OAAM,QAAO,QAAO,QAAO,GAE1D;AAAA;AAAA,EACF;AAEJ,CAAC;",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -3,55 +3,15 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import React2 from "react";
|
|
4
4
|
import { styled } from "@elliemae/ds-system";
|
|
5
5
|
import { Grid } from "@elliemae/ds-grid";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { ItemListWrapperWithContext } from "./ItemListWrapper";
|
|
6
|
+
import { usePropsStore } from "../../../config/useStore";
|
|
7
|
+
import { ItemListWrapper } from "./ItemListWrapper";
|
|
9
8
|
import { EmptyItems } from "./EmptyItems";
|
|
10
|
-
import { useFocusTracker } from "../../../config/useFocusTracker";
|
|
11
9
|
import { LoadingItems } from "./LoadingItems";
|
|
12
|
-
|
|
13
|
-
import { REGIONS_FOCUSES } from "../../../constants";
|
|
14
|
-
import { DSShuttleV2Name, DSShuttleV2Slots } from "../../../config/DSShuttleV2Definitions";
|
|
15
|
-
const useInnerRefHandlers = (isDestinationPanel) => {
|
|
16
|
-
const focusRegion = useInternalStore((state) => state.focusRegion);
|
|
17
|
-
const focusItem = useInternalStore((state) => state.focusItem);
|
|
18
|
-
const focusItemAction = useInternalStore((state) => state.focusItemAction);
|
|
19
|
-
const currRegion = isDestinationPanel ? REGIONS_FOCUSES.DESTINATION_PANEL : REGIONS_FOCUSES.SOURCE_PANEL;
|
|
20
|
-
const shouldFocus = React2.useMemo(
|
|
21
|
-
() => focusRegion === currRegion && focusItem === "" && focusItemAction === "",
|
|
22
|
-
[currRegion, focusItem, focusItemAction, focusRegion]
|
|
23
|
-
);
|
|
24
|
-
const innerRefHandlerParentItem = React2.useCallback(
|
|
25
|
-
(node) => {
|
|
26
|
-
if (shouldFocus) {
|
|
27
|
-
node?.focus();
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
[shouldFocus]
|
|
31
|
-
);
|
|
32
|
-
return React2.useMemo(() => ({ shouldFocus, innerRefHandlerParentItem }), [shouldFocus, innerRefHandlerParentItem]);
|
|
33
|
-
};
|
|
34
|
-
const StyledListWrapperMid = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.LIST_WRAPPER_MID })`
|
|
10
|
+
const StyledListWrapperMid = styled(Grid, { name: "ds-shuttle-v2", slot: "list-wrapper-mid" })`
|
|
35
11
|
overflow: hidden;
|
|
36
|
-
position: relative;
|
|
37
|
-
|
|
38
|
-
:focus,
|
|
39
|
-
:focus-visible {
|
|
40
|
-
outline: none;
|
|
41
|
-
|
|
42
|
-
&::after {
|
|
43
|
-
position: absolute;
|
|
44
|
-
content: ' ';
|
|
45
|
-
outline: 2px solid brand-700;
|
|
46
|
-
outline-offset: -2px;
|
|
47
|
-
width: 100%;
|
|
48
|
-
height: 100%;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
12
|
`;
|
|
52
|
-
const StyledMidScroller = styled(Grid, { name:
|
|
13
|
+
const StyledMidScroller = styled(Grid, { name: "ds-shuttle-v2", slot: "list-wrapper-mid" })`
|
|
53
14
|
overflow: auto;
|
|
54
|
-
max-height: '500px';
|
|
55
15
|
`;
|
|
56
16
|
const PanelContentMiddleSection = React2.memo((panelMetaInfo) => {
|
|
57
17
|
const { isDestinationPanel = false } = panelMetaInfo;
|
|
@@ -61,84 +21,11 @@ const PanelContentMiddleSection = React2.memo((panelMetaInfo) => {
|
|
|
61
21
|
const isLoading = usePropsStore((state) => isDestinationPanel ? state.destinationIsLoading : state.sourceIsLoading);
|
|
62
22
|
const showEmptyMessage = !isLoading && itemsLength === 0;
|
|
63
23
|
const showItems = !isLoading && !showEmptyMessage;
|
|
64
|
-
|
|
65
|
-
(
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const hasMultipleSelection = isDestinationPanel ? destinationHasMultipleSelectedItems : sourceHasMultipleSelectedItems;
|
|
70
|
-
const isDragging = useInternalStore((state) => state.lastActiveId !== "");
|
|
71
|
-
const withLoadMore = usePropsStore(
|
|
72
|
-
(state) => isDestinationPanel ? state.destinationWithLoadMore : state.sourceWithLoadMore
|
|
73
|
-
);
|
|
74
|
-
const { innerRefHandlerParentItem } = useInnerRefHandlers(isDestinationPanel);
|
|
75
|
-
const {
|
|
76
|
-
trackFocusRegionPanel,
|
|
77
|
-
trackFocusItemFirst,
|
|
78
|
-
trackFocusItemLast,
|
|
79
|
-
trackFocusActionParent,
|
|
80
|
-
trackFocusRegionPanelItem,
|
|
81
|
-
trackFocusLoadMoreBtn
|
|
82
|
-
} = useFocusTracker();
|
|
83
|
-
const config = React2.useMemo(
|
|
84
|
-
() => ({
|
|
85
|
-
onFocus: () => {
|
|
86
|
-
trackFocusRegionPanel(isDestinationPanel);
|
|
87
|
-
}
|
|
88
|
-
}),
|
|
89
|
-
[trackFocusRegionPanel, isDestinationPanel]
|
|
90
|
-
);
|
|
91
|
-
const onPanelFocus = useOnSpecificFocus(config);
|
|
92
|
-
const onPanelKeyDown = React2.useCallback(
|
|
93
|
-
(e) => {
|
|
94
|
-
const { key } = e;
|
|
95
|
-
if (isDragging) {
|
|
96
|
-
e.preventDefault();
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
if (["Home", "End", "ArrowUp", "ArrowDown"].includes(key)) {
|
|
100
|
-
e.preventDefault();
|
|
101
|
-
e.stopPropagation();
|
|
102
|
-
trackFocusRegionPanelItem(isDestinationPanel);
|
|
103
|
-
trackFocusActionParent();
|
|
104
|
-
if (key === "ArrowDown" || key === "Home")
|
|
105
|
-
trackFocusItemFirst();
|
|
106
|
-
if (key === "ArrowUp" || key === "End") {
|
|
107
|
-
if (withLoadMore)
|
|
108
|
-
trackFocusLoadMoreBtn();
|
|
109
|
-
else
|
|
110
|
-
trackFocusItemLast();
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
},
|
|
114
|
-
[
|
|
115
|
-
isDragging,
|
|
116
|
-
isDestinationPanel,
|
|
117
|
-
trackFocusActionParent,
|
|
118
|
-
trackFocusItemFirst,
|
|
119
|
-
trackFocusItemLast,
|
|
120
|
-
trackFocusLoadMoreBtn,
|
|
121
|
-
trackFocusRegionPanelItem,
|
|
122
|
-
withLoadMore
|
|
123
|
-
]
|
|
124
|
-
);
|
|
125
|
-
return /* @__PURE__ */ jsxs(
|
|
126
|
-
StyledListWrapperMid,
|
|
127
|
-
{
|
|
128
|
-
onFocus: onPanelFocus,
|
|
129
|
-
onKeyDown: onPanelKeyDown,
|
|
130
|
-
tabIndex: 0,
|
|
131
|
-
ref: innerRefHandlerParentItem,
|
|
132
|
-
children: [
|
|
133
|
-
/* @__PURE__ */ jsxs(StyledMidScroller, { ref: virtualRef, children: [
|
|
134
|
-
isLoading ? /* @__PURE__ */ jsx(LoadingItems, { ...panelMetaInfo }) : null,
|
|
135
|
-
showEmptyMessage ? /* @__PURE__ */ jsx(EmptyItems, { ...panelMetaInfo }) : null,
|
|
136
|
-
showItems ? /* @__PURE__ */ jsx(ItemListWrapperWithContext, { ...panelMetaInfo }) : null
|
|
137
|
-
] }),
|
|
138
|
-
hasMultipleSelection ? /* @__PURE__ */ jsx(MultipleSelectionAction, { isDestinationPanel }) : null
|
|
139
|
-
]
|
|
140
|
-
}
|
|
141
|
-
);
|
|
24
|
+
return /* @__PURE__ */ jsx(StyledListWrapperMid, { children: /* @__PURE__ */ jsxs(StyledMidScroller, { children: [
|
|
25
|
+
isLoading ? /* @__PURE__ */ jsx(LoadingItems, { ...panelMetaInfo }) : null,
|
|
26
|
+
showEmptyMessage ? /* @__PURE__ */ jsx(EmptyItems, { ...panelMetaInfo }) : null,
|
|
27
|
+
showItems ? /* @__PURE__ */ jsx(ItemListWrapper, { ...panelMetaInfo }) : null
|
|
28
|
+
] }) });
|
|
142
29
|
});
|
|
143
30
|
export {
|
|
144
31
|
PanelContentMiddleSection
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/parts/Panel/middle/PanelContentMiddleSection.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { styled } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport {
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { styled } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport { usePropsStore } from '../../../config/useStore';\nimport { type DSShuttleV2T } from '../../../react-desc-prop-types';\nimport { ItemListWrapper } from './ItemListWrapper';\nimport { EmptyItems } from './EmptyItems';\nimport { LoadingItems } from './LoadingItems';\n\nconst StyledListWrapperMid = styled(Grid, { name: 'ds-shuttle-v2', slot: 'list-wrapper-mid' })`\n overflow: hidden;\n`;\nconst StyledMidScroller = styled(Grid, { name: 'ds-shuttle-v2', slot: 'list-wrapper-mid' })`\n overflow: auto;\n`;\nexport const PanelContentMiddleSection = React.memo((panelMetaInfo: DSShuttleV2T.PanelMetaInfo) => {\n const { isDestinationPanel = false } = panelMetaInfo;\n const itemsLength = usePropsStore((state) =>\n isDestinationPanel ? state.destinationData.length : state.sourceData.length,\n );\n const isLoading = usePropsStore((state) => (isDestinationPanel ? state.destinationIsLoading : state.sourceIsLoading));\n const showEmptyMessage = !isLoading && itemsLength === 0;\n const showItems = !isLoading && !showEmptyMessage;\n\n return (\n <StyledListWrapperMid>\n <StyledMidScroller>\n {isLoading ? <LoadingItems {...panelMetaInfo} /> : null}\n {showEmptyMessage ? <EmptyItems {...panelMetaInfo} /> : null}\n {showItems ? <ItemListWrapper {...panelMetaInfo} /> : null}\n </StyledMidScroller>\n </StyledListWrapperMid>\n );\n});\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;AC0BjB,SACe,KADf;AA1BN,OAAOA,YAAW;AAClB,SAAS,cAAc;AACvB,SAAS,YAAY;AACrB,SAAS,qBAAqB;AAE9B,SAAS,uBAAuB;AAChC,SAAS,kBAAkB;AAC3B,SAAS,oBAAoB;AAE7B,MAAM,uBAAuB,OAAO,MAAM,EAAE,MAAM,iBAAiB,MAAM,mBAAmB,CAAC;AAAA;AAAA;AAG7F,MAAM,oBAAoB,OAAO,MAAM,EAAE,MAAM,iBAAiB,MAAM,mBAAmB,CAAC;AAAA;AAAA;AAGnF,MAAM,4BAA4BA,OAAM,KAAK,CAAC,kBAA8C;AACjG,QAAM,EAAE,qBAAqB,MAAM,IAAI;AACvC,QAAM,cAAc;AAAA,IAAc,CAAC,UACjC,qBAAqB,MAAM,gBAAgB,SAAS,MAAM,WAAW;AAAA,EACvE;AACA,QAAM,YAAY,cAAc,CAAC,UAAW,qBAAqB,MAAM,uBAAuB,MAAM,eAAgB;AACpH,QAAM,mBAAmB,CAAC,aAAa,gBAAgB;AACvD,QAAM,YAAY,CAAC,aAAa,CAAC;AAEjC,SACE,oBAAC,wBACC,+BAAC,qBACE;AAAA,gBAAY,oBAAC,gBAAc,GAAG,eAAe,IAAK;AAAA,IAClD,mBAAmB,oBAAC,cAAY,GAAG,eAAe,IAAK;AAAA,IACvD,YAAY,oBAAC,mBAAiB,GAAG,eAAe,IAAK;AAAA,KACxD,GACF;AAEJ,CAAC;",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -6,8 +6,7 @@ import { Grid } from "@elliemae/ds-grid";
|
|
|
6
6
|
import { usePropsStore } from "../../../config/useStore";
|
|
7
7
|
import { SelectionHeader } from "./SelectionHeader";
|
|
8
8
|
import { PanelFilterSection } from "./PanelFilterSection";
|
|
9
|
-
|
|
10
|
-
const StyledListWrapperTop = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.LIST_WRAPPER_TOP })``;
|
|
9
|
+
const StyledListWrapperTop = styled(Grid, { name: "ds-shuttle-v2", slot: "list-wrapper-top" })``;
|
|
11
10
|
const PanelContentTopSection = (panelMetaInfo) => {
|
|
12
11
|
const { isDestinationPanel = false } = panelMetaInfo;
|
|
13
12
|
const isSearchBarOpen = usePropsStore(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/parts/Panel/top/PanelContentTopSection.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { styled } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport { usePropsStore } from '../../../config/useStore';\nimport { type DSShuttleV2T } from '../../../react-desc-prop-types';\nimport { SelectionHeader } from './SelectionHeader';\nimport { PanelFilterSection } from './PanelFilterSection';\
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { styled } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport { usePropsStore } from '../../../config/useStore';\nimport { type DSShuttleV2T } from '../../../react-desc-prop-types';\nimport { SelectionHeader } from './SelectionHeader';\nimport { PanelFilterSection } from './PanelFilterSection';\n\nconst StyledListWrapperTop = styled(Grid, { name: 'ds-shuttle-v2', slot: 'list-wrapper-top' })``;\n\nexport const PanelContentTopSection = (panelMetaInfo: DSShuttleV2T.PanelMetaInfo) => {\n const { isDestinationPanel = false } = panelMetaInfo;\n const isSearchBarOpen = usePropsStore((state) =>\n isDestinationPanel ? state.destinationShowSearchbar : state.sourceShowSearchbar,\n );\n const topSectionRows = React.useMemo(() => {\n const cols = [];\n if (isSearchBarOpen) cols.push('auto');\n cols.push('auto');\n return cols;\n }, [isSearchBarOpen]);\n return (\n <StyledListWrapperTop rows={topSectionRows}>\n {isSearchBarOpen ? <PanelFilterSection {...panelMetaInfo} /> : null}\n <SelectionHeader {...panelMetaInfo} />\n </StyledListWrapperTop>\n );\n};\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACsBnB,SACqB,KADrB;AAtBJ,OAAOA,YAAW;AAClB,SAAS,cAAc;AACvB,SAAS,YAAY;AACrB,SAAS,qBAAqB;AAE9B,SAAS,uBAAuB;AAChC,SAAS,0BAA0B;AAEnC,MAAM,uBAAuB,OAAO,MAAM,EAAE,MAAM,iBAAiB,MAAM,mBAAmB,CAAC;AAEtF,MAAM,yBAAyB,CAAC,kBAA8C;AACnF,QAAM,EAAE,qBAAqB,MAAM,IAAI;AACvC,QAAM,kBAAkB;AAAA,IAAc,CAAC,UACrC,qBAAqB,MAAM,2BAA2B,MAAM;AAAA,EAC9D;AACA,QAAM,iBAAiBA,OAAM,QAAQ,MAAM;AACzC,UAAM,OAAO,CAAC;AACd,QAAI;AAAiB,WAAK,KAAK,MAAM;AACrC,SAAK,KAAK,MAAM;AAChB,WAAO;AAAA,EACT,GAAG,CAAC,eAAe,CAAC;AACpB,SACE,qBAAC,wBAAqB,MAAM,gBACzB;AAAA,sBAAkB,oBAAC,sBAAoB,GAAG,eAAe,IAAK;AAAA,IAC/D,oBAAC,mBAAiB,GAAG,eAAe;AAAA,KACtC;AAEJ;",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -5,12 +5,11 @@ import { Grid } from "@elliemae/ds-grid";
|
|
|
5
5
|
import { styled } from "@elliemae/ds-system";
|
|
6
6
|
import { DSInputText } from "@elliemae/ds-form-input-text";
|
|
7
7
|
import { usePropsStore } from "../../../config/useStore";
|
|
8
|
-
|
|
9
|
-
const StyledSearchWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.AREA_SEARCH_WRAPPER })`
|
|
8
|
+
const StyledSearchWrapper = styled(Grid, { name: "ds-shuttle-v2", slot: "area-search-wrapper" })`
|
|
10
9
|
border-bottom: 1px solid neutral-400;
|
|
11
10
|
border-radius: 0;
|
|
12
11
|
`;
|
|
13
|
-
const StyledInputText = styled(DSInputText, { name:
|
|
12
|
+
const StyledInputText = styled(DSInputText, { name: "ds-shuttle-v2", slot: "area-search-bar" })`
|
|
14
13
|
border: none;
|
|
15
14
|
:focus {
|
|
16
15
|
border-radius: 0;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/parts/Panel/top/PanelFilterSection.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { Grid } from '@elliemae/ds-grid';\nimport { styled } from '@elliemae/ds-system';\nimport { DSInputText } from '@elliemae/ds-form-input-text';\nimport { usePropsStore } from '../../../config/useStore';\nimport { type DSShuttleV2T } from '../../../react-desc-prop-types';\
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { Grid } from '@elliemae/ds-grid';\nimport { styled } from '@elliemae/ds-system';\nimport { DSInputText } from '@elliemae/ds-form-input-text';\nimport { usePropsStore } from '../../../config/useStore';\nimport { type DSShuttleV2T } from '../../../react-desc-prop-types';\n\nconst StyledSearchWrapper = styled(Grid, { name: 'ds-shuttle-v2', slot: 'area-search-wrapper' })`\n border-bottom: 1px solid neutral-400;\n border-radius: 0;\n`;\nconst StyledInputText = styled(DSInputText, { name: 'ds-shuttle-v2', slot: 'area-search-bar' })`\n border: none;\n :focus {\n border-radius: 0;\n }\n`;\n\nexport const PanelFilterSection = (panelMetaInfo: DSShuttleV2T.PanelMetaInfo) => {\n const { isDestinationPanel = false } = panelMetaInfo;\n const onFilterCb = usePropsStore((state) =>\n isDestinationPanel ? state.onDestinationFilterChange : state.onSourceFilterChange,\n );\n const filterValue = usePropsStore((state) =>\n isDestinationPanel ? state.destinationFilterValue : state.sourceFilterValue,\n );\n const handleFilterChange = React.useCallback(\n (value: string | number, event: React.ChangeEvent<HTMLInputElement>) => {\n onFilterCb?.(`${value}`, { event });\n },\n [onFilterCb],\n );\n return (\n <StyledSearchWrapper>\n <StyledInputText value={filterValue} onValueChange={handleFilterChange} />\n </StyledSearchWrapper>\n );\n};\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACkCjB;AAlCN,OAAOA,YAAW;AAClB,SAAS,YAAY;AACrB,SAAS,cAAc;AACvB,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAG9B,MAAM,sBAAsB,OAAO,MAAM,EAAE,MAAM,iBAAiB,MAAM,sBAAsB,CAAC;AAAA;AAAA;AAAA;AAI/F,MAAM,kBAAkB,OAAO,aAAa,EAAE,MAAM,iBAAiB,MAAM,kBAAkB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAOvF,MAAM,qBAAqB,CAAC,kBAA8C;AAC/E,QAAM,EAAE,qBAAqB,MAAM,IAAI;AACvC,QAAM,aAAa;AAAA,IAAc,CAAC,UAChC,qBAAqB,MAAM,4BAA4B,MAAM;AAAA,EAC/D;AACA,QAAM,cAAc;AAAA,IAAc,CAAC,UACjC,qBAAqB,MAAM,yBAAyB,MAAM;AAAA,EAC5D;AACA,QAAM,qBAAqBA,OAAM;AAAA,IAC/B,CAAC,OAAwB,UAA+C;AACtE,mBAAa,GAAG,SAAS,EAAE,MAAM,CAAC;AAAA,IACpC;AAAA,IACA,CAAC,UAAU;AAAA,EACb;AACA,SACE,oBAAC,uBACC,8BAAC,mBAAgB,OAAO,aAAa,eAAe,oBAAoB,GAC1E;AAEJ;",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -5,19 +5,15 @@ import { styled } from "@elliemae/ds-system";
|
|
|
5
5
|
import { DSControlledCheckbox } from "@elliemae/ds-form-checkbox";
|
|
6
6
|
import { Grid } from "@elliemae/ds-grid";
|
|
7
7
|
import { usePropsStore, useInternalStore } from "../../../config/useStore";
|
|
8
|
-
|
|
9
|
-
const StyledSelectionHeaderWrapper = styled(Grid, {
|
|
10
|
-
name: DSShuttleV2Name,
|
|
11
|
-
slot: DSShuttleV2Slots.AREA_SELECTION_HEADER
|
|
12
|
-
})`
|
|
8
|
+
const StyledSelectionHeaderWrapper = styled(Grid, { name: "ds-shuttle-v2", slot: "area-selection-header" })`
|
|
13
9
|
line-height: 1;
|
|
14
10
|
font-size: 1rem;
|
|
15
11
|
background-color: neutral-000;
|
|
16
12
|
border-bottom: 1px solid neutral-400;
|
|
17
13
|
`;
|
|
18
14
|
const StyledSelectionHeaderCountLabel = styled("div", {
|
|
19
|
-
name:
|
|
20
|
-
slot:
|
|
15
|
+
name: "ds-shuttle-v2",
|
|
16
|
+
slot: "area-selection-header-count-label"
|
|
21
17
|
})`
|
|
22
18
|
text-align: end;
|
|
23
19
|
color: neutral-500;
|