synapse-react-client 4.0.29 → 4.0.31

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 (231) hide show
  1. package/dist/SWC.index.d.ts +4 -0
  2. package/dist/SWC.index.d.ts.map +1 -1
  3. package/dist/SWC.index.js +2 -1
  4. package/dist/SWC.index.js.map +1 -1
  5. package/dist/assets/illustrations/curie_avatar.svg +52 -0
  6. package/dist/assets/illustrations/curie_avatar_head.js +91 -0
  7. package/dist/assets/illustrations/curie_avatar_head.js.map +1 -0
  8. package/dist/assets/illustrations/curie_avatar_head.svg +21 -0
  9. package/dist/assets/illustrations/discussions_illustration2.js +96 -0
  10. package/dist/assets/illustrations/discussions_illustration2.js.map +1 -0
  11. package/dist/assets/illustrations/discussions_illustration2.svg +17 -0
  12. package/dist/assets/illustrations/index.d.ts +3 -0
  13. package/dist/assets/illustrations/index.d.ts.map +1 -1
  14. package/dist/assets/illustrations/index.js +34 -32
  15. package/dist/assets/illustrations/index.js.map +1 -1
  16. package/dist/assets/mui_components/CurieAvatarHead.d.ts +5 -0
  17. package/dist/assets/mui_components/CurieAvatarHead.d.ts.map +1 -0
  18. package/dist/assets/mui_components/CurieAvatarHead.js +17 -0
  19. package/dist/assets/mui_components/CurieAvatarHead.js.map +1 -0
  20. package/dist/assets/themed_icons/Model.d.ts +3 -0
  21. package/dist/assets/themed_icons/Model.d.ts.map +1 -0
  22. package/dist/assets/themed_icons/Model.js +31 -0
  23. package/dist/assets/themed_icons/Model.js.map +1 -0
  24. package/dist/assets/themed_icons/index.d.ts +2 -1
  25. package/dist/assets/themed_icons/index.d.ts.map +1 -1
  26. package/dist/assets/themed_icons/index.js +19 -18
  27. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.d.ts.map +1 -1
  28. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js +49 -39
  29. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js.map +1 -1
  30. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  31. package/dist/components/DataGrid/SynapseGrid.js +46 -45
  32. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  33. package/dist/components/DataGrid/utils/DataGridUtils.js +1 -1
  34. package/dist/components/DataGrid/utils/DataGridUtils.js.map +1 -1
  35. package/dist/components/EntityFinder/EntityFinder.js +127 -127
  36. package/dist/components/EntityFinder/EntityFinder.js.map +1 -1
  37. package/dist/components/EntityFinder/details/view/DetailsView.js +53 -53
  38. package/dist/components/EntitySidebar/EntitySidebar.css +1 -1
  39. package/dist/components/EntitySidebar/EntitySidebar.module.js +11 -11
  40. package/dist/components/EntitySidebar/EntitySidebar.module.js.map +1 -1
  41. package/dist/components/EntitySidebar/EntitySidebar.module.scss +2 -2
  42. package/dist/components/EntityTreeTable/EntityTreeTable.d.ts +7 -0
  43. package/dist/components/EntityTreeTable/EntityTreeTable.d.ts.map +1 -1
  44. package/dist/components/EntityTreeTable/EntityTreeTable.js +24 -20
  45. package/dist/components/EntityTreeTable/EntityTreeTable.js.map +1 -1
  46. package/dist/components/EntityTreeTable/components/CheckboxCell.d.ts +4 -0
  47. package/dist/components/EntityTreeTable/components/CheckboxCell.d.ts.map +1 -0
  48. package/dist/components/EntityTreeTable/components/CheckboxCell.js +43 -0
  49. package/dist/components/EntityTreeTable/components/CheckboxCell.js.map +1 -0
  50. package/dist/components/EntityTreeTable/components/EntityNameCell.d.ts.map +1 -1
  51. package/dist/components/EntityTreeTable/components/EntityNameCell.js +10 -9
  52. package/dist/components/EntityTreeTable/components/EntityNameCell.js.map +1 -1
  53. package/dist/components/EntityTreeTable/components/EntityTreeTableContext.d.ts +6 -0
  54. package/dist/components/EntityTreeTable/components/EntityTreeTableContext.d.ts.map +1 -1
  55. package/dist/components/EntityTreeTable/components/EntityTreeTableContext.js.map +1 -1
  56. package/dist/components/EntityTreeTable/hooks/useTableColumns.d.ts +1 -1
  57. package/dist/components/EntityTreeTable/hooks/useTableColumns.d.ts.map +1 -1
  58. package/dist/components/EntityTreeTable/hooks/useTableColumns.js +49 -39
  59. package/dist/components/EntityTreeTable/hooks/useTableColumns.js.map +1 -1
  60. package/dist/components/EntityUpload/EntityUpload.js +6 -6
  61. package/dist/components/Forum/DiscussionEmpty.css +1 -0
  62. package/dist/components/Forum/DiscussionEmpty.d.ts +6 -0
  63. package/dist/components/Forum/DiscussionEmpty.d.ts.map +1 -0
  64. package/dist/components/Forum/DiscussionEmpty.js +30 -0
  65. package/dist/components/Forum/DiscussionEmpty.js.map +1 -0
  66. package/dist/components/Forum/DiscussionEmpty.module.js +10 -0
  67. package/dist/components/Forum/DiscussionEmpty.module.js.map +1 -0
  68. package/dist/components/Forum/DiscussionEmpty.module.scss +37 -0
  69. package/dist/components/Icon/Icon.d.ts.map +1 -1
  70. package/dist/components/Icon/Icon.js +82 -80
  71. package/dist/components/Icon/Icon.js.map +1 -1
  72. package/dist/components/ProvenanceGraph/ProvenanceGraph.d.ts.map +1 -1
  73. package/dist/components/ProvenanceGraph/ProvenanceGraph.js +39 -41
  74. package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
  75. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts.map +1 -1
  76. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js +27 -20
  77. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
  78. package/dist/components/SynapseChat/AccessLevelMenu.d.ts.map +1 -1
  79. package/dist/components/SynapseChat/AccessLevelMenu.js +1 -0
  80. package/dist/components/SynapseChat/AccessLevelMenu.js.map +1 -1
  81. package/dist/components/SynapseChat/GridAgentChat.d.ts.map +1 -1
  82. package/dist/components/SynapseChat/GridAgentChat.js +34 -25
  83. package/dist/components/SynapseChat/GridAgentChat.js.map +1 -1
  84. package/dist/components/SynapseChat/SynapseChat.d.ts +10 -12
  85. package/dist/components/SynapseChat/SynapseChat.d.ts.map +1 -1
  86. package/dist/components/SynapseChat/SynapseChat.js +106 -103
  87. package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
  88. package/dist/components/SynapseChat/SynapseChatInteraction.css +1 -0
  89. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts +22 -1
  90. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts.map +1 -1
  91. package/dist/components/SynapseChat/SynapseChatInteraction.js +123 -94
  92. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  93. package/dist/components/SynapseChat/SynapseChatInteraction.module.js +8 -0
  94. package/dist/components/SynapseChat/SynapseChatInteraction.module.js.map +1 -0
  95. package/dist/components/SynapseChat/SynapseChatInteraction.module.scss +25 -0
  96. package/dist/components/SynapseChat/SynapseChatMessage.d.ts +16 -1
  97. package/dist/components/SynapseChat/SynapseChatMessage.d.ts.map +1 -1
  98. package/dist/components/SynapseChat/SynapseChatMessage.js +25 -11
  99. package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
  100. package/dist/components/SynapseChat/components/AddFilesDialog/AddFilesDialog.d.ts +27 -0
  101. package/dist/components/SynapseChat/components/AddFilesDialog/AddFilesDialog.d.ts.map +1 -0
  102. package/dist/components/SynapseChat/components/AddFilesDialog/AddFilesDialog.js +79 -0
  103. package/dist/components/SynapseChat/components/AddFilesDialog/AddFilesDialog.js.map +1 -0
  104. package/dist/components/SynapseChat/components/AttachmentChip/AttachmentChip.css +1 -0
  105. package/dist/components/SynapseChat/components/AttachmentChip/AttachmentChip.d.ts +33 -0
  106. package/dist/components/SynapseChat/components/AttachmentChip/AttachmentChip.d.ts.map +1 -0
  107. package/dist/components/SynapseChat/components/AttachmentChip/AttachmentChip.js +77 -0
  108. package/dist/components/SynapseChat/components/AttachmentChip/AttachmentChip.js.map +1 -0
  109. package/dist/components/SynapseChat/components/AttachmentChip/AttachmentChip.module.js +8 -0
  110. package/dist/components/SynapseChat/components/AttachmentChip/AttachmentChip.module.js.map +1 -0
  111. package/dist/components/SynapseChat/components/AttachmentChip/AttachmentChip.module.scss +16 -0
  112. package/dist/components/SynapseChat/components/ChatAttachmentStrip/ChatAttachmentStrip.css +1 -0
  113. package/dist/components/SynapseChat/components/ChatAttachmentStrip/ChatAttachmentStrip.d.ts +23 -0
  114. package/dist/components/SynapseChat/components/ChatAttachmentStrip/ChatAttachmentStrip.d.ts.map +1 -0
  115. package/dist/components/SynapseChat/components/ChatAttachmentStrip/ChatAttachmentStrip.js +24 -0
  116. package/dist/components/SynapseChat/components/ChatAttachmentStrip/ChatAttachmentStrip.js.map +1 -0
  117. package/dist/components/SynapseChat/components/ChatAttachmentStrip/ChatAttachmentStrip.module.js +9 -0
  118. package/dist/components/SynapseChat/components/ChatAttachmentStrip/ChatAttachmentStrip.module.js.map +1 -0
  119. package/dist/components/SynapseChat/components/ChatAttachmentStrip/ChatAttachmentStrip.module.scss +19 -0
  120. package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.css +1 -0
  121. package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.d.ts +22 -0
  122. package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.d.ts.map +1 -0
  123. package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.js +80 -0
  124. package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.js.map +1 -0
  125. package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.module.js +9 -0
  126. package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.module.js.map +1 -0
  127. package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.module.scss +39 -0
  128. package/dist/components/SynapseChat/useChatState.d.ts +12 -4
  129. package/dist/components/SynapseChat/useChatState.d.ts.map +1 -1
  130. package/dist/components/SynapseChat/useChatState.js +38 -20
  131. package/dist/components/SynapseChat/useChatState.js.map +1 -1
  132. package/dist/components/SynapseChat/utils/constants.d.ts +8 -0
  133. package/dist/components/SynapseChat/utils/constants.d.ts.map +1 -0
  134. package/dist/components/SynapseChat/utils/constants.js +12 -0
  135. package/dist/components/SynapseChat/utils/constants.js.map +1 -0
  136. package/dist/components/SynapseChat/utils/types.d.ts +13 -0
  137. package/dist/components/SynapseChat/utils/types.d.ts.map +1 -0
  138. package/dist/components/SynapseChat/utils/types.js +0 -0
  139. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +101 -101
  140. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
  141. package/dist/components/entity/page/action_menu/EntityActionMenu.d.ts +1 -0
  142. package/dist/components/entity/page/action_menu/EntityActionMenu.d.ts.map +1 -1
  143. package/dist/components/entity/page/action_menu/EntityActionMenu.js +8 -0
  144. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  145. package/dist/components/entity/page/breadcrumbs/EntityPageBreadcrumbs.js +1 -1
  146. package/dist/components/entity/page/breadcrumbs/EntityPageBreadcrumbs.js.map +1 -1
  147. package/dist/components/file/upload/BasicFileHandleUpload.d.ts +35 -4
  148. package/dist/components/file/upload/BasicFileHandleUpload.d.ts.map +1 -1
  149. package/dist/components/file/upload/BasicFileHandleUpload.js +22 -16
  150. package/dist/components/file/upload/BasicFileHandleUpload.js.map +1 -1
  151. package/dist/components/file/upload/MultiFileUploadProgress.js +6 -6
  152. package/dist/components/file/upload/UploadFilePanel.d.ts +32 -0
  153. package/dist/components/file/upload/UploadFilePanel.d.ts.map +1 -1
  154. package/dist/components/file/upload/UploadFilePanel.js +58 -42
  155. package/dist/components/file/upload/UploadFilePanel.js.map +1 -1
  156. package/dist/components/file/upload/validateFileSelection.d.ts +25 -0
  157. package/dist/components/file/upload/validateFileSelection.d.ts.map +1 -0
  158. package/dist/components/file/upload/validateFileSelection.js +18 -0
  159. package/dist/components/file/upload/validateFileSelection.js.map +1 -0
  160. package/dist/components/menu/DropdownMenu.d.ts +3 -0
  161. package/dist/components/menu/DropdownMenu.d.ts.map +1 -1
  162. package/dist/components/menu/DropdownMenu.js +108 -83
  163. package/dist/components/menu/DropdownMenu.js.map +1 -1
  164. package/dist/features/curator/dashboard/CuratorDashboard.d.ts.map +1 -1
  165. package/dist/features/curator/dashboard/CuratorDashboard.js +22 -23
  166. package/dist/features/curator/dashboard/CuratorDashboard.js.map +1 -1
  167. package/dist/features/curator/dashboard/components/CurationTaskCard.css +1 -1
  168. package/dist/features/curator/dashboard/components/CurationTaskCard.module.js +13 -13
  169. package/dist/features/curator/dashboard/components/CurationTaskCard.module.js.map +1 -1
  170. package/dist/features/curator/dashboard/components/CurationTaskCard.module.scss +2 -1
  171. package/dist/features/curator/dashboard/components/CurationTaskCardLayout.d.ts.map +1 -1
  172. package/dist/features/curator/dashboard/components/CurationTaskCardLayout.js +35 -27
  173. package/dist/features/curator/dashboard/components/CurationTaskCardLayout.js.map +1 -1
  174. package/dist/features/curator/dashboard/components/FilteredByTaskIdsBanner.d.ts +10 -0
  175. package/dist/features/curator/dashboard/components/FilteredByTaskIdsBanner.d.ts.map +1 -0
  176. package/dist/features/curator/dashboard/components/FilteredByTaskIdsBanner.js +19 -0
  177. package/dist/features/curator/dashboard/components/FilteredByTaskIdsBanner.js.map +1 -0
  178. package/dist/features/entity/metadata-task/components/MetadataTasksPage.d.ts.map +1 -1
  179. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js +50 -47
  180. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
  181. package/dist/mocks/chat/mockChat.d.ts +13 -1
  182. package/dist/mocks/chat/mockChat.d.ts.map +1 -1
  183. package/dist/mocks/chat/mockChat.js +34 -9
  184. package/dist/mocks/chat/mockChat.js.map +1 -1
  185. package/dist/mocks/msw/handlers/chatHandlers.d.ts +1 -1
  186. package/dist/mocks/msw/handlers/chatHandlers.d.ts.map +1 -1
  187. package/dist/mocks/msw/handlers/chatHandlers.js +21 -7
  188. package/dist/mocks/msw/handlers/chatHandlers.js.map +1 -1
  189. package/dist/synapse-client/SynapseClient.d.ts +2 -2
  190. package/dist/synapse-client/SynapseClient.d.ts.map +1 -1
  191. package/dist/synapse-client/SynapseClient.js.map +1 -1
  192. package/dist/synapse-queries/KeyFactory.d.ts +10 -1
  193. package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
  194. package/dist/synapse-queries/KeyFactory.js +29 -2
  195. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  196. package/dist/synapse-queries/asynchronous/usePollAsynchronousJob.d.ts +2 -2
  197. package/dist/synapse-queries/asynchronous/usePollAsynchronousJob.d.ts.map +1 -1
  198. package/dist/synapse-queries/asynchronous/usePollAsynchronousJob.js +2 -1
  199. package/dist/synapse-queries/asynchronous/usePollAsynchronousJob.js.map +1 -1
  200. package/dist/synapse-queries/chat/useChat.d.ts +3 -2
  201. package/dist/synapse-queries/chat/useChat.d.ts.map +1 -1
  202. package/dist/synapse-queries/chat/useChat.js +7 -6
  203. package/dist/synapse-queries/chat/useChat.js.map +1 -1
  204. package/dist/synapse-queries/dataaccess/index.d.ts +1 -0
  205. package/dist/synapse-queries/dataaccess/index.d.ts.map +1 -1
  206. package/dist/synapse-queries/dataaccess/index.js +4 -3
  207. package/dist/synapse-queries/dataaccess/useEDuc.d.ts +44 -0
  208. package/dist/synapse-queries/dataaccess/useEDuc.d.ts.map +1 -0
  209. package/dist/synapse-queries/dataaccess/useEDuc.js +75 -0
  210. package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -0
  211. package/dist/synapse-queries/featureflags/useGetFeatureFlag.d.ts.map +1 -1
  212. package/dist/synapse-queries/featureflags/useGetFeatureFlag.js +1 -1
  213. package/dist/synapse-queries/featureflags/useGetFeatureFlag.js.map +1 -1
  214. package/dist/synapse-queries/file/useDirectUploadToS3.js +6 -6
  215. package/dist/synapse-queries/index.js +181 -172
  216. package/dist/tsconfig.build.tsbuildinfo +1 -1
  217. package/dist/utils/SynapseConstants.d.ts +3 -0
  218. package/dist/utils/SynapseConstants.d.ts.map +1 -1
  219. package/dist/utils/SynapseConstants.js +122 -119
  220. package/dist/utils/SynapseConstants.js.map +1 -1
  221. package/dist/utils/featureflag/FeatureFlags.d.ts +3 -1
  222. package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -1
  223. package/dist/utils/featureflag/FeatureFlags.js +1 -1
  224. package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
  225. package/dist/utils/hooks/useCurationTaskListFilters.d.ts +36 -0
  226. package/dist/utils/hooks/useCurationTaskListFilters.d.ts.map +1 -0
  227. package/dist/utils/hooks/useCurationTaskListFilters.js +42 -0
  228. package/dist/utils/hooks/useCurationTaskListFilters.js.map +1 -0
  229. package/dist/utils/hooks/useUploadFileEntity/useUploadFileEntities.js +5 -5
  230. package/dist/utils/hooks/useUploadFileEntity/useUploadFiles.js +14 -14
  231. package/package.json +4 -4
