synapse-react-client 4.0.34 → 4.0.35

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 (116) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/assets/icons/curie-head.svg +21 -0
  3. package/dist/components/AccessRequirementList/AccessRequirementList.d.ts +24 -2
  4. package/dist/components/AccessRequirementList/AccessRequirementList.d.ts.map +1 -1
  5. package/dist/components/AccessRequirementList/AccessRequirementList.js +108 -106
  6. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  7. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts.map +1 -1
  8. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js +26 -25
  9. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js.map +1 -1
  10. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts.map +1 -1
  11. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js +1 -1
  12. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js.map +1 -1
  13. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts +6 -1
  14. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts.map +1 -1
  15. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js +55 -54
  16. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js.map +1 -1
  17. package/dist/components/DraggableDialog/DraggableDialog.d.ts +2 -1
  18. package/dist/components/DraggableDialog/DraggableDialog.d.ts.map +1 -1
  19. package/dist/components/DraggableDialog/DraggableDialog.js +42 -33
  20. package/dist/components/DraggableDialog/DraggableDialog.js.map +1 -1
  21. package/dist/components/EntityTreeTable/hooks/useTableColumns.d.ts.map +1 -1
  22. package/dist/components/EntityTreeTable/hooks/useTableColumns.js +12 -6
  23. package/dist/components/EntityTreeTable/hooks/useTableColumns.js.map +1 -1
  24. package/dist/components/ExperimentalMode/ExperimentalMode.js +2 -1
  25. package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
  26. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts.map +1 -1
  27. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js +64 -55
  28. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
  29. package/dist/components/StorybookComponentWrapper.d.ts.map +1 -1
  30. package/dist/components/StorybookComponentWrapper.js +15 -10
  31. package/dist/components/StorybookComponentWrapper.js.map +1 -1
  32. package/dist/components/SynapseChat/GridAgentChat.js +6 -6
  33. package/dist/components/SynapseChat/SynapseChat.d.ts +2 -1
  34. package/dist/components/SynapseChat/SynapseChat.d.ts.map +1 -1
  35. package/dist/components/SynapseChat/SynapseChat.js +118 -74
  36. package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
  37. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts +3 -1
  38. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts.map +1 -1
  39. package/dist/components/SynapseChat/SynapseChatInteraction.js +21 -21
  40. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  41. package/dist/components/SynapseChat/SynapseChatMessage.d.ts +1 -0
  42. package/dist/components/SynapseChat/SynapseChatMessage.d.ts.map +1 -1
  43. package/dist/components/SynapseChat/SynapseChatMessage.js +9 -8
  44. package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
  45. package/dist/components/SynapseChat/SynapsePortalChatDialog.d.ts.map +1 -1
  46. package/dist/components/SynapseChat/SynapsePortalChatDialog.js +2 -1
  47. package/dist/components/SynapseChat/SynapsePortalChatDialog.js.map +1 -1
  48. package/dist/components/TanStackTable/TanStackTableUtils.d.ts.map +1 -1
  49. package/dist/components/TanStackTable/TanStackTableUtils.js +6 -6
  50. package/dist/components/TanStackTable/TanStackTableUtils.js.map +1 -1
  51. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts +12 -0
  52. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts.map +1 -0
  53. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js +84 -0
  54. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js.map +1 -0
  55. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.d.ts.map +1 -1
  56. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.js +20 -18
  57. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.js.map +1 -1
  58. package/dist/components/entity/page/CreatedByModifiedBy.d.ts.map +1 -1
  59. package/dist/components/entity/page/CreatedByModifiedBy.js +43 -61
  60. package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
  61. package/dist/components/entity/page/createdByModifiedByTooltips.d.ts +7 -0
  62. package/dist/components/entity/page/createdByModifiedByTooltips.d.ts.map +1 -0
  63. package/dist/components/entity/page/createdByModifiedByTooltips.js +36 -0
  64. package/dist/components/entity/page/createdByModifiedByTooltips.js.map +1 -0
  65. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.d.ts.map +1 -1
  66. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js +130 -65
  67. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
  68. package/dist/components/widgets/Range.js +8 -2
  69. package/dist/components/widgets/Range.js.map +1 -1
  70. package/dist/components/widgets/query-filter/RangeFacetFilter.d.ts.map +1 -1
  71. package/dist/components/widgets/query-filter/RangeFacetFilter.js +2 -1
  72. package/dist/components/widgets/query-filter/RangeFacetFilter.js.map +1 -1
  73. package/dist/components/widgets/query-filter/RangeFacetFilterUI.d.ts.map +1 -1
  74. package/dist/components/widgets/query-filter/RangeFacetFilterUI.js +19 -19
  75. package/dist/components/widgets/query-filter/RangeFacetFilterUI.js.map +1 -1
  76. package/dist/mocks/msw/handlers/fileHandlers.d.ts.map +1 -1
  77. package/dist/mocks/msw/handlers/fileHandlers.js +22 -22
  78. package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
  79. package/dist/mocks/msw/handlers/userProfileHandlers.d.ts.map +1 -1
  80. package/dist/mocks/msw/handlers/userProfileHandlers.js +36 -36
  81. package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
  82. package/dist/mocks/user/mock_user_profile.d.ts +1 -0
  83. package/dist/mocks/user/mock_user_profile.d.ts.map +1 -1
  84. package/dist/mocks/user/mock_user_profile.js +45 -45
  85. package/dist/mocks/user/mock_user_profile.js.map +1 -1
  86. package/dist/synapse-queries/KeyFactory.d.ts +1 -0
  87. package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
  88. package/dist/synapse-queries/KeyFactory.js +3 -0
  89. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  90. package/dist/synapse-queries/dataaccess/index.js +4 -4
  91. package/dist/synapse-queries/dataaccess/useEDuc.d.ts +13 -1
  92. package/dist/synapse-queries/dataaccess/useEDuc.d.ts.map +1 -1
  93. package/dist/synapse-queries/dataaccess/useEDuc.js +67 -49
  94. package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
  95. package/dist/synapse-queries/index.js +185 -184
  96. package/dist/tsconfig.build.tsbuildinfo +1 -1
  97. package/dist/utils/APIConstants.d.ts +1 -0
  98. package/dist/utils/APIConstants.d.ts.map +1 -1
  99. package/dist/utils/APIConstants.js +2 -2
  100. package/dist/utils/APIConstants.js.map +1 -1
  101. package/dist/utils/AppUtils/session/ApplicationSessionManager.d.ts.map +1 -1
  102. package/dist/utils/AppUtils/session/ApplicationSessionManager.js +20 -19
  103. package/dist/utils/AppUtils/session/ApplicationSessionManager.js.map +1 -1
  104. package/dist/utils/featureflag/FeatureFlags.d.ts +1 -0
  105. package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -1
  106. package/dist/utils/featureflag/FeatureFlags.js +1 -1
  107. package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
  108. package/dist/utils/functions/RegularExpressions.d.ts +7 -0
  109. package/dist/utils/functions/RegularExpressions.d.ts.map +1 -1
  110. package/dist/utils/functions/RegularExpressions.js +5 -4
  111. package/dist/utils/functions/RegularExpressions.js.map +1 -1
  112. package/dist/utils/hooks/useIsHydrated.d.ts +9 -0
  113. package/dist/utils/hooks/useIsHydrated.d.ts.map +1 -0
  114. package/dist/utils/hooks/useIsHydrated.js +10 -0
  115. package/dist/utils/hooks/useIsHydrated.js.map +1 -0
  116. package/package.json +2 -2
@@ -10,6 +10,7 @@ type SynapseChatMessageProps = {
10
10
  scrollIntoView?: boolean;
11
11
  animateEntry?: boolean;
12
12
  isAwaitingResponse?: boolean;
13
+ showLoadingIcon?: boolean;
13
14
  /**
14
15
  * Attachments sent with this message. This information is not available in any API request/response
15
16
  * until the job has finished processing, so this prop is used to optimistically render the attachment
@@ -1 +1 @@
1
- {"version":3,"file":"SynapseChatMessage.d.ts","sourceRoot":"","sources":["../../../src/components/SynapseChat/SynapseChatMessage.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAsC9C,KAAK,uBAAuB,GAAG;IAC7B,WAAW,EAAE,KAAK,CAAC,SAAS,CAAA;IAC5B,UAAU,EAAE,KAAK,CAAC,SAAS,CAAA;IAC3B,kGAAkG;IAClG,WAAW,EAAE,MAAM,CAAA;IACnB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,cAAc,EAAE,CAAA;CACtC,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,2CA6DxE"}
1
+ {"version":3,"file":"SynapseChatMessage.d.ts","sourceRoot":"","sources":["../../../src/components/SynapseChat/SynapseChatMessage.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAsC9C,KAAK,uBAAuB,GAAG;IAC7B,WAAW,EAAE,KAAK,CAAC,SAAS,CAAA;IAC5B,UAAU,EAAE,KAAK,CAAC,SAAS,CAAA;IAC3B,kGAAkG;IAClG,WAAW,EAAE,MAAM,CAAA;IACnB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,cAAc,EAAE,CAAA;CACtC,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,2CA+DxE"}
@@ -20,27 +20,28 @@ function s(t, n) {
20
20
  }, [c, u]), { traceEvents: o };
21
21
  }
22
22
  function c(e) {
23
- let { userMessage: r, chatJobId: i, onSendChat: a, agentAvatar: c, userAvatar: l, scrollIntoView: u, animateEntry: d, isAwaitingResponse: f, pendingAttachments: p } = e, { data: m } = n(i), h = m?.requestBody, g = m?.responseBody, _ = m?.errorMessage, { traceEvents: v } = s(i, !!i && (!m?.jobState || m.jobState == "PROCESSING")), y = h?.attachments?.map((e) => {
24
- let t = e.fileHandleId, n = g?.attachmentStatuses?.find((e) => e.fileHandleId === t), r = p?.find((e) => e.fileHandleId === t);
23
+ let { userMessage: r, chatJobId: i, onSendChat: a, agentAvatar: c, userAvatar: l, scrollIntoView: u, animateEntry: d, isAwaitingResponse: f, showLoadingIcon: p, pendingAttachments: m } = e, { data: h } = n(i), g = h?.requestBody, _ = h?.responseBody, v = h?.errorMessage, { traceEvents: y } = s(i, !!i && (!h?.jobState || h.jobState == "PROCESSING")), b = g?.attachments?.map((e) => {
24
+ let t = e.fileHandleId, n = _?.attachmentStatuses?.find((e) => e.fileHandleId === t), r = m?.find((e) => e.fileHandleId === t);
25
25
  return {
26
26
  fileHandleId: t,
27
27
  fileName: n?.fileName ?? r?.fileName,
28
28
  contentType: n?.contentType ?? r?.contentType
29
29
  };
30
- }) ?? p;
30
+ }) ?? m;
31
31
  return /* @__PURE__ */ o(t, {
32
32
  agentAvatar: c,
33
33
  userAvatar: l,
34
34
  userMessage: r,
35
- chatResponseText: g?.responseText,
36
- chatResponseTrace: v,
37
- chatErrorReason: _,
35
+ chatResponseText: _?.responseText,
36
+ chatResponseTrace: y,
37
+ chatErrorReason: v,
38
38
  onSendChat: a,
39
39
  scrollIntoView: u,
40
40
  animateEntry: d,
41
41
  isAwaitingResponse: f,
42
- attachments: y,
43
- attachmentStatuses: g?.attachmentStatuses
42
+ showLoadingIcon: p,
43
+ attachments: b,
44
+ attachmentStatuses: _?.attachmentStatuses
44
45
  });
45
46
  }
