@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.
Files changed (63) hide show
  1. package/dist/components/CollectionsContainer/CollectionsContainer.esm.js +2 -1
  2. package/dist/components/CollectionsContainer/CollectionsContainer.esm.js.map +1 -1
  3. package/dist/components/FaviconItem/FaviconItem.esm.js +20 -13
  4. package/dist/components/FaviconItem/FaviconItem.esm.js.map +1 -1
  5. package/dist/components/FollowedLists/FollowedCollectionsList.esm.js +60 -18
  6. package/dist/components/FollowedLists/FollowedCollectionsList.esm.js.map +1 -1
  7. package/dist/components/FollowedLists/FollowedEntitiesList.esm.js +46 -18
  8. package/dist/components/FollowedLists/FollowedEntitiesList.esm.js.map +1 -1
  9. package/dist/components/FollowedLists/FollowedTagsList.esm.js +44 -18
  10. package/dist/components/FollowedLists/FollowedTagsList.esm.js.map +1 -1
  11. package/dist/components/FollowedLists/FollowedUsersList.esm.js +56 -26
  12. package/dist/components/FollowedLists/FollowedUsersList.esm.js.map +1 -1
  13. package/dist/components/Links/Links.esm.js +27 -18
  14. package/dist/components/Links/Links.esm.js.map +1 -1
  15. package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js +4 -2
  16. package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js.map +1 -1
  17. package/dist/components/PostHighlightList/PostHighlightList.esm.js +23 -144
  18. package/dist/components/PostHighlightList/PostHighlightList.esm.js.map +1 -1
  19. package/dist/components/PostsContainer/PostsGridItem.esm.js +6 -11
  20. package/dist/components/PostsContainer/PostsGridItem.esm.js.map +1 -1
  21. package/dist/components/TagsAndEntities/EntityChip.esm.js +42 -109
  22. package/dist/components/TagsAndEntities/EntityChip.esm.js.map +1 -1
  23. package/dist/components/TagsAndEntities/TagChip.esm.js +56 -118
  24. package/dist/components/TagsAndEntities/TagChip.esm.js.map +1 -1
  25. package/dist/components/TagsContainer/EditTagModal.esm.js.map +1 -1
  26. package/dist/components/TagsContainer/TagsContainer.esm.js +2 -1
  27. package/dist/components/TagsContainer/TagsContainer.esm.js.map +1 -1
  28. package/dist/components/Timeline/TimelineItem.esm.js +54 -2
  29. package/dist/components/Timeline/TimelineItem.esm.js.map +1 -1
  30. package/dist/components/Tooltips/CollectionTooltip.esm.js +151 -0
  31. package/dist/components/Tooltips/CollectionTooltip.esm.js.map +1 -0
  32. package/dist/components/Tooltips/EntityTooltip.esm.js +188 -0
  33. package/dist/components/Tooltips/EntityTooltip.esm.js.map +1 -0
  34. package/dist/components/Tooltips/PostTooltip.esm.js +257 -0
  35. package/dist/components/Tooltips/PostTooltip.esm.js.map +1 -0
  36. package/dist/components/Tooltips/TagTooltip.esm.js +199 -0
  37. package/dist/components/Tooltips/TagTooltip.esm.js.map +1 -0
  38. package/dist/components/Tooltips/UserTooltip.esm.js +259 -0
  39. package/dist/components/Tooltips/UserTooltip.esm.js.map +1 -0
  40. package/dist/components/UsersContainer/UserListItem.esm.js +1 -0
  41. package/dist/components/UsersContainer/UserListItem.esm.js.map +1 -1
  42. package/dist/components/UsersContainer/UsersGridItem.esm.js +1 -0
  43. package/dist/components/UsersContainer/UsersGridItem.esm.js.map +1 -1
  44. package/dist/hooks/useCollectionsFollow.esm.js +21 -45
  45. package/dist/hooks/useCollectionsFollow.esm.js.map +1 -1
  46. package/dist/hooks/useEntityAuthor.esm.js +3 -5
  47. package/dist/hooks/useEntityAuthor.esm.js.map +1 -1
  48. package/dist/hooks/useEntityFollow.esm.js +25 -36
  49. package/dist/hooks/useEntityFollow.esm.js.map +1 -1
  50. package/dist/hooks/useFavicon.esm.js +52 -0
  51. package/dist/hooks/useFavicon.esm.js.map +1 -0
  52. package/dist/hooks/useFollow.esm.js +62 -0
  53. package/dist/hooks/useFollow.esm.js.map +1 -0
  54. package/dist/hooks/useTagsFollow.esm.js +22 -39
  55. package/dist/hooks/useTagsFollow.esm.js.map +1 -1
  56. package/dist/hooks/useUserFollow.esm.js +22 -39
  57. package/dist/hooks/useUserFollow.esm.js.map +1 -1
  58. package/dist/index.d.ts +29 -13
  59. package/dist/index.esm.js +2 -0
  60. package/dist/index.esm.js.map +1 -1
  61. package/package.json +3 -3
  62. package/dist/components/TagsAndEntities/UserChip.esm.js +0 -87
  63. 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,SACD,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;;;;"}
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, useEffect } from 'react';
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 [favicon, setFavicon] = useState(void 0);
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 { useEffect, useState } from 'react';\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 const [favicon, setFavicon] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n if (!url) return;\n\n qetaApi.fetchURLMetadata({ url }).then(response => {\n if (response.favicon) {\n setError(false);\n setFavicon(response.favicon);\n } else {\n setError(true);\n }\n });\n });\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":";;;;;;AAMa,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;AACxC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAA6B,KAAS,CAAA,CAAA;AAEpE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,GAAK,EAAA;AAEV,IAAA,OAAA,CAAQ,iBAAiB,EAAE,GAAA,EAAK,CAAA,CAAE,KAAK,CAAY,QAAA,KAAA;AACjD,MAAA,IAAI,SAAS,OAAS,EAAA;AACpB,QAAA,QAAA,CAAS,KAAK,CAAA;AACd,QAAA,UAAA,CAAW,SAAS,OAAO,CAAA;AAAA,OACtB,MAAA;AACL,QAAA,QAAA,CAAS,IAAI,CAAA;AAAA;AACf,KACD,CAAA;AAAA,GACF,CAAA;AAED,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;;;;"}
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, Tooltip, ListItemText } from '@material-ui/core';
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__ */ jsxs(
57
- ListItem,
88
+ return /* @__PURE__ */ jsx(
89
+ CollectionTooltip,
58
90
  {
59
- dense: true,
60
- button: true,
61
- className: classes.listItem,
62
- component: Link,
63
- to: href,
64
- children: [
65
- /* @__PURE__ */ jsx(Box, { className: classes.iconBox, children: /* @__PURE__ */ jsx(PlaylistPlayOutlined, { fontSize: "small" }) }),
66
- /* @__PURE__ */ jsx(Tooltip, { title: collection.title, arrow: true, children: /* @__PURE__ */ jsx(
67
- ListItemText,
68
- {
69
- primary: collection.title,
70
- classes: { primary: classes.listItemText }
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 {\n Box,\n ListItem,\n ListItemText,\n makeStyles,\n Tooltip,\n} 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';\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 <ListItem\n key={collection.id}\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 <Tooltip title={collection.title} arrow>\n <ListItemText\n primary={collection.title}\n classes={{ primary: classes.listItemText }}\n />\n </Tooltip>\n </ListItem>\n );\n })}\n </RightList>\n </RightListContainer>\n );\n};\n"],"names":[],"mappings":"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"}
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":"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"}
@@ -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, Tooltip, ListItemText } from '@material-ui/core';
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__ */ jsxs(
66
- ListItem,
83
+ return /* @__PURE__ */ jsx(
84
+ EntityTooltip,
67
85
  {
68
- dense: true,
69
- button: true,
70
- className: classes.listItem,
71
- component: Link,
72
- to: href,
73
- children: [
74
- /* @__PURE__ */ jsx(Box, { className: classes.iconBox, children: Icon ? /* @__PURE__ */ jsx(Icon, { fontSize: "small" }) : null }),
75
- /* @__PURE__ */ jsx(Tooltip, { title: primaryTitle ?? entityRef, arrow: true, children: /* @__PURE__ */ jsx(
76
- ListItemText,
77
- {
78
- primary: primaryTitle ?? entityRef,
79
- classes: { primary: classes.listItemText }
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 {\n Box,\n ListItem,\n ListItemText,\n makeStyles,\n Tooltip,\n} 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';\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 <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 <Tooltip title={primaryTitle ?? entityRef} arrow>\n <ListItemText\n primary={primaryTitle ?? entityRef}\n classes={{ primary: classes.listItemText }}\n />\n </Tooltip>\n </ListItem>\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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"}
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, Tooltip, ListItemText } from '@material-ui/core';
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__ */ jsxs(
72
- ListItem,
87
+ return /* @__PURE__ */ jsx(
88
+ TagTooltip,
73
89
  {
74
- dense: true,
75
- button: true,
76
- className: classes.listItem,
77
- component: Link,
78
- to: href,
79
- children: [
80
- /* @__PURE__ */ jsx(Box, { className: classes.iconBox, children: /* @__PURE__ */ jsx(LocalOfferOutlined, { fontSize: "small" }) }),
81
- /* @__PURE__ */ jsx(Tooltip, { title: tag, arrow: true, children: /* @__PURE__ */ jsx(
82
- ListItemText,
83
- {
84
- primary: `${tag}`,
85
- classes: { primary: classes.listItemText }
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 {\n Box,\n ListItem,\n ListItemText,\n makeStyles,\n Tooltip,\n} 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';\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 <ListItem\n key={tag}\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 <Tooltip title={tag} arrow>\n <ListItemText\n primary={`${tag}`}\n classes={{ primary: classes.listItemText }}\n />\n </Tooltip>\n </ListItem>\n );\n })}\n </RightList>\n </RightListContainer>\n );\n};\n"],"names":[],"mappings":"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"}
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, Tooltip, ListItemText } from '@material-ui/core';
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__ */ jsxs(
59
- ListItem,
78
+ return /* @__PURE__ */ jsx(
79
+ UserTooltip,
60
80
  {
61
- dense: true,
62
- button: true,
63
- className: classes.listItem,
64
- component: Link,
65
- to: href,
66
- children: [
67
- /* @__PURE__ */ jsx(
68
- Avatar,
69
- {
70
- src: user?.spec?.profile?.picture,
71
- alt: name,
72
- className: classes.avatar,
73
- children: initials
74
- }
75
- ),
76
- /* @__PURE__ */ jsx(Tooltip, { title: name ?? entityRef, arrow: true, children: /* @__PURE__ */ jsx(
77
- ListItemText,
78
- {
79
- primary: name ?? entityRef,
80
- classes: { primary: classes.listItemText }
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 {\n Avatar,\n ListItem,\n ListItemText,\n makeStyles,\n Tooltip,\n} 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';\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 <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 <Tooltip title={name ?? entityRef} arrow>\n <ListItemText\n primary={name ?? entityRef}\n classes={{ primary: classes.listItemText }}\n />\n </Tooltip>\n </ListItem>\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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"}
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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"}