@elliemae/ds-shuttle 3.0.0-next.0 → 3.0.0-next.4

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.
Files changed (217) hide show
  1. package/dist/cjs/AnimationState.js +75 -0
  2. package/dist/cjs/AnimationState.js.map +7 -0
  3. package/dist/cjs/DSShuttle.js +170 -0
  4. package/dist/cjs/DSShuttle.js.map +7 -0
  5. package/dist/cjs/SearchState.js +60 -0
  6. package/dist/cjs/SearchState.js.map +7 -0
  7. package/dist/cjs/Shuttle.actions.js +136 -0
  8. package/dist/cjs/Shuttle.actions.js.map +7 -0
  9. package/dist/cjs/ShuttleContainer.js +108 -0
  10. package/dist/cjs/ShuttleContainer.js.map +7 -0
  11. package/dist/cjs/ShuttleImpl.js +242 -0
  12. package/dist/cjs/ShuttleImpl.js.map +7 -0
  13. package/dist/cjs/ShuttleRenderer.js +203 -0
  14. package/dist/cjs/ShuttleRenderer.js.map +7 -0
  15. package/dist/cjs/ShuttleState.js +84 -0
  16. package/dist/cjs/ShuttleState.js.map +7 -0
  17. package/dist/cjs/animation/animationConfig.js +78 -0
  18. package/dist/cjs/animation/animationConfig.js.map +7 -0
  19. package/dist/cjs/classedComponents.js +72 -0
  20. package/dist/cjs/classedComponents.js.map +7 -0
  21. package/dist/cjs/components/LoadingIndicator.js +52 -0
  22. package/dist/cjs/components/LoadingIndicator.js.map +7 -0
  23. package/dist/cjs/components/OverflowList.js +71 -0
  24. package/dist/cjs/components/OverflowList.js.map +7 -0
  25. package/dist/cjs/components/ShuttleBreadcrumb.js +54 -0
  26. package/dist/cjs/components/ShuttleBreadcrumb.js.map +7 -0
  27. package/dist/cjs/components/ShuttleInfiniteScrollIndicator.js +48 -0
  28. package/dist/cjs/components/ShuttleInfiniteScrollIndicator.js.map +7 -0
  29. package/dist/cjs/components/ShuttleListItem/ActionButtons.js +76 -0
  30. package/dist/cjs/components/ShuttleListItem/ActionButtons.js.map +7 -0
  31. package/dist/cjs/components/ShuttleListItem/ShuttleListItem.js +121 -0
  32. package/dist/cjs/components/ShuttleListItem/ShuttleListItem.js.map +7 -0
  33. package/dist/cjs/components/ShuttleListItem/ShuttleSourceListItem.js +127 -0
  34. package/dist/cjs/components/ShuttleListItem/ShuttleSourceListItem.js.map +7 -0
  35. package/dist/cjs/components/ShuttleListItem/ShuttleTargetListItem.js +110 -0
  36. package/dist/cjs/components/ShuttleListItem/ShuttleTargetListItem.js.map +7 -0
  37. package/dist/cjs/components/ShuttleListPanel.js +49 -0
  38. package/dist/cjs/components/ShuttleListPanel.js.map +7 -0
  39. package/dist/cjs/components/ShuttleSearchBox.js +99 -0
  40. package/dist/cjs/components/ShuttleSearchBox.js.map +7 -0
  41. package/dist/cjs/components/ShuttleSource.js +223 -0
  42. package/dist/cjs/components/ShuttleSource.js.map +7 -0
  43. package/dist/cjs/components/ShuttleTarget.js +135 -0
  44. package/dist/cjs/components/ShuttleTarget.js.map +7 -0
  45. package/dist/cjs/components/VirtualizedItem.js +65 -0
  46. package/dist/cjs/components/VirtualizedItem.js.map +7 -0
  47. package/dist/cjs/components/VirtualizedList.js +104 -0
  48. package/dist/cjs/components/VirtualizedList.js.map +7 -0
  49. package/dist/cjs/components/VirtualizedSortableList.js +77 -0
  50. package/dist/cjs/components/VirtualizedSortableList.js.map +7 -0
  51. package/dist/cjs/helper.js +99 -0
  52. package/dist/cjs/helper.js.map +7 -0
  53. package/dist/cjs/index.js +38 -0
  54. package/dist/cjs/index.js.map +7 -0
  55. package/dist/cjs/tests/utils.js +1235 -0
  56. package/dist/cjs/tests/utils.js.map +7 -0
  57. package/dist/cjs/updateShuttleStateFromProps.js +108 -0
  58. package/dist/cjs/updateShuttleStateFromProps.js.map +7 -0
  59. package/dist/cjs/utils.js +54 -0
  60. package/dist/cjs/utils.js.map +7 -0
  61. package/dist/cjs/withProviders.js +57 -0
  62. package/dist/cjs/withProviders.js.map +7 -0
  63. package/{esm → dist/esm}/AnimationState.js +12 -8
  64. package/dist/esm/AnimationState.js.map +7 -0
  65. package/dist/esm/DSShuttle.js +141 -0
  66. package/dist/esm/DSShuttle.js.map +7 -0
  67. package/dist/esm/SearchState.js +31 -0
  68. package/dist/esm/SearchState.js.map +7 -0
  69. package/dist/esm/Shuttle.actions.js +118 -0
  70. package/dist/esm/Shuttle.actions.js.map +7 -0
  71. package/dist/esm/ShuttleContainer.js +92 -0
  72. package/dist/esm/ShuttleContainer.js.map +7 -0
  73. package/dist/esm/ShuttleImpl.js +229 -0
  74. package/dist/esm/ShuttleImpl.js.map +7 -0
  75. package/dist/esm/ShuttleRenderer.js +176 -0
  76. package/dist/esm/ShuttleRenderer.js.map +7 -0
  77. package/dist/esm/ShuttleState.js +55 -0
  78. package/dist/esm/ShuttleState.js.map +7 -0
  79. package/dist/esm/animation/animationConfig.js +49 -0
  80. package/dist/esm/animation/animationConfig.js.map +7 -0
  81. package/dist/esm/classedComponents.js +43 -0
  82. package/dist/esm/classedComponents.js.map +7 -0
  83. package/dist/esm/components/LoadingIndicator.js +23 -0
  84. package/dist/esm/components/LoadingIndicator.js.map +7 -0
  85. package/dist/esm/components/OverflowList.js +44 -0
  86. package/dist/esm/components/OverflowList.js.map +7 -0
  87. package/dist/esm/components/ShuttleBreadcrumb.js +25 -0
  88. package/dist/esm/components/ShuttleBreadcrumb.js.map +7 -0
  89. package/dist/esm/components/ShuttleInfiniteScrollIndicator.js +19 -0
  90. package/dist/esm/components/ShuttleInfiniteScrollIndicator.js.map +7 -0
  91. package/dist/esm/components/ShuttleListItem/ActionButtons.js +49 -0
  92. package/dist/esm/components/ShuttleListItem/ActionButtons.js.map +7 -0
  93. package/dist/esm/components/ShuttleListItem/ShuttleListItem.js +94 -0
  94. package/dist/esm/components/ShuttleListItem/ShuttleListItem.js.map +7 -0
  95. package/dist/esm/components/ShuttleListItem/ShuttleSourceListItem.js +100 -0
  96. package/dist/esm/components/ShuttleListItem/ShuttleSourceListItem.js.map +7 -0
  97. package/dist/esm/components/ShuttleListItem/ShuttleTargetListItem.js +83 -0
  98. package/dist/esm/components/ShuttleListItem/ShuttleTargetListItem.js.map +7 -0
  99. package/dist/esm/components/ShuttleListPanel.js +20 -0
  100. package/dist/esm/components/ShuttleListPanel.js.map +7 -0
  101. package/dist/esm/components/ShuttleSearchBox.js +70 -0
  102. package/dist/esm/components/ShuttleSearchBox.js.map +7 -0
  103. package/dist/esm/components/ShuttleSource.js +208 -0
  104. package/dist/esm/components/ShuttleSource.js.map +7 -0
  105. package/dist/esm/components/ShuttleTarget.js +119 -0
  106. package/dist/esm/components/ShuttleTarget.js.map +7 -0
  107. package/dist/esm/components/VirtualizedItem.js +38 -0
  108. package/dist/esm/components/VirtualizedItem.js.map +7 -0
  109. package/dist/esm/components/VirtualizedList.js +77 -0
  110. package/dist/esm/components/VirtualizedList.js.map +7 -0
  111. package/dist/esm/components/VirtualizedSortableList.js +50 -0
  112. package/dist/esm/components/VirtualizedSortableList.js.map +7 -0
  113. package/dist/esm/helper.js +72 -0
  114. package/dist/esm/helper.js.map +7 -0
  115. package/dist/esm/index.js +9 -0
  116. package/dist/esm/index.js.map +7 -0
  117. package/dist/esm/tests/utils.js +1208 -0
  118. package/dist/esm/tests/utils.js.map +7 -0
  119. package/dist/esm/updateShuttleStateFromProps.js +81 -0
  120. package/dist/esm/updateShuttleStateFromProps.js.map +7 -0
  121. package/dist/esm/utils.js +27 -0
  122. package/dist/esm/utils.js.map +7 -0
  123. package/dist/esm/withProviders.js +30 -0
  124. package/dist/esm/withProviders.js.map +7 -0
  125. package/package.json +98 -89
  126. package/cjs/AnimationState.js +0 -48
  127. package/cjs/DSShuttle.js +0 -223
  128. package/cjs/SearchState.js +0 -41
  129. package/cjs/Shuttle.actions.js +0 -137
  130. package/cjs/ShuttleContainer.js +0 -87
  131. package/cjs/ShuttleImpl.js +0 -311
  132. package/cjs/ShuttleRenderer.js +0 -139
  133. package/cjs/ShuttleState.js +0 -80
  134. package/cjs/animation/animationConfig.js +0 -81
  135. package/cjs/classedComponents.js +0 -71
  136. package/cjs/components/LoadingIndicator.js +0 -25
  137. package/cjs/components/OverflowList.js +0 -53
  138. package/cjs/components/ShuttleBreadcrumb.js +0 -42
  139. package/cjs/components/ShuttleInfiniteScrollIndicator.js +0 -39
  140. package/cjs/components/ShuttleListItem/ActionButtons.js +0 -55
  141. package/cjs/components/ShuttleListItem/ShuttleListItem.js +0 -85
  142. package/cjs/components/ShuttleListItem/ShuttleSourceListItem.js +0 -76
  143. package/cjs/components/ShuttleListItem/ShuttleTargetListItem.js +0 -57
  144. package/cjs/components/ShuttleListPanel.js +0 -31
  145. package/cjs/components/ShuttleSearchBox.js +0 -110
  146. package/cjs/components/ShuttleSource.js +0 -188
  147. package/cjs/components/ShuttleTarget.js +0 -116
  148. package/cjs/components/VirtualizedItem.js +0 -46
  149. package/cjs/components/VirtualizedList.js +0 -93
  150. package/cjs/components/VirtualizedSortableList.js +0 -41
  151. package/cjs/helper.js +0 -117
  152. package/cjs/index.js +0 -12
  153. package/cjs/updateShuttleStateFromProps.js +0 -94
  154. package/cjs/utils.js +0 -43
  155. package/cjs/withProviders.js +0 -29
  156. package/esm/DSShuttle.js +0 -213
  157. package/esm/SearchState.js +0 -35
  158. package/esm/Shuttle.actions.js +0 -123
  159. package/esm/ShuttleContainer.js +0 -80
  160. package/esm/ShuttleImpl.js +0 -304
  161. package/esm/ShuttleRenderer.js +0 -132
  162. package/esm/ShuttleState.js +0 -74
  163. package/esm/animation/animationConfig.js +0 -77
  164. package/esm/classedComponents.js +0 -51
  165. package/esm/components/LoadingIndicator.js +0 -18
  166. package/esm/components/OverflowList.js +0 -46
  167. package/esm/components/ShuttleBreadcrumb.js +0 -35
  168. package/esm/components/ShuttleInfiniteScrollIndicator.js +0 -32
  169. package/esm/components/ShuttleListItem/ActionButtons.js +0 -43
  170. package/esm/components/ShuttleListItem/ShuttleListItem.js +0 -76
  171. package/esm/components/ShuttleListItem/ShuttleSourceListItem.js +0 -68
  172. package/esm/components/ShuttleListItem/ShuttleTargetListItem.js +0 -49
  173. package/esm/components/ShuttleListPanel.js +0 -24
  174. package/esm/components/ShuttleSearchBox.js +0 -104
  175. package/esm/components/ShuttleSource.js +0 -179
  176. package/esm/components/ShuttleTarget.js +0 -107
  177. package/esm/components/VirtualizedItem.js +0 -40
  178. package/esm/components/VirtualizedList.js +0 -84
  179. package/esm/components/VirtualizedSortableList.js +0 -34
  180. package/esm/helper.js +0 -78
  181. package/esm/index.js +0 -2
  182. package/esm/updateShuttleStateFromProps.js +0 -88
  183. package/esm/utils.js +0 -18
  184. package/esm/withProviders.js +0 -22
  185. package/types/AnimationState.d.ts +0 -26
  186. package/types/DSShuttle.d.ts +0 -341
  187. package/types/SearchState.d.ts +0 -22
  188. package/types/Shuttle.actions.d.ts +0 -11
  189. package/types/ShuttleContainer.d.ts +0 -3
  190. package/types/ShuttleImpl.d.ts +0 -3
  191. package/types/ShuttleRenderer.d.ts +0 -37
  192. package/types/ShuttleState.d.ts +0 -53
  193. package/types/animation/animationConfig.d.ts +0 -68
  194. package/types/classedComponents.d.ts +0 -14
  195. package/types/components/LoadingIndicator.d.ts +0 -3
  196. package/types/components/OverflowList.d.ts +0 -7
  197. package/types/components/ShuttleBreadcrumb.d.ts +0 -7
  198. package/types/components/ShuttleInfiniteScrollIndicator.d.ts +0 -5
  199. package/types/components/ShuttleListItem/ActionButtons.d.ts +0 -4
  200. package/types/components/ShuttleListItem/ShuttleListItem.d.ts +0 -14
  201. package/types/components/ShuttleListItem/ShuttleSourceListItem.d.ts +0 -13
  202. package/types/components/ShuttleListItem/ShuttleTargetListItem.d.ts +0 -13
  203. package/types/components/ShuttleListPanel.d.ts +0 -7
  204. package/types/components/ShuttleSearchBox.d.ts +0 -20
  205. package/types/components/ShuttleSource.d.ts +0 -54
  206. package/types/components/ShuttleTarget.d.ts +0 -16
  207. package/types/components/VirtualizedItem.d.ts +0 -3
  208. package/types/components/VirtualizedList.d.ts +0 -12
  209. package/types/components/VirtualizedSortableList.d.ts +0 -6
  210. package/types/helper.d.ts +0 -16
  211. package/types/index.d.ts +0 -1
  212. package/types/tests/DSShuttle.events.test.d.ts +0 -1
  213. package/types/tests/DSShuttle.test.d.ts +0 -1
  214. package/types/tests/utils.d.ts +0 -116
  215. package/types/updateShuttleStateFromProps.d.ts +0 -1
  216. package/types/utils.d.ts +0 -2
  217. package/types/withProviders.d.ts +0 -3
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/SearchState.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { useState } from 'react';\nimport createContainer from 'constate';\n\nfunction useSearchState() {\n const [searchTerm, setSearchTerm] = useState('');\n const [searching, setSearchBoxVisibility] = useState(false); // todo: create a hook for Visibility behavior\n\n function toggleSearchBox(userVisible) {\n if (userVisible !== undefined) {\n setSearchBoxVisibility(userVisible);\n } else {\n setSearchBoxVisibility(!searching);\n }\n }\n\n function reset() {\n setSearchTerm('');\n setSearchBoxVisibility(false);\n }\n\n return {\n state: { searchTerm, searching },\n setSearchTerm,\n toggleSearchBox,\n reset,\n };\n}\n\nconst SearchState = createContainer(useSearchState, value => [value.state]);\nexport { SearchState };\nexport default SearchState;\n"],
5
+ "mappings": "AAAA;ACAA;AACA;AAEA,0BAA0B;AACxB,QAAM,CAAC,YAAY,iBAAiB,SAAS;AAC7C,QAAM,CAAC,WAAW,0BAA0B,SAAS;AAErD,2BAAyB,aAAa;AACpC,QAAI,gBAAgB,QAAW;AAC7B,6BAAuB;AAAA,WAClB;AACL,6BAAuB,CAAC;AAAA;AAAA;AAI5B,mBAAiB;AACf,kBAAc;AACd,2BAAuB;AAAA;AAGzB,SAAO;AAAA,IACL,OAAO,EAAE,YAAY;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AAIJ,MAAM,cAAc,gBAAgB,gBAAgB,WAAS,CAAC,MAAM;AAEpE,IAAO,sBAAQ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,118 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ import * as React from "react";
21
+ import {
22
+ addOrRemove,
23
+ cloneDeep,
24
+ hashArray,
25
+ compose
26
+ } from "@elliemae/ds-utilities";
27
+ import {
28
+ getHierarchyTypeName,
29
+ toggleInObject,
30
+ filterMovedItems
31
+ } from "./helper";
32
+ import utils from "./utils";
33
+ function toggleItemSelection(itemId) {
34
+ return (state) => __spreadProps(__spreadValues({}, state), {
35
+ checkedItems: addOrRemove(state.checkedItems, itemId)
36
+ });
37
+ }
38
+ function navigateTo(item, dest) {
39
+ const hierarchyType = getHierarchyTypeName(dest);
40
+ return (state) => {
41
+ const indexInHierarchy = state[hierarchyType].findIndex((hItem) => hItem.id === item.id);
42
+ const hierarchy = state[hierarchyType];
43
+ return __spreadProps(__spreadValues({}, state), {
44
+ [hierarchyType]: indexInHierarchy !== -1 ? hierarchy.slice(0, indexInHierarchy + 1) : [...hierarchy, item]
45
+ });
46
+ };
47
+ }
48
+ function moveItem(item) {
49
+ return (state) => {
50
+ const movedItems = toggleInObject(state.movedItems, item.id, item);
51
+ return __spreadProps(__spreadValues({}, state), {
52
+ movedItems
53
+ });
54
+ };
55
+ }
56
+ const defaultOptions = {
57
+ parentField: "parent",
58
+ idField: "id",
59
+ op: (hasMoved) => !hasMoved
60
+ };
61
+ function getItemDeep({ collection, id, options }) {
62
+ const { idField } = __spreadValues(__spreadValues({}, defaultOptions), options);
63
+ const itemIndex = collection.findIndex((fItem) => fItem[idField] === id);
64
+ const item = collection[itemIndex];
65
+ const children = item?.hasChildren ? compose(utils.getChildren({ index: itemIndex }))(collection) || [] : [];
66
+ return { item, children };
67
+ }
68
+ function addToTarget(itemToAdd, collection) {
69
+ return (state, { idField }) => {
70
+ const items = collection || state.preparedItems;
71
+ const { item, children } = getItemDeep({
72
+ collection: items,
73
+ id: itemToAdd[idField]
74
+ });
75
+ return __spreadProps(__spreadValues({}, state), {
76
+ movedItems: [...state.movedItems, item],
77
+ targetItems: [...state.targetItems, item, ...children]
78
+ });
79
+ };
80
+ }
81
+ function removeFromTarget(itemToRemove) {
82
+ return (state, { idField }) => {
83
+ let targetItems = cloneDeep(state.targetItems);
84
+ const itemIndex = targetItems.findIndex((fItem) => fItem.id === itemToRemove.id);
85
+ const item = targetItems[itemIndex];
86
+ const children = item?.hasChildren ? compose(filterMovedItems(state.movedItems), utils.getChildren({ index: itemIndex }))(targetItems) || [] : [];
87
+ targetItems.splice(itemIndex, 1);
88
+ if (item?.hasChildren && children.length) {
89
+ const childrenHash = hashArray(children, "id");
90
+ targetItems = targetItems.filter((i) => !childrenHash[i.id]);
91
+ }
92
+ return __spreadProps(__spreadValues({}, state), {
93
+ movedItems: state.movedItems.filter((mItem) => mItem[idField] !== itemToRemove[idField]),
94
+ targetItems
95
+ });
96
+ };
97
+ }
98
+ function resetCheckedItems() {
99
+ return (state) => __spreadProps(__spreadValues({}, state), {
100
+ checkedItems: []
101
+ });
102
+ }
103
+ function resetMovedItems() {
104
+ return (state) => __spreadProps(__spreadValues({}, state), {
105
+ movedItems: [],
106
+ targetItems: []
107
+ });
108
+ }
109
+ export {
110
+ addToTarget,
111
+ moveItem,
112
+ navigateTo,
113
+ removeFromTarget,
114
+ resetCheckedItems,
115
+ resetMovedItems,
116
+ toggleItemSelection
117
+ };
118
+ //# sourceMappingURL=Shuttle.actions.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/Shuttle.actions.js"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import {\n addOrRemove,\n cloneDeep,\n hashArray,\n compose,\n} from '@elliemae/ds-utilities';\nimport {\n getHierarchyTypeName,\n toggleInObject,\n filterMovedItems,\n} from './helper';\n\nimport utils from './utils';\n\nexport function toggleItemSelection(itemId) {\n return state => ({\n ...state,\n checkedItems: addOrRemove(state.checkedItems, itemId),\n });\n}\nexport function navigateTo(item, dest) {\n const hierarchyType = getHierarchyTypeName(dest);\n return state => {\n const indexInHierarchy = state[hierarchyType].findIndex(\n hItem => hItem.id === item.id,\n );\n const hierarchy = state[hierarchyType];\n return {\n ...state,\n [hierarchyType]:\n indexInHierarchy !== -1\n ? hierarchy.slice(0, indexInHierarchy + 1)\n : [...hierarchy, item],\n };\n };\n}\nexport function moveItem(item) {\n return state => {\n const movedItems = toggleInObject(state.movedItems, item.id, item);\n return {\n ...state,\n movedItems,\n };\n };\n}\n\nconst defaultOptions = {\n parentField: 'parent',\n idField: 'id',\n op: hasMoved => !hasMoved,\n};\n\n// todo: optimize this\nfunction getItemDeep({ collection, id, options }) {\n const { idField } = { ...defaultOptions, ...options };\n const itemIndex = collection.findIndex(fItem => fItem[idField] === id);\n\n // get item with nested children\n const item = collection[itemIndex];\n const children = item?.hasChildren\n ? compose(utils.getChildren({ index: itemIndex }))(collection) || []\n : [];\n\n return { item, children };\n}\n\nexport function addToTarget(itemToAdd, collection) {\n return (state, { idField }) => {\n const items = collection || state.preparedItems;\n\n const { item, children } = getItemDeep({\n collection: items,\n id: itemToAdd[idField],\n });\n\n return {\n ...state,\n movedItems: [...state.movedItems, item],\n targetItems: [...state.targetItems, item, ...children],\n };\n };\n}\n\n// todo: optimize this\nexport function removeFromTarget(itemToRemove) {\n return (state, { idField }) => {\n let targetItems = cloneDeep(state.targetItems);\n\n const itemIndex = targetItems.findIndex(\n fItem => fItem.id === itemToRemove.id,\n );\n\n const item = targetItems[itemIndex];\n const children = item?.hasChildren\n ? compose(\n filterMovedItems(state.movedItems),\n utils.getChildren({ index: itemIndex }),\n )(targetItems) || []\n : [];\n\n targetItems.splice(itemIndex, 1);\n if (item?.hasChildren && children.length) {\n const childrenHash = hashArray(children, 'id');\n targetItems = targetItems.filter(i => !childrenHash[i.id]);\n }\n\n return {\n ...state,\n movedItems: state.movedItems.filter(\n mItem => mItem[idField] !== itemToRemove[idField],\n ),\n targetItems,\n };\n };\n}\n\nexport function resetCheckedItems() {\n return state => ({\n ...state,\n checkedItems: [],\n });\n}\nexport function resetMovedItems() {\n return state => ({\n ...state,\n movedItems: [],\n targetItems: [],\n });\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAMA;AAEO,6BAA6B,QAAQ;AAC1C,SAAO,WAAU,iCACZ,QADY;AAAA,IAEf,cAAc,YAAY,MAAM,cAAc;AAAA;AAAA;AAG3C,oBAAoB,MAAM,MAAM;AACrC,QAAM,gBAAgB,qBAAqB;AAC3C,SAAO,WAAS;AACd,UAAM,mBAAmB,MAAM,eAAe,UAC5C,WAAS,MAAM,OAAO,KAAK;AAE7B,UAAM,YAAY,MAAM;AACxB,WAAO,iCACF,QADE;AAAA,OAEJ,gBACC,qBAAqB,KACjB,UAAU,MAAM,GAAG,mBAAmB,KACtC,CAAC,GAAG,WAAW;AAAA;AAAA;AAAA;AAIpB,kBAAkB,MAAM;AAC7B,SAAO,WAAS;AACd,UAAM,aAAa,eAAe,MAAM,YAAY,KAAK,IAAI;AAC7D,WAAO,iCACF,QADE;AAAA,MAEL;AAAA;AAAA;AAAA;AAKN,MAAM,iBAAiB;AAAA,EACrB,aAAa;AAAA,EACb,SAAS;AAAA,EACT,IAAI,cAAY,CAAC;AAAA;AAInB,qBAAqB,EAAE,YAAY,IAAI,WAAW;AAChD,QAAM,EAAE,YAAY,kCAAK,iBAAmB;AAC5C,QAAM,YAAY,WAAW,UAAU,WAAS,MAAM,aAAa;AAGnE,QAAM,OAAO,WAAW;AACxB,QAAM,WAAW,MAAM,cACnB,QAAQ,MAAM,YAAY,EAAE,OAAO,cAAc,eAAe,KAChE;AAEJ,SAAO,EAAE,MAAM;AAAA;AAGV,qBAAqB,WAAW,YAAY;AACjD,SAAO,CAAC,OAAO,EAAE,cAAc;AAC7B,UAAM,QAAQ,cAAc,MAAM;AAElC,UAAM,EAAE,MAAM,aAAa,YAAY;AAAA,MACrC,YAAY;AAAA,MACZ,IAAI,UAAU;AAAA;AAGhB,WAAO,iCACF,QADE;AAAA,MAEL,YAAY,CAAC,GAAG,MAAM,YAAY;AAAA,MAClC,aAAa,CAAC,GAAG,MAAM,aAAa,MAAM,GAAG;AAAA;AAAA;AAAA;AAM5C,0BAA0B,cAAc;AAC7C,SAAO,CAAC,OAAO,EAAE,cAAc;AAC7B,QAAI,cAAc,UAAU,MAAM;AAElC,UAAM,YAAY,YAAY,UAC5B,WAAS,MAAM,OAAO,aAAa;AAGrC,UAAM,OAAO,YAAY;AACzB,UAAM,WAAW,MAAM,cACnB,QACE,iBAAiB,MAAM,aACvB,MAAM,YAAY,EAAE,OAAO,cAC3B,gBAAgB,KAClB;AAEJ,gBAAY,OAAO,WAAW;AAC9B,QAAI,MAAM,eAAe,SAAS,QAAQ;AACxC,YAAM,eAAe,UAAU,UAAU;AACzC,oBAAc,YAAY,OAAO,OAAK,CAAC,aAAa,EAAE;AAAA;AAGxD,WAAO,iCACF,QADE;AAAA,MAEL,YAAY,MAAM,WAAW,OAC3B,WAAS,MAAM,aAAa,aAAa;AAAA,MAE3C;AAAA;AAAA;AAAA;AAKC,6BAA6B;AAClC,SAAO,WAAU,iCACZ,QADY;AAAA,IAEf,cAAc;AAAA;AAAA;AAGX,2BAA2B;AAChC,SAAO,WAAU,iCACZ,QADY;AAAA,IAEf,YAAY;AAAA,IACZ,aAAa;AAAA;AAAA;",
6
+ "names": []
7
+ }
@@ -0,0 +1,92 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ var __objRest = (source, exclude) => {
18
+ var target = {};
19
+ for (var prop in source)
20
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
21
+ target[prop] = source[prop];
22
+ if (source != null && __getOwnPropSymbols)
23
+ for (var prop of __getOwnPropSymbols(source)) {
24
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
25
+ target[prop] = source[prop];
26
+ }
27
+ return target;
28
+ };
29
+ import * as React from "react";
30
+ import { useContext, useMemo } from "react";
31
+ import {
32
+ isFunction,
33
+ compose,
34
+ uniqBy,
35
+ values,
36
+ sortBy
37
+ } from "@elliemae/ds-utilities";
38
+ import { withProviders } from "./withProviders";
39
+ import {
40
+ prepareItems,
41
+ getActiveIdFromHierarchy,
42
+ filterItemsByHierarchy,
43
+ getItemsById
44
+ } from "./helper";
45
+ import { SearchState } from "./SearchState";
46
+ import { ShuttleState } from "./ShuttleState";
47
+ function filterItemsByTerm(items, term) {
48
+ return items.filter((item) => item.name.toLowerCase().indexOf(String(term).toLowerCase()) !== -1 || String(item.id).indexOf(String(term).toLowerCase()) !== -1);
49
+ }
50
+ function ShuttleContainer({ items = [], children }) {
51
+ const _a = useContext(ShuttleState.Context), { state: shuttleState } = _a, handlers = __objRest(_a, ["state"]);
52
+ const { state: searchState } = useContext(SearchState.Context);
53
+ const {
54
+ movedItems,
55
+ hierarchy,
56
+ hierarchyDest,
57
+ checkedItems,
58
+ searchTerm,
59
+ searching,
60
+ toggleItemSelection,
61
+ resetCheckedItems,
62
+ resetMovedItems,
63
+ moveCheckedItems,
64
+ moveItem,
65
+ navigate
66
+ } = __spreadValues(__spreadValues(__spreadValues({}, shuttleState), searchState), handlers);
67
+ const sourceItems = useMemo(() => compose((items2) => items2.filter((item) => !movedItems[item.id]), (items2) => searchTerm && searching ? filterItemsByTerm(items2, searchTerm) : items2, (items2) => filterItemsByHierarchy(items2, getActiveIdFromHierarchy(hierarchy).id), (items2) => prepareItems(items2))(items), [items, searchTerm, searching, hierarchy, movedItems]);
68
+ const targetItems = useMemo(() => {
69
+ const hierarchyId = getActiveIdFromHierarchy(hierarchyDest).id;
70
+ return compose((items2) => sortBy(items2, ["name"]), (items2) => hierarchyId ? filterItemsByHierarchy(items2, hierarchyId).filter((item) => !movedItems[item.id]) : uniqBy(values(movedItems), "id"))(items);
71
+ }, [items, searching, hierarchyDest, movedItems]);
72
+ return isFunction(children) && children({
73
+ checkedItems,
74
+ hierarchy,
75
+ hierarchyDest,
76
+ onCheckItem: toggleItemSelection,
77
+ onClearCheckedItems: resetCheckedItems,
78
+ onClearMovedItems: resetMovedItems,
79
+ onMoveCheckedItems: () => moveCheckedItems(getItemsById(checkedItems, items)),
80
+ onMoveItemToSource: (item) => moveItem(item, false),
81
+ onMoveItemToTarget: (item) => moveItem(item, true),
82
+ onNavigateOnSourceTo: (item) => navigate(item, false),
83
+ onNavigateOnTargetTo: (item) => navigate(item, true),
84
+ sourceItems,
85
+ targetItems
86
+ });
87
+ }
88
+ var ShuttleContainer_default = withProviders(ShuttleContainer);
89
+ export {
90
+ ShuttleContainer_default as default
91
+ };
92
+ //# sourceMappingURL=ShuttleContainer.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/ShuttleContainer.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable no-shadow */\nimport { useContext, useMemo } from 'react';\nimport {\n isFunction,\n compose,\n uniqBy,\n values,\n sortBy,\n} from '@elliemae/ds-utilities';\nimport { withProviders } from './withProviders';\nimport {\n prepareItems,\n getActiveIdFromHierarchy,\n filterItemsByHierarchy,\n getItemsById,\n} from './helper';\nimport { SearchState } from './SearchState';\nimport { ShuttleState } from './ShuttleState';\n\nfunction filterItemsByTerm(items, term) {\n return items.filter(\n item =>\n item.name.toLowerCase().indexOf(String(term).toLowerCase()) !== -1 ||\n String(item.id).indexOf(String(term).toLowerCase()) !== -1,\n );\n}\n\nfunction ShuttleContainer({ items = [], children }) {\n const { state: shuttleState, ...handlers } = useContext(\n ShuttleState.Context,\n );\n const { state: searchState } = useContext(SearchState.Context);\n const {\n movedItems,\n hierarchy,\n hierarchyDest,\n checkedItems,\n searchTerm,\n searching,\n toggleItemSelection,\n resetCheckedItems,\n resetMovedItems,\n moveCheckedItems,\n moveItem,\n navigate,\n } = { ...shuttleState, ...searchState, ...handlers };\n\n const sourceItems = useMemo(\n () =>\n compose(\n items => items.filter(item => !movedItems[item.id]),\n items =>\n searchTerm && searching\n ? filterItemsByTerm(items, searchTerm)\n : items,\n items =>\n filterItemsByHierarchy(items, getActiveIdFromHierarchy(hierarchy).id),\n items => prepareItems(items),\n )(items),\n [items, searchTerm, searching, hierarchy, movedItems],\n );\n\n const targetItems = useMemo(() => {\n const hierarchyId = getActiveIdFromHierarchy(hierarchyDest).id;\n return compose(\n items => sortBy(items, ['name']),\n items =>\n hierarchyId\n ? filterItemsByHierarchy(items, hierarchyId).filter(\n item => !movedItems[item.id],\n )\n : uniqBy(values(movedItems), 'id'),\n )(items);\n }, [items, searching, hierarchyDest, movedItems]);\n\n return (\n isFunction(children) &&\n children({\n checkedItems,\n hierarchy,\n hierarchyDest,\n onCheckItem: toggleItemSelection,\n onClearCheckedItems: resetCheckedItems,\n onClearMovedItems: resetMovedItems,\n onMoveCheckedItems: () =>\n moveCheckedItems(getItemsById(checkedItems, items)),\n onMoveItemToSource: item => moveItem(item, false),\n onMoveItemToTarget: item => moveItem(item, true),\n onNavigateOnSourceTo: item => navigate(item, false),\n onNavigateOnTargetTo: item => navigate(item, true),\n sourceItems,\n targetItems,\n })\n );\n}\n\nexport default withProviders(ShuttleContainer);\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;ACCA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AAEA,2BAA2B,OAAO,MAAM;AACtC,SAAO,MAAM,OACX,UACE,KAAK,KAAK,cAAc,QAAQ,OAAO,MAAM,mBAAmB,MAChE,OAAO,KAAK,IAAI,QAAQ,OAAO,MAAM,mBAAmB;AAAA;AAI9D,0BAA0B,EAAE,QAAQ,IAAI,YAAY;AAClD,QAA6C,gBAC3C,aAAa,UADP,SAAO,iBAA8B,IAAb,qBAAa,IAAb,CAAxB;AAGR,QAAM,EAAE,OAAO,gBAAgB,WAAW,YAAY;AACtD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE,iDAAK,eAAiB,cAAgB;AAE1C,QAAM,cAAc,QAClB,MACE,QACE,YAAS,OAAM,OAAO,UAAQ,CAAC,WAAW,KAAK,MAC/C,YACE,cAAc,YACV,kBAAkB,QAAO,cACzB,QACN,YACE,uBAAuB,QAAO,yBAAyB,WAAW,KACpE,YAAS,aAAa,SACtB,QACJ,CAAC,OAAO,YAAY,WAAW,WAAW;AAG5C,QAAM,cAAc,QAAQ,MAAM;AAChC,UAAM,cAAc,yBAAyB,eAAe;AAC5D,WAAO,QACL,YAAS,OAAO,QAAO,CAAC,UACxB,YACE,cACI,uBAAuB,QAAO,aAAa,OACzC,UAAQ,CAAC,WAAW,KAAK,OAE3B,OAAO,OAAO,aAAa,OACjC;AAAA,KACD,CAAC,OAAO,WAAW,eAAe;AAErC,SACE,WAAW,aACX,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,qBAAqB;AAAA,IACrB,mBAAmB;AAAA,IACnB,oBAAoB,MAClB,iBAAiB,aAAa,cAAc;AAAA,IAC9C,oBAAoB,UAAQ,SAAS,MAAM;AAAA,IAC3C,oBAAoB,UAAQ,SAAS,MAAM;AAAA,IAC3C,sBAAsB,UAAQ,SAAS,MAAM;AAAA,IAC7C,sBAAsB,UAAQ,SAAS,MAAM;AAAA,IAC7C;AAAA,IACA;AAAA;AAAA;AAKN,IAAO,2BAAQ,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1,229 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ var __objRest = (source, exclude) => {
21
+ var target = {};
22
+ for (var prop in source)
23
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
24
+ target[prop] = source[prop];
25
+ if (source != null && __getOwnPropSymbols)
26
+ for (var prop of __getOwnPropSymbols(source)) {
27
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
28
+ target[prop] = source[prop];
29
+ }
30
+ return target;
31
+ };
32
+ import * as React from "react";
33
+ import React2, { Component } from "react";
34
+ import { compose, arrayMove } from "@elliemae/ds-utilities";
35
+ import { withProviders } from "./withProviders";
36
+ import {
37
+ addToTarget,
38
+ navigateTo,
39
+ resetCheckedItems,
40
+ resetMovedItems,
41
+ toggleItemSelection,
42
+ removeFromTarget
43
+ } from "./Shuttle.actions";
44
+ import {
45
+ getActiveIdFromHierarchy,
46
+ filterBySearch,
47
+ getItemsById,
48
+ pipe,
49
+ getChildrenFromParent,
50
+ filterMovedItems
51
+ } from "./helper";
52
+ import { ShuttleRenderer } from "./ShuttleRenderer";
53
+ import { SearchState } from "./SearchState";
54
+ import { updateShuttleStateFromProps } from "./updateShuttleStateFromProps";
55
+ class ShuttleImpl extends Component {
56
+ constructor(props) {
57
+ super(props);
58
+ this.getState = () => {
59
+ const { movedItems } = this.state;
60
+ return Object.keys(movedItems);
61
+ };
62
+ this.state = {
63
+ prevProps: {},
64
+ preparedItems: [],
65
+ checkedItems: [],
66
+ hierarchy: [{ name: props.sourceRootTitle, id: null }],
67
+ hierarchyDest: [{ name: props.targetRootTitle, id: null }],
68
+ movedItems: [],
69
+ sourceItems: [],
70
+ targetItems: []
71
+ };
72
+ this.moveCheckedItems = this.moveCheckedItems.bind(this);
73
+ this.resetMovedItems = this.resetMovedItems.bind(this);
74
+ }
75
+ static getDerivedStateFromProps(nextProps, prevState) {
76
+ return updateShuttleStateFromProps(nextProps, prevState);
77
+ }
78
+ componentDidMount() {
79
+ const { setGetStatus } = this.props;
80
+ setGetStatus(this.getState);
81
+ }
82
+ handleChange() {
83
+ const { onChange } = this.props;
84
+ const { movedItems } = this.state;
85
+ onChange(Object.keys(movedItems));
86
+ }
87
+ navigate(item, dest, direction) {
88
+ const { onDrillDown, onDrillDownTarget } = this.props;
89
+ if (!dest)
90
+ onDrillDown(item, direction);
91
+ if (dest)
92
+ onDrillDownTarget(item, direction);
93
+ const { reset: resetSearchState } = this.context;
94
+ resetSearchState();
95
+ this.setState(pipe([navigateTo(item, dest), resetCheckedItems()]));
96
+ }
97
+ resetCheckedItems() {
98
+ this.setState(resetCheckedItems());
99
+ }
100
+ resetMovedItems() {
101
+ const { selectedItems, onRemoveAllFromTarget } = this.props;
102
+ if (!selectedItems) {
103
+ this.setState(pipe([navigateTo({ id: null }, true), resetMovedItems()]), () => {
104
+ this.handleChange();
105
+ });
106
+ } else {
107
+ this.setState(pipe([navigateTo({ id: null }, true)]));
108
+ }
109
+ onRemoveAllFromTarget();
110
+ }
111
+ addToTarget(item) {
112
+ const { selectedItems, onAddToTarget } = this.props;
113
+ if (!selectedItems) {
114
+ this.setState(pipe([addToTarget(item), resetCheckedItems()]), () => {
115
+ this.handleChange();
116
+ });
117
+ }
118
+ onAddToTarget(item);
119
+ }
120
+ removeFromTarget(item) {
121
+ const { selectedItems, onRemoveFromTarget } = this.props;
122
+ if (!selectedItems) {
123
+ this.setState(pipe([removeFromTarget(item)]), () => {
124
+ this.handleChange();
125
+ });
126
+ }
127
+ onRemoveFromTarget(item);
128
+ }
129
+ toggleItemSelection(item) {
130
+ this.setState(toggleItemSelection(item.id));
131
+ }
132
+ moveCheckedItems() {
133
+ const { onAddCheckedItems, selectedItems, nonSelectedItems } = this.props;
134
+ const { checkedItems, preparedItems } = this.state;
135
+ const isControlledV2 = !!selectedItems && !!nonSelectedItems;
136
+ const checked = isControlledV2 ? nonSelectedItems.filter((item) => checkedItems.some((check) => check === item)) : checkedItems;
137
+ const items = getItemsById(checked, preparedItems);
138
+ const actions = !selectedItems ? items.map((item) => addToTarget(item)) : [];
139
+ this.setState(pipe([...actions, resetCheckedItems()]), () => {
140
+ this.handleChange();
141
+ });
142
+ onAddCheckedItems(items);
143
+ }
144
+ handleTargetSortEnd({ sourceItem, targetItem }) {
145
+ const { idField, onTargetSortEnd } = this.props;
146
+ const { targetItems, hierarchyDest, movedItems } = this.state;
147
+ const hierarchyId = getActiveIdFromHierarchy(hierarchyDest).id;
148
+ const collection = !hierarchyId ? movedItems : targetItems;
149
+ const oldIndex = collection.findIndex((tItem) => tItem[idField] === sourceItem[idField]);
150
+ const newIndex = collection.findIndex((tItem) => tItem[idField] === targetItem[idField]);
151
+ const sortedMovedItems = !hierarchyId ? arrayMove(movedItems, oldIndex, newIndex) : movedItems;
152
+ const sortedItems = hierarchyId ? arrayMove(targetItems, oldIndex, newIndex) : targetItems;
153
+ this.setState({
154
+ targetItems: sortedItems,
155
+ movedItems: sortedMovedItems
156
+ });
157
+ onTargetSortEnd({ sourceItem, targetItem });
158
+ }
159
+ render() {
160
+ const _a = this.props, { idField, nonSelectedItems, moreItemsLoading } = _a, rest = __objRest(_a, ["idField", "nonSelectedItems", "moreItemsLoading"]);
161
+ const {
162
+ hierarchy,
163
+ hierarchyDest,
164
+ checkedItems,
165
+ movedItems,
166
+ preparedItems: items,
167
+ targetItems
168
+ } = this.state;
169
+ const {
170
+ state: { searchTerm, searching }
171
+ } = this.context;
172
+ const handleControlledSourceItms = () => {
173
+ const { id } = getActiveIdFromHierarchy(hierarchy);
174
+ if (id) {
175
+ return filterBySearch(searchTerm, searching)(getChildrenFromParent(id)(nonSelectedItems.map((it) => items.find((itt) => itt.id === it))));
176
+ }
177
+ return filterBySearch(searchTerm, searching)(items.filter((it) => nonSelectedItems.some((itt) => itt === it.id && !nonSelectedItems.some((ittt) => ittt === it.parent))));
178
+ };
179
+ let composedSourceItems;
180
+ if (nonSelectedItems) {
181
+ composedSourceItems = handleControlledSourceItms();
182
+ } else {
183
+ composedSourceItems = compose(filterBySearch(searchTerm, searching), filterMovedItems(movedItems), getChildrenFromParent(getActiveIdFromHierarchy(hierarchy).id))(items);
184
+ }
185
+ const handleControlledTargetItms = () => {
186
+ const { id } = getActiveIdFromHierarchy(hierarchyDest);
187
+ if (id) {
188
+ return getChildrenFromParent(getActiveIdFromHierarchy(hierarchyDest).id)(this.props.selectedItems.map((it) => items.find((itt) => itt.id === it)));
189
+ }
190
+ return targetItems.filter((it) => this.props.selectedItems.some((itt) => itt === it.id && !this.props.selectedItems.some((ittt) => ittt === it.parent)));
191
+ };
192
+ let composedTargetItems;
193
+ if (nonSelectedItems) {
194
+ composedTargetItems = handleControlledTargetItms();
195
+ } else {
196
+ composedTargetItems = compose((tItems) => {
197
+ const hierarchyId = getActiveIdFromHierarchy(hierarchyDest).id;
198
+ return hierarchyId ? compose(filterMovedItems(movedItems), getChildrenFromParent(hierarchyId))(tItems) : movedItems;
199
+ })(targetItems);
200
+ }
201
+ return /* @__PURE__ */ React2.createElement(ShuttleRenderer, __spreadProps(__spreadValues({}, rest), {
202
+ moreItemsLoading,
203
+ checkedItems,
204
+ hierarchy,
205
+ hierarchyDest,
206
+ onCheckItem: this.toggleItemSelection,
207
+ onClearCheckedItems: this.resetCheckedItems,
208
+ onClearMovedItems: this.resetMovedItems,
209
+ onItemCheck: this.toggleItemSelection,
210
+ onMoveCheckedItems: this.moveCheckedItems,
211
+ onMoveItemToSource: (item) => this.removeFromTarget(item, false),
212
+ onMoveItemToTarget: (item) => this.addToTarget(item, true),
213
+ onNavigateOnSourceTo: (item, direction) => this.navigate(item, false, direction),
214
+ onNavigateOnTargetTo: (item, direction) => this.navigate(item, true, direction),
215
+ onSourceSortEnd: () => null,
216
+ onTargetSortEnd: this.handleTargetSortEnd,
217
+ sourceItems: composedSourceItems,
218
+ targetItems: composedTargetItems
219
+ }));
220
+ }
221
+ }
222
+ ShuttleImpl.contextType = SearchState.Context;
223
+ const ShuttleImplHoc = withProviders(ShuttleImpl);
224
+ var ShuttleImpl_default = ShuttleImplHoc;
225
+ export {
226
+ ShuttleImplHoc as ShuttleImpl,
227
+ ShuttleImpl_default as default
228
+ };
229
+ //# sourceMappingURL=ShuttleImpl.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/ShuttleImpl.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable react/static-property-placement */\n/* eslint-disable react/prop-types */\n/* eslint-disable indent */\n/* eslint-disable import/extensions,react/no-unused-state,no-shadow,max-lines */\nimport React, { Component } from 'react';\nimport { compose, arrayMove } from '@elliemae/ds-utilities';\nimport { withProviders } from './withProviders';\nimport {\n addToTarget,\n navigateTo,\n resetCheckedItems,\n resetMovedItems,\n toggleItemSelection,\n removeFromTarget,\n} from './Shuttle.actions';\nimport {\n getActiveIdFromHierarchy,\n filterBySearch,\n getItemsById,\n pipe,\n getChildrenFromParent,\n filterMovedItems,\n} from './helper';\nimport { ShuttleRenderer } from './ShuttleRenderer';\nimport { SearchState } from './SearchState';\nimport { updateShuttleStateFromProps } from './updateShuttleStateFromProps';\n\nclass ShuttleImpl extends Component {\n static contextType = SearchState.Context;\n\n constructor(props) {\n super(props);\n this.state = {\n prevProps: {},\n preparedItems: [],\n checkedItems: [],\n // left breadcrumb\n hierarchy: [{ name: props.sourceRootTitle, id: null }],\n // right breadcrumb\n hierarchyDest: [{ name: props.targetRootTitle, id: null }],\n\n movedItems: [],\n sourceItems: [],\n targetItems: [],\n };\n this.moveCheckedItems = this.moveCheckedItems.bind(this);\n this.resetMovedItems = this.resetMovedItems.bind(this);\n }\n\n static getDerivedStateFromProps(nextProps, prevState) {\n return updateShuttleStateFromProps(nextProps, prevState);\n }\n\n componentDidMount() {\n const { setGetStatus } = this.props;\n setGetStatus(this.getState);\n }\n\n getState = () => {\n const { movedItems } = this.state;\n return Object.keys(movedItems);\n };\n\n handleChange() {\n const { onChange } = this.props;\n const { movedItems } = this.state;\n onChange(Object.keys(movedItems));\n }\n\n navigate(item, dest, direction) {\n const { onDrillDown, onDrillDownTarget } = this.props;\n\n if (!dest) onDrillDown(item, direction);\n if (dest) onDrillDownTarget(item, direction);\n\n const { reset: resetSearchState } = this.context;\n resetSearchState();\n\n this.setState(pipe([navigateTo(item, dest), resetCheckedItems()]));\n }\n\n resetCheckedItems() {\n this.setState(resetCheckedItems());\n }\n\n resetMovedItems() {\n const { selectedItems, onRemoveAllFromTarget } = this.props;\n if (!selectedItems) {\n this.setState(\n pipe([navigateTo({ id: null }, true), resetMovedItems()]),\n () => {\n this.handleChange();\n },\n );\n } else {\n this.setState(pipe([navigateTo({ id: null }, true)]));\n }\n onRemoveAllFromTarget();\n }\n\n addToTarget(item) {\n const { selectedItems, onAddToTarget } = this.props;\n if (!selectedItems) {\n this.setState(pipe([addToTarget(item), resetCheckedItems()]), () => {\n this.handleChange();\n });\n }\n onAddToTarget(item);\n }\n\n removeFromTarget(item) {\n const { selectedItems, onRemoveFromTarget } = this.props;\n if (!selectedItems) {\n this.setState(pipe([removeFromTarget(item)]), () => {\n this.handleChange();\n });\n }\n onRemoveFromTarget(item);\n }\n\n toggleItemSelection(item) {\n this.setState(toggleItemSelection(item.id));\n }\n\n moveCheckedItems() {\n const { onAddCheckedItems, selectedItems, nonSelectedItems } = this.props;\n const { checkedItems, preparedItems } = this.state;\n const isControlledV2 = !!selectedItems && !!nonSelectedItems;\n const checked = isControlledV2\n ? nonSelectedItems.filter((item) =>\n checkedItems.some((check) => check === item),\n )\n : checkedItems;\n const items = getItemsById(checked, preparedItems);\n const actions = !selectedItems\n ? items.map((item) => addToTarget(item))\n : [];\n this.setState(pipe([...actions, resetCheckedItems()]), () => {\n this.handleChange();\n });\n onAddCheckedItems(items);\n }\n\n handleTargetSortEnd({ sourceItem, targetItem }) {\n const { idField, onTargetSortEnd } = this.props;\n const { targetItems, hierarchyDest, movedItems } = this.state;\n\n const hierarchyId = getActiveIdFromHierarchy(hierarchyDest).id;\n\n const collection = !hierarchyId ? movedItems : targetItems;\n\n const oldIndex = collection.findIndex(\n (tItem) => tItem[idField] === sourceItem[idField],\n );\n const newIndex = collection.findIndex(\n (tItem) => tItem[idField] === targetItem[idField],\n );\n\n const sortedMovedItems = !hierarchyId\n ? arrayMove(movedItems, oldIndex, newIndex)\n : movedItems;\n const sortedItems = hierarchyId\n ? arrayMove(targetItems, oldIndex, newIndex)\n : targetItems;\n\n this.setState({\n targetItems: sortedItems,\n movedItems: sortedMovedItems,\n });\n onTargetSortEnd({ sourceItem, targetItem });\n }\n\n render() {\n const { idField, nonSelectedItems, moreItemsLoading, ...rest } = this.props;\n const {\n hierarchy,\n hierarchyDest,\n checkedItems,\n movedItems,\n preparedItems: items,\n targetItems,\n } = this.state;\n const {\n state: { searchTerm, searching },\n } = this.context;\n\n const handleControlledSourceItms = () => {\n const { id } = getActiveIdFromHierarchy(hierarchy);\n if (id) {\n return filterBySearch(\n searchTerm,\n searching,\n )(\n getChildrenFromParent(id)(\n nonSelectedItems.map((it) => items.find((itt) => itt.id === it)),\n ),\n );\n }\n\n return filterBySearch(\n searchTerm,\n searching,\n )(\n items.filter((it) =>\n nonSelectedItems.some(\n (itt) =>\n itt === it.id &&\n !nonSelectedItems.some((ittt) => ittt === it.parent),\n ),\n ),\n );\n };\n\n let composedSourceItems;\n\n // controlled V2 TODO make it default controlled behavior\n if (nonSelectedItems) {\n composedSourceItems = handleControlledSourceItms();\n } else {\n composedSourceItems = compose(\n filterBySearch(searchTerm, searching),\n filterMovedItems(movedItems),\n getChildrenFromParent(getActiveIdFromHierarchy(hierarchy).id),\n )(items);\n }\n\n const handleControlledTargetItms = () => {\n const { id } = getActiveIdFromHierarchy(hierarchyDest);\n if (id) {\n return getChildrenFromParent(\n getActiveIdFromHierarchy(hierarchyDest).id,\n )(\n this.props.selectedItems.map((it) =>\n items.find((itt) => itt.id === it),\n ),\n );\n }\n\n return targetItems.filter((it) =>\n this.props.selectedItems.some(\n (itt) =>\n itt === it.id &&\n !this.props.selectedItems.some((ittt) => ittt === it.parent),\n ),\n );\n };\n\n let composedTargetItems;\n\n // controlled V2 TODO make it default controlled behavior\n if (nonSelectedItems) {\n composedTargetItems = handleControlledTargetItms();\n } else {\n composedTargetItems = compose((tItems) => {\n const hierarchyId = getActiveIdFromHierarchy(hierarchyDest).id;\n return hierarchyId\n ? compose(\n filterMovedItems(movedItems),\n getChildrenFromParent(hierarchyId),\n )(tItems)\n : movedItems;\n })(targetItems);\n }\n\n return (\n <ShuttleRenderer\n {...rest}\n moreItemsLoading={moreItemsLoading}\n checkedItems={checkedItems}\n hierarchy={hierarchy}\n hierarchyDest={hierarchyDest}\n onCheckItem={this.toggleItemSelection}\n onClearCheckedItems={this.resetCheckedItems}\n onClearMovedItems={this.resetMovedItems}\n onItemCheck={this.toggleItemSelection}\n onMoveCheckedItems={this.moveCheckedItems}\n onMoveItemToSource={(item) => this.removeFromTarget(item, false)}\n onMoveItemToTarget={(item) => this.addToTarget(item, true)}\n onNavigateOnSourceTo={(item, direction) =>\n this.navigate(item, false, direction)\n }\n onNavigateOnTargetTo={(item, direction) =>\n this.navigate(item, true, direction)\n }\n onSourceSortEnd={() => null}\n onTargetSortEnd={this.handleTargetSortEnd}\n sourceItems={composedSourceItems}\n targetItems={composedTargetItems}\n />\n );\n }\n}\n\nconst ShuttleImplHoc = withProviders(ShuttleImpl);\nexport { ShuttleImplHoc as ShuttleImpl };\nexport default ShuttleImplHoc;\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }