@drodil/backstage-plugin-qeta-react 3.56.0 → 3.57.0
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/components/CollectionsContainer/CollectionsContainer.esm.js +2 -1
- package/dist/components/CollectionsContainer/CollectionsContainer.esm.js.map +1 -1
- package/dist/components/FaviconItem/FaviconItem.esm.js +20 -13
- package/dist/components/FaviconItem/FaviconItem.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedCollectionsList.esm.js +60 -18
- package/dist/components/FollowedLists/FollowedCollectionsList.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedEntitiesList.esm.js +46 -18
- package/dist/components/FollowedLists/FollowedEntitiesList.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedTagsList.esm.js +44 -18
- package/dist/components/FollowedLists/FollowedTagsList.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedUsersList.esm.js +56 -26
- package/dist/components/FollowedLists/FollowedUsersList.esm.js.map +1 -1
- package/dist/components/Links/Links.esm.js +27 -18
- package/dist/components/Links/Links.esm.js.map +1 -1
- package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js +4 -2
- package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js.map +1 -1
- package/dist/components/PostHighlightList/PostHighlightList.esm.js +23 -144
- package/dist/components/PostHighlightList/PostHighlightList.esm.js.map +1 -1
- package/dist/components/PostsContainer/PostsGridItem.esm.js +6 -11
- package/dist/components/PostsContainer/PostsGridItem.esm.js.map +1 -1
- package/dist/components/TagsAndEntities/EntityChip.esm.js +42 -109
- package/dist/components/TagsAndEntities/EntityChip.esm.js.map +1 -1
- package/dist/components/TagsAndEntities/TagChip.esm.js +56 -118
- package/dist/components/TagsAndEntities/TagChip.esm.js.map +1 -1
- package/dist/components/TagsContainer/EditTagModal.esm.js.map +1 -1
- package/dist/components/TagsContainer/TagsContainer.esm.js +2 -1
- package/dist/components/TagsContainer/TagsContainer.esm.js.map +1 -1
- package/dist/components/Timeline/TimelineItem.esm.js +54 -2
- package/dist/components/Timeline/TimelineItem.esm.js.map +1 -1
- package/dist/components/Tooltips/CollectionTooltip.esm.js +151 -0
- package/dist/components/Tooltips/CollectionTooltip.esm.js.map +1 -0
- package/dist/components/Tooltips/EntityTooltip.esm.js +188 -0
- package/dist/components/Tooltips/EntityTooltip.esm.js.map +1 -0
- package/dist/components/Tooltips/PostTooltip.esm.js +257 -0
- package/dist/components/Tooltips/PostTooltip.esm.js.map +1 -0
- package/dist/components/Tooltips/TagTooltip.esm.js +199 -0
- package/dist/components/Tooltips/TagTooltip.esm.js.map +1 -0
- package/dist/components/Tooltips/UserTooltip.esm.js +259 -0
- package/dist/components/Tooltips/UserTooltip.esm.js.map +1 -0
- package/dist/components/UsersContainer/UserListItem.esm.js +1 -0
- package/dist/components/UsersContainer/UserListItem.esm.js.map +1 -1
- package/dist/components/UsersContainer/UsersGridItem.esm.js +1 -0
- package/dist/components/UsersContainer/UsersGridItem.esm.js.map +1 -1
- package/dist/hooks/useCollectionsFollow.esm.js +21 -45
- package/dist/hooks/useCollectionsFollow.esm.js.map +1 -1
- package/dist/hooks/useEntityAuthor.esm.js +3 -5
- package/dist/hooks/useEntityAuthor.esm.js.map +1 -1
- package/dist/hooks/useEntityFollow.esm.js +25 -36
- package/dist/hooks/useEntityFollow.esm.js.map +1 -1
- package/dist/hooks/useFavicon.esm.js +52 -0
- package/dist/hooks/useFavicon.esm.js.map +1 -0
- package/dist/hooks/useFollow.esm.js +62 -0
- package/dist/hooks/useFollow.esm.js.map +1 -0
- package/dist/hooks/useTagsFollow.esm.js +22 -39
- package/dist/hooks/useTagsFollow.esm.js.map +1 -1
- package/dist/hooks/useUserFollow.esm.js +22 -39
- package/dist/hooks/useUserFollow.esm.js.map +1 -1
- package/dist/index.d.ts +29 -13
- package/dist/index.esm.js +2 -0
- package/dist/index.esm.js.map +1 -1
- package/package.json +3 -3
- package/dist/components/TagsAndEntities/UserChip.esm.js +0 -87
- package/dist/components/TagsAndEntities/UserChip.esm.js.map +0 -1
|
@@ -30,7 +30,8 @@ const CollectionsContainer = (props) => {
|
|
|
30
30
|
tags: filters.tags,
|
|
31
31
|
fromDate: filters.fromDate,
|
|
32
32
|
toDate: filters.toDate,
|
|
33
|
-
owner
|
|
33
|
+
owner,
|
|
34
|
+
includePosts: false
|
|
34
35
|
}).then((res) => ({ items: res.collections, total: res.total }));
|
|
35
36
|
},
|
|
36
37
|
filterPanelProps: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CollectionsContainer.esm.js","sources":["../../../src/components/CollectionsContainer/CollectionsContainer.tsx"],"sourcesContent":["import { CollectionResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation';\nimport { CommonFilterPanelProps } from '../FilterPanel/FilterPanel';\nimport { CollectionsGridItem } from './CollectionsGridItem';\nimport { CollectionListItem } from './CollectionListItem';\nimport { QetaEntityContainer } from '../QetaEntityContainer/QetaEntityContainer';\nimport { ViewType } from '../ViewToggle/ViewToggle';\n\nexport const CollectionsContainer = (props: {\n filterPanelProps?: CommonFilterPanelProps;\n defaultView?: ViewType;\n owner?: string;\n prefix?: string;\n}) => {\n const { filterPanelProps, defaultView, owner, prefix } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n\n return (\n <QetaEntityContainer<CollectionResponse, any>\n prefix={prefix ?? 'collections'}\n defaultPageSize={24}\n defaultView={defaultView}\n initialFilters={{\n order: 'desc',\n searchQuery: '',\n orderBy: 'created',\n }}\n fetch={(api, limit, offset, filters) => {\n return api\n .getCollections({\n limit,\n offset,\n searchQuery: filters.searchQuery,\n order: filters.order,\n orderBy: filters.orderBy,\n entities: filters.entities,\n tags: filters.tags,\n fromDate: filters.fromDate,\n toDate: filters.toDate,\n owner,\n })\n .then(res => ({ items: res.collections, total: res.total }));\n }}\n filterPanelProps={{\n ...filterPanelProps,\n mode: 'collections',\n }}\n renderListItem={collection => (\n <CollectionListItem collection={collection} />\n )}\n renderGridItem={collection => (\n <CollectionsGridItem collection={collection} />\n )}\n title={total => t('common.collections', { count: total })}\n searchPlaceholder={t('collectionsPage.search.label')}\n emptyMessage={t('common.collections', { count: 0 })}\n getKey={collection => collection.id}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;AASa,MAAA,oBAAA,GAAuB,CAAC,KAK/B,KAAA;AACJ,EAAA,MAAM,EAAE,gBAAA,EAAkB,WAAa,EAAA,KAAA,EAAO,QAAW,GAAA,KAAA;AACzD,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EACE,uBAAA,GAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,QAAQ,MAAU,IAAA,aAAA;AAAA,MAClB,eAAiB,EAAA,EAAA;AAAA,MACjB,WAAA;AAAA,MACA,cAAgB,EAAA;AAAA,QACd,KAAO,EAAA,MAAA;AAAA,QACP,WAAa,EAAA,EAAA;AAAA,QACb,OAAS,EAAA;AAAA,OACX;AAAA,MACA,KAAO,EAAA,CAAC,GAAK,EAAA,KAAA,EAAO,QAAQ,OAAY,KAAA;AACtC,QAAA,OAAO,IACJ,cAAe,CAAA;AAAA,UACd,KAAA;AAAA,UACA,MAAA;AAAA,UACA,aAAa,OAAQ,CAAA,WAAA;AAAA,UACrB,OAAO,OAAQ,CAAA,KAAA;AAAA,UACf,SAAS,OAAQ,CAAA,OAAA;AAAA,UACjB,UAAU,OAAQ,CAAA,QAAA;AAAA,UAClB,MAAM,OAAQ,CAAA,IAAA;AAAA,UACd,UAAU,OAAQ,CAAA,QAAA;AAAA,UAClB,QAAQ,OAAQ,CAAA,MAAA;AAAA,UAChB;AAAA,
|
|
1
|
+
{"version":3,"file":"CollectionsContainer.esm.js","sources":["../../../src/components/CollectionsContainer/CollectionsContainer.tsx"],"sourcesContent":["import { CollectionResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation';\nimport { CommonFilterPanelProps } from '../FilterPanel/FilterPanel';\nimport { CollectionsGridItem } from './CollectionsGridItem';\nimport { CollectionListItem } from './CollectionListItem';\nimport { QetaEntityContainer } from '../QetaEntityContainer/QetaEntityContainer';\nimport { ViewType } from '../ViewToggle/ViewToggle';\n\nexport const CollectionsContainer = (props: {\n filterPanelProps?: CommonFilterPanelProps;\n defaultView?: ViewType;\n owner?: string;\n prefix?: string;\n}) => {\n const { filterPanelProps, defaultView, owner, prefix } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n\n return (\n <QetaEntityContainer<CollectionResponse, any>\n prefix={prefix ?? 'collections'}\n defaultPageSize={24}\n defaultView={defaultView}\n initialFilters={{\n order: 'desc',\n searchQuery: '',\n orderBy: 'created',\n }}\n fetch={(api, limit, offset, filters) => {\n return api\n .getCollections({\n limit,\n offset,\n searchQuery: filters.searchQuery,\n order: filters.order,\n orderBy: filters.orderBy,\n entities: filters.entities,\n tags: filters.tags,\n fromDate: filters.fromDate,\n toDate: filters.toDate,\n owner,\n includePosts: false,\n })\n .then(res => ({ items: res.collections, total: res.total }));\n }}\n filterPanelProps={{\n ...filterPanelProps,\n mode: 'collections',\n }}\n renderListItem={collection => (\n <CollectionListItem collection={collection} />\n )}\n renderGridItem={collection => (\n <CollectionsGridItem collection={collection} />\n )}\n title={total => t('common.collections', { count: total })}\n searchPlaceholder={t('collectionsPage.search.label')}\n emptyMessage={t('common.collections', { count: 0 })}\n getKey={collection => collection.id}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;AASa,MAAA,oBAAA,GAAuB,CAAC,KAK/B,KAAA;AACJ,EAAA,MAAM,EAAE,gBAAA,EAAkB,WAAa,EAAA,KAAA,EAAO,QAAW,GAAA,KAAA;AACzD,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EACE,uBAAA,GAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,QAAQ,MAAU,IAAA,aAAA;AAAA,MAClB,eAAiB,EAAA,EAAA;AAAA,MACjB,WAAA;AAAA,MACA,cAAgB,EAAA;AAAA,QACd,KAAO,EAAA,MAAA;AAAA,QACP,WAAa,EAAA,EAAA;AAAA,QACb,OAAS,EAAA;AAAA,OACX;AAAA,MACA,KAAO,EAAA,CAAC,GAAK,EAAA,KAAA,EAAO,QAAQ,OAAY,KAAA;AACtC,QAAA,OAAO,IACJ,cAAe,CAAA;AAAA,UACd,KAAA;AAAA,UACA,MAAA;AAAA,UACA,aAAa,OAAQ,CAAA,WAAA;AAAA,UACrB,OAAO,OAAQ,CAAA,KAAA;AAAA,UACf,SAAS,OAAQ,CAAA,OAAA;AAAA,UACjB,UAAU,OAAQ,CAAA,QAAA;AAAA,UAClB,MAAM,OAAQ,CAAA,IAAA;AAAA,UACd,UAAU,OAAQ,CAAA,QAAA;AAAA,UAClB,QAAQ,OAAQ,CAAA,MAAA;AAAA,UAChB,KAAA;AAAA,UACA,YAAc,EAAA;AAAA,SACf,CACA,CAAA,IAAA,CAAK,CAAQ,GAAA,MAAA,EAAE,KAAO,EAAA,GAAA,CAAI,WAAa,EAAA,KAAA,EAAO,GAAI,CAAA,KAAA,EAAQ,CAAA,CAAA;AAAA,OAC/D;AAAA,MACA,gBAAkB,EAAA;AAAA,QAChB,GAAG,gBAAA;AAAA,QACH,IAAM,EAAA;AAAA,OACR;AAAA,MACA,cAAgB,EAAA,CAAA,UAAA,qBACb,GAAA,CAAA,kBAAA,EAAA,EAAmB,UAAwB,EAAA,CAAA;AAAA,MAE9C,cAAgB,EAAA,CAAA,UAAA,qBACb,GAAA,CAAA,mBAAA,EAAA,EAAoB,UAAwB,EAAA,CAAA;AAAA,MAE/C,OAAO,CAAS,KAAA,KAAA,CAAA,CAAE,sBAAsB,EAAE,KAAA,EAAO,OAAO,CAAA;AAAA,MACxD,iBAAA,EAAmB,EAAE,8BAA8B,CAAA;AAAA,MACnD,cAAc,CAAE,CAAA,oBAAA,EAAsB,EAAE,KAAA,EAAO,GAAG,CAAA;AAAA,MAClD,MAAA,EAAQ,gBAAc,UAAW,CAAA;AAAA;AAAA,GACnC;AAEJ;;;;"}
|
|
@@ -2,25 +2,32 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { qetaApiRef } from '../../api.esm.js';
|
|
3
3
|
import { useApi } from '@backstage/core-plugin-api';
|
|
4
4
|
import LinkIcon from '@material-ui/icons/Link';
|
|
5
|
-
import { useState
|
|
5
|
+
import { useState } from 'react';
|
|
6
|
+
import 'react-use';
|
|
7
|
+
import '@backstage/plugin-signals-react';
|
|
8
|
+
import '@backstage/core-plugin-api/alpha';
|
|
9
|
+
import '../../translation.esm.js';
|
|
10
|
+
import '../../hooks/useListItemStyles.esm.js';
|
|
11
|
+
import '@backstage/catalog-model';
|
|
12
|
+
import 'dataloader';
|
|
13
|
+
import '@backstage/plugin-catalog-react';
|
|
14
|
+
import 'react-use/lib/useAsync';
|
|
15
|
+
import '@backstage/plugin-permission-react';
|
|
16
|
+
import '@drodil/backstage-plugin-qeta-common';
|
|
17
|
+
import '@backstage/plugin-permission-common';
|
|
18
|
+
import '@material-ui/core';
|
|
19
|
+
import 'react-router-dom';
|
|
20
|
+
import 'react-use/lib/useDebounce';
|
|
21
|
+
import '../FilterPanel/FilterPanel.esm.js';
|
|
22
|
+
import '../QetaContext/QetaContext.esm.js';
|
|
23
|
+
import { useFavicon } from '../../hooks/useFavicon.esm.js';
|
|
6
24
|
|
|
7
25
|
const FaviconItem = (props) => {
|
|
8
26
|
const { entity } = props;
|
|
9
27
|
const { url } = entity;
|
|
10
28
|
const qetaApi = useApi(qetaApiRef);
|
|
11
29
|
const [error, setError] = useState(false);
|
|
12
|
-
const
|
|
13
|
-
useEffect(() => {
|
|
14
|
-
if (!url) return;
|
|
15
|
-
qetaApi.fetchURLMetadata({ url }).then((response) => {
|
|
16
|
-
if (response.favicon) {
|
|
17
|
-
setError(false);
|
|
18
|
-
setFavicon(response.favicon);
|
|
19
|
-
} else {
|
|
20
|
-
setError(true);
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
});
|
|
30
|
+
const favicon = useFavicon(url);
|
|
24
31
|
return /* @__PURE__ */ jsxs(
|
|
25
32
|
"a",
|
|
26
33
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FaviconItem.esm.js","sources":["../../../src/components/FaviconItem/FaviconItem.tsx"],"sourcesContent":["import { PostResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { qetaApiRef } from '../../api.ts';\nimport { useApi } from '@backstage/core-plugin-api';\nimport LinkIcon from '@material-ui/icons/Link';\nimport {
|
|
1
|
+
{"version":3,"file":"FaviconItem.esm.js","sources":["../../../src/components/FaviconItem/FaviconItem.tsx"],"sourcesContent":["import { PostResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { qetaApiRef } from '../../api.ts';\nimport { useApi } from '@backstage/core-plugin-api';\nimport LinkIcon from '@material-ui/icons/Link';\nimport { useState } from 'react';\nimport { useFavicon } from '../../hooks';\n\nexport const FaviconItem = (props: { entity: PostResponse }) => {\n const { entity } = props;\n const { url } = entity;\n const qetaApi = useApi(qetaApiRef);\n const [error, setError] = useState(false);\n\n const favicon = useFavicon(url);\n\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ display: 'inline-block', marginRight: 8 }}\n onClick={event => {\n event.stopPropagation();\n qetaApi.clickLink(entity.id);\n }}\n >\n {!error && favicon && (\n <img\n src={favicon}\n alt={url}\n width={16}\n height={16}\n onError={e => {\n e.currentTarget.style.display = 'none';\n setError(true);\n }}\n style={{\n display: 'inline-block',\n verticalAlign: 'middle',\n objectFit: 'contain',\n marginBottom: 5,\n }}\n />\n )}\n {error && (\n <LinkIcon\n width={16}\n height={16}\n style={{\n display: 'inline-block',\n marginBottom: 5,\n verticalAlign: 'middle',\n }}\n />\n )}\n </a>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAOa,MAAA,WAAA,GAAc,CAAC,KAAoC,KAAA;AAC9D,EAAM,MAAA,EAAE,QAAW,GAAA,KAAA;AACnB,EAAM,MAAA,EAAE,KAAQ,GAAA,MAAA;AAChB,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA;AACjC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,KAAK,CAAA;AAExC,EAAM,MAAA,OAAA,GAAU,WAAW,GAAG,CAAA;AAE9B,EACE,uBAAA,IAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,IAAM,EAAA,GAAA;AAAA,MACN,MAAO,EAAA,QAAA;AAAA,MACP,GAAI,EAAA,qBAAA;AAAA,MACJ,KAAO,EAAA,EAAE,OAAS,EAAA,cAAA,EAAgB,aAAa,CAAE,EAAA;AAAA,MACjD,SAAS,CAAS,KAAA,KAAA;AAChB,QAAA,KAAA,CAAM,eAAgB,EAAA;AACtB,QAAQ,OAAA,CAAA,SAAA,CAAU,OAAO,EAAE,CAAA;AAAA,OAC7B;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,CAAC,SAAS,OACT,oBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAK,EAAA,OAAA;AAAA,YACL,GAAK,EAAA,GAAA;AAAA,YACL,KAAO,EAAA,EAAA;AAAA,YACP,MAAQ,EAAA,EAAA;AAAA,YACR,SAAS,CAAK,CAAA,KAAA;AACZ,cAAE,CAAA,CAAA,aAAA,CAAc,MAAM,OAAU,GAAA,MAAA;AAChC,cAAA,QAAA,CAAS,IAAI,CAAA;AAAA,aACf;AAAA,YACA,KAAO,EAAA;AAAA,cACL,OAAS,EAAA,cAAA;AAAA,cACT,aAAe,EAAA,QAAA;AAAA,cACf,SAAW,EAAA,SAAA;AAAA,cACX,YAAc,EAAA;AAAA;AAChB;AAAA,SACF;AAAA,QAED,KACC,oBAAA,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,KAAO,EAAA,EAAA;AAAA,YACP,MAAQ,EAAA,EAAA;AAAA,YACR,KAAO,EAAA;AAAA,cACL,OAAS,EAAA,cAAA;AAAA,cACT,YAAc,EAAA,CAAA;AAAA,cACd,aAAe,EAAA;AAAA;AACjB;AAAA;AACF;AAAA;AAAA,GAEJ;AAEJ;;;;"}
|
|
@@ -3,11 +3,43 @@ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
|
3
3
|
import { qetaTranslationRef } from '../../translation.esm.js';
|
|
4
4
|
import { useCollectionsFollow } from '../../hooks/useCollectionsFollow.esm.js';
|
|
5
5
|
import { RightListContainer, RightList } from '../Utility/RightList.esm.js';
|
|
6
|
-
import { makeStyles, ListItem, Box,
|
|
6
|
+
import { makeStyles, ListItem, Box, ListItemText } from '@material-ui/core';
|
|
7
7
|
import PlaylistPlayOutlined from '@material-ui/icons/PlaylistPlayOutlined';
|
|
8
8
|
import { Link } from 'react-router-dom';
|
|
9
9
|
import { collectionRouteRef } from '../../routes.esm.js';
|
|
10
10
|
import { useRouteRef } from '@backstage/core-plugin-api';
|
|
11
|
+
import 'react';
|
|
12
|
+
import '../../api.esm.js';
|
|
13
|
+
import '../MarkdownRenderer/MarkdownRenderer.esm.js';
|
|
14
|
+
import 'react-use';
|
|
15
|
+
import '@backstage/plugin-signals-react';
|
|
16
|
+
import '../../hooks/useListItemStyles.esm.js';
|
|
17
|
+
import '@backstage/catalog-model';
|
|
18
|
+
import 'dataloader';
|
|
19
|
+
import '@backstage/plugin-catalog-react';
|
|
20
|
+
import 'react-use/lib/useAsync';
|
|
21
|
+
import '@backstage/plugin-permission-react';
|
|
22
|
+
import '@drodil/backstage-plugin-qeta-common';
|
|
23
|
+
import '@backstage/plugin-permission-common';
|
|
24
|
+
import 'react-use/lib/useDebounce';
|
|
25
|
+
import '../FilterPanel/FilterPanel.esm.js';
|
|
26
|
+
import '../QetaContext/QetaContext.esm.js';
|
|
27
|
+
import '@material-ui/lab';
|
|
28
|
+
import '@material-ui/icons/VisibilityOff';
|
|
29
|
+
import '@material-ui/icons/Visibility';
|
|
30
|
+
import '@material-ui/icons/LoyaltyOutlined';
|
|
31
|
+
import '@material-ui/icons/HelpOutline';
|
|
32
|
+
import '@material-ui/icons/DescriptionOutlined';
|
|
33
|
+
import '@material-ui/icons/PeopleAltOutlined';
|
|
34
|
+
import '../../hooks/useTooltipStyles.esm.js';
|
|
35
|
+
import { CollectionTooltip } from '../Tooltips/CollectionTooltip.esm.js';
|
|
36
|
+
import '@material-ui/icons/QuestionAnswerOutlined';
|
|
37
|
+
import '@material-ui/icons/Stars';
|
|
38
|
+
import '@material-ui/icons/CheckCircleOutline';
|
|
39
|
+
import 'react-relative-time';
|
|
40
|
+
import '@material-ui/icons/ThumbUpOutlined';
|
|
41
|
+
import '@material-ui/icons/VisibilityOutlined';
|
|
42
|
+
import '@material-ui/icons/ChatBubbleOutline';
|
|
11
43
|
|
|
12
44
|
const useStyles = makeStyles((theme) => ({
|
|
13
45
|
listItem: {
|
|
@@ -53,24 +85,34 @@ const FollowedCollectionsList = () => {
|
|
|
53
85
|
}
|
|
54
86
|
return /* @__PURE__ */ jsx(RightListContainer, { children: /* @__PURE__ */ jsx(RightList, { title: t("rightMenu.followedCollections"), limit: 5, randomize: true, children: collections.collections.map((collection) => {
|
|
55
87
|
const href = collectionRoute({ id: collection.id.toString(10) });
|
|
56
|
-
return /* @__PURE__ */
|
|
57
|
-
|
|
88
|
+
return /* @__PURE__ */ jsx(
|
|
89
|
+
CollectionTooltip,
|
|
58
90
|
{
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
children:
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
91
|
+
collectionId: collection.id,
|
|
92
|
+
interactive: false,
|
|
93
|
+
enterDelay: 400,
|
|
94
|
+
enterNextDelay: 400,
|
|
95
|
+
placement: "left",
|
|
96
|
+
children: /* @__PURE__ */ jsxs(
|
|
97
|
+
ListItem,
|
|
98
|
+
{
|
|
99
|
+
dense: true,
|
|
100
|
+
button: true,
|
|
101
|
+
className: classes.listItem,
|
|
102
|
+
component: Link,
|
|
103
|
+
to: href,
|
|
104
|
+
children: [
|
|
105
|
+
/* @__PURE__ */ jsx(Box, { className: classes.iconBox, children: /* @__PURE__ */ jsx(PlaylistPlayOutlined, { fontSize: "small" }) }),
|
|
106
|
+
/* @__PURE__ */ jsx(
|
|
107
|
+
ListItemText,
|
|
108
|
+
{
|
|
109
|
+
primary: collection.title,
|
|
110
|
+
classes: { primary: classes.listItemText }
|
|
111
|
+
}
|
|
112
|
+
)
|
|
113
|
+
]
|
|
114
|
+
}
|
|
115
|
+
)
|
|
74
116
|
},
|
|
75
117
|
collection.id
|
|
76
118
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FollowedCollectionsList.esm.js","sources":["../../../src/components/FollowedLists/FollowedCollectionsList.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation';\nimport { useCollectionsFollow } from '../../hooks/useCollectionsFollow';\nimport { RightList, RightListContainer } from '../Utility/RightList';\nimport {
|
|
1
|
+
{"version":3,"file":"FollowedCollectionsList.esm.js","sources":["../../../src/components/FollowedLists/FollowedCollectionsList.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation';\nimport { useCollectionsFollow } from '../../hooks/useCollectionsFollow';\nimport { RightList, RightListContainer } from '../Utility/RightList';\nimport { Box, ListItem, ListItemText, makeStyles } from '@material-ui/core';\nimport PlaylistPlayOutlined from '@material-ui/icons/PlaylistPlayOutlined';\nimport { Link } from 'react-router-dom';\nimport { collectionRouteRef } from '../../routes';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { CollectionTooltip } from '../Tooltips';\n\nconst useStyles = makeStyles(theme => ({\n listItem: {\n display: 'flex',\n alignItems: 'center',\n padding: '0 4px',\n minHeight: 28,\n cursor: 'pointer',\n transition: 'background 0.2s',\n textDecoration: 'none',\n color: 'inherit',\n '&:hover': {\n background: theme.palette.action.hover,\n },\n },\n listItemText: {\n color: theme.palette.text.primary,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n flex: 1,\n },\n iconBox: {\n minWidth: 28,\n maxWidth: 28,\n height: 24,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 4,\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(0.5),\n color: theme.palette.text.secondary,\n },\n}));\n\nexport const FollowedCollectionsList = () => {\n const collections = useCollectionsFollow();\n const { t } = useTranslationRef(qetaTranslationRef);\n const classes = useStyles();\n const collectionRoute = useRouteRef(collectionRouteRef);\n\n if (collections.collections.length === 0 || collections.loading) {\n return null;\n }\n\n return (\n <RightListContainer>\n <RightList title={t('rightMenu.followedCollections')} limit={5} randomize>\n {collections.collections.map(collection => {\n const href = collectionRoute({ id: collection.id.toString(10) });\n return (\n <CollectionTooltip\n key={collection.id}\n collectionId={collection.id}\n interactive={false}\n enterDelay={400}\n enterNextDelay={400}\n placement=\"left\"\n >\n <ListItem\n dense\n button\n className={classes.listItem}\n component={Link}\n to={href}\n >\n <Box className={classes.iconBox}>\n <PlaylistPlayOutlined fontSize=\"small\" />\n </Box>\n <ListItemText\n primary={collection.title}\n classes={{ primary: classes.listItemText }}\n />\n </ListItem>\n </CollectionTooltip>\n );\n })}\n </RightList>\n </RightListContainer>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,MAAM,SAAA,GAAY,WAAW,CAAU,KAAA,MAAA;AAAA,EACrC,QAAU,EAAA;AAAA,IACR,OAAS,EAAA,MAAA;AAAA,IACT,UAAY,EAAA,QAAA;AAAA,IACZ,OAAS,EAAA,OAAA;AAAA,IACT,SAAW,EAAA,EAAA;AAAA,IACX,MAAQ,EAAA,SAAA;AAAA,IACR,UAAY,EAAA,iBAAA;AAAA,IACZ,cAAgB,EAAA,MAAA;AAAA,IAChB,KAAO,EAAA,SAAA;AAAA,IACP,SAAW,EAAA;AAAA,MACT,UAAA,EAAY,KAAM,CAAA,OAAA,CAAQ,MAAO,CAAA;AAAA;AACnC,GACF;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,OAAA;AAAA,IAC1B,UAAY,EAAA,QAAA;AAAA,IACZ,QAAU,EAAA,QAAA;AAAA,IACV,YAAc,EAAA,UAAA;AAAA,IACd,IAAM,EAAA;AAAA,GACR;AAAA,EACA,OAAS,EAAA;AAAA,IACP,QAAU,EAAA,EAAA;AAAA,IACV,QAAU,EAAA,EAAA;AAAA,IACV,MAAQ,EAAA,EAAA;AAAA,IACR,OAAS,EAAA,MAAA;AAAA,IACT,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA,QAAA;AAAA,IAChB,YAAc,EAAA,CAAA;AAAA,IACd,WAAA,EAAa,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC5B,UAAA,EAAY,KAAM,CAAA,OAAA,CAAQ,GAAG,CAAA;AAAA,IAC7B,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA;AAAA;AAE9B,CAAE,CAAA,CAAA;AAEK,MAAM,0BAA0B,MAAM;AAC3C,EAAA,MAAM,cAAc,oBAAqB,EAAA;AACzC,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAM,MAAA,eAAA,GAAkB,YAAY,kBAAkB,CAAA;AAEtD,EAAA,IAAI,WAAY,CAAA,WAAA,CAAY,MAAW,KAAA,CAAA,IAAK,YAAY,OAAS,EAAA;AAC/D,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,uBACG,GAAA,CAAA,kBAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,SAAA,EAAA,EAAU,OAAO,CAAE,CAAA,+BAA+B,CAAG,EAAA,KAAA,EAAO,GAAG,SAAS,EAAA,IAAA,EACtE,QAAY,EAAA,WAAA,CAAA,WAAA,CAAY,IAAI,CAAc,UAAA,KAAA;AACzC,IAAM,MAAA,IAAA,GAAO,gBAAgB,EAAE,EAAA,EAAI,WAAW,EAAG,CAAA,QAAA,CAAS,EAAE,CAAA,EAAG,CAAA;AAC/D,IACE,uBAAA,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QAEC,cAAc,UAAW,CAAA,EAAA;AAAA,QACzB,WAAa,EAAA,KAAA;AAAA,QACb,UAAY,EAAA,GAAA;AAAA,QACZ,cAAgB,EAAA,GAAA;AAAA,QAChB,SAAU,EAAA,MAAA;AAAA,QAEV,QAAA,kBAAA,IAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,KAAK,EAAA,IAAA;AAAA,YACL,MAAM,EAAA,IAAA;AAAA,YACN,WAAW,OAAQ,CAAA,QAAA;AAAA,YACnB,SAAW,EAAA,IAAA;AAAA,YACX,EAAI,EAAA,IAAA;AAAA,YAEJ,QAAA,EAAA;AAAA,8BAAC,GAAA,CAAA,GAAA,EAAA,EAAI,WAAW,OAAQ,CAAA,OAAA,EACtB,8BAAC,oBAAqB,EAAA,EAAA,QAAA,EAAS,SAAQ,CACzC,EAAA,CAAA;AAAA,8BACA,GAAA;AAAA,gBAAC,YAAA;AAAA,gBAAA;AAAA,kBACC,SAAS,UAAW,CAAA,KAAA;AAAA,kBACpB,OAAS,EAAA,EAAE,OAAS,EAAA,OAAA,CAAQ,YAAa;AAAA;AAAA;AAC3C;AAAA;AAAA;AACF,OAAA;AAAA,MArBK,UAAW,CAAA;AAAA,KAsBlB;AAAA,GAEH,GACH,CACF,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -15,13 +15,31 @@ import 'react-use/lib/useAsync';
|
|
|
15
15
|
import '@backstage/plugin-permission-react';
|
|
16
16
|
import '@drodil/backstage-plugin-qeta-common';
|
|
17
17
|
import '@backstage/plugin-permission-common';
|
|
18
|
-
import { makeStyles, ListItem, Box,
|
|
18
|
+
import { makeStyles, ListItem, Box, ListItemText } from '@material-ui/core';
|
|
19
19
|
import { Link } from 'react-router-dom';
|
|
20
20
|
import 'react-use/lib/useDebounce';
|
|
21
21
|
import '../FilterPanel/FilterPanel.esm.js';
|
|
22
22
|
import '../QetaContext/QetaContext.esm.js';
|
|
23
23
|
import { RightListContainer, RightList } from '../Utility/RightList.esm.js';
|
|
24
24
|
import { entityRouteRef } from '../../routes.esm.js';
|
|
25
|
+
import '../MarkdownRenderer/MarkdownRenderer.esm.js';
|
|
26
|
+
import '@material-ui/lab';
|
|
27
|
+
import '@material-ui/icons/VisibilityOff';
|
|
28
|
+
import '@material-ui/icons/Visibility';
|
|
29
|
+
import '@material-ui/icons/LoyaltyOutlined';
|
|
30
|
+
import '@material-ui/icons/HelpOutline';
|
|
31
|
+
import '@material-ui/icons/DescriptionOutlined';
|
|
32
|
+
import '@material-ui/icons/PeopleAltOutlined';
|
|
33
|
+
import '../../hooks/useTooltipStyles.esm.js';
|
|
34
|
+
import { EntityTooltip } from '../Tooltips/EntityTooltip.esm.js';
|
|
35
|
+
import '@material-ui/icons/LibraryBooksOutlined';
|
|
36
|
+
import '@material-ui/icons/QuestionAnswerOutlined';
|
|
37
|
+
import '@material-ui/icons/Stars';
|
|
38
|
+
import '@material-ui/icons/CheckCircleOutline';
|
|
39
|
+
import 'react-relative-time';
|
|
40
|
+
import '@material-ui/icons/ThumbUpOutlined';
|
|
41
|
+
import '@material-ui/icons/VisibilityOutlined';
|
|
42
|
+
import '@material-ui/icons/ChatBubbleOutline';
|
|
25
43
|
|
|
26
44
|
const useStyles = makeStyles((theme) => ({
|
|
27
45
|
listItem: {
|
|
@@ -62,24 +80,34 @@ const FollowedEntityItem = ({ entityRef }) => {
|
|
|
62
80
|
const entityRoute = useRouteRef(entityRouteRef);
|
|
63
81
|
const { primaryTitle, Icon } = useEntityPresentation(entityRef);
|
|
64
82
|
const href = entityRoute({ entityRef });
|
|
65
|
-
return /* @__PURE__ */
|
|
66
|
-
|
|
83
|
+
return /* @__PURE__ */ jsx(
|
|
84
|
+
EntityTooltip,
|
|
67
85
|
{
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
children:
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
86
|
+
entity: entityRef,
|
|
87
|
+
interactive: false,
|
|
88
|
+
enterDelay: 400,
|
|
89
|
+
enterNextDelay: 400,
|
|
90
|
+
placement: "left",
|
|
91
|
+
children: /* @__PURE__ */ jsxs(
|
|
92
|
+
ListItem,
|
|
93
|
+
{
|
|
94
|
+
dense: true,
|
|
95
|
+
button: true,
|
|
96
|
+
className: classes.listItem,
|
|
97
|
+
component: Link,
|
|
98
|
+
to: href,
|
|
99
|
+
children: [
|
|
100
|
+
/* @__PURE__ */ jsx(Box, { className: classes.iconBox, children: Icon ? /* @__PURE__ */ jsx(Icon, { fontSize: "small" }) : null }),
|
|
101
|
+
/* @__PURE__ */ jsx(
|
|
102
|
+
ListItemText,
|
|
103
|
+
{
|
|
104
|
+
primary: primaryTitle ?? entityRef,
|
|
105
|
+
classes: { primary: classes.listItemText }
|
|
106
|
+
}
|
|
107
|
+
)
|
|
108
|
+
]
|
|
109
|
+
}
|
|
110
|
+
)
|
|
83
111
|
}
|
|
84
112
|
);
|
|
85
113
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FollowedEntitiesList.esm.js","sources":["../../../src/components/FollowedLists/FollowedEntitiesList.tsx"],"sourcesContent":["import { useEntityFollow } from '../../hooks';\nimport { RightList, RightListContainer } from '../Utility/RightList';\nimport {
|
|
1
|
+
{"version":3,"file":"FollowedEntitiesList.esm.js","sources":["../../../src/components/FollowedLists/FollowedEntitiesList.tsx"],"sourcesContent":["import { useEntityFollow } from '../../hooks';\nimport { RightList, RightListContainer } from '../Utility/RightList';\nimport { Box, ListItem, ListItemText, makeStyles } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation';\nimport { Link } from 'react-router-dom';\nimport { entityRouteRef } from '../../routes';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { EntityTooltip } from '../Tooltips';\n\nconst useStyles = makeStyles(theme => ({\n listItem: {\n display: 'flex',\n alignItems: 'center',\n padding: '0 4px',\n minHeight: 28,\n cursor: 'pointer',\n transition: 'background 0.2s',\n textDecoration: 'none',\n color: 'inherit',\n '&:hover': {\n background: theme.palette.action.hover,\n },\n },\n listItemText: {\n color: theme.palette.text.primary,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n flex: 1,\n },\n iconBox: {\n minWidth: 28,\n maxWidth: 28,\n height: 24,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 4,\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(0.5),\n color: theme.palette.text.secondary,\n },\n}));\n\nconst FollowedEntityItem = ({ entityRef }: { entityRef: string }) => {\n const classes = useStyles();\n const entityRoute = useRouteRef(entityRouteRef);\n const { primaryTitle, Icon } = useEntityPresentation(entityRef);\n const href = entityRoute({ entityRef: entityRef });\n\n return (\n <EntityTooltip\n entity={entityRef}\n interactive={false}\n enterDelay={400}\n enterNextDelay={400}\n placement=\"left\"\n >\n <ListItem\n dense\n button\n className={classes.listItem}\n component={Link}\n to={href}\n >\n <Box className={classes.iconBox}>\n {Icon ? <Icon fontSize=\"small\" /> : null}\n </Box>\n <ListItemText\n primary={primaryTitle ?? entityRef}\n classes={{ primary: classes.listItemText }}\n />\n </ListItem>\n </EntityTooltip>\n );\n};\n\nexport const FollowedEntitiesList = () => {\n const entities = useEntityFollow();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n if (entities.entities.length === 0 || entities.loading) {\n return null;\n }\n\n return (\n <RightListContainer>\n <RightList title={t('rightMenu.followedEntities')} limit={5} randomize>\n {entities.entities.map(entity => (\n <FollowedEntityItem key={entity} entityRef={entity} />\n ))}\n </RightList>\n </RightListContainer>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ import 'react-use/lib/useAsync';
|
|
|
15
15
|
import '@backstage/plugin-permission-react';
|
|
16
16
|
import '@drodil/backstage-plugin-qeta-common';
|
|
17
17
|
import '@backstage/plugin-permission-common';
|
|
18
|
-
import { makeStyles, ListItem, Box,
|
|
18
|
+
import { makeStyles, ListItem, Box, ListItemText } from '@material-ui/core';
|
|
19
19
|
import { Link } from 'react-router-dom';
|
|
20
20
|
import 'react-use/lib/useDebounce';
|
|
21
21
|
import '../FilterPanel/FilterPanel.esm.js';
|
|
@@ -23,6 +23,22 @@ import '../QetaContext/QetaContext.esm.js';
|
|
|
23
23
|
import { RightListContainer, RightList } from '../Utility/RightList.esm.js';
|
|
24
24
|
import LocalOfferOutlined from '@material-ui/icons/LocalOfferOutlined';
|
|
25
25
|
import { tagRouteRef } from '../../routes.esm.js';
|
|
26
|
+
import { TagTooltip } from '../Tooltips/TagTooltip.esm.js';
|
|
27
|
+
import '@material-ui/lab';
|
|
28
|
+
import '@material-ui/icons/VisibilityOff';
|
|
29
|
+
import '@material-ui/icons/Visibility';
|
|
30
|
+
import '@material-ui/icons/HelpOutline';
|
|
31
|
+
import '@material-ui/icons/DescriptionOutlined';
|
|
32
|
+
import '@material-ui/icons/PeopleAltOutlined';
|
|
33
|
+
import '../../hooks/useTooltipStyles.esm.js';
|
|
34
|
+
import '@material-ui/icons/LibraryBooksOutlined';
|
|
35
|
+
import '@material-ui/icons/QuestionAnswerOutlined';
|
|
36
|
+
import '@material-ui/icons/Stars';
|
|
37
|
+
import '@material-ui/icons/CheckCircleOutline';
|
|
38
|
+
import 'react-relative-time';
|
|
39
|
+
import '@material-ui/icons/ThumbUpOutlined';
|
|
40
|
+
import '@material-ui/icons/VisibilityOutlined';
|
|
41
|
+
import '@material-ui/icons/ChatBubbleOutline';
|
|
26
42
|
|
|
27
43
|
const useStyles = makeStyles((theme) => ({
|
|
28
44
|
listItem: {
|
|
@@ -68,24 +84,34 @@ const FollowedTagsList = () => {
|
|
|
68
84
|
}
|
|
69
85
|
return /* @__PURE__ */ jsx(RightListContainer, { children: /* @__PURE__ */ jsx(RightList, { title: t("rightMenu.followedTags"), limit: 5, randomize: true, children: tags.tags.map((tag) => {
|
|
70
86
|
const href = tagRoute({ tag });
|
|
71
|
-
return /* @__PURE__ */
|
|
72
|
-
|
|
87
|
+
return /* @__PURE__ */ jsx(
|
|
88
|
+
TagTooltip,
|
|
73
89
|
{
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
children:
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
90
|
+
tag,
|
|
91
|
+
interactive: false,
|
|
92
|
+
enterDelay: 400,
|
|
93
|
+
enterNextDelay: 400,
|
|
94
|
+
placement: "left",
|
|
95
|
+
children: /* @__PURE__ */ jsxs(
|
|
96
|
+
ListItem,
|
|
97
|
+
{
|
|
98
|
+
dense: true,
|
|
99
|
+
button: true,
|
|
100
|
+
className: classes.listItem,
|
|
101
|
+
component: Link,
|
|
102
|
+
to: href,
|
|
103
|
+
children: [
|
|
104
|
+
/* @__PURE__ */ jsx(Box, { className: classes.iconBox, children: /* @__PURE__ */ jsx(LocalOfferOutlined, { fontSize: "small" }) }),
|
|
105
|
+
/* @__PURE__ */ jsx(
|
|
106
|
+
ListItemText,
|
|
107
|
+
{
|
|
108
|
+
primary: `${tag}`,
|
|
109
|
+
classes: { primary: classes.listItemText }
|
|
110
|
+
}
|
|
111
|
+
)
|
|
112
|
+
]
|
|
113
|
+
}
|
|
114
|
+
)
|
|
89
115
|
},
|
|
90
116
|
tag
|
|
91
117
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FollowedTagsList.esm.js","sources":["../../../src/components/FollowedLists/FollowedTagsList.tsx"],"sourcesContent":["import { useTagsFollow } from '../../hooks';\nimport { RightList, RightListContainer } from '../Utility/RightList';\nimport {
|
|
1
|
+
{"version":3,"file":"FollowedTagsList.esm.js","sources":["../../../src/components/FollowedLists/FollowedTagsList.tsx"],"sourcesContent":["import { useTagsFollow } from '../../hooks';\nimport { RightList, RightListContainer } from '../Utility/RightList';\nimport { Box, ListItem, ListItemText, makeStyles } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation';\nimport LocalOfferOutlined from '@material-ui/icons/LocalOfferOutlined';\nimport { Link } from 'react-router-dom';\nimport { tagRouteRef } from '../../routes';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { TagTooltip } from '../Tooltips';\n\nconst useStyles = makeStyles(theme => ({\n listItem: {\n display: 'flex',\n alignItems: 'center',\n padding: '0 4px',\n minHeight: 28,\n cursor: 'pointer',\n transition: 'background 0.2s',\n textDecoration: 'none',\n color: 'inherit',\n '&:hover': {\n background: theme.palette.action.hover,\n },\n },\n listItemText: {\n color: theme.palette.text.primary,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n flex: 1,\n },\n iconBox: {\n minWidth: 28,\n maxWidth: 28,\n height: 24,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 4,\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(0.5),\n color: theme.palette.text.secondary,\n },\n}));\n\nexport const FollowedTagsList = () => {\n const tags = useTagsFollow();\n const { t } = useTranslationRef(qetaTranslationRef);\n const classes = useStyles();\n const tagRoute = useRouteRef(tagRouteRef);\n\n if (tags.tags.length === 0 || tags.loading) {\n return null;\n }\n\n return (\n <RightListContainer>\n <RightList title={t('rightMenu.followedTags')} limit={5} randomize>\n {tags.tags.map(tag => {\n const href = tagRoute({ tag: tag });\n return (\n <TagTooltip\n key={tag}\n tag={tag}\n interactive={false}\n enterDelay={400}\n enterNextDelay={400}\n placement=\"left\"\n >\n <ListItem\n dense\n button\n className={classes.listItem}\n component={Link}\n to={href}\n >\n <Box className={classes.iconBox}>\n <LocalOfferOutlined fontSize=\"small\" />\n </Box>\n <ListItemText\n primary={`${tag}`}\n classes={{ primary: classes.listItemText }}\n />\n </ListItem>\n </TagTooltip>\n );\n })}\n </RightList>\n </RightListContainer>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -13,13 +13,33 @@ import 'react-use/lib/useAsync';
|
|
|
13
13
|
import '@backstage/plugin-permission-react';
|
|
14
14
|
import '@drodil/backstage-plugin-qeta-common';
|
|
15
15
|
import '@backstage/plugin-permission-common';
|
|
16
|
-
import { makeStyles, ListItem, Avatar,
|
|
16
|
+
import { makeStyles, ListItem, Avatar, ListItemText } from '@material-ui/core';
|
|
17
17
|
import { Link } from 'react-router-dom';
|
|
18
18
|
import 'react-use/lib/useDebounce';
|
|
19
19
|
import '../FilterPanel/FilterPanel.esm.js';
|
|
20
20
|
import '../QetaContext/QetaContext.esm.js';
|
|
21
|
+
import 'dataloader';
|
|
21
22
|
import { RightListContainer, RightList } from '../Utility/RightList.esm.js';
|
|
22
23
|
import { userRouteRef } from '../../routes.esm.js';
|
|
24
|
+
import '../MarkdownRenderer/MarkdownRenderer.esm.js';
|
|
25
|
+
import '@material-ui/lab';
|
|
26
|
+
import '@material-ui/icons/VisibilityOff';
|
|
27
|
+
import '@material-ui/icons/Visibility';
|
|
28
|
+
import '@material-ui/icons/LoyaltyOutlined';
|
|
29
|
+
import '@material-ui/icons/HelpOutline';
|
|
30
|
+
import '@material-ui/icons/DescriptionOutlined';
|
|
31
|
+
import '@material-ui/icons/PeopleAltOutlined';
|
|
32
|
+
import '../../hooks/useTooltipStyles.esm.js';
|
|
33
|
+
import '@backstage/catalog-model';
|
|
34
|
+
import '@backstage/plugin-catalog-react';
|
|
35
|
+
import '@material-ui/icons/LibraryBooksOutlined';
|
|
36
|
+
import { UserTooltip } from '../Tooltips/UserTooltip.esm.js';
|
|
37
|
+
import 'react-relative-time';
|
|
38
|
+
import '@material-ui/icons/ThumbUpOutlined';
|
|
39
|
+
import '@material-ui/icons/VisibilityOutlined';
|
|
40
|
+
import '@material-ui/icons/QuestionAnswerOutlined';
|
|
41
|
+
import '@material-ui/icons/ChatBubbleOutline';
|
|
42
|
+
import '@material-ui/icons/CheckCircleOutline';
|
|
23
43
|
|
|
24
44
|
const useStyles = makeStyles((theme) => ({
|
|
25
45
|
listItem: {
|
|
@@ -55,32 +75,42 @@ const FollowedUserItem = ({ entityRef }) => {
|
|
|
55
75
|
const userRoute = useRouteRef(userRouteRef);
|
|
56
76
|
const { name, initials, user } = useUserInfo(entityRef);
|
|
57
77
|
const href = `${userRoute()}/${entityRef}`;
|
|
58
|
-
return /* @__PURE__ */
|
|
59
|
-
|
|
78
|
+
return /* @__PURE__ */ jsx(
|
|
79
|
+
UserTooltip,
|
|
60
80
|
{
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
children:
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
entityRef,
|
|
82
|
+
interactive: false,
|
|
83
|
+
enterDelay: 400,
|
|
84
|
+
enterNextDelay: 400,
|
|
85
|
+
placement: "left",
|
|
86
|
+
children: /* @__PURE__ */ jsxs(
|
|
87
|
+
ListItem,
|
|
88
|
+
{
|
|
89
|
+
dense: true,
|
|
90
|
+
button: true,
|
|
91
|
+
className: classes.listItem,
|
|
92
|
+
component: Link,
|
|
93
|
+
to: href,
|
|
94
|
+
children: [
|
|
95
|
+
/* @__PURE__ */ jsx(
|
|
96
|
+
Avatar,
|
|
97
|
+
{
|
|
98
|
+
src: user?.spec?.profile?.picture,
|
|
99
|
+
alt: name,
|
|
100
|
+
className: classes.avatar,
|
|
101
|
+
children: initials
|
|
102
|
+
}
|
|
103
|
+
),
|
|
104
|
+
/* @__PURE__ */ jsx(
|
|
105
|
+
ListItemText,
|
|
106
|
+
{
|
|
107
|
+
primary: name ?? entityRef,
|
|
108
|
+
classes: { primary: classes.listItemText }
|
|
109
|
+
}
|
|
110
|
+
)
|
|
111
|
+
]
|
|
112
|
+
}
|
|
113
|
+
)
|
|
84
114
|
}
|
|
85
115
|
);
|
|
86
116
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FollowedUsersList.esm.js","sources":["../../../src/components/FollowedLists/FollowedUsersList.tsx"],"sourcesContent":["import { useUserFollow } from '../../hooks';\nimport { useUserInfo } from '../../hooks/useEntityAuthor';\nimport { RightList, RightListContainer } from '../Utility/RightList';\nimport {
|
|
1
|
+
{"version":3,"file":"FollowedUsersList.esm.js","sources":["../../../src/components/FollowedLists/FollowedUsersList.tsx"],"sourcesContent":["import { useUserFollow } from '../../hooks';\nimport { useUserInfo } from '../../hooks/useEntityAuthor';\nimport { RightList, RightListContainer } from '../Utility/RightList';\nimport { Avatar, ListItem, ListItemText, makeStyles } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation';\nimport { Link } from 'react-router-dom';\nimport { userRouteRef } from '../../routes';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { UserTooltip } from '../Tooltips';\n\nconst useStyles = makeStyles(theme => ({\n listItem: {\n display: 'flex',\n alignItems: 'center',\n padding: '0 4px',\n minHeight: 28,\n cursor: 'pointer',\n transition: 'background 0.2s',\n textDecoration: 'none',\n color: 'inherit',\n '&:hover': {\n background: theme.palette.action.hover,\n },\n },\n listItemText: {\n color: theme.palette.text.primary,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n flex: 1,\n },\n avatar: {\n width: 24,\n height: 24,\n fontSize: '0.75rem',\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(0.5),\n },\n}));\n\nconst FollowedUserItem = ({ entityRef }: { entityRef: string }) => {\n const classes = useStyles();\n const userRoute = useRouteRef(userRouteRef);\n const { name, initials, user } = useUserInfo(entityRef);\n const href = `${userRoute()}/${entityRef}`;\n\n return (\n <UserTooltip\n entityRef={entityRef}\n interactive={false}\n enterDelay={400}\n enterNextDelay={400}\n placement=\"left\"\n >\n <ListItem\n dense\n button\n className={classes.listItem}\n component={Link}\n to={href}\n >\n <Avatar\n src={user?.spec?.profile?.picture}\n alt={name}\n className={classes.avatar}\n >\n {initials}\n </Avatar>\n <ListItemText\n primary={name ?? entityRef}\n classes={{ primary: classes.listItemText }}\n />\n </ListItem>\n </UserTooltip>\n );\n};\n\nexport const FollowedUsersList = () => {\n const users = useUserFollow();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n if (users.users.length === 0 || users.loading) {\n return null;\n }\n\n return (\n <RightListContainer>\n <RightList title={t('rightMenu.followedUsers')} limit={5} randomize>\n {users.users.map(user => (\n <FollowedUserItem key={user} entityRef={user} />\n ))}\n </RightList>\n </RightListContainer>\n );\n};\n"],"names":[],"mappings":"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"}
|