46
47
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"SynapseChatMessage.js","names":[],"sources":["../../../src/components/SynapseChat/SynapseChatMessage.tsx"],"sourcesContent":["import SynapseChatInteraction from '@/components/SynapseChat/SynapseChatInteraction'\nimport usePollAsynchronousJob from '@/synapse-queries/asynchronous/usePollAsynchronousJob'\nimport { useGetChatAgentTraceEvents } from '@/synapse-queries/chat/useChat'\nimport {\n AgentChatRequest,\n AgentChatResponse,\n} from '@sage-bionetworks/synapse-client'\nimport { TraceEvent } from '@sage-bionetworks/synapse-types'\nimport { useCallback, useEffect, useState } from 'react'\nimport { ChatAttachment } from './utils/types'\n\nfunction useTraceEvent(chatJobId: string | undefined, enabled: boolean) {\n const [traceEvents, setTraceEvents] = useState<TraceEvent[]>([])\n\n const appendTraceEvents = useCallback((newEvents: TraceEvent[]) => {\n setTraceEvents(prev => {\n return [...prev, ...newEvents]\n })\n }, [])\n\n const latestTraceEvent = traceEvents.at(traceEvents.length - 1)\n const { data: newTraceEvents } = useGetChatAgentTraceEvents(\n {\n jobId: chatJobId ?? '',\n newerThanTimestamp: latestTraceEvent?.timestamp,\n },\n {\n enabled: enabled,\n refetchInterval: 1000, // Re-fetch every second if enabled\n refetchIntervalInBackground: true, // Continue polling even when the tab is not active\n },\n )\n useEffect(() => {\n if (newTraceEvents && newTraceEvents.page.length > 0) {\n appendTraceEvents(newTraceEvents.page)\n\n // send trace events to the console to ease agent debugging\n // if the trace events do not contain the latest event, add the events to the array\n console.debug(newTraceEvents.page)\n }\n }, [appendTraceEvents, newTraceEvents])\n\n return {\n traceEvents,\n }\n}\n\ntype SynapseChatMessageProps = {\n agentAvatar: React.ReactNode\n userAvatar: React.ReactNode\n /** Known at send time; never re-derived from the polled job so the bubble never renders empty. */\n userMessage: string\n /** Undefined until the async job has been registered for this interaction. */\n chatJobId?: string\n onSendChat?: (message: string) => void\n scrollIntoView?: boolean\n animateEntry?: boolean\n isAwaitingResponse?: boolean\n /**\n * Attachments sent with this message. This information is not available in any API request/response\n * until the job has finished processing, so this prop is used to optimistically render the attachment\n * chips in the message bubble until the response arrives.\n */\n pendingAttachments?: ChatAttachment[]\n}\n\nexport default function SynapseChatMessage(props: SynapseChatMessageProps) {\n const {\n userMessage,\n chatJobId,\n onSendChat,\n agentAvatar,\n userAvatar,\n scrollIntoView,\n animateEntry,\n isAwaitingResponse,\n pendingAttachments,\n } = props\n const { data: asyncJobStatus } = usePollAsynchronousJob(chatJobId)\n\n const chatRequest = asyncJobStatus?.requestBody as AgentChatRequest\n const chatResponse = asyncJobStatus?.responseBody as\n | AgentChatResponse\n | undefined\n const chatError = asyncJobStatus?.errorMessage\n\n // enabled if the job has been registered and has not finished processing\n const enableTrace =\n !!chatJobId &&\n (!asyncJobStatus?.jobState || asyncJobStatus.jobState == 'PROCESSING')\n const { traceEvents } = useTraceEvent(chatJobId, enableTrace)\n\n const attachments =\n chatRequest?.attachments?.map(attachment => {\n const fileHandleId = attachment.fileHandleId!\n const status = chatResponse?.attachmentStatuses?.find(\n s => s.fileHandleId === fileHandleId,\n )\n const pending = pendingAttachments?.find(\n a => a.fileHandleId === fileHandleId,\n )\n // Prefer the server-resolved metadata once the job's response arrives. Fall back to what\n // was optimistically sent (`pending`) so the chip doesn't lose its filename between the\n // job being registered and its response arriving.\n return {\n fileHandleId,\n fileName: status?.fileName ?? pending?.fileName,\n contentType: status?.contentType ?? pending?.contentType,\n }\n }) ?? pendingAttachments\n\n return (\n <SynapseChatInteraction\n agentAvatar={agentAvatar}\n userAvatar={userAvatar}\n userMessage={userMessage}\n chatResponseText={chatResponse?.responseText}\n chatResponseTrace={traceEvents}\n chatErrorReason={chatError}\n onSendChat={onSendChat}\n scrollIntoView={scrollIntoView}\n animateEntry={animateEntry}\n isAwaitingResponse={isAwaitingResponse}\n attachments={attachments}\n attachmentStatuses={chatResponse?.attachmentStatuses}\n />\n )\n}\n"],"mappings":";;;;;;AAWA,SAAS,EAAc,GAA+B,GAAkB;CACtE,IAAM,CAAC,GAAa,KAAkB,EAAuB,CAAC,CAAC,GAEzD,IAAoB,GAAa,MAA4B;EACjE,GAAe,MACN,CAAC,GAAG,GAAM,GAAG,CAAS,CAC9B;CACH,GAAG,CAAC,CAAC,GAEC,IAAmB,EAAY,GAAG,EAAY,SAAS,CAAC,GACxD,EAAE,MAAM,MAAmB,EAC/B;EACE,OAAO,KAAa;EACpB,oBAAoB,GAAkB;CACxC,GACA;EACW;EACT,iBAAiB;EACjB,6BAA6B;CAC/B,CACF;CAWA,OAVA,QAAgB;EACd,AAAI,KAAkB,EAAe,KAAK,SAAS,MACjD,EAAkB,EAAe,IAAI,GAIrC,QAAQ,MAAM,EAAe,IAAI;CAErC,GAAG,CAAC,GAAmB,CAAc,CAAC,GAE/B,EACL,eACF;AACF;AAqBA,SAAwB,EAAmB,GAAgC;CACzE,IAAM,EACJ,gBACA,cACA,eACA,gBACA,eACA,mBACA,iBACA,uBACA,0BACE,GACE,EAAE,MAAM,MAAmB,EAAuB,CAAS,GAE3D,IAAc,GAAgB,aAC9B,IAAe,GAAgB,cAG/B,IAAY,GAAgB,cAM5B,EAAE,mBAAgB,EAAc,GAFpC,CAAC,CAAC,MACD,CAAC,GAAgB,YAAY,EAAe,YAAY,aACC,GAEtD,IACJ,GAAa,aAAa,KAAI,MAAc;EAC1C,IAAM,IAAe,EAAW,cAC1B,IAAS,GAAc,oBAAoB,MAC/C,MAAK,EAAE,iBAAiB,CAC1B,GACM,IAAU,GAAoB,MAClC,MAAK,EAAE,iBAAiB,CAC1B;EAIA,OAAO;GACL;GACA,UAAU,GAAQ,YAAY,GAAS;GACvC,aAAa,GAAQ,eAAe,GAAS;EAC/C;CACF,CAAC,KAAK;CAER,OACE,kBAAC,GAAD;EACe;EACD;EACC;EACb,kBAAkB,GAAc;EAChC,mBAAmB;EACnB,iBAAiB;EACL;EACI;EACF;EACM;EACP;EACb,oBAAoB,GAAc;CACnC,CAAA;AAEL"}
1
+ {"version":3,"file":"SynapseChatMessage.js","names":[],"sources":["../../../src/components/SynapseChat/SynapseChatMessage.tsx"],"sourcesContent":["import SynapseChatInteraction from '@/components/SynapseChat/SynapseChatInteraction'\nimport usePollAsynchronousJob from '@/synapse-queries/asynchronous/usePollAsynchronousJob'\nimport { useGetChatAgentTraceEvents } from '@/synapse-queries/chat/useChat'\nimport {\n AgentChatRequest,\n AgentChatResponse,\n} from '@sage-bionetworks/synapse-client'\nimport { TraceEvent } from '@sage-bionetworks/synapse-types'\nimport { useCallback, useEffect, useState } from 'react'\nimport { ChatAttachment } from './utils/types'\n\nfunction useTraceEvent(chatJobId: string | undefined, enabled: boolean) {\n const [traceEvents, setTraceEvents] = useState<TraceEvent[]>([])\n\n const appendTraceEvents = useCallback((newEvents: TraceEvent[]) => {\n setTraceEvents(prev => {\n return [...prev, ...newEvents]\n })\n }, [])\n\n const latestTraceEvent = traceEvents.at(traceEvents.length - 1)\n const { data: newTraceEvents } = useGetChatAgentTraceEvents(\n {\n jobId: chatJobId ?? '',\n newerThanTimestamp: latestTraceEvent?.timestamp,\n },\n {\n enabled: enabled,\n refetchInterval: 1000, // Re-fetch every second if enabled\n refetchIntervalInBackground: true, // Continue polling even when the tab is not active\n },\n )\n useEffect(() => {\n if (newTraceEvents && newTraceEvents.page.length > 0) {\n appendTraceEvents(newTraceEvents.page)\n\n // send trace events to the console to ease agent debugging\n // if the trace events do not contain the latest event, add the events to the array\n console.debug(newTraceEvents.page)\n }\n }, [appendTraceEvents, newTraceEvents])\n\n return {\n traceEvents,\n }\n}\n\ntype SynapseChatMessageProps = {\n agentAvatar: React.ReactNode\n userAvatar: React.ReactNode\n /** Known at send time; never re-derived from the polled job so the bubble never renders empty. */\n userMessage: string\n /** Undefined until the async job has been registered for this interaction. */\n chatJobId?: string\n onSendChat?: (message: string) => void\n scrollIntoView?: boolean\n animateEntry?: boolean\n isAwaitingResponse?: boolean\n showLoadingIcon?: boolean\n /**\n * Attachments sent with this message. This information is not available in any API request/response\n * until the job has finished processing, so this prop is used to optimistically render the attachment\n * chips in the message bubble until the response arrives.\n */\n pendingAttachments?: ChatAttachment[]\n}\n\nexport default function SynapseChatMessage(props: SynapseChatMessageProps) {\n const {\n userMessage,\n chatJobId,\n onSendChat,\n agentAvatar,\n userAvatar,\n scrollIntoView,\n animateEntry,\n isAwaitingResponse,\n showLoadingIcon,\n pendingAttachments,\n } = props\n const { data: asyncJobStatus } = usePollAsynchronousJob(chatJobId)\n\n const chatRequest = asyncJobStatus?.requestBody as AgentChatRequest\n const chatResponse = asyncJobStatus?.responseBody as\n | AgentChatResponse\n | undefined\n const chatError = asyncJobStatus?.errorMessage\n\n // enabled if the job has been registered and has not finished processing\n const enableTrace =\n !!chatJobId &&\n (!asyncJobStatus?.jobState || asyncJobStatus.jobState == 'PROCESSING')\n const { traceEvents } = useTraceEvent(chatJobId, enableTrace)\n\n const attachments =\n chatRequest?.attachments?.map(attachment => {\n const fileHandleId = attachment.fileHandleId!\n const status = chatResponse?.attachmentStatuses?.find(\n s => s.fileHandleId === fileHandleId,\n )\n const pending = pendingAttachments?.find(\n a => a.fileHandleId === fileHandleId,\n )\n // Prefer the server-resolved metadata once the job's response arrives. Fall back to what\n // was optimistically sent (`pending`) so the chip doesn't lose its filename between the\n // job being registered and its response arriving.\n return {\n fileHandleId,\n fileName: status?.fileName ?? pending?.fileName,\n contentType: status?.contentType ?? pending?.contentType,\n }\n }) ?? pendingAttachments\n\n return (\n <SynapseChatInteraction\n agentAvatar={agentAvatar}\n userAvatar={userAvatar}\n userMessage={userMessage}\n chatResponseText={chatResponse?.responseText}\n chatResponseTrace={traceEvents}\n chatErrorReason={chatError}\n onSendChat={onSendChat}\n scrollIntoView={scrollIntoView}\n animateEntry={animateEntry}\n isAwaitingResponse={isAwaitingResponse}\n showLoadingIcon={showLoadingIcon}\n attachments={attachments}\n attachmentStatuses={chatResponse?.attachmentStatuses}\n />\n )\n}\n"],"mappings":";;;;;;AAWA,SAAS,EAAc,GAA+B,GAAkB;CACtE,IAAM,CAAC,GAAa,KAAkB,EAAuB,CAAC,CAAC,GAEzD,IAAoB,GAAa,MAA4B;EACjE,GAAe,MACN,CAAC,GAAG,GAAM,GAAG,CAAS,CAC9B;CACH,GAAG,CAAC,CAAC,GAEC,IAAmB,EAAY,GAAG,EAAY,SAAS,CAAC,GACxD,EAAE,MAAM,MAAmB,EAC/B;EACE,OAAO,KAAa;EACpB,oBAAoB,GAAkB;CACxC,GACA;EACW;EACT,iBAAiB;EACjB,6BAA6B;CAC/B,CACF;CAWA,OAVA,QAAgB;EACd,AAAI,KAAkB,EAAe,KAAK,SAAS,MACjD,EAAkB,EAAe,IAAI,GAIrC,QAAQ,MAAM,EAAe,IAAI;CAErC,GAAG,CAAC,GAAmB,CAAc,CAAC,GAE/B,EACL,eACF;AACF;AAsBA,SAAwB,EAAmB,GAAgC;CACzE,IAAM,EACJ,gBACA,cACA,eACA,gBACA,eACA,mBACA,iBACA,uBACA,oBACA,0BACE,GACE,EAAE,MAAM,MAAmB,EAAuB,CAAS,GAE3D,IAAc,GAAgB,aAC9B,IAAe,GAAgB,cAG/B,IAAY,GAAgB,cAM5B,EAAE,mBAAgB,EAAc,GAFpC,CAAC,CAAC,MACD,CAAC,GAAgB,YAAY,EAAe,YAAY,aACC,GAEtD,IACJ,GAAa,aAAa,KAAI,MAAc;EAC1C,IAAM,IAAe,EAAW,cAC1B,IAAS,GAAc,oBAAoB,MAC/C,MAAK,EAAE,iBAAiB,CAC1B,GACM,IAAU,GAAoB,MAClC,MAAK,EAAE,iBAAiB,CAC1B;EAIA,OAAO;GACL;GACA,UAAU,GAAQ,YAAY,GAAS;GACvC,aAAa,GAAQ,eAAe,GAAS;EAC/C;CACF,CAAC,KAAK;CAER,OACE,kBAAC,GAAD;EACe;EACD;EACC;EACb,kBAAkB,GAAc;EAChC,mBAAmB;EACnB,iBAAiB;EACL;EACI;EACF;EACM;EACH;EACJ;EACb,oBAAoB,GAAc;CACnC,CAAA;AAEL"}
@@ -1 +1 @@
1
- {"version":3,"file":"SynapsePortalChatDialog.d.ts","sourceRoot":"","sources":["../../../src/components/SynapseChat/SynapsePortalChatDialog.tsx"],"names":[],"mappings":"AACA,OAAoB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAE7D,MAAM,MAAM,4BAA4B,GAAG,gBAAgB,GAAG;IAC5D,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,IAAI,EACJ,OAAO,EACP,GAAG,eAAe,EACnB,EAAE,4BAA4B,2CAc9B;AAED,eAAe,uBAAuB,CAAA"}
1
+ {"version":3,"file":"SynapsePortalChatDialog.d.ts","sourceRoot":"","sources":["../../../src/components/SynapseChat/SynapsePortalChatDialog.tsx"],"names":[],"mappings":"AACA,OAAoB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAE7D,MAAM,MAAM,4BAA4B,GAAG,gBAAgB,GAAG;IAC5D,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,IAAI,EACJ,OAAO,EACP,GAAG,eAAe,EACnB,EAAE,4BAA4B,2CAgB9B;AAED,eAAe,uBAAuB,CAAA"}
@@ -7,12 +7,13 @@ function r({ open: r, onClose: i, ...a }) {
7
7
  open: r,
8
8
  onClose: i,
9
9
  title: a.chatbotName || "SynapseChat",
10
+ variant: a.variant,
10
11
  children: /* @__PURE__ */ n(e, {
11
12
  hideTitle: !0,
12
13
  textboxPositionOffset: "16px",
13
14
  ...a
14
15
  })
15
- });
16
+ }, a.variant);
16
17
  }
