synapse-react-client 4.0.1 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/components/EntityDownloadButton/EntityDownloadButton.d.ts +3 -0
  3. package/dist/components/EntityDownloadButton/EntityDownloadButton.d.ts.map +1 -1
  4. package/dist/components/EntityDownloadButton/EntityDownloadButton.js +112 -118
  5. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  6. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.d.ts.map +1 -1
  7. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js +30 -32
  8. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js.map +1 -1
  9. package/dist/components/SynapseHomepageV2/SynapseHomepageSearch.d.ts.map +1 -1
  10. package/dist/components/SynapseHomepageV2/SynapseHomepageSearch.js +27 -30
  11. package/dist/components/SynapseHomepageV2/SynapseHomepageSearch.js.map +1 -1
  12. package/dist/components/SynapseHomepageV2/SynapseSearchChips.d.ts.map +1 -1
  13. package/dist/components/SynapseHomepageV2/SynapseSearchChips.js +14 -17
  14. package/dist/components/SynapseHomepageV2/SynapseSearchChips.js.map +1 -1
  15. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts.map +1 -1
  16. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +90 -91
  17. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
  18. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.d.ts.map +1 -1
  19. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js +66 -64
  20. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js.map +1 -1
  21. package/dist/tsconfig.build.tsbuildinfo +1 -1
  22. package/package.json +4 -4
@@ -1,32 +1,20 @@
1
1
  import { jsxs as i, jsx as t } from "react/jsx-runtime";
2
- import { formatDate as u } from "../../utils/functions/DateFormatter.js";
3
- import { getEndpoint as m, BackendDestinationEnum as c } from "../../utils/functions/getEndpoint.js";
4
- import { useInView as I } from "react-intersection-observer";
5
- import { Update as T, ArticleOutlined as g, InfoOutline as w, DashboardTwoTone as D } from "@mui/icons-material";
6
- import { styled as N, Box as r, Link as s, Chip as S, Stack as C, Typography as n, Paper as M } from "@mui/material";
7
- import O from "dayjs";
8
- import { EntityTypeIcon as E } from "../EntityIcon.js";
9
- import { EntityType as R } from "@sage-bionetworks/synapse-client";
10
- import b from "../favorites/FavoriteButton.js";
11
- import { EntityDownloadButton as L } from "../EntityDownloadButton/EntityDownloadButton.js";
12
- import { HasAccessChip as P } from "./HasAccessChip.js";
13
- import { searchResultsCardChipStyles as B } from "./chipStyles.js";
14
- import a from "./SynapseSearchResultsCard.module.scss.js";
15
- import { calculateFriendlyFileSize as $ } from "../../utils/functions/calculateFriendlyFileSize.js";
16
2
  import "../../synapse-client/SynapseClient.js";
17
3
  import "@sage-bionetworks/synapse-client/generated/models/ErrorResponseCode";
18
4
  import "@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse";
19
5
  import "@sage-bionetworks/synapse-client/util/SynapseClientError";
20
6
  import "@sage-bionetworks/synapse-types";
21
7
  import "../../utils/functions/EntityTypeUtils.js";
8
+ import { getEndpoint as c, BackendDestinationEnum as s } from "../../utils/functions/getEndpoint.js";
22
9
  import "lodash-es";
23
10
  import "@sage-bionetworks/synapse-client/util/synapseClientFetch";
24
11
  import "@tanstack/react-query";
25
12
  import "../../utils/PermissionLevelToAccessType.js";
26
13
  import "../../utils/SynapseConstants.js";
27
- import "react";
14
+ import { useRef as I } from "react";
28
15
  import "../../utils/context/SynapseContext.js";
29
16
  import "use-deep-compare-effect";
17
+ import { styled as T, Box as n, Link as p, Chip as g, Stack as w, Typography as r, Paper as D } from "@mui/material";
30
18
  import "../../utils/hooks/useCookiePreferences.js";
31
19
  import "../../utils/hooks/useSourceAppConfigs.js";
32
20
  import "universal-cookie";
