@elliemae/ds-shuttle-v2 3.14.1 → 3.14.2
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/config/DSShuttleV2Definitions.js +2 -1
- package/dist/cjs/config/DSShuttleV2Definitions.js.map +2 -2
- package/dist/cjs/config/itemMovementHelpers.js +29 -52
- package/dist/cjs/config/itemMovementHelpers.js.map +2 -2
- package/dist/cjs/config/useFocusTracker/useFocusActionTrackers.js +6 -9
- package/dist/cjs/config/useFocusTracker/useFocusActionTrackers.js.map +2 -2
- package/dist/cjs/config/useFocusTracker/useFocusItemTracker.js +16 -49
- package/dist/cjs/config/useFocusTracker/useFocusItemTracker.js.map +2 -2
- package/dist/cjs/config/useFocusTracker/useFocusRegionTrackers.js +1 -5
- package/dist/cjs/config/useFocusTracker/useFocusRegionTrackers.js.map +2 -2
- package/dist/cjs/config/useStore/focusAndTabIndexManager.js +73 -0
- package/dist/cjs/config/useStore/focusAndTabIndexManager.js.map +7 -0
- package/dist/cjs/config/useStore/types.js +24 -0
- package/dist/cjs/config/useStore/types.js.map +7 -0
- package/dist/cjs/config/useStore/useStore.js +13 -0
- package/dist/cjs/config/useStore/useStore.js.map +3 -3
- package/dist/cjs/constants/index.js +1 -3
- package/dist/cjs/constants/index.js.map +2 -2
- package/dist/cjs/parts/Dnd/DndHandle.js +5 -1
- package/dist/cjs/parts/Dnd/DndHandle.js.map +2 -2
- package/dist/cjs/parts/HoC/withConditionalDnDRowContext.js +14 -12
- package/dist/cjs/parts/HoC/withConditionalDnDRowContext.js.map +2 -2
- package/dist/cjs/parts/Item/Item.js +39 -38
- package/dist/cjs/parts/Item/Item.js.map +2 -2
- package/dist/cjs/parts/Item/ItemActions/ItemActions.js +3 -3
- package/dist/cjs/parts/Item/ItemActions/ItemActions.js.map +2 -2
- package/dist/cjs/parts/Item/ItemActions/useInnerRefHandlers.js +8 -23
- package/dist/cjs/parts/Item/ItemActions/useInnerRefHandlers.js.map +2 -2
- package/dist/cjs/parts/Item/ItemOverlay.js +2 -1
- package/dist/cjs/parts/Item/ItemOverlay.js.map +2 -2
- package/dist/cjs/parts/Item/useItemArrowNavigation.js +7 -22
- package/dist/cjs/parts/Item/useItemArrowNavigation.js.map +2 -2
- package/dist/cjs/parts/Item/useSelectionLogic.js +1 -1
- package/dist/cjs/parts/Item/useSelectionLogic.js.map +2 -2
- package/dist/cjs/parts/MainContent.js +2 -2
- package/dist/cjs/parts/MainContent.js.map +2 -2
- package/dist/cjs/parts/Panel/bottom/LoadMoreBtn.js +2 -8
- package/dist/cjs/parts/Panel/bottom/LoadMoreBtn.js.map +2 -2
- package/dist/cjs/parts/Panel/bottom/useInnerRefHandlers.js +7 -12
- package/dist/cjs/parts/Panel/bottom/useInnerRefHandlers.js.map +2 -2
- package/dist/cjs/parts/Panel/middle/ItemListWrapper/Index.js +3 -12
- package/dist/cjs/parts/Panel/middle/ItemListWrapper/Index.js.map +2 -2
- package/dist/cjs/parts/Panel/middle/MultipleSelectionAction.js +3 -7
- package/dist/cjs/parts/Panel/middle/MultipleSelectionAction.js.map +2 -2
- package/dist/cjs/parts/Panel/middle/PanelContentMiddleSection.js +21 -19
- package/dist/cjs/parts/Panel/middle/PanelContentMiddleSection.js.map +2 -2
- package/dist/cjs/parts/Panel/top/SelectionHeader.js +3 -3
- package/dist/cjs/parts/Panel/top/SelectionHeader.js.map +2 -2
- package/dist/esm/config/DSShuttleV2Definitions.js +2 -1
- package/dist/esm/config/DSShuttleV2Definitions.js.map +2 -2
- package/dist/esm/config/itemMovementHelpers.js +30 -53
- package/dist/esm/config/itemMovementHelpers.js.map +2 -2
- package/dist/esm/config/useFocusTracker/useFocusActionTrackers.js +6 -9
- package/dist/esm/config/useFocusTracker/useFocusActionTrackers.js.map +2 -2
- package/dist/esm/config/useFocusTracker/useFocusItemTracker.js +16 -49
- package/dist/esm/config/useFocusTracker/useFocusItemTracker.js.map +2 -2
- package/dist/esm/config/useFocusTracker/useFocusRegionTrackers.js +1 -5
- package/dist/esm/config/useFocusTracker/useFocusRegionTrackers.js.map +2 -2
- package/dist/esm/config/useStore/focusAndTabIndexManager.js +47 -0
- package/dist/esm/config/useStore/focusAndTabIndexManager.js.map +7 -0
- package/dist/esm/config/useStore/types.js +2 -0
- package/dist/esm/config/useStore/types.js.map +7 -0
- package/dist/esm/config/useStore/useStore.js +13 -0
- package/dist/esm/config/useStore/useStore.js.map +2 -2
- package/dist/esm/constants/index.js +1 -3
- package/dist/esm/constants/index.js.map +2 -2
- package/dist/esm/parts/Dnd/DndHandle.js +5 -1
- package/dist/esm/parts/Dnd/DndHandle.js.map +2 -2
- package/dist/esm/parts/HoC/withConditionalDnDRowContext.js +14 -12
- package/dist/esm/parts/HoC/withConditionalDnDRowContext.js.map +2 -2
- package/dist/esm/parts/Item/Item.js +39 -38
- package/dist/esm/parts/Item/Item.js.map +2 -2
- package/dist/esm/parts/Item/ItemActions/ItemActions.js +3 -3
- package/dist/esm/parts/Item/ItemActions/ItemActions.js.map +2 -2
- package/dist/esm/parts/Item/ItemActions/useInnerRefHandlers.js +8 -23
- package/dist/esm/parts/Item/ItemActions/useInnerRefHandlers.js.map +2 -2
- package/dist/esm/parts/Item/ItemOverlay.js +2 -1
- package/dist/esm/parts/Item/ItemOverlay.js.map +2 -2
- package/dist/esm/parts/Item/useItemArrowNavigation.js +7 -22
- package/dist/esm/parts/Item/useItemArrowNavigation.js.map +2 -2
- package/dist/esm/parts/Item/useSelectionLogic.js +1 -1
- package/dist/esm/parts/Item/useSelectionLogic.js.map +2 -2
- package/dist/esm/parts/MainContent.js +3 -3
- package/dist/esm/parts/MainContent.js.map +2 -2
- package/dist/esm/parts/Panel/bottom/LoadMoreBtn.js +2 -8
- package/dist/esm/parts/Panel/bottom/LoadMoreBtn.js.map +2 -2
- package/dist/esm/parts/Panel/bottom/useInnerRefHandlers.js +7 -12
- package/dist/esm/parts/Panel/bottom/useInnerRefHandlers.js.map +2 -2
- package/dist/esm/parts/Panel/middle/ItemListWrapper/Index.js +4 -13
- package/dist/esm/parts/Panel/middle/ItemListWrapper/Index.js.map +2 -2
- package/dist/esm/parts/Panel/middle/MultipleSelectionAction.js +3 -7
- package/dist/esm/parts/Panel/middle/MultipleSelectionAction.js.map +2 -2
- package/dist/esm/parts/Panel/middle/PanelContentMiddleSection.js +21 -19
- package/dist/esm/parts/Panel/middle/PanelContentMiddleSection.js.map +2 -2
- package/dist/esm/parts/Panel/top/SelectionHeader.js +4 -4
- package/dist/esm/parts/Panel/top/SelectionHeader.js.map +2 -2
- package/dist/types/config/DSShuttleV2Definitions.d.ts +1 -0
- package/dist/types/config/useFocusTracker/useFocusActionTrackers.d.ts +0 -2
- package/dist/types/config/useFocusTracker/useFocusItemTracker.d.ts +2 -6
- package/dist/types/config/useFocusTracker/useFocusRegionTrackers.d.ts +0 -2
- package/dist/types/config/useFocusTracker/useFocusTracker.d.ts +2 -8
- package/dist/types/config/useStore/focusAndTabIndexManager.d.ts +10 -0
- package/dist/types/config/useStore/types.d.ts +28 -0
- package/dist/types/config/useStore/useStore.d.ts +33 -57
- package/dist/types/constants/index.d.ts +1 -3
- package/dist/types/parts/Dnd/DndHandle.d.ts +3 -3
- package/dist/types/parts/Item/ItemActions/useInnerRefHandlers.d.ts +0 -2
- package/dist/types/parts/Panel/bottom/useInnerRefHandlers.d.ts +0 -1
- package/package.json +17 -17
- package/dist/cjs/config/useStore/createAtomInStore.bak +0 -18
- package/dist/esm/config/useStore/createAtomInStore.bak +0 -18
|
@@ -6,7 +6,6 @@ import { mergeRefs } from "@elliemae/ds-utilities";
|
|
|
6
6
|
import { Grid } from "@elliemae/ds-grid";
|
|
7
7
|
import { DSShuttleV2Name, DSShuttleV2Slots } from "../../config/DSShuttleV2Definitions";
|
|
8
8
|
import { useInternalStore } from "../../config/useStore";
|
|
9
|
-
import { useFocusTracker } from "../../config/useFocusTracker";
|
|
10
9
|
import { ItemSelection } from "./ItemSelection";
|
|
11
10
|
import { ItemActions } from "./ItemActions";
|
|
12
11
|
import { ItemMiddleSection } from "./ItemMiddleSection";
|
|
@@ -21,9 +20,9 @@ import { useItemKeyboardSelection } from "./useItemKeyboardSelection";
|
|
|
21
20
|
const cssDisabled = css`
|
|
22
21
|
background-color: ${({ theme }) => theme.colors.neutral["100"]};
|
|
23
22
|
color: ${({ theme }) => theme.colors.neutral["300"]};
|
|
24
|
-
.
|
|
25
|
-
.
|
|
26
|
-
.
|
|
23
|
+
.DSShuttleV2-item-action-btn-to-source-icon > svg,
|
|
24
|
+
.DSShuttleV2-item-action-btn-to-destination-icon > svg,
|
|
25
|
+
.DSShuttleV2-item-action-btn-drilldown-icon > svg {
|
|
27
26
|
fill: ${({ theme }) => theme.colors.neutral["300"]};
|
|
28
27
|
}
|
|
29
28
|
`;
|
|
@@ -33,9 +32,9 @@ const ItemWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots
|
|
|
33
32
|
background-color: white;
|
|
34
33
|
&:hover {
|
|
35
34
|
background-color: ${({ isDndActive, theme }) => !isDndActive ? theme.colors.brand["200"] : "white"};
|
|
36
|
-
.
|
|
37
|
-
.
|
|
38
|
-
.
|
|
35
|
+
.DSShuttleV2-item-action-btn-to-source-icon > svg,
|
|
36
|
+
.DSShuttleV2-item-action-btn-to-destination-icon > svg,
|
|
37
|
+
.DSShuttleV2-item-action-btn-drilldown-icon > svg {
|
|
39
38
|
fill: brand-700;
|
|
40
39
|
}
|
|
41
40
|
${({ isDragging }) => isDragging && cssDisabled}
|
|
@@ -49,28 +48,37 @@ const ItemWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots
|
|
|
49
48
|
|
|
50
49
|
${({ isDragging }) => isDragging && cssDisabled}
|
|
51
50
|
`;
|
|
52
|
-
const useInnerRefHandlers = ({
|
|
53
|
-
const {
|
|
54
|
-
const
|
|
55
|
-
const
|
|
56
|
-
const
|
|
57
|
-
const
|
|
51
|
+
const useInnerRefHandlers = ({ datumInternalMeta, isDestinationPanel }) => {
|
|
52
|
+
const { hydratedId } = datumInternalMeta;
|
|
53
|
+
const setZustandRef = useInternalStore((state) => state.setZustandRef);
|
|
54
|
+
const getShouldFocusItemOnRender = useInternalStore((state) => state.getShouldFocusItemOnRender);
|
|
55
|
+
const setShouldFocusItemOnRender = useInternalStore((state) => state.setShouldFocusItemOnRender);
|
|
56
|
+
const getFocusRegion = useInternalStore((state) => state.getFocusRegion);
|
|
57
|
+
const getFocusItem = useInternalStore((state) => state.getFocusItem);
|
|
58
|
+
const getFocusItemAction = useInternalStore((state) => state.getFocusItemAction);
|
|
58
59
|
const currRegion = isDestinationPanel ? REGIONS_FOCUSES.DESTINATION_PANEL_ITEM : REGIONS_FOCUSES.SOURCE_PANEL_ITEM;
|
|
59
60
|
const currItemId = hydratedId;
|
|
60
|
-
const shouldFocus = React2.useMemo(
|
|
61
|
-
() => focusRegion === currRegion && focusItemAction === "parent" && (focusItem === currItemId || isFirst && focusItem === "first" || isLast && focusItem === "last"),
|
|
62
|
-
[currItemId, currRegion, focusItem, focusItemAction, focusRegion, isFirst, isLast]
|
|
63
|
-
);
|
|
64
61
|
const innerRefHandlerParentItem = React2.useCallback(
|
|
65
62
|
(node) => {
|
|
66
|
-
|
|
63
|
+
setZustandRef([currRegion, currItemId, "parent"], node);
|
|
64
|
+
const shouldThisItemHaveFocus = currRegion === getFocusRegion() && currItemId === getFocusItem() && "parent" === getFocusItemAction();
|
|
65
|
+
if (getShouldFocusItemOnRender() && shouldThisItemHaveFocus && node) {
|
|
67
66
|
node?.focus();
|
|
68
|
-
|
|
67
|
+
setShouldFocusItemOnRender(false);
|
|
69
68
|
}
|
|
70
69
|
},
|
|
71
|
-
[
|
|
70
|
+
[
|
|
71
|
+
currItemId,
|
|
72
|
+
currRegion,
|
|
73
|
+
getFocusItem,
|
|
74
|
+
getFocusItemAction,
|
|
75
|
+
getFocusRegion,
|
|
76
|
+
getShouldFocusItemOnRender,
|
|
77
|
+
setShouldFocusItemOnRender,
|
|
78
|
+
setZustandRef
|
|
79
|
+
]
|
|
72
80
|
);
|
|
73
|
-
return React2.useMemo(() => ({
|
|
81
|
+
return React2.useMemo(() => ({ innerRefHandlerParentItem }), [innerRefHandlerParentItem]);
|
|
74
82
|
};
|
|
75
83
|
const Item = React2.memo((itemMeta) => {
|
|
76
84
|
const { datumInternalMeta, withDragNDrop, useSortableHelpers, hasMultipleSelection } = itemMeta;
|
|
@@ -81,20 +89,13 @@ const Item = React2.memo((itemMeta) => {
|
|
|
81
89
|
return ["5px", "1fr", "auto"];
|
|
82
90
|
}, [withDragNDrop]);
|
|
83
91
|
const setDndDraggingItemMeta = useInternalStore((state) => state.setDndDraggingItemMeta);
|
|
84
|
-
const dndDraggingItemMeta = useInternalStore((state) => state.dndDraggingItemMeta);
|
|
85
92
|
const getIsDragAndDropHappening = useInternalStore((state) => state.getIsDragAndDropHappening);
|
|
86
|
-
const
|
|
87
|
-
const isDraggingThisItem = dndDraggingItem?.hydratedId === hydratedId;
|
|
93
|
+
const isDraggingThisItem = useInternalStore((state) => state.dndDraggingItem?.hydratedId === hydratedId);
|
|
88
94
|
React2.useEffect(() => {
|
|
89
|
-
if (isDraggingThisItem
|
|
95
|
+
if (isDraggingThisItem) {
|
|
90
96
|
setDndDraggingItemMeta(itemMeta);
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
hydratedId,
|
|
94
|
-
isDraggingThisItem,
|
|
95
|
-
itemMeta,
|
|
96
|
-
setDndDraggingItemMeta
|
|
97
|
-
]);
|
|
97
|
+
}
|
|
98
|
+
}, [isDraggingThisItem, itemMeta, setDndDraggingItemMeta]);
|
|
98
99
|
const { selectItem, onShiftMouseDownPreventTextSelection } = useSelectionLogic(itemMeta);
|
|
99
100
|
const { onItemContainerKeyDown } = useItemArrowNavigation(itemMeta);
|
|
100
101
|
const { onItemKeyDownSelection } = useItemKeyboardSelection(itemMeta);
|
|
@@ -105,14 +106,14 @@ const Item = React2.memo((itemMeta) => {
|
|
|
105
106
|
},
|
|
106
107
|
[onItemKeyDownSelection, onItemContainerKeyDown]
|
|
107
108
|
);
|
|
108
|
-
const {
|
|
109
|
+
const { innerRefHandlerParentItem } = useInnerRefHandlers(itemMeta);
|
|
109
110
|
const { innerRefHandlerDnd } = useInnerRefActionHandlers(itemMeta);
|
|
110
111
|
const overId = useInternalStore((state) => state.overId);
|
|
111
112
|
const isDropValid = useInternalStore((state) => state.isDropValid);
|
|
112
113
|
const dropIndicatorPosition = useInternalStore((state) => state.dropIndicatorPosition);
|
|
113
114
|
const showDropIndicatorPosition = hydratedId === overId && dropIndicatorPosition;
|
|
114
|
-
const sortableRef = useSortableHelpers?.setNodeRef
|
|
115
|
-
};
|
|
115
|
+
const sortableRef = useSortableHelpers?.setNodeRef ?? (() => {
|
|
116
|
+
});
|
|
116
117
|
return /* @__PURE__ */ jsxs(
|
|
117
118
|
ItemWrapper,
|
|
118
119
|
{
|
|
@@ -124,9 +125,9 @@ const Item = React2.memo((itemMeta) => {
|
|
|
124
125
|
ref: mergeRefs(innerRefHandlerParentItem, sortableRef),
|
|
125
126
|
onKeyDown: handleItemKeyDown,
|
|
126
127
|
onMouseDown: onShiftMouseDownPreventTextSelection,
|
|
127
|
-
tabIndex:
|
|
128
|
+
tabIndex: -1,
|
|
128
129
|
role: "option",
|
|
129
|
-
"aria-
|
|
130
|
+
"aria-checked": isSelected,
|
|
130
131
|
id: `${hydratedId}-wrapper`,
|
|
131
132
|
children: [
|
|
132
133
|
/* @__PURE__ */ jsx(ItemSelection, { ...itemMeta }),
|
|
@@ -136,7 +137,7 @@ const Item = React2.memo((itemMeta) => {
|
|
|
136
137
|
id: hydratedId,
|
|
137
138
|
useSortableHelpers,
|
|
138
139
|
isDndActive: getIsDragAndDropHappening(),
|
|
139
|
-
isDragging:
|
|
140
|
+
isDragging: isDraggingThisItem,
|
|
140
141
|
innerRef: innerRefHandlerDnd,
|
|
141
142
|
disabled: hasMultipleSelection
|
|
142
143
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/Item/Item.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-statements */\nimport React, { useMemo } from 'react';\nimport { styled, css } from '@elliemae/ds-system';\nimport { mergeRefs } from '@elliemae/ds-utilities';\nimport { Grid } from '@elliemae/ds-grid';\n\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\nimport { DSShuttleV2Name, DSShuttleV2Slots } from '../../config/DSShuttleV2Definitions';\nimport { useInternalStore } from '../../config/useStore';\nimport {
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-statements */\nimport React, { useMemo } from 'react';\nimport { styled, css } from '@elliemae/ds-system';\nimport { mergeRefs } from '@elliemae/ds-utilities';\nimport { Grid } from '@elliemae/ds-grid';\n\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\nimport { DSShuttleV2Name, DSShuttleV2Slots } from '../../config/DSShuttleV2Definitions';\nimport { useInternalStore } from '../../config/useStore';\nimport { ItemSelection } from './ItemSelection';\nimport { ItemActions } from './ItemActions';\nimport { ItemMiddleSection } from './ItemMiddleSection';\nimport { useSelectionLogic } from './useSelectionLogic';\nimport { useItemArrowNavigation } from './useItemArrowNavigation';\nimport { REGIONS_FOCUSES } from '../../constants';\nimport { DragHandle } from '../Dnd/DndHandle';\nimport { DropIndicator } from '../Dnd/DropIndicator';\nimport { withConditionalUseSortable } from '../HoC/withConditionalUseSortable';\nimport { useInnerRefHandlers as useInnerRefActionHandlers } from './ItemActions/useInnerRefHandlers';\nimport { useItemKeyboardSelection } from './useItemKeyboardSelection';\n// we are using the class-name added via slot for the children `:hover` styling of icon colors\n\nconst cssDisabled = css`\n background-color: ${({ theme }) => theme.colors.neutral['100']};\n color: ${({ theme }) => theme.colors.neutral['300']};\n .DSShuttleV2-item-action-btn-to-source-icon > svg,\n .DSShuttleV2-item-action-btn-to-destination-icon > svg,\n .DSShuttleV2-item-action-btn-drilldown-icon > svg {\n fill: ${({ theme }) => theme.colors.neutral['300']};\n }\n`;\n\ninterface ItemWrapperT {\n isDragging: boolean;\n isDndActive: boolean;\n}\n\nconst ItemWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_WRAPPER })<ItemWrapperT>`\n min-height: 2.769rem;\n position: relative;\n background-color: white;\n &:hover {\n background-color: ${({ isDndActive, theme }) => (!isDndActive ? theme.colors.brand['200'] : 'white')};\n .DSShuttleV2-item-action-btn-to-source-icon > svg,\n .DSShuttleV2-item-action-btn-to-destination-icon > svg,\n .DSShuttleV2-item-action-btn-drilldown-icon > svg {\n fill: brand-700;\n }\n ${({ isDragging }) => isDragging && cssDisabled}\n }\n\n &:focus {\n outline: 2px solid brand-700;\n outline-offset: -2px;\n }\n border-bottom: 1px solid neutral-100;\n\n ${({ isDragging }) => isDragging && cssDisabled}\n`;\n\nconst useInnerRefHandlers = ({ datumInternalMeta, isDestinationPanel }: DSShuttleV2T.ItemMeta) => {\n const { hydratedId } = datumInternalMeta;\n const setZustandRef = useInternalStore((state) => state.setZustandRef);\n\n const getShouldFocusItemOnRender = useInternalStore((state) => state.getShouldFocusItemOnRender);\n const setShouldFocusItemOnRender = useInternalStore((state) => state.setShouldFocusItemOnRender);\n const getFocusRegion = useInternalStore((state) => state.getFocusRegion);\n const getFocusItem = useInternalStore((state) => state.getFocusItem);\n const getFocusItemAction = useInternalStore((state) => state.getFocusItemAction);\n\n const currRegion = isDestinationPanel ? REGIONS_FOCUSES.DESTINATION_PANEL_ITEM : REGIONS_FOCUSES.SOURCE_PANEL_ITEM;\n const currItemId = hydratedId;\n\n const innerRefHandlerParentItem = React.useCallback(\n (node: HTMLDivElement | null) => {\n setZustandRef([currRegion, currItemId, 'parent'], node);\n\n // This is the only place we should do this check + focus\n // See focusAndTabIndexManager for more info -- TLDR: virtualization + focus is a pain\n const shouldThisItemHaveFocus =\n currRegion === getFocusRegion() && currItemId === getFocusItem() && 'parent' === getFocusItemAction();\n\n if (getShouldFocusItemOnRender() && shouldThisItemHaveFocus && node) {\n node?.focus();\n setShouldFocusItemOnRender(false);\n }\n },\n [\n currItemId,\n currRegion,\n getFocusItem,\n getFocusItemAction,\n getFocusRegion,\n getShouldFocusItemOnRender,\n setShouldFocusItemOnRender,\n setZustandRef,\n ],\n );\n return React.useMemo(() => ({ innerRefHandlerParentItem }), [innerRefHandlerParentItem]);\n};\n\nexport const Item = React.memo((itemMeta: DSShuttleV2T.ItemMeta) => {\n const { datumInternalMeta, withDragNDrop, useSortableHelpers, hasMultipleSelection } = itemMeta;\n const { isSelected, hydratedId } = datumInternalMeta;\n\n const cols = useMemo(() => {\n if (withDragNDrop) return ['5px', 'auto', '1fr', 'auto'];\n return ['5px', '1fr', 'auto'];\n }, [withDragNDrop]);\n\n const setDndDraggingItemMeta = useInternalStore((state) => state.setDndDraggingItemMeta);\n const getIsDragAndDropHappening = useInternalStore((state) => state.getIsDragAndDropHappening);\n const isDraggingThisItem = useInternalStore((state) => state.dndDraggingItem?.hydratedId === hydratedId);\n React.useEffect(() => {\n if (isDraggingThisItem) {\n setDndDraggingItemMeta(itemMeta);\n }\n }, [isDraggingThisItem, itemMeta, setDndDraggingItemMeta]);\n\n const { selectItem, onShiftMouseDownPreventTextSelection } = useSelectionLogic(itemMeta);\n const { onItemContainerKeyDown } = useItemArrowNavigation(itemMeta);\n const { onItemKeyDownSelection } = useItemKeyboardSelection(itemMeta);\n\n const handleItemKeyDown: React.KeyboardEventHandler<HTMLDivElement> = React.useCallback(\n (event) => {\n onItemKeyDownSelection(event);\n onItemContainerKeyDown(event);\n },\n [onItemKeyDownSelection, onItemContainerKeyDown],\n );\n const { innerRefHandlerParentItem } = useInnerRefHandlers(itemMeta);\n const { innerRefHandlerDnd } = useInnerRefActionHandlers(itemMeta);\n const overId = useInternalStore((state) => state.overId);\n const isDropValid = useInternalStore((state) => state.isDropValid);\n const dropIndicatorPosition = useInternalStore((state) => state.dropIndicatorPosition);\n\n const showDropIndicatorPosition = hydratedId === overId && dropIndicatorPosition;\n const sortableRef = useSortableHelpers?.setNodeRef ?? (() => {});\n return (\n <ItemWrapper\n isDragging={isDraggingThisItem}\n isDndActive={getIsDragAndDropHappening()}\n cols={cols}\n alignItems=\"center\"\n onClick={selectItem}\n ref={mergeRefs(innerRefHandlerParentItem, sortableRef)}\n onKeyDown={handleItemKeyDown}\n onMouseDown={onShiftMouseDownPreventTextSelection}\n tabIndex={-1} // We overwrite it via vanilla js on the focus manager\n role=\"option\"\n aria-checked={isSelected}\n id={`${hydratedId}-wrapper`}\n >\n <ItemSelection {...itemMeta} />\n {withDragNDrop && useSortableHelpers ? (\n <DragHandle\n id={hydratedId}\n useSortableHelpers={useSortableHelpers}\n isDndActive={getIsDragAndDropHappening()}\n isDragging={isDraggingThisItem}\n innerRef={innerRefHandlerDnd}\n disabled={hasMultipleSelection}\n />\n ) : null}\n <ItemMiddleSection {...itemMeta} />\n <ItemActions {...itemMeta} />\n <DropIndicator vertical={false} dropIndicatorPosition={showDropIndicatorPosition} isDropValid={isDropValid} />\n </ItemWrapper>\n );\n});\n\nconst ItemSortable = withConditionalUseSortable(Item);\nexport { ItemSortable };\nexport default ItemSortable;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -41,7 +41,7 @@ const ItemActions = React2.memo((itemMeta) => {
|
|
|
41
41
|
} = itemMeta;
|
|
42
42
|
const { withActions, internallyDisabledDrilldown, internallyDisabledMove } = datumRenderFlags;
|
|
43
43
|
const { preventDrilldown, preventMove } = datumHydratables;
|
|
44
|
-
const {
|
|
44
|
+
const { innerRefHandlerDrilldown, innerRefHandlerMove } = useInnerRefHandlers(itemMeta);
|
|
45
45
|
const { handleClickDrilldown, handleClickSingleMove, handleKeyDownSelectionBubbleUp } = useActionsHandlers(itemMeta);
|
|
46
46
|
const drillDownAriaLabel = useMemo(() => `Drilldown into ${label} option`, [label]);
|
|
47
47
|
const moveAriaLabel = useMemo(
|
|
@@ -58,7 +58,7 @@ const ItemActions = React2.memo((itemMeta) => {
|
|
|
58
58
|
onKeyDown: handleKeyDownSelectionBubbleUp,
|
|
59
59
|
size: BUTTON_SIZES.S,
|
|
60
60
|
innerRef: innerRefHandlerDrilldown,
|
|
61
|
-
tabIndex:
|
|
61
|
+
tabIndex: -1,
|
|
62
62
|
disabled: internallyDisabledDrilldown || preventDrilldown === true,
|
|
63
63
|
children: /* @__PURE__ */ jsx(StyledDrilldownIcon, { width: "1.538rem", height: "1.538rem" })
|
|
64
64
|
}
|
|
@@ -72,7 +72,7 @@ const ItemActions = React2.memo((itemMeta) => {
|
|
|
72
72
|
onKeyDown: handleKeyDownSelectionBubbleUp,
|
|
73
73
|
size: BUTTON_SIZES.S,
|
|
74
74
|
innerRef: innerRefHandlerMove,
|
|
75
|
-
tabIndex:
|
|
75
|
+
tabIndex: -1,
|
|
76
76
|
disabled: internallyDisabledMove || preventMove === true,
|
|
77
77
|
children: isDestinationPanel ? /* @__PURE__ */ jsx(StyledCloseMediumIcon, { width: "1.538rem", height: "1.538rem" }) : /* @__PURE__ */ jsx(StyledArrowShortRightIcon, { width: "1.538rem", height: "1.538rem" })
|
|
78
78
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/parts/Item/ItemActions/ItemActions.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useMemo } from 'react';\nimport { styled } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport { DSButtonV2, BUTTON_SIZES } from '@elliemae/ds-button-v2';\nimport { ArrowShortReturn, ArrowShortRight, CloseMedium } from '@elliemae/ds-icons';\nimport { type DSShuttleV2T } from '../../../react-desc-prop-types';\nimport { useActionsHandlers } from './useActionsHandlers';\nimport { useInnerRefHandlers } from './useInnerRefHandlers';\nimport { DSShuttleV2Name, DSShuttleV2Slots } from '../../../config/DSShuttleV2Definitions';\n\nconst StyledItemActions = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_ACTIONS_WRAPPER })``;\nconst StyledItemActionWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_ACTION_WRAPPER })``;\nconst StyledButton = styled(DSButtonV2, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_ACTION_BTN })`\n height: 1.692rem !important;\n svg {\n fill: brand-600;\n }\n :disabled svg {\n fill: neutral-200 !important;\n }\n`;\nconst StyledDrilldownIcon = styled(ArrowShortReturn, {\n name: DSShuttleV2Name,\n slot: DSShuttleV2Slots.ITEM_ACTION_BTN_DRILLDOWN_ICON,\n})``;\nconst StyledCloseMediumIcon = styled(CloseMedium, {\n name: DSShuttleV2Name,\n slot: DSShuttleV2Slots.ITEM_ACTION_BTN_TO_SOURCE_ICON,\n})``;\nconst StyledArrowShortRightIcon = styled(ArrowShortRight, {\n name: DSShuttleV2Name,\n slot: DSShuttleV2Slots.ITEM_ACTION_BTN_TO_DESTINATION_ICON,\n})``;\n\nconst actionsCols = ['1.538rem', '1.538rem'];\n\nexport const ItemActions = React.memo((itemMeta: DSShuttleV2T.ItemMeta) => {\n const {\n datumHydratables,\n isDestinationPanel,\n datumRenderFlags,\n datum: { label },\n } = itemMeta;\n // withActions is calculated in /src/config/configureAutoCalculated.ts\n const { withActions, internallyDisabledDrilldown, internallyDisabledMove } = datumRenderFlags;\n const { preventDrilldown, preventMove } = datumHydratables;\n const {
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useMemo } from 'react';\nimport { styled } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport { DSButtonV2, BUTTON_SIZES } from '@elliemae/ds-button-v2';\nimport { ArrowShortReturn, ArrowShortRight, CloseMedium } from '@elliemae/ds-icons';\nimport { type DSShuttleV2T } from '../../../react-desc-prop-types';\nimport { useActionsHandlers } from './useActionsHandlers';\nimport { useInnerRefHandlers } from './useInnerRefHandlers';\nimport { DSShuttleV2Name, DSShuttleV2Slots } from '../../../config/DSShuttleV2Definitions';\n\nconst StyledItemActions = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_ACTIONS_WRAPPER })``;\nconst StyledItemActionWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_ACTION_WRAPPER })``;\nconst StyledButton = styled(DSButtonV2, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_ACTION_BTN })`\n height: 1.692rem !important;\n svg {\n fill: brand-600;\n }\n :disabled svg {\n fill: neutral-200 !important;\n }\n`;\nconst StyledDrilldownIcon = styled(ArrowShortReturn, {\n name: DSShuttleV2Name,\n slot: DSShuttleV2Slots.ITEM_ACTION_BTN_DRILLDOWN_ICON,\n})``;\nconst StyledCloseMediumIcon = styled(CloseMedium, {\n name: DSShuttleV2Name,\n slot: DSShuttleV2Slots.ITEM_ACTION_BTN_TO_SOURCE_ICON,\n})``;\nconst StyledArrowShortRightIcon = styled(ArrowShortRight, {\n name: DSShuttleV2Name,\n slot: DSShuttleV2Slots.ITEM_ACTION_BTN_TO_DESTINATION_ICON,\n})``;\n\nconst actionsCols = ['1.538rem', '1.538rem'];\n\nexport const ItemActions = React.memo((itemMeta: DSShuttleV2T.ItemMeta) => {\n const {\n datumHydratables,\n isDestinationPanel,\n datumRenderFlags,\n datum: { label },\n } = itemMeta;\n // withActions is calculated in /src/config/configureAutoCalculated.ts\n const { withActions, internallyDisabledDrilldown, internallyDisabledMove } = datumRenderFlags;\n const { preventDrilldown, preventMove } = datumHydratables;\n const { innerRefHandlerDrilldown, innerRefHandlerMove } = useInnerRefHandlers(itemMeta);\n const { handleClickDrilldown, handleClickSingleMove, handleKeyDownSelectionBubbleUp } = useActionsHandlers(itemMeta);\n const drillDownAriaLabel = useMemo(() => `Drilldown into ${label} option`, [label]);\n const moveAriaLabel = useMemo(\n () => `Move option ${label} into ${isDestinationPanel ? 'source' : 'destination'} panel`,\n [label, isDestinationPanel],\n );\n\n return (\n <StyledItemActions cols={actionsCols} gutter=\"xxs\" pl=\"xs\" pr=\"xxs\" alignItems=\"center\">\n {withActions ? (\n <>\n <StyledItemActionWrapper>\n <StyledButton\n buttonType=\"icon\"\n aria-label={drillDownAriaLabel}\n onClick={handleClickDrilldown}\n onKeyDown={handleKeyDownSelectionBubbleUp}\n size={BUTTON_SIZES.S}\n innerRef={innerRefHandlerDrilldown}\n tabIndex={-1} // We overwrite it via vanilla js on the focus manager\n disabled={internallyDisabledDrilldown || preventDrilldown === true}\n >\n <StyledDrilldownIcon width=\"1.538rem\" height=\"1.538rem\" />\n </StyledButton>\n </StyledItemActionWrapper>\n <StyledItemActionWrapper>\n <StyledButton\n buttonType=\"icon\"\n aria-label={moveAriaLabel}\n onClick={handleClickSingleMove}\n onKeyDown={handleKeyDownSelectionBubbleUp}\n size={BUTTON_SIZES.S}\n innerRef={innerRefHandlerMove}\n tabIndex={-1} // We overwrite it via vanilla js on the focus manager\n disabled={internallyDisabledMove || preventMove === true}\n >\n {isDestinationPanel ? (\n <StyledCloseMediumIcon width=\"1.538rem\" height=\"1.538rem\" />\n ) : (\n <StyledArrowShortRightIcon width=\"1.538rem\" height=\"1.538rem\" />\n )}\n </StyledButton>\n </StyledItemActionWrapper>\n </>\n ) : (\n // this is a place-holder used for mantainting the grid spacing when item has no actions (so when item is soft-deleted)\n <>\n <div />\n <div />\n </>\n )}\n </StyledItemActions>\n );\n});\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACyDf,mBAYM,KAZN;AAzDR,OAAOA,UAAS,eAAe;AAC/B,SAAS,cAAc;AACvB,SAAS,YAAY;AACrB,SAAS,YAAY,oBAAoB;AACzC,SAAS,kBAAkB,iBAAiB,mBAAmB;AAE/D,SAAS,0BAA0B;AACnC,SAAS,2BAA2B;AACpC,SAAS,iBAAiB,wBAAwB;AAElD,MAAM,oBAAoB,OAAO,MAAM,EAAE,MAAM,iBAAiB,MAAM,iBAAiB,qBAAqB,CAAC;AAC7G,MAAM,0BAA0B,OAAO,MAAM,EAAE,MAAM,iBAAiB,MAAM,iBAAiB,oBAAoB,CAAC;AAClH,MAAM,eAAe,OAAO,YAAY,EAAE,MAAM,iBAAiB,MAAM,iBAAiB,gBAAgB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASzG,MAAM,sBAAsB,OAAO,kBAAkB;AAAA,EACnD,MAAM;AAAA,EACN,MAAM,iBAAiB;AACzB,CAAC;AACD,MAAM,wBAAwB,OAAO,aAAa;AAAA,EAChD,MAAM;AAAA,EACN,MAAM,iBAAiB;AACzB,CAAC;AACD,MAAM,4BAA4B,OAAO,iBAAiB;AAAA,EACxD,MAAM;AAAA,EACN,MAAM,iBAAiB;AACzB,CAAC;AAED,MAAM,cAAc,CAAC,YAAY,UAAU;AAEpC,MAAM,cAAcA,OAAM,KAAK,CAAC,aAAoC;AACzE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,EAAE,MAAM;AAAA,EACjB,IAAI;AAEJ,QAAM,EAAE,aAAa,6BAA6B,uBAAuB,IAAI;AAC7E,QAAM,EAAE,kBAAkB,YAAY,IAAI;AAC1C,QAAM,EAAE,0BAA0B,oBAAoB,IAAI,oBAAoB,QAAQ;AACtF,QAAM,EAAE,sBAAsB,uBAAuB,+BAA+B,IAAI,mBAAmB,QAAQ;AACnH,QAAM,qBAAqB,QAAQ,MAAM,kBAAkB,gBAAgB,CAAC,KAAK,CAAC;AAClF,QAAM,gBAAgB;AAAA,IACpB,MAAM,eAAe,cAAc,qBAAqB,WAAW;AAAA,IACnE,CAAC,OAAO,kBAAkB;AAAA,EAC5B;AAEA,SACE,oBAAC,qBAAkB,MAAM,aAAa,QAAO,OAAM,IAAG,MAAK,IAAG,OAAM,YAAW,UAC5E,wBACC,iCACE;AAAA,wBAAC,2BACC;AAAA,MAAC;AAAA;AAAA,QACC,YAAW;AAAA,QACX,cAAY;AAAA,QACZ,SAAS;AAAA,QACT,WAAW;AAAA,QACX,MAAM,aAAa;AAAA,QACnB,UAAU;AAAA,QACV,UAAU;AAAA,QACV,UAAU,+BAA+B,qBAAqB;AAAA,QAE9D,8BAAC,uBAAoB,OAAM,YAAW,QAAO,YAAW;AAAA;AAAA,IAC1D,GACF;AAAA,IACA,oBAAC,2BACC;AAAA,MAAC;AAAA;AAAA,QACC,YAAW;AAAA,QACX,cAAY;AAAA,QACZ,SAAS;AAAA,QACT,WAAW;AAAA,QACX,MAAM,aAAa;AAAA,QACnB,UAAU;AAAA,QACV,UAAU;AAAA,QACV,UAAU,0BAA0B,gBAAgB;AAAA,QAEnD,+BACC,oBAAC,yBAAsB,OAAM,YAAW,QAAO,YAAW,IAE1D,oBAAC,6BAA0B,OAAM,YAAW,QAAO,YAAW;AAAA;AAAA,IAElE,GACF;AAAA,KACF,IAGA,iCACE;AAAA,wBAAC,SAAI;AAAA,IACL,oBAAC,SAAI;AAAA,KACP,GAEJ;AAEJ,CAAC;",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -3,49 +3,34 @@ import React2 from "react";
|
|
|
3
3
|
import { useInternalStore } from "../../../config/useStore";
|
|
4
4
|
import { REGIONS_FOCUSES, ACTIONS_FOCUSES } from "../../../constants";
|
|
5
5
|
const useInnerRefHandlers = ({ datumInternalMeta, isDestinationPanel }) => {
|
|
6
|
-
const
|
|
7
|
-
const focusItem = useInternalStore((state) => state.focusItem);
|
|
8
|
-
const focusItemAction = useInternalStore((state) => state.focusItemAction);
|
|
6
|
+
const setZustandRef = useInternalStore((state) => state.setZustandRef);
|
|
9
7
|
const currRegion = isDestinationPanel ? REGIONS_FOCUSES.DESTINATION_PANEL_ITEM : REGIONS_FOCUSES.SOURCE_PANEL_ITEM;
|
|
10
8
|
const currItemId = datumInternalMeta.hydratedId;
|
|
11
|
-
const { shouldFocusDrilldown, shouldFocusMove, shouldFocusDnd } = React2.useMemo(
|
|
12
|
-
() => ({
|
|
13
|
-
shouldFocusDrilldown: focusItem === currItemId && focusRegion === currRegion && focusItemAction === ACTIONS_FOCUSES.DRILLDOWN_BTN,
|
|
14
|
-
shouldFocusMove: focusItem === currItemId && focusRegion === currRegion && focusItemAction === ACTIONS_FOCUSES.MOVE_BTN,
|
|
15
|
-
shouldFocusDnd: focusItem === currItemId && focusRegion === currRegion && focusItemAction === ACTIONS_FOCUSES.DRAG_N_DROP
|
|
16
|
-
}),
|
|
17
|
-
[currItemId, currRegion, focusItem, focusItemAction, focusRegion]
|
|
18
|
-
);
|
|
19
9
|
const innerRefHandlerDrilldown = React2.useCallback(
|
|
20
10
|
(node) => {
|
|
21
|
-
|
|
22
|
-
node?.focus();
|
|
11
|
+
setZustandRef([currRegion, currItemId, ACTIONS_FOCUSES.DRILLDOWN_BTN], node);
|
|
23
12
|
},
|
|
24
|
-
[
|
|
13
|
+
[currItemId, currRegion, setZustandRef]
|
|
25
14
|
);
|
|
26
15
|
const innerRefHandlerMove = React2.useCallback(
|
|
27
16
|
(node) => {
|
|
28
|
-
|
|
29
|
-
node?.focus();
|
|
17
|
+
setZustandRef([currRegion, currItemId, ACTIONS_FOCUSES.MOVE_BTN], node);
|
|
30
18
|
},
|
|
31
|
-
[
|
|
19
|
+
[currItemId, currRegion, setZustandRef]
|
|
32
20
|
);
|
|
33
21
|
const innerRefHandlerDnd = React2.useCallback(
|
|
34
22
|
(node) => {
|
|
35
|
-
|
|
36
|
-
node?.focus();
|
|
23
|
+
setZustandRef([currRegion, currItemId, ACTIONS_FOCUSES.DRAG_N_DROP], node);
|
|
37
24
|
},
|
|
38
|
-
[
|
|
25
|
+
[currItemId, currRegion, setZustandRef]
|
|
39
26
|
);
|
|
40
27
|
return React2.useMemo(
|
|
41
28
|
() => ({
|
|
42
|
-
shouldFocusDrilldown,
|
|
43
|
-
shouldFocusMove,
|
|
44
29
|
innerRefHandlerDnd,
|
|
45
30
|
innerRefHandlerDrilldown,
|
|
46
31
|
innerRefHandlerMove
|
|
47
32
|
}),
|
|
48
|
-
[innerRefHandlerDrilldown, innerRefHandlerDnd, innerRefHandlerMove
|
|
33
|
+
[innerRefHandlerDrilldown, innerRefHandlerDnd, innerRefHandlerMove]
|
|
49
34
|
);
|
|
50
35
|
};
|
|
51
36
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/parts/Item/ItemActions/useInnerRefHandlers.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { type DSShuttleV2T } from '../../../react-desc-prop-types';\nimport { useInternalStore } from '../../../config/useStore';\nimport { REGIONS_FOCUSES, ACTIONS_FOCUSES } from '../../../constants';\n\nexport const useInnerRefHandlers = ({ datumInternalMeta, isDestinationPanel }: DSShuttleV2T.ItemMeta) => {\n const
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACAvB,OAAOA,YAAW;AAElB,SAAS,wBAAwB;AACjC,SAAS,iBAAiB,uBAAuB;AAE1C,MAAM,sBAAsB,CAAC,EAAE,mBAAmB,mBAAmB,MAA6B;AACvG,QAAM,
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { type DSShuttleV2T } from '../../../react-desc-prop-types';\nimport { useInternalStore } from '../../../config/useStore';\nimport { REGIONS_FOCUSES, ACTIONS_FOCUSES } from '../../../constants';\n\nexport const useInnerRefHandlers = ({ datumInternalMeta, isDestinationPanel }: DSShuttleV2T.ItemMeta) => {\n const setZustandRef = useInternalStore((state) => state.setZustandRef);\n const currRegion = isDestinationPanel ? REGIONS_FOCUSES.DESTINATION_PANEL_ITEM : REGIONS_FOCUSES.SOURCE_PANEL_ITEM;\n const currItemId = datumInternalMeta.hydratedId;\n const innerRefHandlerDrilldown = React.useCallback(\n (node: HTMLButtonElement) => {\n setZustandRef([currRegion, currItemId, ACTIONS_FOCUSES.DRILLDOWN_BTN], node);\n },\n [currItemId, currRegion, setZustandRef],\n );\n const innerRefHandlerMove = React.useCallback(\n (node: HTMLButtonElement) => {\n setZustandRef([currRegion, currItemId, ACTIONS_FOCUSES.MOVE_BTN], node);\n },\n [currItemId, currRegion, setZustandRef],\n );\n const innerRefHandlerDnd = React.useCallback(\n (node: HTMLDivElement | null) => {\n setZustandRef([currRegion, currItemId, ACTIONS_FOCUSES.DRAG_N_DROP], node);\n },\n [currItemId, currRegion, setZustandRef],\n );\n return React.useMemo(\n () => ({\n innerRefHandlerDnd,\n innerRefHandlerDrilldown,\n innerRefHandlerMove,\n }),\n [innerRefHandlerDrilldown, innerRefHandlerDnd, innerRefHandlerMove],\n );\n};\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACAvB,OAAOA,YAAW;AAElB,SAAS,wBAAwB;AACjC,SAAS,iBAAiB,uBAAuB;AAE1C,MAAM,sBAAsB,CAAC,EAAE,mBAAmB,mBAAmB,MAA6B;AACvG,QAAM,gBAAgB,iBAAiB,CAAC,UAAU,MAAM,aAAa;AACrE,QAAM,aAAa,qBAAqB,gBAAgB,yBAAyB,gBAAgB;AACjG,QAAM,aAAa,kBAAkB;AACrC,QAAM,2BAA2BA,OAAM;AAAA,IACrC,CAAC,SAA4B;AAC3B,oBAAc,CAAC,YAAY,YAAY,gBAAgB,aAAa,GAAG,IAAI;AAAA,IAC7E;AAAA,IACA,CAAC,YAAY,YAAY,aAAa;AAAA,EACxC;AACA,QAAM,sBAAsBA,OAAM;AAAA,IAChC,CAAC,SAA4B;AAC3B,oBAAc,CAAC,YAAY,YAAY,gBAAgB,QAAQ,GAAG,IAAI;AAAA,IACxE;AAAA,IACA,CAAC,YAAY,YAAY,aAAa;AAAA,EACxC;AACA,QAAM,qBAAqBA,OAAM;AAAA,IAC/B,CAAC,SAAgC;AAC/B,oBAAc,CAAC,YAAY,YAAY,gBAAgB,WAAW,GAAG,IAAI;AAAA,IAC3E;AAAA,IACA,CAAC,YAAY,YAAY,aAAa;AAAA,EACxC;AACA,SAAOA,OAAM;AAAA,IACX,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,0BAA0B,oBAAoB,mBAAmB;AAAA,EACpE;AACF;",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -6,7 +6,8 @@ import { Grid } from "@elliemae/ds-grid";
|
|
|
6
6
|
import { useInternalStore } from "../../config/useStore";
|
|
7
7
|
import { ItemMiddleSection } from "./ItemMiddleSection";
|
|
8
8
|
import { DragOverlay } from "../Dnd/DragOverlay";
|
|
9
|
-
|
|
9
|
+
import { DSShuttleV2Name } from "../../config/DSShuttleV2Definitions";
|
|
10
|
+
const ItemWrapper = styled(Grid, { name: DSShuttleV2Name, slot: "item-wrapper-overlay" })`
|
|
10
11
|
min-height: 2.769rem;
|
|
11
12
|
position: relative;
|
|
12
13
|
background-color: white;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/Item/ItemOverlay.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { styled } from '@elliemae/ds-system';\n\nimport { Grid } from '@elliemae/ds-grid';\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\nimport { useInternalStore } from '../../config/useStore';\n\nimport { ItemMiddleSection } from './ItemMiddleSection';\n\nimport { DragOverlay } from '../Dnd/DragOverlay';\n\n// we are using the class-name added via slot for the children `:hover` styling of icon colors\n\nconst ItemWrapper = styled(Grid, { name:
|
|
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';\n\nimport { Grid } from '@elliemae/ds-grid';\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\nimport { useInternalStore } from '../../config/useStore';\n\nimport { ItemMiddleSection } from './ItemMiddleSection';\n\nimport { DragOverlay } from '../Dnd/DragOverlay';\nimport { DSShuttleV2Name } from '../../config/DSShuttleV2Definitions';\n\n// we are using the class-name added via slot for the children `:hover` styling of icon colors\n\nconst ItemWrapper = styled(Grid, { name: DSShuttleV2Name, slot: 'item-wrapper-overlay' })`\n min-height: 2.769rem;\n position: relative;\n background-color: white;\n box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);\n padding-right: 5px;\n\n &:focus {\n outline: 2px solid brand-700;\n outline-offset: -2px;\n }\n border-bottom: 1px solid neutral-100;\n`;\n\nexport const ItemOverlay = React.memo((itemMeta: DSShuttleV2T.ItemMeta) => {\n const { datumInternalMeta } = itemMeta;\n const { isSelected, hydratedId } = datumInternalMeta;\n\n const getIsDragAndDropHappening = useInternalStore((state) => state.getIsDragAndDropHappening);\n const isDragAndDropHappening = getIsDragAndDropHappening();\n const dndDraggingItem = useInternalStore((state) => state.dndDraggingItem);\n\n return (\n <ItemWrapper cols={['auto', 'auto']} alignItems=\"center\" role=\"checkbox\" aria-checked={isSelected}>\n <DragOverlay\n id={`${hydratedId}-overlay`}\n isDndActive={isDragAndDropHappening}\n isDragging={dndDraggingItem?.hydratedId === hydratedId}\n />\n <ItemMiddleSection {...itemMeta} />\n </ItemWrapper>\n );\n});\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACqCnB,SACE,KADF;AArCJ,OAAOA,YAAW;AAClB,SAAS,cAAc;AAEvB,SAAS,YAAY;AAErB,SAAS,wBAAwB;AAEjC,SAAS,yBAAyB;AAElC,SAAS,mBAAmB;AAC5B,SAAS,uBAAuB;AAIhC,MAAM,cAAc,OAAO,MAAM,EAAE,MAAM,iBAAiB,MAAM,uBAAuB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcjF,MAAM,cAAcA,OAAM,KAAK,CAAC,aAAoC;AACzE,QAAM,EAAE,kBAAkB,IAAI;AAC9B,QAAM,EAAE,YAAY,WAAW,IAAI;AAEnC,QAAM,4BAA4B,iBAAiB,CAAC,UAAU,MAAM,yBAAyB;AAC7F,QAAM,yBAAyB,0BAA0B;AACzD,QAAM,kBAAkB,iBAAiB,CAAC,UAAU,MAAM,eAAe;AAEzE,SACE,qBAAC,eAAY,MAAM,CAAC,QAAQ,MAAM,GAAG,YAAW,UAAS,MAAK,YAAW,gBAAc,YACrF;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,IAAI,GAAG;AAAA,QACP,aAAa;AAAA,QACb,YAAY,iBAAiB,eAAe;AAAA;AAAA,IAC9C;AAAA,IACA,oBAAC,qBAAmB,GAAG,UAAU;AAAA,KACnC;AAEJ,CAAC;",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import React2 from "react";
|
|
3
|
-
import { useMakeMutable } from "@elliemae/ds-utilities";
|
|
4
3
|
import { useFocusItemTracker, useFocusActionTrackers, useFocusRegionTrackers } from "../../config/useFocusTracker";
|
|
5
4
|
import { useInternalStore } from "../../config/useStore";
|
|
6
5
|
const useItemArrowNavigation = (itemMeta) => {
|
|
7
6
|
const { trackFocusRegionPanelFocusMoveAll } = useFocusRegionTrackers();
|
|
8
|
-
const {
|
|
7
|
+
const { trackFocusPrevItem, trackFocusNextItem, trackFocusItemReset } = useFocusItemTracker();
|
|
9
8
|
const { trackFocusNextAction, trackFocusPrevAction, trackFocusActionParent, trackFocusActionReset } = useFocusActionTrackers();
|
|
10
|
-
const {
|
|
11
|
-
const configuredDatum = React2.useMemo(() => ({ original: datum, ...datumInternalMeta }), [datum, datumInternalMeta]);
|
|
9
|
+
const { hasMultipleSelection, isDestinationPanel } = itemMeta;
|
|
12
10
|
const getIsDragAndDropHappening = useInternalStore((state) => state.getIsDragAndDropHappening);
|
|
13
|
-
const mutableItemMeta = useMakeMutable(itemMeta);
|
|
14
|
-
const mutableInternalMeta = useMakeMutable(datumInternalMeta);
|
|
15
|
-
const mutableConfiguredDatum = useMakeMutable(configuredDatum);
|
|
16
11
|
const onItemContainerKeyDown = React2.useCallback(
|
|
17
12
|
(e) => {
|
|
18
13
|
const { key } = e;
|
|
@@ -32,10 +27,7 @@ const useItemArrowNavigation = (itemMeta) => {
|
|
|
32
27
|
trackFocusActionReset();
|
|
33
28
|
return;
|
|
34
29
|
}
|
|
35
|
-
trackFocusPrevAction(
|
|
36
|
-
if (mutableFocusItem.current === "first" && mutableInternalMeta.current.isFirst || mutableFocusItem.current === "last" && mutableInternalMeta.current.isLast) {
|
|
37
|
-
trackFocusItem(mutableConfiguredDatum.current);
|
|
38
|
-
}
|
|
30
|
+
trackFocusPrevAction(itemMeta);
|
|
39
31
|
return;
|
|
40
32
|
}
|
|
41
33
|
if (key === "ArrowRight") {
|
|
@@ -45,19 +37,16 @@ const useItemArrowNavigation = (itemMeta) => {
|
|
|
45
37
|
trackFocusActionReset();
|
|
46
38
|
return;
|
|
47
39
|
}
|
|
48
|
-
trackFocusNextAction(
|
|
49
|
-
if (mutableFocusItem.current === "first" && mutableInternalMeta.current.isFirst || mutableFocusItem.current === "last" && mutableInternalMeta.current.isLast) {
|
|
50
|
-
trackFocusItem(mutableConfiguredDatum.current);
|
|
51
|
-
}
|
|
40
|
+
trackFocusNextAction(itemMeta);
|
|
52
41
|
return;
|
|
53
42
|
}
|
|
54
43
|
if (key === "ArrowUp") {
|
|
55
|
-
trackFocusPrevItem(
|
|
44
|
+
trackFocusPrevItem(itemMeta);
|
|
56
45
|
trackFocusActionParent();
|
|
57
46
|
return;
|
|
58
47
|
}
|
|
59
48
|
if (key === "ArrowDown") {
|
|
60
|
-
trackFocusNextItem(
|
|
49
|
+
trackFocusNextItem(itemMeta);
|
|
61
50
|
trackFocusActionParent();
|
|
62
51
|
return;
|
|
63
52
|
}
|
|
@@ -66,15 +55,11 @@ const useItemArrowNavigation = (itemMeta) => {
|
|
|
66
55
|
getIsDragAndDropHappening,
|
|
67
56
|
hasMultipleSelection,
|
|
68
57
|
trackFocusPrevAction,
|
|
69
|
-
|
|
70
|
-
mutableFocusItem,
|
|
71
|
-
mutableInternalMeta,
|
|
58
|
+
itemMeta,
|
|
72
59
|
trackFocusRegionPanelFocusMoveAll,
|
|
73
60
|
isDestinationPanel,
|
|
74
61
|
trackFocusItemReset,
|
|
75
62
|
trackFocusActionReset,
|
|
76
|
-
trackFocusItem,
|
|
77
|
-
mutableConfiguredDatum,
|
|
78
63
|
trackFocusNextAction,
|
|
79
64
|
trackFocusPrevItem,
|
|
80
65
|
trackFocusActionParent,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/Item/useItemArrowNavigation.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport React from 'react';\nimport {
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACEvB,OAAOA,YAAW;AAClB,SAAS,
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport React from 'react';\nimport { useFocusItemTracker, useFocusActionTrackers, useFocusRegionTrackers } from '../../config/useFocusTracker';\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\nimport { useInternalStore } from '../../config/useStore';\n\nexport const useItemArrowNavigation = (itemMeta: DSShuttleV2T.ItemMeta) => {\n const { trackFocusRegionPanelFocusMoveAll } = useFocusRegionTrackers();\n const { trackFocusPrevItem, trackFocusNextItem, trackFocusItemReset } = useFocusItemTracker();\n const { trackFocusNextAction, trackFocusPrevAction, trackFocusActionParent, trackFocusActionReset } =\n useFocusActionTrackers();\n const { hasMultipleSelection, isDestinationPanel } = itemMeta;\n\n const getIsDragAndDropHappening = useInternalStore((state) => state.getIsDragAndDropHappening);\n\n const onItemContainerKeyDown = React.useCallback<React.KeyboardEventHandler<HTMLDivElement>>(\n (e) => {\n const { key } = e;\n const isDragAndDropHappening = getIsDragAndDropHappening();\n if (isDragAndDropHappening) {\n e.preventDefault();\n return;\n }\n // stopping prepagation it's required to avoid \"ArrowUp/ArrowDown\" to trigger parents logic\n // preventDefault it's just me thinking it's good idea when stopping propagation\n if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(key)) e.preventDefault();\n if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(key)) e.stopPropagation();\n if (key === 'ArrowLeft') {\n if (hasMultipleSelection) {\n trackFocusRegionPanelFocusMoveAll(isDestinationPanel);\n trackFocusItemReset();\n trackFocusActionReset();\n return;\n }\n\n trackFocusPrevAction(itemMeta);\n return;\n }\n if (key === 'ArrowRight') {\n if (hasMultipleSelection) {\n trackFocusRegionPanelFocusMoveAll(isDestinationPanel);\n trackFocusItemReset();\n trackFocusActionReset();\n return;\n }\n trackFocusNextAction(itemMeta);\n return;\n }\n if (key === 'ArrowUp') {\n trackFocusPrevItem(itemMeta);\n trackFocusActionParent();\n return;\n }\n if (key === 'ArrowDown') {\n trackFocusNextItem(itemMeta);\n trackFocusActionParent();\n return;\n }\n },\n [\n getIsDragAndDropHappening,\n hasMultipleSelection,\n trackFocusPrevAction,\n itemMeta,\n trackFocusRegionPanelFocusMoveAll,\n isDestinationPanel,\n trackFocusItemReset,\n trackFocusActionReset,\n trackFocusNextAction,\n trackFocusPrevItem,\n trackFocusActionParent,\n trackFocusNextItem,\n ],\n );\n\n return React.useMemo(() => ({ onItemContainerKeyDown }), [onItemContainerKeyDown]);\n};\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACEvB,OAAOA,YAAW;AAClB,SAAS,qBAAqB,wBAAwB,8BAA8B;AAEpF,SAAS,wBAAwB;AAE1B,MAAM,yBAAyB,CAAC,aAAoC;AACzE,QAAM,EAAE,kCAAkC,IAAI,uBAAuB;AACrE,QAAM,EAAE,oBAAoB,oBAAoB,oBAAoB,IAAI,oBAAoB;AAC5F,QAAM,EAAE,sBAAsB,sBAAsB,wBAAwB,sBAAsB,IAChG,uBAAuB;AACzB,QAAM,EAAE,sBAAsB,mBAAmB,IAAI;AAErD,QAAM,4BAA4B,iBAAiB,CAAC,UAAU,MAAM,yBAAyB;AAE7F,QAAM,yBAAyBA,OAAM;AAAA,IACnC,CAAC,MAAM;AACL,YAAM,EAAE,IAAI,IAAI;AAChB,YAAM,yBAAyB,0BAA0B;AACzD,UAAI,wBAAwB;AAC1B,UAAE,eAAe;AACjB;AAAA,MACF;AAGA,UAAI,CAAC,WAAW,aAAa,aAAa,YAAY,EAAE,SAAS,GAAG;AAAG,UAAE,eAAe;AACxF,UAAI,CAAC,WAAW,aAAa,aAAa,YAAY,EAAE,SAAS,GAAG;AAAG,UAAE,gBAAgB;AACzF,UAAI,QAAQ,aAAa;AACvB,YAAI,sBAAsB;AACxB,4CAAkC,kBAAkB;AACpD,8BAAoB;AACpB,gCAAsB;AACtB;AAAA,QACF;AAEA,6BAAqB,QAAQ;AAC7B;AAAA,MACF;AACA,UAAI,QAAQ,cAAc;AACxB,YAAI,sBAAsB;AACxB,4CAAkC,kBAAkB;AACpD,8BAAoB;AACpB,gCAAsB;AACtB;AAAA,QACF;AACA,6BAAqB,QAAQ;AAC7B;AAAA,MACF;AACA,UAAI,QAAQ,WAAW;AACrB,2BAAmB,QAAQ;AAC3B,+BAAuB;AACvB;AAAA,MACF;AACA,UAAI,QAAQ,aAAa;AACvB,2BAAmB,QAAQ;AAC3B,+BAAuB;AACvB;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAOA,OAAM,QAAQ,OAAO,EAAE,uBAAuB,IAAI,CAAC,sBAAsB,CAAC;AACnF;",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -15,7 +15,7 @@ const useSelectionLogic = ({
|
|
|
15
15
|
const setPanelLastSelectedItem = useInternalStore(
|
|
16
16
|
(store) => isDestinationPanel ? store.setDestinationPanelLastSelectedItem : store.setSourcePanelLastSelectedItem
|
|
17
17
|
);
|
|
18
|
-
const panelSelectionableDataIds =
|
|
18
|
+
const panelSelectionableDataIds = usePropsStore(
|
|
19
19
|
(store) => isDestinationPanel ? store.destinationSelectionableDataIds : store.sourceSelectionableDataIds
|
|
20
20
|
);
|
|
21
21
|
const onSelectionChange = usePropsStore(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/Item/useSelectionLogic.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-statements */\nimport React from 'react';\nimport { useInternalStore, usePropsStore } from '../../config/useStore';\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\nimport { useFocusItemTracker, useFocusActionTrackers, useFocusTracker } from '../../config/useFocusTracker';\nexport const useSelectionLogic = ({\n isDestinationPanel,\n datumInternalMeta,\n datum,\n datumRenderFlags,\n}: DSShuttleV2T.ItemMeta) => {\n const { trackFocusItem } = useFocusItemTracker();\n const { trackFocusActionParent } = useFocusActionTrackers();\n const { trackFocusRegionPanelItem } = useFocusTracker();\n\n const getPanelLastSelectedItem = useInternalStore((store) => store.getPanelLastSelectedItem);\n const setPanelLastSelectedItem = useInternalStore((store) =>\n isDestinationPanel ? store.setDestinationPanelLastSelectedItem : store.setSourcePanelLastSelectedItem,\n );\n\n const panelSelectionableDataIds =
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACCvB,OAAOA,YAAW;AAClB,SAAS,kBAAkB,qBAAqB;AAEhD,SAAS,qBAAqB,wBAAwB,uBAAuB;AACtE,MAAM,oBAAoB,CAAC;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA6B;AAC3B,QAAM,EAAE,eAAe,IAAI,oBAAoB;AAC/C,QAAM,EAAE,uBAAuB,IAAI,uBAAuB;AAC1D,QAAM,EAAE,0BAA0B,IAAI,gBAAgB;AAEtD,QAAM,2BAA2B,iBAAiB,CAAC,UAAU,MAAM,wBAAwB;AAC3F,QAAM,2BAA2B;AAAA,IAAiB,CAAC,UACjD,qBAAqB,MAAM,sCAAsC,MAAM;AAAA,EACzE;AAEA,QAAM,4BAA4B;AAAA,
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-statements */\nimport React from 'react';\nimport { useInternalStore, usePropsStore } from '../../config/useStore';\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\nimport { useFocusItemTracker, useFocusActionTrackers, useFocusTracker } from '../../config/useFocusTracker';\nexport const useSelectionLogic = ({\n isDestinationPanel,\n datumInternalMeta,\n datum,\n datumRenderFlags,\n}: DSShuttleV2T.ItemMeta) => {\n const { trackFocusItem } = useFocusItemTracker();\n const { trackFocusActionParent } = useFocusActionTrackers();\n const { trackFocusRegionPanelItem } = useFocusTracker();\n\n const getPanelLastSelectedItem = useInternalStore((store) => store.getPanelLastSelectedItem);\n const setPanelLastSelectedItem = useInternalStore((store) =>\n isDestinationPanel ? store.setDestinationPanelLastSelectedItem : store.setSourcePanelLastSelectedItem,\n );\n\n const panelSelectionableDataIds = usePropsStore((store) =>\n isDestinationPanel ? store.destinationSelectionableDataIds : store.sourceSelectionableDataIds,\n );\n\n const onSelectionChange = usePropsStore((state) =>\n isDestinationPanel ? state.onDestinationSelectionChange : state.onSourceSelectionChange,\n );\n const panelSelectedItems = usePropsStore((state) =>\n isDestinationPanel ? state.destinationSelectedItems : state.sourceSelectedItems,\n );\n const selectItem = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement> | React.MouseEvent<HTMLDivElement | HTMLButtonElement>) => {\n const { selectionPrevented } = datumRenderFlags;\n const { hydratedId } = datumInternalMeta;\n const { shiftKey } = event;\n const lastSelectedItem = getPanelLastSelectedItem(isDestinationPanel);\n if (!selectionPrevented) {\n let newSelection: Record<string, boolean> = {};\n // shift select logic\n if (shiftKey && lastSelectedItem) {\n const startSelIndx = panelSelectionableDataIds.findIndex((id) => id === lastSelectedItem);\n const endSelIndx = panelSelectionableDataIds.findIndex((id) => id === hydratedId);\n if (startSelIndx !== -1 && endSelIndx !== -1) {\n const ordererIndexes = [startSelIndx, endSelIndx].sort();\n const shiftSelectedIdsArray = panelSelectionableDataIds.slice(ordererIndexes[0], ordererIndexes[1] + 1);\n let shouldShiftDeSelect = true;\n // I track both \"all Select\"/\"all unselect\" so I can \".forEach\" only once and apply either version after\n const allSelected: Record<string, boolean> = {};\n const allDeSelected: Record<string, boolean> = {};\n shiftSelectedIdsArray.forEach((id) => {\n allSelected[id] = true;\n allDeSelected[id] = false;\n // if anything inside the shift-select was not selected, shift-select will \"select\"\n if (panelSelectedItems[id] !== true) shouldShiftDeSelect = false;\n });\n if (shouldShiftDeSelect) newSelection = { ...panelSelectedItems, ...allDeSelected };\n else newSelection = { ...panelSelectedItems, ...allSelected };\n }\n } else {\n // single selection logic\n newSelection = { ...panelSelectedItems };\n const isAddition = newSelection[hydratedId] !== true;\n if (isAddition) {\n newSelection[hydratedId] = true;\n } else delete newSelection[hydratedId];\n }\n // we track the item for \"shift select\" purposes\n // this must happen AFTER shift select logic!\n setPanelLastSelectedItem(hydratedId);\n onSelectionChange(newSelection, { event, item: datum });\n }\n // focus tracking logic\n trackFocusRegionPanelItem(isDestinationPanel);\n trackFocusItem({ original: datum, ...datumInternalMeta });\n trackFocusActionParent();\n },\n [\n datum,\n datumInternalMeta,\n datumRenderFlags,\n getPanelLastSelectedItem,\n isDestinationPanel,\n onSelectionChange,\n panelSelectedItems,\n panelSelectionableDataIds,\n setPanelLastSelectedItem,\n trackFocusActionParent,\n trackFocusItem,\n trackFocusRegionPanelItem,\n ],\n );\n\n const onShiftMouseDownPreventTextSelection = React.useCallback((event: React.MouseEvent<HTMLDivElement>) => {\n const { shiftKey } = event;\n if (shiftKey) event.preventDefault();\n }, []);\n return React.useMemo(\n () => ({ selectItem, onShiftMouseDownPreventTextSelection }),\n [selectItem, onShiftMouseDownPreventTextSelection],\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -5,7 +5,7 @@ import { styled } from "@elliemae/ds-system";
|
|
|
5
5
|
import { Grid } from "@elliemae/ds-grid";
|
|
6
6
|
import { useOnBlurOut } from "@elliemae/ds-utilities";
|
|
7
7
|
import { PanelWrapper } from "./PanelWrapper";
|
|
8
|
-
import {
|
|
8
|
+
import { usePropsStore } from "../config/useStore";
|
|
9
9
|
import { DSShuttleV2Name, DSShuttleV2Slots } from "../config/DSShuttleV2Definitions";
|
|
10
10
|
import { useFocusTracker } from "../config/useFocusTracker";
|
|
11
11
|
const StyledWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.WRAPPER })`
|
|
@@ -26,8 +26,8 @@ const MainContent = React2.memo(() => {
|
|
|
26
26
|
[trackFocusActionReset, trackFocusItemReset, trackFocusRegionReset]
|
|
27
27
|
);
|
|
28
28
|
const handleOnBlurOut = useOnBlurOut(config);
|
|
29
|
-
const destinationHasMultipleSelectedItems =
|
|
30
|
-
const sourceHasMultipleSelectedItems =
|
|
29
|
+
const destinationHasMultipleSelectedItems = usePropsStore((store) => store.destinationHasMultipleSelectedItems);
|
|
30
|
+
const sourceHasMultipleSelectedItems = usePropsStore((store) => store.sourceHasMultipleSelectedItems);
|
|
31
31
|
return /* @__PURE__ */ jsxs(StyledWrapper, { cols: mainContentCols, gutter: "xs", p: "xs", onBlur: handleOnBlurOut, children: [
|
|
32
32
|
/* @__PURE__ */ jsx(PanelWrapper, { isDestinationPanel: false, hasMultipleSelection: sourceHasMultipleSelectedItems }),
|
|
33
33
|
/* @__PURE__ */ jsx(PanelWrapper, { isDestinationPanel: true, hasMultipleSelection: destinationHasMultipleSelectedItems })
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/parts/MainContent.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 { useOnBlurOut } from '@elliemae/ds-utilities';\nimport { PanelWrapper } from './PanelWrapper';\nimport {
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACgCnB,SACE,KADF;AAhCJ,OAAOA,YAAW;AAClB,SAAS,cAAc;AACvB,SAAS,YAAY;AACrB,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAC7B,SAAS,
|
|
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 { useOnBlurOut } from '@elliemae/ds-utilities';\nimport { PanelWrapper } from './PanelWrapper';\nimport { usePropsStore } from '../config/useStore';\nimport { DSShuttleV2Name, DSShuttleV2Slots } from '../config/DSShuttleV2Definitions';\nimport { useFocusTracker } from '../config/useFocusTracker';\n\nconst StyledWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.WRAPPER })`\n min-width: 648px;\n min-height: 296px;\n`;\nconst mainContentCols = ['1fr', '1fr'];\n\nexport const MainContent = React.memo(() => {\n const { trackFocusRegionReset, trackFocusItemReset, trackFocusActionReset } = useFocusTracker();\n const config = React.useMemo(\n () => ({\n onBlur: () => {\n trackFocusRegionReset();\n trackFocusItemReset();\n trackFocusActionReset();\n },\n }),\n [trackFocusActionReset, trackFocusItemReset, trackFocusRegionReset],\n );\n const handleOnBlurOut = useOnBlurOut(config);\n const destinationHasMultipleSelectedItems = usePropsStore((store) => store.destinationHasMultipleSelectedItems);\n const sourceHasMultipleSelectedItems = usePropsStore((store) => store.sourceHasMultipleSelectedItems);\n\n return (\n <StyledWrapper cols={mainContentCols} gutter=\"xs\" p=\"xs\" onBlur={handleOnBlurOut}>\n <PanelWrapper isDestinationPanel={false} hasMultipleSelection={sourceHasMultipleSelectedItems} />\n <PanelWrapper isDestinationPanel hasMultipleSelection={destinationHasMultipleSelectedItems} />\n </StyledWrapper>\n );\n});\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACgCnB,SACE,KADF;AAhCJ,OAAOA,YAAW;AAClB,SAAS,cAAc;AACvB,SAAS,YAAY;AACrB,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB,wBAAwB;AAClD,SAAS,uBAAuB;AAEhC,MAAM,gBAAgB,OAAO,MAAM,EAAE,MAAM,iBAAiB,MAAM,iBAAiB,QAAQ,CAAC;AAAA;AAAA;AAAA;AAI5F,MAAM,kBAAkB,CAAC,OAAO,KAAK;AAE9B,MAAM,cAAcA,OAAM,KAAK,MAAM;AAC1C,QAAM,EAAE,uBAAuB,qBAAqB,sBAAsB,IAAI,gBAAgB;AAC9F,QAAM,SAASA,OAAM;AAAA,IACnB,OAAO;AAAA,MACL,QAAQ,MAAM;AACZ,8BAAsB;AACtB,4BAAoB;AACpB,8BAAsB;AAAA,MACxB;AAAA,IACF;AAAA,IACA,CAAC,uBAAuB,qBAAqB,qBAAqB;AAAA,EACpE;AACA,QAAM,kBAAkB,aAAa,MAAM;AAC3C,QAAM,sCAAsC,cAAc,CAAC,UAAU,MAAM,mCAAmC;AAC9G,QAAM,iCAAiC,cAAc,CAAC,UAAU,MAAM,8BAA8B;AAEpG,SACE,qBAAC,iBAAc,MAAM,iBAAiB,QAAO,MAAK,GAAE,MAAK,QAAQ,iBAC/D;AAAA,wBAAC,gBAAa,oBAAoB,OAAO,sBAAsB,gCAAgC;AAAA,IAC/F,oBAAC,gBAAa,oBAAkB,MAAC,sBAAsB,qCAAqC;AAAA,KAC9F;AAEJ,CAAC;",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|