@drodil/backstage-plugin-qeta-react 3.2.1 → 3.4.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 (202) hide show
  1. package/dist/components/AnswerCard/AnswerCard.esm.js +6 -1
  2. package/dist/components/AnswerCard/AnswerCard.esm.js.map +1 -1
  3. package/dist/components/AnswerForm/AnswerForm.esm.js +20 -8
  4. package/dist/components/AnswerForm/AnswerForm.esm.js.map +1 -1
  5. package/dist/components/AnswersContainer/AnswerList.esm.js +16 -38
  6. package/dist/components/AnswersContainer/AnswerList.esm.js.map +1 -1
  7. package/dist/components/AnswersContainer/AnswerListItem.esm.js +6 -1
  8. package/dist/components/AnswersContainer/AnswerListItem.esm.js.map +1 -1
  9. package/dist/components/AnswersContainer/AnswersContainer.esm.js +5 -1
  10. package/dist/components/AnswersContainer/AnswersContainer.esm.js.map +1 -1
  11. package/dist/components/ArticleContent/ArticleButtons.esm.js +6 -1
  12. package/dist/components/ArticleContent/ArticleButtons.esm.js.map +1 -1
  13. package/dist/components/ArticleContent/ArticleContent.esm.js +7 -1
  14. package/dist/components/ArticleContent/ArticleContent.esm.js.map +1 -1
  15. package/dist/components/AuthorBox/AuthorBox.esm.js +7 -1
  16. package/dist/components/AuthorBox/AuthorBox.esm.js.map +1 -1
  17. package/dist/components/Buttons/AddToCollectionButton.esm.js +4 -1
  18. package/dist/components/Buttons/AddToCollectionButton.esm.js.map +1 -1
  19. package/dist/components/Buttons/AskQuestionButton.esm.js +5 -1
  20. package/dist/components/Buttons/AskQuestionButton.esm.js.map +1 -1
  21. package/dist/components/Buttons/BackToArticlesButton.esm.js +5 -1
  22. package/dist/components/Buttons/BackToArticlesButton.esm.js.map +1 -1
  23. package/dist/components/Buttons/BackToCollectionsButton.esm.js +5 -1
  24. package/dist/components/Buttons/BackToCollectionsButton.esm.js.map +1 -1
  25. package/dist/components/Buttons/BackToQuestionsButton.esm.js +5 -1
  26. package/dist/components/Buttons/BackToQuestionsButton.esm.js.map +1 -1
  27. package/dist/components/Buttons/CollectionFollowButton.esm.js +40 -0
  28. package/dist/components/Buttons/CollectionFollowButton.esm.js.map +1 -0
  29. package/dist/components/Buttons/CreateCollectionButton.esm.js +5 -1
  30. package/dist/components/Buttons/CreateCollectionButton.esm.js.map +1 -1
  31. package/dist/components/Buttons/EntityFollowButton.esm.js +7 -1
  32. package/dist/components/Buttons/EntityFollowButton.esm.js.map +1 -1
  33. package/dist/components/Buttons/FavoriteButton.esm.js +4 -1
  34. package/dist/components/Buttons/FavoriteButton.esm.js.map +1 -1
  35. package/dist/components/Buttons/LinkButton.esm.js +6 -1
  36. package/dist/components/Buttons/LinkButton.esm.js.map +1 -1
  37. package/dist/components/Buttons/TagFollowButton.esm.js +7 -1
  38. package/dist/components/Buttons/TagFollowButton.esm.js.map +1 -1
  39. package/dist/components/Buttons/UserFollowButton.esm.js +40 -0
  40. package/dist/components/Buttons/UserFollowButton.esm.js.map +1 -0
  41. package/dist/components/Buttons/VoteButtons.esm.js +1 -1
  42. package/dist/components/Buttons/VoteButtons.esm.js.map +1 -1
  43. package/dist/components/Buttons/WriteArticleButton.esm.js +5 -1
  44. package/dist/components/Buttons/WriteArticleButton.esm.js.map +1 -1
  45. package/dist/components/CollectionCard/CollectionCard.esm.js +7 -3
  46. package/dist/components/CollectionCard/CollectionCard.esm.js.map +1 -1
  47. package/dist/components/CollectionForm/CollectionForm.esm.js +20 -14
  48. package/dist/components/CollectionForm/CollectionForm.esm.js.map +1 -1
  49. package/dist/components/CollectionsGrid/CollectionsGrid.esm.js +57 -14
  50. package/dist/components/CollectionsGrid/CollectionsGrid.esm.js.map +1 -1
  51. package/dist/components/CollectionsGrid/CollectionsGridContent.esm.js +13 -27
  52. package/dist/components/CollectionsGrid/CollectionsGridContent.esm.js.map +1 -1
  53. package/dist/components/CollectionsGrid/CollectionsGridItem.esm.js +28 -19
  54. package/dist/components/CollectionsGrid/CollectionsGridItem.esm.js.map +1 -1
  55. package/dist/components/CommentSection/CommentList.esm.js +4 -1
  56. package/dist/components/CommentSection/CommentList.esm.js.map +1 -1
  57. package/dist/components/CommentSection/CommentSection.esm.js +4 -1
  58. package/dist/components/CommentSection/CommentSection.esm.js.map +1 -1
  59. package/dist/components/DeleteModal/DeleteModal.esm.js +5 -1
  60. package/dist/components/DeleteModal/DeleteModal.esm.js.map +1 -1
  61. package/dist/components/EntitiesGrid/EntitiesGrid.esm.js +61 -22
  62. package/dist/components/EntitiesGrid/EntitiesGrid.esm.js.map +1 -1
  63. package/dist/components/EntitiesGrid/EntitiesGridContent.esm.js +31 -0
  64. package/dist/components/EntitiesGrid/EntitiesGridContent.esm.js.map +1 -0
  65. package/dist/components/EntitiesGrid/EntitiesGridItem.esm.js +9 -4
  66. package/dist/components/EntitiesGrid/EntitiesGridItem.esm.js.map +1 -1
  67. package/dist/components/FilterPanel/DateRangeFilter.esm.js +6 -1
  68. package/dist/components/FilterPanel/DateRangeFilter.esm.js.map +1 -1
  69. package/dist/components/FilterPanel/FilterPanel.esm.js +9 -5
  70. package/dist/components/FilterPanel/FilterPanel.esm.js.map +1 -1
  71. package/dist/components/FollowedLists/FollowedCollectionsList.esm.js +49 -0
  72. package/dist/components/FollowedLists/FollowedCollectionsList.esm.js.map +1 -0
  73. package/dist/components/FollowedLists/FollowedEntitiesList.esm.js +7 -1
  74. package/dist/components/FollowedLists/FollowedEntitiesList.esm.js.map +1 -1
  75. package/dist/components/FollowedLists/FollowedTagsList.esm.js +7 -1
  76. package/dist/components/FollowedLists/FollowedTagsList.esm.js.map +1 -1
  77. package/dist/components/HeaderImageInput/HeaderImageInput.esm.js +9 -3
  78. package/dist/components/HeaderImageInput/HeaderImageInput.esm.js.map +1 -1
  79. package/dist/components/HomePageCards/ImpactCard.esm.js +6 -1
  80. package/dist/components/HomePageCards/ImpactCard.esm.js.map +1 -1
  81. package/dist/components/HomePageCards/PostsCard.esm.js +8 -3
  82. package/dist/components/HomePageCards/PostsCard.esm.js.map +1 -1
  83. package/dist/components/LeftMenu/LeftMenu.esm.js +11 -3
  84. package/dist/components/LeftMenu/LeftMenu.esm.js.map +1 -1
  85. package/dist/components/Links/Links.esm.js +5 -1
  86. package/dist/components/Links/Links.esm.js.map +1 -1
  87. package/dist/components/MarkdownEditor/MarkdownEditor.esm.js +8 -2
  88. package/dist/components/MarkdownEditor/MarkdownEditor.esm.js.map +1 -1
  89. package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js +1 -1
  90. package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js.map +1 -1
  91. package/dist/components/PostAnonymouslyCheckbox/PostAnonymouslyCheckbox.esm.js +6 -1
  92. package/dist/components/PostAnonymouslyCheckbox/PostAnonymouslyCheckbox.esm.js.map +1 -1
  93. package/dist/components/PostForm/EntitiesInput.esm.js +5 -1
  94. package/dist/components/PostForm/EntitiesInput.esm.js.map +1 -1
  95. package/dist/components/PostForm/PostForm.esm.js +56 -17
  96. package/dist/components/PostForm/PostForm.esm.js.map +1 -1
  97. package/dist/components/PostForm/TagInput.esm.js +5 -2
  98. package/dist/components/PostForm/TagInput.esm.js.map +1 -1
  99. package/dist/components/PostHighlightList/PostHighlightList.esm.js +5 -1
  100. package/dist/components/PostHighlightList/PostHighlightList.esm.js.map +1 -1
  101. package/dist/components/PostsContainer/NoPostsCard.esm.js +6 -1
  102. package/dist/components/PostsContainer/NoPostsCard.esm.js.map +1 -1
  103. package/dist/components/PostsContainer/PostList.esm.js +16 -38
  104. package/dist/components/PostsContainer/PostList.esm.js.map +1 -1
  105. package/dist/components/PostsContainer/PostListItem.esm.js +6 -1
  106. package/dist/components/PostsContainer/PostListItem.esm.js.map +1 -1
  107. package/dist/components/PostsContainer/PostsContainer.esm.js +8 -2
  108. package/dist/components/PostsContainer/PostsContainer.esm.js.map +1 -1
  109. package/dist/components/PostsGrid/PostsGrid.esm.js +13 -3
  110. package/dist/components/PostsGrid/PostsGrid.esm.js.map +1 -1
  111. package/dist/components/PostsGrid/PostsGridContent.esm.js +23 -12
  112. package/dist/components/PostsGrid/PostsGridContent.esm.js.map +1 -1
  113. package/dist/components/PostsGrid/PostsGridItem.esm.js +6 -1
  114. package/dist/components/PostsGrid/PostsGridItem.esm.js.map +1 -1
  115. package/dist/components/QetaPagination/QetaPagination.esm.js +55 -0
  116. package/dist/components/QetaPagination/QetaPagination.esm.js.map +1 -0
  117. package/dist/components/QuestionCard/QuestionCard.esm.js +12 -4
  118. package/dist/components/QuestionCard/QuestionCard.esm.js.map +1 -1
  119. package/dist/components/QuestionsTable/QuestionsTable.esm.js +6 -1
  120. package/dist/components/QuestionsTable/QuestionsTable.esm.js.map +1 -1
  121. package/dist/components/SelectTemplateList/SelectTemplateList.esm.js +48 -0
  122. package/dist/components/SelectTemplateList/SelectTemplateList.esm.js.map +1 -0
  123. package/dist/components/StatsChart/StatsChart.esm.js +37 -13
  124. package/dist/components/StatsChart/StatsChart.esm.js.map +1 -1
  125. package/dist/components/StatsChart/util.esm.js +9 -0
  126. package/dist/components/StatsChart/util.esm.js.map +1 -0
  127. package/dist/components/SummaryStatsGrid/SummaryStatsGrid.esm.js +25 -1
  128. package/dist/components/SummaryStatsGrid/SummaryStatsGrid.esm.js.map +1 -1
  129. package/dist/components/TagsAndEntities/CollectionChip.esm.js +85 -0
  130. package/dist/components/TagsAndEntities/CollectionChip.esm.js.map +1 -0
  131. package/dist/components/TagsAndEntities/EntityChip.esm.js +5 -1
  132. package/dist/components/TagsAndEntities/EntityChip.esm.js.map +1 -1
  133. package/dist/components/TagsAndEntities/TagChip.esm.js +5 -1
  134. package/dist/components/TagsAndEntities/TagChip.esm.js.map +1 -1
  135. package/dist/components/TagsAndEntities/TagsAndEntities.esm.js +3 -0
  136. package/dist/components/TagsAndEntities/TagsAndEntities.esm.js.map +1 -1
  137. package/dist/components/TagsGrid/EditTagModal.esm.js +4 -1
  138. package/dist/components/TagsGrid/EditTagModal.esm.js.map +1 -1
  139. package/dist/components/TagsGrid/TagGridItem.esm.js +9 -4
  140. package/dist/components/TagsGrid/TagGridItem.esm.js.map +1 -1
  141. package/dist/components/TagsGrid/TagsGrid.esm.js +64 -22
  142. package/dist/components/TagsGrid/TagsGrid.esm.js.map +1 -1
  143. package/dist/components/TagsGrid/TagsGridContent.esm.js +31 -0
  144. package/dist/components/TagsGrid/TagsGridContent.esm.js.map +1 -0
  145. package/dist/components/TemplateList/TemplateForm.esm.js +207 -0
  146. package/dist/components/TemplateList/TemplateForm.esm.js.map +1 -0
  147. package/dist/components/TemplateList/TemplateList.esm.js +105 -0
  148. package/dist/components/TemplateList/TemplateList.esm.js.map +1 -0
  149. package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js +6 -1
  150. package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js.map +1 -1
  151. package/dist/components/UsersGrid/UsersGrid.esm.js +49 -19
  152. package/dist/components/UsersGrid/UsersGrid.esm.js.map +1 -1
  153. package/dist/components/UsersGrid/UsersGridContent.esm.js +31 -0
  154. package/dist/components/UsersGrid/UsersGridContent.esm.js.map +1 -0
  155. package/dist/components/UsersGrid/UsersGridItem.esm.js +31 -3
  156. package/dist/components/UsersGrid/UsersGridItem.esm.js.map +1 -1
  157. package/dist/hooks/useBasePath.esm.js +12 -0
  158. package/dist/hooks/useBasePath.esm.js.map +1 -0
  159. package/dist/hooks/useBaseUrl.esm.js +13 -0
  160. package/dist/hooks/useBaseUrl.esm.js.map +1 -0
  161. package/dist/hooks/useCollectionsFollow.esm.js +59 -0
  162. package/dist/hooks/useCollectionsFollow.esm.js.map +1 -0
  163. package/dist/hooks/useEntityAuthor.esm.js +90 -0
  164. package/dist/hooks/useEntityAuthor.esm.js.map +1 -0
  165. package/dist/hooks/useEntityFollow.esm.js +49 -0
  166. package/dist/hooks/useEntityFollow.esm.js.map +1 -0
  167. package/dist/hooks/useEntityQueryParameter.esm.js +14 -0
  168. package/dist/hooks/useEntityQueryParameter.esm.js.map +1 -0
  169. package/dist/hooks/useFormStyles.esm.js +26 -0
  170. package/dist/hooks/useFormStyles.esm.js.map +1 -0
  171. package/dist/hooks/useIdentityApi.esm.js +12 -0
  172. package/dist/hooks/useIdentityApi.esm.js.map +1 -0
  173. package/dist/hooks/useIsDarkTheme.esm.js +12 -0
  174. package/dist/hooks/useIsDarkTheme.esm.js.map +1 -0
  175. package/dist/hooks/useIsModerator.esm.js +23 -0
  176. package/dist/hooks/useIsModerator.esm.js.map +1 -0
  177. package/dist/hooks/usePaginatedPosts.esm.js +176 -0
  178. package/dist/hooks/usePaginatedPosts.esm.js.map +1 -0
  179. package/dist/hooks/useQetaApi.esm.js +13 -0
  180. package/dist/hooks/useQetaApi.esm.js.map +1 -0
  181. package/dist/hooks/useStyles.esm.js +141 -0
  182. package/dist/hooks/useStyles.esm.js.map +1 -0
  183. package/dist/hooks/useTagsFollow.esm.js +53 -0
  184. package/dist/hooks/useTagsFollow.esm.js.map +1 -0
  185. package/dist/hooks/useTranslation.esm.js +9 -0
  186. package/dist/hooks/useTranslation.esm.js.map +1 -0
  187. package/dist/hooks/useUserFollow.esm.js +53 -0
  188. package/dist/hooks/useUserFollow.esm.js.map +1 -0
  189. package/dist/hooks/useVoting.esm.js +110 -0
  190. package/dist/hooks/useVoting.esm.js.map +1 -0
  191. package/dist/index.d.ts +406 -303
  192. package/dist/index.esm.js +15 -2
  193. package/dist/index.esm.js.map +1 -1
  194. package/dist/routes.esm.js +6 -1
  195. package/dist/routes.esm.js.map +1 -1
  196. package/dist/translation.esm.js +68 -4
  197. package/dist/translation.esm.js.map +1 -1
  198. package/dist/utils/utils.esm.js +3 -2
  199. package/dist/utils/utils.esm.js.map +1 -1
  200. package/package.json +6 -3
  201. package/dist/utils/hooks.esm.js +0 -655
  202. package/dist/utils/hooks.esm.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AuthorBox.esm.js","sources":["../../../src/components/AuthorBox/AuthorBox.tsx"],"sourcesContent":["import { Avatar, Box, Grid, makeStyles, Typography } from '@material-ui/core';\nimport React from 'react';\nimport { useEntityAuthor, useTranslation } from '../../utils/hooks';\nimport {\n AnswerResponse,\n PostResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { RelativeTimeWithTooltip } from '../RelativeTimeWithTooltip';\nimport { AuthorLink, UpdatedByLink } from '../Links';\n\nexport type QetaAuthorBoxClassKey = 'authorBox' | 'authorLink';\n\nconst useStyles = makeStyles(\n theme => ({\n authorBox: {\n padding: theme.spacing(1),\n float: 'right',\n maxWidth: '200px',\n border: `1px solid ${theme.palette.action.selected}`,\n '& .avatar': {\n width: theme.spacing(3),\n height: theme.spacing(3),\n fontSize: '1rem',\n },\n },\n authorLink: {\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n },\n }),\n { name: 'QetaAuthorBox' },\n);\n\nexport const AuthorBox = (props: { entity: PostResponse | AnswerResponse }) => {\n const { entity } = props;\n const styles = useStyles();\n const { t } = useTranslation();\n const { name, initials, user } = useEntityAuthor(entity);\n\n return (\n <Box className={`qetaAuthorBox ${styles.authorBox}`}>\n <Grid container alignItems=\"center\">\n <Grid item xs={12} style={{ paddingBottom: 0 }}>\n <Typography className=\"qetaAuthorBoxCreated\" variant=\"caption\">\n {t('authorBox.postedAtTime')}{' '}\n <RelativeTimeWithTooltip value={entity.created} />\n </Typography>\n </Grid>\n {entity.updated && entity.updatedBy && (\n <Grid item xs={12} style={{ paddingBottom: 0, paddingTop: 0 }}>\n <Typography className=\"qetaAuthorBoxUpdated\" variant=\"caption\">\n {t('authorBox.updatedAtTime')}{' '}\n <RelativeTimeWithTooltip value={entity.updated} />{' '}\n {t('authorBox.updatedBy')} <UpdatedByLink entity={entity} />\n </Typography>\n </Grid>\n )}\n <Grid item xs={2}>\n <Avatar\n src={user?.spec?.profile?.picture}\n className=\"qetaAuthorBoxAvatar avatar\"\n alt={name}\n variant=\"rounded\"\n >\n {initials}\n </Avatar>\n </Grid>\n <Grid item xs={10} className={styles.authorLink}>\n <Box style={{ paddingLeft: '5px' }}>\n <AuthorLink entity={entity} />\n </Box>\n </Grid>\n </Grid>\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AuthorBox.esm.js","sources":["../../../src/components/AuthorBox/AuthorBox.tsx"],"sourcesContent":["import { Avatar, Box, Grid, makeStyles, Typography } from '@material-ui/core';\nimport React from 'react';\nimport {\n AnswerResponse,\n PostResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { RelativeTimeWithTooltip } from '../RelativeTimeWithTooltip';\nimport { AuthorLink, UpdatedByLink } from '../Links';\nimport { useTranslation } from '../../hooks';\nimport { useEntityAuthor } from '../../hooks/useEntityAuthor';\n\nexport type QetaAuthorBoxClassKey = 'authorBox' | 'authorLink';\n\nconst useStyles = makeStyles(\n theme => ({\n authorBox: {\n padding: theme.spacing(1),\n float: 'right',\n maxWidth: '200px',\n border: `1px solid ${theme.palette.action.selected}`,\n '& .avatar': {\n width: theme.spacing(3),\n height: theme.spacing(3),\n fontSize: '1rem',\n },\n },\n authorLink: {\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n },\n }),\n { name: 'QetaAuthorBox' },\n);\n\nexport const AuthorBox = (props: { entity: PostResponse | AnswerResponse }) => {\n const { entity } = props;\n const styles = useStyles();\n const { t } = useTranslation();\n const { name, initials, user } = useEntityAuthor(entity);\n\n return (\n <Box className={`qetaAuthorBox ${styles.authorBox}`}>\n <Grid container alignItems=\"center\">\n <Grid item xs={12} style={{ paddingBottom: 0 }}>\n <Typography className=\"qetaAuthorBoxCreated\" variant=\"caption\">\n {t('authorBox.postedAtTime')}{' '}\n <RelativeTimeWithTooltip value={entity.created} />\n </Typography>\n </Grid>\n {entity.updated && entity.updatedBy && (\n <Grid item xs={12} style={{ paddingBottom: 0, paddingTop: 0 }}>\n <Typography className=\"qetaAuthorBoxUpdated\" variant=\"caption\">\n {t('authorBox.updatedAtTime')}{' '}\n <RelativeTimeWithTooltip value={entity.updated} />{' '}\n {t('authorBox.updatedBy')} <UpdatedByLink entity={entity} />\n </Typography>\n </Grid>\n )}\n <Grid item xs={2}>\n <Avatar\n src={user?.spec?.profile?.picture}\n className=\"qetaAuthorBoxAvatar avatar\"\n alt={name}\n variant=\"rounded\"\n >\n {initials}\n </Avatar>\n </Grid>\n <Grid item xs={10} className={styles.authorLink}>\n <Box style={{ paddingLeft: '5px' }}>\n <AuthorLink entity={entity} />\n </Box>\n </Grid>\n </Grid>\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;AAaA,MAAM,SAAY,GAAA,UAAA;AAAA,EAChB,CAAU,KAAA,MAAA;AAAA,IACR,SAAW,EAAA;AAAA,MACT,OAAA,EAAS,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,MACxB,KAAO,EAAA,OAAA;AAAA,MACP,QAAU,EAAA,OAAA;AAAA,MACV,MAAQ,EAAA,CAAA,UAAA,EAAa,KAAM,CAAA,OAAA,CAAQ,OAAO,QAAQ,CAAA,CAAA;AAAA,MAClD,WAAa,EAAA;AAAA,QACX,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,QACtB,MAAA,EAAQ,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,QACvB,QAAU,EAAA,MAAA;AAAA,OACZ;AAAA,KACF;AAAA,IACA,UAAY,EAAA;AAAA,MACV,YAAc,EAAA,UAAA;AAAA,MACd,QAAU,EAAA,QAAA;AAAA,MACV,UAAY,EAAA,QAAA;AAAA,KACd;AAAA,GACF,CAAA;AAAA,EACA,EAAE,MAAM,eAAgB,EAAA;AAC1B,CAAA,CAAA;AAEa,MAAA,SAAA,GAAY,CAAC,KAAqD,KAAA;AAC7E,EAAM,MAAA,EAAE,QAAW,GAAA,KAAA,CAAA;AACnB,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAC7B,EAAA,MAAM,EAAE,IAAM,EAAA,QAAA,EAAU,IAAK,EAAA,GAAI,gBAAgB,MAAM,CAAA,CAAA;AAEvD,EAAA,2CACG,GAAI,EAAA,EAAA,SAAA,EAAW,iBAAiB,MAAO,CAAA,SAAS,sBAC9C,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,WAAS,IAAC,EAAA,UAAA,EAAW,4BACxB,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,MAAI,IAAC,EAAA,EAAA,EAAI,IAAI,KAAO,EAAA,EAAE,eAAe,CAAE,EAAA,EAAA,sCAC1C,UAAW,EAAA,EAAA,SAAA,EAAU,wBAAuB,OAAQ,EAAA,SAAA,EAAA,EAClD,EAAE,wBAAwB,CAAA,EAAG,qBAC7B,KAAA,CAAA,aAAA,CAAA,uBAAA,EAAA,EAAwB,OAAO,MAAO,CAAA,OAAA,EAAS,CAClD,CACF,CAAA,EACC,OAAO,OAAW,IAAA,MAAA,CAAO,6BACvB,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,MAAI,IAAC,EAAA,EAAA,EAAI,IAAI,KAAO,EAAA,EAAE,eAAe,CAAG,EAAA,UAAA,EAAY,GACxD,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,cAAW,SAAU,EAAA,sBAAA,EAAuB,SAAQ,SAClD,EAAA,EAAA,CAAA,CAAE,yBAAyB,CAAG,EAAA,GAAA,sCAC9B,uBAAwB,EAAA,EAAA,KAAA,EAAO,OAAO,OAAS,EAAA,CAAA,EAAG,KAClD,CAAE,CAAA,qBAAqB,GAAE,GAAC,kBAAA,KAAA,CAAA,aAAA,CAAC,iBAAc,MAAgB,EAAA,CAC5D,CACF,CAEF,kBAAA,KAAA,CAAA,aAAA,CAAC,QAAK,IAAI,EAAA,IAAA,EAAC,IAAI,CACb,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,IAAM,EAAA,IAAA,EAAM,OAAS,EAAA,OAAA;AAAA,MAC1B,SAAU,EAAA,4BAAA;AAAA,MACV,GAAK,EAAA,IAAA;AAAA,MACL,OAAQ,EAAA,SAAA;AAAA,KAAA;AAAA,IAEP,QAAA;AAAA,GAEL,CACA,kBAAA,KAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,MAAC,EAAI,EAAA,EAAA,EAAI,SAAW,EAAA,MAAA,CAAO,UACnC,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,OAAI,KAAO,EAAA,EAAE,WAAa,EAAA,KAAA,EACzB,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,cAAW,MAAgB,EAAA,CAC9B,CACF,CACF,CACF,CAAA,CAAA;AAEJ;;;;"}
@@ -1,4 +1,3 @@
1
- import { useTranslation, useStyles, useQetaApi } from '../../utils/hooks.esm.js';
2
1
  import React from 'react';
3
2
  import { Button, Dialog, DialogTitle, DialogContent, Grid, DialogActions } from '@material-ui/core';
4
3
  import AddCircle from '@material-ui/icons/AddCircle';
@@ -6,6 +5,10 @@ import RemoveCircle from '@material-ui/icons/RemoveCircle';
6
5
  import PlayListAddIcon from '@material-ui/icons/PlaylistAdd';
7
6
  import { useApi } from '@backstage/core-plugin-api';
8
7
  import { qetaApiRef } from '../../api.esm.js';
8
+ import { useQetaApi } from '../../hooks/useQetaApi.esm.js';
9
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
10
+ import { useStyles } from '../../hooks/useStyles.esm.js';
11
+ import 'react-use/lib/useAsync';
9
12
 
10
13
  const AddToCollectionButton = (props) => {
11
14
  const { post } = props;
@@ -1 +1 @@
1
- {"version":3,"file":"AddToCollectionButton.esm.js","sources":["../../../src/components/Buttons/AddToCollectionButton.tsx"],"sourcesContent":["import { Collection, PostResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { useQetaApi, useStyles, useTranslation } from '../../utils';\nimport React from 'react';\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Grid,\n} from '@material-ui/core';\nimport AddCircle from '@material-ui/icons/AddCircle';\nimport RemoveCircle from '@material-ui/icons/RemoveCircle';\nimport PlayListAddIcon from '@material-ui/icons/PlaylistAdd';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../../api';\n\nexport const AddToCollectionButton = (props: { post: PostResponse }) => {\n const { post } = props;\n const { t } = useTranslation();\n const styles = useStyles();\n const { value: response, retry } = useQetaApi(api => {\n return api.getCollections();\n }, []);\n const [open, setOpen] = React.useState(false);\n const qetaApi = useApi(qetaApiRef);\n\n const handleClickOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n const handleClick = (collection: Collection) => {\n if (collection.posts?.find(p => p.id === post.id)) {\n qetaApi.removePostFromCollection(collection.id, post.id).then(() => {\n retry();\n });\n } else {\n qetaApi.addPostToCollection(collection.id, post.id).then(() => {\n retry();\n });\n }\n };\n\n const collections = (response?.collections ?? []).filter(c => c.canEdit);\n if (!collections.length) {\n return null;\n }\n\n return (\n <div>\n <Button\n variant=\"contained\"\n size=\"small\"\n onClick={handleClickOpen}\n className={`${styles.marginLeft} qetaAddToCollectionBtn`}\n startIcon={<PlayListAddIcon />}\n >\n {t('addToCollectionButton.title')}\n </Button>\n <Dialog open={open} onClose={handleClose} fullWidth>\n <DialogTitle>{t('addToCollectionButton.manage')}</DialogTitle>\n <DialogContent>\n <Grid container>\n {collections.map(collection => {\n const isInCollection = collection.posts?.find(\n p => p.id === post.id,\n );\n\n return (\n <Grid item key={collection.id}>\n <Button\n variant=\"outlined\"\n startIcon={\n isInCollection ? <RemoveCircle /> : <AddCircle />\n }\n color={isInCollection ? 'secondary' : 'primary'}\n onClick={() => handleClick(collection)}\n >\n {collection.title}\n </Button>\n </Grid>\n );\n })}\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} color=\"primary\">\n {t('addToCollectionButton.close')}\n </Button>\n </DialogActions>\n </Dialog>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AddToCollectionButton.esm.js","sources":["../../../src/components/Buttons/AddToCollectionButton.tsx"],"sourcesContent":["import { Collection, PostResponse } from '@drodil/backstage-plugin-qeta-common';\nimport React from 'react';\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Grid,\n} from '@material-ui/core';\nimport AddCircle from '@material-ui/icons/AddCircle';\nimport RemoveCircle from '@material-ui/icons/RemoveCircle';\nimport PlayListAddIcon from '@material-ui/icons/PlaylistAdd';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../../api';\nimport { useQetaApi, useStyles, useTranslation } from '../../hooks';\n\nexport const AddToCollectionButton = (props: { post: PostResponse }) => {\n const { post } = props;\n const { t } = useTranslation();\n const styles = useStyles();\n const { value: response, retry } = useQetaApi(api => {\n return api.getCollections();\n }, []);\n const [open, setOpen] = React.useState(false);\n const qetaApi = useApi(qetaApiRef);\n\n const handleClickOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n const handleClick = (collection: Collection) => {\n if (collection.posts?.find(p => p.id === post.id)) {\n qetaApi.removePostFromCollection(collection.id, post.id).then(() => {\n retry();\n });\n } else {\n qetaApi.addPostToCollection(collection.id, post.id).then(() => {\n retry();\n });\n }\n };\n\n const collections = (response?.collections ?? []).filter(c => c.canEdit);\n if (!collections.length) {\n return null;\n }\n\n return (\n <div>\n <Button\n variant=\"contained\"\n size=\"small\"\n onClick={handleClickOpen}\n className={`${styles.marginLeft} qetaAddToCollectionBtn`}\n startIcon={<PlayListAddIcon />}\n >\n {t('addToCollectionButton.title')}\n </Button>\n <Dialog open={open} onClose={handleClose} fullWidth>\n <DialogTitle>{t('addToCollectionButton.manage')}</DialogTitle>\n <DialogContent>\n <Grid container>\n {collections.map(collection => {\n const isInCollection = collection.posts?.find(\n p => p.id === post.id,\n );\n\n return (\n <Grid item key={collection.id}>\n <Button\n variant=\"outlined\"\n startIcon={\n isInCollection ? <RemoveCircle /> : <AddCircle />\n }\n color={isInCollection ? 'secondary' : 'primary'}\n onClick={() => handleClick(collection)}\n >\n {collection.title}\n </Button>\n </Grid>\n );\n })}\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} color=\"primary\">\n {t('addToCollectionButton.close')}\n </Button>\n </DialogActions>\n </Dialog>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -5,7 +5,11 @@ import { qetaCreatePostPermission } from '@drodil/backstage-plugin-qeta-common';
5
5
  import { LinkButton } from '@backstage/core-components';
6
6
  import { useRouteRef } from '@backstage/core-plugin-api';
7
7
  import { askRouteRef } from '../../routes.esm.js';
8
- import { useTranslation, useStyles } from '../../utils/hooks.esm.js';
8
+ import '../../api.esm.js';
9
+ import 'react-use';
10
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
11
+ import { useStyles } from '../../hooks/useStyles.esm.js';
12
+ import 'react-use/lib/useAsync';
9
13
 
10
14
  const AskQuestionButton = (props) => {
11
15
  const { entity, entityPage, tags } = props;
@@ -1 +1 @@
1
- {"version":3,"file":"AskQuestionButton.esm.js","sources":["../../../src/components/Buttons/AskQuestionButton.tsx"],"sourcesContent":["import HelpOutline from '@material-ui/icons/HelpOutline';\nimport React from 'react';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\nimport { qetaCreatePostPermission } from '@drodil/backstage-plugin-qeta-common';\nimport { LinkButton } from '@backstage/core-components';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { askRouteRef } from '../../routes';\nimport { useStyles, useTranslation } from '../../utils/hooks';\n\nexport const AskQuestionButton = (props: {\n entity?: string;\n tags?: string[];\n entityPage?: boolean;\n}) => {\n const { entity, entityPage, tags } = props;\n const askRoute = useRouteRef(askRouteRef);\n const { t } = useTranslation();\n const styles = useStyles();\n\n const params = new URLSearchParams();\n if (entity) {\n params.set('entity', entity);\n }\n if (entityPage) {\n params.set('entityPage', 'true');\n }\n if (tags && tags.length > 0) {\n params.set('tags', tags.join(','));\n }\n\n return (\n <RequirePermission permission={qetaCreatePostPermission} errorPage={<></>}>\n <LinkButton\n variant=\"contained\"\n size=\"small\"\n to={entity || tags ? `${askRoute()}?${params.toString()}` : askRoute()}\n color=\"primary\"\n className={`${styles.marginLeft} qetaAskQuestionBtn`}\n startIcon={<HelpOutline />}\n >\n {t('askQuestionButton.title')}\n </LinkButton>\n </RequirePermission>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AASa,MAAA,iBAAA,GAAoB,CAAC,KAI5B,KAAA;AACJ,EAAA,MAAM,EAAE,MAAA,EAAQ,UAAY,EAAA,IAAA,EAAS,GAAA,KAAA,CAAA;AACrC,EAAM,MAAA,QAAA,GAAW,YAAY,WAAW,CAAA,CAAA;AACxC,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAC7B,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AAEzB,EAAM,MAAA,MAAA,GAAS,IAAI,eAAgB,EAAA,CAAA;AACnC,EAAA,IAAI,MAAQ,EAAA;AACV,IAAO,MAAA,CAAA,GAAA,CAAI,UAAU,MAAM,CAAA,CAAA;AAAA,GAC7B;AACA,EAAA,IAAI,UAAY,EAAA;AACd,IAAO,MAAA,CAAA,GAAA,CAAI,cAAc,MAAM,CAAA,CAAA;AAAA,GACjC;AACA,EAAI,IAAA,IAAA,IAAQ,IAAK,CAAA,MAAA,GAAS,CAAG,EAAA;AAC3B,IAAA,MAAA,CAAO,GAAI,CAAA,MAAA,EAAQ,IAAK,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,GACnC;AAEA,EAAA,2CACG,iBAAkB,EAAA,EAAA,UAAA,EAAY,wBAA0B,EAAA,SAAA,0DAAa,CACpE,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,WAAA;AAAA,MACR,IAAK,EAAA,OAAA;AAAA,MACL,EAAA,EAAI,MAAU,IAAA,IAAA,GAAO,CAAG,EAAA,QAAA,EAAU,CAAA,CAAA,EAAI,MAAO,CAAA,QAAA,EAAU,CAAA,CAAA,GAAK,QAAS,EAAA;AAAA,MACrE,KAAM,EAAA,SAAA;AAAA,MACN,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,mBAAA,CAAA;AAAA,MAC/B,SAAA,sCAAY,WAAY,EAAA,IAAA,CAAA;AAAA,KAAA;AAAA,IAEvB,EAAE,yBAAyB,CAAA;AAAA,GAEhC,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"AskQuestionButton.esm.js","sources":["../../../src/components/Buttons/AskQuestionButton.tsx"],"sourcesContent":["import HelpOutline from '@material-ui/icons/HelpOutline';\nimport React from 'react';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\nimport { qetaCreatePostPermission } from '@drodil/backstage-plugin-qeta-common';\nimport { LinkButton } from '@backstage/core-components';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { askRouteRef } from '../../routes';\nimport { useStyles, useTranslation } from '../../hooks';\n\nexport const AskQuestionButton = (props: {\n entity?: string;\n tags?: string[];\n entityPage?: boolean;\n}) => {\n const { entity, entityPage, tags } = props;\n const askRoute = useRouteRef(askRouteRef);\n const { t } = useTranslation();\n const styles = useStyles();\n\n const params = new URLSearchParams();\n if (entity) {\n params.set('entity', entity);\n }\n if (entityPage) {\n params.set('entityPage', 'true');\n }\n if (tags && tags.length > 0) {\n params.set('tags', tags.join(','));\n }\n\n return (\n <RequirePermission permission={qetaCreatePostPermission} errorPage={<></>}>\n <LinkButton\n variant=\"contained\"\n size=\"small\"\n to={entity || tags ? `${askRoute()}?${params.toString()}` : askRoute()}\n color=\"primary\"\n className={`${styles.marginLeft} qetaAskQuestionBtn`}\n startIcon={<HelpOutline />}\n >\n {t('askQuestionButton.title')}\n </LinkButton>\n </RequirePermission>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;AASa,MAAA,iBAAA,GAAoB,CAAC,KAI5B,KAAA;AACJ,EAAA,MAAM,EAAE,MAAA,EAAQ,UAAY,EAAA,IAAA,EAAS,GAAA,KAAA,CAAA;AACrC,EAAM,MAAA,QAAA,GAAW,YAAY,WAAW,CAAA,CAAA;AACxC,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAC7B,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AAEzB,EAAM,MAAA,MAAA,GAAS,IAAI,eAAgB,EAAA,CAAA;AACnC,EAAA,IAAI,MAAQ,EAAA;AACV,IAAO,MAAA,CAAA,GAAA,CAAI,UAAU,MAAM,CAAA,CAAA;AAAA,GAC7B;AACA,EAAA,IAAI,UAAY,EAAA;AACd,IAAO,MAAA,CAAA,GAAA,CAAI,cAAc,MAAM,CAAA,CAAA;AAAA,GACjC;AACA,EAAI,IAAA,IAAA,IAAQ,IAAK,CAAA,MAAA,GAAS,CAAG,EAAA;AAC3B,IAAA,MAAA,CAAO,GAAI,CAAA,MAAA,EAAQ,IAAK,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,GACnC;AAEA,EAAA,2CACG,iBAAkB,EAAA,EAAA,UAAA,EAAY,wBAA0B,EAAA,SAAA,0DAAa,CACpE,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,WAAA;AAAA,MACR,IAAK,EAAA,OAAA;AAAA,MACL,EAAA,EAAI,MAAU,IAAA,IAAA,GAAO,CAAG,EAAA,QAAA,EAAU,CAAA,CAAA,EAAI,MAAO,CAAA,QAAA,EAAU,CAAA,CAAA,GAAK,QAAS,EAAA;AAAA,MACrE,KAAM,EAAA,SAAA;AAAA,MACN,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,mBAAA,CAAA;AAAA,MAC/B,SAAA,sCAAY,WAAY,EAAA,IAAA,CAAA;AAAA,KAAA;AAAA,IAEvB,EAAE,yBAAyB,CAAA;AAAA,GAEhC,CAAA,CAAA;AAEJ;;;;"}
@@ -1,12 +1,16 @@
1
1
  import { LinkButton } from '@backstage/core-components';
2
2
  import React from 'react';
3
- import { useStyles, useTranslation } from '../../utils/hooks.esm.js';
4
3
  import { useRouteRef } from '@backstage/core-plugin-api';
5
4
  import { entityRouteRef } from '@backstage/plugin-catalog-react';
6
5
  import { parseEntityRef } from '@backstage/catalog-model';
7
6
  import { useSearchParams } from 'react-router-dom';
8
7
  import ChevronLeft from '@material-ui/icons/ChevronLeft';
9
8
  import { articlesRouteRef } from '../../routes.esm.js';
9
+ import '../../api.esm.js';
10
+ import 'react-use';
11
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
12
+ import { useStyles } from '../../hooks/useStyles.esm.js';
13
+ import 'react-use/lib/useAsync';
10
14
 
11
15
  const BackToArticlesButton = (props) => {
12
16
  const styles = useStyles();
@@ -1 +1 @@
1
- {"version":3,"file":"BackToArticlesButton.esm.js","sources":["../../../src/components/Buttons/BackToArticlesButton.tsx"],"sourcesContent":["import { LinkButton } from '@backstage/core-components';\nimport React from 'react';\nimport { useStyles, useTranslation } from '../../utils/hooks';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { entityRouteRef } from '@backstage/plugin-catalog-react';\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { useSearchParams } from 'react-router-dom';\nimport ChevronLeft from '@material-ui/icons/ChevronLeft';\nimport { articlesRouteRef } from '../../routes';\n\nexport const BackToArticlesButton = (props: { entityPage?: boolean }) => {\n const styles = useStyles();\n const entityRoute = useRouteRef(entityRouteRef);\n const articlesRoute = useRouteRef(articlesRouteRef);\n const { t } = useTranslation();\n\n let to = articlesRoute();\n const [searchParams] = useSearchParams();\n const entity = searchParams.get('entity');\n if (entity) {\n const entityRef = parseEntityRef(entity);\n if (props.entityPage) {\n to = `${entityRoute(entityRef)}/qeta`;\n } else {\n to = `${articlesRoute()}?entity=${entity}`;\n }\n }\n\n return (\n <LinkButton\n size=\"small\"\n className={`${styles.marginLeft} qetaBackToArticlesBtn`}\n to={to}\n startIcon={<ChevronLeft />}\n >\n {t('backToQuestionsButton.title')}\n </LinkButton>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAUa,MAAA,oBAAA,GAAuB,CAAC,KAAoC,KAAA;AACvE,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAM,MAAA,WAAA,GAAc,YAAY,cAAc,CAAA,CAAA;AAC9C,EAAM,MAAA,aAAA,GAAgB,YAAY,gBAAgB,CAAA,CAAA;AAClD,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAE7B,EAAA,IAAI,KAAK,aAAc,EAAA,CAAA;AACvB,EAAM,MAAA,CAAC,YAAY,CAAA,GAAI,eAAgB,EAAA,CAAA;AACvC,EAAM,MAAA,MAAA,GAAS,YAAa,CAAA,GAAA,CAAI,QAAQ,CAAA,CAAA;AACxC,EAAA,IAAI,MAAQ,EAAA;AACV,IAAM,MAAA,SAAA,GAAY,eAAe,MAAM,CAAA,CAAA;AACvC,IAAA,IAAI,MAAM,UAAY,EAAA;AACpB,MAAK,EAAA,GAAA,CAAA,EAAG,WAAY,CAAA,SAAS,CAAC,CAAA,KAAA,CAAA,CAAA;AAAA,KACzB,MAAA;AACL,MAAA,EAAA,GAAK,CAAG,EAAA,aAAA,EAAe,CAAA,QAAA,EAAW,MAAM,CAAA,CAAA,CAAA;AAAA,KAC1C;AAAA,GACF;AAEA,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,OAAA;AAAA,MACL,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,sBAAA,CAAA;AAAA,MAC/B,EAAA;AAAA,MACA,SAAA,sCAAY,WAAY,EAAA,IAAA,CAAA;AAAA,KAAA;AAAA,IAEvB,EAAE,6BAA6B,CAAA;AAAA,GAClC,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"BackToArticlesButton.esm.js","sources":["../../../src/components/Buttons/BackToArticlesButton.tsx"],"sourcesContent":["import { LinkButton } from '@backstage/core-components';\nimport React from 'react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { entityRouteRef } from '@backstage/plugin-catalog-react';\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { useSearchParams } from 'react-router-dom';\nimport ChevronLeft from '@material-ui/icons/ChevronLeft';\nimport { articlesRouteRef } from '../../routes';\nimport { useStyles, useTranslation } from '../../hooks';\n\nexport const BackToArticlesButton = (props: { entityPage?: boolean }) => {\n const styles = useStyles();\n const entityRoute = useRouteRef(entityRouteRef);\n const articlesRoute = useRouteRef(articlesRouteRef);\n const { t } = useTranslation();\n\n let to = articlesRoute();\n const [searchParams] = useSearchParams();\n const entity = searchParams.get('entity');\n if (entity) {\n const entityRef = parseEntityRef(entity);\n if (props.entityPage) {\n to = `${entityRoute(entityRef)}/qeta`;\n } else {\n to = `${articlesRoute()}?entity=${entity}`;\n }\n }\n\n return (\n <LinkButton\n size=\"small\"\n className={`${styles.marginLeft} qetaBackToArticlesBtn`}\n to={to}\n startIcon={<ChevronLeft />}\n >\n {t('backToQuestionsButton.title')}\n </LinkButton>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAUa,MAAA,oBAAA,GAAuB,CAAC,KAAoC,KAAA;AACvE,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAM,MAAA,WAAA,GAAc,YAAY,cAAc,CAAA,CAAA;AAC9C,EAAM,MAAA,aAAA,GAAgB,YAAY,gBAAgB,CAAA,CAAA;AAClD,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAE7B,EAAA,IAAI,KAAK,aAAc,EAAA,CAAA;AACvB,EAAM,MAAA,CAAC,YAAY,CAAA,GAAI,eAAgB,EAAA,CAAA;AACvC,EAAM,MAAA,MAAA,GAAS,YAAa,CAAA,GAAA,CAAI,QAAQ,CAAA,CAAA;AACxC,EAAA,IAAI,MAAQ,EAAA;AACV,IAAM,MAAA,SAAA,GAAY,eAAe,MAAM,CAAA,CAAA;AACvC,IAAA,IAAI,MAAM,UAAY,EAAA;AACpB,MAAK,EAAA,GAAA,CAAA,EAAG,WAAY,CAAA,SAAS,CAAC,CAAA,KAAA,CAAA,CAAA;AAAA,KACzB,MAAA;AACL,MAAA,EAAA,GAAK,CAAG,EAAA,aAAA,EAAe,CAAA,QAAA,EAAW,MAAM,CAAA,CAAA,CAAA;AAAA,KAC1C;AAAA,GACF;AAEA,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,OAAA;AAAA,MACL,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,sBAAA,CAAA;AAAA,MAC/B,EAAA;AAAA,MACA,SAAA,sCAAY,WAAY,EAAA,IAAA,CAAA;AAAA,KAAA;AAAA,IAEvB,EAAE,6BAA6B,CAAA;AAAA,GAClC,CAAA;AAEJ;;;;"}
@@ -1,9 +1,13 @@
1
1
  import { LinkButton } from '@backstage/core-components';
2
2
  import React from 'react';
3
- import { useStyles, useTranslation } from '../../utils/hooks.esm.js';
4
3
  import { useRouteRef } from '@backstage/core-plugin-api';
5
4
  import { collectionsRouteRef } from '../../routes.esm.js';
6
5
  import ChevronLeft from '@material-ui/icons/ChevronLeft';
6
+ import '../../api.esm.js';
7
+ import 'react-use';
8
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
9
+ import { useStyles } from '../../hooks/useStyles.esm.js';
10
+ import 'react-use/lib/useAsync';
7
11
 
8
12
  const BackToCollectionsButton = () => {
9
13
  const styles = useStyles();
@@ -1 +1 @@
1
- {"version":3,"file":"BackToCollectionsButton.esm.js","sources":["../../../src/components/Buttons/BackToCollectionsButton.tsx"],"sourcesContent":["import { LinkButton } from '@backstage/core-components';\nimport React from 'react';\nimport { useStyles, useTranslation } from '../../utils/hooks';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { collectionsRouteRef } from '../../routes';\nimport ChevronLeft from '@material-ui/icons/ChevronLeft';\n\nexport const BackToCollectionsButton = () => {\n const styles = useStyles();\n const collectionsRoute = useRouteRef(collectionsRouteRef);\n const { t } = useTranslation();\n\n return (\n <LinkButton\n size=\"small\"\n className={`${styles.marginLeft} qetaBackToQuestionsBtn`}\n to={collectionsRoute()}\n startIcon={<ChevronLeft />}\n >\n {t('backToCollectionsButton.title')}\n </LinkButton>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAOO,MAAM,0BAA0B,MAAM;AAC3C,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAM,MAAA,gBAAA,GAAmB,YAAY,mBAAmB,CAAA,CAAA;AACxD,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAE7B,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,OAAA;AAAA,MACL,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,uBAAA,CAAA;AAAA,MAC/B,IAAI,gBAAiB,EAAA;AAAA,MACrB,SAAA,sCAAY,WAAY,EAAA,IAAA,CAAA;AAAA,KAAA;AAAA,IAEvB,EAAE,+BAA+B,CAAA;AAAA,GACpC,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"BackToCollectionsButton.esm.js","sources":["../../../src/components/Buttons/BackToCollectionsButton.tsx"],"sourcesContent":["import { LinkButton } from '@backstage/core-components';\nimport React from 'react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { collectionsRouteRef } from '../../routes';\nimport ChevronLeft from '@material-ui/icons/ChevronLeft';\nimport { useStyles, useTranslation } from '../../hooks';\n\nexport const BackToCollectionsButton = () => {\n const styles = useStyles();\n const collectionsRoute = useRouteRef(collectionsRouteRef);\n const { t } = useTranslation();\n\n return (\n <LinkButton\n size=\"small\"\n className={`${styles.marginLeft} qetaBackToQuestionsBtn`}\n to={collectionsRoute()}\n startIcon={<ChevronLeft />}\n >\n {t('backToCollectionsButton.title')}\n </LinkButton>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAOO,MAAM,0BAA0B,MAAM;AAC3C,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAM,MAAA,gBAAA,GAAmB,YAAY,mBAAmB,CAAA,CAAA;AACxD,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAE7B,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,OAAA;AAAA,MACL,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,uBAAA,CAAA;AAAA,MAC/B,IAAI,gBAAiB,EAAA;AAAA,MACrB,SAAA,sCAAY,WAAY,EAAA,IAAA,CAAA;AAAA,KAAA;AAAA,IAEvB,EAAE,+BAA+B,CAAA;AAAA,GACpC,CAAA;AAEJ;;;;"}
@@ -1,12 +1,16 @@
1
1
  import { LinkButton } from '@backstage/core-components';
2
2
  import React from 'react';
3
- import { useStyles, useTranslation } from '../../utils/hooks.esm.js';
4
3
  import { useRouteRef } from '@backstage/core-plugin-api';
5
4
  import { entityRouteRef } from '@backstage/plugin-catalog-react';
6
5
  import { parseEntityRef } from '@backstage/catalog-model';
7
6
  import { useSearchParams } from 'react-router-dom';
8
7
  import { questionsRouteRef } from '../../routes.esm.js';
9
8
  import ChevronLeft from '@material-ui/icons/ChevronLeft';
9
+ import '../../api.esm.js';
10
+ import 'react-use';
11
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
12
+ import { useStyles } from '../../hooks/useStyles.esm.js';
13
+ import 'react-use/lib/useAsync';
10
14
 
11
15
  const BackToQuestionsButton = (props) => {
12
16
  const styles = useStyles();
@@ -1 +1 @@
1
- {"version":3,"file":"BackToQuestionsButton.esm.js","sources":["../../../src/components/Buttons/BackToQuestionsButton.tsx"],"sourcesContent":["import { LinkButton } from '@backstage/core-components';\nimport React from 'react';\nimport { useStyles, useTranslation } from '../../utils/hooks';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { entityRouteRef } from '@backstage/plugin-catalog-react';\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { useSearchParams } from 'react-router-dom';\nimport { questionsRouteRef } from '../../routes';\nimport ChevronLeft from '@material-ui/icons/ChevronLeft';\n\nexport const BackToQuestionsButton = (props: { entityPage?: boolean }) => {\n const styles = useStyles();\n const entityRoute = useRouteRef(entityRouteRef);\n const questionsRoute = useRouteRef(questionsRouteRef);\n const { t } = useTranslation();\n\n let to = questionsRoute();\n const [searchParams] = useSearchParams();\n const entity = searchParams.get('entity');\n if (entity) {\n const entityRef = parseEntityRef(entity);\n if (props.entityPage) {\n to = `${entityRoute(entityRef)}/qeta`;\n } else {\n to = `${questionsRoute()}?entity=${entity}`;\n }\n }\n\n return (\n <LinkButton\n size=\"small\"\n className={`${styles.marginLeft} qetaBackToQuestionsBtn`}\n to={to}\n startIcon={<ChevronLeft />}\n >\n {t('backToQuestionsButton.title')}\n </LinkButton>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAUa,MAAA,qBAAA,GAAwB,CAAC,KAAoC,KAAA;AACxE,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAM,MAAA,WAAA,GAAc,YAAY,cAAc,CAAA,CAAA;AAC9C,EAAM,MAAA,cAAA,GAAiB,YAAY,iBAAiB,CAAA,CAAA;AACpD,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAE7B,EAAA,IAAI,KAAK,cAAe,EAAA,CAAA;AACxB,EAAM,MAAA,CAAC,YAAY,CAAA,GAAI,eAAgB,EAAA,CAAA;AACvC,EAAM,MAAA,MAAA,GAAS,YAAa,CAAA,GAAA,CAAI,QAAQ,CAAA,CAAA;AACxC,EAAA,IAAI,MAAQ,EAAA;AACV,IAAM,MAAA,SAAA,GAAY,eAAe,MAAM,CAAA,CAAA;AACvC,IAAA,IAAI,MAAM,UAAY,EAAA;AACpB,MAAK,EAAA,GAAA,CAAA,EAAG,WAAY,CAAA,SAAS,CAAC,CAAA,KAAA,CAAA,CAAA;AAAA,KACzB,MAAA;AACL,MAAA,EAAA,GAAK,CAAG,EAAA,cAAA,EAAgB,CAAA,QAAA,EAAW,MAAM,CAAA,CAAA,CAAA;AAAA,KAC3C;AAAA,GACF;AAEA,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,OAAA;AAAA,MACL,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,uBAAA,CAAA;AAAA,MAC/B,EAAA;AAAA,MACA,SAAA,sCAAY,WAAY,EAAA,IAAA,CAAA;AAAA,KAAA;AAAA,IAEvB,EAAE,6BAA6B,CAAA;AAAA,GAClC,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"BackToQuestionsButton.esm.js","sources":["../../../src/components/Buttons/BackToQuestionsButton.tsx"],"sourcesContent":["import { LinkButton } from '@backstage/core-components';\nimport React from 'react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { entityRouteRef } from '@backstage/plugin-catalog-react';\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { useSearchParams } from 'react-router-dom';\nimport { questionsRouteRef } from '../../routes';\nimport ChevronLeft from '@material-ui/icons/ChevronLeft';\nimport { useStyles, useTranslation } from '../../hooks';\n\nexport const BackToQuestionsButton = (props: { entityPage?: boolean }) => {\n const styles = useStyles();\n const entityRoute = useRouteRef(entityRouteRef);\n const questionsRoute = useRouteRef(questionsRouteRef);\n const { t } = useTranslation();\n\n let to = questionsRoute();\n const [searchParams] = useSearchParams();\n const entity = searchParams.get('entity');\n if (entity) {\n const entityRef = parseEntityRef(entity);\n if (props.entityPage) {\n to = `${entityRoute(entityRef)}/qeta`;\n } else {\n to = `${questionsRoute()}?entity=${entity}`;\n }\n }\n\n return (\n <LinkButton\n size=\"small\"\n className={`${styles.marginLeft} qetaBackToQuestionsBtn`}\n to={to}\n startIcon={<ChevronLeft />}\n >\n {t('backToQuestionsButton.title')}\n </LinkButton>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAUa,MAAA,qBAAA,GAAwB,CAAC,KAAoC,KAAA;AACxE,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAM,MAAA,WAAA,GAAc,YAAY,cAAc,CAAA,CAAA;AAC9C,EAAM,MAAA,cAAA,GAAiB,YAAY,iBAAiB,CAAA,CAAA;AACpD,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAE7B,EAAA,IAAI,KAAK,cAAe,EAAA,CAAA;AACxB,EAAM,MAAA,CAAC,YAAY,CAAA,GAAI,eAAgB,EAAA,CAAA;AACvC,EAAM,MAAA,MAAA,GAAS,YAAa,CAAA,GAAA,CAAI,QAAQ,CAAA,CAAA;AACxC,EAAA,IAAI,MAAQ,EAAA;AACV,IAAM,MAAA,SAAA,GAAY,eAAe,MAAM,CAAA,CAAA;AACvC,IAAA,IAAI,MAAM,UAAY,EAAA;AACpB,MAAK,EAAA,GAAA,CAAA,EAAG,WAAY,CAAA,SAAS,CAAC,CAAA,KAAA,CAAA,CAAA;AAAA,KACzB,MAAA;AACL,MAAA,EAAA,GAAK,CAAG,EAAA,cAAA,EAAgB,CAAA,QAAA,EAAW,MAAM,CAAA,CAAA,CAAA;AAAA,KAC3C;AAAA,GACF;AAEA,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,OAAA;AAAA,MACL,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,uBAAA,CAAA;AAAA,MAC/B,EAAA;AAAA,MACA,SAAA,sCAAY,WAAY,EAAA,IAAA,CAAA;AAAA,KAAA;AAAA,IAEvB,EAAE,6BAA6B,CAAA;AAAA,GAClC,CAAA;AAEJ;;;;"}
@@ -0,0 +1,40 @@
1
+ import React from 'react';
2
+ import { Tooltip, IconButton } from '@material-ui/core';
3
+ import Visibility from '@material-ui/icons/Visibility';
4
+ import VisibilityOff from '@material-ui/icons/VisibilityOff';
5
+ import '@backstage/core-plugin-api';
6
+ import '../../api.esm.js';
7
+ import 'react-use';
8
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
9
+ import { useStyles } from '../../hooks/useStyles.esm.js';
10
+ import 'react-use/lib/useAsync';
11
+ import { useCollectionsFollow } from '../../hooks/useCollectionsFollow.esm.js';
12
+
13
+ const CollectionFollowButton = (props) => {
14
+ const { collection } = props;
15
+ const styles = useStyles();
16
+ const { t } = useTranslation();
17
+ const collections = useCollectionsFollow();
18
+ if (collections.loading) {
19
+ return null;
20
+ }
21
+ return /* @__PURE__ */ React.createElement(Tooltip, { title: t("collectionButton.tooltip") }, /* @__PURE__ */ React.createElement(
22
+ IconButton,
23
+ {
24
+ size: "small",
25
+ className: `${styles.marginLeft} qetaFollowCollectionBtn`,
26
+ color: collections.isFollowingCollection(collection) ? "secondary" : "primary",
27
+ onClick: () => {
28
+ if (collections.isFollowingCollection(collection)) {
29
+ collections.unfollowCollection(collection);
30
+ } else {
31
+ collections.followCollection(collection);
32
+ }
33
+ }
34
+ },
35
+ collections.isFollowingCollection(collection) ? /* @__PURE__ */ React.createElement(VisibilityOff, null) : /* @__PURE__ */ React.createElement(Visibility, null)
36
+ ));
37
+ };
38
+
39
+ export { CollectionFollowButton };
40
+ //# sourceMappingURL=CollectionFollowButton.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollectionFollowButton.esm.js","sources":["../../../src/components/Buttons/CollectionFollowButton.tsx"],"sourcesContent":["import React from 'react';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport Visibility from '@material-ui/icons/Visibility';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\nimport { useStyles, useTranslation } from '../../hooks';\nimport { Collection } from '@drodil/backstage-plugin-qeta-common';\nimport { useCollectionsFollow } from '../../hooks/useCollectionsFollow';\n\nexport const CollectionFollowButton = (props: { collection: Collection }) => {\n const { collection } = props;\n const styles = useStyles();\n const { t } = useTranslation();\n const collections = useCollectionsFollow();\n if (collections.loading) {\n return null;\n }\n return (\n <Tooltip title={t('collectionButton.tooltip')}>\n <IconButton\n size=\"small\"\n className={`${styles.marginLeft} qetaFollowCollectionBtn`}\n color={\n collections.isFollowingCollection(collection)\n ? 'secondary'\n : 'primary'\n }\n onClick={() => {\n if (collections.isFollowingCollection(collection)) {\n collections.unfollowCollection(collection);\n } else {\n collections.followCollection(collection);\n }\n }}\n >\n {collections.isFollowingCollection(collection) ? (\n <VisibilityOff />\n ) : (\n <Visibility />\n )}\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;AAQa,MAAA,sBAAA,GAAyB,CAAC,KAAsC,KAAA;AAC3E,EAAM,MAAA,EAAE,YAAe,GAAA,KAAA,CAAA;AACvB,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAC7B,EAAA,MAAM,cAAc,oBAAqB,EAAA,CAAA;AACzC,EAAA,IAAI,YAAY,OAAS,EAAA;AACvB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACA,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,CAAA,CAAE,0BAA0B,CAC1C,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,OAAA;AAAA,MACL,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,wBAAA,CAAA;AAAA,MAC/B,KACE,EAAA,WAAA,CAAY,qBAAsB,CAAA,UAAU,IACxC,WACA,GAAA,SAAA;AAAA,MAEN,SAAS,MAAM;AACb,QAAI,IAAA,WAAA,CAAY,qBAAsB,CAAA,UAAU,CAAG,EAAA;AACjD,UAAA,WAAA,CAAY,mBAAmB,UAAU,CAAA,CAAA;AAAA,SACpC,MAAA;AACL,UAAA,WAAA,CAAY,iBAAiB,UAAU,CAAA,CAAA;AAAA,SACzC;AAAA,OACF;AAAA,KAAA;AAAA,IAEC,WAAA,CAAY,sBAAsB,UAAU,CAAA,uCAC1C,aAAc,EAAA,IAAA,CAAA,uCAEd,UAAW,EAAA,IAAA,CAAA;AAAA,GAGlB,CAAA,CAAA;AAEJ;;;;"}
@@ -5,7 +5,11 @@ import { qetaCreatePostPermission } from '@drodil/backstage-plugin-qeta-common';
5
5
  import { LinkButton } from '@backstage/core-components';
6
6
  import { useRouteRef } from '@backstage/core-plugin-api';
7
7
  import { collectionCreateRouteRef } from '../../routes.esm.js';
8
- import { useTranslation, useStyles } from '../../utils/hooks.esm.js';
8
+ import '../../api.esm.js';
9
+ import 'react-use';
10
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
11
+ import { useStyles } from '../../hooks/useStyles.esm.js';
12
+ import 'react-use/lib/useAsync';
9
13
 
10
14
  const CreateCollectionButton = () => {
11
15
  const createRoute = useRouteRef(collectionCreateRouteRef);
@@ -1 +1 @@
1
- {"version":3,"file":"CreateCollectionButton.esm.js","sources":["../../../src/components/Buttons/CreateCollectionButton.tsx"],"sourcesContent":["import PlayListAddIcon from '@material-ui/icons/PlaylistAdd';\nimport React from 'react';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\nimport { qetaCreatePostPermission } from '@drodil/backstage-plugin-qeta-common';\nimport { LinkButton } from '@backstage/core-components';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { collectionCreateRouteRef } from '../../routes';\nimport { useStyles, useTranslation } from '../../utils/hooks';\n\nexport const CreateCollectionButton = () => {\n const createRoute = useRouteRef(collectionCreateRouteRef);\n const { t } = useTranslation();\n const styles = useStyles();\n\n return (\n <RequirePermission permission={qetaCreatePostPermission} errorPage={<></>}>\n <LinkButton\n size=\"small\"\n variant=\"contained\"\n to={createRoute()}\n color=\"primary\"\n className={`${styles.marginLeft} qetaCreateCollectionBtn`}\n startIcon={<PlayListAddIcon />}\n >\n {t('createCollectionButton.title')}\n </LinkButton>\n </RequirePermission>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AASO,MAAM,yBAAyB,MAAM;AAC1C,EAAM,MAAA,WAAA,GAAc,YAAY,wBAAwB,CAAA,CAAA;AACxD,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAC7B,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AAEzB,EAAA,2CACG,iBAAkB,EAAA,EAAA,UAAA,EAAY,wBAA0B,EAAA,SAAA,0DAAa,CACpE,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,OAAA;AAAA,MACL,OAAQ,EAAA,WAAA;AAAA,MACR,IAAI,WAAY,EAAA;AAAA,MAChB,KAAM,EAAA,SAAA;AAAA,MACN,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,wBAAA,CAAA;AAAA,MAC/B,SAAA,sCAAY,eAAgB,EAAA,IAAA,CAAA;AAAA,KAAA;AAAA,IAE3B,EAAE,8BAA8B,CAAA;AAAA,GAErC,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"CreateCollectionButton.esm.js","sources":["../../../src/components/Buttons/CreateCollectionButton.tsx"],"sourcesContent":["import PlayListAddIcon from '@material-ui/icons/PlaylistAdd';\nimport React from 'react';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\nimport { qetaCreatePostPermission } from '@drodil/backstage-plugin-qeta-common';\nimport { LinkButton } from '@backstage/core-components';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { collectionCreateRouteRef } from '../../routes';\nimport { useStyles, useTranslation } from '../../hooks';\n\nexport const CreateCollectionButton = () => {\n const createRoute = useRouteRef(collectionCreateRouteRef);\n const { t } = useTranslation();\n const styles = useStyles();\n\n return (\n <RequirePermission permission={qetaCreatePostPermission} errorPage={<></>}>\n <LinkButton\n size=\"small\"\n variant=\"contained\"\n to={createRoute()}\n color=\"primary\"\n className={`${styles.marginLeft} qetaCreateCollectionBtn`}\n startIcon={<PlayListAddIcon />}\n >\n {t('createCollectionButton.title')}\n </LinkButton>\n </RequirePermission>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;AASO,MAAM,yBAAyB,MAAM;AAC1C,EAAM,MAAA,WAAA,GAAc,YAAY,wBAAwB,CAAA,CAAA;AACxD,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAC7B,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AAEzB,EAAA,2CACG,iBAAkB,EAAA,EAAA,UAAA,EAAY,wBAA0B,EAAA,SAAA,0DAAa,CACpE,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,OAAA;AAAA,MACL,OAAQ,EAAA,WAAA;AAAA,MACR,IAAI,WAAY,EAAA;AAAA,MAChB,KAAM,EAAA,SAAA;AAAA,MACN,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,wBAAA,CAAA;AAAA,MAC/B,SAAA,sCAAY,eAAgB,EAAA,IAAA,CAAA;AAAA,KAAA;AAAA,IAE3B,EAAE,8BAA8B,CAAA;AAAA,GAErC,CAAA,CAAA;AAEJ;;;;"}
@@ -1,8 +1,14 @@
1
1
  import React from 'react';
2
- import { useStyles, useTranslation, useEntityFollow } from '../../utils/hooks.esm.js';
3
2
  import { Tooltip, IconButton } from '@material-ui/core';
4
3
  import Visibility from '@material-ui/icons/Visibility';
5
4
  import VisibilityOff from '@material-ui/icons/VisibilityOff';
5
+ import '@backstage/core-plugin-api';
6
+ import '../../api.esm.js';
7
+ import 'react-use';
8
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
9
+ import { useEntityFollow } from '../../hooks/useEntityFollow.esm.js';
10
+ import { useStyles } from '../../hooks/useStyles.esm.js';
11
+ import 'react-use/lib/useAsync';
6
12
 
7
13
  const EntityFollowButton = (props) => {
8
14
  const { entityRef } = props;
@@ -1 +1 @@
1
- {"version":3,"file":"EntityFollowButton.esm.js","sources":["../../../src/components/Buttons/EntityFollowButton.tsx"],"sourcesContent":["import React from 'react';\nimport { useEntityFollow, useStyles, useTranslation } from '../../utils/hooks';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport Visibility from '@material-ui/icons/Visibility';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\n\nexport const EntityFollowButton = (props: { entityRef: string }) => {\n const { entityRef } = props;\n const styles = useStyles();\n const { t } = useTranslation();\n const entities = useEntityFollow();\n if (entities.loading) {\n return null;\n }\n\n return (\n <Tooltip title={t('entityButton.tooltip')}>\n <IconButton\n size=\"small\"\n className={`${styles.marginLeft} qetaFollowEntityBtn`}\n color={entities.isFollowingEntity(entityRef) ? 'secondary' : 'primary'}\n onClick={() => {\n if (entities.isFollowingEntity(entityRef)) {\n entities.unfollowEntity(entityRef);\n } else {\n entities.followEntity(entityRef);\n }\n }}\n >\n {entities.isFollowingEntity(entityRef) ? (\n <VisibilityOff />\n ) : (\n <Visibility />\n )}\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;AAMa,MAAA,kBAAA,GAAqB,CAAC,KAAiC,KAAA;AAClE,EAAM,MAAA,EAAE,WAAc,GAAA,KAAA,CAAA;AACtB,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAC7B,EAAA,MAAM,WAAW,eAAgB,EAAA,CAAA;AACjC,EAAA,IAAI,SAAS,OAAS,EAAA;AACpB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,CAAA,CAAE,sBAAsB,CACtC,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,OAAA;AAAA,MACL,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,oBAAA,CAAA;AAAA,MAC/B,KAAO,EAAA,QAAA,CAAS,iBAAkB,CAAA,SAAS,IAAI,WAAc,GAAA,SAAA;AAAA,MAC7D,SAAS,MAAM;AACb,QAAI,IAAA,QAAA,CAAS,iBAAkB,CAAA,SAAS,CAAG,EAAA;AACzC,UAAA,QAAA,CAAS,eAAe,SAAS,CAAA,CAAA;AAAA,SAC5B,MAAA;AACL,UAAA,QAAA,CAAS,aAAa,SAAS,CAAA,CAAA;AAAA,SACjC;AAAA,OACF;AAAA,KAAA;AAAA,IAEC,QAAA,CAAS,kBAAkB,SAAS,CAAA,uCAClC,aAAc,EAAA,IAAA,CAAA,uCAEd,UAAW,EAAA,IAAA,CAAA;AAAA,GAGlB,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"EntityFollowButton.esm.js","sources":["../../../src/components/Buttons/EntityFollowButton.tsx"],"sourcesContent":["import React from 'react';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport Visibility from '@material-ui/icons/Visibility';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\nimport { useEntityFollow, useStyles, useTranslation } from '../../hooks';\n\nexport const EntityFollowButton = (props: { entityRef: string }) => {\n const { entityRef } = props;\n const styles = useStyles();\n const { t } = useTranslation();\n const entities = useEntityFollow();\n if (entities.loading) {\n return null;\n }\n\n return (\n <Tooltip title={t('entityButton.tooltip')}>\n <IconButton\n size=\"small\"\n className={`${styles.marginLeft} qetaFollowEntityBtn`}\n color={entities.isFollowingEntity(entityRef) ? 'secondary' : 'primary'}\n onClick={() => {\n if (entities.isFollowingEntity(entityRef)) {\n entities.unfollowEntity(entityRef);\n } else {\n entities.followEntity(entityRef);\n }\n }}\n >\n {entities.isFollowingEntity(entityRef) ? (\n <VisibilityOff />\n ) : (\n <Visibility />\n )}\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;AAMa,MAAA,kBAAA,GAAqB,CAAC,KAAiC,KAAA;AAClE,EAAM,MAAA,EAAE,WAAc,GAAA,KAAA,CAAA;AACtB,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAC7B,EAAA,MAAM,WAAW,eAAgB,EAAA,CAAA;AACjC,EAAA,IAAI,SAAS,OAAS,EAAA;AACpB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,CAAA,CAAE,sBAAsB,CACtC,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,OAAA;AAAA,MACL,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,oBAAA,CAAA;AAAA,MAC/B,KAAO,EAAA,QAAA,CAAS,iBAAkB,CAAA,SAAS,IAAI,WAAc,GAAA,SAAA;AAAA,MAC7D,SAAS,MAAM;AACb,QAAI,IAAA,QAAA,CAAS,iBAAkB,CAAA,SAAS,CAAG,EAAA;AACzC,UAAA,QAAA,CAAS,eAAe,SAAS,CAAA,CAAA;AAAA,SAC5B,MAAA;AACL,UAAA,QAAA,CAAS,aAAa,SAAS,CAAA,CAAA;AAAA,SACjC;AAAA,OACF;AAAA,KAAA;AAAA,IAEC,QAAA,CAAS,kBAAkB,SAAS,CAAA,uCAClC,aAAc,EAAA,IAAA,CAAA,uCAEd,UAAW,EAAA,IAAA,CAAA;AAAA,GAGlB,CAAA,CAAA;AAEJ;;;;"}
@@ -4,7 +4,10 @@ import { useApi } from '@backstage/core-plugin-api';
4
4
  import StarIcon from '@material-ui/icons/Star';
5
5
  import StarOutlineIcon from '@material-ui/icons/StarOutline';
6
6
  import { qetaApiRef } from '../../api.esm.js';
7
- import { useTranslation } from '../../utils/hooks.esm.js';
7
+ import 'react-use';
8
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
9
+ import '../../hooks/useStyles.esm.js';
10
+ import 'react-use/lib/useAsync';
8
11
 
9
12
  const FavoriteButton = (props) => {
10
13
  const [entity, setEntity] = React.useState(props.entity);
@@ -1 +1 @@
1
- {"version":3,"file":"FavoriteButton.esm.js","sources":["../../../src/components/Buttons/FavoriteButton.tsx"],"sourcesContent":["import { PostResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport React from 'react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport StarIcon from '@material-ui/icons/Star';\nimport StarOutlineIcon from '@material-ui/icons/StarOutline';\nimport { qetaApiRef } from '../../api';\nimport { useTranslation } from '../../utils';\n\nexport const FavoriteButton = (props: { entity: PostResponse }) => {\n const [entity, setEntity] = React.useState<PostResponse>(props.entity);\n const qetaApi = useApi(qetaApiRef);\n const { t } = useTranslation();\n\n const favoriteQuestion = () => {\n qetaApi.favoritePost(entity.id).then(response => {\n setEntity(response);\n });\n };\n\n const unfavoriteQuestion = () => {\n qetaApi.unfavoritePost(entity.id).then(response => {\n setEntity(response);\n });\n };\n\n return (\n <React.Fragment>\n {entity.favorite ? (\n <Tooltip title={t('favorite.remove')}>\n <IconButton\n aria-label=\"unfavorite\"\n size=\"small\"\n onClick={unfavoriteQuestion}\n className=\"qetaUnfavoriteBtn\"\n >\n <StarIcon />\n </IconButton>\n </Tooltip>\n ) : (\n <Tooltip title={t('favorite.add')}>\n <IconButton\n aria-label=\"favorite\"\n size=\"small\"\n onClick={favoriteQuestion}\n className=\"qetaFavoriteBtn\"\n >\n <StarOutlineIcon />\n </IconButton>\n </Tooltip>\n )}\n </React.Fragment>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AASa,MAAA,cAAA,GAAiB,CAAC,KAAoC,KAAA;AACjE,EAAA,MAAM,CAAC,MAAQ,EAAA,SAAS,IAAI,KAAM,CAAA,QAAA,CAAuB,MAAM,MAAM,CAAA,CAAA;AACrE,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA,CAAA;AACjC,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAE7B,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,OAAA,CAAQ,YAAa,CAAA,MAAA,CAAO,EAAE,CAAA,CAAE,KAAK,CAAY,QAAA,KAAA;AAC/C,MAAA,SAAA,CAAU,QAAQ,CAAA,CAAA;AAAA,KACnB,CAAA,CAAA;AAAA,GACH,CAAA;AAEA,EAAA,MAAM,qBAAqB,MAAM;AAC/B,IAAA,OAAA,CAAQ,cAAe,CAAA,MAAA,CAAO,EAAE,CAAA,CAAE,KAAK,CAAY,QAAA,KAAA;AACjD,MAAA,SAAA,CAAU,QAAQ,CAAA,CAAA;AAAA,KACnB,CAAA,CAAA;AAAA,GACH,CAAA;AAEA,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,KAAM,CAAA,QAAA,EAAN,IACE,EAAA,MAAA,CAAO,QACN,mBAAA,KAAA,CAAA,aAAA,CAAC,OAAQ,EAAA,EAAA,KAAA,EAAO,CAAE,CAAA,iBAAiB,CACjC,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,YAAW,EAAA,YAAA;AAAA,MACX,IAAK,EAAA,OAAA;AAAA,MACL,OAAS,EAAA,kBAAA;AAAA,MACT,SAAU,EAAA,mBAAA;AAAA,KAAA;AAAA,wCAET,QAAS,EAAA,IAAA,CAAA;AAAA,GAEd,CAEA,mBAAA,KAAA,CAAA,aAAA,CAAC,WAAQ,KAAO,EAAA,CAAA,CAAE,cAAc,CAC9B,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,YAAW,EAAA,UAAA;AAAA,MACX,IAAK,EAAA,OAAA;AAAA,MACL,OAAS,EAAA,gBAAA;AAAA,MACT,SAAU,EAAA,iBAAA;AAAA,KAAA;AAAA,wCAET,eAAgB,EAAA,IAAA,CAAA;AAAA,GAErB,CAEJ,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"FavoriteButton.esm.js","sources":["../../../src/components/Buttons/FavoriteButton.tsx"],"sourcesContent":["import { PostResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport React from 'react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport StarIcon from '@material-ui/icons/Star';\nimport StarOutlineIcon from '@material-ui/icons/StarOutline';\nimport { qetaApiRef } from '../../api';\nimport { useTranslation } from '../../hooks';\n\nexport const FavoriteButton = (props: { entity: PostResponse }) => {\n const [entity, setEntity] = React.useState<PostResponse>(props.entity);\n const qetaApi = useApi(qetaApiRef);\n const { t } = useTranslation();\n\n const favoriteQuestion = () => {\n qetaApi.favoritePost(entity.id).then(response => {\n setEntity(response);\n });\n };\n\n const unfavoriteQuestion = () => {\n qetaApi.unfavoritePost(entity.id).then(response => {\n setEntity(response);\n });\n };\n\n return (\n <React.Fragment>\n {entity.favorite ? (\n <Tooltip title={t('favorite.remove')}>\n <IconButton\n aria-label=\"unfavorite\"\n size=\"small\"\n onClick={unfavoriteQuestion}\n className=\"qetaUnfavoriteBtn\"\n >\n <StarIcon />\n </IconButton>\n </Tooltip>\n ) : (\n <Tooltip title={t('favorite.add')}>\n <IconButton\n aria-label=\"favorite\"\n size=\"small\"\n onClick={favoriteQuestion}\n className=\"qetaFavoriteBtn\"\n >\n <StarOutlineIcon />\n </IconButton>\n </Tooltip>\n )}\n </React.Fragment>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AASa,MAAA,cAAA,GAAiB,CAAC,KAAoC,KAAA;AACjE,EAAA,MAAM,CAAC,MAAQ,EAAA,SAAS,IAAI,KAAM,CAAA,QAAA,CAAuB,MAAM,MAAM,CAAA,CAAA;AACrE,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA,CAAA;AACjC,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAE7B,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,OAAA,CAAQ,YAAa,CAAA,MAAA,CAAO,EAAE,CAAA,CAAE,KAAK,CAAY,QAAA,KAAA;AAC/C,MAAA,SAAA,CAAU,QAAQ,CAAA,CAAA;AAAA,KACnB,CAAA,CAAA;AAAA,GACH,CAAA;AAEA,EAAA,MAAM,qBAAqB,MAAM;AAC/B,IAAA,OAAA,CAAQ,cAAe,CAAA,MAAA,CAAO,EAAE,CAAA,CAAE,KAAK,CAAY,QAAA,KAAA;AACjD,MAAA,SAAA,CAAU,QAAQ,CAAA,CAAA;AAAA,KACnB,CAAA,CAAA;AAAA,GACH,CAAA;AAEA,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,KAAM,CAAA,QAAA,EAAN,IACE,EAAA,MAAA,CAAO,QACN,mBAAA,KAAA,CAAA,aAAA,CAAC,OAAQ,EAAA,EAAA,KAAA,EAAO,CAAE,CAAA,iBAAiB,CACjC,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,YAAW,EAAA,YAAA;AAAA,MACX,IAAK,EAAA,OAAA;AAAA,MACL,OAAS,EAAA,kBAAA;AAAA,MACT,SAAU,EAAA,mBAAA;AAAA,KAAA;AAAA,wCAET,QAAS,EAAA,IAAA,CAAA;AAAA,GAEd,CAEA,mBAAA,KAAA,CAAA,aAAA,CAAC,WAAQ,KAAO,EAAA,CAAA,CAAE,cAAc,CAC9B,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,YAAW,EAAA,UAAA;AAAA,MACX,IAAK,EAAA,OAAA;AAAA,MACL,OAAS,EAAA,gBAAA;AAAA,MACT,SAAU,EAAA,iBAAA;AAAA,KAAA;AAAA,wCAET,eAAgB,EAAA,IAAA,CAAA;AAAA,GAErB,CAEJ,CAAA,CAAA;AAEJ;;;;"}
@@ -1,7 +1,12 @@
1
1
  import { Tooltip, IconButton } from '@material-ui/core';
2
2
  import Link from '@material-ui/icons/Link';
3
3
  import React from 'react';
4
- import { useTranslation } from '../../utils/hooks.esm.js';
4
+ import '@backstage/core-plugin-api';
5
+ import '../../api.esm.js';
6
+ import 'react-use';
7
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
8
+ import '../../hooks/useStyles.esm.js';
9
+ import 'react-use/lib/useAsync';
5
10
 
6
11
  const LinkButton = (props) => {
7
12
  const isQuestion = "title" in props.entity;
@@ -1 +1 @@
1
- {"version":3,"file":"LinkButton.esm.js","sources":["../../../src/components/Buttons/LinkButton.tsx"],"sourcesContent":["import { IconButton, Tooltip } from '@material-ui/core';\nimport Link from '@material-ui/icons/Link';\nimport React from 'react';\nimport {\n AnswerResponse,\n PostResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { useTranslation } from '../../utils';\n\nexport const LinkButton = (props: {\n entity: PostResponse | AnswerResponse;\n className?: string;\n}) => {\n const isQuestion = 'title' in props.entity;\n const { t } = useTranslation();\n const copyToClipboard = () => {\n const url = new URL(window.location.href);\n if (!isQuestion) {\n url.hash = `#answer_${props.entity.id}`;\n }\n window.navigator.clipboard.writeText(url.toString());\n };\n\n return (\n <Tooltip title={isQuestion ? t('link.post') : t('link.answer')}>\n <IconButton\n aria-label={t('link.aria')}\n size=\"small\"\n onClick={copyToClipboard}\n className={props.className}\n >\n <Link />\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;AASa,MAAA,UAAA,GAAa,CAAC,KAGrB,KAAA;AACJ,EAAM,MAAA,UAAA,GAAa,WAAW,KAAM,CAAA,MAAA,CAAA;AACpC,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAC7B,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,MAAM,GAAM,GAAA,IAAI,GAAI,CAAA,MAAA,CAAO,SAAS,IAAI,CAAA,CAAA;AACxC,IAAA,IAAI,CAAC,UAAY,EAAA;AACf,MAAA,GAAA,CAAI,IAAO,GAAA,CAAA,QAAA,EAAW,KAAM,CAAA,MAAA,CAAO,EAAE,CAAA,CAAA,CAAA;AAAA,KACvC;AACA,IAAA,MAAA,CAAO,SAAU,CAAA,SAAA,CAAU,SAAU,CAAA,GAAA,CAAI,UAAU,CAAA,CAAA;AAAA,GACrD,CAAA;AAEA,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,WAAQ,KAAO,EAAA,UAAA,GAAa,EAAE,WAAW,CAAA,GAAI,CAAE,CAAA,aAAa,CAC3D,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,EAAE,WAAW,CAAA;AAAA,MACzB,IAAK,EAAA,OAAA;AAAA,MACL,OAAS,EAAA,eAAA;AAAA,MACT,WAAW,KAAM,CAAA,SAAA;AAAA,KAAA;AAAA,wCAEhB,IAAK,EAAA,IAAA,CAAA;AAAA,GAEV,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"LinkButton.esm.js","sources":["../../../src/components/Buttons/LinkButton.tsx"],"sourcesContent":["import { IconButton, Tooltip } from '@material-ui/core';\nimport Link from '@material-ui/icons/Link';\nimport React from 'react';\nimport {\n AnswerResponse,\n PostResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { useTranslation } from '../../hooks';\n\nexport const LinkButton = (props: {\n entity: PostResponse | AnswerResponse;\n className?: string;\n}) => {\n const isQuestion = 'title' in props.entity;\n const { t } = useTranslation();\n const copyToClipboard = () => {\n const url = new URL(window.location.href);\n if (!isQuestion) {\n url.hash = `#answer_${props.entity.id}`;\n }\n window.navigator.clipboard.writeText(url.toString());\n };\n\n return (\n <Tooltip title={isQuestion ? t('link.post') : t('link.answer')}>\n <IconButton\n aria-label={t('link.aria')}\n size=\"small\"\n onClick={copyToClipboard}\n className={props.className}\n >\n <Link />\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AASa,MAAA,UAAA,GAAa,CAAC,KAGrB,KAAA;AACJ,EAAM,MAAA,UAAA,GAAa,WAAW,KAAM,CAAA,MAAA,CAAA;AACpC,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAC7B,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,MAAM,GAAM,GAAA,IAAI,GAAI,CAAA,MAAA,CAAO,SAAS,IAAI,CAAA,CAAA;AACxC,IAAA,IAAI,CAAC,UAAY,EAAA;AACf,MAAA,GAAA,CAAI,IAAO,GAAA,CAAA,QAAA,EAAW,KAAM,CAAA,MAAA,CAAO,EAAE,CAAA,CAAA,CAAA;AAAA,KACvC;AACA,IAAA,MAAA,CAAO,SAAU,CAAA,SAAA,CAAU,SAAU,CAAA,GAAA,CAAI,UAAU,CAAA,CAAA;AAAA,GACrD,CAAA;AAEA,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,WAAQ,KAAO,EAAA,UAAA,GAAa,EAAE,WAAW,CAAA,GAAI,CAAE,CAAA,aAAa,CAC3D,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,EAAE,WAAW,CAAA;AAAA,MACzB,IAAK,EAAA,OAAA;AAAA,MACL,OAAS,EAAA,eAAA;AAAA,MACT,WAAW,KAAM,CAAA,SAAA;AAAA,KAAA;AAAA,wCAEhB,IAAK,EAAA,IAAA,CAAA;AAAA,GAEV,CAAA,CAAA;AAEJ;;;;"}
@@ -1,8 +1,14 @@
1
1
  import React from 'react';
2
- import { useStyles, useTranslation, useTagsFollow } from '../../utils/hooks.esm.js';
3
2
  import { Tooltip, IconButton } from '@material-ui/core';
4
3
  import Visibility from '@material-ui/icons/Visibility';
5
4
  import VisibilityOff from '@material-ui/icons/VisibilityOff';
5
+ import '@backstage/core-plugin-api';
6
+ import '../../api.esm.js';
7
+ import 'react-use';
8
+ import { useTagsFollow } from '../../hooks/useTagsFollow.esm.js';
9
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
10
+ import { useStyles } from '../../hooks/useStyles.esm.js';
11
+ import 'react-use/lib/useAsync';
6
12
 
7
13
  const TagFollowButton = (props) => {
8
14
  const { tag } = props;
@@ -1 +1 @@
1
- {"version":3,"file":"TagFollowButton.esm.js","sources":["../../../src/components/Buttons/TagFollowButton.tsx"],"sourcesContent":["import React from 'react';\nimport { useStyles, useTagsFollow, useTranslation } from '../../utils/hooks';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport Visibility from '@material-ui/icons/Visibility';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\n\nexport const TagFollowButton = (props: { tag: string }) => {\n const { tag } = props;\n const styles = useStyles();\n const { t } = useTranslation();\n const tags = useTagsFollow();\n if (tags.loading) {\n return null;\n }\n return (\n <Tooltip title={t('tagButton.tooltip')}>\n <IconButton\n size=\"small\"\n className={`${styles.marginLeft} qetaFollowTagBtn`}\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":";;;;;;AAMa,MAAA,eAAA,GAAkB,CAAC,KAA2B,KAAA;AACzD,EAAM,MAAA,EAAE,KAAQ,GAAA,KAAA,CAAA;AAChB,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAC7B,EAAA,MAAM,OAAO,aAAc,EAAA,CAAA;AAC3B,EAAA,IAAI,KAAK,OAAS,EAAA;AAChB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACA,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,CAAA,CAAE,mBAAmB,CACnC,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,OAAA;AAAA,MACL,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,iBAAA,CAAA;AAAA,MAC/B,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,CAAA;AAAA,SACf,MAAA;AACL,UAAA,IAAA,CAAK,UAAU,GAAG,CAAA,CAAA;AAAA,SACpB;AAAA,OACF;AAAA,KAAA;AAAA,IAEC,IAAA,CAAK,eAAe,GAAG,CAAA,uCAAK,aAAc,EAAA,IAAA,CAAA,uCAAM,UAAW,EAAA,IAAA,CAAA;AAAA,GAEhE,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"TagFollowButton.esm.js","sources":["../../../src/components/Buttons/TagFollowButton.tsx"],"sourcesContent":["import React from 'react';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport Visibility from '@material-ui/icons/Visibility';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\nimport { useStyles, useTagsFollow, useTranslation } from '../../hooks';\n\nexport const TagFollowButton = (props: { tag: string }) => {\n const { tag } = props;\n const styles = useStyles();\n const { t } = useTranslation();\n const tags = useTagsFollow();\n if (tags.loading) {\n return null;\n }\n return (\n <Tooltip title={t('tagButton.tooltip')}>\n <IconButton\n size=\"small\"\n className={`${styles.marginLeft} qetaFollowTagBtn`}\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":";;;;;;;;;;;;AAMa,MAAA,eAAA,GAAkB,CAAC,KAA2B,KAAA;AACzD,EAAM,MAAA,EAAE,KAAQ,GAAA,KAAA,CAAA;AAChB,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAC7B,EAAA,MAAM,OAAO,aAAc,EAAA,CAAA;AAC3B,EAAA,IAAI,KAAK,OAAS,EAAA;AAChB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACA,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,CAAA,CAAE,mBAAmB,CACnC,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,OAAA;AAAA,MACL,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,iBAAA,CAAA;AAAA,MAC/B,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,CAAA;AAAA,SACf,MAAA;AACL,UAAA,IAAA,CAAK,UAAU,GAAG,CAAA,CAAA;AAAA,SACpB;AAAA,OACF;AAAA,KAAA;AAAA,IAEC,IAAA,CAAK,eAAe,GAAG,CAAA,uCAAK,aAAc,EAAA,IAAA,CAAA,uCAAM,UAAW,EAAA,IAAA,CAAA;AAAA,GAEhE,CAAA,CAAA;AAEJ;;;;"}
@@ -0,0 +1,40 @@
1
+ import React from 'react';
2
+ import { Tooltip, IconButton } from '@material-ui/core';
3
+ import Visibility from '@material-ui/icons/Visibility';
4
+ import VisibilityOff from '@material-ui/icons/VisibilityOff';
5
+ import '@backstage/core-plugin-api';
6
+ import '../../api.esm.js';
7
+ import 'react-use';
8
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
9
+ import { useUserFollow } from '../../hooks/useUserFollow.esm.js';
10
+ import { useStyles } from '../../hooks/useStyles.esm.js';
11
+ import 'react-use/lib/useAsync';
12
+
13
+ const UserFollowButton = (props) => {
14
+ const { userRef } = props;
15
+ const styles = useStyles();
16
+ const { t } = useTranslation();
17
+ const users = useUserFollow();
18
+ if (users.loading) {
19
+ return null;
20
+ }
21
+ return /* @__PURE__ */ React.createElement(Tooltip, { title: t("userButton.tooltip") }, /* @__PURE__ */ React.createElement(
22
+ IconButton,
23
+ {
24
+ size: "small",
25
+ className: `${styles.marginLeft} qetaFollowUserBtn`,
26
+ color: users.isFollowingUser(userRef) ? "secondary" : "primary",
27
+ onClick: () => {
28
+ if (users.isFollowingUser(userRef)) {
29
+ users.unfollowUser(userRef);
30
+ } else {
31
+ users.followUser(userRef);
32
+ }
33
+ }
34
+ },
35
+ users.isFollowingUser(userRef) ? /* @__PURE__ */ React.createElement(VisibilityOff, null) : /* @__PURE__ */ React.createElement(Visibility, null)
36
+ ));
37
+ };
38
+
39
+ export { UserFollowButton };
40
+ //# sourceMappingURL=UserFollowButton.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserFollowButton.esm.js","sources":["../../../src/components/Buttons/UserFollowButton.tsx"],"sourcesContent":["import React from 'react';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport Visibility from '@material-ui/icons/Visibility';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\nimport { useStyles, useTranslation, useUserFollow } from '../../hooks';\n\nexport const UserFollowButton = (props: { userRef: string }) => {\n const { userRef } = props;\n const styles = useStyles();\n const { t } = useTranslation();\n const users = useUserFollow();\n if (users.loading) {\n return null;\n }\n\n return (\n <Tooltip title={t('userButton.tooltip')}>\n <IconButton\n size=\"small\"\n className={`${styles.marginLeft} qetaFollowUserBtn`}\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 >\n {users.isFollowingUser(userRef) ? <VisibilityOff /> : <Visibility />}\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;AAMa,MAAA,gBAAA,GAAmB,CAAC,KAA+B,KAAA;AAC9D,EAAM,MAAA,EAAE,SAAY,GAAA,KAAA,CAAA;AACpB,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAC7B,EAAA,MAAM,QAAQ,aAAc,EAAA,CAAA;AAC5B,EAAA,IAAI,MAAM,OAAS,EAAA;AACjB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,CAAA,CAAE,oBAAoB,CACpC,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,OAAA;AAAA,MACL,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,kBAAA,CAAA;AAAA,MAC/B,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,CAAA;AAAA,SACrB,MAAA;AACL,UAAA,KAAA,CAAM,WAAW,OAAO,CAAA,CAAA;AAAA,SAC1B;AAAA,OACF;AAAA,KAAA;AAAA,IAEC,KAAA,CAAM,gBAAgB,OAAO,CAAA,uCAAK,aAAc,EAAA,IAAA,CAAA,uCAAM,UAAW,EAAA,IAAA,CAAA;AAAA,GAEtE,CAAA,CAAA;AAEJ;;;;"}
@@ -3,7 +3,7 @@ import ArrowDownward from '@material-ui/icons/ArrowDownward';
3
3
  import ArrowUpward from '@material-ui/icons/ArrowUpward';
4
4
  import Check from '@material-ui/icons/Check';
5
5
  import React from 'react';
6
- import { useVoting } from '../../utils/hooks.esm.js';
6
+ import { useVoting } from '../../hooks/useVoting.esm.js';
7
7
 
8
8
  const useStyles = makeStyles(
9
9
  (theme) => createStyles({
@@ -1 +1 @@
1
- {"version":3,"file":"VoteButtons.esm.js","sources":["../../../src/components/Buttons/VoteButtons.tsx"],"sourcesContent":["import {\n AnswerResponse,\n PostResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport {\n Box,\n createStyles,\n IconButton,\n makeStyles,\n Theme,\n Tooltip,\n Typography,\n} from '@material-ui/core';\nimport ArrowDownward from '@material-ui/icons/ArrowDownward';\nimport ArrowUpward from '@material-ui/icons/ArrowUpward';\nimport Check from '@material-ui/icons/Check';\nimport React from 'react';\nimport { useVoting } from '../../utils/hooks';\n\nexport type QetaVoteButtonsClassKey =\n | 'qetaCorrectAnswerSelected'\n | 'qetaCorrectAnswer'\n | 'voteButtonContainer';\n\nconst useStyles = makeStyles(\n (theme: Theme) =>\n createStyles({\n qetaCorrectAnswerSelected: {\n color: theme.palette.success.main,\n },\n qetaCorrectAnswer: {\n color: theme.palette.grey[500],\n },\n voteButtonContainer: {\n borderWidth: '1px',\n borderColor: 'white',\n },\n }),\n { name: 'QetaVoteButtons' },\n);\n\nexport const VoteButtons = (props: {\n entity: PostResponse | AnswerResponse;\n post?: PostResponse;\n}) => {\n const {\n voteUpTooltip,\n ownVote,\n voteUp,\n score,\n voteDownTooltip,\n voteDown,\n correctAnswer,\n correctTooltip,\n toggleCorrectAnswer,\n } = useVoting(props.entity);\n const own = props.entity.own ?? false;\n const classes = useStyles();\n\n return (\n <React.Fragment>\n <Tooltip title={voteUpTooltip}>\n <span className={classes.voteButtonContainer}>\n <IconButton\n aria-label=\"vote up\"\n color={ownVote > 0 ? 'primary' : 'default'}\n className={ownVote > 0 ? 'qetaVoteUpSelected' : 'qetaVoteUp'}\n disabled={own}\n size=\"small\"\n onClick={voteUp}\n >\n <ArrowUpward />\n </IconButton>\n </span>\n </Tooltip>\n <Typography variant=\"h6\">{score}</Typography>\n <Tooltip title={voteDownTooltip}>\n <span>\n <IconButton\n aria-label=\"vote down\"\n color={ownVote < 0 ? 'primary' : 'default'}\n className={ownVote < 0 ? 'qetaVoteDownSelected' : 'qetaVoteDown'}\n disabled={own}\n size=\"small\"\n onClick={voteDown}\n >\n <ArrowDownward />\n </IconButton>\n </span>\n </Tooltip>\n {'correct' in props.entity &&\n (props.post?.own || props.post?.canEdit || correctAnswer) && (\n <Box>\n <Tooltip title={correctTooltip}>\n <span>\n <IconButton\n aria-label=\"mark correct\"\n size=\"small\"\n onClick={\n props.post?.own || props.post?.canEdit\n ? toggleCorrectAnswer\n : undefined\n }\n >\n <Check\n className={\n correctAnswer\n ? classes.qetaCorrectAnswerSelected\n : classes.qetaCorrectAnswer\n }\n />\n </IconButton>\n </span>\n </Tooltip>\n </Box>\n )}\n </React.Fragment>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VoteButtons.esm.js","sources":["../../../src/components/Buttons/VoteButtons.tsx"],"sourcesContent":["import {\n AnswerResponse,\n PostResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport {\n Box,\n createStyles,\n IconButton,\n makeStyles,\n Theme,\n Tooltip,\n Typography,\n} from '@material-ui/core';\nimport ArrowDownward from '@material-ui/icons/ArrowDownward';\nimport ArrowUpward from '@material-ui/icons/ArrowUpward';\nimport Check from '@material-ui/icons/Check';\nimport React from 'react';\nimport { useVoting } from '../../hooks/useVoting';\n\nexport type QetaVoteButtonsClassKey =\n | 'qetaCorrectAnswerSelected'\n | 'qetaCorrectAnswer'\n | 'voteButtonContainer';\n\nconst useStyles = makeStyles(\n (theme: Theme) =>\n createStyles({\n qetaCorrectAnswerSelected: {\n color: theme.palette.success.main,\n },\n qetaCorrectAnswer: {\n color: theme.palette.grey[500],\n },\n voteButtonContainer: {\n borderWidth: '1px',\n borderColor: 'white',\n },\n }),\n { name: 'QetaVoteButtons' },\n);\n\nexport const VoteButtons = (props: {\n entity: PostResponse | AnswerResponse;\n post?: PostResponse;\n}) => {\n const {\n voteUpTooltip,\n ownVote,\n voteUp,\n score,\n voteDownTooltip,\n voteDown,\n correctAnswer,\n correctTooltip,\n toggleCorrectAnswer,\n } = useVoting(props.entity);\n const own = props.entity.own ?? false;\n const classes = useStyles();\n\n return (\n <React.Fragment>\n <Tooltip title={voteUpTooltip}>\n <span className={classes.voteButtonContainer}>\n <IconButton\n aria-label=\"vote up\"\n color={ownVote > 0 ? 'primary' : 'default'}\n className={ownVote > 0 ? 'qetaVoteUpSelected' : 'qetaVoteUp'}\n disabled={own}\n size=\"small\"\n onClick={voteUp}\n >\n <ArrowUpward />\n </IconButton>\n </span>\n </Tooltip>\n <Typography variant=\"h6\">{score}</Typography>\n <Tooltip title={voteDownTooltip}>\n <span>\n <IconButton\n aria-label=\"vote down\"\n color={ownVote < 0 ? 'primary' : 'default'}\n className={ownVote < 0 ? 'qetaVoteDownSelected' : 'qetaVoteDown'}\n disabled={own}\n size=\"small\"\n onClick={voteDown}\n >\n <ArrowDownward />\n </IconButton>\n </span>\n </Tooltip>\n {'correct' in props.entity &&\n (props.post?.own || props.post?.canEdit || correctAnswer) && (\n <Box>\n <Tooltip title={correctTooltip}>\n <span>\n <IconButton\n aria-label=\"mark correct\"\n size=\"small\"\n onClick={\n props.post?.own || props.post?.canEdit\n ? toggleCorrectAnswer\n : undefined\n }\n >\n <Check\n className={\n correctAnswer\n ? classes.qetaCorrectAnswerSelected\n : classes.qetaCorrectAnswer\n }\n />\n </IconButton>\n </span>\n </Tooltip>\n </Box>\n )}\n </React.Fragment>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -5,7 +5,11 @@ import { qetaCreatePostPermission } from '@drodil/backstage-plugin-qeta-common';
5
5
  import { LinkButton } from '@backstage/core-components';
6
6
  import { useRouteRef } from '@backstage/core-plugin-api';
7
7
  import { writeRouteRef } from '../../routes.esm.js';
8
- import { useTranslation, useStyles } from '../../utils/hooks.esm.js';
8
+ import '../../api.esm.js';
9
+ import 'react-use';
10
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
11
+ import { useStyles } from '../../hooks/useStyles.esm.js';
12
+ import 'react-use/lib/useAsync';
9
13
 
10
14
  const WriteArticleButton = (props) => {
11
15
  const { entity, entityPage, tags } = props;
@@ -1 +1 @@
1
- {"version":3,"file":"WriteArticleButton.esm.js","sources":["../../../src/components/Buttons/WriteArticleButton.tsx"],"sourcesContent":["import CreateIcon from '@material-ui/icons/Create';\nimport React from 'react';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\nimport { qetaCreatePostPermission } from '@drodil/backstage-plugin-qeta-common';\nimport { LinkButton } from '@backstage/core-components';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { writeRouteRef } from '../../routes';\nimport { useStyles, useTranslation } from '../../utils/hooks';\n\nexport const WriteArticleButton = (props: {\n entity?: string;\n tags?: string[];\n entityPage?: boolean;\n}) => {\n const { entity, entityPage, tags } = props;\n const writeRoute = useRouteRef(writeRouteRef);\n const { t } = useTranslation();\n const styles = useStyles();\n\n const params = new URLSearchParams();\n if (entity) {\n params.set('entity', entity);\n }\n if (entityPage) {\n params.set('entityPage', 'true');\n }\n if (tags && tags.length > 0) {\n params.set('tags', tags.join(','));\n }\n\n return (\n <RequirePermission permission={qetaCreatePostPermission} errorPage={<></>}>\n <LinkButton\n size=\"small\"\n variant=\"contained\"\n to={\n entity || tags ? `${writeRoute()}?${params.toString()}` : writeRoute()\n }\n color=\"primary\"\n className={`${styles.marginLeft} qetaWriteArticleBtn`}\n startIcon={<CreateIcon />}\n >\n {t('writeArticleButton.title')}\n </LinkButton>\n </RequirePermission>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AASa,MAAA,kBAAA,GAAqB,CAAC,KAI7B,KAAA;AACJ,EAAA,MAAM,EAAE,MAAA,EAAQ,UAAY,EAAA,IAAA,EAAS,GAAA,KAAA,CAAA;AACrC,EAAM,MAAA,UAAA,GAAa,YAAY,aAAa,CAAA,CAAA;AAC5C,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAC7B,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AAEzB,EAAM,MAAA,MAAA,GAAS,IAAI,eAAgB,EAAA,CAAA;AACnC,EAAA,IAAI,MAAQ,EAAA;AACV,IAAO,MAAA,CAAA,GAAA,CAAI,UAAU,MAAM,CAAA,CAAA;AAAA,GAC7B;AACA,EAAA,IAAI,UAAY,EAAA;AACd,IAAO,MAAA,CAAA,GAAA,CAAI,cAAc,MAAM,CAAA,CAAA;AAAA,GACjC;AACA,EAAI,IAAA,IAAA,IAAQ,IAAK,CAAA,MAAA,GAAS,CAAG,EAAA;AAC3B,IAAA,MAAA,CAAO,GAAI,CAAA,MAAA,EAAQ,IAAK,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,GACnC;AAEA,EAAA,2CACG,iBAAkB,EAAA,EAAA,UAAA,EAAY,wBAA0B,EAAA,SAAA,0DAAa,CACpE,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,OAAA;AAAA,MACL,OAAQ,EAAA,WAAA;AAAA,MACR,EAAA,EACE,MAAU,IAAA,IAAA,GAAO,CAAG,EAAA,UAAA,EAAY,CAAA,CAAA,EAAI,MAAO,CAAA,QAAA,EAAU,CAAA,CAAA,GAAK,UAAW,EAAA;AAAA,MAEvE,KAAM,EAAA,SAAA;AAAA,MACN,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,oBAAA,CAAA;AAAA,MAC/B,SAAA,sCAAY,UAAW,EAAA,IAAA,CAAA;AAAA,KAAA;AAAA,IAEtB,EAAE,0BAA0B,CAAA;AAAA,GAEjC,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"WriteArticleButton.esm.js","sources":["../../../src/components/Buttons/WriteArticleButton.tsx"],"sourcesContent":["import CreateIcon from '@material-ui/icons/Create';\nimport React from 'react';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\nimport { qetaCreatePostPermission } from '@drodil/backstage-plugin-qeta-common';\nimport { LinkButton } from '@backstage/core-components';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { writeRouteRef } from '../../routes';\nimport { useStyles, useTranslation } from '../../hooks';\n\nexport const WriteArticleButton = (props: {\n entity?: string;\n tags?: string[];\n entityPage?: boolean;\n}) => {\n const { entity, entityPage, tags } = props;\n const writeRoute = useRouteRef(writeRouteRef);\n const { t } = useTranslation();\n const styles = useStyles();\n\n const params = new URLSearchParams();\n if (entity) {\n params.set('entity', entity);\n }\n if (entityPage) {\n params.set('entityPage', 'true');\n }\n if (tags && tags.length > 0) {\n params.set('tags', tags.join(','));\n }\n\n return (\n <RequirePermission permission={qetaCreatePostPermission} errorPage={<></>}>\n <LinkButton\n size=\"small\"\n variant=\"contained\"\n to={\n entity || tags ? `${writeRoute()}?${params.toString()}` : writeRoute()\n }\n color=\"primary\"\n className={`${styles.marginLeft} qetaWriteArticleBtn`}\n startIcon={<CreateIcon />}\n >\n {t('writeArticleButton.title')}\n </LinkButton>\n </RequirePermission>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;AASa,MAAA,kBAAA,GAAqB,CAAC,KAI7B,KAAA;AACJ,EAAA,MAAM,EAAE,MAAA,EAAQ,UAAY,EAAA,IAAA,EAAS,GAAA,KAAA,CAAA;AACrC,EAAM,MAAA,UAAA,GAAa,YAAY,aAAa,CAAA,CAAA;AAC5C,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAC7B,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AAEzB,EAAM,MAAA,MAAA,GAAS,IAAI,eAAgB,EAAA,CAAA;AACnC,EAAA,IAAI,MAAQ,EAAA;AACV,IAAO,MAAA,CAAA,GAAA,CAAI,UAAU,MAAM,CAAA,CAAA;AAAA,GAC7B;AACA,EAAA,IAAI,UAAY,EAAA;AACd,IAAO,MAAA,CAAA,GAAA,CAAI,cAAc,MAAM,CAAA,CAAA;AAAA,GACjC;AACA,EAAI,IAAA,IAAA,IAAQ,IAAK,CAAA,MAAA,GAAS,CAAG,EAAA;AAC3B,IAAA,MAAA,CAAO,GAAI,CAAA,MAAA,EAAQ,IAAK,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,GACnC;AAEA,EAAA,2CACG,iBAAkB,EAAA,EAAA,UAAA,EAAY,wBAA0B,EAAA,SAAA,0DAAa,CACpE,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,OAAA;AAAA,MACL,OAAQ,EAAA,WAAA;AAAA,MACR,EAAA,EACE,MAAU,IAAA,IAAA,GAAO,CAAG,EAAA,UAAA,EAAY,CAAA,CAAA,EAAI,MAAO,CAAA,QAAA,EAAU,CAAA,CAAA,GAAK,UAAW,EAAA;AAAA,MAEvE,KAAM,EAAA,SAAA;AAAA,MACN,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,oBAAA,CAAA;AAAA,MAC/B,SAAA,sCAAY,UAAW,EAAA,IAAA,CAAA;AAAA,KAAA;AAAA,IAEtB,EAAE,0BAA0B,CAAA;AAAA,GAEjC,CAAA,CAAA;AAEJ;;;;"}
@@ -1,14 +1,18 @@
1
1
  import { InfoCard } from '@backstage/core-components';
2
- import { CardMedia, CardContent, Grid, Typography, Button } from '@material-ui/core';
2
+ import { CardMedia, CardContent, Grid, Button } from '@material-ui/core';
3
3
  import { MarkdownRenderer } from '../MarkdownRenderer/MarkdownRenderer.esm.js';
4
4
  import React from 'react';
5
- import { useStyles, useTranslation } from '../../utils/hooks.esm.js';
6
5
  import { TagsAndEntities } from '../TagsAndEntities/TagsAndEntities.esm.js';
7
6
  import DeleteIcon from '@material-ui/icons/Delete';
8
7
  import { DeleteModal } from '../DeleteModal/DeleteModal.esm.js';
9
8
  import EditIcon from '@material-ui/icons/Edit';
10
9
  import { useRouteRef } from '@backstage/core-plugin-api';
11
10
  import { collectionEditRouteRef } from '../../routes.esm.js';
11
+ import '../../api.esm.js';
12
+ import 'react-use';
13
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
14
+ import { useStyles } from '../../hooks/useStyles.esm.js';
15
+ import 'react-use/lib/useAsync';
12
16
 
13
17
  const CollectionCard = (props) => {
14
18
  const { collection } = props;
@@ -26,7 +30,7 @@ const CollectionCard = (props) => {
26
30
  src: collection.headerImage,
27
31
  alt: collection.title
28
32
  }
29
- ), /* @__PURE__ */ React.createElement(CardContent, null, /* @__PURE__ */ React.createElement(Grid, { container: true }, /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, collection.description && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Typography, { variant: "h5" }, t("collectionPage.description")), /* @__PURE__ */ React.createElement(MarkdownRenderer, { content: collection.description }))), /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(TagsAndEntities, { entity: collection })), /* @__PURE__ */ React.createElement(Grid, { container: true, item: true, xs: 12 }, collection.canDelete && /* @__PURE__ */ React.createElement(Grid, { item: true }, /* @__PURE__ */ React.createElement(
33
+ ), /* @__PURE__ */ React.createElement(CardContent, null, /* @__PURE__ */ React.createElement(Grid, { container: true }, /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, collection.description && /* @__PURE__ */ React.createElement(MarkdownRenderer, { content: collection.description })), /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(TagsAndEntities, { entity: collection })), /* @__PURE__ */ React.createElement(Grid, { container: true, item: true, xs: 12 }, collection.canDelete && /* @__PURE__ */ React.createElement(Grid, { item: true }, /* @__PURE__ */ React.createElement(
30
34
  Button,
31
35
  {
32
36
  variant: "outlined",