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.
- package/dist/SWC.index.js +1 -1
- package/dist/assets/icons/curie-head.svg +21 -0
- package/dist/components/AccessRequirementList/AccessRequirementList.d.ts +24 -2
- package/dist/components/AccessRequirementList/AccessRequirementList.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementList.js +108 -106
- package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js +26 -25
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts +6 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js +55 -54
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js.map +1 -1
- package/dist/components/DraggableDialog/DraggableDialog.d.ts +2 -1
- package/dist/components/DraggableDialog/DraggableDialog.d.ts.map +1 -1
- package/dist/components/DraggableDialog/DraggableDialog.js +42 -33
- package/dist/components/DraggableDialog/DraggableDialog.js.map +1 -1
- package/dist/components/EntityTreeTable/hooks/useTableColumns.d.ts.map +1 -1
- package/dist/components/EntityTreeTable/hooks/useTableColumns.js +12 -6
- package/dist/components/EntityTreeTable/hooks/useTableColumns.js.map +1 -1
- package/dist/components/ExperimentalMode/ExperimentalMode.js +2 -1
- package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts.map +1 -1
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js +64 -55
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
- package/dist/components/StorybookComponentWrapper.d.ts.map +1 -1
- package/dist/components/StorybookComponentWrapper.js +15 -10
- package/dist/components/StorybookComponentWrapper.js.map +1 -1
- package/dist/components/SynapseChat/GridAgentChat.js +6 -6
- package/dist/components/SynapseChat/SynapseChat.d.ts +2 -1
- package/dist/components/SynapseChat/SynapseChat.d.ts.map +1 -1
- package/dist/components/SynapseChat/SynapseChat.js +118 -74
- package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
- package/dist/components/SynapseChat/SynapseChatInteraction.d.ts +3 -1
- package/dist/components/SynapseChat/SynapseChatInteraction.d.ts.map +1 -1
- package/dist/components/SynapseChat/SynapseChatInteraction.js +21 -21
- package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
- package/dist/components/SynapseChat/SynapseChatMessage.d.ts +1 -0
- package/dist/components/SynapseChat/SynapseChatMessage.d.ts.map +1 -1
- package/dist/components/SynapseChat/SynapseChatMessage.js +9 -8
- package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
- package/dist/components/SynapseChat/SynapsePortalChatDialog.d.ts.map +1 -1
- package/dist/components/SynapseChat/SynapsePortalChatDialog.js +2 -1
- package/dist/components/SynapseChat/SynapsePortalChatDialog.js.map +1 -1
- package/dist/components/TanStackTable/TanStackTableUtils.d.ts.map +1 -1
- package/dist/components/TanStackTable/TanStackTableUtils.js +6 -6
- package/dist/components/TanStackTable/TanStackTableUtils.js.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts +12 -0
- package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts.map +1 -0
- package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js +84 -0
- package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js.map +1 -0
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.d.ts.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.js +20 -18
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.js.map +1 -1
- package/dist/components/entity/page/CreatedByModifiedBy.d.ts.map +1 -1
- package/dist/components/entity/page/CreatedByModifiedBy.js +43 -61
- package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
- package/dist/components/entity/page/createdByModifiedByTooltips.d.ts +7 -0
- package/dist/components/entity/page/createdByModifiedByTooltips.d.ts.map +1 -0
- package/dist/components/entity/page/createdByModifiedByTooltips.js +36 -0
- package/dist/components/entity/page/createdByModifiedByTooltips.js.map +1 -0
- package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.d.ts.map +1 -1
- package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js +130 -65
- package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
- package/dist/components/widgets/Range.js +8 -2
- package/dist/components/widgets/Range.js.map +1 -1
- package/dist/components/widgets/query-filter/RangeFacetFilter.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/RangeFacetFilter.js +2 -1
- package/dist/components/widgets/query-filter/RangeFacetFilter.js.map +1 -1
- package/dist/components/widgets/query-filter/RangeFacetFilterUI.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/RangeFacetFilterUI.js +19 -19
- package/dist/components/widgets/query-filter/RangeFacetFilterUI.js.map +1 -1
- package/dist/mocks/msw/handlers/fileHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/fileHandlers.js +22 -22
- package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/userProfileHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/userProfileHandlers.js +36 -36
- package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
- package/dist/mocks/user/mock_user_profile.d.ts +1 -0
- package/dist/mocks/user/mock_user_profile.d.ts.map +1 -1
- package/dist/mocks/user/mock_user_profile.js +45 -45
- package/dist/mocks/user/mock_user_profile.js.map +1 -1
- package/dist/synapse-queries/KeyFactory.d.ts +1 -0
- package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
- package/dist/synapse-queries/KeyFactory.js +3 -0
- package/dist/synapse-queries/KeyFactory.js.map +1 -1
- package/dist/synapse-queries/dataaccess/index.js +4 -4
- package/dist/synapse-queries/dataaccess/useEDuc.d.ts +13 -1
- package/dist/synapse-queries/dataaccess/useEDuc.d.ts.map +1 -1
- package/dist/synapse-queries/dataaccess/useEDuc.js +67 -49
- package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
- package/dist/synapse-queries/index.js +185 -184
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/APIConstants.d.ts +1 -0
- package/dist/utils/APIConstants.d.ts.map +1 -1
- package/dist/utils/APIConstants.js +2 -2
- package/dist/utils/APIConstants.js.map +1 -1
- package/dist/utils/AppUtils/session/ApplicationSessionManager.d.ts.map +1 -1
- package/dist/utils/AppUtils/session/ApplicationSessionManager.js +20 -19
- package/dist/utils/AppUtils/session/ApplicationSessionManager.js.map +1 -1
- package/dist/utils/featureflag/FeatureFlags.d.ts +1 -0
- package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -1
- package/dist/utils/featureflag/FeatureFlags.js +1 -1
- package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
- package/dist/utils/functions/RegularExpressions.d.ts +7 -0
- package/dist/utils/functions/RegularExpressions.d.ts.map +1 -1
- package/dist/utils/functions/RegularExpressions.js +5 -4
- package/dist/utils/functions/RegularExpressions.js.map +1 -1
- package/dist/utils/hooks/useIsHydrated.d.ts +9 -0
- package/dist/utils/hooks/useIsHydrated.d.ts.map +1 -0
- package/dist/utils/hooks/useIsHydrated.js +10 -0
- package/dist/utils/hooks/useIsHydrated.js.map +1 -0
- 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,
|
|
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,
|
|
24
|
-
let t = e.fileHandleId, n =
|
|
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
|
-
}) ??
|
|
30
|
+
}) ?? m;
|
|
31
31
|
return /* @__PURE__ */ o(t, {
|
|
32
32
|
agentAvatar: c,
|
|
33
33
|
userAvatar: l,
|
|
34
34
|
userMessage: r,
|
|
35
|
-
chatResponseText:
|
|
36
|
-
chatResponseTrace:
|
|
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
|
-
|
|
43
|
-
|
|
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;
|
|
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,
|
|
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;
|
|
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,
|
|
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:
|
|
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:
|
|
16
|
-
position:
|
|
15
|
+
opacity: .95,
|
|
16
|
+
position: "sticky",
|
|
17
17
|
width: e.getSize(),
|
|
18
|
-
zIndex:
|
|
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:
|
|
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
|
package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts.map
ADDED
|
@@ -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
|
package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js.map
ADDED
|
@@ -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'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"}
|
package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserAccessRequestHistoryPage.d.ts","sourceRoot":"","sources":["../../../../src/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.tsx"],"names":[],"mappings":"
|
|
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 {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import l from "
|
|
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
|
|
7
|
-
function
|
|
8
|
-
return /* @__PURE__ */
|
|
7
|
+
var d = [];
|
|
8
|
+
function f() {
|
|
9
|
+
return /* @__PURE__ */ l(a, {
|
|
9
10
|
sx: { gap: 2 },
|
|
10
11
|
children: [
|
|
11
|
-
/* @__PURE__ */
|
|
12
|
+
/* @__PURE__ */ c(o, {
|
|
12
13
|
variant: "headline1",
|
|
13
14
|
gutterBottom: !0,
|
|
14
15
|
children: "History of your access requests"
|
|
15
16
|
}),
|
|
16
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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
|
-
|
|
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__ */
|
|
31
|
+
}), /* @__PURE__ */ c("div", { children: d.map((e) => /* @__PURE__ */ l(n, {
|
|
31
32
|
sx: { p: 1 },
|
|
32
|
-
children: [/* @__PURE__ */
|
|
33
|
-
expandIcon: /* @__PURE__ */
|
|
34
|
-
children: /* @__PURE__ */
|
|
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__ */
|
|
39
|
+
}), /* @__PURE__ */ c(r, { children: e.details })]
|
|
39
40
|
}, e.summary)) })] }),
|
|
40
|
-
/* @__PURE__ */
|
|
41
|
+
/* @__PURE__ */ c(e, {}),
|
|
42
|
+
/* @__PURE__ */ c(t, {})
|
|
41
43
|
]
|
|
42
44
|
});
|
|
43
45
|
}
|
|
44
46
|
//#endregion
|
|
45
|
-
export {
|
|
47
|
+
export { f as UserAccessRequestHistoryPage };
|
|
46
48
|
|
|
47
49
|
//# sourceMappingURL=UserAccessRequestHistoryPage.js.map
|
package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.js.map
CHANGED
|
@@ -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'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 "Approved".\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":"
|
|
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'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 "Approved".\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":"
|
|
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 {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import
|
|
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
|
|
15
|
-
return
|
|
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
|
|
22
|
-
let { entityId:
|
|
23
|
-
entityId:
|
|
24
|
-
query: { sql: `SELECT * FROM ${
|
|
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: !!(
|
|
28
|
-
|
|
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
|
-
|
|
32
|
+
p: "10px",
|
|
51
33
|
[e.breakpoints.down("sm")]: { p: "24px 40px" }
|
|
52
34
|
}),
|
|
53
|
-
children: /* @__PURE__ */
|
|
54
|
-
separator: /* @__PURE__ */
|
|
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__ */
|
|
61
|
-
condition: !
|
|
62
|
-
wrapper:
|
|
63
|
-
children: /* @__PURE__ */
|
|
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
|
-
|
|
50
|
+
A,
|
|
69
51
|
" created by ",
|
|
70
|
-
/* @__PURE__ */
|
|
52
|
+
/* @__PURE__ */ b(c, { userId: D?.createdBy }),
|
|
71
53
|
" ",
|
|
72
54
|
"on ",
|
|
73
|
-
o(
|
|
74
|
-
|
|
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__ */
|
|
59
|
+
children: /* @__PURE__ */ b(S, { sx: l })
|
|
78
60
|
})
|
|
79
61
|
]
|
|
80
62
|
})
|
|
81
63
|
}),
|
|
82
|
-
/* @__PURE__ */
|
|
83
|
-
condition: !
|
|
84
|
-
wrapper:
|
|
85
|
-
children: /* @__PURE__ */
|
|
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
|
-
|
|
72
|
+
D && r(D) ? "Configuration" : A,
|
|
91
73
|
" last modified by ",
|
|
92
|
-
/* @__PURE__ */
|
|
74
|
+
/* @__PURE__ */ b(c, { userId: D?.modifiedBy }),
|
|
93
75
|
" on",
|
|
94
76
|
" ",
|
|
95
|
-
o(
|
|
96
|
-
|
|
77
|
+
o(C(D?.modifiedOn)),
|
|
78
|
+
D && r(D) && /* @__PURE__ */ b(g, {
|
|
97
79
|
id: M,
|
|
98
|
-
title:
|
|
99
|
-
"aria-label":
|
|
100
|
-
children: /* @__PURE__ */
|
|
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
|
-
|
|
87
|
+
k && /* @__PURE__ */ x(_, {
|
|
106
88
|
sx: { color: "grey.700" },
|
|
107
89
|
variant: "breadcrumb1",
|
|
108
90
|
"aria-describedby": N,
|
|
109
91
|
children: [
|
|
110
|
-
|
|
92
|
+
A,
|
|
111
93
|
" last rebuilt on ",
|
|
112
|
-
o(
|
|
113
|
-
/* @__PURE__ */
|
|
114
|
-
title: A,
|
|
94
|
+
o(C(k)),
|
|
95
|
+
/* @__PURE__ */ b(g, {
|
|
96
|
+
title: u(A),
|
|
115
97
|
id: N,
|
|
116
|
-
children: /* @__PURE__ */
|
|
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 {
|
|
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
|
|
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"}
|