@@ -2,81 +2,81 @@ import e from "../../synapse-client/index.js";
2
2
  import { getEntityTypeFromHeader as t } from "../../utils/functions/EntityTypeUtils.js";
3
3
  import { parseSynId as n } from "../../utils/functions/RegularExpressions.js";
4
4
  import { SynapseErrorBoundary as r } from "../error/ErrorBanner.js";
5
- import { useSynapseContext as i } from "../../utils/context/SynapseContext.js";
6
- import { VersionSelectionType as ee } from "./VersionSelectionType.js";
7
- import { useEntitySelection as te } from "./useEntitySelection.js";
8
- import { Breadcrumbs as ne } from "./Breadcrumbs.js";
9
- import { EntityDetailsList as a, EntityDetailsListDataConfigurationType as o } from "./details/EntityDetailsList.js";
10
- import { EntityTreeNodeType as s } from "./tree/VirtualizedTree.js";
11
- import { EntityTree as c } from "./tree/EntityTree.js";
12
- import re, { useCallback as l, useEffect as u, useMemo as d, useState as f } from "react";
13
- import { Box as ie, Chip as p, IconButton as ae, InputAdornment as m, Stack as oe, Tab as h, Tabs as se, TextField as ce } from "@mui/material";
14
- import { jsx as g, jsxs as _ } from "react/jsx-runtime";
15
- import { EntityType as v } from "@sage-bionetworks/synapse-client";
16
- import { useErrorHandler as le } from "react-error-boundary";
17
- import ue from "@mui/icons-material/Search";
18
- import { Map as de } from "immutable";
5
+ import { useSynapseContext as ee } from "../../utils/context/SynapseContext.js";
6
+ import { Breadcrumbs as te } from "./Breadcrumbs.js";
7
+ import { VersionSelectionType as ne } from "./VersionSelectionType.js";
8
+ import { EntityDetailsList as i, EntityDetailsListDataConfigurationType as a } from "./details/EntityDetailsList.js";
9
+ import { EntityTreeNodeType as o } from "./tree/VirtualizedTree.js";
10
+ import { EntityTree as s } from "./tree/EntityTree.js";
11
+ import { useEntitySelection as re } from "./useEntitySelection.js";
12
+ import ie, { useCallback as c, useEffect as l, useMemo as u, useState as d } from "react";
13
+ import { Box as ae, Chip as oe, IconButton as se, InputAdornment as f, Stack as p, Tab as m, Tabs as ce, TextField as le } from "@mui/material";
14
+ import { jsx as h, jsxs as g } from "react/jsx-runtime";
15
+ import { EntityType as _ } from "@sage-bionetworks/synapse-client";
16
+ import { useErrorHandler as ue } from "react-error-boundary";
17
+ import de from "@mui/icons-material/Search";
19
18
  import fe from "@mui/icons-material/Clear";