17
18
  //#endregion
18
19
  export { r as SynapsePortalChatDialog, r as default };
@@ -1 +1 @@
1
- {"version":3,"file":"SynapsePortalChatDialog.js","names":[],"sources":["../../../src/components/SynapseChat/SynapsePortalChatDialog.tsx"],"sourcesContent":["import DraggableDialog from '../DraggableDialog/DraggableDialog'\nimport SynapseChat, { SynapseChatProps } from './SynapseChat'\n\nexport type SynapsePortalChatDialogProps = SynapseChatProps & {\n open: boolean\n onClose: () => void\n}\n\n/**\n * A dialog that wraps SynapseChat with externally-controlled open/close state.\n * Only shown when the user is logged in and the PORTAL_CHAT feature flag is enabled.\n */\nexport function SynapsePortalChatDialog({\n open,\n onClose,\n ...chatDialogProps\n}: SynapsePortalChatDialogProps) {\n return (\n <DraggableDialog\n open={open}\n onClose={onClose}\n title={chatDialogProps.chatbotName || 'SynapseChat'}\n >\n <SynapseChat\n hideTitle={true}\n textboxPositionOffset=\"16px\"\n {...chatDialogProps}\n />\n </DraggableDialog>\n )\n}\n\nexport default SynapsePortalChatDialog\n"],"mappings":";;;;AAYA,SAAgB,EAAwB,EACtC,SACA,YACA,GAAG,KAC4B;CAC/B,OACE,kBAAC,GAAD;EACQ;EACG;EACT,OAAO,EAAgB,eAAe;YAEtC,kBAAC,GAAD;GACE,WAAW;GACX,uBAAsB;GACtB,GAAI;EACL,CAAA;CACc,CAAA;AAErB"}
1
+ {"version":3,"file":"SynapsePortalChatDialog.js","names":[],"sources":["../../../src/components/SynapseChat/SynapsePortalChatDialog.tsx"],"sourcesContent":["import DraggableDialog from '../DraggableDialog/DraggableDialog'\nimport SynapseChat, { SynapseChatProps } from './SynapseChat'\n\nexport type SynapsePortalChatDialogProps = SynapseChatProps & {\n open: boolean\n onClose: () => void\n}\n\n/**\n * A dialog that wraps SynapseChat with externally-controlled open/close state.\n * Only shown when the user is logged in and the PORTAL_CHAT feature flag is enabled.\n */\nexport function SynapsePortalChatDialog({\n open,\n onClose,\n ...chatDialogProps\n}: SynapsePortalChatDialogProps) {\n return (\n <DraggableDialog\n key={chatDialogProps.variant}\n open={open}\n onClose={onClose}\n title={chatDialogProps.chatbotName || 'SynapseChat'}\n variant={chatDialogProps.variant}\n >\n <SynapseChat\n hideTitle={true}\n textboxPositionOffset=\"16px\"\n {...chatDialogProps}\n />\n </DraggableDialog>\n )\n}\n\nexport default SynapsePortalChatDialog\n"],"mappings":";;;;AAYA,SAAgB,EAAwB,EACtC,SACA,YACA,GAAG,KAC4B;CAC/B,OACE,kBAAC,GAAD;EAEQ;EACG;EACT,OAAO,EAAgB,eAAe;EACtC,SAAS,EAAgB;YAEzB,kBAAC,GAAD;GACE,WAAW;GACX,uBAAsB;GACtB,GAAI;EACL,CAAA;CACc,GAXV,EAAgB,OAWN;AAErB"}
@@ -1 +1 @@
1
- {"version":3,"file":"TanStackTableUtils.d.ts","sourceRoot":"","sources":["../../../src/components/TanStackTable/TanStackTableUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAErC,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,UAExD;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,UAExD;AAID,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,CAqBzE"}
1
+ {"version":3,"file":"TanStackTableUtils.d.ts","sourceRoot":"","sources":["../../../src/components/TanStackTable/TanStackTableUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAErC,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,UAExD;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,UAExD;AAID,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,CAsBzE"}
@@ -7,16 +7,16 @@ function t(e) {
7
7
  }
8
8
  function n(e) {
9
9
  let t = e.getIsPinned(), n = t === "left" && e.getIsLastColumn("left"), r = t === "right" && e.getIsFirstColumn("right");
10
- return {
11
- background: t ? "inherit" : void 0,
10
+ return t ? {
11
+ background: "inherit",
12
12
  boxShadow: n ? "-4px 0 4px -4px gray inset" : r ? "4px 0 4px -4px gray inset" : void 0,
13
13
  left: t === "left" ? `${e.getStart("left")}px` : void 0,
14
14
  right: t === "right" ? `${e.getAfter("right")}px` : void 0,
15
- opacity: t ? .95 : 1,
16
- position: t ? "sticky" : "relative",
15
+ opacity: .95,
16
+ position: "sticky",
17
17
  width: e.getSize(),
18
- zIndex: +!!t
19
- };
18
+ zIndex: 1
19
+ } : {};
20
20
  }
21
21
  //#endregion
22
22
  export { e as getColumnSizeCssVariable, n as getCommonPinningStyles, t as getHeaderSizeCssVariable };
@@ -1 +1 @@
1
- {"version":3,"file":"TanStackTableUtils.js","names":[],"sources":["../../../src/components/TanStackTable/TanStackTableUtils.ts"],"sourcesContent":["import { Column } from '@tanstack/react-table'\nimport { CSSProperties } from 'react'\n\nexport function getColumnSizeCssVariable(columnId: string) {\n return `--col-${columnId}-size`\n}\n\nexport function getHeaderSizeCssVariable(headerId: string) {\n return `--header-${headerId}-size`\n}\n\n// Styles for column pinning, retrieved from TanStack docs examples with very minor modifications\n// See https://tanstack.com/table/v8/docs/framework/react/examples/column-pinning-sticky\nexport function getCommonPinningStyles(column: Column<any>): CSSProperties {\n const isPinned = column.getIsPinned()\n const isLastLeftPinnedColumn =\n isPinned === 'left' && column.getIsLastColumn('left')\n const isFirstRightPinnedColumn =\n isPinned === 'right' && column.getIsFirstColumn('right')\n\n return {\n background: isPinned ? 'inherit' : undefined,\n boxShadow: isLastLeftPinnedColumn\n ? '-4px 0 4px -4px gray inset'\n : isFirstRightPinnedColumn\n ? '4px 0 4px -4px gray inset'\n : undefined,\n left: isPinned === 'left' ? `${column.getStart('left')}px` : undefined,\n right: isPinned === 'right' ? `${column.getAfter('right')}px` : undefined,\n opacity: isPinned ? 0.95 : 1,\n position: isPinned ? 'sticky' : 'relative',\n width: column.getSize(),\n zIndex: isPinned ? 1 : 0,\n }\n}\n"],"mappings":";AAGA,SAAgB,EAAyB,GAAkB;CACzD,OAAO,SAAS,EAAS;AAC3B;AAEA,SAAgB,EAAyB,GAAkB;CACzD,OAAO,YAAY,EAAS;AAC9B;AAIA,SAAgB,EAAuB,GAAoC;CACzE,IAAM,IAAW,EAAO,YAAY,GAC9B,IACJ,MAAa,UAAU,EAAO,gBAAgB,MAAM,GAChD,IACJ,MAAa,WAAW,EAAO,iBAAiB,OAAO;CAEzD,OAAO;EACL,YAAY,IAAW,YAAY,KAAA;EACnC,WAAW,IACP,+BACA,IACE,8BACA,KAAA;EACN,MAAM,MAAa,SAAS,GAAG,EAAO,SAAS,MAAM,EAAE,MAAM,KAAA;EAC7D,OAAO,MAAa,UAAU,GAAG,EAAO,SAAS,OAAO,EAAE,MAAM,KAAA;EAChE,SAAS,IAAW,MAAO;EAC3B,UAAU,IAAW,WAAW;EAChC,OAAO,EAAO,QAAQ;EACtB,QAAQ;CACV;AACF"}
1
+ {"version":3,"file":"TanStackTableUtils.js","names":[],"sources":["../../../src/components/TanStackTable/TanStackTableUtils.ts"],"sourcesContent":["import { Column } from '@tanstack/react-table'\nimport { CSSProperties } from 'react'\n\nexport function getColumnSizeCssVariable(columnId: string) {\n return `--col-${columnId}-size`\n}\n\nexport function getHeaderSizeCssVariable(headerId: string) {\n return `--header-${headerId}-size`\n}\n\n// Styles for column pinning, retrieved from TanStack docs examples with very minor modifications\n// See https://tanstack.com/table/v8/docs/framework/react/examples/column-pinning-sticky\nexport function getCommonPinningStyles(column: Column<any>): CSSProperties {\n const isPinned = column.getIsPinned()\n const isLastLeftPinnedColumn =\n isPinned === 'left' && column.getIsLastColumn('left')\n const isFirstRightPinnedColumn =\n isPinned === 'right' && column.getIsFirstColumn('right')\n\n if (!isPinned) return {}\n return {\n background: 'inherit',\n boxShadow: isLastLeftPinnedColumn\n ? '-4px 0 4px -4px gray inset'\n : isFirstRightPinnedColumn\n ? '4px 0 4px -4px gray inset'\n : undefined,\n left: isPinned === 'left' ? `${column.getStart('left')}px` : undefined,\n right: isPinned === 'right' ? `${column.getAfter('right')}px` : undefined,\n opacity: 0.95,\n position: 'sticky',\n width: column.getSize(),\n zIndex: 1,\n }\n}\n"],"mappings":";AAGA,SAAgB,EAAyB,GAAkB;CACzD,OAAO,SAAS,EAAS;AAC3B;AAEA,SAAgB,EAAyB,GAAkB;CACzD,OAAO,YAAY,EAAS;AAC9B;AAIA,SAAgB,EAAuB,GAAoC;CACzE,IAAM,IAAW,EAAO,YAAY,GAC9B,IACJ,MAAa,UAAU,EAAO,gBAAgB,MAAM,GAChD,IACJ,MAAa,WAAW,EAAO,iBAAiB,OAAO;CAGzD,OADK,IACE;EACL,YAAY;EACZ,WAAW,IACP,+BACA,IACE,8BACA,KAAA;EACN,MAAM,MAAa,SAAS,GAAG,EAAO,SAAS,MAAM,EAAE,MAAM,KAAA;EAC7D,OAAO,MAAa,UAAU,GAAG,EAAO,SAAS,OAAO,EAAE,MAAM,KAAA;EAChE,SAAS;EACT,UAAU;EACV,OAAO,EAAO,QAAQ;EACtB,QAAQ;CACV,IAdsB,CAAC;AAezB"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Lists the requester's active eDUC signatures (routed / signed but not yet submitted).
3
+ *
4
+ * The underlying query walks every page of `POST /dataAccessRequest/list` inside its `queryFn`
5
+ * because filtering is done client-side pending PLFM-9907 (which will add an `isEDuc` server-side
6
+ * filter). Once server-side filtering ships, callers can switch back to a per-page infinite query
7
+ * with a "Show More" button.
8
+ *
9
+ * Renders nothing when the fully-loaded, filtered list is empty.
10
+ */
11
+ export declare function InFlightEDucSignaturesTable(): import("react/jsx-runtime").JSX.Element | null;
12
+ //# sourceMappingURL=InFlightEDucSignaturesTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InFlightEDucSignaturesTable.d.ts","sourceRoot":"","sources":["../../../../src/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.tsx"],"names":[],"mappings":"AA2DA;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,mDAqD1C"}
@@ -0,0 +1,84 @@
1
+ import { useListAllUserDataAccessRequests as e } from "../../../synapse-queries/dataaccess/useEDuc.js";
2
+ import "../../../synapse-queries/index.js";
3
+ import { SkeletonTable as t } from "../../Skeleton/SkeletonTable.js";
4
+ import "../../Skeleton/index.js";
5
+ import n from "../../TanStackTable/StyledTanStackTable.js";
6
+ import r from "../../TanStackTable/ColumnHeader.js";
7
+ import { useMemo as i } from "react";
8
+ import { Alert as a, Box as o, Typography as s } from "@mui/material";
9
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
10
+ import { createColumnHelper as u, getCoreRowModel as d, useReactTable as f } from "@tanstack/react-table";
11
+ //#region src/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.tsx
12
+ var p = [
13
+ "sent",
14
+ "delivered",
15
+ "completed"
16
+ ], m = {
17
+ sent: "Signatures pending",
18
+ delivered: "Signatures pending",
19
+ completed: "Ready to submit"
20
+ }, h = u(), g = [
21
+ h.accessor("accessRequirementName", {
22
+ header: (e) => /* @__PURE__ */ c(r, {
23
+ ...e,
24
+ title: "Request type"
25
+ }),
26
+ enableSorting: !1,
27
+ enableColumnFilter: !1
28
+ }),
29
+ h.display({
30
+ id: "signatureProgress",
31
+ header: (e) => /* @__PURE__ */ c(r, {
32
+ ...e,
33
+ title: "Signature progress"
34
+ }),
35
+ enableSorting: !1,
36
+ cell: (e) => `${e.row.original.signaturesAcquired ?? 0} of ${e.row.original.signaturesRequested ?? 0}`,
37
+ enableColumnFilter: !1,
38
+ size: 150
39
+ }),
40
+ h.accessor("status", {
41
+ header: (e) => /* @__PURE__ */ c(r, {
42
+ ...e,
43
+ title: "Current status"
44
+ }),
45
+ enableSorting: !1,
46
+ cell: (e) => {
47
+ let t = e.getValue();
48
+ return t ? m[t] ?? t : "";
49
+ },
50
+ enableColumnFilter: !1,
51
+ size: 150
52
+ })
53
+ ];
54
+ function _() {
55
+ let { data: r, isLoading: u, error: m } = e(), h = i(() => (r ?? []).filter((e) => e.isEDuc === !0 && e.status !== void 0 && p.includes(e.status)), [r]), _ = f({
56
+ data: h,
57
+ columns: g,
58
+ getCoreRowModel: d(),
59
+ columnResizeMode: "onChange"
60
+ });
61
+ return m ? /* @__PURE__ */ l(a, {
62
+ severity: "error",
63
+ children: [
64
+ /* @__PURE__ */ c("strong", { children: "Sorry, we couldn't load your in-flight eDUC signatures." }),
65
+ /* @__PURE__ */ c("br", {}),
66
+ m.reason
67
+ ]
68
+ }) : u ? /* @__PURE__ */ c(t, {
69
+ numCols: g.length,
70
+ fullWidthCells: !0
71
+ }) : h.length === 0 ? null : /* @__PURE__ */ l(o, { children: [/* @__PURE__ */ c(s, {
72
+ variant: "headline2",
73
+ component: "h2",
74
+ gutterBottom: !0,
75
+ children: "In-flight eDUC signatures"
76
+ }), /* @__PURE__ */ c(n, {
77
+ table: _,
78
+ fullWidth: !0
79
+ })] });
80
+ }
81
+ //#endregion
82
+ export { _ as InFlightEDucSignaturesTable };
83
+
84
+ //# sourceMappingURL=InFlightEDucSignaturesTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InFlightEDucSignaturesTable.js","names":[],"sources":["../../../../src/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.tsx"],"sourcesContent":["import { SkeletonTable } from '@/components/Skeleton'\nimport ColumnHeader from '@/components/TanStackTable/ColumnHeader'\nimport StyledTanStackTable from '@/components/TanStackTable/StyledTanStackTable'\nimport { useListAllUserDataAccessRequests } from '@/synapse-queries'\nimport { Alert, Box, Typography } from '@mui/material'\nimport {\n AccessRequestSummary,\n AccessRequestSummaryStatusEnum,\n} from '@sage-bionetworks/synapse-client'\nimport {\n createColumnHelper,\n getCoreRowModel,\n useReactTable,\n} from '@tanstack/react-table'\nimport { useMemo } from 'react'\n\nconst IN_FLIGHT_STATUSES: readonly AccessRequestSummaryStatusEnum[] = [\n 'sent',\n 'delivered',\n 'completed',\n] as const\n\nconst STATUS_DISPLAY: Record<string, string> = {\n sent: 'Signatures pending',\n delivered: 'Signatures pending',\n completed: 'Ready to submit',\n}\n\nconst columnHelper = createColumnHelper<AccessRequestSummary>()\nconst columns = [\n columnHelper.accessor('accessRequirementName', {\n header: props => <ColumnHeader {...props} title={'Request type'} />,\n enableSorting: false,\n enableColumnFilter: false,\n }),\n columnHelper.display({\n id: 'signatureProgress',\n header: props => <ColumnHeader {...props} title={'Signature progress'} />,\n enableSorting: false,\n cell: ctx => {\n const acquired = ctx.row.original.signaturesAcquired ?? 0\n const requested = ctx.row.original.signaturesRequested ?? 0\n return `${acquired} of ${requested}`\n },\n enableColumnFilter: false,\n size: 150,\n }),\n columnHelper.accessor('status', {\n header: props => <ColumnHeader {...props} title={'Current status'} />,\n enableSorting: false,\n cell: ctx => {\n const status = ctx.getValue()\n return status ? (STATUS_DISPLAY[status] ?? status) : ''\n },\n enableColumnFilter: false,\n size: 150,\n }),\n]\n\n/**\n * Lists the requester's active eDUC signatures (routed / signed but not yet submitted).\n *\n * The underlying query walks every page of `POST /dataAccessRequest/list` inside its `queryFn`\n * because filtering is done client-side pending PLFM-9907 (which will add an `isEDuc` server-side\n * filter). Once server-side filtering ships, callers can switch back to a per-page infinite query\n * with a \"Show More\" button.\n *\n * Renders nothing when the fully-loaded, filtered list is empty.\n */\nexport function InFlightEDucSignaturesTable() {\n const {\n data: summaries,\n isLoading,\n error,\n } = useListAllUserDataAccessRequests()\n\n const rows = useMemo(\n () =>\n (summaries ?? []).filter(\n summary =>\n summary.isEDuc === true &&\n summary.status !== undefined &&\n (IN_FLIGHT_STATUSES as readonly string[]).includes(summary.status),\n ),\n [summaries],\n )\n\n const table = useReactTable({\n data: rows,\n columns,\n getCoreRowModel: getCoreRowModel(),\n columnResizeMode: 'onChange',\n })\n\n if (error) {\n return (\n <Alert severity={'error'}>\n <strong>\n Sorry, we couldn&apos;t load your in-flight eDUC signatures.\n </strong>\n <br />\n {error.reason}\n </Alert>\n )\n }\n\n if (isLoading) {\n return <SkeletonTable numCols={columns.length} fullWidthCells />\n }\n\n if (rows.length === 0) {\n return null\n }\n\n return (\n <Box>\n <Typography variant={'headline2'} component={'h2'} gutterBottom>\n In-flight eDUC signatures\n </Typography>\n <StyledTanStackTable table={table} fullWidth={true} />\n </Box>\n )\n}\n"],"mappings":";;;;;;;;;;;AAgBA,IAAM,IAAgE;CACpE;CACA;CACA;AACF,GAEM,IAAyC;CAC7C,MAAM;CACN,WAAW;CACX,WAAW;AACb,GAEM,IAAe,EAAyC,GACxD,IAAU;CACd,EAAa,SAAS,yBAAyB;EAC7C,SAAQ,MAAS,kBAAC,GAAD;GAAc,GAAI;GAAO,OAAO;EAAiB,CAAA;EAClE,eAAe;EACf,oBAAoB;CACtB,CAAC;CACD,EAAa,QAAQ;EACnB,IAAI;EACJ,SAAQ,MAAS,kBAAC,GAAD;GAAc,GAAI;GAAO,OAAO;EAAuB,CAAA;EACxE,eAAe;EACf,OAAM,MAGG,GAFU,EAAI,IAAI,SAAS,sBAAsB,EAErC,MADD,EAAI,IAAI,SAAS,uBAAuB;EAG5D,oBAAoB;EACpB,MAAM;CACR,CAAC;CACD,EAAa,SAAS,UAAU;EAC9B,SAAQ,MAAS,kBAAC,GAAD;GAAc,GAAI;GAAO,OAAO;EAAmB,CAAA;EACpE,eAAe;EACf,OAAM,MAAO;GACX,IAAM,IAAS,EAAI,SAAS;GAC5B,OAAO,IAAU,EAAe,MAAW,IAAU;EACvD;EACA,oBAAoB;EACpB,MAAM;CACR,CAAC;AACH;AAYA,SAAgB,IAA8B;CAC5C,IAAM,EACJ,MAAM,GACN,cACA,aACE,EAAiC,GAE/B,IAAO,SAER,KAAa,CAAC,GAAG,QAChB,MACE,EAAQ,WAAW,MACnB,EAAQ,WAAW,KAAA,KAClB,EAAyC,SAAS,EAAQ,MAAM,CACrE,GACF,CAAC,CAAS,CACZ,GAEM,IAAQ,EAAc;EAC1B,MAAM;EACN;EACA,iBAAiB,EAAgB;EACjC,kBAAkB;CACpB,CAAC;CAsBD,OApBI,IAEA,kBAAC,GAAD;EAAO,UAAU;YAAjB;GACE,kBAAC,UAAD,EAAA,UAAQ,0DAEA,CAAA;GACR,kBAAC,MAAD,CAAK,CAAA;GACJ,EAAM;EACF;MAIP,IACK,kBAAC,GAAD;EAAe,SAAS,EAAQ;EAAQ,gBAAA;CAAgB,CAAA,IAG7D,EAAK,WAAW,IACX,OAIP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;EAAY,SAAS;EAAa,WAAW;EAAM,cAAA;YAAa;CAEpD,CAAA,GACZ,kBAAC,GAAD;EAA4B;EAAO,WAAW;CAAO,CAAA,CAClD,EAAA,CAAA;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserAccessRequestHistoryPage.d.ts","sourceRoot":"","sources":["../../../../src/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.tsx"],"names":[],"mappings":"AA4BA,wBAAgB,4BAA4B,4CAuC3C"}
1
+ {"version":3,"file":"UserAccessRequestHistoryPage.d.ts","sourceRoot":"","sources":["../../../../src/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.tsx"],"names":[],"mappings":"AA6BA,wBAAgB,4BAA4B,4CAwC3C"}
@@ -1,47 +1,49 @@
1
- import { UserAccessRequestHistoryTable as e } from "./UserAccessRequestHistoryTable.js";
2
- import { Accordion as t, AccordionDetails as n, AccordionSummary as r, Stack as i, Typography as a } from "@mui/material";
3
- import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
4
- import l from "@mui/icons-material/ExpandMore";
1
+ import { InFlightEDucSignaturesTable as e } from "./InFlightEDucSignaturesTable.js";
2
+ import { UserAccessRequestHistoryTable as t } from "./UserAccessRequestHistoryTable.js";
3
+ import { Accordion as n, AccordionDetails as r, AccordionSummary as i, Stack as a, Typography as o } from "@mui/material";
4
+ import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
5
+ import u from "@mui/icons-material/ExpandMore";
5
6
  //#region src/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.tsx
6
- var u = [];
7
- function d() {
8
- return /* @__PURE__ */ c(i, {
7
+ var d = [];
8
+ function f() {
9
+ return /* @__PURE__ */ l(a, {
9
10
  sx: { gap: 2 },
10
11
  children: [
11
- /* @__PURE__ */ s(a, {
12
+ /* @__PURE__ */ c(o, {
12
13
  variant: "headline1",
13
14
  gutterBottom: !0,
14
15
  children: "History of your access requests"
15
16
  }),
16
- /* @__PURE__ */ s(a, {
17
+ /* @__PURE__ */ c(o, {
17
18
  variant: "body1",
18
19
  gutterBottom: !0,
19
20
  children: "This list represents every access request you have been named in. It includes requests you've submitted yourself, and requests submitted by others, which you were named as a requester on."
20
21
  }),
21
- /* @__PURE__ */ s(a, {
22
+ /* @__PURE__ */ c(o, {
22
23
  variant: "body1",
23
24
  gutterBottom: !0,
24
25
  children: "Note: Requests where your access has been revoked will appear as \"Approved\"."
25
26
  }),
26
- u.length > 0 && /* @__PURE__ */ c(o, { children: [/* @__PURE__ */ s(a, {
27
+ d.length > 0 && /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ c(o, {
27
28
  variant: "headline2",
28
29
  gutterBottom: !0,
29
30
  children: "Frequently Asked Questions"
30
- }), /* @__PURE__ */ s("div", { children: u.map((e) => /* @__PURE__ */ c(t, {
31
+ }), /* @__PURE__ */ c("div", { children: d.map((e) => /* @__PURE__ */ l(n, {
31
32
  sx: { p: 1 },
32
- children: [/* @__PURE__ */ s(r, {
33
- expandIcon: /* @__PURE__ */ s(l, {}),
34
- children: /* @__PURE__ */ s(a, {
33
+ children: [/* @__PURE__ */ c(i, {
34
+ expandIcon: /* @__PURE__ */ c(u, {}),
35
+ children: /* @__PURE__ */ c(o, {
35
36
  variant: "headline3",
36
37
  children: e.summary
37
38
  })
38
- }), /* @__PURE__ */ s(n, { children: e.details })]
39
+ }), /* @__PURE__ */ c(r, { children: e.details })]
39
40
  }, e.summary)) })] }),
40
- /* @__PURE__ */ s(e, {})
41
+ /* @__PURE__ */ c(e, {}),
42
+ /* @__PURE__ */ c(t, {})
41
43
  ]
42
44
  });
43
45
  }
44
46
  //#endregion
45
- export { d as UserAccessRequestHistoryPage };
47
+ export { f as UserAccessRequestHistoryPage };
46
48
 
47
49
  //# sourceMappingURL=UserAccessRequestHistoryPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UserAccessRequestHistoryPage.js","names":[],"sources":["../../../../src/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.tsx"],"sourcesContent":["import ExpandMoreIcon from '@mui/icons-material/ExpandMore'\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Stack,\n Typography,\n} from '@mui/material'\nimport { UserAccessRequestHistoryTable } from './UserAccessRequestHistoryTable'\n\ntype FaqItem = {\n summary: string\n details: string\n}\n\nconst faqContent: FaqItem[] = [\n // {\n // summary:\n // 'Why do I still have access to data when I have an expired, canceled, or rejected access request?',\n // details:\n // \"This table shows all the requests you've ever been part of, including requests that were canceled, rejected, or that have since expired. If an older request was canceled, rejected, or has expired, but a newer request was approved and is still active, you'll still have access to the data.\",\n // },\n // {\n // summary: 'Some other question?',\n // details: 'Here is another answer!',\n // },\n]\n\nexport function UserAccessRequestHistoryPage() {\n return (\n <Stack\n sx={{\n gap: 2,\n }}\n >\n <Typography variant=\"headline1\" gutterBottom>\n History of your access requests\n </Typography>\n <Typography variant=\"body1\" gutterBottom>\n This list represents every access request you have been named in. It\n includes requests you&apos;ve submitted yourself, and requests submitted\n by others, which you were named as a requester on.\n </Typography>\n <Typography variant=\"body1\" gutterBottom>\n Note: Requests where your access has been revoked will appear as\n &quot;Approved&quot;.\n </Typography>\n {faqContent.length > 0 && (\n <>\n <Typography variant=\"headline2\" gutterBottom>\n Frequently Asked Questions\n </Typography>\n <div>\n {faqContent.map(faq => (\n <Accordion key={faq.summary} sx={{ p: 1 }}>\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography variant=\"headline3\">{faq.summary}</Typography>\n </AccordionSummary>\n <AccordionDetails>{faq.details}</AccordionDetails>\n </Accordion>\n ))}\n </div>\n </>\n )}\n <UserAccessRequestHistoryTable />\n </Stack>\n )\n}\n"],"mappings":";;;;;AAeA,IAAM,IAAwB,CAW9B;AAEA,SAAgB,IAA+B;CAC7C,OACE,kBAAC,GAAD;EACE,IAAI,EACF,KAAK,EACP;YAHF;GAKE,kBAAC,GAAD;IAAY,SAAQ;IAAY,cAAA;cAAa;GAEjC,CAAA;GACZ,kBAAC,GAAD;IAAY,SAAQ;IAAQ,cAAA;cAAa;GAI7B,CAAA;GACZ,kBAAC,GAAD;IAAY,SAAQ;IAAQ,cAAA;cAAa;GAG7B,CAAA;GACX,EAAW,SAAS,KACnB,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;IAAY,SAAQ;IAAY,cAAA;cAAa;GAEjC,CAAA,GACZ,kBAAC,OAAD,EAAA,UACG,EAAW,KAAI,MACd,kBAAC,GAAD;IAA6B,IAAI,EAAE,GAAG,EAAE;cAAxC,CACE,kBAAC,GAAD;KAAkB,YAAY,kBAAC,GAAD,CAAiB,CAAA;eAC7C,kBAAC,GAAD;MAAY,SAAQ;gBAAa,EAAI;KAAoB,CAAA;IACzC,CAAA,GAClB,kBAAC,GAAD,EAAA,UAAmB,EAAI,QAA0B,CAAA,CACxC;MALK,EAAI,OAKT,CACZ,EACE,CAAA,CACL,EAAA,CAAA;GAEJ,kBAAC,GAAD,CAAgC,CAAA;EAC3B;;AAEX"}
1
+ {"version":3,"file":"UserAccessRequestHistoryPage.js","names":[],"sources":["../../../../src/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.tsx"],"sourcesContent":["import ExpandMoreIcon from '@mui/icons-material/ExpandMore'\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Stack,\n Typography,\n} from '@mui/material'\nimport { InFlightEDucSignaturesTable } from './InFlightEDucSignaturesTable'\nimport { UserAccessRequestHistoryTable } from './UserAccessRequestHistoryTable'\n\ntype FaqItem = {\n summary: string\n details: string\n}\n\nconst faqContent: FaqItem[] = [\n // {\n // summary:\n // 'Why do I still have access to data when I have an expired, canceled, or rejected access request?',\n // details:\n // \"This table shows all the requests you've ever been part of, including requests that were canceled, rejected, or that have since expired. If an older request was canceled, rejected, or has expired, but a newer request was approved and is still active, you'll still have access to the data.\",\n // },\n // {\n // summary: 'Some other question?',\n // details: 'Here is another answer!',\n // },\n]\n\nexport function UserAccessRequestHistoryPage() {\n return (\n <Stack\n sx={{\n gap: 2,\n }}\n >\n <Typography variant=\"headline1\" gutterBottom>\n History of your access requests\n </Typography>\n <Typography variant=\"body1\" gutterBottom>\n This list represents every access request you have been named in. It\n includes requests you&apos;ve submitted yourself, and requests submitted\n by others, which you were named as a requester on.\n </Typography>\n <Typography variant=\"body1\" gutterBottom>\n Note: Requests where your access has been revoked will appear as\n &quot;Approved&quot;.\n </Typography>\n {faqContent.length > 0 && (\n <>\n <Typography variant=\"headline2\" gutterBottom>\n Frequently Asked Questions\n </Typography>\n <div>\n {faqContent.map(faq => (\n <Accordion key={faq.summary} sx={{ p: 1 }}>\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography variant=\"headline3\">{faq.summary}</Typography>\n </AccordionSummary>\n <AccordionDetails>{faq.details}</AccordionDetails>\n </Accordion>\n ))}\n </div>\n </>\n )}\n <InFlightEDucSignaturesTable />\n <UserAccessRequestHistoryTable />\n </Stack>\n )\n}\n"],"mappings":";;;;;;AAgBA,IAAM,IAAwB,CAW9B;AAEA,SAAgB,IAA+B;CAC7C,OACE,kBAAC,GAAD;EACE,IAAI,EACF,KAAK,EACP;YAHF;GAKE,kBAAC,GAAD;IAAY,SAAQ;IAAY,cAAA;cAAa;GAEjC,CAAA;GACZ,kBAAC,GAAD;IAAY,SAAQ;IAAQ,cAAA;cAAa;GAI7B,CAAA;GACZ,kBAAC,GAAD;IAAY,SAAQ;IAAQ,cAAA;cAAa;GAG7B,CAAA;GACX,EAAW,SAAS,KACnB,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;IAAY,SAAQ;IAAY,cAAA;cAAa;GAEjC,CAAA,GACZ,kBAAC,OAAD,EAAA,UACG,EAAW,KAAI,MACd,kBAAC,GAAD;IAA6B,IAAI,EAAE,GAAG,EAAE;cAAxC,CACE,kBAAC,GAAD;KAAkB,YAAY,kBAAC,GAAD,CAAiB,CAAA;eAC7C,kBAAC,GAAD;MAAY,SAAQ;gBAAa,EAAI;KAAoB,CAAA;IACzC,CAAA,GAClB,kBAAC,GAAD,EAAA,UAAmB,EAAI,QAA0B,CAAA,CACxC;MALK,EAAI,OAKT,CACZ,EACE,CAAA,CACL,EAAA,CAAA;GAEJ,kBAAC,GAAD,CAA8B,CAAA;GAC9B,kBAAC,GAAD,CAAgC,CAAA;EAC3B;;AAEX"}
@@ -1 +1 @@
1
- {"version":3,"file":"CreatedByModifiedBy.d.ts","sourceRoot":"","sources":["../../../../src/components/entity/page/CreatedByModifiedBy.tsx"],"names":[],"mappings":"AA2BA,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAeD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,2CA+IlE;AAED,eAAe,mBAAmB,CAAA"}
1
+ {"version":3,"file":"CreatedByModifiedBy.d.ts","sourceRoot":"","sources":["../../../../src/components/entity/page/CreatedByModifiedBy.tsx"],"names":[],"mappings":"AAiCA,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAeD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,2CA0GlE;AAED,eAAe,mBAAmB,CAAA"}
@@ -6,114 +6,96 @@ import "../../../synapse-queries/index.js";
6
6
  import { formatDate as o } from "../../../utils/functions/DateFormatter.js";
7
7
  import s from "../../utils/ConditionalWrapper.js";
8
8
  import { UserBadge as c } from "../../UserCard/UserBadge.js";
9
- import { Box as l, Breadcrumbs as u, Skeleton as d, Tooltip as f, Typography as p, useMediaQuery as m, useTheme as h } from "@mui/material";
10
- import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
11
- import { InfoTwoTone as y } from "@mui/icons-material";
12
- import b from "dayjs";
9
+ import { INFO_ICON_SX as l, getTableLastRebuiltTooltip as u, getTableModifiedOnAccessibleLabel as d, getTableModifiedOnTooltip as f } from "./createdByModifiedByTooltips.js";
10
+ import { Box as p, Breadcrumbs as m, Skeleton as h, Tooltip as g, Typography as _, useMediaQuery as v, useTheme as y } from "@mui/material";
11
+ import { jsx as b, jsxs as x } from "react/jsx-runtime";
12
+ import { InfoTwoTone as S } from "@mui/icons-material";
13
+ import C from "dayjs";
13
14
  //#region src/components/entity/page/CreatedByModifiedBy.tsx
14
- function x() {
15
- return m(h().breakpoints.down("sm")) ? null : /* @__PURE__ */ _(p, {
15
+ function w() {
16
+ return v(y().breakpoints.down("sm")) ? null : /* @__PURE__ */ b(_, {
16
17
  variant: "breadcrumb1",
17
18
  sx: { color: "grey.700" },
18
19
  children: "/"
19
20
  });
20
21
  }
21
- function S(m) {
22
- let { entityId: h, versionNumber: S } = m, C = `${h}${S ? `.${S}` : ""}`, { data: w } = i(h, S), { data: T } = a({
23
- entityId: h,
24
- query: { sql: `SELECT * FROM ${C} LIMIT 0` },
22
+ function T(v) {
23
+ let { entityId: y, versionNumber: T } = v, E = `${y}${T ? `.${T}` : ""}`, { data: D } = i(y, T), { data: O } = a({
24
+ entityId: y,
25
+ query: { sql: `SELECT * FROM ${E} LIMIT 0` },
25
26
  partMask: 128,
26
27
  concreteType: "org.sagebionetworks.repo.model.table.QueryBundleRequest"
27
- }, { enabled: !!(w && r(w)) }), E = T?.responseBody?.lastUpdatedOn, D = w ? t(e(w.concreteType)) : "", O = /* @__PURE__ */ v(g, { children: [
28
- /* @__PURE__ */ v("p", { children: [
29
- "This is when the configuration of this ",
30
- D,
31
- " was last changed."
32
- ] }),
33
- /* @__PURE__ */ _("p", { children: "Configuration changes may be triggered by (for example):" }),
34
- /* @__PURE__ */ v("ul", { children: [/* @__PURE__ */ v("li", { children: ["Editing the name of the ", D] }), /* @__PURE__ */ v("li", { children: ["Updating the schema used by the ", D] })] }),
35
- /* @__PURE__ */ v("p", { children: [
36
- "This does NOT reflect changes to the data displayed in the the",
37
- " ",
38
- D,
39
- "."
40
- ] })
41
- ] }), k = `This is when the configuration of this ${D} was last changed.`, A = `When data changes, the ${D} is rebuilt to reflect those changes. This is the last time changes were made to the data.`, j = `${C}-createdByTooltip`, M = `${C}-modifiedByTooltip`, N = `${C}-lastUpdatedTooltip`, P = {
42
- width: "16px",
43
- height: "16px",
44
- ml: "4px",
45
- verticalAlign: "text-bottom"
46
- };
47
- return /* @__PURE__ */ _(l, {
28
+ }, { enabled: !!(D && r(D)) }), k = O?.responseBody?.lastUpdatedOn, A = D ? t(e(D.concreteType)) : "", j = `${E}-createdByTooltip`, M = `${E}-modifiedByTooltip`, N = `${E}-lastUpdatedTooltip`;
29
+ return /* @__PURE__ */ b(p, {
48
30
  sx: (e) => ({
49
31
  bgcolor: "grey.100",
50
- py: "10px",
32
+ p: "10px",
51
33
  [e.breakpoints.down("sm")]: { p: "24px 40px" }
52
34
  }),
53
- children: /* @__PURE__ */ v(u, {
54
- separator: /* @__PURE__ */ _(x, {}),
35
+ children: /* @__PURE__ */ x(m, {
36
+ separator: /* @__PURE__ */ b(w, {}),
55
37
  sx: (e) => ({ "& .MuiBreadcrumbs-ol": {
56
38
  justifyContent: "center",
57
39
  [e.breakpoints.down("sm")]: { gap: "4px" }
58
40
  } }),
59
41
  children: [
60
- /* @__PURE__ */ _(s, {
61
- condition: !w,
62
- wrapper: d,
63
- children: /* @__PURE__ */ v(p, {
42
+ /* @__PURE__ */ b(s, {
43
+ condition: !D,
44
+ wrapper: h,
45
+ children: /* @__PURE__ */ x(_, {
64
46
  sx: { color: "grey.700" },
65
47
  variant: "breadcrumb1",
66
48
  "aria-describedby": j,
67
49
  children: [
68
- D,
50
+ A,
69
51
  " created by ",
70
- /* @__PURE__ */ _(c, { userId: w?.createdBy }),
52
+ /* @__PURE__ */ b(c, { userId: D?.createdBy }),
71
53
  " ",
72
54
  "on ",
73
- o(b(w?.createdOn)),
74
- w && n(w) && /* @__PURE__ */ _(f, {
55
+ o(C(D?.createdOn)),
56
+ D && n(D) && /* @__PURE__ */ b(g, {
75
57
  id: j,
76
58
  title: "This is the user who created this Dataset. This may not be the same person who generated the files in this Dataset, or who originally uploaded these files to Synapse.",
77
- children: /* @__PURE__ */ _(y, { sx: P })
59
+ children: /* @__PURE__ */ b(S, { sx: l })
78
60
  })
79
61
  ]
80
62
  })
81
63
  }),
82
- /* @__PURE__ */ _(s, {
83
- condition: !w,
84
- wrapper: d,
85
- children: /* @__PURE__ */ v(p, {
64
+ /* @__PURE__ */ b(s, {
65
+ condition: !D,
66
+ wrapper: h,
67
+ children: /* @__PURE__ */ x(_, {
86
68
  sx: { color: "grey.700" },
87
69
  variant: "breadcrumb1",
88
70
  "aria-describedby": M,
89
71
  children: [
90
- w && r(w) ? "Configuration" : D,
72
+ D && r(D) ? "Configuration" : A,
91
73
  " last modified by ",
92
- /* @__PURE__ */ _(c, { userId: w?.modifiedBy }),
74
+ /* @__PURE__ */ b(c, { userId: D?.modifiedBy }),
93
75
  " on",
94
76
  " ",
95
- o(b(w?.modifiedOn)),
96
- w && r(w) && /* @__PURE__ */ _(f, {
77
+ o(C(D?.modifiedOn)),
78
+ D && r(D) && /* @__PURE__ */ b(g, {
97
79
  id: M,
98
- title: O,
99
- "aria-label": k,
100
- children: /* @__PURE__ */ _(y, { sx: P })
80
+ title: f(A),
81
+ "aria-label": d(A),
82
+ children: /* @__PURE__ */ b(S, { sx: l })
101
83
  })
102
84
  ]
103
85
  })
104
86
  }),
105
- E && /* @__PURE__ */ v(p, {
87
+ k && /* @__PURE__ */ x(_, {
106
88
  sx: { color: "grey.700" },
107
89
  variant: "breadcrumb1",
108
90
  "aria-describedby": N,
109
91
  children: [
110
- D,
92
+ A,
111
93
  " last rebuilt on ",
112
- o(b(E)),
113
- /* @__PURE__ */ _(f, {
114
- title: A,
94
+ o(C(k)),
95
+ /* @__PURE__ */ b(g, {
96
+ title: u(A),
115
97
  id: N,
116
- children: /* @__PURE__ */ _(y, { sx: P })
98
+ children: /* @__PURE__ */ b(S, { sx: l })
117
99
  })
118
100
  ]
119
101
  })
@@ -122,6 +104,6 @@ function S(m) {
122
104
  });
123
105
  }
124
106
  //#endregion
125
- export { S as CreatedByModifiedBy, S as default };
107
+ export { T as CreatedByModifiedBy, T as default };
126
108
 
127
109
  //# sourceMappingURL=CreatedByModifiedBy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreatedByModifiedBy.js","names":[],"sources":["../../../../src/components/entity/page/CreatedByModifiedBy.tsx"],"sourcesContent":["import ConditionalWrapper from '@/components/utils/ConditionalWrapper'\nimport {\n useGetEntity,\n useGetQueryResultBundleWithAsyncStatus,\n} from '@/synapse-queries'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport {\n convertToEntityType,\n entityTypeToFriendlyName,\n isDataset,\n isTable,\n} from '@/utils/functions/EntityTypeUtils'\nimport { BUNDLE_MASK_LAST_UPDATED_ON } from '@/utils/SynapseConstants'\nimport { InfoTwoTone } from '@mui/icons-material'\nimport {\n Box,\n Breadcrumbs,\n Skeleton,\n SxProps,\n Tooltip,\n Typography,\n useMediaQuery,\n useTheme,\n} from '@mui/material'\nimport dayjs from 'dayjs'\nimport { UserBadge } from '../../UserCard/UserBadge'\n\nexport type CreatedByModifiedByProps = {\n entityId: string\n versionNumber?: number\n}\n\nfunction Separator() {\n const theme = useTheme()\n const isSmallScreen = useMediaQuery(theme.breakpoints.down('sm'))\n if (isSmallScreen) {\n return null\n }\n return (\n <Typography variant={'breadcrumb1'} sx={{ color: 'grey.700' }}>\n /\n </Typography>\n )\n}\n\nexport function CreatedByModifiedBy(props: CreatedByModifiedByProps) {\n const { entityId, versionNumber } = props\n const entityIdWithVersion = `${entityId}${\n versionNumber ? `.${versionNumber}` : ''\n }`\n\n const { data: entity } = useGetEntity(entityId, versionNumber)\n\n const { data: tableQueryResult } = useGetQueryResultBundleWithAsyncStatus(\n {\n entityId,\n query: {\n sql: `SELECT * FROM ${entityIdWithVersion} LIMIT 0`,\n },\n partMask: BUNDLE_MASK_LAST_UPDATED_ON,\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n },\n { enabled: !!(entity && isTable(entity)) },\n )\n\n const tableLastRebuilt = tableQueryResult?.responseBody?.lastUpdatedOn\n const friendlyName = entity\n ? entityTypeToFriendlyName(convertToEntityType(entity.concreteType))\n : ''\n\n const datasetCreatedByTooltipText =\n 'This is the user who created this Dataset. ' +\n 'This may not be the same person who generated the files in this Dataset, or who originally uploaded these files to Synapse.'\n\n const tableModifiedOnTooltipText = (\n <>\n <p>\n This is when the configuration of this {friendlyName} was last changed.\n </p>\n <p>Configuration changes may be triggered by (for example):</p>\n <ul>\n <li>Editing the name of the {friendlyName}</li>\n <li>Updating the schema used by the {friendlyName}</li>\n </ul>\n <p>\n This does NOT reflect changes to the data displayed in the the{' '}\n {friendlyName}.\n </p>\n </>\n )\n /*\n If the tooltip text is a string, MUI automatically applies it to aria-label which is more accessible and testable.\n Since this tooltip text is a ReactNode, let's manually create a short string to use for the aria-label.\n */\n const tableModifiedOnAccessibleLabel = `This is when the configuration of this ${friendlyName} was last changed.`\n\n const tableLastUpdatedTooltipText =\n `When data changes, the ${friendlyName} is rebuilt to reflect those changes. ` +\n `This is the last time changes were made to the data.`\n\n const createdByTooltipId = `${entityIdWithVersion}-createdByTooltip`\n const modifiedByTooltipId = `${entityIdWithVersion}-modifiedByTooltip`\n const lastUpdatedTooltipId = `${entityIdWithVersion}-lastUpdatedTooltip`\n\n const iconSx: SxProps = {\n width: '16px',\n height: '16px',\n ml: '4px',\n verticalAlign: 'text-bottom',\n }\n\n return (\n <Box\n sx={theme => ({\n bgcolor: 'grey.100',\n py: '10px',\n [theme.breakpoints.down('sm')]: {\n p: '24px 40px',\n },\n })}\n >\n <Breadcrumbs\n separator={<Separator />}\n sx={theme => ({\n '& .MuiBreadcrumbs-ol': {\n justifyContent: 'center',\n [theme.breakpoints.down('sm')]: {\n gap: '4px',\n },\n },\n })}\n >\n <ConditionalWrapper condition={!entity} wrapper={Skeleton}>\n <Typography\n sx={{ color: 'grey.700' }}\n variant={'breadcrumb1'}\n aria-describedby={createdByTooltipId}\n >\n {friendlyName} created by <UserBadge userId={entity?.createdBy} />{' '}\n on {formatDate(dayjs(entity?.createdOn))}\n {entity && isDataset(entity) && (\n <Tooltip\n id={createdByTooltipId}\n title={datasetCreatedByTooltipText}\n >\n <InfoTwoTone sx={iconSx} />\n </Tooltip>\n )}\n </Typography>\n </ConditionalWrapper>\n <ConditionalWrapper condition={!entity} wrapper={Skeleton}>\n <Typography\n sx={{ color: 'grey.700' }}\n variant={'breadcrumb1'}\n aria-describedby={modifiedByTooltipId}\n >\n {entity && isTable(entity) ? 'Configuration' : friendlyName} last\n modified by <UserBadge userId={entity?.modifiedBy} /> on{' '}\n {formatDate(dayjs(entity?.modifiedOn))}\n {entity && isTable(entity) && (\n <Tooltip\n id={modifiedByTooltipId}\n title={tableModifiedOnTooltipText}\n aria-label={tableModifiedOnAccessibleLabel}\n >\n <InfoTwoTone sx={iconSx} />\n </Tooltip>\n )}\n </Typography>\n </ConditionalWrapper>\n {tableLastRebuilt && (\n <Typography\n sx={{ color: 'grey.700' }}\n variant={'breadcrumb1'}\n aria-describedby={lastUpdatedTooltipId}\n >\n {friendlyName} last rebuilt on {formatDate(dayjs(tableLastRebuilt))}\n <Tooltip\n title={tableLastUpdatedTooltipText}\n id={lastUpdatedTooltipId}\n >\n <InfoTwoTone sx={iconSx} />\n </Tooltip>\n </Typography>\n )}\n </Breadcrumbs>\n </Box>\n )\n}\n\nexport default CreatedByModifiedBy\n"],"mappings":";;;;;;;;;;;;;AAgCA,SAAS,IAAY;CAMnB,OAJsB,EADR,EACsB,EAAM,YAAY,KAAK,IAAI,CAC3D,IACK,OAGP,kBAAC,GAAD;EAAY,SAAS;EAAe,IAAI,EAAE,OAAO,WAAW;YAAG;CAEnD,CAAA;AAEhB;AAEA,SAAgB,EAAoB,GAAiC;CACnE,IAAM,EAAE,aAAU,qBAAkB,GAC9B,IAAsB,GAAG,IAC7B,IAAgB,IAAI,MAAkB,MAGlC,EAAE,MAAM,MAAW,EAAa,GAAU,CAAa,GAEvD,EAAE,MAAM,MAAqB,EACjC;EACE;EACA,OAAO,EACL,KAAK,iBAAiB,EAAoB,UAC5C;EACA,UAAA;EACA,cAAc;CAChB,GACA,EAAE,SAAS,CAAC,EAAE,KAAU,EAAQ,CAAM,GAAG,CAC3C,GAEM,IAAmB,GAAkB,cAAc,eACnD,IAAe,IACjB,EAAyB,EAAoB,EAAO,YAAY,CAAC,IACjE,IAME,IACJ,kBAAA,GAAA,EAAA,UAAA;EACE,kBAAC,KAAD,EAAA,UAAA;GAAG;GACuC;GAAa;EACpD,EAAA,CAAA;EACH,kBAAC,KAAD,EAAA,UAAG,2DAA2D,CAAA;EAC9D,kBAAC,MAAD,EAAA,UAAA,CACE,kBAAC,MAAD,EAAA,UAAA,CAAI,4BAAyB,CAAiB,EAAA,CAAA,GAC9C,kBAAC,MAAD,EAAA,UAAA,CAAI,oCAAiC,CAAiB,EAAA,CAAA,CACpD,EAAA,CAAA;EACJ,kBAAC,KAAD,EAAA,UAAA;GAAG;GAC8D;GAC9D;GAAa;EACb,EAAA,CAAA;CACH,EAAA,CAAA,GAME,IAAiC,0CAA0C,EAAa,qBAExF,IACJ,0BAA0B,EAAa,6FAGnC,IAAqB,GAAG,EAAoB,oBAC5C,IAAsB,GAAG,EAAoB,qBAC7C,IAAuB,GAAG,EAAoB,sBAE9C,IAAkB;EACtB,OAAO;EACP,QAAQ;EACR,IAAI;EACJ,eAAe;CACjB;CAEA,OACE,kBAAC,GAAD;EACE,KAAI,OAAU;GACZ,SAAS;GACT,IAAI;IACH,EAAM,YAAY,KAAK,IAAI,IAAI,EAC9B,GAAG,YACL;EACF;YAEA,kBAAC,GAAD;GACE,WAAW,kBAAC,GAAD,CAAY,CAAA;GACvB,KAAI,OAAU,EACZ,wBAAwB;IACtB,gBAAgB;KACf,EAAM,YAAY,KAAK,IAAI,IAAI,EAC9B,KAAK,MACP;GACF,EACF;aATF;IAWE,kBAAC,GAAD;KAAoB,WAAW,CAAC;KAAQ,SAAS;eAC/C,kBAAC,GAAD;MACE,IAAI,EAAE,OAAO,WAAW;MACxB,SAAS;MACT,oBAAkB;gBAHpB;OAKG;OAAa;OAAY,kBAAC,GAAD,EAAW,QAAQ,GAAQ,UAAY,CAAA;OAAE;OAAI;OACnE,EAAW,EAAM,GAAQ,SAAS,CAAC;OACtC,KAAU,EAAU,CAAM,KACzB,kBAAC,GAAD;QACE,IAAI;QACJ,OAAO;kBAEP,kBAAC,GAAD,EAAa,IAAI,EAAS,CAAA;OACnB,CAAA;MAED;;IACM,CAAA;IACpB,kBAAC,GAAD;KAAoB,WAAW,CAAC;KAAQ,SAAS;eAC/C,kBAAC,GAAD;MACE,IAAI,EAAE,OAAO,WAAW;MACxB,SAAS;MACT,oBAAkB;gBAHpB;OAKG,KAAU,EAAQ,CAAM,IAAI,kBAAkB;OAAa;OAChD,kBAAC,GAAD,EAAW,QAAQ,GAAQ,WAAa,CAAA;OAAC;OAAI;OACxD,EAAW,EAAM,GAAQ,UAAU,CAAC;OACpC,KAAU,EAAQ,CAAM,KACvB,kBAAC,GAAD;QACE,IAAI;QACJ,OAAO;QACP,cAAY;kBAEZ,kBAAC,GAAD,EAAa,IAAI,EAAS,CAAA;OACnB,CAAA;MAED;;IACM,CAAA;IACnB,KACC,kBAAC,GAAD;KACE,IAAI,EAAE,OAAO,WAAW;KACxB,SAAS;KACT,oBAAkB;eAHpB;MAKG;MAAa;MAAkB,EAAW,EAAM,CAAgB,CAAC;MAClE,kBAAC,GAAD;OACE,OAAO;OACP,IAAI;iBAEJ,kBAAC,GAAD,EAAa,IAAI,EAAS,CAAA;MACnB,CAAA;KACC;;GAEH;;CACV,CAAA;AAET"}
1
+ {"version":3,"file":"CreatedByModifiedBy.js","names":[],"sources":["../../../../src/components/entity/page/CreatedByModifiedBy.tsx"],"sourcesContent":["import ConditionalWrapper from '@/components/utils/ConditionalWrapper'\nimport {\n useGetEntity,\n useGetQueryResultBundleWithAsyncStatus,\n} from '@/synapse-queries'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport {\n convertToEntityType,\n entityTypeToFriendlyName,\n isDataset,\n isTable,\n} from '@/utils/functions/EntityTypeUtils'\nimport { BUNDLE_MASK_LAST_UPDATED_ON } from '@/utils/SynapseConstants'\nimport { InfoTwoTone } from '@mui/icons-material'\nimport {\n Box,\n Breadcrumbs,\n Skeleton,\n Tooltip,\n Typography,\n useMediaQuery,\n useTheme,\n} from '@mui/material'\nimport dayjs from 'dayjs'\nimport { UserBadge } from '../../UserCard/UserBadge'\nimport {\n DATASET_CREATED_BY_TOOLTIP,\n INFO_ICON_SX,\n getTableLastRebuiltTooltip,\n getTableModifiedOnAccessibleLabel,\n getTableModifiedOnTooltip,\n} from './createdByModifiedByTooltips'\n\nexport type CreatedByModifiedByProps = {\n entityId: string\n versionNumber?: number\n}\n\nfunction Separator() {\n const theme = useTheme()\n const isSmallScreen = useMediaQuery(theme.breakpoints.down('sm'))\n if (isSmallScreen) {\n return null\n }\n return (\n <Typography variant={'breadcrumb1'} sx={{ color: 'grey.700' }}>\n /\n </Typography>\n )\n}\n\nexport function CreatedByModifiedBy(props: CreatedByModifiedByProps) {\n const { entityId, versionNumber } = props\n const entityIdWithVersion = `${entityId}${\n versionNumber ? `.${versionNumber}` : ''\n }`\n\n const { data: entity } = useGetEntity(entityId, versionNumber)\n\n const { data: tableQueryResult } = useGetQueryResultBundleWithAsyncStatus(\n {\n entityId,\n query: {\n sql: `SELECT * FROM ${entityIdWithVersion} LIMIT 0`,\n },\n partMask: BUNDLE_MASK_LAST_UPDATED_ON,\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n },\n { enabled: !!(entity && isTable(entity)) },\n )\n\n const tableLastRebuilt = tableQueryResult?.responseBody?.lastUpdatedOn\n const friendlyName = entity\n ? entityTypeToFriendlyName(convertToEntityType(entity.concreteType))\n : ''\n\n const createdByTooltipId = `${entityIdWithVersion}-createdByTooltip`\n const modifiedByTooltipId = `${entityIdWithVersion}-modifiedByTooltip`\n const lastUpdatedTooltipId = `${entityIdWithVersion}-lastUpdatedTooltip`\n\n return (\n <Box\n sx={theme => ({\n bgcolor: 'grey.100',\n p: '10px',\n [theme.breakpoints.down('sm')]: {\n p: '24px 40px',\n },\n })}\n >\n <Breadcrumbs\n separator={<Separator />}\n sx={theme => ({\n '& .MuiBreadcrumbs-ol': {\n justifyContent: 'center',\n [theme.breakpoints.down('sm')]: {\n gap: '4px',\n },\n },\n })}\n >\n <ConditionalWrapper condition={!entity} wrapper={Skeleton}>\n <Typography\n sx={{ color: 'grey.700' }}\n variant={'breadcrumb1'}\n aria-describedby={createdByTooltipId}\n >\n {friendlyName} created by <UserBadge userId={entity?.createdBy} />{' '}\n on {formatDate(dayjs(entity?.createdOn))}\n {entity && isDataset(entity) && (\n <Tooltip\n id={createdByTooltipId}\n title={DATASET_CREATED_BY_TOOLTIP}\n >\n <InfoTwoTone sx={INFO_ICON_SX} />\n </Tooltip>\n )}\n </Typography>\n </ConditionalWrapper>\n <ConditionalWrapper condition={!entity} wrapper={Skeleton}>\n <Typography\n sx={{ color: 'grey.700' }}\n variant={'breadcrumb1'}\n aria-describedby={modifiedByTooltipId}\n >\n {entity && isTable(entity) ? 'Configuration' : friendlyName} last\n modified by <UserBadge userId={entity?.modifiedBy} /> on{' '}\n {formatDate(dayjs(entity?.modifiedOn))}\n {entity && isTable(entity) && (\n <Tooltip\n id={modifiedByTooltipId}\n title={getTableModifiedOnTooltip(friendlyName)}\n aria-label={getTableModifiedOnAccessibleLabel(friendlyName)}\n >\n <InfoTwoTone sx={INFO_ICON_SX} />\n </Tooltip>\n )}\n </Typography>\n </ConditionalWrapper>\n {tableLastRebuilt && (\n <Typography\n sx={{ color: 'grey.700' }}\n variant={'breadcrumb1'}\n aria-describedby={lastUpdatedTooltipId}\n >\n {friendlyName} last rebuilt on {formatDate(dayjs(tableLastRebuilt))}\n <Tooltip\n title={getTableLastRebuiltTooltip(friendlyName)}\n id={lastUpdatedTooltipId}\n >\n <InfoTwoTone sx={INFO_ICON_SX} />\n </Tooltip>\n </Typography>\n )}\n </Breadcrumbs>\n </Box>\n )\n}\n\nexport default CreatedByModifiedBy\n"],"mappings":";;;;;;;;;;;;;;AAsCA,SAAS,IAAY;CAMnB,OAJsB,EADR,EACsB,EAAM,YAAY,KAAK,IAAI,CAC3D,IACK,OAGP,kBAAC,GAAD;EAAY,SAAS;EAAe,IAAI,EAAE,OAAO,WAAW;YAAG;CAEnD,CAAA;AAEhB;AAEA,SAAgB,EAAoB,GAAiC;CACnE,IAAM,EAAE,aAAU,qBAAkB,GAC9B,IAAsB,GAAG,IAC7B,IAAgB,IAAI,MAAkB,MAGlC,EAAE,MAAM,MAAW,EAAa,GAAU,CAAa,GAEvD,EAAE,MAAM,MAAqB,EACjC;EACE;EACA,OAAO,EACL,KAAK,iBAAiB,EAAoB,UAC5C;EACA,UAAA;EACA,cAAc;CAChB,GACA,EAAE,SAAS,CAAC,EAAE,KAAU,EAAQ,CAAM,GAAG,CAC3C,GAEM,IAAmB,GAAkB,cAAc,eACnD,IAAe,IACjB,EAAyB,EAAoB,EAAO,YAAY,CAAC,IACjE,IAEE,IAAqB,GAAG,EAAoB,oBAC5C,IAAsB,GAAG,EAAoB,qBAC7C,IAAuB,GAAG,EAAoB;CAEpD,OACE,kBAAC,GAAD;EACE,KAAI,OAAU;GACZ,SAAS;GACT,GAAG;IACF,EAAM,YAAY,KAAK,IAAI,IAAI,EAC9B,GAAG,YACL;EACF;YAEA,kBAAC,GAAD;GACE,WAAW,kBAAC,GAAD,CAAY,CAAA;GACvB,KAAI,OAAU,EACZ,wBAAwB;IACtB,gBAAgB;KACf,EAAM,YAAY,KAAK,IAAI,IAAI,EAC9B,KAAK,MACP;GACF,EACF;aATF;IAWE,kBAAC,GAAD;KAAoB,WAAW,CAAC;KAAQ,SAAS;eAC/C,kBAAC,GAAD;MACE,IAAI,EAAE,OAAO,WAAW;MACxB,SAAS;MACT,oBAAkB;gBAHpB;OAKG;OAAa;OAAY,kBAAC,GAAD,EAAW,QAAQ,GAAQ,UAAY,CAAA;OAAE;OAAI;OACnE,EAAW,EAAM,GAAQ,SAAS,CAAC;OACtC,KAAU,EAAU,CAAM,KACzB,kBAAC,GAAD;QACE,IAAI;QACJ,OAAA;kBAEA,kBAAC,GAAD,EAAa,IAAI,EAAe,CAAA;OACzB,CAAA;MAED;;IACM,CAAA;IACpB,kBAAC,GAAD;KAAoB,WAAW,CAAC;KAAQ,SAAS;eAC/C,kBAAC,GAAD;MACE,IAAI,EAAE,OAAO,WAAW;MACxB,SAAS;MACT,oBAAkB;gBAHpB;OAKG,KAAU,EAAQ,CAAM,IAAI,kBAAkB;OAAa;OAChD,kBAAC,GAAD,EAAW,QAAQ,GAAQ,WAAa,CAAA;OAAC;OAAI;OACxD,EAAW,EAAM,GAAQ,UAAU,CAAC;OACpC,KAAU,EAAQ,CAAM,KACvB,kBAAC,GAAD;QACE,IAAI;QACJ,OAAO,EAA0B,CAAY;QAC7C,cAAY,EAAkC,CAAY;kBAE1D,kBAAC,GAAD,EAAa,IAAI,EAAe,CAAA;OACzB,CAAA;MAED;;IACM,CAAA;IACnB,KACC,kBAAC,GAAD;KACE,IAAI,EAAE,OAAO,WAAW;KACxB,SAAS;KACT,oBAAkB;eAHpB;MAKG;MAAa;MAAkB,EAAW,EAAM,CAAgB,CAAC;MAClE,kBAAC,GAAD;OACE,OAAO,EAA2B,CAAY;OAC9C,IAAI;iBAEJ,kBAAC,GAAD,EAAa,IAAI,EAAe,CAAA;MACzB,CAAA;KACC;;GAEH;;CACV,CAAA;AAET"}
@@ -0,0 +1,7 @@
1
+ import { SxProps } from '@mui/material';
2
+ export declare const DATASET_CREATED_BY_TOOLTIP: string;
3
+ export declare function getTableModifiedOnTooltip(friendlyName: string): import("react/jsx-runtime").JSX.Element;
4
+ export declare function getTableModifiedOnAccessibleLabel(friendlyName: string): string;
5
+ export declare function getTableLastRebuiltTooltip(friendlyName: string): string;
6
+ export declare const INFO_ICON_SX: SxProps;
7
+ //# sourceMappingURL=createdByModifiedByTooltips.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createdByModifiedByTooltips.d.ts","sourceRoot":"","sources":["../../../../src/components/entity/page/createdByModifiedByTooltips.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,eAAO,MAAM,0BAA0B,QAEwF,CAAA;AAE/H,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,2CAiB7D;AAID,wBAAgB,iCAAiC,CAAC,YAAY,EAAE,MAAM,UAErE;AAED,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,MAAM,UAK9D;AAED,eAAO,MAAM,YAAY,EAAE,OAK1B,CAAA"}