@drodil/backstage-plugin-qeta-react 3.52.6 → 3.53.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 (166) hide show
  1. package/dist/components/AIAnswerCard/AIAnswerCard.esm.js +11 -11
  2. package/dist/components/AIAnswerCard/AIAnswerCard.esm.js.map +1 -1
  3. package/dist/components/AnswerForm/AnswerForm.esm.js +5 -0
  4. package/dist/components/AnswerForm/AnswerForm.esm.js.map +1 -1
  5. package/dist/components/AnswersContainer/AnswerListItem.esm.js +4 -2
  6. package/dist/components/AnswersContainer/AnswerListItem.esm.js.map +1 -1
  7. package/dist/components/AnswersContainer/AnswersContainer.esm.js +59 -231
  8. package/dist/components/AnswersContainer/AnswersContainer.esm.js.map +1 -1
  9. package/dist/components/AnswersContainer/AnswersGridItem.esm.js +167 -0
  10. package/dist/components/AnswersContainer/AnswersGridItem.esm.js.map +1 -0
  11. package/dist/components/ArticleContent/ArticleButtons.esm.js +3 -0
  12. package/dist/components/ArticleContent/ArticleButtons.esm.js.map +1 -1
  13. package/dist/components/Badges/UserBadges.esm.js +7 -2
  14. package/dist/components/Badges/UserBadges.esm.js.map +1 -1
  15. package/dist/components/Buttons/AddToCollectionButton.esm.js +7 -2
  16. package/dist/components/Buttons/AddToCollectionButton.esm.js.map +1 -1
  17. package/dist/components/Buttons/EntityFollowButton.esm.js +7 -2
  18. package/dist/components/Buttons/EntityFollowButton.esm.js.map +1 -1
  19. package/dist/components/Buttons/RankingButtons.esm.js +94 -0
  20. package/dist/components/Buttons/RankingButtons.esm.js.map +1 -0
  21. package/dist/components/Buttons/TagFollowButton.esm.js +8 -3
  22. package/dist/components/Buttons/TagFollowButton.esm.js.map +1 -1
  23. package/dist/components/Buttons/UserFollowButton.esm.js +7 -2
  24. package/dist/components/Buttons/UserFollowButton.esm.js.map +1 -1
  25. package/dist/components/CollectionsContainer/CollectionListItem.esm.js +143 -0
  26. package/dist/components/CollectionsContainer/CollectionListItem.esm.js.map +1 -0
  27. package/dist/components/CollectionsContainer/CollectionsContainer.esm.js +45 -0
  28. package/dist/components/CollectionsContainer/CollectionsContainer.esm.js.map +1 -0
  29. package/dist/components/CollectionsContainer/CollectionsGridItem.esm.js.map +1 -0
  30. package/dist/components/ContentHeader/ContentHeader.esm.js +6 -0
  31. package/dist/components/ContentHeader/ContentHeader.esm.js.map +1 -1
  32. package/dist/components/EntitiesContainer/EntitiesContainer.esm.js +44 -0
  33. package/dist/components/EntitiesContainer/EntitiesContainer.esm.js.map +1 -0
  34. package/dist/components/{EntitiesGrid → EntitiesContainer}/EntitiesGridItem.esm.js +18 -26
  35. package/dist/components/EntitiesContainer/EntitiesGridItem.esm.js.map +1 -0
  36. package/dist/components/EntitiesContainer/EntityListItem.esm.js +102 -0
  37. package/dist/components/EntitiesContainer/EntityListItem.esm.js.map +1 -0
  38. package/dist/components/FilterPanel/FilterPanel.esm.js +2 -2
  39. package/dist/components/FilterPanel/FilterPanel.esm.js.map +1 -1
  40. package/dist/components/FollowedLists/FollowedEntitiesList.esm.js +7 -3
  41. package/dist/components/FollowedLists/FollowedEntitiesList.esm.js.map +1 -1
  42. package/dist/components/FollowedLists/FollowedTagsList.esm.js +8 -4
  43. package/dist/components/FollowedLists/FollowedTagsList.esm.js.map +1 -1
  44. package/dist/components/FollowedLists/FollowedUsersList.esm.js +7 -3
  45. package/dist/components/FollowedLists/FollowedUsersList.esm.js.map +1 -1
  46. package/dist/components/HomePageCards/ImpactCard.esm.js +7 -2
  47. package/dist/components/HomePageCards/ImpactCard.esm.js.map +1 -1
  48. package/dist/components/HomePageCards/PostsCard.esm.js +23 -15
  49. package/dist/components/HomePageCards/PostsCard.esm.js.map +1 -1
  50. package/dist/components/LeftMenu/LeftMenu.esm.js +15 -16
  51. package/dist/components/LeftMenu/LeftMenu.esm.js.map +1 -1
  52. package/dist/components/LinkCard/LinkCard.esm.js +4 -0
  53. package/dist/components/LinkCard/LinkCard.esm.js.map +1 -1
  54. package/dist/components/Links/Links.esm.js +7 -0
  55. package/dist/components/Links/Links.esm.js.map +1 -1
  56. package/dist/components/PostForm/EntitiesInput.esm.js +229 -226
  57. package/dist/components/PostForm/EntitiesInput.esm.js.map +1 -1
  58. package/dist/components/PostForm/PostForm.esm.js +13 -10
  59. package/dist/components/PostForm/PostForm.esm.js.map +1 -1
  60. package/dist/components/PostForm/TagInput.esm.js +4 -3
  61. package/dist/components/PostForm/TagInput.esm.js.map +1 -1
  62. package/dist/components/PostHighlightList/PostHighlightList.esm.js +6 -2
  63. package/dist/components/PostHighlightList/PostHighlightList.esm.js.map +1 -1
  64. package/dist/components/PostsContainer/PostListItem.esm.js +57 -18
  65. package/dist/components/PostsContainer/PostListItem.esm.js.map +1 -1
  66. package/dist/components/PostsContainer/PostsContainer.esm.js +137 -128
  67. package/dist/components/PostsContainer/PostsContainer.esm.js.map +1 -1
  68. package/dist/components/{PostsGrid → PostsContainer}/PostsGridItem.esm.js +29 -53
  69. package/dist/components/PostsContainer/PostsGridItem.esm.js.map +1 -0
  70. package/dist/components/PostsTable/PostsTable.esm.js +7 -2
  71. package/dist/components/PostsTable/PostsTable.esm.js.map +1 -1
  72. package/dist/components/QetaEntityContainer/QetaEntityContainer.esm.js +178 -0
  73. package/dist/components/QetaEntityContainer/QetaEntityContainer.esm.js.map +1 -0
  74. package/dist/components/QuestionCard/QuestionCard.esm.js +4 -0
  75. package/dist/components/QuestionCard/QuestionCard.esm.js.map +1 -1
  76. package/dist/components/SuggestionsCard/SuggestionsCard.esm.js +7 -3
  77. package/dist/components/SuggestionsCard/SuggestionsCard.esm.js.map +1 -1
  78. package/dist/components/TagsAndEntities/EntityChip.esm.js +6 -2
  79. package/dist/components/TagsAndEntities/EntityChip.esm.js.map +1 -1
  80. package/dist/components/TagsAndEntities/TagChip.esm.js +6 -2
  81. package/dist/components/TagsAndEntities/TagChip.esm.js.map +1 -1
  82. package/dist/components/TagsAndEntities/UserChip.esm.js +7 -3
  83. package/dist/components/TagsAndEntities/UserChip.esm.js.map +1 -1
  84. package/dist/components/TagsContainer/CreateTagModal.esm.js.map +1 -0
  85. package/dist/components/TagsContainer/EditTagModal.esm.js.map +1 -0
  86. package/dist/components/{TagsGrid → TagsContainer}/TagGridItem.esm.js +3 -3
  87. package/dist/components/TagsContainer/TagGridItem.esm.js.map +1 -0
  88. package/dist/components/TagsContainer/TagListItem.esm.js +243 -0
  89. package/dist/components/TagsContainer/TagListItem.esm.js.map +1 -0
  90. package/dist/components/TagsContainer/TagsContainer.esm.js +86 -0
  91. package/dist/components/TagsContainer/TagsContainer.esm.js.map +1 -0
  92. package/dist/components/TemplateList/TemplateForm.esm.js +7 -2
  93. package/dist/components/TemplateList/TemplateForm.esm.js.map +1 -1
  94. package/dist/components/TemplateList/TemplateList.esm.js +7 -3
  95. package/dist/components/TemplateList/TemplateList.esm.js.map +1 -1
  96. package/dist/components/Timeline/TimelineItem.esm.js +4 -0
  97. package/dist/components/Timeline/TimelineItem.esm.js.map +1 -1
  98. package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js +7 -2
  99. package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js.map +1 -1
  100. package/dist/components/UsersContainer/UserListItem.esm.js +133 -0
  101. package/dist/components/UsersContainer/UserListItem.esm.js.map +1 -0
  102. package/dist/components/UsersContainer/UsersContainer.esm.js +44 -0
  103. package/dist/components/UsersContainer/UsersContainer.esm.js.map +1 -0
  104. package/dist/components/{UsersGrid → UsersContainer}/UsersGridItem.esm.js +35 -38
  105. package/dist/components/UsersContainer/UsersGridItem.esm.js.map +1 -0
  106. package/dist/components/Utility/QetaGridHeader.esm.js +15 -11
  107. package/dist/components/Utility/QetaGridHeader.esm.js.map +1 -1
  108. package/dist/components/Utility/QetaPagination.esm.js +69 -0
  109. package/dist/components/Utility/QetaPagination.esm.js.map +1 -0
  110. package/dist/hooks/useListItemStyles.esm.js +22 -0
  111. package/dist/hooks/useListItemStyles.esm.js.map +1 -0
  112. package/dist/hooks/{usePaginatedPosts.esm.js → useQetaEntities.esm.js} +59 -86
  113. package/dist/hooks/useQetaEntities.esm.js.map +1 -0
  114. package/dist/hooks/useUserSettings.esm.js +83 -0
  115. package/dist/hooks/useUserSettings.esm.js.map +1 -0
  116. package/dist/index.d.ts +209 -58
  117. package/dist/index.esm.js +21 -8
  118. package/dist/index.esm.js.map +1 -1
  119. package/dist/routes.esm.js +6 -1
  120. package/dist/routes.esm.js.map +1 -1
  121. package/dist/translation.esm.js +49 -0
  122. package/dist/translation.esm.js.map +1 -1
  123. package/package.json +2 -2
  124. package/dist/components/AnswersContainer/AnswerList.esm.js +0 -54
  125. package/dist/components/AnswersContainer/AnswerList.esm.js.map +0 -1
  126. package/dist/components/CollectionsGrid/CollectionsGrid.esm.js +0 -204
  127. package/dist/components/CollectionsGrid/CollectionsGrid.esm.js.map +0 -1
  128. package/dist/components/CollectionsGrid/CollectionsGridContent.esm.js +0 -55
  129. package/dist/components/CollectionsGrid/CollectionsGridContent.esm.js.map +0 -1
  130. package/dist/components/CollectionsGrid/CollectionsGridItem.esm.js.map +0 -1
  131. package/dist/components/CollectionsGrid/NoCollectionsCard.esm.js +0 -21
  132. package/dist/components/CollectionsGrid/NoCollectionsCard.esm.js.map +0 -1
  133. package/dist/components/EntitiesGrid/EntitiesGrid.esm.js +0 -136
  134. package/dist/components/EntitiesGrid/EntitiesGrid.esm.js.map +0 -1
  135. package/dist/components/EntitiesGrid/EntitiesGridContent.esm.js +0 -46
  136. package/dist/components/EntitiesGrid/EntitiesGridContent.esm.js.map +0 -1
  137. package/dist/components/EntitiesGrid/EntitiesGridItem.esm.js.map +0 -1
  138. package/dist/components/EntitiesGrid/NoEntitiesCard.esm.js +0 -21
  139. package/dist/components/EntitiesGrid/NoEntitiesCard.esm.js.map +0 -1
  140. package/dist/components/PostsContainer/PostList.esm.js +0 -83
  141. package/dist/components/PostsContainer/PostList.esm.js.map +0 -1
  142. package/dist/components/PostsGrid/PostsGrid.esm.js +0 -197
  143. package/dist/components/PostsGrid/PostsGrid.esm.js.map +0 -1
  144. package/dist/components/PostsGrid/PostsGridContent.esm.js +0 -90
  145. package/dist/components/PostsGrid/PostsGridContent.esm.js.map +0 -1
  146. package/dist/components/PostsGrid/PostsGridItem.esm.js.map +0 -1
  147. package/dist/components/TagsGrid/CreateTagModal.esm.js.map +0 -1
  148. package/dist/components/TagsGrid/EditTagModal.esm.js.map +0 -1
  149. package/dist/components/TagsGrid/NoTagsCard.esm.js +0 -21
  150. package/dist/components/TagsGrid/NoTagsCard.esm.js.map +0 -1
  151. package/dist/components/TagsGrid/TagGridItem.esm.js.map +0 -1
  152. package/dist/components/TagsGrid/TagsGrid.esm.js +0 -190
  153. package/dist/components/TagsGrid/TagsGrid.esm.js.map +0 -1
  154. package/dist/components/TagsGrid/TagsGridContent.esm.js +0 -62
  155. package/dist/components/TagsGrid/TagsGridContent.esm.js.map +0 -1
  156. package/dist/components/UsersGrid/NoUsersCard.esm.js +0 -21
  157. package/dist/components/UsersGrid/NoUsersCard.esm.js.map +0 -1
  158. package/dist/components/UsersGrid/UsersGrid.esm.js +0 -137
  159. package/dist/components/UsersGrid/UsersGrid.esm.js.map +0 -1
  160. package/dist/components/UsersGrid/UsersGridContent.esm.js +0 -46
  161. package/dist/components/UsersGrid/UsersGridContent.esm.js.map +0 -1
  162. package/dist/components/UsersGrid/UsersGridItem.esm.js.map +0 -1
  163. package/dist/hooks/usePaginatedPosts.esm.js.map +0 -1
  164. /package/dist/components/{CollectionsGrid → CollectionsContainer}/CollectionsGridItem.esm.js +0 -0
  165. /package/dist/components/{TagsGrid → TagsContainer}/CreateTagModal.esm.js +0 -0
  166. /package/dist/components/{TagsGrid → TagsContainer}/EditTagModal.esm.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"TagFollowButton.esm.js","sources":["../../../src/components/Buttons/TagFollowButton.tsx"],"sourcesContent":["import Visibility from '@material-ui/icons/Visibility';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\nimport { useTagsFollow } from '../../hooks';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nexport const TagFollowButton = (props: { tag: string }) => {\n const { tag } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const tags = useTagsFollow();\n if (tags.loading) {\n return null;\n }\n return (\n <Tooltip title={t('tagButton.tooltip')}>\n <IconButton\n disableRipple\n size=\"small\"\n color={tags.isFollowingTag(tag) ? 'secondary' : 'primary'}\n onClick={() => {\n if (tags.isFollowingTag(tag)) {\n tags.unfollowTag(tag);\n } else {\n tags.followTag(tag);\n }\n }}\n >\n {tags.isFollowingTag(tag) ? <VisibilityOff /> : <Visibility />}\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAOa,MAAA,eAAA,GAAkB,CAAC,KAA2B,KAAA;AACzD,EAAM,MAAA,EAAE,KAAQ,GAAA,KAAA;AAChB,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,OAAO,aAAc,EAAA;AAC3B,EAAA,IAAI,KAAK,OAAS,EAAA;AAChB,IAAO,OAAA,IAAA;AAAA;AAET,EAAA,uBACG,GAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,CAAA,CAAE,mBAAmB,CACnC,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,aAAa,EAAA,IAAA;AAAA,MACb,IAAK,EAAA,OAAA;AAAA,MACL,KAAO,EAAA,IAAA,CAAK,cAAe,CAAA,GAAG,IAAI,WAAc,GAAA,SAAA;AAAA,MAChD,SAAS,MAAM;AACb,QAAI,IAAA,IAAA,CAAK,cAAe,CAAA,GAAG,CAAG,EAAA;AAC5B,UAAA,IAAA,CAAK,YAAY,GAAG,CAAA;AAAA,SACf,MAAA;AACL,UAAA,IAAA,CAAK,UAAU,GAAG,CAAA;AAAA;AACpB,OACF;AAAA,MAEC,QAAA,EAAA,IAAA,CAAK,eAAe,GAAG,CAAA,uBAAK,aAAc,EAAA,EAAA,CAAA,uBAAM,UAAW,EAAA,EAAA;AAAA;AAAA,GAEhE,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"TagFollowButton.esm.js","sources":["../../../src/components/Buttons/TagFollowButton.tsx"],"sourcesContent":["import Visibility from '@material-ui/icons/Visibility';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\nimport { useTagsFollow } from '../../hooks';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nexport const TagFollowButton = (props: { tag: string }) => {\n const { tag } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const tags = useTagsFollow();\n if (tags.loading) {\n return null;\n }\n return (\n <Tooltip title={t('tagButton.tooltip')}>\n <IconButton\n disableRipple\n size=\"small\"\n color={tags.isFollowingTag(tag) ? 'secondary' : 'primary'}\n onClick={() => {\n if (tags.isFollowingTag(tag)) {\n tags.unfollowTag(tag);\n } else {\n tags.followTag(tag);\n }\n }}\n >\n {tags.isFollowingTag(tag) ? <VisibilityOff /> : <Visibility />}\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAOa,MAAA,eAAA,GAAkB,CAAC,KAA2B,KAAA;AACzD,EAAM,MAAA,EAAE,KAAQ,GAAA,KAAA;AAChB,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,OAAO,aAAc,EAAA;AAC3B,EAAA,IAAI,KAAK,OAAS,EAAA;AAChB,IAAO,OAAA,IAAA;AAAA;AAET,EAAA,uBACG,GAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,CAAA,CAAE,mBAAmB,CACnC,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,aAAa,EAAA,IAAA;AAAA,MACb,IAAK,EAAA,OAAA;AAAA,MACL,KAAO,EAAA,IAAA,CAAK,cAAe,CAAA,GAAG,IAAI,WAAc,GAAA,SAAA;AAAA,MAChD,SAAS,MAAM;AACb,QAAI,IAAA,IAAA,CAAK,cAAe,CAAA,GAAG,CAAG,EAAA;AAC5B,UAAA,IAAA,CAAK,YAAY,GAAG,CAAA;AAAA,SACf,MAAA;AACL,UAAA,IAAA,CAAK,UAAU,GAAG,CAAA;AAAA;AACpB,OACF;AAAA,MAEC,QAAA,EAAA,IAAA,CAAK,eAAe,GAAG,CAAA,uBAAK,aAAc,EAAA,EAAA,CAAA,uBAAM,UAAW,EAAA,EAAA;AAAA;AAAA,GAEhE,EAAA,CAAA;AAEJ;;;;"}
@@ -5,17 +5,22 @@ import '@backstage/core-plugin-api';
5
5
  import '../../api.esm.js';
6
6
  import 'react-use';
7
7
  import 'react';
8
+ import '@backstage/plugin-signals-react';
9
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
10
+ import { qetaTranslationRef } from '../../translation.esm.js';
11
+ import '../../hooks/useListItemStyles.esm.js';
8
12
  import '@backstage/catalog-model';
9
13
  import 'dataloader';
10
14
  import '@backstage/plugin-catalog-react';
11
- import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
12
- import { qetaTranslationRef } from '../../translation.esm.js';
13
15
  import { useUserFollow } from '../../hooks/useUserFollow.esm.js';
14
16
  import 'react-use/lib/useAsync';
15
17
  import '@backstage/plugin-permission-react';
16
18
  import '@drodil/backstage-plugin-qeta-common';
17
19
  import '@backstage/plugin-permission-common';
18
20
  import { Tooltip, IconButton } from '@material-ui/core';
21
+ import 'react-router-dom';
22
+ import 'react-use/lib/useDebounce';
23
+ import '../FilterPanel/FilterPanel.esm.js';
19
24
 
20
25
  const UserFollowButton = (props) => {
21
26
  const { userRef, style } = props;
@@ -1 +1 @@
1
- {"version":3,"file":"UserFollowButton.esm.js","sources":["../../../src/components/Buttons/UserFollowButton.tsx"],"sourcesContent":["import { CSSProperties } from 'react';\nimport Visibility from '@material-ui/icons/Visibility';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\nimport { useUserFollow } from '../../hooks';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const UserFollowButton = (props: {\n userRef: string;\n style?: CSSProperties;\n}) => {\n const { userRef, style } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const users = useUserFollow();\n if (users.loading) {\n return null;\n }\n\n return (\n <Tooltip title={t('userButton.tooltip')}>\n <IconButton\n disableRipple\n size=\"small\"\n color={users.isFollowingUser(userRef) ? 'secondary' : 'primary'}\n onClick={() => {\n if (users.isFollowingUser(userRef)) {\n users.unfollowUser(userRef);\n } else {\n users.followUser(userRef);\n }\n }}\n style={style}\n >\n {users.isFollowingUser(userRef) ? <VisibilityOff /> : <Visibility />}\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAQa,MAAA,gBAAA,GAAmB,CAAC,KAG3B,KAAA;AACJ,EAAM,MAAA,EAAE,OAAS,EAAA,KAAA,EAAU,GAAA,KAAA;AAC3B,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,QAAQ,aAAc,EAAA;AAC5B,EAAA,IAAI,MAAM,OAAS,EAAA;AACjB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,uBACG,GAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,CAAA,CAAE,oBAAoB,CACpC,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,aAAa,EAAA,IAAA;AAAA,MACb,IAAK,EAAA,OAAA;AAAA,MACL,KAAO,EAAA,KAAA,CAAM,eAAgB,CAAA,OAAO,IAAI,WAAc,GAAA,SAAA;AAAA,MACtD,SAAS,MAAM;AACb,QAAI,IAAA,KAAA,CAAM,eAAgB,CAAA,OAAO,CAAG,EAAA;AAClC,UAAA,KAAA,CAAM,aAAa,OAAO,CAAA;AAAA,SACrB,MAAA;AACL,UAAA,KAAA,CAAM,WAAW,OAAO,CAAA;AAAA;AAC1B,OACF;AAAA,MACA,KAAA;AAAA,MAEC,QAAA,EAAA,KAAA,CAAM,gBAAgB,OAAO,CAAA,uBAAK,aAAc,EAAA,EAAA,CAAA,uBAAM,UAAW,EAAA,EAAA;AAAA;AAAA,GAEtE,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"UserFollowButton.esm.js","sources":["../../../src/components/Buttons/UserFollowButton.tsx"],"sourcesContent":["import { CSSProperties } from 'react';\nimport Visibility from '@material-ui/icons/Visibility';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\nimport { useUserFollow } from '../../hooks';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const UserFollowButton = (props: {\n userRef: string;\n style?: CSSProperties;\n}) => {\n const { userRef, style } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const users = useUserFollow();\n if (users.loading) {\n return null;\n }\n\n return (\n <Tooltip title={t('userButton.tooltip')}>\n <IconButton\n disableRipple\n size=\"small\"\n color={users.isFollowingUser(userRef) ? 'secondary' : 'primary'}\n onClick={() => {\n if (users.isFollowingUser(userRef)) {\n users.unfollowUser(userRef);\n } else {\n users.followUser(userRef);\n }\n }}\n style={style}\n >\n {users.isFollowingUser(userRef) ? <VisibilityOff /> : <Visibility />}\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAQa,MAAA,gBAAA,GAAmB,CAAC,KAG3B,KAAA;AACJ,EAAM,MAAA,EAAE,OAAS,EAAA,KAAA,EAAU,GAAA,KAAA;AAC3B,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,QAAQ,aAAc,EAAA;AAC5B,EAAA,IAAI,MAAM,OAAS,EAAA;AACjB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,uBACG,GAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,CAAA,CAAE,oBAAoB,CACpC,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,aAAa,EAAA,IAAA;AAAA,MACb,IAAK,EAAA,OAAA;AAAA,MACL,KAAO,EAAA,KAAA,CAAM,eAAgB,CAAA,OAAO,IAAI,WAAc,GAAA,SAAA;AAAA,MACtD,SAAS,MAAM;AACb,QAAI,IAAA,KAAA,CAAM,eAAgB,CAAA,OAAO,CAAG,EAAA;AAClC,UAAA,KAAA,CAAM,aAAa,OAAO,CAAA;AAAA,SACrB,MAAA;AACL,UAAA,KAAA,CAAM,WAAW,OAAO,CAAA;AAAA;AAC1B,OACF;AAAA,MACA,KAAA;AAAA,MAEC,QAAA,EAAA,KAAA,CAAM,gBAAgB,OAAO,CAAA,uBAAK,aAAc,EAAA,EAAA,CAAA,uBAAM,UAAW,EAAA,EAAA;AAAA;AAAA,GAEtE,EAAA,CAAA;AAEJ;;;;"}
@@ -0,0 +1,143 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { truncate, removeMarkdownFormatting } from '@drodil/backstage-plugin-qeta-common';
3
+ import { useRouteRef } from '@backstage/core-plugin-api';
4
+ import { collectionRouteRef } from '../../routes.esm.js';
5
+ import { makeStyles, ListItemAvatar, Box, Typography, Tooltip } from '@material-ui/core';
6
+ import DOMPurify from 'dompurify';
7
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
8
+ import { qetaTranslationRef } from '../../translation.esm.js';
9
+ import { CollectionFollowButton } from '../Buttons/CollectionFollowButton.esm.js';
10
+ import PlaylistPlayIcon from '@material-ui/icons/PlaylistPlay';
11
+ import QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';
12
+ import PeopleIcon from '@material-ui/icons/People';
13
+ import LinkIcon from '@material-ui/icons/Link';
14
+ import DescriptionIcon from '@material-ui/icons/Description';
15
+ import { Link } from 'react-router-dom';
16
+ import '../../api.esm.js';
17
+ import 'react-use';
18
+ import 'react';
19
+ import '@backstage/plugin-signals-react';
20
+ import { useListItemStyles } from '../../hooks/useListItemStyles.esm.js';
21
+ import '@backstage/catalog-model';
22
+ import 'dataloader';
23
+ import '@backstage/plugin-catalog-react';
24
+ import 'react-use/lib/useAsync';
25
+ import '@backstage/plugin-permission-react';
26
+ import '@backstage/plugin-permission-common';
27
+ import 'react-use/lib/useDebounce';
28
+ import '../FilterPanel/FilterPanel.esm.js';
29
+
30
+ const useStyles = makeStyles((theme) => ({
31
+ content: {
32
+ flex: 1,
33
+ minWidth: 0,
34
+ display: "flex",
35
+ flexDirection: "column",
36
+ marginLeft: theme.spacing(2)
37
+ },
38
+ title: {
39
+ fontWeight: 600
40
+ },
41
+ description: {
42
+ color: theme.palette.text.secondary,
43
+ fontSize: "0.875rem",
44
+ marginTop: theme.spacing(0.5),
45
+ overflow: "hidden",
46
+ textOverflow: "ellipsis",
47
+ whiteSpace: "nowrap"
48
+ },
49
+ statsWrapper: {
50
+ display: "flex",
51
+ gap: theme.spacing(3),
52
+ marginLeft: theme.spacing(2),
53
+ alignItems: "center",
54
+ [theme.breakpoints.down("sm")]: {
55
+ display: "none"
56
+ }
57
+ },
58
+ statItem: {
59
+ display: "flex",
60
+ alignItems: "center",
61
+ gap: theme.spacing(0.5),
62
+ color: theme.palette.text.secondary
63
+ },
64
+ actions: {
65
+ marginLeft: theme.spacing(2)
66
+ },
67
+ avatar: {
68
+ width: 50,
69
+ height: 50,
70
+ borderRadius: theme.shape.borderRadius,
71
+ display: "flex",
72
+ alignItems: "center",
73
+ justifyContent: "center",
74
+ backgroundColor: theme.palette.type === "dark" ? theme.palette.grey[800] : theme.palette.grey[200],
75
+ color: theme.palette.text.secondary
76
+ },
77
+ image: {
78
+ objectFit: "cover",
79
+ width: "100%",
80
+ height: "100%",
81
+ borderRadius: theme.shape.borderRadius
82
+ }
83
+ }));
84
+ const CollectionListItem = (props) => {
85
+ const { collection } = props;
86
+ const classes = useStyles();
87
+ const listItemClasses = useListItemStyles();
88
+ const { t } = useTranslationRef(qetaTranslationRef);
89
+ const collectionRoute = useRouteRef(collectionRouteRef);
90
+ const href = collectionRoute({ id: collection.id.toString(10) });
91
+ return /* @__PURE__ */ jsxs(Link, { to: href, className: listItemClasses.root, children: [
92
+ /* @__PURE__ */ jsx(ListItemAvatar, { className: classes.avatar, children: collection.headerImage ? /* @__PURE__ */ jsx(
93
+ "img",
94
+ {
95
+ src: collection.headerImage,
96
+ alt: collection.title,
97
+ className: classes.image,
98
+ onError: (e) => {
99
+ e.currentTarget.style.display = "none";
100
+ e.currentTarget.parentElement.innerHTML = "";
101
+ }
102
+ }
103
+ ) : /* @__PURE__ */ jsx(PlaylistPlayIcon, {}) }),
104
+ /* @__PURE__ */ jsxs(Box, { className: classes.content, children: [
105
+ /* @__PURE__ */ jsx(Typography, { className: classes.title, noWrap: true, children: collection.title }),
106
+ collection.description && /* @__PURE__ */ jsx(Typography, { className: classes.description, children: DOMPurify.sanitize(
107
+ truncate(removeMarkdownFormatting(collection.description), 100)
108
+ ) })
109
+ ] }),
110
+ /* @__PURE__ */ jsxs(Box, { className: classes.statsWrapper, children: [
111
+ /* @__PURE__ */ jsx(Tooltip, { title: t("common.questions"), arrow: true, children: /* @__PURE__ */ jsxs("div", { className: classes.statItem, children: [
112
+ /* @__PURE__ */ jsx(QuestionAnswerIcon, { fontSize: "small" }),
113
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: collection.questionsCount })
114
+ ] }) }),
115
+ /* @__PURE__ */ jsx(Tooltip, { title: t("common.articles"), arrow: true, children: /* @__PURE__ */ jsxs("div", { className: classes.statItem, children: [
116
+ /* @__PURE__ */ jsx(DescriptionIcon, { fontSize: "small" }),
117
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: collection.articlesCount })
118
+ ] }) }),
119
+ /* @__PURE__ */ jsx(Tooltip, { title: t("common.links"), arrow: true, children: /* @__PURE__ */ jsxs("div", { className: classes.statItem, children: [
120
+ /* @__PURE__ */ jsx(LinkIcon, { fontSize: "small" }),
121
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: collection.linksCount })
122
+ ] }) }),
123
+ /* @__PURE__ */ jsx(Tooltip, { title: t("common.followersPlain"), arrow: true, children: /* @__PURE__ */ jsxs("div", { className: classes.statItem, children: [
124
+ /* @__PURE__ */ jsx(PeopleIcon, { fontSize: "small" }),
125
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: collection.followers })
126
+ ] }) })
127
+ ] }),
128
+ /* @__PURE__ */ jsx(
129
+ Box,
130
+ {
131
+ className: classes.actions,
132
+ onClick: (e) => {
133
+ e.preventDefault();
134
+ e.stopPropagation();
135
+ },
136
+ children: /* @__PURE__ */ jsx(CollectionFollowButton, { collection })
137
+ }
138
+ )
139
+ ] });
140
+ };
141
+
142
+ export { CollectionListItem };
143
+ //# sourceMappingURL=CollectionListItem.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollectionListItem.esm.js","sources":["../../../src/components/CollectionsContainer/CollectionListItem.tsx"],"sourcesContent":["import {\n Collection,\n removeMarkdownFormatting,\n truncate,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { collectionRouteRef } from '../../routes';\nimport {\n Box,\n ListItemAvatar,\n makeStyles,\n Tooltip,\n Typography,\n} from '@material-ui/core';\nimport DOMPurify from 'dompurify';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation';\nimport { CollectionFollowButton } from '../Buttons/CollectionFollowButton';\nimport PlaylistPlayIcon from '@material-ui/icons/PlaylistPlay';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport PeopleIcon from '@material-ui/icons/People';\nimport LinkIcon from '@material-ui/icons/Link';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport { Link } from 'react-router-dom';\n\nimport { useListItemStyles } from '../../hooks';\n\nconst useStyles = makeStyles(theme => ({\n content: {\n flex: 1,\n minWidth: 0,\n display: 'flex',\n flexDirection: 'column',\n marginLeft: theme.spacing(2),\n },\n title: {\n fontWeight: 600,\n },\n description: {\n color: theme.palette.text.secondary,\n fontSize: '0.875rem',\n marginTop: theme.spacing(0.5),\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n statsWrapper: {\n display: 'flex',\n gap: theme.spacing(3),\n marginLeft: theme.spacing(2),\n alignItems: 'center',\n [theme.breakpoints.down('sm')]: {\n display: 'none',\n },\n },\n statItem: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n color: theme.palette.text.secondary,\n },\n actions: {\n marginLeft: theme.spacing(2),\n },\n avatar: {\n width: 50,\n height: 50,\n borderRadius: theme.shape.borderRadius,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor:\n theme.palette.type === 'dark'\n ? theme.palette.grey[800]\n : theme.palette.grey[200],\n color: theme.palette.text.secondary,\n },\n image: {\n objectFit: 'cover',\n width: '100%',\n height: '100%',\n borderRadius: theme.shape.borderRadius,\n },\n}));\n\nexport const CollectionListItem = (props: { collection: Collection }) => {\n const { collection } = props;\n const classes = useStyles();\n const listItemClasses = useListItemStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const collectionRoute = useRouteRef(collectionRouteRef);\n const href = collectionRoute({ id: collection.id.toString(10) });\n\n return (\n <Link to={href} className={listItemClasses.root}>\n <ListItemAvatar className={classes.avatar}>\n {collection.headerImage ? (\n <img\n src={collection.headerImage}\n alt={collection.title}\n className={classes.image}\n onError={e => {\n (e.currentTarget as HTMLImageElement).style.display = 'none';\n (e.currentTarget.parentElement as HTMLElement).innerHTML = '';\n }}\n />\n ) : (\n <PlaylistPlayIcon />\n )}\n </ListItemAvatar>\n <Box className={classes.content}>\n <Typography className={classes.title} noWrap>\n {collection.title}\n </Typography>\n {collection.description && (\n <Typography className={classes.description}>\n {DOMPurify.sanitize(\n truncate(removeMarkdownFormatting(collection.description), 100),\n )}\n </Typography>\n )}\n </Box>\n\n <Box className={classes.statsWrapper}>\n <Tooltip title={t('common.questions')} arrow>\n <div className={classes.statItem}>\n <QuestionAnswerIcon fontSize=\"small\" />\n <Typography variant=\"body2\">{collection.questionsCount}</Typography>\n </div>\n </Tooltip>\n <Tooltip title={t('common.articles')} arrow>\n <div className={classes.statItem}>\n <DescriptionIcon fontSize=\"small\" />\n <Typography variant=\"body2\">{collection.articlesCount}</Typography>\n </div>\n </Tooltip>\n <Tooltip title={t('common.links')} arrow>\n <div className={classes.statItem}>\n <LinkIcon fontSize=\"small\" />\n <Typography variant=\"body2\">{collection.linksCount}</Typography>\n </div>\n </Tooltip>\n <Tooltip title={t('common.followersPlain')} arrow>\n <div className={classes.statItem}>\n <PeopleIcon fontSize=\"small\" />\n <Typography variant=\"body2\">{collection.followers}</Typography>\n </div>\n </Tooltip>\n </Box>\n\n <Box\n className={classes.actions}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <CollectionFollowButton collection={collection} />\n </Box>\n </Link>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
3
+ import { qetaTranslationRef } from '../../translation.esm.js';
4
+ import { CollectionsGridItem } from './CollectionsGridItem.esm.js';
5
+ import { CollectionListItem } from './CollectionListItem.esm.js';
6
+ import { QetaEntityContainer } from '../QetaEntityContainer/QetaEntityContainer.esm.js';
7
+
8
+ const CollectionsContainer = (props) => {
9
+ const { filterPanelProps, defaultView, owner, prefix } = props;
10
+ const { t } = useTranslationRef(qetaTranslationRef);
11
+ return /* @__PURE__ */ jsx(
12
+ QetaEntityContainer,
13
+ {
14
+ prefix: prefix ?? "collections",
15
+ defaultPageSize: 24,
16
+ defaultView,
17
+ initialFilters: {
18
+ order: "desc",
19
+ searchQuery: "",
20
+ orderBy: "created"
21
+ },
22
+ fetch: (api, limit, offset, filters) => {
23
+ return api.getCollections({
24
+ limit,
25
+ offset,
26
+ searchQuery: filters.searchQuery,
27
+ owner
28
+ }).then((res) => ({ items: res.collections, total: res.total }));
29
+ },
30
+ filterPanelProps: {
31
+ ...filterPanelProps,
32
+ mode: "collections"
33
+ },
34
+ renderListItem: (collection) => /* @__PURE__ */ jsx(CollectionListItem, { collection }),
35
+ renderGridItem: (collection) => /* @__PURE__ */ jsx(CollectionsGridItem, { collection }),
36
+ title: (total) => t("common.collections", { count: total }),
37
+ searchPlaceholder: t("collectionsPage.search.label"),
38
+ emptyMessage: t("common.collections", { count: 0 }),
39
+ getKey: (collection) => collection.id
40
+ }
41
+ );
42
+ };
43
+
44
+ export { CollectionsContainer };
45
+ //# sourceMappingURL=CollectionsContainer.esm.js.map
@@ -0,0 +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 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;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;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollectionsGridItem.esm.js","sources":["../../../src/components/CollectionsContainer/CollectionsGridItem.tsx"],"sourcesContent":["import {\n Collection,\n removeMarkdownFormatting,\n truncate,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { collectionRouteRef } from '../../routes';\nimport {\n Box,\n Card,\n CardContent,\n CardMedia,\n Grid,\n makeStyles,\n Typography,\n} from '@material-ui/core';\nimport DOMPurify from 'dompurify';\nimport { TagsAndEntities } from '../TagsAndEntities/TagsAndEntities';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { CollectionFollowButton } from '../Buttons/CollectionFollowButton';\nimport { ClickableLink } from '../Utility/ClickableLink';\nimport PlaylistPlayIcon from '@material-ui/icons/PlaylistPlay';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport PeopleIcon from '@material-ui/icons/People';\nimport LinkIcon from '@material-ui/icons/Link';\nimport DescriptionIcon from '@material-ui/icons/Description';\n\nexport interface PostsGridItemProps {\n collection: Collection;\n}\n\nconst useStyles = makeStyles(theme => ({\n placeholderImage: {\n height: 140,\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background:\n theme.palette.type === 'dark'\n ? `linear-gradient(135deg, ${theme.palette.grey[800]} 0%, ${theme.palette.grey[900]} 100%)`\n : `linear-gradient(135deg, ${theme.palette.grey[200]} 0%, ${theme.palette.grey[300]} 100%)`,\n color: theme.palette.text.secondary,\n opacity: 0.8,\n },\n card: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n cursor: 'pointer',\n position: 'relative',\n '&:hover::after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'currentColor',\n opacity: theme.palette.action.hoverOpacity || 0.04,\n borderRadius: theme.shape.borderRadius,\n pointerEvents: 'none',\n },\n },\n statsGrid: {\n marginTop: 'auto',\n },\n statItem: {\n padding: theme.spacing(1),\n borderRadius: theme.shape.borderRadius,\n width: '100%',\n height: '100%',\n justifyContent: 'center',\n },\n}));\n\nexport const CollectionsGridItem = (props: PostsGridItemProps) => {\n const { collection } = props;\n const classes = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const collectionRoute = useRouteRef(collectionRouteRef);\n const href = collectionRoute({ id: collection.id.toString(10) });\n\n return (\n <Card className={classes.card}>\n <ClickableLink href={href} ariaLabel={collection.title}>\n {collection.headerImage ? (\n <CardMedia\n component=\"img\"\n height=\"140\"\n onError={e => (e.currentTarget.style.display = 'none')}\n image={collection.headerImage}\n alt={collection.title}\n style={{ objectFit: 'cover' }}\n />\n ) : (\n <Box className={classes.placeholderImage}>\n <PlaylistPlayIcon style={{ fontSize: 60 }} />\n </Box>\n )}\n <CardContent\n style={{\n paddingBottom: '0.5rem',\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n <Box\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"flex-start\"\n >\n <Typography gutterBottom variant=\"h6\" component=\"div\">\n {collection.title}\n </Typography>\n <Box\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <CollectionFollowButton collection={collection} />\n </Box>\n </Box>\n {collection.description && (\n <Typography variant=\"body2\" color=\"textSecondary\" gutterBottom>\n {DOMPurify.sanitize(\n truncate(removeMarkdownFormatting(collection.description), 200),\n )}\n </Typography>\n )}\n <Box mt={2}>\n <TagsAndEntities entity={collection} />\n </Box>\n <Grid container spacing={1} className={classes.statsGrid}>\n <Grid item xs={3}>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n className={classes.statItem}\n >\n <QuestionAnswerIcon fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {collection.questionsCount}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('common.questions')}\n </Typography>\n </Box>\n </Grid>\n <Grid item xs={3}>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n className={classes.statItem}\n >\n <DescriptionIcon fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {collection.articlesCount}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('common.articles')}\n </Typography>\n </Box>\n </Grid>\n <Grid item xs={3}>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n className={classes.statItem}\n >\n <LinkIcon fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {collection.linksCount}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('common.links')}\n </Typography>\n </Box>\n </Grid>\n <Grid item xs={3}>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n className={classes.statItem}\n >\n <PeopleIcon fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {collection.followers}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('common.followersPlain')}\n </Typography>\n </Box>\n </Grid>\n </Grid>\n </CardContent>\n </ClickableLink>\n </Card>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAgCA,MAAM,SAAA,GAAY,WAAW,CAAU,KAAA,MAAA;AAAA,EACrC,gBAAkB,EAAA;AAAA,IAChB,MAAQ,EAAA,GAAA;AAAA,IACR,KAAO,EAAA,MAAA;AAAA,IACP,OAAS,EAAA,MAAA;AAAA,IACT,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA,QAAA;AAAA,IAChB,UACE,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,KAAS,MACnB,GAAA,CAAA,wBAAA,EAA2B,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,GAAG,CAAC,CAAA,KAAA,EAAQ,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,GAAG,CAAC,CAAA,MAAA,CAAA,GACjF,CAA2B,wBAAA,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,GAAG,CAAC,CAAQ,KAAA,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA,MAAA,CAAA;AAAA,IACvF,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,SAAA;AAAA,IAC1B,OAAS,EAAA;AAAA,GACX;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,MAAQ,EAAA,MAAA;AAAA,IACR,OAAS,EAAA,MAAA;AAAA,IACT,aAAe,EAAA,QAAA;AAAA,IACf,MAAQ,EAAA,SAAA;AAAA,IACR,QAAU,EAAA,UAAA;AAAA,IACV,gBAAkB,EAAA;AAAA,MAChB,OAAS,EAAA,IAAA;AAAA,MACT,QAAU,EAAA,UAAA;AAAA,MACV,GAAK,EAAA,CAAA;AAAA,MACL,IAAM,EAAA,CAAA;AAAA,MACN,KAAO,EAAA,CAAA;AAAA,MACP,MAAQ,EAAA,CAAA;AAAA,MACR,eAAiB,EAAA,cAAA;AAAA,MACjB,OAAS,EAAA,KAAA,CAAM,OAAQ,CAAA,MAAA,CAAO,YAAgB,IAAA,IAAA;AAAA,MAC9C,YAAA,EAAc,MAAM,KAAM,CAAA,YAAA;AAAA,MAC1B,aAAe,EAAA;AAAA;AACjB,GACF;AAAA,EACA,SAAW,EAAA;AAAA,IACT,SAAW,EAAA;AAAA,GACb;AAAA,EACA,QAAU,EAAA;AAAA,IACR,OAAA,EAAS,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IACxB,YAAA,EAAc,MAAM,KAAM,CAAA,YAAA;AAAA,IAC1B,KAAO,EAAA,MAAA;AAAA,IACP,MAAQ,EAAA,MAAA;AAAA,IACR,cAAgB,EAAA;AAAA;AAEpB,CAAE,CAAA,CAAA;AAEW,MAAA,mBAAA,GAAsB,CAAC,KAA8B,KAAA;AAChE,EAAM,MAAA,EAAE,YAAe,GAAA,KAAA;AACvB,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAM,MAAA,eAAA,GAAkB,YAAY,kBAAkB,CAAA;AACtD,EAAM,MAAA,IAAA,GAAO,gBAAgB,EAAE,EAAA,EAAI,WAAW,EAAG,CAAA,QAAA,CAAS,EAAE,CAAA,EAAG,CAAA;AAE/D,EACE,uBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAW,OAAQ,CAAA,IAAA,EACvB,+BAAC,aAAc,EAAA,EAAA,IAAA,EAAY,SAAW,EAAA,UAAA,CAAW,KAC9C,EAAA,QAAA,EAAA;AAAA,IAAA,UAAA,CAAW,WACV,mBAAA,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,SAAU,EAAA,KAAA;AAAA,QACV,MAAO,EAAA,KAAA;AAAA,QACP,OAAS,EAAA,CAAA,CAAA,KAAM,CAAE,CAAA,aAAA,CAAc,MAAM,OAAU,GAAA,MAAA;AAAA,QAC/C,OAAO,UAAW,CAAA,WAAA;AAAA,QAClB,KAAK,UAAW,CAAA,KAAA;AAAA,QAChB,KAAA,EAAO,EAAE,SAAA,EAAW,OAAQ;AAAA;AAAA,KAG9B,mBAAA,GAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAW,OAAQ,CAAA,gBAAA,EACtB,QAAC,kBAAA,GAAA,CAAA,gBAAA,EAAA,EAAiB,KAAO,EAAA,EAAE,QAAU,EAAA,EAAA,IAAM,CAC7C,EAAA,CAAA;AAAA,oBAEF,IAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,KAAO,EAAA;AAAA,UACL,aAAe,EAAA,QAAA;AAAA,UACf,QAAU,EAAA,CAAA;AAAA,UACV,OAAS,EAAA,MAAA;AAAA,UACT,aAAe,EAAA;AAAA,SACjB;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAA,IAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACC,OAAQ,EAAA,MAAA;AAAA,cACR,cAAe,EAAA,eAAA;AAAA,cACf,UAAW,EAAA,YAAA;AAAA,cAEX,QAAA,EAAA;AAAA,gCAAC,GAAA,CAAA,UAAA,EAAA,EAAW,cAAY,IAAC,EAAA,OAAA,EAAQ,MAAK,SAAU,EAAA,KAAA,EAC7C,qBAAW,KACd,EAAA,CAAA;AAAA,gCACA,GAAA;AAAA,kBAAC,GAAA;AAAA,kBAAA;AAAA,oBACC,SAAS,CAAK,CAAA,KAAA;AACZ,sBAAA,CAAA,CAAE,cAAe,EAAA;AACjB,sBAAA,CAAA,CAAE,eAAgB,EAAA;AAAA,qBACpB;AAAA,oBAEA,QAAA,kBAAA,GAAA,CAAC,0BAAuB,UAAwB,EAAA;AAAA;AAAA;AAClD;AAAA;AAAA,WACF;AAAA,UACC,UAAA,CAAW,WACV,oBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,SAAQ,KAAM,EAAA,eAAA,EAAgB,YAAY,EAAA,IAAA,EAC3D,QAAU,EAAA,SAAA,CAAA,QAAA;AAAA,YACT,QAAS,CAAA,wBAAA,CAAyB,UAAW,CAAA,WAAW,GAAG,GAAG;AAAA,WAElE,EAAA,CAAA;AAAA,0BAEF,GAAA,CAAC,OAAI,EAAI,EAAA,CAAA,EACP,8BAAC,eAAgB,EAAA,EAAA,MAAA,EAAQ,YAAY,CACvC,EAAA,CAAA;AAAA,0BACA,IAAA,CAAC,QAAK,SAAS,EAAA,IAAA,EAAC,SAAS,CAAG,EAAA,SAAA,EAAW,QAAQ,SAC7C,EAAA,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,CACb,EAAA,QAAA,kBAAA,IAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,OAAQ,EAAA,MAAA;AAAA,gBACR,aAAc,EAAA,QAAA;AAAA,gBACd,UAAW,EAAA,QAAA;AAAA,gBACX,WAAW,OAAQ,CAAA,QAAA;AAAA,gBAEnB,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,kBAAmB,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,KAAA,EAAM,UAAW,EAAA,CAAA;AAAA,kCACtD,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,KAAA,EAAO,EAAE,UAAY,EAAA,GAAA,EAC9C,EAAA,QAAA,EAAA,UAAA,CAAW,cACd,EAAA,CAAA;AAAA,kCACA,GAAA,CAAC,cAAW,OAAQ,EAAA,SAAA,EAAU,OAAM,eACjC,EAAA,QAAA,EAAA,CAAA,CAAE,kBAAkB,CACvB,EAAA;AAAA;AAAA;AAAA,aAEJ,EAAA,CAAA;AAAA,4BACC,GAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,IAAI,CACb,EAAA,QAAA,kBAAA,IAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,OAAQ,EAAA,MAAA;AAAA,gBACR,aAAc,EAAA,QAAA;AAAA,gBACd,UAAW,EAAA,QAAA;AAAA,gBACX,WAAW,OAAQ,CAAA,QAAA;AAAA,gBAEnB,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,eAAgB,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,KAAA,EAAM,UAAW,EAAA,CAAA;AAAA,kCACnD,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,KAAA,EAAO,EAAE,UAAY,EAAA,GAAA,EAC9C,EAAA,QAAA,EAAA,UAAA,CAAW,aACd,EAAA,CAAA;AAAA,kCACA,GAAA,CAAC,cAAW,OAAQ,EAAA,SAAA,EAAU,OAAM,eACjC,EAAA,QAAA,EAAA,CAAA,CAAE,iBAAiB,CACtB,EAAA;AAAA;AAAA;AAAA,aAEJ,EAAA,CAAA;AAAA,4BACC,GAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,IAAI,CACb,EAAA,QAAA,kBAAA,IAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,OAAQ,EAAA,MAAA;AAAA,gBACR,aAAc,EAAA,QAAA;AAAA,gBACd,UAAW,EAAA,QAAA;AAAA,gBACX,WAAW,OAAQ,CAAA,QAAA;AAAA,gBAEnB,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,QAAS,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,KAAA,EAAM,UAAW,EAAA,CAAA;AAAA,kCAC5C,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,KAAA,EAAO,EAAE,UAAY,EAAA,GAAA,EAC9C,EAAA,QAAA,EAAA,UAAA,CAAW,UACd,EAAA,CAAA;AAAA,kCACA,GAAA,CAAC,cAAW,OAAQ,EAAA,SAAA,EAAU,OAAM,eACjC,EAAA,QAAA,EAAA,CAAA,CAAE,cAAc,CACnB,EAAA;AAAA;AAAA;AAAA,aAEJ,EAAA,CAAA;AAAA,4BACC,GAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,IAAI,CACb,EAAA,QAAA,kBAAA,IAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,OAAQ,EAAA,MAAA;AAAA,gBACR,aAAc,EAAA,QAAA;AAAA,gBACd,UAAW,EAAA,QAAA;AAAA,gBACX,WAAW,OAAQ,CAAA,QAAA;AAAA,gBAEnB,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,UAAW,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,KAAA,EAAM,UAAW,EAAA,CAAA;AAAA,kCAC9C,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,KAAA,EAAO,EAAE,UAAY,EAAA,GAAA,EAC9C,EAAA,QAAA,EAAA,UAAA,CAAW,SACd,EAAA,CAAA;AAAA,kCACA,GAAA,CAAC,cAAW,OAAQ,EAAA,SAAA,EAAU,OAAM,eACjC,EAAA,QAAA,EAAA,CAAA,CAAE,uBAAuB,CAC5B,EAAA;AAAA;AAAA;AAAA,aAEJ,EAAA;AAAA,WACF,EAAA;AAAA;AAAA;AAAA;AACF,GAAA,EACF,CACF,EAAA,CAAA;AAEJ;;;;"}
@@ -14,10 +14,15 @@ import '@material-ui/icons/VisibilityOff';
14
14
  import '../../api.esm.js';
15
15
  import 'react-use';
16
16
  import 'react';
17
+ import '@backstage/plugin-signals-react';
18
+ import '../../hooks/useListItemStyles.esm.js';
17
19
  import '@backstage/catalog-model';
18
20
  import 'dataloader';
19
21
  import '@backstage/plugin-catalog-react';
20
22
  import 'react-use/lib/useAsync';
23
+ import 'react-router-dom';
24
+ import 'react-use/lib/useDebounce';
25
+ import '../FilterPanel/FilterPanel.esm.js';
21
26
  import '@material-ui/icons/Create';
22
27
  import '@material-ui/icons/Link';
23
28
  import '@material-ui/icons/OpenInNew';
@@ -25,6 +30,7 @@ import '@material-ui/icons/PlaylistAdd';
25
30
  import '@material-ui/icons/AddCircle';
26
31
  import '@material-ui/icons/RemoveCircle';
27
32
  import { ButtonContainer } from '../Buttons/ButtonContainer.esm.js';
33
+ import '../Buttons/RankingButtons.esm.js';
28
34
 
29
35
  const useStyles = makeStyles((theme) => ({
30
36
  root: {
@@ -1 +1 @@
1
- {"version":3,"file":"ContentHeader.esm.js","sources":["../../../src/components/ContentHeader/ContentHeader.tsx"],"sourcesContent":["import { ReactNode } from 'react';\nimport { Box, makeStyles, Typography } from '@material-ui/core';\nimport { ButtonContainer } from '../Buttons';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n marginBottom: theme.spacing(3),\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: theme.spacing(2),\n },\n title: {\n fontWeight: 700,\n marginBottom: 0,\n },\n titleIcon: {\n marginRight: theme.spacing(1),\n display: 'flex',\n alignItems: 'center',\n },\n description: {\n color: theme.palette.text.secondary,\n },\n}));\n\nexport interface ContentHeaderProps {\n title?: ReactNode;\n titleIcon?: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n titleComponent?: ReactNode;\n}\n\nexport const ContentHeader = (props: ContentHeaderProps) => {\n const { title, titleIcon, description, children, titleComponent } = props;\n const classes = useStyles();\n\n return (\n <Box className={classes.root}>\n <Box flex=\"1 1 auto\" mr={2}>\n <Box display=\"flex\" alignItems=\"center\" mb={1}>\n {titleComponent ? (\n <>{titleComponent}</>\n ) : (\n <>\n {titleIcon && (\n <Box className={classes.titleIcon}>{titleIcon}</Box>\n )}\n {title && (\n <Typography\n variant=\"h4\"\n component=\"h1\"\n className={classes.title}\n >\n {title}\n </Typography>\n )}\n </>\n )}\n </Box>\n <Typography\n variant=\"body2\"\n className={classes.description}\n component=\"div\"\n >\n {description}\n </Typography>\n </Box>\n <Box flex=\"0 0 auto\">\n <ButtonContainer>{children}</ButtonContainer>\n </Box>\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,MAAM,SAAA,GAAY,WAAW,CAAU,KAAA,MAAA;AAAA,EACrC,IAAM,EAAA;AAAA,IACJ,YAAA,EAAc,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC7B,OAAS,EAAA,MAAA;AAAA,IACT,QAAU,EAAA,MAAA;AAAA,IACV,cAAgB,EAAA,eAAA;AAAA,IAChB,UAAY,EAAA,QAAA;AAAA,IACZ,GAAA,EAAK,KAAM,CAAA,OAAA,CAAQ,CAAC;AAAA,GACtB;AAAA,EACA,KAAO,EAAA;AAAA,IACL,UAAY,EAAA,GAAA;AAAA,IACZ,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,SAAW,EAAA;AAAA,IACT,WAAA,EAAa,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC5B,OAAS,EAAA,MAAA;AAAA,IACT,UAAY,EAAA;AAAA,GACd;AAAA,EACA,WAAa,EAAA;AAAA,IACX,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA;AAAA;AAE9B,CAAE,CAAA,CAAA;AAUW,MAAA,aAAA,GAAgB,CAAC,KAA8B,KAAA;AAC1D,EAAA,MAAM,EAAE,KAAO,EAAA,SAAA,EAAW,WAAa,EAAA,QAAA,EAAU,gBAAmB,GAAA,KAAA;AACpE,EAAA,MAAM,UAAU,SAAU,EAAA;AAE1B,EAAA,uBACG,IAAA,CAAA,GAAA,EAAA,EAAI,SAAW,EAAA,OAAA,CAAQ,IACtB,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,GAAI,EAAA,EAAA,IAAA,EAAK,UAAW,EAAA,EAAA,EAAI,CACvB,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,GAAA,EAAA,EAAI,OAAQ,EAAA,MAAA,EAAO,UAAW,EAAA,QAAA,EAAS,EAAI,EAAA,CAAA,EACzC,QACC,EAAA,cAAA,mBAAA,GAAA,CAAA,QAAA,EAAA,EAAG,QAAe,EAAA,cAAA,EAAA,CAAA,mBAGf,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,QAAA,SAAA,oBACE,GAAA,CAAA,GAAA,EAAA,EAAI,SAAW,EAAA,OAAA,CAAQ,WAAY,QAAU,EAAA,SAAA,EAAA,CAAA;AAAA,QAE/C,KACC,oBAAA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,OAAQ,EAAA,IAAA;AAAA,YACR,SAAU,EAAA,IAAA;AAAA,YACV,WAAW,OAAQ,CAAA,KAAA;AAAA,YAElB,QAAA,EAAA;AAAA;AAAA;AACH,OAAA,EAEJ,CAEJ,EAAA,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,OAAQ,EAAA,OAAA;AAAA,UACR,WAAW,OAAQ,CAAA,WAAA;AAAA,UACnB,SAAU,EAAA,KAAA;AAAA,UAET,QAAA,EAAA;AAAA;AAAA;AACH,KACF,EAAA,CAAA;AAAA,wBACC,GAAI,EAAA,EAAA,IAAA,EAAK,YACR,QAAC,kBAAA,GAAA,CAAA,eAAA,EAAA,EAAiB,UAAS,CAC7B,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"ContentHeader.esm.js","sources":["../../../src/components/ContentHeader/ContentHeader.tsx"],"sourcesContent":["import { ReactNode } from 'react';\nimport { Box, makeStyles, Typography } from '@material-ui/core';\nimport { ButtonContainer } from '../Buttons';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n marginBottom: theme.spacing(3),\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: theme.spacing(2),\n },\n title: {\n fontWeight: 700,\n marginBottom: 0,\n },\n titleIcon: {\n marginRight: theme.spacing(1),\n display: 'flex',\n alignItems: 'center',\n },\n description: {\n color: theme.palette.text.secondary,\n },\n}));\n\nexport interface ContentHeaderProps {\n title?: ReactNode;\n titleIcon?: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n titleComponent?: ReactNode;\n}\n\nexport const ContentHeader = (props: ContentHeaderProps) => {\n const { title, titleIcon, description, children, titleComponent } = props;\n const classes = useStyles();\n\n return (\n <Box className={classes.root}>\n <Box flex=\"1 1 auto\" mr={2}>\n <Box display=\"flex\" alignItems=\"center\" mb={1}>\n {titleComponent ? (\n <>{titleComponent}</>\n ) : (\n <>\n {titleIcon && (\n <Box className={classes.titleIcon}>{titleIcon}</Box>\n )}\n {title && (\n <Typography\n variant=\"h4\"\n component=\"h1\"\n className={classes.title}\n >\n {title}\n </Typography>\n )}\n </>\n )}\n </Box>\n <Typography\n variant=\"body2\"\n className={classes.description}\n component=\"div\"\n >\n {description}\n </Typography>\n </Box>\n <Box flex=\"0 0 auto\">\n <ButtonContainer>{children}</ButtonContainer>\n </Box>\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,MAAM,SAAA,GAAY,WAAW,CAAU,KAAA,MAAA;AAAA,EACrC,IAAM,EAAA;AAAA,IACJ,YAAA,EAAc,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC7B,OAAS,EAAA,MAAA;AAAA,IACT,QAAU,EAAA,MAAA;AAAA,IACV,cAAgB,EAAA,eAAA;AAAA,IAChB,UAAY,EAAA,QAAA;AAAA,IACZ,GAAA,EAAK,KAAM,CAAA,OAAA,CAAQ,CAAC;AAAA,GACtB;AAAA,EACA,KAAO,EAAA;AAAA,IACL,UAAY,EAAA,GAAA;AAAA,IACZ,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,SAAW,EAAA;AAAA,IACT,WAAA,EAAa,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC5B,OAAS,EAAA,MAAA;AAAA,IACT,UAAY,EAAA;AAAA,GACd;AAAA,EACA,WAAa,EAAA;AAAA,IACX,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA;AAAA;AAE9B,CAAE,CAAA,CAAA;AAUW,MAAA,aAAA,GAAgB,CAAC,KAA8B,KAAA;AAC1D,EAAA,MAAM,EAAE,KAAO,EAAA,SAAA,EAAW,WAAa,EAAA,QAAA,EAAU,gBAAmB,GAAA,KAAA;AACpE,EAAA,MAAM,UAAU,SAAU,EAAA;AAE1B,EAAA,uBACG,IAAA,CAAA,GAAA,EAAA,EAAI,SAAW,EAAA,OAAA,CAAQ,IACtB,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,GAAI,EAAA,EAAA,IAAA,EAAK,UAAW,EAAA,EAAA,EAAI,CACvB,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,GAAA,EAAA,EAAI,OAAQ,EAAA,MAAA,EAAO,UAAW,EAAA,QAAA,EAAS,EAAI,EAAA,CAAA,EACzC,QACC,EAAA,cAAA,mBAAA,GAAA,CAAA,QAAA,EAAA,EAAG,QAAe,EAAA,cAAA,EAAA,CAAA,mBAGf,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,QAAA,SAAA,oBACE,GAAA,CAAA,GAAA,EAAA,EAAI,SAAW,EAAA,OAAA,CAAQ,WAAY,QAAU,EAAA,SAAA,EAAA,CAAA;AAAA,QAE/C,KACC,oBAAA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,OAAQ,EAAA,IAAA;AAAA,YACR,SAAU,EAAA,IAAA;AAAA,YACV,WAAW,OAAQ,CAAA,KAAA;AAAA,YAElB,QAAA,EAAA;AAAA;AAAA;AACH,OAAA,EAEJ,CAEJ,EAAA,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,OAAQ,EAAA,OAAA;AAAA,UACR,WAAW,OAAQ,CAAA,WAAA;AAAA,UACnB,SAAU,EAAA,KAAA;AAAA,UAET,QAAA,EAAA;AAAA;AAAA;AACH,KACF,EAAA,CAAA;AAAA,wBACC,GAAI,EAAA,EAAA,IAAA,EAAK,YACR,QAAC,kBAAA,GAAA,CAAA,eAAA,EAAA,EAAiB,UAAS,CAC7B,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
@@ -0,0 +1,44 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
3
+ import { QetaEntityContainer } from '../QetaEntityContainer/QetaEntityContainer.esm.js';
4
+ import { EntityListItem } from './EntityListItem.esm.js';
5
+ import { EntitiesGridItem } from './EntitiesGridItem.esm.js';
6
+ import { qetaTranslationRef } from '../../translation.esm.js';
7
+
8
+ const EntitiesContainer = (props) => {
9
+ const { filterPanelProps, defaultView } = props;
10
+ const { t } = useTranslationRef(qetaTranslationRef);
11
+ return /* @__PURE__ */ jsx(
12
+ QetaEntityContainer,
13
+ {
14
+ prefix: "entities",
15
+ defaultPageSize: 24,
16
+ defaultView,
17
+ initialFilters: {
18
+ order: "desc",
19
+ orderBy: "postsCount",
20
+ searchQuery: ""
21
+ },
22
+ fetch: (api, limit, offset, filters) => {
23
+ return api.getEntities({
24
+ limit,
25
+ offset,
26
+ searchQuery: filters.searchQuery
27
+ }).then((res) => ({ items: res.entities, total: res.total }));
28
+ },
29
+ filterPanelProps: {
30
+ ...filterPanelProps,
31
+ mode: "entities"
32
+ },
33
+ renderListItem: (entity) => /* @__PURE__ */ jsx(EntityListItem, { entity }),
34
+ renderGridItem: (entity) => /* @__PURE__ */ jsx(EntitiesGridItem, { entity }),
35
+ title: (total) => t("entitiesPage.entities", { count: total }),
36
+ searchPlaceholder: t("entitiesPage.search.label"),
37
+ emptyMessage: t("entitiesPage.entities", { count: 0 }),
38
+ getKey: (item) => item.id
39
+ }
40
+ );
41
+ };
42
+
43
+ export { EntitiesContainer };
44
+ //# sourceMappingURL=EntitiesContainer.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntitiesContainer.esm.js","sources":["../../../src/components/EntitiesContainer/EntitiesContainer.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { QetaEntityContainer } from '../QetaEntityContainer/QetaEntityContainer';\nimport { EntityListItem } from './EntityListItem';\nimport { EntitiesGridItem } from './EntitiesGridItem';\nimport { EntityResponse } from '@drodil/backstage-plugin-qeta-common';\nimport {\n CommonFilterPanelProps,\n EntityFilters,\n} from '../FilterPanel/FilterPanel';\nimport { qetaTranslationRef } from '../../translation';\nimport { ViewType } from '../ViewToggle/ViewToggle';\n\nexport const EntitiesContainer = (props: {\n filterPanelProps?: CommonFilterPanelProps;\n defaultView?: ViewType;\n}) => {\n const { filterPanelProps, defaultView } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n\n return (\n <QetaEntityContainer<EntityResponse, EntityFilters>\n prefix=\"entities\"\n defaultPageSize={24}\n defaultView={defaultView}\n initialFilters={{\n order: 'desc',\n orderBy: 'postsCount',\n searchQuery: '',\n }}\n fetch={(api, limit, offset, filters) => {\n return api\n .getEntities({\n limit,\n offset,\n searchQuery: filters.searchQuery,\n })\n .then(res => ({ items: res.entities, total: res.total }));\n }}\n filterPanelProps={{\n ...filterPanelProps,\n mode: 'entities',\n }}\n renderListItem={entity => <EntityListItem entity={entity} />}\n renderGridItem={entity => <EntitiesGridItem entity={entity} />}\n title={total => t('entitiesPage.entities', { count: total })}\n searchPlaceholder={t('entitiesPage.search.label')}\n emptyMessage={t('entitiesPage.entities', { count: 0 })}\n getKey={item => item.id}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;AAYa,MAAA,iBAAA,GAAoB,CAAC,KAG5B,KAAA;AACJ,EAAM,MAAA,EAAE,gBAAkB,EAAA,WAAA,EAAgB,GAAA,KAAA;AAC1C,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EACE,uBAAA,GAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,MAAO,EAAA,UAAA;AAAA,MACP,eAAiB,EAAA,EAAA;AAAA,MACjB,WAAA;AAAA,MACA,cAAgB,EAAA;AAAA,QACd,KAAO,EAAA,MAAA;AAAA,QACP,OAAS,EAAA,YAAA;AAAA,QACT,WAAa,EAAA;AAAA,OACf;AAAA,MACA,KAAO,EAAA,CAAC,GAAK,EAAA,KAAA,EAAO,QAAQ,OAAY,KAAA;AACtC,QAAA,OAAO,IACJ,WAAY,CAAA;AAAA,UACX,KAAA;AAAA,UACA,MAAA;AAAA,UACA,aAAa,OAAQ,CAAA;AAAA,SACtB,CACA,CAAA,IAAA,CAAK,CAAQ,GAAA,MAAA,EAAE,KAAO,EAAA,GAAA,CAAI,QAAU,EAAA,KAAA,EAAO,GAAI,CAAA,KAAA,EAAQ,CAAA,CAAA;AAAA,OAC5D;AAAA,MACA,gBAAkB,EAAA;AAAA,QAChB,GAAG,gBAAA;AAAA,QACH,IAAM,EAAA;AAAA,OACR;AAAA,MACA,cAAgB,EAAA,CAAA,MAAA,qBAAW,GAAA,CAAA,cAAA,EAAA,EAAe,MAAgB,EAAA,CAAA;AAAA,MAC1D,cAAgB,EAAA,CAAA,MAAA,qBAAW,GAAA,CAAA,gBAAA,EAAA,EAAiB,MAAgB,EAAA,CAAA;AAAA,MAC5D,OAAO,CAAS,KAAA,KAAA,CAAA,CAAE,yBAAyB,EAAE,KAAA,EAAO,OAAO,CAAA;AAAA,MAC3D,iBAAA,EAAmB,EAAE,2BAA2B,CAAA;AAAA,MAChD,cAAc,CAAE,CAAA,uBAAA,EAAyB,EAAE,KAAA,EAAO,GAAG,CAAA;AAAA,MACrD,MAAA,EAAQ,UAAQ,IAAK,CAAA;AAAA;AAAA,GACvB;AAEJ;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { EntityFollowButton } from '../Buttons/EntityFollowButton.esm.js';
3
- import { makeStyles, Grid, Card, Box, Avatar, Tooltip, Typography, CardContent } from '@material-ui/core';
3
+ import { makeStyles, Card, Box, Avatar, Tooltip, Typography, CardContent, Grid } from '@material-ui/core';
4
4
  import { useRouteRef } from '@backstage/core-plugin-api';
5
5
  import { useEntityPresentation } from '@backstage/plugin-catalog-react';
6
6
  import { entityRouteRef } from '../../routes.esm.js';
@@ -39,30 +39,22 @@ const EntitiesGridItem = (props) => {
39
39
  const compound = parseEntityRef(entity.entityRef);
40
40
  const { primaryTitle, Icon, secondaryTitle } = useEntityPresentation(compound);
41
41
  const href = entityRoute({ entityRef: entity.entityRef });
42
- return /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, sm: 6, md: 6, xl: 4, children: /* @__PURE__ */ jsx(Card, { className: classes.card, children: /* @__PURE__ */ jsxs(ClickableLink, { href, ariaLabel: primaryTitle, children: [
43
- /* @__PURE__ */ jsxs(
44
- Box,
45
- {
46
- className: classes.cardHeader,
47
- display: "flex",
48
- alignItems: "center",
49
- children: [
50
- Icon && /* @__PURE__ */ jsx(Avatar, { style: { marginRight: 16 }, children: /* @__PURE__ */ jsx(Icon, {}) }),
51
- /* @__PURE__ */ jsx(Box, { flex: 1, minWidth: 0, children: /* @__PURE__ */ jsx(Tooltip, { title: secondaryTitle ?? "", arrow: true, children: /* @__PURE__ */ jsx(Typography, { variant: "h6", noWrap: true, children: primaryTitle }) }) }),
52
- /* @__PURE__ */ jsx(
53
- Box,
54
- {
55
- flexShrink: 0,
56
- onClick: (e) => {
57
- e.preventDefault();
58
- e.stopPropagation();
59
- },
60
- children: /* @__PURE__ */ jsx(EntityFollowButton, { entityRef: entity.entityRef })
61
- }
62
- )
63
- ]
64
- }
65
- ),
42
+ return /* @__PURE__ */ jsx(Card, { className: classes.card, children: /* @__PURE__ */ jsxs(ClickableLink, { href, ariaLabel: primaryTitle, children: [
43
+ /* @__PURE__ */ jsxs(Box, { className: classes.cardHeader, display: "flex", alignItems: "center", children: [
44
+ Icon && /* @__PURE__ */ jsx(Avatar, { style: { marginRight: 16 }, children: /* @__PURE__ */ jsx(Icon, {}) }),
45
+ /* @__PURE__ */ jsx(Box, { flex: 1, minWidth: 0, children: /* @__PURE__ */ jsx(Tooltip, { title: secondaryTitle ?? "", arrow: true, children: /* @__PURE__ */ jsx(Typography, { variant: "h6", noWrap: true, children: primaryTitle }) }) }),
46
+ /* @__PURE__ */ jsx(
47
+ Box,
48
+ {
49
+ flexShrink: 0,
50
+ onClick: (e) => {
51
+ e.preventDefault();
52
+ e.stopPropagation();
53
+ },
54
+ children: /* @__PURE__ */ jsx(EntityFollowButton, { entityRef: entity.entityRef })
55
+ }
56
+ )
57
+ ] }),
66
58
  /* @__PURE__ */ jsx(
67
59
  CardContent,
68
60
  {
@@ -127,7 +119,7 @@ const EntitiesGridItem = (props) => {
127
119
  ] })
128
120
  }
129
121
  )
130
- ] }) }) });
122
+ ] }) });
131
123
  };
132
124
 
133
125
  export { EntitiesGridItem };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntitiesGridItem.esm.js","sources":["../../../src/components/EntitiesContainer/EntitiesGridItem.tsx"],"sourcesContent":["import { EntityResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { EntityFollowButton } from '../Buttons/EntityFollowButton';\nimport {\n Avatar,\n Box,\n Card,\n CardContent,\n Grid,\n makeStyles,\n Tooltip,\n Typography,\n} from '@material-ui/core';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { entityRouteRef } from '../../routes';\nimport { parseEntityRef } from '@backstage/catalog-model';\n\nimport LinkIcon from '@material-ui/icons/Link';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport PeopleIcon from '@material-ui/icons/People';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport useGridItemStyles from '../GridItemStyles/useGridItemStyles';\nimport { ClickableLink } from '../Utility/ClickableLink';\n\nconst useStyles = makeStyles(theme => ({\n statsGrid: {\n marginTop: 'auto',\n },\n statItem: {\n padding: theme.spacing(1),\n borderRadius: theme.shape.borderRadius,\n width: '100%',\n height: '100%',\n justifyContent: 'center',\n },\n flexColumn: {\n display: 'flex',\n flexDirection: 'column',\n },\n}));\n\nexport const EntitiesGridItem = (props: { entity: EntityResponse }) => {\n const { entity } = props;\n const classes = useGridItemStyles();\n const localClasses = useStyles();\n const entityRoute = useRouteRef(entityRouteRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n const compound = parseEntityRef(entity.entityRef);\n const { primaryTitle, Icon, secondaryTitle } =\n useEntityPresentation(compound);\n\n const href = entityRoute({ entityRef: entity.entityRef });\n\n return (\n <Card className={classes.card}>\n <ClickableLink href={href} ariaLabel={primaryTitle}>\n <Box className={classes.cardHeader} display=\"flex\" alignItems=\"center\">\n {Icon && (\n <Avatar style={{ marginRight: 16 }}>\n <Icon />\n </Avatar>\n )}\n <Box flex={1} minWidth={0}>\n <Tooltip title={secondaryTitle ?? ''} arrow>\n <Typography variant=\"h6\" noWrap>\n {primaryTitle}\n </Typography>\n </Tooltip>\n </Box>\n <Box\n flexShrink={0}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <EntityFollowButton entityRef={entity.entityRef} />\n </Box>\n </Box>\n <CardContent\n className={`${classes.cardContent} ${localClasses.flexColumn}`}\n >\n <Grid container spacing={1} className={localClasses.statsGrid}>\n <Grid item xs={3}>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n className={localClasses.statItem}\n >\n <QuestionAnswerIcon fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {entity.questionsCount}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('stats.questions', {})}\n </Typography>\n </Box>\n </Grid>\n <Grid item xs={3}>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n className={localClasses.statItem}\n >\n <DescriptionIcon fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {entity.articlesCount}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('stats.articles', {})}\n </Typography>\n </Box>\n </Grid>\n <Grid item xs={3}>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n className={localClasses.statItem}\n >\n <LinkIcon fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {entity.linksCount}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('stats.links', {})}\n </Typography>\n </Box>\n </Grid>\n <Grid item xs={3}>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n className={localClasses.statItem}\n >\n <PeopleIcon fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {entity.followerCount}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('stats.followers', {})}\n </Typography>\n </Box>\n </Grid>\n </Grid>\n </CardContent>\n </ClickableLink>\n </Card>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { EntityFollowButton } from '../Buttons/EntityFollowButton.esm.js';
3
+ import { makeStyles, ListItemAvatar, Avatar, Box, Tooltip, Typography } from '@material-ui/core';
4
+ import { useRouteRef } from '@backstage/core-plugin-api';
5
+ import { useEntityPresentation } from '@backstage/plugin-catalog-react';
6
+ import { entityRouteRef } from '../../routes.esm.js';
7
+ import { parseEntityRef } from '@backstage/catalog-model';
8
+ import LinkIcon from '@material-ui/icons/Link';
9
+ import DescriptionIcon from '@material-ui/icons/Description';
10
+ import QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';
11
+ import PeopleIcon from '@material-ui/icons/People';
12
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
13
+ import { qetaTranslationRef } from '../../translation.esm.js';
14
+ import { Link } from 'react-router-dom';
15
+ import '../../api.esm.js';
16
+ import 'react-use';
17
+ import 'react';
18
+ import '@backstage/plugin-signals-react';
19
+ import { useListItemStyles } from '../../hooks/useListItemStyles.esm.js';
20
+ import 'dataloader';
21
+ import 'react-use/lib/useAsync';
22
+ import '@backstage/plugin-permission-react';
23
+ import '@drodil/backstage-plugin-qeta-common';
24
+ import '@backstage/plugin-permission-common';
25
+ import 'react-use/lib/useDebounce';
26
+ import '../FilterPanel/FilterPanel.esm.js';
27
+
28
+ const useStyles = makeStyles((theme) => ({
29
+ content: {
30
+ flex: 1,
31
+ minWidth: 0,
32
+ display: "flex",
33
+ flexDirection: "column"
34
+ },
35
+ title: {
36
+ fontWeight: 600
37
+ },
38
+ statsWrapper: {
39
+ display: "flex",
40
+ gap: theme.spacing(3),
41
+ marginLeft: theme.spacing(2),
42
+ alignItems: "center",
43
+ [theme.breakpoints.down("sm")]: {
44
+ display: "none"
45
+ }
46
+ },
47
+ statItem: {
48
+ display: "flex",
49
+ alignItems: "center",
50
+ gap: theme.spacing(0.5),
51
+ color: theme.palette.text.secondary
52
+ },
53
+ actions: {
54
+ marginLeft: theme.spacing(2)
55
+ }
56
+ }));
57
+ const EntityListItem = (props) => {
58
+ const { entity } = props;
59
+ const classes = useStyles();
60
+ const listItemClasses = useListItemStyles();
61
+ const entityRoute = useRouteRef(entityRouteRef);
62
+ const { t } = useTranslationRef(qetaTranslationRef);
63
+ const compound = parseEntityRef(entity.entityRef);
64
+ const { primaryTitle, Icon, secondaryTitle } = useEntityPresentation(compound);
65
+ const href = entityRoute({ entityRef: entity.entityRef });
66
+ return /* @__PURE__ */ jsxs(Link, { to: href, className: listItemClasses.root, children: [
67
+ /* @__PURE__ */ jsx(ListItemAvatar, { children: /* @__PURE__ */ jsx(Avatar, { children: Icon ? /* @__PURE__ */ jsx(Icon, {}) : primaryTitle.charAt(0).toUpperCase() }) }),
68
+ /* @__PURE__ */ jsx(Box, { className: classes.content, children: /* @__PURE__ */ jsx(Tooltip, { title: secondaryTitle ?? "", arrow: true, placement: "top-start", children: /* @__PURE__ */ jsx(Typography, { className: classes.title, noWrap: true, children: primaryTitle }) }) }),
69
+ /* @__PURE__ */ jsxs(Box, { className: classes.statsWrapper, children: [
70
+ /* @__PURE__ */ jsx(Tooltip, { title: t("stats.questions", {}), arrow: true, children: /* @__PURE__ */ jsxs("div", { className: classes.statItem, children: [
71
+ /* @__PURE__ */ jsx(QuestionAnswerIcon, { fontSize: "small" }),
72
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: entity.questionsCount })
73
+ ] }) }),
74
+ /* @__PURE__ */ jsx(Tooltip, { title: t("stats.articles", {}), arrow: true, children: /* @__PURE__ */ jsxs("div", { className: classes.statItem, children: [
75
+ /* @__PURE__ */ jsx(DescriptionIcon, { fontSize: "small" }),
76
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: entity.articlesCount })
77
+ ] }) }),
78
+ /* @__PURE__ */ jsx(Tooltip, { title: t("stats.links", {}), arrow: true, children: /* @__PURE__ */ jsxs("div", { className: classes.statItem, children: [
79
+ /* @__PURE__ */ jsx(LinkIcon, { fontSize: "small" }),
80
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: entity.linksCount })
81
+ ] }) }),
82
+ /* @__PURE__ */ jsx(Tooltip, { title: t("stats.followers", {}), arrow: true, children: /* @__PURE__ */ jsxs("div", { className: classes.statItem, children: [
83
+ /* @__PURE__ */ jsx(PeopleIcon, { fontSize: "small" }),
84
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: entity.followerCount })
85
+ ] }) })
86
+ ] }),
87
+ /* @__PURE__ */ jsx(
88
+ Box,
89
+ {
90
+ className: classes.actions,
91
+ onClick: (e) => {
92
+ e.preventDefault();
93
+ e.stopPropagation();
94
+ },
95
+ children: /* @__PURE__ */ jsx(EntityFollowButton, { entityRef: entity.entityRef })
96
+ }
97
+ )
98
+ ] });
99
+ };
100
+
101
+ export { EntityListItem };
102
+ //# sourceMappingURL=EntityListItem.esm.js.map