20
- import { ReflexContainer as pe, ReflexElement as y, ReflexSplitter as me } from "react-reflex";
19
+ import { Map as pe } from "immutable";
20
+ import { ReflexContainer as me, ReflexElement as v, ReflexSplitter as he } from "react-reflex";
21
21
  import "react-reflex/styles.css";
22
22
  //#region src/components/EntityFinder/EntityFinder.tsx
23
- var he = Object.values(v), b = Object.values(v), x = [v.project, v.folder], ge = (e) => Object.values(v).filter((t) => !e.includes(t)).map((e) => ({
23
+ var ge = Object.values(_), y = Object.values(_), b = [_.project, _.folder], _e = (e) => Object.values(_).filter((t) => !e.includes(t)).map((e) => ({
24
24
  key: "node_type",
25
25
  value: e.toString(),
26
26
  not: !0
27
27
  }));
28
- function S({ initialScope: v, projectId: S, initialContainer: C = null, selectMultiple: w, onSelectedChange: T, versionSelection: E = ee.TRACKED, selectableTypes: D = he, visibleTypesInList: O = b, visibleTypesInTree: k = x, treeOnly: A = !1, initialSelected: j }) {
29
- let { accessToken: M } = i(), [N, P] = re.useState(0), [F, I] = f(!1), [L, R] = f(""), [z, B] = f(), [_e, V] = f({ items: [] }), [H, U] = f([]), [ve, ye] = f({ type: o.PROMPT }), be = d(() => [...k, ...D], [k, D]), xe = d(() => [...O, ...D], [O, D]), [W, G] = f(C), K = le(), Se = l((e) => {
30
- V({ items: e });
31
- }, [V]), { selectedEntities: q, toggleSelection: J, setSelection: Y, setInitialVersion: X } = te(w);
32
- u(() => {
33
- if (j) {
34
- let e = de();
28
+ function x({ initialScope: _, projectId: x, initialContainer: S = null, selectMultiple: C, onSelectedChange: w, versionSelection: T = ne.TRACKED, selectableTypes: E = ge, visibleTypesInList: D = y, visibleTypesInTree: O = b, treeOnly: k = !1, initialSelected: A }) {
29
+ let { accessToken: j } = ee(), [M, N] = ie.useState(0), [P, F] = d(!1), [I, L] = d(""), [R, z] = d(), [ve, B] = d({ items: [] }), [V, H] = d([]), [ye, be] = d({ type: a.PROMPT }), xe = u(() => [...O, ...E], [O, E]), Se = u(() => [...D, ...E], [D, E]), [U, W] = d(S), G = ue(), Ce = c((e) => {
30
+ B({ items: e });
31
+ }, [B]), { selectedEntities: K, toggleSelection: q, setSelection: J, setInitialVersion: Y } = re(C);
32
+ l(() => {
33
+ if (A) {
34
+ let e = pe();
35
35
  e = e.withMutations((e) => {
36
- j.forEach((t) => {
36
+ A.forEach((t) => {
37
37
  e.set(t.targetId, t);
38
38
  });
39
- }), Y(e);
39
+ }), J(e);
40
40
  }
41
- }, [j, Y]);
42
- let [Ce, we] = f(q), Z = l((e) => q.has(e.id), [q]), Q = l((e) => {
41
+ }, [A, J]);
42
+ let [X, we] = d(K), Z = c((e) => K.has(e.id), [K]), Q = c((e) => {
43
43
  let n = t(e);
44
- return D.includes(n);
45
- }, [D]);
46
- u(() => {
47
- T(Array.from(q.values()));
48
- }, [q, T]), u(() => {
49
- if (z?.length === 1) {
50
- let t = n(z[0]);
51
- t && e.getEntityHeaders([t], M).then((e) => {
52
- U(e.results);
53
- }).catch((e) => K(e));
54
- } else U([]);
44
+ return E.includes(n);
45
+ }, [E]);
46
+ l(() => {
47
+ w(Array.from(K.values()));
48
+ }, [K, w]), l(() => {
49
+ if (R?.length === 1) {
50
+ let t = n(R[0]);
51
+ t && e.getEntityHeaders([t], j).then((e) => {
52
+ H(e.results);
53
+ }).catch((e) => G(e));
54
+ } else H([]);
55
55
  }, [
56
- M,
57
- z,
58
- K
56
+ j,
57
+ R,
58
+ G
59
59
  ]);
60
60
  let Te = (e, t) => {
61
- we(q), P(t);
62
- }, Ee = F ? "MainPanelSearch" : A ? "MainPanelSinglePane" : "MainPanelDualPane", $ = {
63
- configuration: ve,
64
- versionSelection: E,
65
- selected: q,
61
+ we(K), N(t);
62
+ }, Ee = P ? "MainPanelSearch" : k ? "MainPanelSinglePane" : "MainPanelDualPane", $ = {
63
+ configuration: ye,
64
+ versionSelection: T,
65
+ selected: K,
66
66
  isIdSelected: Z,
67
67
  isSelectable: Q,
68
- visibleTypes: xe,
69
- selectableTypes: D,
70
- selectColumnType: w ? "checkbox" : "none",
71
- toggleSelection: J,
72
- setInitialVersion: X,
73
- enableSelectAll: w,
74
- setCurrentContainer: G
68
+ visibleTypes: Se,
69
+ selectableTypes: E,
70
+ selectColumnType: C ? "checkbox" : "none",
71
+ toggleSelection: q,
72
+ setInitialVersion: Y,
73
+ enableSelectAll: C,
74
+ setCurrentContainer: W
75
75
  };
76
- return /* @__PURE__ */ g(r, { children: /* @__PURE__ */ _("div", {
76
+ return /* @__PURE__ */ h(r, { children: /* @__PURE__ */ g("div", {
77
77
  className: "EntityFinder",
78
78
  children: [
79
- /* @__PURE__ */ _(ie, {
79
+ /* @__PURE__ */ g(ae, {
80
80
  sx: {
81
81
  display: "flex",
82
82
  justifyContent: "space-between",
@@ -88,24 +88,24 @@ function S({ initialScope: v, projectId: S, initialContainer: C = null, selectMu
88
88
  md: "nowrap"
89
89
  }
90
90
  },
91
- children: [/* @__PURE__ */ _(se, {
92
- value: N,
91
+ children: [/* @__PURE__ */ g(ce, {
92
+ value: M,
93
93
  onChange: Te,
94
94
  sx: { flex: "none" },
95
- children: [/* @__PURE__ */ g(h, {
95
+ children: [/* @__PURE__ */ h(m, {
96
96
  value: 0,
97
97
  label: "Browse"
98
- }), /* @__PURE__ */ g(h, {
98
+ }), /* @__PURE__ */ h(m, {
99
99
  value: 1,
100
- label: /* @__PURE__ */ _(oe, {
100
+ label: /* @__PURE__ */ g(p, {
101
101
  direction: "row",
102
102
  sx: {
103
103
  gap: .5,
104
104
  alignItems: "center"
105
105
  },
106
- children: [/* @__PURE__ */ g("span", { children: "Selected" }), /* @__PURE__ */ g(p, {
106
+ children: [/* @__PURE__ */ h("span", { children: "Selected" }), /* @__PURE__ */ h(oe, {
107
107
  size: "small",
108
- label: q.size.toLocaleString(),
108
+ label: K.size.toLocaleString(),
109
109
  sx: {
110
110
  backgroundColor: "tertiary.500",
111
111
  color: "grey.900",
@@ -114,17 +114,17 @@ function S({ initialScope: v, projectId: S, initialContainer: C = null, selectMu
114
114
  })]
115
115
  })
116
116
  })]
117
- }), /* @__PURE__ */ g(ce, {
117
+ }), /* @__PURE__ */ h(le, {
118
118
  size: "small",
119
119
  placeholder: "Search by name, wiki content, or SynID",
120
- value: L,
120
+ value: I,
121
121
  onChange: (e) => {
122
- R(e.target.value);
122
+ L(e.target.value);
123
123
  },
124
124
  onKeyDown: (e) => {
125
125
  if (e.key === "Enter") {
126
126
  let t = e.target.value.trim();
127
- I(!!t), t && (B(t.split(/\s+/)), P(0));
127
+ F(!!t), t && (z(t.split(/\s+/)), N(0));
128
128
  }
129
129
  },
130
130
  sx: {
@@ -135,109 +135,109 @@ function S({ initialScope: v, projectId: S, initialContainer: C = null, selectMu
135
135
  flex: "1 1 350px"
136
136
  },
137
137
  slotProps: { input: {
138
- startAdornment: /* @__PURE__ */ g(m, {
138
+ startAdornment: /* @__PURE__ */ h(f, {
139
139
  position: "start",
140
- children: /* @__PURE__ */ g(ue, {})
140
+ children: /* @__PURE__ */ h(de, {})
141
141
  }),
142
- endAdornment: z ? /* @__PURE__ */ g(m, {
142
+ endAdornment: R ? /* @__PURE__ */ h(f, {
143
143
  position: "end",
144
- children: /* @__PURE__ */ g(ae, {
144
+ children: /* @__PURE__ */ h(se, {
145
145
  size: "small",
146
146
  onClick: () => {
147
- R(""), B(void 0), I(!1);
147
+ L(""), z(void 0), F(!1);
148
148
  },
149
149
  "aria-label": "Clear Search",
150
- disabled: !L && !F,
151
- children: /* @__PURE__ */ g(fe, {})
150
+ disabled: !I && !P,
151
+ children: /* @__PURE__ */ h(fe, {})
152
152
  })
153
153
  }) : void 0
154
154
  } }
155
155
  })]
156
156
  }),
157
- /* @__PURE__ */ _("div", {
157
+ /* @__PURE__ */ g("div", {
158
158
  role: "tabpanel",
159
159
  className: `EntityFinder__MainPanel ${Ee}`,
160
- style: { display: N === 0 ? "block" : "none" },
161
- children: [F && /* @__PURE__ */ g(a, {
162
- configuration: H && H.length > 0 ? {
163
- type: o.HEADER_LIST,
164
- headerList: H
160
+ style: { display: M === 0 ? "block" : "none" },
161
+ children: [P && /* @__PURE__ */ h(i, {
162
+ configuration: V && V.length > 0 ? {
163
+ type: a.HEADER_LIST,
164
+ headerList: V
165
165
  } : {
166
- type: o.ENTITY_SEARCH,
166
+ type: a.ENTITY_SEARCH,
167
167
  query: {
168
- queryTerm: z,
169
- booleanQuery: ge(D)
168
+ queryTerm: R,
169
+ booleanQuery: _e(E)
170
170
  }
171
171
  },
172
- versionSelection: E,
173
- selectColumnType: w ? "checkbox" : "none",
174
- selected: q,
172
+ versionSelection: T,
173
+ selectColumnType: C ? "checkbox" : "none",
174
+ selected: K,
175
175
  isIdSelected: Z,
176
176
  isSelectable: Q,
177
- visibleTypes: D,
178
- selectableTypes: D,
179
- toggleSelection: J,
180
- setInitialVersion: X,
181
- enableSelectAll: w,
177
+ visibleTypes: E,
178
+ selectableTypes: E,
179
+ toggleSelection: q,
180
+ setInitialVersion: Y,
181
+ enableSelectAll: C,
182
182
  setCurrentContainer: void 0
183
- }), /* @__PURE__ */ g("div", {
184
- style: F ? { display: "none" } : {},
185
- children: A ? /* @__PURE__ */ g("div", { children: /* @__PURE__ */ g(r, { children: /* @__PURE__ */ g(c, {
186
- toggleSelection: J,
183
+ }), /* @__PURE__ */ h("div", {
184
+ style: P ? { display: "none" } : {},
185
+ children: k ? /* @__PURE__ */ h("div", { children: /* @__PURE__ */ h(r, { children: /* @__PURE__ */ h(s, {
186
+ toggleSelection: q,
187
187
  showDropdown: !0,
188
- visibleTypes: be,
189
- initialScope: v,
190
- selectedEntities: q,
191
- projectId: S,
192
- initialContainer: C,
193
- currentContainer: W,
194
- setCurrentContainer: G,
188
+ visibleTypes: xe,
189
+ initialScope: _,
190
+ selectedEntities: K,
191
+ projectId: x,
192
+ initialContainer: S,
193
+ currentContainer: U,
194
+ setCurrentContainer: W,
195
195
  showScopeAsRootNode: !1,
196
- treeNodeType: s.SINGLE_PANE,
197
- selectableTypes: D
198
- }) }) }) : /* @__PURE__ */ g("div", {
196
+ treeNodeType: o.SINGLE_PANE,
197
+ selectableTypes: E
198
+ }) }) }) : /* @__PURE__ */ h("div", {
199
199
  className: "EntityFinderReflexContainer",
200
- children: /* @__PURE__ */ _(pe, {
200
+ children: /* @__PURE__ */ g(me, {
201
201
  orientation: "vertical",
202
202
  windowResizeAware: !0,
203
203
  children: [
204
- /* @__PURE__ */ g(y, {
204
+ /* @__PURE__ */ h(v, {
205
205
  className: "TreeViewReflexElement",
206
206
  flex: .24,
207
- children: /* @__PURE__ */ g(r, { children: /* @__PURE__ */ g(c, {
208
- selectedEntities: q,
209
- setDetailsViewConfiguration: ye,
207
+ children: /* @__PURE__ */ h(r, { children: /* @__PURE__ */ h(s, {
208
+ selectedEntities: K,
209
+ setDetailsViewConfiguration: be,
210
210
  showDropdown: !0,
211
- visibleTypes: k,
212
- initialScope: v,
213
- projectId: S,
214
- initialContainer: C,
215
- currentContainer: W,
216
- setCurrentContainer: G,
217
- treeNodeType: s.DUAL_PANE,
218
- setBreadcrumbItems: Se,
219
- selectableTypes: k
211
+ visibleTypes: O,
212
+ initialScope: _,
213
+ projectId: x,
214
+ initialContainer: S,
215
+ currentContainer: U,
216
+ setCurrentContainer: W,
217
+ treeNodeType: o.DUAL_PANE,
218
+ setBreadcrumbItems: Ce,
219
+ selectableTypes: O
220
220
  }) })
221
221
  }),
222
- /* @__PURE__ */ g(me, {}),
223
- /* @__PURE__ */ g(y, {
222
+ /* @__PURE__ */ h(he, {}),
223
+ /* @__PURE__ */ h(v, {
224
224
  className: "DetailsViewReflexElement",
225
- children: /* @__PURE__ */ _(r, { children: [/* @__PURE__ */ g(a, { ...$ }), /* @__PURE__ */ g(ne, { ..._e })] })
225
+ children: /* @__PURE__ */ g(r, { children: [/* @__PURE__ */ h(i, { ...$ }), /* @__PURE__ */ h(te, { ...ve })] })
226
226
  })
227
227
  ]
228
228
  })
229
229
  })
230
230
  })]
231
231
  }),
232
- /* @__PURE__ */ g("div", {
232
+ /* @__PURE__ */ h("div", {
233
233
  role: "tabpanel",
234
234
  className: "MainPanelSelected",
235
- style: { display: N === 1 ? "block" : "none" },
236
- children: /* @__PURE__ */ g(a, {
235
+ style: { display: M === 1 ? "block" : "none" },
236
+ children: /* @__PURE__ */ h(i, {
237
237
  ...$,
238
238
  configuration: {
239
- type: o.REFERENCE_LIST,
240
- referenceList: Array.from(Ce.values())
239
+ type: a.REFERENCE_LIST,
240
+ referenceList: Array.from(X.values())
241
241
  }
242
242
  })
243
243
  })
@@ -245,6 +245,6 @@ function S({ initialScope: v, projectId: S, initialContainer: C = null, selectMu
245
245
  }) });
246
246
  }
247
247
  //#endregion
248
- export { S as EntityFinder, S as default };
248
+ export { x as EntityFinder, x as default };
249
249
 
250
250
  //# sourceMappingURL=EntityFinder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityFinder.js","names":[],"sources":["../../../src/components/EntityFinder/EntityFinder.tsx"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { getEntityTypeFromHeader } from '@/utils/functions/EntityTypeUtils'\nimport { parseSynId } from '@/utils/functions/RegularExpressions'\nimport ClearIcon from '@mui/icons-material/Clear'\nimport SearchIcon from '@mui/icons-material/Search'\nimport {\n Box,\n Chip,\n IconButton,\n InputAdornment,\n Stack,\n Tab,\n Tabs,\n TextField,\n} from '@mui/material'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { KeyValue, Reference } from '@sage-bionetworks/synapse-types'\nimport { Map } from 'immutable'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useErrorHandler } from 'react-error-boundary'\nimport { ReflexContainer, ReflexElement, ReflexSplitter } from 'react-reflex'\nimport 'react-reflex/styles.css'\nimport { SynapseErrorBoundary } from '../error/ErrorBanner'\nimport { BreadcrumbItem, Breadcrumbs, BreadcrumbsProps } from './Breadcrumbs'\nimport {\n EntityDetailsList,\n EntityDetailsListDataConfiguration,\n EntityDetailsListDataConfigurationType,\n EntityDetailsListProps,\n} from './details/EntityDetailsList'\nimport { EntityFinderHeader } from './EntityFinderHeader'\nimport { EntityTree, EntityTreeContainer, FinderScope } from './tree/EntityTree'\nimport { EntityTreeNodeType } from './tree/VirtualizedTree'\nimport { useEntitySelection } from './useEntitySelection'\nimport { VersionSelectionType } from './VersionSelectionType'\n\nconst DEFAULT_SELECTABLE_TYPES = Object.values(EntityType)\nconst TABLE_DEFAULT_VISIBLE_TYPES = Object.values(EntityType)\nconst TREE_DEFAULT_VISIBLE_TYPES = [EntityType.project, EntityType.folder]\n\nconst searchForOnlyTypesBooleanQuery = (\n entityTypes: EntityType[],\n): KeyValue[] => {\n // Boolean query terms will be combined with AND, and there's no way to OR.\n // So we will negate searching for all omitted types.\n const allTypes = Object.values(EntityType)\n const typesToOmit = allTypes.filter(type => !entityTypes.includes(type))\n return typesToOmit.map(type => ({\n key: 'node_type',\n value: type.toString(),\n not: true,\n }))\n}\n\nexport type EntityFinderProps = {\n /** Whether it is possible to select multiple entities */\n selectMultiple: boolean\n /** Callback invoked when the selection changes */\n onSelectedChange: (selected: Reference[]) => void\n /** The initial appearance of the entity finder. Possible values include \"Current Project\", \"All Projects\", \"Projects Created By Me\", \"My Favorites\" */\n initialScope: FinderScope\n /** The SynID of the 'Current Project'. If this is not a defined, then the scope cannot be \"Current Project\" */\n projectId?: string\n /** The SynID of the entity that should open by default. If this is a Syn ID, then it must be in the project specified in `projectId` */\n initialContainer: string | 'root' | null\n /** Determines if versions are selectable, and if so, how they should be shown. Default is \"TRACKED\" */\n versionSelection?: VersionSelectionType\n /** The entity types to show in the details view (right pane). Any types specified in `selectableTypes` will automatically be included. */\n visibleTypesInList?: EntityType[]\n /** The entity types that may be selected. Types in `visibleTypesInList` that are not in `selectableTypes` will appear as disabled options. Only the types in `selectableTypes` will appear in search */\n selectableTypes?: EntityType[]\n /** The types to show in the tree used to navigate. If `treeOnly` is true, any types specified in `selectableTypes` will automatically be included. */\n visibleTypesInTree?: EntityType[]\n /** Whether to show only the tree. If `true`, the tree will be used to make selections */\n treeOnly?: boolean\n /** If provided, the initial selection will be set to this list of references. The selection will be reset to this value if this object changes, so it should be memoized. */\n initialSelected?: Reference[]\n}\n\nenum EntityFinderTab {\n BROWSE,\n SELECTED,\n}\n\nexport function EntityFinder({\n initialScope,\n projectId,\n initialContainer = null,\n selectMultiple,\n onSelectedChange,\n versionSelection = VersionSelectionType.TRACKED,\n selectableTypes = DEFAULT_SELECTABLE_TYPES,\n visibleTypesInList = TABLE_DEFAULT_VISIBLE_TYPES,\n visibleTypesInTree = TREE_DEFAULT_VISIBLE_TYPES,\n treeOnly = false,\n initialSelected,\n}: EntityFinderProps): React.ReactNode {\n const { accessToken } = useSynapseContext()\n const [currentTab, setCurrentTab] = React.useState(EntityFinderTab.BROWSE)\n\n const [searchActive, setSearchActive] = useState(false)\n // The raw value of the search input box:\n const [searchInput, setSearchInput] = useState<string>('')\n // The \"parsed\" search terms, which are only calculated when Enter is pressed:\n const [searchTerms, setSearchTerms] = useState<string[]>()\n const [breadcrumbsProps, setBreadcrumbsProps] = useState<BreadcrumbsProps>({\n items: [],\n })\n const [searchByIdResults, setSearchByIdResults] = useState<\n EntityFinderHeader[]\n >([])\n const [configFromTreeView, setConfigFromTreeView] =\n useState<EntityDetailsListDataConfiguration>({\n type: EntityDetailsListDataConfigurationType.PROMPT,\n })\n\n // If a type is selectable, it should be visible in the tree/list (depending on treeOnly)\n const selectableAndVisibleTypesInTree = useMemo(\n () => [...visibleTypesInTree, ...selectableTypes],\n [visibleTypesInTree, selectableTypes],\n )\n const selectableAndVisibleTypesInList = useMemo(\n () => [...visibleTypesInList, ...selectableTypes],\n [visibleTypesInList, selectableTypes],\n )\n\n // For dual-pane, this state variable indicates which container is selected in the tree view and should be shown in the table view\n const [currentContainer, setCurrentContainer] =\n useState<EntityTreeContainer>(initialContainer)\n\n const handleError = useErrorHandler()\n\n const setBreadcrumbs = useCallback(\n (items: BreadcrumbItem[]) => {\n setBreadcrumbsProps({\n items,\n })\n },\n [setBreadcrumbsProps],\n )\n\n const { selectedEntities, toggleSelection, setSelection, setInitialVersion } =\n useEntitySelection(selectMultiple)\n\n useEffect(() => {\n if (initialSelected) {\n let map = Map<string, Reference>()\n map = map.withMutations(mutableMap => {\n initialSelected.forEach(reference => {\n mutableMap.set(reference.targetId, reference)\n })\n })\n\n setSelection(map)\n }\n }, [initialSelected, setSelection])\n\n // A snapshot of the selectedEntities used to populate the selection list, allowing deselection of entities without removing them from the list.\n const [selectedEntitiesSnapshot, setSelectedEntitiesSnapshot] =\n useState(selectedEntities)\n\n const isIdSelected = useCallback(\n (entity: EntityFinderHeader) => {\n return selectedEntities.has(entity.id)\n },\n [selectedEntities],\n )\n\n const isSelectable = useCallback(\n (entity: EntityFinderHeader) => {\n const type = getEntityTypeFromHeader(entity)\n return selectableTypes.includes(type)\n },\n [selectableTypes],\n )\n\n useEffect(() => {\n // When it changes, convert the map of selected items to a list of references and invoke the callback\n onSelectedChange(Array.from(selectedEntities.values()))\n }, [selectedEntities, onSelectedChange])\n\n useEffect(() => {\n if (searchTerms?.length === 1) {\n const searchTermReference = parseSynId(searchTerms[0])\n if (searchTermReference) {\n SynapseClient.getEntityHeaders([searchTermReference], accessToken)\n .then(response => {\n setSearchByIdResults(response.results)\n })\n .catch(e => handleError(e))\n }\n } else {\n setSearchByIdResults([])\n }\n }, [accessToken, searchTerms, handleError])\n\n const handleTabChange = (\n _event: React.SyntheticEvent,\n newValue: EntityFinderTab,\n ) => {\n setSelectedEntitiesSnapshot(selectedEntities)\n setCurrentTab(newValue)\n }\n\n const mainPanelClass = searchActive\n ? 'MainPanelSearch'\n : treeOnly\n ? 'MainPanelSinglePane'\n : 'MainPanelDualPane'\n\n const entityDetailsListProps: EntityDetailsListProps = {\n configuration: configFromTreeView,\n versionSelection: versionSelection,\n selected: selectedEntities,\n isIdSelected: isIdSelected,\n isSelectable: isSelectable,\n visibleTypes: selectableAndVisibleTypesInList,\n selectableTypes: selectableTypes,\n selectColumnType: selectMultiple ? 'checkbox' : 'none',\n toggleSelection: toggleSelection,\n setInitialVersion: setInitialVersion,\n enableSelectAll: selectMultiple,\n setCurrentContainer: setCurrentContainer,\n }\n\n return (\n <SynapseErrorBoundary>\n <div className=\"EntityFinder\">\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mb: 2.5,\n rowGap: 2,\n columnGap: 4,\n flexWrap: { xs: 'wrap', md: 'nowrap' },\n }}\n >\n <Tabs\n value={currentTab}\n onChange={handleTabChange}\n sx={{ flex: 'none' }}\n >\n <Tab value={EntityFinderTab.BROWSE} label={'Browse'}></Tab>\n <Tab\n value={EntityFinderTab.SELECTED}\n label={\n <Stack\n direction={'row'}\n sx={{\n gap: 0.5,\n alignItems: 'center',\n }}\n >\n <span>Selected</span>\n <Chip\n size={'small'}\n label={selectedEntities.size.toLocaleString()}\n sx={{\n backgroundColor: 'tertiary.500',\n color: 'grey.900',\n height: '21px',\n }}\n ></Chip>\n </Stack>\n }\n ></Tab>\n </Tabs>\n <TextField\n size={'small'}\n placeholder=\"Search by name, wiki content, or SynID\"\n value={searchInput}\n onChange={event => {\n setSearchInput(event.target.value)\n }}\n onKeyDown={(event: any) => {\n if (event.key === 'Enter') {\n const trimmedInput = event.target.value.trim()\n setSearchActive(!!trimmedInput)\n if (trimmedInput) {\n setSearchTerms(trimmedInput.split(/\\s+/))\n setCurrentTab(EntityFinderTab.BROWSE)\n }\n }\n }}\n sx={{\n maxWidth: { xs: '100%', md: '350px' },\n flex: '1 1 350px',\n }}\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n endAdornment: searchTerms ? (\n <InputAdornment position=\"end\">\n <IconButton\n size={'small'}\n onClick={() => {\n setSearchInput('')\n setSearchTerms(undefined)\n setSearchActive(false)\n }}\n aria-label=\"Clear Search\"\n disabled={!searchInput && !searchActive}\n >\n <ClearIcon />\n </IconButton>\n </InputAdornment>\n ) : undefined,\n },\n }}\n />\n </Box>\n <div\n role={'tabpanel'}\n className={`EntityFinder__MainPanel ${mainPanelClass}`}\n style={{\n display: currentTab === EntityFinderTab.BROWSE ? 'block' : 'none',\n }}\n >\n {/* We have a separate Details component for search in order to preserve state in the other component between searches */}\n {searchActive && (\n <EntityDetailsList\n configuration={\n searchByIdResults && searchByIdResults.length > 0\n ? {\n type: EntityDetailsListDataConfigurationType.HEADER_LIST,\n headerList: searchByIdResults,\n }\n : {\n type: EntityDetailsListDataConfigurationType.ENTITY_SEARCH,\n query: {\n queryTerm: searchTerms,\n booleanQuery:\n searchForOnlyTypesBooleanQuery(selectableTypes),\n },\n }\n }\n versionSelection={versionSelection}\n selectColumnType={selectMultiple ? 'checkbox' : 'none'}\n selected={selectedEntities}\n isIdSelected={isIdSelected}\n isSelectable={isSelectable}\n visibleTypes={selectableTypes}\n selectableTypes={selectableTypes}\n toggleSelection={toggleSelection}\n setInitialVersion={setInitialVersion}\n enableSelectAll={selectMultiple}\n // Intentionally do not pass \"setCurrentContainer\" -- search does not use the tree so it has nothing to update\n setCurrentContainer={undefined}\n />\n )}\n {\n <div style={searchActive ? { display: 'none' } : {}}>\n {treeOnly ? (\n <div>\n <SynapseErrorBoundary>\n <EntityTree\n toggleSelection={toggleSelection}\n showDropdown={true}\n visibleTypes={selectableAndVisibleTypesInTree}\n initialScope={initialScope}\n selectedEntities={selectedEntities}\n projectId={projectId}\n initialContainer={initialContainer}\n currentContainer={currentContainer}\n setCurrentContainer={setCurrentContainer}\n showScopeAsRootNode={false}\n treeNodeType={EntityTreeNodeType.SINGLE_PANE}\n selectableTypes={selectableTypes}\n />\n </SynapseErrorBoundary>\n </div>\n ) : (\n <div className=\"EntityFinderReflexContainer\">\n <ReflexContainer orientation=\"vertical\" windowResizeAware>\n <ReflexElement\n className=\"TreeViewReflexElement\"\n flex={0.24}\n >\n <SynapseErrorBoundary>\n <EntityTree\n selectedEntities={selectedEntities}\n setDetailsViewConfiguration={setConfigFromTreeView}\n showDropdown={true}\n visibleTypes={visibleTypesInTree}\n initialScope={initialScope}\n projectId={projectId}\n initialContainer={initialContainer}\n currentContainer={currentContainer}\n setCurrentContainer={setCurrentContainer}\n treeNodeType={EntityTreeNodeType.DUAL_PANE}\n setBreadcrumbItems={setBreadcrumbs}\n selectableTypes={visibleTypesInTree}\n />\n </SynapseErrorBoundary>\n </ReflexElement>\n <ReflexSplitter></ReflexSplitter>\n <ReflexElement className=\"DetailsViewReflexElement\">\n <SynapseErrorBoundary>\n <EntityDetailsList {...entityDetailsListProps} />\n <Breadcrumbs {...breadcrumbsProps} />\n </SynapseErrorBoundary>\n </ReflexElement>\n </ReflexContainer>\n </div>\n )}\n </div>\n }\n </div>\n <div\n role={'tabpanel'}\n className={'MainPanelSelected'}\n style={{\n display: currentTab === EntityFinderTab.SELECTED ? 'block' : 'none',\n }}\n >\n <EntityDetailsList\n {...entityDetailsListProps}\n configuration={{\n type: EntityDetailsListDataConfigurationType.REFERENCE_LIST,\n referenceList: Array.from(selectedEntitiesSnapshot.values()),\n }}\n />\n </div>\n </div>\n </SynapseErrorBoundary>\n )\n}\n\nexport default EntityFinder\n"],"mappings":"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"}
1
+ {"version":3,"file":"EntityFinder.js","names":[],"sources":["../../../src/components/EntityFinder/EntityFinder.tsx"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { getEntityTypeFromHeader } from '@/utils/functions/EntityTypeUtils'\nimport { parseSynId } from '@/utils/functions/RegularExpressions'\nimport ClearIcon from '@mui/icons-material/Clear'\nimport SearchIcon from '@mui/icons-material/Search'\nimport {\n Box,\n Chip,\n IconButton,\n InputAdornment,\n Stack,\n Tab,\n Tabs,\n TextField,\n} from '@mui/material'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { KeyValue, Reference } from '@sage-bionetworks/synapse-types'\nimport { Map } from 'immutable'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useErrorHandler } from 'react-error-boundary'\nimport { ReflexContainer, ReflexElement, ReflexSplitter } from 'react-reflex'\nimport 'react-reflex/styles.css'\nimport { SynapseErrorBoundary } from '../error/ErrorBanner'\nimport { BreadcrumbItem, Breadcrumbs, BreadcrumbsProps } from './Breadcrumbs'\nimport {\n EntityDetailsList,\n EntityDetailsListDataConfiguration,\n EntityDetailsListDataConfigurationType,\n EntityDetailsListProps,\n} from './details/EntityDetailsList'\nimport { EntityFinderHeader } from './EntityFinderHeader'\nimport { EntityTree, EntityTreeContainer, FinderScope } from './tree/EntityTree'\nimport { EntityTreeNodeType } from './tree/VirtualizedTree'\nimport { useEntitySelection } from './useEntitySelection'\nimport { VersionSelectionType } from './VersionSelectionType'\n\nconst DEFAULT_SELECTABLE_TYPES = Object.values(EntityType)\nconst TABLE_DEFAULT_VISIBLE_TYPES = Object.values(EntityType)\nconst TREE_DEFAULT_VISIBLE_TYPES = [EntityType.project, EntityType.folder]\n\nconst searchForOnlyTypesBooleanQuery = (\n entityTypes: EntityType[],\n): KeyValue[] => {\n // Boolean query terms will be combined with AND, and there's no way to OR.\n // So we will negate searching for all omitted types.\n const allTypes = Object.values(EntityType)\n const typesToOmit = allTypes.filter(type => !entityTypes.includes(type))\n return typesToOmit.map(type => ({\n key: 'node_type',\n value: type.toString(),\n not: true,\n }))\n}\n\nexport type EntityFinderProps = {\n /** Whether it is possible to select multiple entities */\n selectMultiple: boolean\n /** Callback invoked when the selection changes */\n onSelectedChange: (selected: Reference[]) => void\n /** The initial appearance of the entity finder. Possible values include \"Current Project\", \"All Projects\", \"Projects Created By Me\", \"My Favorites\" */\n initialScope: FinderScope\n /** The SynID of the 'Current Project'. If this is not a defined, then the scope cannot be \"Current Project\" */\n projectId?: string\n /** The SynID of the entity that should open by default. If this is a Syn ID, then it must be in the project specified in `projectId` */\n initialContainer: string | 'root' | null\n /** Determines if versions are selectable, and if so, how they should be shown. Default is \"TRACKED\" */\n versionSelection?: VersionSelectionType\n /** The entity types to show in the details view (right pane). Any types specified in `selectableTypes` will automatically be included. */\n visibleTypesInList?: EntityType[]\n /** The entity types that may be selected. Types in `visibleTypesInList` that are not in `selectableTypes` will appear as disabled options. Only the types in `selectableTypes` will appear in search */\n selectableTypes?: EntityType[]\n /** The types to show in the tree used to navigate. If `treeOnly` is true, any types specified in `selectableTypes` will automatically be included. */\n visibleTypesInTree?: EntityType[]\n /** Whether to show only the tree. If `true`, the tree will be used to make selections */\n treeOnly?: boolean\n /** If provided, the initial selection will be set to this list of references. The selection will be reset to this value if this object changes, so it should be memoized. */\n initialSelected?: Reference[]\n}\n\nenum EntityFinderTab {\n BROWSE,\n SELECTED,\n}\n\nexport function EntityFinder({\n initialScope,\n projectId,\n initialContainer = null,\n selectMultiple,\n onSelectedChange,\n versionSelection = VersionSelectionType.TRACKED,\n selectableTypes = DEFAULT_SELECTABLE_TYPES,\n visibleTypesInList = TABLE_DEFAULT_VISIBLE_TYPES,\n visibleTypesInTree = TREE_DEFAULT_VISIBLE_TYPES,\n treeOnly = false,\n initialSelected,\n}: EntityFinderProps): React.ReactNode {\n const { accessToken } = useSynapseContext()\n const [currentTab, setCurrentTab] = React.useState(EntityFinderTab.BROWSE)\n\n const [searchActive, setSearchActive] = useState(false)\n // The raw value of the search input box:\n const [searchInput, setSearchInput] = useState<string>('')\n // The \"parsed\" search terms, which are only calculated when Enter is pressed:\n const [searchTerms, setSearchTerms] = useState<string[]>()\n const [breadcrumbsProps, setBreadcrumbsProps] = useState<BreadcrumbsProps>({\n items: [],\n })\n const [searchByIdResults, setSearchByIdResults] = useState<\n EntityFinderHeader[]\n >([])\n const [configFromTreeView, setConfigFromTreeView] =\n useState<EntityDetailsListDataConfiguration>({\n type: EntityDetailsListDataConfigurationType.PROMPT,\n })\n\n // If a type is selectable, it should be visible in the tree/list (depending on treeOnly)\n const selectableAndVisibleTypesInTree = useMemo(\n () => [...visibleTypesInTree, ...selectableTypes],\n [visibleTypesInTree, selectableTypes],\n )\n const selectableAndVisibleTypesInList = useMemo(\n () => [...visibleTypesInList, ...selectableTypes],\n [visibleTypesInList, selectableTypes],\n )\n\n // For dual-pane, this state variable indicates which container is selected in the tree view and should be shown in the table view\n const [currentContainer, setCurrentContainer] =\n useState<EntityTreeContainer>(initialContainer)\n\n const handleError = useErrorHandler()\n\n const setBreadcrumbs = useCallback(\n (items: BreadcrumbItem[]) => {\n setBreadcrumbsProps({\n items,\n })\n },\n [setBreadcrumbsProps],\n )\n\n const { selectedEntities, toggleSelection, setSelection, setInitialVersion } =\n useEntitySelection(selectMultiple)\n\n useEffect(() => {\n if (initialSelected) {\n let map = Map<string, Reference>()\n map = map.withMutations(mutableMap => {\n initialSelected.forEach(reference => {\n mutableMap.set(reference.targetId, reference)\n })\n })\n\n setSelection(map)\n }\n }, [initialSelected, setSelection])\n\n // A snapshot of the selectedEntities used to populate the selection list, allowing deselection of entities without removing them from the list.\n const [selectedEntitiesSnapshot, setSelectedEntitiesSnapshot] =\n useState(selectedEntities)\n\n const isIdSelected = useCallback(\n (entity: EntityFinderHeader) => {\n return selectedEntities.has(entity.id)\n },\n [selectedEntities],\n )\n\n const isSelectable = useCallback(\n (entity: EntityFinderHeader) => {\n const type = getEntityTypeFromHeader(entity)\n return selectableTypes.includes(type)\n },\n [selectableTypes],\n )\n\n useEffect(() => {\n // When it changes, convert the map of selected items to a list of references and invoke the callback\n onSelectedChange(Array.from(selectedEntities.values()))\n }, [selectedEntities, onSelectedChange])\n\n useEffect(() => {\n if (searchTerms?.length === 1) {\n const searchTermReference = parseSynId(searchTerms[0])\n if (searchTermReference) {\n SynapseClient.getEntityHeaders([searchTermReference], accessToken)\n .then(response => {\n setSearchByIdResults(response.results)\n })\n .catch(e => handleError(e))\n }\n } else {\n setSearchByIdResults([])\n }\n }, [accessToken, searchTerms, handleError])\n\n const handleTabChange = (\n _event: React.SyntheticEvent,\n newValue: EntityFinderTab,\n ) => {\n setSelectedEntitiesSnapshot(selectedEntities)\n setCurrentTab(newValue)\n }\n\n const mainPanelClass = searchActive\n ? 'MainPanelSearch'\n : treeOnly\n ? 'MainPanelSinglePane'\n : 'MainPanelDualPane'\n\n const entityDetailsListProps: EntityDetailsListProps = {\n configuration: configFromTreeView,\n versionSelection: versionSelection,\n selected: selectedEntities,\n isIdSelected: isIdSelected,\n isSelectable: isSelectable,\n visibleTypes: selectableAndVisibleTypesInList,\n selectableTypes: selectableTypes,\n selectColumnType: selectMultiple ? 'checkbox' : 'none',\n toggleSelection: toggleSelection,\n setInitialVersion: setInitialVersion,\n enableSelectAll: selectMultiple,\n setCurrentContainer: setCurrentContainer,\n }\n\n return (\n <SynapseErrorBoundary>\n <div className=\"EntityFinder\">\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mb: 2.5,\n rowGap: 2,\n columnGap: 4,\n flexWrap: { xs: 'wrap', md: 'nowrap' },\n }}\n >\n <Tabs\n value={currentTab}\n onChange={handleTabChange}\n sx={{ flex: 'none' }}\n >\n <Tab value={EntityFinderTab.BROWSE} label={'Browse'}></Tab>\n <Tab\n value={EntityFinderTab.SELECTED}\n label={\n <Stack\n direction={'row'}\n sx={{\n gap: 0.5,\n alignItems: 'center',\n }}\n >\n <span>Selected</span>\n <Chip\n size={'small'}\n label={selectedEntities.size.toLocaleString()}\n sx={{\n backgroundColor: 'tertiary.500',\n color: 'grey.900',\n height: '21px',\n }}\n ></Chip>\n </Stack>\n }\n ></Tab>\n </Tabs>\n <TextField\n size={'small'}\n placeholder=\"Search by name, wiki content, or SynID\"\n value={searchInput}\n onChange={event => {\n setSearchInput(event.target.value)\n }}\n onKeyDown={(event: any) => {\n if (event.key === 'Enter') {\n const trimmedInput = event.target.value.trim()\n setSearchActive(!!trimmedInput)\n if (trimmedInput) {\n setSearchTerms(trimmedInput.split(/\\s+/))\n setCurrentTab(EntityFinderTab.BROWSE)\n }\n }\n }}\n sx={{\n maxWidth: { xs: '100%', md: '350px' },\n flex: '1 1 350px',\n }}\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n endAdornment: searchTerms ? (\n <InputAdornment position=\"end\">\n <IconButton\n size={'small'}\n onClick={() => {\n setSearchInput('')\n setSearchTerms(undefined)\n setSearchActive(false)\n }}\n aria-label=\"Clear Search\"\n disabled={!searchInput && !searchActive}\n >\n <ClearIcon />\n </IconButton>\n </InputAdornment>\n ) : undefined,\n },\n }}\n />\n </Box>\n <div\n role={'tabpanel'}\n className={`EntityFinder__MainPanel ${mainPanelClass}`}\n style={{\n display: currentTab === EntityFinderTab.BROWSE ? 'block' : 'none',\n }}\n >\n {/* We have a separate Details component for search in order to preserve state in the other component between searches */}\n {searchActive && (\n <EntityDetailsList\n configuration={\n searchByIdResults && searchByIdResults.length > 0\n ? {\n type: EntityDetailsListDataConfigurationType.HEADER_LIST,\n headerList: searchByIdResults,\n }\n : {\n type: EntityDetailsListDataConfigurationType.ENTITY_SEARCH,\n query: {\n queryTerm: searchTerms,\n booleanQuery:\n searchForOnlyTypesBooleanQuery(selectableTypes),\n },\n }\n }\n versionSelection={versionSelection}\n selectColumnType={selectMultiple ? 'checkbox' : 'none'}\n selected={selectedEntities}\n isIdSelected={isIdSelected}\n isSelectable={isSelectable}\n visibleTypes={selectableTypes}\n selectableTypes={selectableTypes}\n toggleSelection={toggleSelection}\n setInitialVersion={setInitialVersion}\n enableSelectAll={selectMultiple}\n // Intentionally do not pass \"setCurrentContainer\" -- search does not use the tree so it has nothing to update\n setCurrentContainer={undefined}\n />\n )}\n {\n <div style={searchActive ? { display: 'none' } : {}}>\n {treeOnly ? (\n <div>\n <SynapseErrorBoundary>\n <EntityTree\n toggleSelection={toggleSelection}\n showDropdown={true}\n visibleTypes={selectableAndVisibleTypesInTree}\n initialScope={initialScope}\n selectedEntities={selectedEntities}\n projectId={projectId}\n initialContainer={initialContainer}\n currentContainer={currentContainer}\n setCurrentContainer={setCurrentContainer}\n showScopeAsRootNode={false}\n treeNodeType={EntityTreeNodeType.SINGLE_PANE}\n selectableTypes={selectableTypes}\n />\n </SynapseErrorBoundary>\n </div>\n ) : (\n <div className=\"EntityFinderReflexContainer\">\n <ReflexContainer orientation=\"vertical\" windowResizeAware>\n <ReflexElement\n className=\"TreeViewReflexElement\"\n flex={0.24}\n >\n <SynapseErrorBoundary>\n <EntityTree\n selectedEntities={selectedEntities}\n setDetailsViewConfiguration={setConfigFromTreeView}\n showDropdown={true}\n visibleTypes={visibleTypesInTree}\n initialScope={initialScope}\n projectId={projectId}\n initialContainer={initialContainer}\n currentContainer={currentContainer}\n setCurrentContainer={setCurrentContainer}\n treeNodeType={EntityTreeNodeType.DUAL_PANE}\n setBreadcrumbItems={setBreadcrumbs}\n selectableTypes={visibleTypesInTree}\n />\n </SynapseErrorBoundary>\n </ReflexElement>\n <ReflexSplitter></ReflexSplitter>\n <ReflexElement className=\"DetailsViewReflexElement\">\n <SynapseErrorBoundary>\n <EntityDetailsList {...entityDetailsListProps} />\n <Breadcrumbs {...breadcrumbsProps} />\n </SynapseErrorBoundary>\n </ReflexElement>\n </ReflexContainer>\n </div>\n )}\n </div>\n }\n </div>\n <div\n role={'tabpanel'}\n className={'MainPanelSelected'}\n style={{\n display: currentTab === EntityFinderTab.SELECTED ? 'block' : 'none',\n }}\n >\n <EntityDetailsList\n {...entityDetailsListProps}\n configuration={{\n type: EntityDetailsListDataConfigurationType.REFERENCE_LIST,\n referenceList: Array.from(selectedEntitiesSnapshot.values()),\n }}\n />\n </div>\n </div>\n </SynapseErrorBoundary>\n )\n}\n\nexport default EntityFinder\n"],"mappings":"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"}