@@ -39,12 +27,24 @@ import "lodash-es/isEmpty";
39
27
  import "lodash-es/isEqual";
40
28
  import "lodash-es/xorWith";
41
29
  import "react-router";
30
+ import { EntityType as N } from "@sage-bionetworks/synapse-client";
42
31
  import "../../utils/types/IsType.js";
43
- import { useGetEntityBundle as k } from "../../synapse-queries/entity/useEntityBundle.js";
44
- import { HighlightedTypography as p } from "./HighlightedTypography.js";
45
- import { markdownToPlainText as z } from "../Markdown/MarkdownUtils.js";
46
- const F = N(
47
- M,
32
+ import { useGetEntityBundle as S } from "../../synapse-queries/entity/useEntityBundle.js";
33
+ import { calculateFriendlyFileSize as C } from "../../utils/functions/calculateFriendlyFileSize.js";
34
+ import { formatDate as M } from "../../utils/functions/DateFormatter.js";
35
+ import { Update as R, ArticleOutlined as O, InfoOutline as E, DashboardTwoTone as b } from "@mui/icons-material";
36
+ import L from "dayjs";
37
+ import { useInView as P } from "react-intersection-observer";
38
+ import { EntityDownloadButton as B } from "../EntityDownloadButton/EntityDownloadButton.js";
39
+ import { EntityTypeIcon as $ } from "../EntityIcon.js";
40
+ import k from "../favorites/FavoriteButton.js";
41
+ import { markdownToPlainText as v } from "../Markdown/MarkdownUtils.js";
42
+ import { searchResultsCardChipStyles as z } from "./chipStyles.js";
43
+ import { HasAccessChip as F } from "./HasAccessChip.js";
44
+ import { HighlightedTypography as y } from "./HighlightedTypography.js";
45
+ import a from "./SynapseSearchResultsCard.module.scss.js";
46
+ const H = T(
47
+ D,
48
48
  {
49
49
  label: "SynapseSearchResultsCardContainer"
50
50
  }
@@ -57,21 +57,21 @@ const F = N(
57
57
  padding: "32px",
58
58
  gap: "15px"
59
59
  });
60
- function Re(e) {
61
- const { ref: y, inView: h } = I({
60
+ function Le(e) {
61
+ const o = I(null), { ref: f, inView: h } = P({
62
62
  triggerOnce: !0,
63
63
  rootMargin: "250px 0px"
64
- }), { data: x } = k(
64
+ }), { data: x } = S(
65
65
  e.entityId,
66
66
  void 0,
67
67
  { includeFileHandles: !0 },
68
- { enabled: e.entityType === R.file && h }
69
- ), o = x?.fileHandles.find(
70
- (f) => f.isPreview !== !0
71
- ), d = o?.contentSize ? $(o?.contentSize) : "", l = e.description ? z(e.description) : "";
72
- return /* @__PURE__ */ i(F, { ref: y, children: [
68
+ { enabled: e.entityType === N.file && h }
69
+ ), d = x?.fileHandles.find(
70
+ (u) => u.isPreview !== !0
71
+ ), l = d?.contentSize ? C(d?.contentSize) : "", m = e.description ? v(e.description) : "";
72
+ return /* @__PURE__ */ i(H, { ref: f, children: [
73
73
  /* @__PURE__ */ i(
74
- r,
74
+ n,
75
75
  {
76
76
  sx: {
77
77
  display: "flex",
@@ -81,17 +81,17 @@ function Re(e) {
81
81
  },
82
82
  children: [
83
83
  /* @__PURE__ */ t(
84
- s,
84
+ p,
85
85
  {
86
- href: `${m(
87
- c.PORTAL_ENDPOINT
86
+ href: `${c(
87
+ s.PORTAL_ENDPOINT
88
88
  )}Synapse:${e.entityId}`,
89
89
  sx: {
90
90
  textDecoration: "underline 2px",
91
91
  textUnderlineOffset: "9px"
92
92
  },
93
93
  children: /* @__PURE__ */ t(
94
- p,
94
+ y,
95
95
  {
96
96
  className: a.cardTitle,
97
97
  variant: "headline3",
@@ -102,7 +102,7 @@ function Re(e) {
102
102
  }
103
103
  ),
104
104
  /* @__PURE__ */ i(
105
- r,
105
+ n,
106
106
  {
107
107
  sx: {
108
108
  display: "flex",
@@ -110,13 +110,14 @@ function Re(e) {
110
110
  alignItems: "center"
111
111
  },
112
112
  children: [
113
- /* @__PURE__ */ t(b, { entityId: e.entityId }),
113
+ /* @__PURE__ */ t(k, { entityId: e.entityId }),
114
114
  /* @__PURE__ */ t(
115
- L,
115
+ B,
116
116
  {
117
117
  entityId: e.entityId,
118
118
  name: e.name,
119
- entityType: e.entityType
119
+ entityType: e.entityType,
120
+ downloadConfirmationContainer: o
120
121
  }
121
122
  )
122
123
  ]
@@ -125,8 +126,9 @@ function Re(e) {
125
126
  ]
126
127
  }
127
128
  ),
129
+ /* @__PURE__ */ t("div", { ref: o }),
128
130
  /* @__PURE__ */ i(
129
- r,
131
+ n,
130
132
  {
131
133
  sx: {
132
134
  display: "flex",
@@ -134,10 +136,10 @@ function Re(e) {
134
136
  },
135
137
  children: [
136
138
  /* @__PURE__ */ t(
137
- S,
139
+ g,
138
140
  {
139
141
  icon: /* @__PURE__ */ t(
140
- E,
142
+ $,
141
143
  {
142
144
  type: e.entityType,
143
145
  wrap: !1,
@@ -145,59 +147,59 @@ function Re(e) {
145
147
  }
146
148
  ),
147
149
  label: e.entityType,
148
- sx: { ...B }
150
+ sx: { ...z }
149
151
  }
150
152
  ),
151
- /* @__PURE__ */ t(P, { entityId: e.entityId })
153
+ /* @__PURE__ */ t(F, { entityId: e.entityId })
152
154
  ]
153
155
  }
154
156
  ),
155
157
  /* @__PURE__ */ t(
156
- r,
158
+ n,
157
159
  {
158
160
  sx: {
159
161
  display: "flex",
160
162
  flexDirection: "row",
161
163
  gap: "8px"
162
164
  },
163
- children: /* @__PURE__ */ i(C, { sx: { gap: "20px", minWidth: 0, width: "100%" }, children: [
164
- /* @__PURE__ */ i(r, { sx: { display: "flex" }, children: [
165
- /* @__PURE__ */ t(T, { className: a.cardMetadataIcon }),
166
- /* @__PURE__ */ i(n, { className: a.cardMetadataTypographyWithIcon, children: [
165
+ children: /* @__PURE__ */ i(w, { sx: { gap: "20px", minWidth: 0, width: "100%" }, children: [
166
+ /* @__PURE__ */ i(n, { sx: { display: "flex" }, children: [
167
+ /* @__PURE__ */ t(R, { className: a.cardMetadataIcon }),
168
+ /* @__PURE__ */ i(r, { className: a.cardMetadataTypographyWithIcon, children: [
167
169
  "Last updated:",
168
170
  " ",
169
- u(O.unix(e.modifiedOn), "M/D/YYYY")
171
+ M(L.unix(e.modifiedOn), "M/D/YYYY")
170
172
  ] })
171
173
  ] }),
172
- l && /* @__PURE__ */ i(r, { sx: { display: "flex" }, children: [
173
- /* @__PURE__ */ t(g, { className: a.cardMetadataIcon }),
174
+ m && /* @__PURE__ */ i(n, { sx: { display: "flex" }, children: [
175
+ /* @__PURE__ */ t(O, { className: a.cardMetadataIcon }),
174
176
  /* @__PURE__ */ t(
175
- p,
177
+ y,
176
178
  {
177
179
  className: `${a.cardMetadataTypographyWithIcon} ${a.cardDescription}`,
178
- text: l,
180
+ text: m,
179
181
  searchTerms: e.searchTerms ?? []
180
182
  }
181
183
  )
182
184
  ] }),
183
- d && /* @__PURE__ */ i(r, { sx: { display: "flex" }, children: [
184
- /* @__PURE__ */ t(w, { className: a.cardMetadataIcon }),
185
- /* @__PURE__ */ i(n, { className: a.cardMetadataTypographyWithIcon, children: [
185
+ l && /* @__PURE__ */ i(n, { sx: { display: "flex" }, children: [
186
+ /* @__PURE__ */ t(E, { className: a.cardMetadataIcon }),
187
+ /* @__PURE__ */ i(r, { className: a.cardMetadataTypographyWithIcon, children: [
186
188
  "File size: ",
187
- /* @__PURE__ */ t("b", { children: d })
189
+ /* @__PURE__ */ t("b", { children: l })
188
190
  ] })
189
191
  ] }),
190
192
  e.locatedIn && /* @__PURE__ */ i(
191
- r,
193
+ n,
192
194
  {
193
195
  sx: { display: "flex", marginLeft: "24px", alignItems: "center" },
194
196
  children: [
195
- /* @__PURE__ */ i(n, { className: a.cardMetadataTypographyWithIcon, children: [
197
+ /* @__PURE__ */ i(r, { className: a.cardMetadataTypographyWithIcon, children: [
196
198
  "Located in:",
197
199
  " "
198
200
  ] }),
199
201
  /* @__PURE__ */ t(
200
- D,
202
+ b,
201
203
  {
202
204
  className: a.cardMetadataIcon,
203
205
  sx: {
@@ -206,11 +208,11 @@ function Re(e) {
206
208
  }
207
209
  ),
208
210
  /* @__PURE__ */ t(
209
- s,
211
+ p,
210
212
  {
211
213
  className: a.locatedInLink,
212
- href: `${m(
213
- c.PORTAL_ENDPOINT
214
+ href: `${c(
215
+ s.PORTAL_ENDPOINT
214
216
  )}Synapse:${e.locatedIn?.id}`,
215
217
  children: e.locatedIn?.name
216
218
  }
@@ -224,7 +226,7 @@ function Re(e) {
224
226
  ] });
225
227
  }
226
228
  export {
227
- Re as SynapseSearchResultsCard,
228
- Re as default
229
+ Le as SynapseSearchResultsCard,
230
+ Le as default
229
231
  };
230
232
  //# sourceMappingURL=SynapseSearchResultsCard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SynapseSearchResultsCard.js","sources":["../../../src/components/SynapseSearchPageResults/SynapseSearchResultsCard.tsx"],"sourcesContent":["import { formatDate } from '@/utils/functions/DateFormatter'\nimport {\n BackendDestinationEnum,\n getEndpoint,\n} from '@/utils/functions/getEndpoint'\nimport { useInView } from 'react-intersection-observer'\nimport { StyledComponent } from '@emotion/styled'\nimport {\n ArticleOutlined,\n DashboardTwoTone,\n InfoOutline,\n Update as UpdateIcon,\n} from '@mui/icons-material'\nimport {\n Box,\n Chip,\n Link,\n Paper,\n PaperProps,\n Stack,\n styled,\n Typography,\n} from '@mui/material'\nimport dayjs from 'dayjs'\nimport { EntityTypeIcon } from '../EntityIcon'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport FavoriteButton from '../favorites/FavoriteButton'\nimport { EntityDownloadButton } from '../EntityDownloadButton/EntityDownloadButton'\nimport HasAccessChip from './HasAccessChip'\nimport { searchResultsCardChipStyles } from './chipStyles'\nimport styles from './SynapseSearchResultsCard.module.scss'\nimport { calculateFriendlyFileSize } from '@/utils/functions/calculateFriendlyFileSize'\nimport { useGetEntityBundle } from '@/synapse-queries'\nimport { FileHandleWithPreview } from '../EntityFinder/details/view/table/TableCellTypes'\nimport { HighlightedTypography } from './HighlightedTypography'\nimport { markdownToPlainText } from '../Markdown/MarkdownUtils'\n\nexport type SynapseSearchResultsCardProps = {\n entityId: string\n name: string\n description?: string\n entityType: EntityType\n modifiedOn: number\n locatedIn?: { name: string; id: string }\n searchTerms?: string[]\n}\n\nconst SynapseSearchResultsCardContainer: StyledComponent<PaperProps> = styled(\n Paper,\n {\n label: 'SynapseSearchResultsCardContainer',\n },\n)({\n display: 'flex',\n flexDirection: 'column',\n minHeight: '250px',\n width: '100%',\n borderRadius: '10px',\n padding: '32px',\n gap: '15px',\n})\n\nexport function SynapseSearchResultsCard(props: SynapseSearchResultsCardProps) {\n const { ref, inView } = useInView({\n triggerOnce: true,\n rootMargin: '250px 0px',\n })\n\n const { data: entityBundle } = useGetEntityBundle(\n props.entityId,\n undefined,\n { includeFileHandles: true },\n { enabled: props.entityType === EntityType.file && inView },\n )\n\n const file = entityBundle?.fileHandles.find(\n (file: FileHandleWithPreview) => file.isPreview !== true,\n )\n\n const friendlySize = file?.contentSize\n ? calculateFriendlyFileSize(file?.contentSize)\n : ''\n\n const plainDescription = props.description\n ? markdownToPlainText(props.description)\n : ''\n\n return (\n <SynapseSearchResultsCardContainer ref={ref}>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n width: '100%',\n }}\n >\n <Link\n href={`${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}Synapse:${props.entityId}`}\n sx={{\n textDecoration: 'underline 2px',\n textUnderlineOffset: '9px',\n }}\n >\n <HighlightedTypography\n className={styles.cardTitle}\n variant=\"headline3\"\n text={props.name}\n searchTerms={props.searchTerms ?? []}\n />\n </Link>\n\n <Box\n sx={{\n display: 'flex',\n gap: '16px',\n alignItems: 'center',\n }}\n >\n <FavoriteButton entityId={props.entityId} />\n <EntityDownloadButton\n entityId={props.entityId}\n name={props.name}\n entityType={props.entityType}\n />\n </Box>\n </Box>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n }}\n >\n <Chip\n icon={\n <EntityTypeIcon\n type={props.entityType}\n wrap={false}\n sx={{ color: '#265149', width: '18px' }}\n />\n }\n label={props.entityType}\n sx={{ ...searchResultsCardChipStyles }}\n />\n <HasAccessChip entityId={props.entityId} />\n </Box>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n gap: '8px',\n }}\n >\n <Stack sx={{ gap: '20px', minWidth: 0, width: '100%' }}>\n <Box sx={{ display: 'flex' }}>\n <UpdateIcon className={styles.cardMetadataIcon} />\n <Typography className={styles.cardMetadataTypographyWithIcon}>\n Last updated:{' '}\n {formatDate(dayjs.unix(props.modifiedOn), 'M/D/YYYY')}\n </Typography>\n </Box>\n {plainDescription && (\n <Box sx={{ display: 'flex' }}>\n <ArticleOutlined className={styles.cardMetadataIcon} />\n <HighlightedTypography\n className={`${styles.cardMetadataTypographyWithIcon} ${styles.cardDescription}`}\n text={plainDescription}\n searchTerms={props.searchTerms ?? []}\n />\n </Box>\n )}\n\n {friendlySize && (\n <Box sx={{ display: 'flex' }}>\n <InfoOutline className={styles.cardMetadataIcon} />\n <Typography className={styles.cardMetadataTypographyWithIcon}>\n File size: <b>{friendlySize}</b>\n </Typography>\n </Box>\n )}\n {props.locatedIn && (\n <Box\n sx={{ display: 'flex', marginLeft: '24px', alignItems: 'center' }}\n >\n <Typography className={styles.cardMetadataTypographyWithIcon}>\n Located in:{' '}\n </Typography>\n <DashboardTwoTone\n className={styles.cardMetadataIcon}\n sx={{\n marginRight: '4px',\n }}\n />\n <Link\n className={styles.locatedInLink}\n href={`${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}Synapse:${props.locatedIn?.id}`}\n >\n {props.locatedIn?.name}\n </Link>\n </Box>\n )}\n </Stack>\n </Box>\n </SynapseSearchResultsCardContainer>\n )\n}\n\nexport default SynapseSearchResultsCard\n"],"names":["SynapseSearchResultsCardContainer","styled","Paper","SynapseSearchResultsCard","props","ref","inView","useInView","entityBundle","useGetEntityBundle","EntityType","file","friendlySize","calculateFriendlyFileSize","plainDescription","markdownToPlainText","jsxs","Box","jsx","Link","getEndpoint","BackendDestinationEnum","HighlightedTypography","styles","FavoriteButton","EntityDownloadButton","Chip","EntityTypeIcon","searchResultsCardChipStyles","HasAccessChip","Stack","UpdateIcon","Typography","formatDate","dayjs","ArticleOutlined","InfoOutline","DashboardTwoTone"],"mappings":"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"}
1
+ {"version":3,"file":"SynapseSearchResultsCard.js","sources":["../../../src/components/SynapseSearchPageResults/SynapseSearchResultsCard.tsx"],"sourcesContent":["import { useGetEntityBundle } from '@/synapse-queries'\nimport { calculateFriendlyFileSize } from '@/utils/functions/calculateFriendlyFileSize'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport {\n BackendDestinationEnum,\n getEndpoint,\n} from '@/utils/functions/getEndpoint'\nimport { StyledComponent } from '@emotion/styled'\nimport {\n ArticleOutlined,\n DashboardTwoTone,\n InfoOutline,\n Update as UpdateIcon,\n} from '@mui/icons-material'\nimport {\n Box,\n Chip,\n Link,\n Paper,\n PaperProps,\n Stack,\n styled,\n Typography,\n} from '@mui/material'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport dayjs from 'dayjs'\nimport { useRef } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport { EntityDownloadButton } from '../EntityDownloadButton/EntityDownloadButton'\nimport { FileHandleWithPreview } from '../EntityFinder/details/view/table/TableCellTypes'\nimport { EntityTypeIcon } from '../EntityIcon'\nimport FavoriteButton from '../favorites/FavoriteButton'\nimport { markdownToPlainText } from '../Markdown/MarkdownUtils'\nimport { searchResultsCardChipStyles } from './chipStyles'\nimport HasAccessChip from './HasAccessChip'\nimport { HighlightedTypography } from './HighlightedTypography'\nimport styles from './SynapseSearchResultsCard.module.scss'\n\nexport type SynapseSearchResultsCardProps = {\n entityId: string\n name: string\n description?: string\n entityType: EntityType\n modifiedOn: number\n locatedIn?: { name: string; id: string }\n searchTerms?: string[]\n}\n\nconst SynapseSearchResultsCardContainer: StyledComponent<PaperProps> = styled(\n Paper,\n {\n label: 'SynapseSearchResultsCardContainer',\n },\n)({\n display: 'flex',\n flexDirection: 'column',\n minHeight: '250px',\n width: '100%',\n borderRadius: '10px',\n padding: '32px',\n gap: '15px',\n})\n\nexport function SynapseSearchResultsCard(props: SynapseSearchResultsCardProps) {\n const downloadConfirmationRef = useRef<HTMLDivElement>(null)\n\n const { ref, inView } = useInView({\n triggerOnce: true,\n rootMargin: '250px 0px',\n })\n\n const { data: entityBundle } = useGetEntityBundle(\n props.entityId,\n undefined,\n { includeFileHandles: true },\n { enabled: props.entityType === EntityType.file && inView },\n )\n\n const file = entityBundle?.fileHandles.find(\n (file: FileHandleWithPreview) => file.isPreview !== true,\n )\n\n const friendlySize = file?.contentSize\n ? calculateFriendlyFileSize(file?.contentSize)\n : ''\n\n const plainDescription = props.description\n ? markdownToPlainText(props.description)\n : ''\n\n return (\n <SynapseSearchResultsCardContainer ref={ref}>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n width: '100%',\n }}\n >\n <Link\n href={`${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}Synapse:${props.entityId}`}\n sx={{\n textDecoration: 'underline 2px',\n textUnderlineOffset: '9px',\n }}\n >\n <HighlightedTypography\n className={styles.cardTitle}\n variant=\"headline3\"\n text={props.name}\n searchTerms={props.searchTerms ?? []}\n />\n </Link>\n\n <Box\n sx={{\n display: 'flex',\n gap: '16px',\n alignItems: 'center',\n }}\n >\n <FavoriteButton entityId={props.entityId} />\n <EntityDownloadButton\n entityId={props.entityId}\n name={props.name}\n entityType={props.entityType}\n downloadConfirmationContainer={downloadConfirmationRef}\n />\n </Box>\n </Box>\n {/* Portal target for EntityDownloadButton's download confirmation dialog */}\n <div ref={downloadConfirmationRef} />\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n }}\n >\n <Chip\n icon={\n <EntityTypeIcon\n type={props.entityType}\n wrap={false}\n sx={{ color: '#265149', width: '18px' }}\n />\n }\n label={props.entityType}\n sx={{ ...searchResultsCardChipStyles }}\n />\n <HasAccessChip entityId={props.entityId} />\n </Box>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n gap: '8px',\n }}\n >\n <Stack sx={{ gap: '20px', minWidth: 0, width: '100%' }}>\n <Box sx={{ display: 'flex' }}>\n <UpdateIcon className={styles.cardMetadataIcon} />\n <Typography className={styles.cardMetadataTypographyWithIcon}>\n Last updated:{' '}\n {formatDate(dayjs.unix(props.modifiedOn), 'M/D/YYYY')}\n </Typography>\n </Box>\n {plainDescription && (\n <Box sx={{ display: 'flex' }}>\n <ArticleOutlined className={styles.cardMetadataIcon} />\n <HighlightedTypography\n className={`${styles.cardMetadataTypographyWithIcon} ${styles.cardDescription}`}\n text={plainDescription}\n searchTerms={props.searchTerms ?? []}\n />\n </Box>\n )}\n\n {friendlySize && (\n <Box sx={{ display: 'flex' }}>\n <InfoOutline className={styles.cardMetadataIcon} />\n <Typography className={styles.cardMetadataTypographyWithIcon}>\n File size: <b>{friendlySize}</b>\n </Typography>\n </Box>\n )}\n {props.locatedIn && (\n <Box\n sx={{ display: 'flex', marginLeft: '24px', alignItems: 'center' }}\n >\n <Typography className={styles.cardMetadataTypographyWithIcon}>\n Located in:{' '}\n </Typography>\n <DashboardTwoTone\n className={styles.cardMetadataIcon}\n sx={{\n marginRight: '4px',\n }}\n />\n <Link\n className={styles.locatedInLink}\n href={`${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}Synapse:${props.locatedIn?.id}`}\n >\n {props.locatedIn?.name}\n </Link>\n </Box>\n )}\n </Stack>\n </Box>\n </SynapseSearchResultsCardContainer>\n )\n}\n\nexport default SynapseSearchResultsCard\n"],"names":["SynapseSearchResultsCardContainer","styled","Paper","SynapseSearchResultsCard","props","downloadConfirmationRef","useRef","ref","inView","useInView","entityBundle","useGetEntityBundle","EntityType","file","friendlySize","calculateFriendlyFileSize","plainDescription","markdownToPlainText","jsxs","Box","jsx","Link","getEndpoint","BackendDestinationEnum","HighlightedTypography","styles","FavoriteButton","EntityDownloadButton","Chip","EntityTypeIcon","searchResultsCardChipStyles","HasAccessChip","Stack","UpdateIcon","Typography","formatDate","dayjs","ArticleOutlined","InfoOutline","DashboardTwoTone"],"mappings":"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"}