@drodil/backstage-plugin-qeta-react 3.12.3 → 3.12.5

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 (156) hide show
  1. package/dist/api.esm.js.map +1 -1
  2. package/dist/components/AIAnswerCard/AIAnswerCard.esm.js +2 -2
  3. package/dist/components/AIAnswerCard/AIAnswerCard.esm.js.map +1 -1
  4. package/dist/components/AnswerCard/AnswerCard.esm.js +1 -1
  5. package/dist/components/AnswerCard/AnswerCard.esm.js.map +1 -1
  6. package/dist/components/AnswerForm/AnswerForm.esm.js.map +1 -1
  7. package/dist/components/AnswersContainer/AnswerList.esm.js +2 -2
  8. package/dist/components/AnswersContainer/AnswerList.esm.js.map +1 -1
  9. package/dist/components/AnswersContainer/AnswerListItem.esm.js.map +1 -1
  10. package/dist/components/AnswersContainer/AnswersContainer.esm.js +1 -1
  11. package/dist/components/AnswersContainer/AnswersContainer.esm.js.map +1 -1
  12. package/dist/components/ArticleContent/ArticleButtons.esm.js +6 -4
  13. package/dist/components/ArticleContent/ArticleButtons.esm.js.map +1 -1
  14. package/dist/components/ArticleContent/ArticleContent.esm.js +12 -10
  15. package/dist/components/ArticleContent/ArticleContent.esm.js.map +1 -1
  16. package/dist/components/AuthorBox/AuthorBox.esm.js +3 -3
  17. package/dist/components/AuthorBox/AuthorBox.esm.js.map +1 -1
  18. package/dist/components/Buttons/AddToCollectionButton.esm.js.map +1 -1
  19. package/dist/components/Buttons/AskQuestionButton.esm.js.map +1 -1
  20. package/dist/components/Buttons/CollectionFollowButton.esm.js.map +1 -1
  21. package/dist/components/Buttons/CreateCollectionButton.esm.js.map +1 -1
  22. package/dist/components/Buttons/EntityFollowButton.esm.js.map +1 -1
  23. package/dist/components/Buttons/FavoriteButton.esm.js.map +1 -1
  24. package/dist/components/Buttons/LinkButton.esm.js.map +1 -1
  25. package/dist/components/Buttons/TagFollowButton.esm.js.map +1 -1
  26. package/dist/components/Buttons/UserFollowButton.esm.js.map +1 -1
  27. package/dist/components/Buttons/VoteButtons.esm.js.map +1 -1
  28. package/dist/components/Buttons/WriteArticleButton.esm.js.map +1 -1
  29. package/dist/components/CollectionCard/CollectionCard.esm.js.map +1 -1
  30. package/dist/components/CollectionForm/CollectionForm.esm.js +1 -1
  31. package/dist/components/CollectionForm/CollectionForm.esm.js.map +1 -1
  32. package/dist/components/CollectionsGrid/CollectionsGrid.esm.js.map +1 -1
  33. package/dist/components/CollectionsGrid/CollectionsGridContent.esm.js +1 -1
  34. package/dist/components/CollectionsGrid/CollectionsGridContent.esm.js.map +1 -1
  35. package/dist/components/CollectionsGrid/CollectionsGridItem.esm.js +1 -1
  36. package/dist/components/CollectionsGrid/CollectionsGridItem.esm.js.map +1 -1
  37. package/dist/components/CollectionsGrid/NoCollectionsCard.esm.js +1 -1
  38. package/dist/components/CollectionsGrid/NoCollectionsCard.esm.js.map +1 -1
  39. package/dist/components/CommentSection/CommentList.esm.js +2 -2
  40. package/dist/components/CommentSection/CommentList.esm.js.map +1 -1
  41. package/dist/components/CommentSection/CommentSection.esm.js.map +1 -1
  42. package/dist/components/DeleteModal/DeleteModal.esm.js.map +1 -1
  43. package/dist/components/EntitiesGrid/EntitiesGrid.esm.js.map +1 -1
  44. package/dist/components/EntitiesGrid/EntitiesGridContent.esm.js.map +1 -1
  45. package/dist/components/EntitiesGrid/EntitiesGridItem.esm.js.map +1 -1
  46. package/dist/components/EntitiesGrid/NoEntitiesCard.esm.js +1 -1
  47. package/dist/components/EntitiesGrid/NoEntitiesCard.esm.js.map +1 -1
  48. package/dist/components/FilterPanel/DateRangeFilter.esm.js.map +1 -1
  49. package/dist/components/FilterPanel/FilterPanel.esm.js +1 -1
  50. package/dist/components/FilterPanel/FilterPanel.esm.js.map +1 -1
  51. package/dist/components/FollowedLists/FollowedCollectionsList.esm.js.map +1 -1
  52. package/dist/components/FollowedLists/FollowedEntitiesList.esm.js.map +1 -1
  53. package/dist/components/FollowedLists/FollowedTagsList.esm.js.map +1 -1
  54. package/dist/components/FollowedLists/FollowedUsersList.esm.js.map +1 -1
  55. package/dist/components/HeaderImageInput/HeaderImageInput.esm.js +10 -8
  56. package/dist/components/HeaderImageInput/HeaderImageInput.esm.js.map +1 -1
  57. package/dist/components/HomePageCards/ImpactCard.esm.js +1 -1
  58. package/dist/components/HomePageCards/ImpactCard.esm.js.map +1 -1
  59. package/dist/components/HomePageCards/PostsCard.esm.js.map +1 -1
  60. package/dist/components/LeftMenu/LeftMenu.esm.js +17 -19
  61. package/dist/components/LeftMenu/LeftMenu.esm.js.map +1 -1
  62. package/dist/components/LeftMenu/LeftMenuButton.esm.js +1 -1
  63. package/dist/components/LeftMenu/LeftMenuButton.esm.js.map +1 -1
  64. package/dist/components/Links/Links.esm.js.map +1 -1
  65. package/dist/components/LoadingGrid/LoadingGrid.esm.js.map +1 -1
  66. package/dist/components/MarkdownEditor/MarkdownEditor.esm.js +4 -2
  67. package/dist/components/MarkdownEditor/MarkdownEditor.esm.js.map +1 -1
  68. package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js +11 -9
  69. package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js.map +1 -1
  70. package/dist/components/PostAnonymouslyCheckbox/PostAnonymouslyCheckbox.esm.js +1 -1
  71. package/dist/components/PostAnonymouslyCheckbox/PostAnonymouslyCheckbox.esm.js.map +1 -1
  72. package/dist/components/PostForm/EntitiesInput.esm.js.map +1 -1
  73. package/dist/components/PostForm/PostForm.esm.js.map +1 -1
  74. package/dist/components/PostForm/TagInput.esm.js.map +1 -1
  75. package/dist/components/PostHighlightList/PostHighlightList.esm.js.map +1 -1
  76. package/dist/components/PostsContainer/NoPostsCard.esm.js +1 -1
  77. package/dist/components/PostsContainer/NoPostsCard.esm.js.map +1 -1
  78. package/dist/components/PostsContainer/PostList.esm.js +2 -2
  79. package/dist/components/PostsContainer/PostList.esm.js.map +1 -1
  80. package/dist/components/PostsContainer/PostListItem.esm.js +87 -80
  81. package/dist/components/PostsContainer/PostListItem.esm.js.map +1 -1
  82. package/dist/components/PostsContainer/PostsContainer.esm.js +1 -1
  83. package/dist/components/PostsContainer/PostsContainer.esm.js.map +1 -1
  84. package/dist/components/PostsGrid/PostsGrid.esm.js +1 -1
  85. package/dist/components/PostsGrid/PostsGrid.esm.js.map +1 -1
  86. package/dist/components/PostsGrid/PostsGridContent.esm.js +1 -1
  87. package/dist/components/PostsGrid/PostsGridContent.esm.js.map +1 -1
  88. package/dist/components/PostsGrid/PostsGridItem.esm.js +8 -8
  89. package/dist/components/PostsGrid/PostsGridItem.esm.js.map +1 -1
  90. package/dist/components/QetaPagination/QetaPagination.esm.js.map +1 -1
  91. package/dist/components/QuestionCard/QuestionCard.esm.js +1 -1
  92. package/dist/components/QuestionCard/QuestionCard.esm.js.map +1 -1
  93. package/dist/components/QuestionsTable/QuestionTableRow.esm.js.map +1 -1
  94. package/dist/components/QuestionsTable/QuestionsTable.esm.js.map +1 -1
  95. package/dist/components/RelativeTimeWithTooltip/RelativeTimeWithTooltip.esm.js.map +1 -1
  96. package/dist/components/SearchBar/SearchBar.esm.js +1 -1
  97. package/dist/components/SearchBar/SearchBar.esm.js.map +1 -1
  98. package/dist/components/SelectTemplateList/SelectTemplateList.esm.js.map +1 -1
  99. package/dist/components/StatsChart/StatsChart.esm.js.map +1 -1
  100. package/dist/components/StatsChart/util.esm.js.map +1 -1
  101. package/dist/components/Styled/CardActionContainer.esm.js +3 -1
  102. package/dist/components/Styled/CardActionContainer.esm.js.map +1 -1
  103. package/dist/components/Styled/ModalContent.esm.js +17 -15
  104. package/dist/components/Styled/ModalContent.esm.js.map +1 -1
  105. package/dist/components/Styled/RightList.esm.js.map +1 -1
  106. package/dist/components/Styled/VoteButtonContainer.esm.js +3 -1
  107. package/dist/components/Styled/VoteButtonContainer.esm.js.map +1 -1
  108. package/dist/components/SuggestionsCard/SuggestionsCard.esm.js.map +1 -1
  109. package/dist/components/SummaryStatsGrid/SummaryStatsGrid.esm.js +1 -1
  110. package/dist/components/SummaryStatsGrid/SummaryStatsGrid.esm.js.map +1 -1
  111. package/dist/components/TagsAndEntities/CollectionChip.esm.js +1 -1
  112. package/dist/components/TagsAndEntities/CollectionChip.esm.js.map +1 -1
  113. package/dist/components/TagsAndEntities/EntityChip.esm.js +1 -1
  114. package/dist/components/TagsAndEntities/EntityChip.esm.js.map +1 -1
  115. package/dist/components/TagsAndEntities/TagChip.esm.js +1 -1
  116. package/dist/components/TagsAndEntities/TagChip.esm.js.map +1 -1
  117. package/dist/components/TagsAndEntities/TagsAndEntities.esm.js.map +1 -1
  118. package/dist/components/TagsAndEntities/UserChip.esm.js +1 -1
  119. package/dist/components/TagsAndEntities/UserChip.esm.js.map +1 -1
  120. package/dist/components/TagsGrid/EditTagModal.esm.js.map +1 -1
  121. package/dist/components/TagsGrid/NoTagsCard.esm.js +1 -1
  122. package/dist/components/TagsGrid/NoTagsCard.esm.js.map +1 -1
  123. package/dist/components/TagsGrid/TagGridItem.esm.js.map +1 -1
  124. package/dist/components/TagsGrid/TagsGrid.esm.js.map +1 -1
  125. package/dist/components/TagsGrid/TagsGridContent.esm.js.map +1 -1
  126. package/dist/components/TemplateList/TemplateForm.esm.js.map +1 -1
  127. package/dist/components/TemplateList/TemplateList.esm.js +1 -1
  128. package/dist/components/TemplateList/TemplateList.esm.js.map +1 -1
  129. package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js +4 -7
  130. package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js.map +1 -1
  131. package/dist/components/TopRankingUsersCard/TrophyIcon.esm.js.map +1 -1
  132. package/dist/components/UsersGrid/NoUsersCard.esm.js +1 -1
  133. package/dist/components/UsersGrid/NoUsersCard.esm.js.map +1 -1
  134. package/dist/components/UsersGrid/UsersGrid.esm.js.map +1 -1
  135. package/dist/components/UsersGrid/UsersGridContent.esm.js.map +1 -1
  136. package/dist/components/UsersGrid/UsersGridItem.esm.js.map +1 -1
  137. package/dist/hooks/useAI.esm.js.map +1 -1
  138. package/dist/hooks/useBasePath.esm.js.map +1 -1
  139. package/dist/hooks/useBaseUrl.esm.js.map +1 -1
  140. package/dist/hooks/useCollectionsFollow.esm.js.map +1 -1
  141. package/dist/hooks/useEntityAuthor.esm.js.map +1 -1
  142. package/dist/hooks/useEntityFollow.esm.js.map +1 -1
  143. package/dist/hooks/useEntityQueryParameter.esm.js.map +1 -1
  144. package/dist/hooks/useIdentityApi.esm.js.map +1 -1
  145. package/dist/hooks/useIsDarkTheme.esm.js.map +1 -1
  146. package/dist/hooks/useIsModerator.esm.js.map +1 -1
  147. package/dist/hooks/usePaginatedPosts.esm.js.map +1 -1
  148. package/dist/hooks/useQetaApi.esm.js.map +1 -1
  149. package/dist/hooks/useTagsFollow.esm.js.map +1 -1
  150. package/dist/hooks/useTranslation.esm.js.map +1 -1
  151. package/dist/hooks/useUserFollow.esm.js.map +1 -1
  152. package/dist/hooks/useVoting.esm.js.map +1 -1
  153. package/dist/routes.esm.js.map +1 -1
  154. package/dist/translation.esm.js.map +1 -1
  155. package/dist/utils/utils.esm.js.map +1 -1
  156. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"UsersGridItem.esm.js","sources":["../../../src/components/UsersGrid/UsersGridItem.tsx"],"sourcesContent":["import { UserResponse } from '@drodil/backstage-plugin-qeta-common';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport CardActionArea from '@mui/material/CardActionArea';\nimport CardHeader from '@mui/material/CardHeader';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\nimport Avatar from '@mui/material/Avatar';\nimport Grid from '@mui/material/Grid';\nimport Button from '@mui/material/Button';\nimport CardActions from '@mui/material/CardActions';\nimport React from 'react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { useNavigate } from 'react-router-dom';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { userRouteRef } from '../../routes';\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { useIdentityApi, useTranslation, useUserFollow } from '../../hooks';\nimport { useEntityAuthor } from '../../hooks/useEntityAuthor';\n\nexport const UsersGridItem = (props: { user: UserResponse }) => {\n const { user } = props;\n const userRoute = useRouteRef(userRouteRef);\n const navigate = useNavigate();\n const { t } = useTranslation();\n const compound = parseEntityRef(user.userRef);\n const { primaryTitle, Icon } = useEntityPresentation(compound);\n const { name, initials, user: userEntity } = useEntityAuthor(user);\n const users = useUserFollow();\n const {\n value: currentUser,\n loading: loadingUser,\n error: userError,\n } = useIdentityApi(api => api.getBackstageIdentity(), []);\n\n return (\n <Grid item xs={4}>\n <Card\n variant=\"outlined\"\n style={{ height: '100%', display: 'flex', flexDirection: 'column' }}\n >\n <CardActionArea\n onClick={() => navigate(`${userRoute()}/${user.userRef}`)}\n >\n <CardHeader\n title={primaryTitle}\n avatar={\n Icon ? (\n <Avatar\n src={userEntity?.spec?.profile?.picture}\n className=\"avatar\"\n alt={name}\n variant=\"rounded\"\n >\n {initials}\n </Avatar>\n ) : null\n }\n />\n <CardContent>\n <Typography variant=\"caption\">\n {t('common.posts', {\n count: user.totalQuestions,\n itemType: 'question',\n })}\n {' · '}\n {t('common.answers', {\n count: user.totalAnswers,\n })}\n {' · '}\n {t('common.posts', {\n count: user.totalArticles,\n itemType: 'article',\n })}\n {' · '}\n {t('common.posts', {\n count: user.totalComments,\n itemType: 'comment',\n })}\n {' · '}\n {t('common.votes', {\n count: user.totalVotes,\n })}\n {' · '}\n {t('common.viewsShort', {\n count: user.totalViews,\n })}\n </Typography>\n </CardContent>\n </CardActionArea>\n {!loadingUser &&\n !userError &&\n currentUser?.userEntityRef !== user.userRef && (\n <CardActions style={{ marginTop: 'auto' }}>\n <Grid container justifyContent=\"center\">\n <Grid item>\n <Tooltip title={t('userButton.tooltip')}>\n <Button\n size=\"small\"\n variant=\"outlined\"\n color={\n users.isFollowingUser(user.userRef)\n ? 'secondary'\n : 'primary'\n }\n onClick={() => {\n if (users.isFollowingUser(user.userRef)) {\n users.unfollowUser(user.userRef);\n } else {\n users.followUser(user.userRef);\n }\n }}\n >\n {users.isFollowingUser(user.userRef)\n ? t('userButton.unfollow')\n : t('userButton.follow')}\n </Button>\n </Tooltip>\n </Grid>\n </Grid>\n </CardActions>\n )}\n </Card>\n </Grid>\n );\n};\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"UsersGridItem.esm.js","sources":["../../../src/components/UsersGrid/UsersGridItem.tsx"],"sourcesContent":["import { UserResponse } from '@drodil/backstage-plugin-qeta-common';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport CardActionArea from '@mui/material/CardActionArea';\nimport CardHeader from '@mui/material/CardHeader';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\nimport Avatar from '@mui/material/Avatar';\nimport Grid from '@mui/material/Grid';\nimport Button from '@mui/material/Button';\nimport CardActions from '@mui/material/CardActions';\nimport React from 'react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { useNavigate } from 'react-router-dom';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { userRouteRef } from '../../routes';\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { useIdentityApi, useTranslation, useUserFollow } from '../../hooks';\nimport { useEntityAuthor } from '../../hooks/useEntityAuthor';\n\nexport const UsersGridItem = (props: { user: UserResponse }) => {\n const { user } = props;\n const userRoute = useRouteRef(userRouteRef);\n const navigate = useNavigate();\n const { t } = useTranslation();\n const compound = parseEntityRef(user.userRef);\n const { primaryTitle, Icon } = useEntityPresentation(compound);\n const { name, initials, user: userEntity } = useEntityAuthor(user);\n const users = useUserFollow();\n const {\n value: currentUser,\n loading: loadingUser,\n error: userError,\n } = useIdentityApi(api => api.getBackstageIdentity(), []);\n\n return (\n <Grid item xs={4}>\n <Card\n variant=\"outlined\"\n style={{ height: '100%', display: 'flex', flexDirection: 'column' }}\n >\n <CardActionArea\n onClick={() => navigate(`${userRoute()}/${user.userRef}`)}\n >\n <CardHeader\n title={primaryTitle}\n avatar={\n Icon ? (\n <Avatar\n src={userEntity?.spec?.profile?.picture}\n className=\"avatar\"\n alt={name}\n variant=\"rounded\"\n >\n {initials}\n </Avatar>\n ) : null\n }\n />\n <CardContent>\n <Typography variant=\"caption\">\n {t('common.posts', {\n count: user.totalQuestions,\n itemType: 'question',\n })}\n {' · '}\n {t('common.answers', {\n count: user.totalAnswers,\n })}\n {' · '}\n {t('common.posts', {\n count: user.totalArticles,\n itemType: 'article',\n })}\n {' · '}\n {t('common.posts', {\n count: user.totalComments,\n itemType: 'comment',\n })}\n {' · '}\n {t('common.votes', {\n count: user.totalVotes,\n })}\n {' · '}\n {t('common.viewsShort', {\n count: user.totalViews,\n })}\n </Typography>\n </CardContent>\n </CardActionArea>\n {!loadingUser &&\n !userError &&\n currentUser?.userEntityRef !== user.userRef && (\n <CardActions style={{ marginTop: 'auto' }}>\n <Grid container justifyContent=\"center\">\n <Grid item>\n <Tooltip title={t('userButton.tooltip')}>\n <Button\n size=\"small\"\n variant=\"outlined\"\n color={\n users.isFollowingUser(user.userRef)\n ? 'secondary'\n : 'primary'\n }\n onClick={() => {\n if (users.isFollowingUser(user.userRef)) {\n users.unfollowUser(user.userRef);\n } else {\n users.followUser(user.userRef);\n }\n }}\n >\n {users.isFollowingUser(user.userRef)\n ? t('userButton.unfollow')\n : t('userButton.follow')}\n </Button>\n </Tooltip>\n </Grid>\n </Grid>\n </CardActions>\n )}\n </Card>\n </Grid>\n );\n};\n"],"names":["React"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useAI.esm.js","sources":["../../src/hooks/useAI.ts"],"sourcesContent":["import { useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../api';\nimport React, { useCallback, useEffect } from 'react';\nimport {\n AIQuery,\n AIStatusResponse,\n} from '@drodil/backstage-plugin-qeta-common';\n\nlet cache: AIStatusResponse | undefined = undefined;\n\nexport const useAI = () => {\n const qetaApi = useApi(qetaApiRef);\n const [isAIEnabled, setIsAIEnabled] = React.useState<boolean>(\n cache?.enabled ?? false,\n );\n const [isExistingQuestionsEnabled, setIsExistingQuestionsEnabled] =\n React.useState<boolean>(cache?.existingQuestions ?? false);\n const [isNewQuestionsEnabled, setIsNewQuestionsEnabled] =\n React.useState<boolean>(cache?.newQuestions ?? false);\n const [isArticleSummaryEnabled, setIsArticleSummaryEnabled] =\n React.useState<boolean>(cache?.articleSummaries ?? false);\n\n useEffect(() => {\n if (cache?.enabled !== undefined) {\n return;\n }\n qetaApi.isAIEnabled().then(resp => {\n setIsAIEnabled(resp.enabled);\n setIsExistingQuestionsEnabled(resp.existingQuestions);\n setIsNewQuestionsEnabled(resp.newQuestions);\n setIsArticleSummaryEnabled(resp.articleSummaries);\n cache = resp;\n });\n }, [qetaApi]);\n\n const answerExistingQuestion = useCallback(\n async (questionId: number, options?: AIQuery) => {\n if (!isExistingQuestionsEnabled) {\n return null;\n }\n const ret = await qetaApi.getAIAnswerForQuestion(questionId, options);\n if (ret === null) {\n if (cache) {\n cache.existingQuestions = false;\n }\n setIsExistingQuestionsEnabled(false);\n }\n return ret;\n },\n [isExistingQuestionsEnabled, qetaApi],\n );\n\n const answerDraftQuestion = useCallback(\n async (draft: { title: string; content: string }) => {\n if (!isNewQuestionsEnabled) {\n return null;\n }\n const ret = await qetaApi.getAIAnswerForDraft(draft.title, draft.content);\n if (ret === null) {\n if (cache) {\n cache.newQuestions = false;\n }\n setIsNewQuestionsEnabled(false);\n }\n return ret;\n },\n [isNewQuestionsEnabled, qetaApi],\n );\n\n const summarizeArticle = useCallback(\n async (articleId: number, options?: AIQuery) => {\n if (!isArticleSummaryEnabled) {\n return null;\n }\n const ret = await qetaApi.getAISummaryForArticle(articleId, options);\n if (ret === null) {\n if (cache) {\n cache.articleSummaries = false;\n }\n setIsArticleSummaryEnabled(false);\n }\n return ret;\n },\n [isArticleSummaryEnabled, qetaApi],\n );\n\n return {\n isAIEnabled,\n isArticleSummaryEnabled,\n isExistingQuestionsEnabled,\n isNewQuestionsEnabled,\n answerExistingQuestion,\n answerDraftQuestion,\n summarizeArticle,\n };\n};\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"useAI.esm.js","sources":["../../src/hooks/useAI.ts"],"sourcesContent":["import { useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../api';\nimport React, { useCallback, useEffect } from 'react';\nimport {\n AIQuery,\n AIStatusResponse,\n} from '@drodil/backstage-plugin-qeta-common';\n\nlet cache: AIStatusResponse | undefined = undefined;\n\nexport const useAI = () => {\n const qetaApi = useApi(qetaApiRef);\n const [isAIEnabled, setIsAIEnabled] = React.useState<boolean>(\n cache?.enabled ?? false,\n );\n const [isExistingQuestionsEnabled, setIsExistingQuestionsEnabled] =\n React.useState<boolean>(cache?.existingQuestions ?? false);\n const [isNewQuestionsEnabled, setIsNewQuestionsEnabled] =\n React.useState<boolean>(cache?.newQuestions ?? false);\n const [isArticleSummaryEnabled, setIsArticleSummaryEnabled] =\n React.useState<boolean>(cache?.articleSummaries ?? false);\n\n useEffect(() => {\n if (cache?.enabled !== undefined) {\n return;\n }\n qetaApi.isAIEnabled().then(resp => {\n setIsAIEnabled(resp.enabled);\n setIsExistingQuestionsEnabled(resp.existingQuestions);\n setIsNewQuestionsEnabled(resp.newQuestions);\n setIsArticleSummaryEnabled(resp.articleSummaries);\n cache = resp;\n });\n }, [qetaApi]);\n\n const answerExistingQuestion = useCallback(\n async (questionId: number, options?: AIQuery) => {\n if (!isExistingQuestionsEnabled) {\n return null;\n }\n const ret = await qetaApi.getAIAnswerForQuestion(questionId, options);\n if (ret === null) {\n if (cache) {\n cache.existingQuestions = false;\n }\n setIsExistingQuestionsEnabled(false);\n }\n return ret;\n },\n [isExistingQuestionsEnabled, qetaApi],\n );\n\n const answerDraftQuestion = useCallback(\n async (draft: { title: string; content: string }) => {\n if (!isNewQuestionsEnabled) {\n return null;\n }\n const ret = await qetaApi.getAIAnswerForDraft(draft.title, draft.content);\n if (ret === null) {\n if (cache) {\n cache.newQuestions = false;\n }\n setIsNewQuestionsEnabled(false);\n }\n return ret;\n },\n [isNewQuestionsEnabled, qetaApi],\n );\n\n const summarizeArticle = useCallback(\n async (articleId: number, options?: AIQuery) => {\n if (!isArticleSummaryEnabled) {\n return null;\n }\n const ret = await qetaApi.getAISummaryForArticle(articleId, options);\n if (ret === null) {\n if (cache) {\n cache.articleSummaries = false;\n }\n setIsArticleSummaryEnabled(false);\n }\n return ret;\n },\n [isArticleSummaryEnabled, qetaApi],\n );\n\n return {\n isAIEnabled,\n isArticleSummaryEnabled,\n isExistingQuestionsEnabled,\n isNewQuestionsEnabled,\n answerExistingQuestion,\n answerDraftQuestion,\n summarizeArticle,\n };\n};\n"],"names":["React"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useBasePath.esm.js","sources":["../../src/hooks/useBasePath.ts"],"sourcesContent":["import { trimEnd } from 'lodash';\nimport { useBaseUrl } from './useBaseUrl';\n\nexport const useBasePath = () => {\n // baseUrl can be specified as just a path\n const base = 'http://sample.dev';\n const url = useBaseUrl() ?? '/';\n const { pathname } = new URL(url, base);\n return trimEnd(pathname, '/');\n};\n"],"names":[],"mappings":";;;AAGO,MAAM,cAAc,MAAM;AAE/B,EAAA,MAAM,IAAO,GAAA,mBAAA,CAAA;AACb,EAAM,MAAA,GAAA,GAAM,YAAgB,IAAA,GAAA,CAAA;AAC5B,EAAA,MAAM,EAAE,QAAS,EAAA,GAAI,IAAI,GAAA,CAAI,KAAK,IAAI,CAAA,CAAA;AACtC,EAAO,OAAA,OAAA,CAAQ,UAAU,GAAG,CAAA,CAAA;AAC9B;;;;"}
1
+ {"version":3,"file":"useBasePath.esm.js","sources":["../../src/hooks/useBasePath.ts"],"sourcesContent":["import { trimEnd } from 'lodash';\nimport { useBaseUrl } from './useBaseUrl';\n\nexport const useBasePath = () => {\n // baseUrl can be specified as just a path\n const base = 'http://sample.dev';\n const url = useBaseUrl() ?? '/';\n const { pathname } = new URL(url, base);\n return trimEnd(pathname, '/');\n};\n"],"names":[],"mappings":";;;AAGO,MAAM,cAAc,MAAM;AAE/B,EAAA,MAAM,IAAO,GAAA,mBAAA;AACb,EAAM,MAAA,GAAA,GAAM,YAAgB,IAAA,GAAA;AAC5B,EAAA,MAAM,EAAE,QAAS,EAAA,GAAI,IAAI,GAAA,CAAI,KAAK,IAAI,CAAA;AACtC,EAAO,OAAA,OAAA,CAAQ,UAAU,GAAG,CAAA;AAC9B;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useBaseUrl.esm.js","sources":["../../src/hooks/useBaseUrl.ts"],"sourcesContent":["// Url resolving logic from https://github.com/backstage/backstage/blob/master/packages/core-components/src/components/Link/Link.tsx\n\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\n\n/**\n * Returns the app base url that could be empty if the Config API is not properly implemented.\n * The only cases there would be no Config API are in tests and in storybook stories, and in those cases, it's unlikely that callers would rely on this subpath behavior.\n */\nexport const useBaseUrl = () => {\n try {\n const config = useApi(configApiRef);\n return config.getOptionalString('app.baseUrl');\n } catch {\n return undefined;\n }\n};\n"],"names":[],"mappings":";;AAQO,MAAM,aAAa,MAAM;AAC9B,EAAI,IAAA;AACF,IAAM,MAAA,MAAA,GAAS,OAAO,YAAY,CAAA,CAAA;AAClC,IAAO,OAAA,MAAA,CAAO,kBAAkB,aAAa,CAAA,CAAA;AAAA,GACvC,CAAA,MAAA;AACN,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACT;AACF;;;;"}
1
+ {"version":3,"file":"useBaseUrl.esm.js","sources":["../../src/hooks/useBaseUrl.ts"],"sourcesContent":["// Url resolving logic from https://github.com/backstage/backstage/blob/master/packages/core-components/src/components/Link/Link.tsx\n\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\n\n/**\n * Returns the app base url that could be empty if the Config API is not properly implemented.\n * The only cases there would be no Config API are in tests and in storybook stories, and in those cases, it's unlikely that callers would rely on this subpath behavior.\n */\nexport const useBaseUrl = () => {\n try {\n const config = useApi(configApiRef);\n return config.getOptionalString('app.baseUrl');\n } catch {\n return undefined;\n }\n};\n"],"names":[],"mappings":";;AAQO,MAAM,aAAa,MAAM;AAC9B,EAAI,IAAA;AACF,IAAM,MAAA,MAAA,GAAS,OAAO,YAAY,CAAA;AAClC,IAAO,OAAA,MAAA,CAAO,kBAAkB,aAAa,CAAA;AAAA,GACvC,CAAA,MAAA;AACN,IAAO,OAAA,KAAA,CAAA;AAAA;AAEX;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useCollectionsFollow.esm.js","sources":["../../src/hooks/useCollectionsFollow.ts"],"sourcesContent":["import React, { useCallback, useEffect } from 'react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../api';\nimport { Collection } from '@drodil/backstage-plugin-qeta-common';\n\nlet followedCollections: Collection[] | undefined = undefined;\n\nexport const useCollectionsFollow = () => {\n const [collections, setCollections] = React.useState<Collection[]>(\n followedCollections ?? [],\n );\n const [loading, setLoading] = React.useState(\n followedCollections === undefined,\n );\n const qetaApi = useApi(qetaApiRef);\n\n useEffect(() => {\n if (followedCollections === undefined) {\n qetaApi.getFollowedCollections().then(res => {\n followedCollections = res.collections;\n setCollections(followedCollections);\n setLoading(false);\n });\n } else {\n setCollections(followedCollections);\n }\n }, [qetaApi]);\n\n const followCollection = useCallback(\n (collection: Collection) => {\n qetaApi.followCollection(collection.id).then(() => {\n setCollections(prev => [...prev, collection]);\n followedCollections?.push(collection);\n });\n },\n [qetaApi],\n );\n\n const unfollowCollection = useCallback(\n (collection: Collection) => {\n qetaApi.unfollowCollection(collection.id).then(() => {\n setCollections(prev => prev.filter(t => t.id !== collection.id));\n followedCollections = followedCollections?.filter(\n t => t.id !== collection.id,\n );\n });\n },\n [qetaApi],\n );\n\n const isFollowingCollection = useCallback(\n (collection: Collection) =>\n Boolean(collections.find(t => t.id === collection.id)),\n [collections],\n );\n return {\n collections,\n followCollection,\n unfollowCollection,\n isFollowingCollection,\n loading,\n };\n};\n"],"names":["React"],"mappings":";;;;AAKA,IAAI,mBAAgD,GAAA,KAAA,CAAA,CAAA;AAE7C,MAAM,uBAAuB,MAAM;AACxC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,cAAM,CAAA,QAAA;AAAA,IAC1C,uBAAuB,EAAC;AAAA,GAC1B,CAAA;AACA,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,cAAM,CAAA,QAAA;AAAA,IAClC,mBAAwB,KAAA,KAAA,CAAA;AAAA,GAC1B,CAAA;AACA,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA,CAAA;AAEjC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,wBAAwB,KAAW,CAAA,EAAA;AACrC,MAAQ,OAAA,CAAA,sBAAA,EAAyB,CAAA,IAAA,CAAK,CAAO,GAAA,KAAA;AAC3C,QAAA,mBAAA,GAAsB,GAAI,CAAA,WAAA,CAAA;AAC1B,QAAA,cAAA,CAAe,mBAAmB,CAAA,CAAA;AAClC,QAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAAA,OACjB,CAAA,CAAA;AAAA,KACI,MAAA;AACL,MAAA,cAAA,CAAe,mBAAmB,CAAA,CAAA;AAAA,KACpC;AAAA,GACF,EAAG,CAAC,OAAO,CAAC,CAAA,CAAA;AAEZ,EAAA,MAAM,gBAAmB,GAAA,WAAA;AAAA,IACvB,CAAC,UAA2B,KAAA;AAC1B,MAAA,OAAA,CAAQ,gBAAiB,CAAA,UAAA,CAAW,EAAE,CAAA,CAAE,KAAK,MAAM;AACjD,QAAA,cAAA,CAAe,CAAQ,IAAA,KAAA,CAAC,GAAG,IAAA,EAAM,UAAU,CAAC,CAAA,CAAA;AAC5C,QAAA,mBAAA,EAAqB,KAAK,UAAU,CAAA,CAAA;AAAA,OACrC,CAAA,CAAA;AAAA,KACH;AAAA,IACA,CAAC,OAAO,CAAA;AAAA,GACV,CAAA;AAEA,EAAA,MAAM,kBAAqB,GAAA,WAAA;AAAA,IACzB,CAAC,UAA2B,KAAA;AAC1B,MAAA,OAAA,CAAQ,kBAAmB,CAAA,UAAA,CAAW,EAAE,CAAA,CAAE,KAAK,MAAM;AACnD,QAAe,cAAA,CAAA,CAAA,IAAA,KAAQ,KAAK,MAAO,CAAA,CAAA,CAAA,KAAK,EAAE,EAAO,KAAA,UAAA,CAAW,EAAE,CAAC,CAAA,CAAA;AAC/D,QAAA,mBAAA,GAAsB,mBAAqB,EAAA,MAAA;AAAA,UACzC,CAAA,CAAA,KAAK,CAAE,CAAA,EAAA,KAAO,UAAW,CAAA,EAAA;AAAA,SAC3B,CAAA;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AAAA,IACA,CAAC,OAAO,CAAA;AAAA,GACV,CAAA;AAEA,EAAA,MAAM,qBAAwB,GAAA,WAAA;AAAA,IAC5B,CAAC,UACC,KAAA,OAAA,CAAQ,WAAY,CAAA,IAAA,CAAK,OAAK,CAAE,CAAA,EAAA,KAAO,UAAW,CAAA,EAAE,CAAC,CAAA;AAAA,IACvD,CAAC,WAAW,CAAA;AAAA,GACd,CAAA;AACA,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,gBAAA;AAAA,IACA,kBAAA;AAAA,IACA,qBAAA;AAAA,IACA,OAAA;AAAA,GACF,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"useCollectionsFollow.esm.js","sources":["../../src/hooks/useCollectionsFollow.ts"],"sourcesContent":["import React, { useCallback, useEffect } from 'react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../api';\nimport { Collection } from '@drodil/backstage-plugin-qeta-common';\n\nlet followedCollections: Collection[] | undefined = undefined;\n\nexport const useCollectionsFollow = () => {\n const [collections, setCollections] = React.useState<Collection[]>(\n followedCollections ?? [],\n );\n const [loading, setLoading] = React.useState(\n followedCollections === undefined,\n );\n const qetaApi = useApi(qetaApiRef);\n\n useEffect(() => {\n if (followedCollections === undefined) {\n qetaApi.getFollowedCollections().then(res => {\n followedCollections = res.collections;\n setCollections(followedCollections);\n setLoading(false);\n });\n } else {\n setCollections(followedCollections);\n }\n }, [qetaApi]);\n\n const followCollection = useCallback(\n (collection: Collection) => {\n qetaApi.followCollection(collection.id).then(() => {\n setCollections(prev => [...prev, collection]);\n followedCollections?.push(collection);\n });\n },\n [qetaApi],\n );\n\n const unfollowCollection = useCallback(\n (collection: Collection) => {\n qetaApi.unfollowCollection(collection.id).then(() => {\n setCollections(prev => prev.filter(t => t.id !== collection.id));\n followedCollections = followedCollections?.filter(\n t => t.id !== collection.id,\n );\n });\n },\n [qetaApi],\n );\n\n const isFollowingCollection = useCallback(\n (collection: Collection) =>\n Boolean(collections.find(t => t.id === collection.id)),\n [collections],\n );\n return {\n collections,\n followCollection,\n unfollowCollection,\n isFollowingCollection,\n loading,\n };\n};\n"],"names":["React"],"mappings":";;;;AAKA,IAAI,mBAAgD,GAAA,KAAA,CAAA;AAE7C,MAAM,uBAAuB,MAAM;AACxC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,cAAM,CAAA,QAAA;AAAA,IAC1C,uBAAuB;AAAC,GAC1B;AACA,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,cAAM,CAAA,QAAA;AAAA,IAClC,mBAAwB,KAAA,KAAA;AAAA,GAC1B;AACA,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA;AAEjC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,wBAAwB,KAAW,CAAA,EAAA;AACrC,MAAQ,OAAA,CAAA,sBAAA,EAAyB,CAAA,IAAA,CAAK,CAAO,GAAA,KAAA;AAC3C,QAAA,mBAAA,GAAsB,GAAI,CAAA,WAAA;AAC1B,QAAA,cAAA,CAAe,mBAAmB,CAAA;AAClC,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,OACjB,CAAA;AAAA,KACI,MAAA;AACL,MAAA,cAAA,CAAe,mBAAmB,CAAA;AAAA;AACpC,GACF,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,gBAAmB,GAAA,WAAA;AAAA,IACvB,CAAC,UAA2B,KAAA;AAC1B,MAAA,OAAA,CAAQ,gBAAiB,CAAA,UAAA,CAAW,EAAE,CAAA,CAAE,KAAK,MAAM;AACjD,QAAA,cAAA,CAAe,CAAQ,IAAA,KAAA,CAAC,GAAG,IAAA,EAAM,UAAU,CAAC,CAAA;AAC5C,QAAA,mBAAA,EAAqB,KAAK,UAAU,CAAA;AAAA,OACrC,CAAA;AAAA,KACH;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,kBAAqB,GAAA,WAAA;AAAA,IACzB,CAAC,UAA2B,KAAA;AAC1B,MAAA,OAAA,CAAQ,kBAAmB,CAAA,UAAA,CAAW,EAAE,CAAA,CAAE,KAAK,MAAM;AACnD,QAAe,cAAA,CAAA,CAAA,IAAA,KAAQ,KAAK,MAAO,CAAA,CAAA,CAAA,KAAK,EAAE,EAAO,KAAA,UAAA,CAAW,EAAE,CAAC,CAAA;AAC/D,QAAA,mBAAA,GAAsB,mBAAqB,EAAA,MAAA;AAAA,UACzC,CAAA,CAAA,KAAK,CAAE,CAAA,EAAA,KAAO,UAAW,CAAA;AAAA,SAC3B;AAAA,OACD,CAAA;AAAA,KACH;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,qBAAwB,GAAA,WAAA;AAAA,IAC5B,CAAC,UACC,KAAA,OAAA,CAAQ,WAAY,CAAA,IAAA,CAAK,OAAK,CAAE,CAAA,EAAA,KAAO,UAAW,CAAA,EAAE,CAAC,CAAA;AAAA,IACvD,CAAC,WAAW;AAAA,GACd;AACA,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,gBAAA;AAAA,IACA,kBAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useEntityAuthor.esm.js","sources":["../../src/hooks/useEntityAuthor.ts"],"sourcesContent":["import { UserEntity } from '@backstage/catalog-model';\nimport { CatalogApi } from '@backstage/catalog-client';\nimport DataLoader from 'dataloader';\nimport { identityApiRef, useApi } from '@backstage/core-plugin-api';\nimport {\n catalogApiRef,\n useEntityPresentation,\n} from '@backstage/plugin-catalog-react';\nimport React, { useEffect } from 'react';\nimport {\n AnswerResponse,\n CollectionResponse,\n PostResponse,\n UserResponse,\n} from '@drodil/backstage-plugin-qeta-common';\n\nconst userCache: Map<string, UserEntity> = new Map();\nconst dataLoaderFactory = (catalogApi: CatalogApi) =>\n new DataLoader(\n async (entityRefs: readonly string[]) => {\n const { items } = await catalogApi.getEntitiesByRefs({\n fields: [\n 'kind',\n 'metadata.name',\n 'metadata.namespace',\n 'spec.profile.displayName',\n 'spec.profile.picture',\n ],\n entityRefs: entityRefs as string[],\n });\n\n entityRefs.forEach((entityRef, index) => {\n userCache.set(entityRef, items[index] as UserEntity);\n });\n return items;\n },\n {\n name: 'EntityAuthorLoader',\n cacheMap: new Map(),\n maxBatchSize: 100,\n batchScheduleFn: callback => {\n setTimeout(callback, 50);\n },\n },\n );\n\nexport const useEntityAuthor = (\n entity: PostResponse | AnswerResponse | CollectionResponse | UserResponse,\n) => {\n const catalogApi = useApi(catalogApiRef);\n const identityApi = useApi(identityApiRef);\n const [name, setName] = React.useState<string | undefined>(undefined);\n const [user, setUser] = React.useState<UserEntity | null>(null);\n const [initials, setInitials] = React.useState<string | null>(null);\n const [currentUser, setCurrentUser] = React.useState<string | null>(null);\n const anonymous = 'anonymous' in entity ? entity.anonymous ?? false : false;\n let author =\n // eslint-disable-next-line no-nested-ternary\n 'author' in entity\n ? entity.author\n : 'userRef' in entity\n ? entity.userRef\n : entity.owner;\n if (!author.startsWith('user:')) {\n author = `user:${author}`;\n }\n\n const { primaryTitle: userName } = useEntityPresentation(author);\n\n useEffect(() => {\n if (anonymous) {\n return;\n }\n\n if (userCache.get(author)) {\n setUser(userCache.get(author) as UserEntity);\n return;\n }\n\n dataLoaderFactory(catalogApi)\n .load(author)\n .then(data => {\n if (data) {\n setUser(data as UserEntity);\n } else {\n setUser(null);\n }\n })\n .catch(() => {\n setUser(null);\n });\n }, [catalogApi, author, anonymous]);\n\n useEffect(() => {\n identityApi.getBackstageIdentity().then(res => {\n setCurrentUser(res.userEntityRef ?? 'user:default/guest');\n });\n }, [identityApi]);\n\n useEffect(() => {\n let displayName = userName;\n if (author === currentUser) {\n displayName = 'You';\n if (anonymous) {\n displayName += ' (anonymous)';\n }\n }\n setName(displayName);\n }, [author, anonymous, currentUser, userName]);\n\n useEffect(() => {\n const init = (name ?? '')\n .split(' ')\n .map(p => p[0])\n .join('')\n .substring(0, 2)\n .toUpperCase();\n setInitials(init);\n }, [name]);\n\n return { name, initials, user };\n};\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"useEntityAuthor.esm.js","sources":["../../src/hooks/useEntityAuthor.ts"],"sourcesContent":["import { UserEntity } from '@backstage/catalog-model';\nimport { CatalogApi } from '@backstage/catalog-client';\nimport DataLoader from 'dataloader';\nimport { identityApiRef, useApi } from '@backstage/core-plugin-api';\nimport {\n catalogApiRef,\n useEntityPresentation,\n} from '@backstage/plugin-catalog-react';\nimport React, { useEffect } from 'react';\nimport {\n AnswerResponse,\n CollectionResponse,\n PostResponse,\n UserResponse,\n} from '@drodil/backstage-plugin-qeta-common';\n\nconst userCache: Map<string, UserEntity> = new Map();\nconst dataLoaderFactory = (catalogApi: CatalogApi) =>\n new DataLoader(\n async (entityRefs: readonly string[]) => {\n const { items } = await catalogApi.getEntitiesByRefs({\n fields: [\n 'kind',\n 'metadata.name',\n 'metadata.namespace',\n 'spec.profile.displayName',\n 'spec.profile.picture',\n ],\n entityRefs: entityRefs as string[],\n });\n\n entityRefs.forEach((entityRef, index) => {\n userCache.set(entityRef, items[index] as UserEntity);\n });\n return items;\n },\n {\n name: 'EntityAuthorLoader',\n cacheMap: new Map(),\n maxBatchSize: 100,\n batchScheduleFn: callback => {\n setTimeout(callback, 50);\n },\n },\n );\n\nexport const useEntityAuthor = (\n entity: PostResponse | AnswerResponse | CollectionResponse | UserResponse,\n) => {\n const catalogApi = useApi(catalogApiRef);\n const identityApi = useApi(identityApiRef);\n const [name, setName] = React.useState<string | undefined>(undefined);\n const [user, setUser] = React.useState<UserEntity | null>(null);\n const [initials, setInitials] = React.useState<string | null>(null);\n const [currentUser, setCurrentUser] = React.useState<string | null>(null);\n const anonymous = 'anonymous' in entity ? entity.anonymous ?? false : false;\n let author =\n // eslint-disable-next-line no-nested-ternary\n 'author' in entity\n ? entity.author\n : 'userRef' in entity\n ? entity.userRef\n : entity.owner;\n if (!author.startsWith('user:')) {\n author = `user:${author}`;\n }\n\n const { primaryTitle: userName } = useEntityPresentation(author);\n\n useEffect(() => {\n if (anonymous) {\n return;\n }\n\n if (userCache.get(author)) {\n setUser(userCache.get(author) as UserEntity);\n return;\n }\n\n dataLoaderFactory(catalogApi)\n .load(author)\n .then(data => {\n if (data) {\n setUser(data as UserEntity);\n } else {\n setUser(null);\n }\n })\n .catch(() => {\n setUser(null);\n });\n }, [catalogApi, author, anonymous]);\n\n useEffect(() => {\n identityApi.getBackstageIdentity().then(res => {\n setCurrentUser(res.userEntityRef ?? 'user:default/guest');\n });\n }, [identityApi]);\n\n useEffect(() => {\n let displayName = userName;\n if (author === currentUser) {\n displayName = 'You';\n if (anonymous) {\n displayName += ' (anonymous)';\n }\n }\n setName(displayName);\n }, [author, anonymous, currentUser, userName]);\n\n useEffect(() => {\n const init = (name ?? '')\n .split(' ')\n .map(p => p[0])\n .join('')\n .substring(0, 2)\n .toUpperCase();\n setInitials(init);\n }, [name]);\n\n return { name, initials, user };\n};\n"],"names":["React"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useEntityFollow.esm.js","sources":["../../src/hooks/useEntityFollow.ts"],"sourcesContent":["import React, { useCallback, useEffect } from 'react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../api';\n\nlet followedEntities: string[] | undefined = undefined;\n\nexport const useEntityFollow = () => {\n const [entities, setEntities] = React.useState<string[]>(\n followedEntities ?? [],\n );\n const [loading, setLoading] = React.useState(followedEntities === undefined);\n const qetaApi = useApi(qetaApiRef);\n\n useEffect(() => {\n if (followedEntities === undefined) {\n qetaApi.getFollowedEntities().then(res => {\n followedEntities = res.entityRefs;\n setEntities(res.entityRefs);\n setLoading(false);\n });\n } else {\n setEntities(followedEntities);\n }\n }, [qetaApi]);\n\n const followEntity = useCallback(\n (entityRef: string) => {\n qetaApi.followEntity(entityRef).then(() => {\n setEntities(prev => [...prev, entityRef]);\n followedEntities?.push(entityRef);\n });\n },\n [qetaApi],\n );\n\n const unfollowEntity = useCallback(\n (entityRef: string) => {\n qetaApi.unfollowEntity(entityRef).then(() => {\n setEntities(prev => prev.filter(t => t !== entityRef));\n followedEntities = followedEntities?.filter(t => t !== entityRef);\n });\n },\n [qetaApi],\n );\n\n const isFollowingEntity = useCallback(\n (entityRef: string) => entities.includes(entityRef),\n [entities],\n );\n return { entities, followEntity, unfollowEntity, isFollowingEntity, loading };\n};\n"],"names":["React"],"mappings":";;;;AAIA,IAAI,gBAAyC,GAAA,KAAA,CAAA,CAAA;AAEtC,MAAM,kBAAkB,MAAM;AACnC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,cAAM,CAAA,QAAA;AAAA,IACpC,oBAAoB,EAAC;AAAA,GACvB,CAAA;AACA,EAAA,MAAM,CAAC,OAAS,EAAA,UAAU,IAAIA,cAAM,CAAA,QAAA,CAAS,qBAAqB,KAAS,CAAA,CAAA,CAAA;AAC3E,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA,CAAA;AAEjC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,qBAAqB,KAAW,CAAA,EAAA;AAClC,MAAQ,OAAA,CAAA,mBAAA,EAAsB,CAAA,IAAA,CAAK,CAAO,GAAA,KAAA;AACxC,QAAA,gBAAA,GAAmB,GAAI,CAAA,UAAA,CAAA;AACvB,QAAA,WAAA,CAAY,IAAI,UAAU,CAAA,CAAA;AAC1B,QAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAAA,OACjB,CAAA,CAAA;AAAA,KACI,MAAA;AACL,MAAA,WAAA,CAAY,gBAAgB,CAAA,CAAA;AAAA,KAC9B;AAAA,GACF,EAAG,CAAC,OAAO,CAAC,CAAA,CAAA;AAEZ,EAAA,MAAM,YAAe,GAAA,WAAA;AAAA,IACnB,CAAC,SAAsB,KAAA;AACrB,MAAA,OAAA,CAAQ,YAAa,CAAA,SAAS,CAAE,CAAA,IAAA,CAAK,MAAM;AACzC,QAAA,WAAA,CAAY,CAAQ,IAAA,KAAA,CAAC,GAAG,IAAA,EAAM,SAAS,CAAC,CAAA,CAAA;AACxC,QAAA,gBAAA,EAAkB,KAAK,SAAS,CAAA,CAAA;AAAA,OACjC,CAAA,CAAA;AAAA,KACH;AAAA,IACA,CAAC,OAAO,CAAA;AAAA,GACV,CAAA;AAEA,EAAA,MAAM,cAAiB,GAAA,WAAA;AAAA,IACrB,CAAC,SAAsB,KAAA;AACrB,MAAA,OAAA,CAAQ,cAAe,CAAA,SAAS,CAAE,CAAA,IAAA,CAAK,MAAM;AAC3C,QAAA,WAAA,CAAY,UAAQ,IAAK,CAAA,MAAA,CAAO,CAAK,CAAA,KAAA,CAAA,KAAM,SAAS,CAAC,CAAA,CAAA;AACrD,QAAA,gBAAA,GAAmB,gBAAkB,EAAA,MAAA,CAAO,CAAK,CAAA,KAAA,CAAA,KAAM,SAAS,CAAA,CAAA;AAAA,OACjE,CAAA,CAAA;AAAA,KACH;AAAA,IACA,CAAC,OAAO,CAAA;AAAA,GACV,CAAA;AAEA,EAAA,MAAM,iBAAoB,GAAA,WAAA;AAAA,IACxB,CAAC,SAAA,KAAsB,QAAS,CAAA,QAAA,CAAS,SAAS,CAAA;AAAA,IAClD,CAAC,QAAQ,CAAA;AAAA,GACX,CAAA;AACA,EAAA,OAAO,EAAE,QAAA,EAAU,YAAc,EAAA,cAAA,EAAgB,mBAAmB,OAAQ,EAAA,CAAA;AAC9E;;;;"}
1
+ {"version":3,"file":"useEntityFollow.esm.js","sources":["../../src/hooks/useEntityFollow.ts"],"sourcesContent":["import React, { useCallback, useEffect } from 'react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../api';\n\nlet followedEntities: string[] | undefined = undefined;\n\nexport const useEntityFollow = () => {\n const [entities, setEntities] = React.useState<string[]>(\n followedEntities ?? [],\n );\n const [loading, setLoading] = React.useState(followedEntities === undefined);\n const qetaApi = useApi(qetaApiRef);\n\n useEffect(() => {\n if (followedEntities === undefined) {\n qetaApi.getFollowedEntities().then(res => {\n followedEntities = res.entityRefs;\n setEntities(res.entityRefs);\n setLoading(false);\n });\n } else {\n setEntities(followedEntities);\n }\n }, [qetaApi]);\n\n const followEntity = useCallback(\n (entityRef: string) => {\n qetaApi.followEntity(entityRef).then(() => {\n setEntities(prev => [...prev, entityRef]);\n followedEntities?.push(entityRef);\n });\n },\n [qetaApi],\n );\n\n const unfollowEntity = useCallback(\n (entityRef: string) => {\n qetaApi.unfollowEntity(entityRef).then(() => {\n setEntities(prev => prev.filter(t => t !== entityRef));\n followedEntities = followedEntities?.filter(t => t !== entityRef);\n });\n },\n [qetaApi],\n );\n\n const isFollowingEntity = useCallback(\n (entityRef: string) => entities.includes(entityRef),\n [entities],\n );\n return { entities, followEntity, unfollowEntity, isFollowingEntity, loading };\n};\n"],"names":["React"],"mappings":";;;;AAIA,IAAI,gBAAyC,GAAA,KAAA,CAAA;AAEtC,MAAM,kBAAkB,MAAM;AACnC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,cAAM,CAAA,QAAA;AAAA,IACpC,oBAAoB;AAAC,GACvB;AACA,EAAA,MAAM,CAAC,OAAS,EAAA,UAAU,IAAIA,cAAM,CAAA,QAAA,CAAS,qBAAqB,KAAS,CAAA,CAAA;AAC3E,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA;AAEjC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,qBAAqB,KAAW,CAAA,EAAA;AAClC,MAAQ,OAAA,CAAA,mBAAA,EAAsB,CAAA,IAAA,CAAK,CAAO,GAAA,KAAA;AACxC,QAAA,gBAAA,GAAmB,GAAI,CAAA,UAAA;AACvB,QAAA,WAAA,CAAY,IAAI,UAAU,CAAA;AAC1B,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,OACjB,CAAA;AAAA,KACI,MAAA;AACL,MAAA,WAAA,CAAY,gBAAgB,CAAA;AAAA;AAC9B,GACF,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,YAAe,GAAA,WAAA;AAAA,IACnB,CAAC,SAAsB,KAAA;AACrB,MAAA,OAAA,CAAQ,YAAa,CAAA,SAAS,CAAE,CAAA,IAAA,CAAK,MAAM;AACzC,QAAA,WAAA,CAAY,CAAQ,IAAA,KAAA,CAAC,GAAG,IAAA,EAAM,SAAS,CAAC,CAAA;AACxC,QAAA,gBAAA,EAAkB,KAAK,SAAS,CAAA;AAAA,OACjC,CAAA;AAAA,KACH;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,cAAiB,GAAA,WAAA;AAAA,IACrB,CAAC,SAAsB,KAAA;AACrB,MAAA,OAAA,CAAQ,cAAe,CAAA,SAAS,CAAE,CAAA,IAAA,CAAK,MAAM;AAC3C,QAAA,WAAA,CAAY,UAAQ,IAAK,CAAA,MAAA,CAAO,CAAK,CAAA,KAAA,CAAA,KAAM,SAAS,CAAC,CAAA;AACrD,QAAA,gBAAA,GAAmB,gBAAkB,EAAA,MAAA,CAAO,CAAK,CAAA,KAAA,CAAA,KAAM,SAAS,CAAA;AAAA,OACjE,CAAA;AAAA,KACH;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,iBAAoB,GAAA,WAAA;AAAA,IACxB,CAAC,SAAA,KAAsB,QAAS,CAAA,QAAA,CAAS,SAAS,CAAA;AAAA,IAClD,CAAC,QAAQ;AAAA,GACX;AACA,EAAA,OAAO,EAAE,QAAA,EAAU,YAAc,EAAA,cAAA,EAAgB,mBAAmB,OAAQ,EAAA;AAC9E;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useEntityQueryParameter.esm.js","sources":["../../src/hooks/useEntityQueryParameter.ts"],"sourcesContent":["import { useSearchParams } from 'react-router-dom';\nimport React, { useEffect } from 'react';\n\nexport function useEntityQueryParameter(entity?: string) {\n const [searchParams] = useSearchParams();\n const [entityRef, setEntityRef] = React.useState<string | undefined>(entity);\n\n useEffect(() => {\n setEntityRef(searchParams.get('entity') ?? undefined);\n }, [searchParams, setEntityRef]);\n\n return entityRef;\n}\n"],"names":["React"],"mappings":";;;AAGO,SAAS,wBAAwB,MAAiB,EAAA;AACvD,EAAM,MAAA,CAAC,YAAY,CAAA,GAAI,eAAgB,EAAA,CAAA;AACvC,EAAA,MAAM,CAAC,SAAW,EAAA,YAAY,CAAI,GAAAA,cAAA,CAAM,SAA6B,MAAM,CAAA,CAAA;AAE3E,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,YAAA,CAAa,YAAa,CAAA,GAAA,CAAI,QAAQ,CAAA,IAAK,KAAS,CAAA,CAAA,CAAA;AAAA,GACnD,EAAA,CAAC,YAAc,EAAA,YAAY,CAAC,CAAA,CAAA;AAE/B,EAAO,OAAA,SAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"useEntityQueryParameter.esm.js","sources":["../../src/hooks/useEntityQueryParameter.ts"],"sourcesContent":["import { useSearchParams } from 'react-router-dom';\nimport React, { useEffect } from 'react';\n\nexport function useEntityQueryParameter(entity?: string) {\n const [searchParams] = useSearchParams();\n const [entityRef, setEntityRef] = React.useState<string | undefined>(entity);\n\n useEffect(() => {\n setEntityRef(searchParams.get('entity') ?? undefined);\n }, [searchParams, setEntityRef]);\n\n return entityRef;\n}\n"],"names":["React"],"mappings":";;;AAGO,SAAS,wBAAwB,MAAiB,EAAA;AACvD,EAAM,MAAA,CAAC,YAAY,CAAA,GAAI,eAAgB,EAAA;AACvC,EAAA,MAAM,CAAC,SAAW,EAAA,YAAY,CAAI,GAAAA,cAAA,CAAM,SAA6B,MAAM,CAAA;AAE3E,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,YAAA,CAAa,YAAa,CAAA,GAAA,CAAI,QAAQ,CAAA,IAAK,KAAS,CAAA,CAAA;AAAA,GACnD,EAAA,CAAC,YAAc,EAAA,YAAY,CAAC,CAAA;AAE/B,EAAO,OAAA,SAAA;AACT;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useIdentityApi.esm.js","sources":["../../src/hooks/useIdentityApi.ts"],"sourcesContent":["import {\n IdentityApi,\n identityApiRef,\n useApi,\n} from '@backstage/core-plugin-api';\nimport useAsync from 'react-use/lib/useAsync';\n\nexport function useIdentityApi<T>(\n f: (api: IdentityApi) => Promise<T>,\n deps: any[] = [],\n) {\n const identityApi = useApi(identityApiRef);\n\n return useAsync(async () => {\n return await f(identityApi);\n }, deps);\n}\n"],"names":[],"mappings":";;;AAOO,SAAS,cACd,CAAA,CAAA,EACA,IAAc,GAAA,EACd,EAAA;AACA,EAAM,MAAA,WAAA,GAAc,OAAO,cAAc,CAAA,CAAA;AAEzC,EAAA,OAAO,SAAS,YAAY;AAC1B,IAAO,OAAA,MAAM,EAAE,WAAW,CAAA,CAAA;AAAA,KACzB,IAAI,CAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"useIdentityApi.esm.js","sources":["../../src/hooks/useIdentityApi.ts"],"sourcesContent":["import {\n IdentityApi,\n identityApiRef,\n useApi,\n} from '@backstage/core-plugin-api';\nimport useAsync from 'react-use/lib/useAsync';\n\nexport function useIdentityApi<T>(\n f: (api: IdentityApi) => Promise<T>,\n deps: any[] = [],\n) {\n const identityApi = useApi(identityApiRef);\n\n return useAsync(async () => {\n return await f(identityApi);\n }, deps);\n}\n"],"names":[],"mappings":";;;AAOO,SAAS,cACd,CAAA,CAAA,EACA,IAAc,GAAA,EACd,EAAA;AACA,EAAM,MAAA,WAAA,GAAc,OAAO,cAAc,CAAA;AAEzC,EAAA,OAAO,SAAS,YAAY;AAC1B,IAAO,OAAA,MAAM,EAAE,WAAW,CAAA;AAAA,KACzB,IAAI,CAAA;AACT;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useIsDarkTheme.esm.js","sources":["../../src/hooks/useIsDarkTheme.ts"],"sourcesContent":["import { appThemeApiRef, useApi } from '@backstage/core-plugin-api';\nimport { useMemo } from 'react';\n\nexport function useIsDarkTheme() {\n const appThemeApi = useApi(appThemeApiRef);\n const themes = appThemeApi.getInstalledThemes();\n const theme = useMemo(() => appThemeApi.getActiveThemeId(), [appThemeApi]);\n return Boolean(themes.find(t => t.id === theme)?.variant === 'dark');\n}\n"],"names":[],"mappings":";;;AAGO,SAAS,cAAiB,GAAA;AAC/B,EAAM,MAAA,WAAA,GAAc,OAAO,cAAc,CAAA,CAAA;AACzC,EAAM,MAAA,MAAA,GAAS,YAAY,kBAAmB,EAAA,CAAA;AAC9C,EAAM,MAAA,KAAA,GAAQ,QAAQ,MAAM,WAAA,CAAY,kBAAoB,EAAA,CAAC,WAAW,CAAC,CAAA,CAAA;AACzE,EAAO,OAAA,OAAA,CAAQ,OAAO,IAAK,CAAA,CAAA,CAAA,KAAK,EAAE,EAAO,KAAA,KAAK,CAAG,EAAA,OAAA,KAAY,MAAM,CAAA,CAAA;AACrE;;;;"}
1
+ {"version":3,"file":"useIsDarkTheme.esm.js","sources":["../../src/hooks/useIsDarkTheme.ts"],"sourcesContent":["import { appThemeApiRef, useApi } from '@backstage/core-plugin-api';\nimport { useMemo } from 'react';\n\nexport function useIsDarkTheme() {\n const appThemeApi = useApi(appThemeApiRef);\n const themes = appThemeApi.getInstalledThemes();\n const theme = useMemo(() => appThemeApi.getActiveThemeId(), [appThemeApi]);\n return Boolean(themes.find(t => t.id === theme)?.variant === 'dark');\n}\n"],"names":[],"mappings":";;;AAGO,SAAS,cAAiB,GAAA;AAC/B,EAAM,MAAA,WAAA,GAAc,OAAO,cAAc,CAAA;AACzC,EAAM,MAAA,MAAA,GAAS,YAAY,kBAAmB,EAAA;AAC9C,EAAM,MAAA,KAAA,GAAQ,QAAQ,MAAM,WAAA,CAAY,kBAAoB,EAAA,CAAC,WAAW,CAAC,CAAA;AACzE,EAAO,OAAA,OAAA,CAAQ,OAAO,IAAK,CAAA,CAAA,CAAA,KAAK,EAAE,EAAO,KAAA,KAAK,CAAG,EAAA,OAAA,KAAY,MAAM,CAAA;AACrE;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useIsModerator.esm.js","sources":["../../src/hooks/useIsModerator.ts"],"sourcesContent":["import { configApiRef, useApi } from '@backstage/core-plugin-api';\nimport { useIdentityApi } from './useIdentityApi';\nimport { useMemo } from 'react';\n\nexport const useIsModerator = () => {\n const configApi = useApi(configApiRef);\n const moderators = useMemo(\n () => configApi.getOptionalStringArray('qeta.moderators') ?? [],\n [configApi],\n );\n const { value: user } = useIdentityApi(api => api.getBackstageIdentity(), []);\n\n const isModerator = useMemo(() => {\n const ownership: string[] = user?.ownershipEntityRefs ?? [];\n if (user?.userEntityRef) {\n ownership.push(user?.userEntityRef);\n }\n return moderators.some((m: string) => ownership.includes(m));\n }, [moderators, user]);\n\n return { isModerator };\n};\n"],"names":[],"mappings":";;;;AAIO,MAAM,iBAAiB,MAAM;AAClC,EAAM,MAAA,SAAA,GAAY,OAAO,YAAY,CAAA,CAAA;AACrC,EAAA,MAAM,UAAa,GAAA,OAAA;AAAA,IACjB,MAAM,SAAA,CAAU,sBAAuB,CAAA,iBAAiB,KAAK,EAAC;AAAA,IAC9D,CAAC,SAAS,CAAA;AAAA,GACZ,CAAA;AACA,EAAM,MAAA,EAAE,KAAO,EAAA,IAAA,EAAS,GAAA,cAAA,CAAe,SAAO,GAAI,CAAA,oBAAA,EAAwB,EAAA,EAAE,CAAA,CAAA;AAE5E,EAAM,MAAA,WAAA,GAAc,QAAQ,MAAM;AAChC,IAAM,MAAA,SAAA,GAAsB,IAAM,EAAA,mBAAA,IAAuB,EAAC,CAAA;AAC1D,IAAA,IAAI,MAAM,aAAe,EAAA;AACvB,MAAU,SAAA,CAAA,IAAA,CAAK,MAAM,aAAa,CAAA,CAAA;AAAA,KACpC;AACA,IAAA,OAAO,WAAW,IAAK,CAAA,CAAC,MAAc,SAAU,CAAA,QAAA,CAAS,CAAC,CAAC,CAAA,CAAA;AAAA,GAC1D,EAAA,CAAC,UAAY,EAAA,IAAI,CAAC,CAAA,CAAA;AAErB,EAAA,OAAO,EAAE,WAAY,EAAA,CAAA;AACvB;;;;"}
1
+ {"version":3,"file":"useIsModerator.esm.js","sources":["../../src/hooks/useIsModerator.ts"],"sourcesContent":["import { configApiRef, useApi } from '@backstage/core-plugin-api';\nimport { useIdentityApi } from './useIdentityApi';\nimport { useMemo } from 'react';\n\nexport const useIsModerator = () => {\n const configApi = useApi(configApiRef);\n const moderators = useMemo(\n () => configApi.getOptionalStringArray('qeta.moderators') ?? [],\n [configApi],\n );\n const { value: user } = useIdentityApi(api => api.getBackstageIdentity(), []);\n\n const isModerator = useMemo(() => {\n const ownership: string[] = user?.ownershipEntityRefs ?? [];\n if (user?.userEntityRef) {\n ownership.push(user?.userEntityRef);\n }\n return moderators.some((m: string) => ownership.includes(m));\n }, [moderators, user]);\n\n return { isModerator };\n};\n"],"names":[],"mappings":";;;;AAIO,MAAM,iBAAiB,MAAM;AAClC,EAAM,MAAA,SAAA,GAAY,OAAO,YAAY,CAAA;AACrC,EAAA,MAAM,UAAa,GAAA,OAAA;AAAA,IACjB,MAAM,SAAA,CAAU,sBAAuB,CAAA,iBAAiB,KAAK,EAAC;AAAA,IAC9D,CAAC,SAAS;AAAA,GACZ;AACA,EAAM,MAAA,EAAE,KAAO,EAAA,IAAA,EAAS,GAAA,cAAA,CAAe,SAAO,GAAI,CAAA,oBAAA,EAAwB,EAAA,EAAE,CAAA;AAE5E,EAAM,MAAA,WAAA,GAAc,QAAQ,MAAM;AAChC,IAAM,MAAA,SAAA,GAAsB,IAAM,EAAA,mBAAA,IAAuB,EAAC;AAC1D,IAAA,IAAI,MAAM,aAAe,EAAA;AACvB,MAAU,SAAA,CAAA,IAAA,CAAK,MAAM,aAAa,CAAA;AAAA;AAEpC,IAAA,OAAO,WAAW,IAAK,CAAA,CAAC,MAAc,SAAU,CAAA,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,GAC1D,EAAA,CAAC,UAAY,EAAA,IAAI,CAAC,CAAA;AAErB,EAAA,OAAO,EAAE,WAAY,EAAA;AACvB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"usePaginatedPosts.esm.js","sources":["../../src/hooks/usePaginatedPosts.ts"],"sourcesContent":["import { useAnalytics } from '@backstage/core-plugin-api';\nimport React, { useEffect } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport {\n FilterKey,\n filterKeys,\n PostFilters,\n} from '../components/FilterPanel/FilterPanel';\nimport useDebounce from 'react-use/lib/useDebounce';\nimport { getFiltersWithDateRange } from '../utils';\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport { useQetaApi } from './useQetaApi';\n\nexport type PaginatedPostsProps = PostFilters & {\n author?: string;\n showFilters?: boolean;\n showTitle?: boolean;\n title?: string;\n favorite?: boolean;\n showAskButton?: boolean;\n showWriteButton?: boolean;\n showNoQuestionsBtn?: boolean;\n initialPageSize?: number;\n collectionId?: number;\n};\n\nexport type PostFilterChange = {\n key: keyof PostFilters;\n value?: PostFilters[keyof PostFilters];\n};\n\nconst EXPANDED_LOCAL_STORAGE_KEY = 'qeta-post-filters-expanded';\n\nexport function usePaginatedPosts(props: PaginatedPostsProps) {\n const { type, tags, author, entities, entity, favorite, initialPageSize } =\n props;\n const analytics = useAnalytics();\n const [page, setPage] = React.useState(1);\n const [pageCount, setPageCount] = React.useState(1);\n const [postsPerPage, setPostsPerPage] = React.useState(initialPageSize ?? 10);\n const [showFilterPanel, setShowFilterPanel] = React.useState(\n localStorage.getItem(EXPANDED_LOCAL_STORAGE_KEY) === 'true',\n );\n const [searchParams, setSearchParams] = useSearchParams();\n const [searchQuery, setSearchQuery] = React.useState('');\n const [filters, setFilters] = React.useState<PostFilters>({\n order: props.order ?? 'desc',\n orderBy: props.orderBy ?? 'created',\n noAnswers: props.noAnswers ?? 'false',\n noCorrectAnswer: props.noCorrectAnswer ?? 'false',\n noVotes: props.noVotes ?? 'false',\n searchQuery: props.searchQuery ?? '',\n entities: entities ?? (entity ? [entity] : undefined),\n tags: tags,\n dateRange: '',\n collectionId: props.collectionId,\n type,\n });\n\n useEffect(() => {\n localStorage.setItem(\n EXPANDED_LOCAL_STORAGE_KEY,\n showFilterPanel ? 'true' : 'false',\n );\n }, [showFilterPanel]);\n\n const onPageChange = (value: number) => {\n setPage(value);\n setSearchParams(prev => {\n const newValue = prev;\n newValue.set('page', String(value));\n return newValue;\n });\n };\n\n const loadNextPage = () => {\n setPage(prev => prev + 1);\n };\n\n const onFilterChange = (changes: PostFilterChange | PostFilterChange[]) => {\n const changesArray = Array.isArray(changes) ? changes : [changes];\n setPage(1);\n setFilters(prev => {\n const newValue = { ...prev };\n for (const { key, value } of changesArray) {\n (newValue as any)[key] = value;\n }\n return newValue;\n });\n setSearchParams(prev => {\n const newValue = prev;\n for (const { key, value } of changesArray) {\n if (!filterKeys.includes(key as FilterKey)) {\n continue;\n }\n if (!value || value === 'false') {\n newValue.delete(key);\n } else if (Array.isArray(value)) {\n if (value.length === 0) {\n newValue.delete(key);\n } else {\n newValue.set(key, value.join(','));\n }\n } else if (typeof value === 'number') {\n newValue.set(key, String(value));\n } else if (value.length > 0) {\n newValue.set(key, value);\n } else {\n newValue.delete(key);\n }\n }\n return newValue;\n });\n };\n\n const onSearchQueryChange = (query: string) => {\n onPageChange(1);\n if (query) {\n analytics.captureEvent('qeta_search', query);\n }\n setSearchQuery(query);\n };\n\n useDebounce(\n () => {\n if (filters.searchQuery !== searchQuery) {\n setFilters({ ...filters, searchQuery: searchQuery });\n }\n },\n 400,\n [searchQuery],\n );\n\n useEffect(() => {\n let filtersApplied = false;\n searchParams.forEach((value, key) => {\n try {\n if (key === 'page') {\n const pv = Number.parseInt(value, 10);\n if (pv > 0) {\n setPage(pv);\n } else {\n setPage(1);\n }\n } else if (key === 'postsPerPage') {\n const qpp = Number.parseInt(value, 10);\n if (qpp > 0) setPostsPerPage(qpp);\n } else if (filterKeys.includes(key as FilterKey)) {\n filtersApplied = true;\n if (key === 'tags') {\n filters.tags = filterTags(value) ?? [];\n } else {\n (filters as any)[key] = value;\n }\n }\n } catch (_e) {\n // NOOP\n }\n });\n setFilters(filters);\n if (filtersApplied) {\n setShowFilterPanel(true);\n }\n }, [searchParams, filters]);\n\n const {\n value: response,\n loading,\n error,\n retry,\n } = useQetaApi(\n api => {\n return api.getPosts({\n type,\n limit: postsPerPage,\n offset: (page - 1) * postsPerPage,\n includeEntities: true,\n author,\n favorite,\n ...(getFiltersWithDateRange(filters) as any),\n });\n },\n [type, page, filters, postsPerPage],\n );\n\n useEffect(() => {\n if (response) {\n setPageCount(Math.ceil(response.total / postsPerPage));\n }\n }, [response, postsPerPage]);\n\n const onPageSizeChange = (value: number) => {\n if (response) {\n let newPage = page;\n while (newPage * value > response.total) {\n newPage -= 1;\n }\n onPageChange(Math.max(1, newPage));\n }\n setPostsPerPage(value);\n setSearchParams(prev => {\n const newValue = prev;\n newValue.set('postsPerPage', String(value));\n return newValue;\n });\n };\n\n return {\n page,\n setPage,\n postsPerPage,\n setPostsPerPage,\n showFilterPanel,\n setShowFilterPanel,\n searchParams,\n setSearchParams,\n searchQuery,\n setSearchQuery,\n filters,\n setFilters,\n onPageChange,\n onPageSizeChange,\n onFilterChange,\n onSearchQueryChange,\n response,\n loading,\n error,\n loadNextPage,\n pageCount,\n retry,\n };\n}\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"usePaginatedPosts.esm.js","sources":["../../src/hooks/usePaginatedPosts.ts"],"sourcesContent":["import { useAnalytics } from '@backstage/core-plugin-api';\nimport React, { useEffect } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport {\n FilterKey,\n filterKeys,\n PostFilters,\n} from '../components/FilterPanel/FilterPanel';\nimport useDebounce from 'react-use/lib/useDebounce';\nimport { getFiltersWithDateRange } from '../utils';\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport { useQetaApi } from './useQetaApi';\n\nexport type PaginatedPostsProps = PostFilters & {\n author?: string;\n showFilters?: boolean;\n showTitle?: boolean;\n title?: string;\n favorite?: boolean;\n showAskButton?: boolean;\n showWriteButton?: boolean;\n showNoQuestionsBtn?: boolean;\n initialPageSize?: number;\n collectionId?: number;\n};\n\nexport type PostFilterChange = {\n key: keyof PostFilters;\n value?: PostFilters[keyof PostFilters];\n};\n\nconst EXPANDED_LOCAL_STORAGE_KEY = 'qeta-post-filters-expanded';\n\nexport function usePaginatedPosts(props: PaginatedPostsProps) {\n const { type, tags, author, entities, entity, favorite, initialPageSize } =\n props;\n const analytics = useAnalytics();\n const [page, setPage] = React.useState(1);\n const [pageCount, setPageCount] = React.useState(1);\n const [postsPerPage, setPostsPerPage] = React.useState(initialPageSize ?? 10);\n const [showFilterPanel, setShowFilterPanel] = React.useState(\n localStorage.getItem(EXPANDED_LOCAL_STORAGE_KEY) === 'true',\n );\n const [searchParams, setSearchParams] = useSearchParams();\n const [searchQuery, setSearchQuery] = React.useState('');\n const [filters, setFilters] = React.useState<PostFilters>({\n order: props.order ?? 'desc',\n orderBy: props.orderBy ?? 'created',\n noAnswers: props.noAnswers ?? 'false',\n noCorrectAnswer: props.noCorrectAnswer ?? 'false',\n noVotes: props.noVotes ?? 'false',\n searchQuery: props.searchQuery ?? '',\n entities: entities ?? (entity ? [entity] : undefined),\n tags: tags,\n dateRange: '',\n collectionId: props.collectionId,\n type,\n });\n\n useEffect(() => {\n localStorage.setItem(\n EXPANDED_LOCAL_STORAGE_KEY,\n showFilterPanel ? 'true' : 'false',\n );\n }, [showFilterPanel]);\n\n const onPageChange = (value: number) => {\n setPage(value);\n setSearchParams(prev => {\n const newValue = prev;\n newValue.set('page', String(value));\n return newValue;\n });\n };\n\n const loadNextPage = () => {\n setPage(prev => prev + 1);\n };\n\n const onFilterChange = (changes: PostFilterChange | PostFilterChange[]) => {\n const changesArray = Array.isArray(changes) ? changes : [changes];\n setPage(1);\n setFilters(prev => {\n const newValue = { ...prev };\n for (const { key, value } of changesArray) {\n (newValue as any)[key] = value;\n }\n return newValue;\n });\n setSearchParams(prev => {\n const newValue = prev;\n for (const { key, value } of changesArray) {\n if (!filterKeys.includes(key as FilterKey)) {\n continue;\n }\n if (!value || value === 'false') {\n newValue.delete(key);\n } else if (Array.isArray(value)) {\n if (value.length === 0) {\n newValue.delete(key);\n } else {\n newValue.set(key, value.join(','));\n }\n } else if (typeof value === 'number') {\n newValue.set(key, String(value));\n } else if (value.length > 0) {\n newValue.set(key, value);\n } else {\n newValue.delete(key);\n }\n }\n return newValue;\n });\n };\n\n const onSearchQueryChange = (query: string) => {\n onPageChange(1);\n if (query) {\n analytics.captureEvent('qeta_search', query);\n }\n setSearchQuery(query);\n };\n\n useDebounce(\n () => {\n if (filters.searchQuery !== searchQuery) {\n setFilters({ ...filters, searchQuery: searchQuery });\n }\n },\n 400,\n [searchQuery],\n );\n\n useEffect(() => {\n let filtersApplied = false;\n searchParams.forEach((value, key) => {\n try {\n if (key === 'page') {\n const pv = Number.parseInt(value, 10);\n if (pv > 0) {\n setPage(pv);\n } else {\n setPage(1);\n }\n } else if (key === 'postsPerPage') {\n const qpp = Number.parseInt(value, 10);\n if (qpp > 0) setPostsPerPage(qpp);\n } else if (filterKeys.includes(key as FilterKey)) {\n filtersApplied = true;\n if (key === 'tags') {\n filters.tags = filterTags(value) ?? [];\n } else {\n (filters as any)[key] = value;\n }\n }\n } catch (_e) {\n // NOOP\n }\n });\n setFilters(filters);\n if (filtersApplied) {\n setShowFilterPanel(true);\n }\n }, [searchParams, filters]);\n\n const {\n value: response,\n loading,\n error,\n retry,\n } = useQetaApi(\n api => {\n return api.getPosts({\n type,\n limit: postsPerPage,\n offset: (page - 1) * postsPerPage,\n includeEntities: true,\n author,\n favorite,\n ...(getFiltersWithDateRange(filters) as any),\n });\n },\n [type, page, filters, postsPerPage],\n );\n\n useEffect(() => {\n if (response) {\n setPageCount(Math.ceil(response.total / postsPerPage));\n }\n }, [response, postsPerPage]);\n\n const onPageSizeChange = (value: number) => {\n if (response) {\n let newPage = page;\n while (newPage * value > response.total) {\n newPage -= 1;\n }\n onPageChange(Math.max(1, newPage));\n }\n setPostsPerPage(value);\n setSearchParams(prev => {\n const newValue = prev;\n newValue.set('postsPerPage', String(value));\n return newValue;\n });\n };\n\n return {\n page,\n setPage,\n postsPerPage,\n setPostsPerPage,\n showFilterPanel,\n setShowFilterPanel,\n searchParams,\n setSearchParams,\n searchQuery,\n setSearchQuery,\n filters,\n setFilters,\n onPageChange,\n onPageSizeChange,\n onFilterChange,\n onSearchQueryChange,\n response,\n loading,\n error,\n loadNextPage,\n pageCount,\n retry,\n };\n}\n"],"names":["React"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useQetaApi.esm.js","sources":["../../src/hooks/useQetaApi.ts"],"sourcesContent":["import { useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../api';\nimport { useAsyncRetry } from 'react-use';\nimport { QetaApi } from '@drodil/backstage-plugin-qeta-common';\n\nexport function useQetaApi<T>(\n f: (api: QetaApi) => Promise<T>,\n deps: any[] = [],\n) {\n const qetaApi = useApi(qetaApiRef);\n\n return useAsyncRetry(async () => {\n return await f(qetaApi);\n }, deps);\n}\n"],"names":[],"mappings":";;;;AAKO,SAAS,UACd,CAAA,CAAA,EACA,IAAc,GAAA,EACd,EAAA;AACA,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA,CAAA;AAEjC,EAAA,OAAO,cAAc,YAAY;AAC/B,IAAO,OAAA,MAAM,EAAE,OAAO,CAAA,CAAA;AAAA,KACrB,IAAI,CAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"useQetaApi.esm.js","sources":["../../src/hooks/useQetaApi.ts"],"sourcesContent":["import { useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../api';\nimport { useAsyncRetry } from 'react-use';\nimport { QetaApi } from '@drodil/backstage-plugin-qeta-common';\n\nexport function useQetaApi<T>(\n f: (api: QetaApi) => Promise<T>,\n deps: any[] = [],\n) {\n const qetaApi = useApi(qetaApiRef);\n\n return useAsyncRetry(async () => {\n return await f(qetaApi);\n }, deps);\n}\n"],"names":[],"mappings":";;;;AAKO,SAAS,UACd,CAAA,CAAA,EACA,IAAc,GAAA,EACd,EAAA;AACA,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA;AAEjC,EAAA,OAAO,cAAc,YAAY;AAC/B,IAAO,OAAA,MAAM,EAAE,OAAO,CAAA;AAAA,KACrB,IAAI,CAAA;AACT;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTagsFollow.esm.js","sources":["../../src/hooks/useTagsFollow.ts"],"sourcesContent":["import React, { useCallback, useEffect } from 'react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../api';\n\nlet followedTags: string[] | undefined = undefined;\n\nexport const useTagsFollow = () => {\n const [tags, setTags] = React.useState<string[]>(followedTags ?? []);\n const [loading, setLoading] = React.useState(followedTags === undefined);\n const qetaApi = useApi(qetaApiRef);\n\n useEffect(() => {\n if (followedTags === undefined) {\n qetaApi.getFollowedTags().then(res => {\n followedTags = res.tags;\n setTags(res.tags);\n setLoading(false);\n });\n } else {\n setTags(followedTags);\n }\n }, [qetaApi]);\n\n const followTag = useCallback(\n (tag: string) => {\n qetaApi.followTag(tag).then(() => {\n setTags(prev => [...prev, tag]);\n followedTags?.push(tag);\n });\n },\n [qetaApi],\n );\n\n const unfollowTag = useCallback(\n (tag: string) => {\n qetaApi.unfollowTag(tag).then(() => {\n setTags(prev => prev.filter(t => t !== tag));\n followedTags = followedTags?.filter(t => t !== tag);\n });\n },\n [qetaApi],\n );\n\n const isFollowingTag = useCallback(\n (tag: string) => tags.includes(tag),\n [tags],\n );\n return {\n tags,\n followTag,\n unfollowTag,\n isFollowingTag,\n loading,\n };\n};\n"],"names":["React"],"mappings":";;;;AAIA,IAAI,YAAqC,GAAA,KAAA,CAAA,CAAA;AAElC,MAAM,gBAAgB,MAAM;AACjC,EAAM,MAAA,CAAC,MAAM,OAAO,CAAA,GAAIA,eAAM,QAAmB,CAAA,YAAA,IAAgB,EAAE,CAAA,CAAA;AACnE,EAAA,MAAM,CAAC,OAAS,EAAA,UAAU,IAAIA,cAAM,CAAA,QAAA,CAAS,iBAAiB,KAAS,CAAA,CAAA,CAAA;AACvE,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA,CAAA;AAEjC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,iBAAiB,KAAW,CAAA,EAAA;AAC9B,MAAQ,OAAA,CAAA,eAAA,EAAkB,CAAA,IAAA,CAAK,CAAO,GAAA,KAAA;AACpC,QAAA,YAAA,GAAe,GAAI,CAAA,IAAA,CAAA;AACnB,QAAA,OAAA,CAAQ,IAAI,IAAI,CAAA,CAAA;AAChB,QAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAAA,OACjB,CAAA,CAAA;AAAA,KACI,MAAA;AACL,MAAA,OAAA,CAAQ,YAAY,CAAA,CAAA;AAAA,KACtB;AAAA,GACF,EAAG,CAAC,OAAO,CAAC,CAAA,CAAA;AAEZ,EAAA,MAAM,SAAY,GAAA,WAAA;AAAA,IAChB,CAAC,GAAgB,KAAA;AACf,MAAA,OAAA,CAAQ,SAAU,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,MAAM;AAChC,QAAA,OAAA,CAAQ,CAAQ,IAAA,KAAA,CAAC,GAAG,IAAA,EAAM,GAAG,CAAC,CAAA,CAAA;AAC9B,QAAA,YAAA,EAAc,KAAK,GAAG,CAAA,CAAA;AAAA,OACvB,CAAA,CAAA;AAAA,KACH;AAAA,IACA,CAAC,OAAO,CAAA;AAAA,GACV,CAAA;AAEA,EAAA,MAAM,WAAc,GAAA,WAAA;AAAA,IAClB,CAAC,GAAgB,KAAA;AACf,MAAA,OAAA,CAAQ,WAAY,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,MAAM;AAClC,QAAA,OAAA,CAAQ,UAAQ,IAAK,CAAA,MAAA,CAAO,CAAK,CAAA,KAAA,CAAA,KAAM,GAAG,CAAC,CAAA,CAAA;AAC3C,QAAA,YAAA,GAAe,YAAc,EAAA,MAAA,CAAO,CAAK,CAAA,KAAA,CAAA,KAAM,GAAG,CAAA,CAAA;AAAA,OACnD,CAAA,CAAA;AAAA,KACH;AAAA,IACA,CAAC,OAAO,CAAA;AAAA,GACV,CAAA;AAEA,EAAA,MAAM,cAAiB,GAAA,WAAA;AAAA,IACrB,CAAC,GAAA,KAAgB,IAAK,CAAA,QAAA,CAAS,GAAG,CAAA;AAAA,IAClC,CAAC,IAAI,CAAA;AAAA,GACP,CAAA;AACA,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA,OAAA;AAAA,GACF,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"useTagsFollow.esm.js","sources":["../../src/hooks/useTagsFollow.ts"],"sourcesContent":["import React, { useCallback, useEffect } from 'react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../api';\n\nlet followedTags: string[] | undefined = undefined;\n\nexport const useTagsFollow = () => {\n const [tags, setTags] = React.useState<string[]>(followedTags ?? []);\n const [loading, setLoading] = React.useState(followedTags === undefined);\n const qetaApi = useApi(qetaApiRef);\n\n useEffect(() => {\n if (followedTags === undefined) {\n qetaApi.getFollowedTags().then(res => {\n followedTags = res.tags;\n setTags(res.tags);\n setLoading(false);\n });\n } else {\n setTags(followedTags);\n }\n }, [qetaApi]);\n\n const followTag = useCallback(\n (tag: string) => {\n qetaApi.followTag(tag).then(() => {\n setTags(prev => [...prev, tag]);\n followedTags?.push(tag);\n });\n },\n [qetaApi],\n );\n\n const unfollowTag = useCallback(\n (tag: string) => {\n qetaApi.unfollowTag(tag).then(() => {\n setTags(prev => prev.filter(t => t !== tag));\n followedTags = followedTags?.filter(t => t !== tag);\n });\n },\n [qetaApi],\n );\n\n const isFollowingTag = useCallback(\n (tag: string) => tags.includes(tag),\n [tags],\n );\n return {\n tags,\n followTag,\n unfollowTag,\n isFollowingTag,\n loading,\n };\n};\n"],"names":["React"],"mappings":";;;;AAIA,IAAI,YAAqC,GAAA,KAAA,CAAA;AAElC,MAAM,gBAAgB,MAAM;AACjC,EAAM,MAAA,CAAC,MAAM,OAAO,CAAA,GAAIA,eAAM,QAAmB,CAAA,YAAA,IAAgB,EAAE,CAAA;AACnE,EAAA,MAAM,CAAC,OAAS,EAAA,UAAU,IAAIA,cAAM,CAAA,QAAA,CAAS,iBAAiB,KAAS,CAAA,CAAA;AACvE,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA;AAEjC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,iBAAiB,KAAW,CAAA,EAAA;AAC9B,MAAQ,OAAA,CAAA,eAAA,EAAkB,CAAA,IAAA,CAAK,CAAO,GAAA,KAAA;AACpC,QAAA,YAAA,GAAe,GAAI,CAAA,IAAA;AACnB,QAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,OACjB,CAAA;AAAA,KACI,MAAA;AACL,MAAA,OAAA,CAAQ,YAAY,CAAA;AAAA;AACtB,GACF,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,SAAY,GAAA,WAAA;AAAA,IAChB,CAAC,GAAgB,KAAA;AACf,MAAA,OAAA,CAAQ,SAAU,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,MAAM;AAChC,QAAA,OAAA,CAAQ,CAAQ,IAAA,KAAA,CAAC,GAAG,IAAA,EAAM,GAAG,CAAC,CAAA;AAC9B,QAAA,YAAA,EAAc,KAAK,GAAG,CAAA;AAAA,OACvB,CAAA;AAAA,KACH;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,WAAc,GAAA,WAAA;AAAA,IAClB,CAAC,GAAgB,KAAA;AACf,MAAA,OAAA,CAAQ,WAAY,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,MAAM;AAClC,QAAA,OAAA,CAAQ,UAAQ,IAAK,CAAA,MAAA,CAAO,CAAK,CAAA,KAAA,CAAA,KAAM,GAAG,CAAC,CAAA;AAC3C,QAAA,YAAA,GAAe,YAAc,EAAA,MAAA,CAAO,CAAK,CAAA,KAAA,CAAA,KAAM,GAAG,CAAA;AAAA,OACnD,CAAA;AAAA,KACH;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,cAAiB,GAAA,WAAA;AAAA,IACrB,CAAC,GAAA,KAAgB,IAAK,CAAA,QAAA,CAAS,GAAG,CAAA;AAAA,IAClC,CAAC,IAAI;AAAA,GACP;AACA,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTranslation.esm.js","sources":["../../src/hooks/useTranslation.ts"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../translation';\n\nexport const useTranslation = () => {\n return useTranslationRef(qetaTranslationRef);\n};\n"],"names":[],"mappings":";;;AAGO,MAAM,iBAAiB,MAAM;AAClC,EAAA,OAAO,kBAAkB,kBAAkB,CAAA,CAAA;AAC7C;;;;"}
1
+ {"version":3,"file":"useTranslation.esm.js","sources":["../../src/hooks/useTranslation.ts"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../translation';\n\nexport const useTranslation = () => {\n return useTranslationRef(qetaTranslationRef);\n};\n"],"names":[],"mappings":";;;AAGO,MAAM,iBAAiB,MAAM;AAClC,EAAA,OAAO,kBAAkB,kBAAkB,CAAA;AAC7C;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useUserFollow.esm.js","sources":["../../src/hooks/useUserFollow.ts"],"sourcesContent":["import React, { useCallback, useEffect } from 'react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../api';\n\nlet followedUsers: string[] | undefined = undefined;\n\nexport const useUserFollow = () => {\n const [users, setUsers] = React.useState<string[]>(followedUsers ?? []);\n const [loading, setLoading] = React.useState(followedUsers === undefined);\n const qetaApi = useApi(qetaApiRef);\n\n useEffect(() => {\n if (followedUsers === undefined) {\n qetaApi.getFollowedUsers().then(res => {\n followedUsers = res.followedUserRefs;\n setUsers(res.followedUserRefs);\n setLoading(false);\n });\n } else {\n setUsers(followedUsers);\n }\n }, [qetaApi]);\n\n const followUser = useCallback(\n (user: string) => {\n qetaApi.followUser(user).then(() => {\n setUsers(prev => [...prev, user]);\n followedUsers?.push(user);\n });\n },\n [qetaApi],\n );\n\n const unfollowUser = useCallback(\n (user: string) => {\n qetaApi.unfollowUser(user).then(() => {\n setUsers(prev => prev.filter(t => t !== user));\n followedUsers = followedUsers?.filter(t => t !== user);\n });\n },\n [qetaApi],\n );\n\n const isFollowingUser = useCallback(\n (user: string) => users.includes(user),\n [users],\n );\n return {\n users,\n followUser,\n unfollowUser,\n isFollowingUser,\n loading,\n };\n};\n"],"names":["React"],"mappings":";;;;AAIA,IAAI,aAAsC,GAAA,KAAA,CAAA,CAAA;AAEnC,MAAM,gBAAgB,MAAM;AACjC,EAAM,MAAA,CAAC,OAAO,QAAQ,CAAA,GAAIA,eAAM,QAAmB,CAAA,aAAA,IAAiB,EAAE,CAAA,CAAA;AACtE,EAAA,MAAM,CAAC,OAAS,EAAA,UAAU,IAAIA,cAAM,CAAA,QAAA,CAAS,kBAAkB,KAAS,CAAA,CAAA,CAAA;AACxE,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA,CAAA;AAEjC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,kBAAkB,KAAW,CAAA,EAAA;AAC/B,MAAQ,OAAA,CAAA,gBAAA,EAAmB,CAAA,IAAA,CAAK,CAAO,GAAA,KAAA;AACrC,QAAA,aAAA,GAAgB,GAAI,CAAA,gBAAA,CAAA;AACpB,QAAA,QAAA,CAAS,IAAI,gBAAgB,CAAA,CAAA;AAC7B,QAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAAA,OACjB,CAAA,CAAA;AAAA,KACI,MAAA;AACL,MAAA,QAAA,CAAS,aAAa,CAAA,CAAA;AAAA,KACxB;AAAA,GACF,EAAG,CAAC,OAAO,CAAC,CAAA,CAAA;AAEZ,EAAA,MAAM,UAAa,GAAA,WAAA;AAAA,IACjB,CAAC,IAAiB,KAAA;AAChB,MAAA,OAAA,CAAQ,UAAW,CAAA,IAAI,CAAE,CAAA,IAAA,CAAK,MAAM;AAClC,QAAA,QAAA,CAAS,CAAQ,IAAA,KAAA,CAAC,GAAG,IAAA,EAAM,IAAI,CAAC,CAAA,CAAA;AAChC,QAAA,aAAA,EAAe,KAAK,IAAI,CAAA,CAAA;AAAA,OACzB,CAAA,CAAA;AAAA,KACH;AAAA,IACA,CAAC,OAAO,CAAA;AAAA,GACV,CAAA;AAEA,EAAA,MAAM,YAAe,GAAA,WAAA;AAAA,IACnB,CAAC,IAAiB,KAAA;AAChB,MAAA,OAAA,CAAQ,YAAa,CAAA,IAAI,CAAE,CAAA,IAAA,CAAK,MAAM;AACpC,QAAA,QAAA,CAAS,UAAQ,IAAK,CAAA,MAAA,CAAO,CAAK,CAAA,KAAA,CAAA,KAAM,IAAI,CAAC,CAAA,CAAA;AAC7C,QAAA,aAAA,GAAgB,aAAe,EAAA,MAAA,CAAO,CAAK,CAAA,KAAA,CAAA,KAAM,IAAI,CAAA,CAAA;AAAA,OACtD,CAAA,CAAA;AAAA,KACH;AAAA,IACA,CAAC,OAAO,CAAA;AAAA,GACV,CAAA;AAEA,EAAA,MAAM,eAAkB,GAAA,WAAA;AAAA,IACtB,CAAC,IAAA,KAAiB,KAAM,CAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACrC,CAAC,KAAK,CAAA;AAAA,GACR,CAAA;AACA,EAAO,OAAA;AAAA,IACL,KAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,OAAA;AAAA,GACF,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"useUserFollow.esm.js","sources":["../../src/hooks/useUserFollow.ts"],"sourcesContent":["import React, { useCallback, useEffect } from 'react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../api';\n\nlet followedUsers: string[] | undefined = undefined;\n\nexport const useUserFollow = () => {\n const [users, setUsers] = React.useState<string[]>(followedUsers ?? []);\n const [loading, setLoading] = React.useState(followedUsers === undefined);\n const qetaApi = useApi(qetaApiRef);\n\n useEffect(() => {\n if (followedUsers === undefined) {\n qetaApi.getFollowedUsers().then(res => {\n followedUsers = res.followedUserRefs;\n setUsers(res.followedUserRefs);\n setLoading(false);\n });\n } else {\n setUsers(followedUsers);\n }\n }, [qetaApi]);\n\n const followUser = useCallback(\n (user: string) => {\n qetaApi.followUser(user).then(() => {\n setUsers(prev => [...prev, user]);\n followedUsers?.push(user);\n });\n },\n [qetaApi],\n );\n\n const unfollowUser = useCallback(\n (user: string) => {\n qetaApi.unfollowUser(user).then(() => {\n setUsers(prev => prev.filter(t => t !== user));\n followedUsers = followedUsers?.filter(t => t !== user);\n });\n },\n [qetaApi],\n );\n\n const isFollowingUser = useCallback(\n (user: string) => users.includes(user),\n [users],\n );\n return {\n users,\n followUser,\n unfollowUser,\n isFollowingUser,\n loading,\n };\n};\n"],"names":["React"],"mappings":";;;;AAIA,IAAI,aAAsC,GAAA,KAAA,CAAA;AAEnC,MAAM,gBAAgB,MAAM;AACjC,EAAM,MAAA,CAAC,OAAO,QAAQ,CAAA,GAAIA,eAAM,QAAmB,CAAA,aAAA,IAAiB,EAAE,CAAA;AACtE,EAAA,MAAM,CAAC,OAAS,EAAA,UAAU,IAAIA,cAAM,CAAA,QAAA,CAAS,kBAAkB,KAAS,CAAA,CAAA;AACxE,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA;AAEjC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,kBAAkB,KAAW,CAAA,EAAA;AAC/B,MAAQ,OAAA,CAAA,gBAAA,EAAmB,CAAA,IAAA,CAAK,CAAO,GAAA,KAAA;AACrC,QAAA,aAAA,GAAgB,GAAI,CAAA,gBAAA;AACpB,QAAA,QAAA,CAAS,IAAI,gBAAgB,CAAA;AAC7B,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,OACjB,CAAA;AAAA,KACI,MAAA;AACL,MAAA,QAAA,CAAS,aAAa,CAAA;AAAA;AACxB,GACF,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,UAAa,GAAA,WAAA;AAAA,IACjB,CAAC,IAAiB,KAAA;AAChB,MAAA,OAAA,CAAQ,UAAW,CAAA,IAAI,CAAE,CAAA,IAAA,CAAK,MAAM;AAClC,QAAA,QAAA,CAAS,CAAQ,IAAA,KAAA,CAAC,GAAG,IAAA,EAAM,IAAI,CAAC,CAAA;AAChC,QAAA,aAAA,EAAe,KAAK,IAAI,CAAA;AAAA,OACzB,CAAA;AAAA,KACH;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,YAAe,GAAA,WAAA;AAAA,IACnB,CAAC,IAAiB,KAAA;AAChB,MAAA,OAAA,CAAQ,YAAa,CAAA,IAAI,CAAE,CAAA,IAAA,CAAK,MAAM;AACpC,QAAA,QAAA,CAAS,UAAQ,IAAK,CAAA,MAAA,CAAO,CAAK,CAAA,KAAA,CAAA,KAAM,IAAI,CAAC,CAAA;AAC7C,QAAA,aAAA,GAAgB,aAAe,EAAA,MAAA,CAAO,CAAK,CAAA,KAAA,CAAA,KAAM,IAAI,CAAA;AAAA,OACtD,CAAA;AAAA,KACH;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,eAAkB,GAAA,WAAA;AAAA,IACtB,CAAC,IAAA,KAAiB,KAAM,CAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACrC,CAAC,KAAK;AAAA,GACR;AACA,EAAO,OAAA;AAAA,IACL,KAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useVoting.esm.js","sources":["../../src/hooks/useVoting.ts"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { useAnalytics, useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../api';\nimport { useTranslation } from './useTranslation';\nimport { useSignal } from '@backstage/plugin-signals-react';\nimport {\n AnswerResponse,\n PostResponse,\n QetaSignal,\n} from '@drodil/backstage-plugin-qeta-common';\n\nexport function useVoting(resp: PostResponse | AnswerResponse) {\n const [entity, setEntity] = React.useState<PostResponse | AnswerResponse>(\n resp,\n );\n const [ownVote, setOwnVote] = React.useState(entity.ownVote ?? 0);\n const [correctAnswer, setCorrectAnswer] = useState(\n 'postId' in entity ? entity.correct : false,\n );\n const [score, setScore] = useState(entity.score);\n const analytics = useAnalytics();\n const qetaApi = useApi(qetaApiRef);\n const { t } = useTranslation();\n\n const isQuestion = 'title' in entity;\n const own = entity.own ?? false;\n\n const { lastSignal } = useSignal<QetaSignal>(\n isQuestion ? `qeta:question_${entity.id}` : `qeta:answer_${entity.id}`,\n );\n\n useEffect(() => {\n if (entity) {\n setScore(entity.score);\n }\n }, [entity]);\n\n useEffect(() => {\n if (\n lastSignal?.type === 'post_stats' ||\n lastSignal?.type === 'answer_stats'\n ) {\n setCorrectAnswer(lastSignal.correctAnswer);\n setScore(lastSignal.score);\n }\n }, [lastSignal]);\n\n const deletePostVote = (id: number) => {\n qetaApi.deletePostVote(id).then(response => {\n setOwnVote(0);\n analytics.captureEvent('vote', 'question', { value: 0 });\n setEntity(response);\n });\n };\n\n const deleteAnswerVote = (postId: number, id: number) => {\n qetaApi.deleteAnswerVote(postId, id).then(response => {\n setOwnVote(0);\n analytics.captureEvent('vote', 'answer', { value: 0 });\n setEntity(response);\n });\n };\n\n const voteUp = () => {\n if (isQuestion) {\n if (ownVote > 0) {\n deletePostVote(entity.id);\n return;\n }\n qetaApi.votePostUp(entity.id).then(response => {\n setOwnVote(1);\n analytics.captureEvent('vote', 'question', { value: 1 });\n setEntity(response);\n });\n } else if ('postId' in entity) {\n if (ownVote > 0) {\n deleteAnswerVote(entity.postId, entity.id);\n return;\n }\n qetaApi.voteAnswerUp(entity.postId, entity.id).then(response => {\n setOwnVote(1);\n analytics.captureEvent('vote', 'answer', { value: 1 });\n setEntity(response);\n });\n }\n };\n\n const voteDown = () => {\n if (isQuestion) {\n if (ownVote < 0) {\n deletePostVote(entity.id);\n return;\n }\n qetaApi.votePostDown(entity.id).then(response => {\n setOwnVote(-1);\n analytics.captureEvent('vote', 'question', { value: -1 });\n setEntity(response);\n });\n } else if ('postId' in entity) {\n if (ownVote < 0) {\n deleteAnswerVote(entity.postId, entity.id);\n return;\n }\n qetaApi.voteAnswerDown(entity.postId, entity.id).then(response => {\n setOwnVote(-1);\n analytics.captureEvent('vote', 'answer', { value: -1 });\n setEntity(response);\n });\n }\n };\n\n let correctTooltip: string = correctAnswer\n ? t('voteButtons.answer.markIncorrect')\n : t('voteButtons.answer.markCorrect');\n if (!entity?.own) {\n correctTooltip = correctAnswer ? t('voteButtons.answer.marked') : '';\n }\n\n let voteUpTooltip: string = isQuestion\n ? t('voteButtons.question.good')\n : t('voteButtons.answer.good');\n if (own) {\n voteUpTooltip = isQuestion\n ? t('voteButtons.question.own')\n : t('voteButtons.answer.own');\n }\n\n let voteDownTooltip: string = isQuestion\n ? t('voteButtons.question.bad')\n : t('voteButtons.answer.bad');\n if (own) {\n voteDownTooltip = voteUpTooltip;\n }\n\n const toggleCorrectAnswer = () => {\n if (!('postId' in entity)) {\n return;\n }\n if (correctAnswer) {\n qetaApi.markAnswerIncorrect(entity.postId, entity.id).then(response => {\n if (response) {\n setCorrectAnswer(false);\n }\n });\n } else {\n qetaApi.markAnswerCorrect(entity.postId, entity.id).then(response => {\n if (response) {\n setCorrectAnswer(true);\n }\n });\n }\n };\n\n return {\n entity,\n ownVote,\n correctAnswer,\n score,\n voteUp,\n voteDown,\n toggleCorrectAnswer,\n voteUpTooltip,\n voteDownTooltip,\n correctTooltip,\n };\n}\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"useVoting.esm.js","sources":["../../src/hooks/useVoting.ts"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { useAnalytics, useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../api';\nimport { useTranslation } from './useTranslation';\nimport { useSignal } from '@backstage/plugin-signals-react';\nimport {\n AnswerResponse,\n PostResponse,\n QetaSignal,\n} from '@drodil/backstage-plugin-qeta-common';\n\nexport function useVoting(resp: PostResponse | AnswerResponse) {\n const [entity, setEntity] = React.useState<PostResponse | AnswerResponse>(\n resp,\n );\n const [ownVote, setOwnVote] = React.useState(entity.ownVote ?? 0);\n const [correctAnswer, setCorrectAnswer] = useState(\n 'postId' in entity ? entity.correct : false,\n );\n const [score, setScore] = useState(entity.score);\n const analytics = useAnalytics();\n const qetaApi = useApi(qetaApiRef);\n const { t } = useTranslation();\n\n const isQuestion = 'title' in entity;\n const own = entity.own ?? false;\n\n const { lastSignal } = useSignal<QetaSignal>(\n isQuestion ? `qeta:question_${entity.id}` : `qeta:answer_${entity.id}`,\n );\n\n useEffect(() => {\n if (entity) {\n setScore(entity.score);\n }\n }, [entity]);\n\n useEffect(() => {\n if (\n lastSignal?.type === 'post_stats' ||\n lastSignal?.type === 'answer_stats'\n ) {\n setCorrectAnswer(lastSignal.correctAnswer);\n setScore(lastSignal.score);\n }\n }, [lastSignal]);\n\n const deletePostVote = (id: number) => {\n qetaApi.deletePostVote(id).then(response => {\n setOwnVote(0);\n analytics.captureEvent('vote', 'question', { value: 0 });\n setEntity(response);\n });\n };\n\n const deleteAnswerVote = (postId: number, id: number) => {\n qetaApi.deleteAnswerVote(postId, id).then(response => {\n setOwnVote(0);\n analytics.captureEvent('vote', 'answer', { value: 0 });\n setEntity(response);\n });\n };\n\n const voteUp = () => {\n if (isQuestion) {\n if (ownVote > 0) {\n deletePostVote(entity.id);\n return;\n }\n qetaApi.votePostUp(entity.id).then(response => {\n setOwnVote(1);\n analytics.captureEvent('vote', 'question', { value: 1 });\n setEntity(response);\n });\n } else if ('postId' in entity) {\n if (ownVote > 0) {\n deleteAnswerVote(entity.postId, entity.id);\n return;\n }\n qetaApi.voteAnswerUp(entity.postId, entity.id).then(response => {\n setOwnVote(1);\n analytics.captureEvent('vote', 'answer', { value: 1 });\n setEntity(response);\n });\n }\n };\n\n const voteDown = () => {\n if (isQuestion) {\n if (ownVote < 0) {\n deletePostVote(entity.id);\n return;\n }\n qetaApi.votePostDown(entity.id).then(response => {\n setOwnVote(-1);\n analytics.captureEvent('vote', 'question', { value: -1 });\n setEntity(response);\n });\n } else if ('postId' in entity) {\n if (ownVote < 0) {\n deleteAnswerVote(entity.postId, entity.id);\n return;\n }\n qetaApi.voteAnswerDown(entity.postId, entity.id).then(response => {\n setOwnVote(-1);\n analytics.captureEvent('vote', 'answer', { value: -1 });\n setEntity(response);\n });\n }\n };\n\n let correctTooltip: string = correctAnswer\n ? t('voteButtons.answer.markIncorrect')\n : t('voteButtons.answer.markCorrect');\n if (!entity?.own) {\n correctTooltip = correctAnswer ? t('voteButtons.answer.marked') : '';\n }\n\n let voteUpTooltip: string = isQuestion\n ? t('voteButtons.question.good')\n : t('voteButtons.answer.good');\n if (own) {\n voteUpTooltip = isQuestion\n ? t('voteButtons.question.own')\n : t('voteButtons.answer.own');\n }\n\n let voteDownTooltip: string = isQuestion\n ? t('voteButtons.question.bad')\n : t('voteButtons.answer.bad');\n if (own) {\n voteDownTooltip = voteUpTooltip;\n }\n\n const toggleCorrectAnswer = () => {\n if (!('postId' in entity)) {\n return;\n }\n if (correctAnswer) {\n qetaApi.markAnswerIncorrect(entity.postId, entity.id).then(response => {\n if (response) {\n setCorrectAnswer(false);\n }\n });\n } else {\n qetaApi.markAnswerCorrect(entity.postId, entity.id).then(response => {\n if (response) {\n setCorrectAnswer(true);\n }\n });\n }\n };\n\n return {\n entity,\n ownVote,\n correctAnswer,\n score,\n voteUp,\n voteDown,\n toggleCorrectAnswer,\n voteUpTooltip,\n voteDownTooltip,\n correctTooltip,\n };\n}\n"],"names":["React"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"routes.esm.js","sources":["../src/routes.ts"],"sourcesContent":["import { createRouteRef, createSubRouteRef } from '@backstage/core-plugin-api';\n\nexport const qetaRouteRef = createRouteRef({\n id: 'qeta',\n});\n\nexport const askRouteRef = createSubRouteRef({\n id: 'qeta.ask',\n parent: qetaRouteRef,\n path: '/ask',\n});\n\nexport const favoriteQuestionsRouteRef = createSubRouteRef({\n id: 'qeta.favoriteQuestions',\n parent: qetaRouteRef,\n path: '/questions/favorite',\n});\n\nexport const statisticsRouteRef = createSubRouteRef({\n id: 'qeta.statistics',\n parent: qetaRouteRef,\n path: '/statistics',\n});\n\nexport const questionsRouteRef = createSubRouteRef({\n id: 'qeta.questions',\n parent: qetaRouteRef,\n path: '/questions',\n});\n\nexport const questionRouteRef = createSubRouteRef({\n id: 'qeta.question',\n parent: qetaRouteRef,\n path: '/questions/:id',\n});\n\nexport const collectionsRouteRef = createSubRouteRef({\n id: 'qeta.collections',\n parent: qetaRouteRef,\n path: '/collections',\n});\n\nexport const collectionRouteRef = createSubRouteRef({\n id: 'qeta.collection',\n parent: qetaRouteRef,\n path: '/collections/:id',\n});\n\nexport const collectionCreateRouteRef = createSubRouteRef({\n id: 'qeta.collection.create',\n parent: qetaRouteRef,\n path: '/collections/create',\n});\n\nexport const collectionEditRouteRef = createSubRouteRef({\n id: 'qeta.collection.edit',\n parent: qetaRouteRef,\n path: '/collections/:id/edit',\n});\n\nexport const writeRouteRef = createSubRouteRef({\n id: 'qeta.write',\n parent: qetaRouteRef,\n path: '/write',\n});\n\nexport const articlesRouteRef = createSubRouteRef({\n id: 'qeta.articles',\n parent: qetaRouteRef,\n path: '/articles',\n});\n\nexport const articleRouteRef = createSubRouteRef({\n id: 'qeta.article',\n parent: qetaRouteRef,\n path: '/articles/:id',\n});\n\nexport const usersRouteRef = createSubRouteRef({\n id: 'qeta.users',\n parent: qetaRouteRef,\n path: '/users',\n});\n\nexport const userRouteRef = createSubRouteRef({\n id: 'qeta.user',\n parent: qetaRouteRef,\n path: '/users/*',\n});\n\nexport const editQuestionRouteRef = createSubRouteRef({\n id: 'qeta.editQuestion',\n parent: qetaRouteRef,\n path: '/questions/:id/edit',\n});\n\nexport const editArticleRouteRef = createSubRouteRef({\n id: 'qeta.editArticle',\n parent: qetaRouteRef,\n path: '/articles/:id/edit',\n});\n\nexport const tagsRouteRef = createSubRouteRef({\n id: 'qeta.tags',\n parent: qetaRouteRef,\n path: '/tags',\n});\n\nexport const tagRouteRef = createSubRouteRef({\n id: 'qeta.tag',\n parent: qetaRouteRef,\n path: '/tags/:tag',\n});\n\nexport const entitiesRouteRef = createSubRouteRef({\n id: 'qeta.entities',\n parent: qetaRouteRef,\n path: '/entities',\n});\n\nexport const entityRouteRef = createSubRouteRef({\n id: 'qeta.entity',\n parent: qetaRouteRef,\n path: '/entities/:entityRef',\n});\n\nexport const moderatorRouteRef = createSubRouteRef({\n id: 'qeta.moderator',\n parent: qetaRouteRef,\n path: '/moderate',\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routes.esm.js","sources":["../src/routes.ts"],"sourcesContent":["import { createRouteRef, createSubRouteRef } from '@backstage/core-plugin-api';\n\nexport const qetaRouteRef = createRouteRef({\n id: 'qeta',\n});\n\nexport const askRouteRef = createSubRouteRef({\n id: 'qeta.ask',\n parent: qetaRouteRef,\n path: '/ask',\n});\n\nexport const favoriteQuestionsRouteRef = createSubRouteRef({\n id: 'qeta.favoriteQuestions',\n parent: qetaRouteRef,\n path: '/questions/favorite',\n});\n\nexport const statisticsRouteRef = createSubRouteRef({\n id: 'qeta.statistics',\n parent: qetaRouteRef,\n path: '/statistics',\n});\n\nexport const questionsRouteRef = createSubRouteRef({\n id: 'qeta.questions',\n parent: qetaRouteRef,\n path: '/questions',\n});\n\nexport const questionRouteRef = createSubRouteRef({\n id: 'qeta.question',\n parent: qetaRouteRef,\n path: '/questions/:id',\n});\n\nexport const collectionsRouteRef = createSubRouteRef({\n id: 'qeta.collections',\n parent: qetaRouteRef,\n path: '/collections',\n});\n\nexport const collectionRouteRef = createSubRouteRef({\n id: 'qeta.collection',\n parent: qetaRouteRef,\n path: '/collections/:id',\n});\n\nexport const collectionCreateRouteRef = createSubRouteRef({\n id: 'qeta.collection.create',\n parent: qetaRouteRef,\n path: '/collections/create',\n});\n\nexport const collectionEditRouteRef = createSubRouteRef({\n id: 'qeta.collection.edit',\n parent: qetaRouteRef,\n path: '/collections/:id/edit',\n});\n\nexport const writeRouteRef = createSubRouteRef({\n id: 'qeta.write',\n parent: qetaRouteRef,\n path: '/write',\n});\n\nexport const articlesRouteRef = createSubRouteRef({\n id: 'qeta.articles',\n parent: qetaRouteRef,\n path: '/articles',\n});\n\nexport const articleRouteRef = createSubRouteRef({\n id: 'qeta.article',\n parent: qetaRouteRef,\n path: '/articles/:id',\n});\n\nexport const usersRouteRef = createSubRouteRef({\n id: 'qeta.users',\n parent: qetaRouteRef,\n path: '/users',\n});\n\nexport const userRouteRef = createSubRouteRef({\n id: 'qeta.user',\n parent: qetaRouteRef,\n path: '/users/*',\n});\n\nexport const editQuestionRouteRef = createSubRouteRef({\n id: 'qeta.editQuestion',\n parent: qetaRouteRef,\n path: '/questions/:id/edit',\n});\n\nexport const editArticleRouteRef = createSubRouteRef({\n id: 'qeta.editArticle',\n parent: qetaRouteRef,\n path: '/articles/:id/edit',\n});\n\nexport const tagsRouteRef = createSubRouteRef({\n id: 'qeta.tags',\n parent: qetaRouteRef,\n path: '/tags',\n});\n\nexport const tagRouteRef = createSubRouteRef({\n id: 'qeta.tag',\n parent: qetaRouteRef,\n path: '/tags/:tag',\n});\n\nexport const entitiesRouteRef = createSubRouteRef({\n id: 'qeta.entities',\n parent: qetaRouteRef,\n path: '/entities',\n});\n\nexport const entityRouteRef = createSubRouteRef({\n id: 'qeta.entity',\n parent: qetaRouteRef,\n path: '/entities/:entityRef',\n});\n\nexport const moderatorRouteRef = createSubRouteRef({\n id: 'qeta.moderator',\n parent: qetaRouteRef,\n path: '/moderate',\n});\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"translation.esm.js","sources":["../src/translation.ts"],"sourcesContent":["import {\n createTranslationRef,\n createTranslationResource,\n} from '@backstage/core-plugin-api/alpha';\n\n/** @alpha */\nexport const qetaTranslationRef = createTranslationRef({\n id: 'qeta',\n messages: {\n pluginName: 'Q&A',\n answerList: {\n errorLoading: 'Could not load answers',\n noAnswers: 'No answers',\n limitSelect: 'Answers per page',\n },\n common: {\n post: 'post',\n question: 'question',\n article: 'article',\n score: '{{score}} score',\n comments: 'Comments',\n anonymousAuthor: 'Anonymous',\n answers_zero: 'No answers',\n answers_one: '{{count}} answer',\n answers_other: '{{count}} answers',\n views_zero: 'Viewed {{count}} times',\n views_one: 'Viewed {{count}} time',\n views_other: 'Viewed {{count}} times',\n viewsShort_zero: '0 views',\n viewsShort_one: '{{count}} view',\n viewsShort_other: '{{count}} views',\n votes_zero: '0 votes',\n votes_one: '{{count}} vote',\n votes_other: '{{count}} votes',\n posts_zero: 'No {{itemType}}s',\n posts_one: '{{count}} {{itemType}}',\n posts_other: '{{count}} {{itemType}}s',\n collections_zero: 'No collections',\n collections_one: '{{count}} collection',\n collections_other: '{{count}} collections',\n followers_zero: 'No followers',\n followers_one: '{{count}} follower',\n followers_other: '{{count}} followers',\n },\n answer: {\n questionTitle: 'Q: {{question}}',\n answeredTime: 'answered',\n },\n answerContainer: {\n title: {\n answersBy: 'Answers by',\n answersAbout: 'Answers about',\n answersTagged: `Answers tagged with {{tags}}`,\n },\n search: {\n label: 'Search answer',\n placeholder: 'Search...',\n },\n },\n anonymousCheckbox: {\n tooltip:\n \"By enabling this, other users won't be able to see you as an author\",\n answerAnonymously: 'Answer anonymously',\n postAnonymously: 'Post anonymously',\n },\n fileInput: {\n label: 'Header image',\n helperText: 'URL of the header image to be used',\n uploadHeaderImage: 'Upload image',\n preview: 'Preview image',\n },\n collectionForm: {\n errorPosting: 'Could not create collection',\n titleInput: {\n label: 'Title',\n helperText: 'Name of the colleciton',\n },\n descriptionInput: {\n placeholder: 'Collection description, what does it contain?',\n },\n submit: {\n existingCollection: 'Save',\n newCollection: 'Create',\n },\n },\n postForm: {\n errorPosting: 'Could not post {{type}}',\n uploadHeaderImage: 'Upload header image',\n titleInput: {\n label: 'Title',\n helperText:\n 'Write good title for your {{type}} that people can understand',\n },\n contentInput: {\n placeholder: 'Your {{type}}',\n },\n submit: {\n existingPost: 'Save',\n newPost: 'Post',\n },\n },\n answerForm: {\n errorPosting: 'Could not post answer',\n contentInput: {\n placeholder: 'Your answer',\n },\n submit: {\n existingAnswer: 'Save',\n newAnswer: 'Post',\n },\n },\n entitiesInput: {\n label: 'Entities',\n placeholder: 'Type or select entities',\n helperText: 'Add up to {{max}} entities this question relates to',\n },\n tagsInput: {\n label: 'Tags',\n placeholder: 'Type or select tags',\n helperText: 'Add up to {{max}} tags to categorize your question',\n },\n askPage: {\n title: {\n existingQuestion: 'Edit question',\n entityQuestion: 'Ask a question about {{entity}}',\n newQuestion: 'Ask a question',\n },\n },\n writePage: {\n title: {\n existingArticle: 'Edit article',\n entityArticle: 'Write an article about {{entity}}',\n newArticle: 'New article',\n },\n },\n collectionCreatePage: {\n title: {\n existingCollection: 'Edit collection',\n newCollection: 'New collection',\n },\n },\n askQuestionButton: {\n title: 'Ask a question',\n },\n addToCollectionButton: {\n title: 'Collections',\n manage: 'Add or remove this post from collections',\n close: 'Close',\n },\n writeArticleButton: {\n title: 'Write an article',\n },\n createCollectionButton: {\n title: 'Create a collection',\n },\n commentList: {\n deleteLink: 'delete',\n },\n commentSection: {\n input: {\n placeholder: 'Your comment',\n },\n addComment: 'Add a comment',\n post: 'Post',\n },\n editTagModal: {\n title: 'Edit tag {{tag}}',\n description: 'Tag description',\n errorPosting: 'Failed to edit',\n saveButton: 'Save',\n cancelButton: 'Cancel',\n },\n deleteModal: {\n title: {\n question: 'Are you sure you want to delete this post?',\n answer: 'Are you sure you want to delete this answer?',\n collection: 'Are you sure you want to delete this collection?',\n },\n errorDeleting: 'Failed to delete',\n deleteButton: 'Delete',\n cancelButton: 'Cancel',\n },\n favoritePage: {\n title: 'Favorited posts',\n },\n leftMenu: {\n buttonLabel: 'Menu',\n home: 'Home',\n questions: 'Questions',\n articles: 'Articles',\n profile: 'Profile',\n tags: 'Tags',\n entities: 'Entities',\n favoriteQuestions: 'Favorites',\n statistics: 'Statistics',\n collections: 'Collections',\n content: 'Content',\n community: 'Community',\n users: 'Users',\n manage: 'Manage',\n moderate: 'Moderate',\n },\n moderatorPage: {\n title: 'Moderate',\n tools: 'Tools',\n templates: 'Templates',\n templatesInfo:\n 'Templates can be used to prefill question content for the user',\n },\n suggestionsCard: {\n title: 'Suggestions',\n noCorrectAnswer:\n 'Your question \"{{title}}\" does not have a correct answer',\n newQuestion: 'Do you have an answer for \"{{title}}\"?',\n newArticle: 'You might like to read \"{{title}}\"',\n },\n homePage: {\n title: 'Home',\n },\n impactCard: {\n title: 'Your impact',\n views: 'views',\n contributions: 'Your contributions helped {{lastWeek}} people this week',\n },\n rightMenu: {\n followedEntities: 'Followed entities',\n followedTags: 'Followed tags',\n followedCollections: 'Followed collections',\n followedUsers: 'Followed users',\n },\n highlights: {\n loadError: 'Failed to load questions',\n own: {\n title: 'Your latest questions',\n noQuestionsLabel: 'No questions',\n },\n hotQuestions: {\n title: 'Hot questions',\n noQuestionsLabel: 'No questions',\n },\n hotArticles: {\n title: 'Hot articles',\n noArticlesLabel: 'No articles',\n },\n unanswered: {\n title: 'Unanswered questions',\n noQuestionsLabel: 'No unanswered questions',\n },\n incorrect: {\n title: 'Questions without correct answer',\n noQuestionsLabel: 'No questions without correct answers',\n },\n },\n questionsPage: {\n title: 'All questions',\n },\n articlesPage: {\n title: 'All articles',\n },\n userLink: {\n anonymous: 'Anonymous',\n },\n articlePage: {\n notFound: 'Could not find the article',\n errorLoading: 'Could not load article',\n editButton: 'Edit this article',\n deleteButton: 'Delete this article',\n },\n templateList: {\n errorLoading: 'Could not load templates',\n editButton: 'Edit',\n deleteButton: 'Delete',\n createButton: 'Create',\n errorPosting: 'Could not post template',\n noTemplates: 'No templates',\n noTemplatesDescription: 'Create a new template to get started',\n titleInput: {\n label: 'Title',\n helperText: 'Name of the template',\n },\n descriptionInput: {\n label: 'Description',\n helperText: 'Template description, what is it used for?',\n },\n questionTitleInput: {\n label: 'Default question title',\n helperText:\n 'Question title to be used when creating a question with this template',\n },\n questionContentInput: {\n placeholder:\n 'Question content to be used when creating a question with this template',\n },\n submit: {\n existingTemplate: 'Save',\n newTemplate: 'Create',\n },\n },\n templateSelectList: {\n selectButton: 'Choose',\n title: 'Create a question from template',\n genericQuestion: 'Generic question',\n genericQuestionDescription: 'Create a generic question',\n },\n pagination: {\n defaultTooltip: 'Number of items',\n },\n collectionsPage: {\n title: 'Collections',\n search: {\n label: 'Search collection',\n placeholder: 'Search...',\n },\n },\n collectionPage: {\n description: 'Description',\n info: 'You can add questions and articles to the collection from question and article pages',\n },\n questionPage: {\n errorLoading: 'Could not load question',\n editButton: 'Edit',\n notFound: 'Could not find the question',\n sortAnswers: {\n label: 'Sort answers',\n default: 'Default',\n createdDesc: 'Created (desc)',\n createdAsc: 'Created (asc)',\n scoreDesc: 'Score (desc)',\n scoreAsc: 'Score (asc)',\n commentsDesc: 'Comments (desc)',\n commentsAsc: 'Comments (asc)',\n authorDesc: 'Author (desc)',\n authorAsc: 'Author (asc)',\n updatedDesc: 'Updated (desc)',\n updatedAsc: 'Updated (asc)',\n },\n },\n authorBox: {\n postedAtTime: 'Posted',\n updatedAtTime: 'Updated',\n updatedBy: 'by',\n },\n favorite: {\n remove: 'Remove this post from favorites',\n add: 'Mark this post as favorite',\n },\n link: {\n post: 'Copy link to this post to clipboard',\n answer: 'Copy link to this answer to clipboard',\n aria: 'Copy link to clipboard',\n },\n voteButtons: {\n answer: {\n markCorrect: 'Mark this answer correct',\n markIncorrect: 'Mark this answer incorrect',\n marked: 'This answer has been marked as correct',\n good: 'This answer is good',\n bad: 'This answer is not good',\n own: 'You cannot vote your own answer',\n },\n question: {\n good: 'This post is good',\n bad: 'This post is not good',\n own: 'You cannot vote your own post',\n },\n },\n datePicker: {\n from: 'From date',\n to: 'To date',\n invalidRange:\n \"Date range invalid, 'To date' should be greater than 'From date'\",\n range: {\n label: 'Date range',\n default: 'Select',\n last7days: 'Last 7 days',\n last30days: 'Last 30 days',\n custom: 'Custom',\n },\n },\n ranking: {\n top: 'Rank this question to the top in this collection',\n bottom: 'Rank this question to the bottom in this collection',\n up: 'Rank this question up in this collection',\n down: 'Rank this question down in this collection',\n },\n filterPanel: {\n filterButton: 'Filter',\n noAnswers: {\n label: 'No answers',\n },\n noCorrectAnswers: {\n label: 'No correct answers',\n },\n noVotes: {\n label: 'No votes',\n },\n quickFilters: {\n label: 'Quick filters',\n },\n starredEntities: {\n label: 'Starred entities',\n },\n ownedEntities: {\n label: 'Owned entities',\n },\n entitiesRelation: {\n label: 'Entities relation',\n },\n toggleEntityRelation: {\n and: 'Change to only with all selected entities (AND)',\n or: 'Change to with any selected entities (OR)',\n },\n toggleTagRelation: {\n and: 'Change to only with all selected tags (AND)',\n or: 'Change to with any selected tags (OR)',\n },\n orderBy: {\n rank: 'Rank',\n label: 'Order by',\n title: 'Title',\n created: 'Created',\n views: 'Views',\n score: 'Score',\n trend: 'Trend',\n answers: 'Answers',\n updated: 'Updated',\n },\n order: {\n label: 'Order',\n asc: 'Ascending',\n desc: 'Descending',\n },\n filters: {\n label: 'Filters',\n entity: {\n label: 'Entity',\n placeholder: 'Type or select entity',\n },\n tag: {\n label: 'Tag',\n placeholder: 'Type or select tag',\n },\n },\n },\n postsList: {\n errorLoading: 'Could not load {{itemType}}s',\n postsPerPage: '{{itemType}}s per page',\n },\n postsContainer: {\n title: {\n by: `{{itemType}}s by`,\n about: '{{itemType}}s about',\n tagged: `{{itemType}} tagged with {{tags}}`,\n favorite: 'Your favorite {{itemType}}s',\n },\n search: {\n label: 'Search {{itemType}}',\n placeholder: 'Search...',\n },\n noItems: 'No {{itemType}}s',\n createButton: 'Go ahead and create one!',\n },\n questionsTable: {\n errorLoading: 'Could not load questions',\n latest: 'Latest',\n mostViewed: 'Most viewed',\n favorites: 'Favorites',\n cells: {\n title: 'Title',\n author: 'Author',\n asked: 'Asked',\n updated: 'Last updated',\n },\n },\n statistics: {\n errorLoading: 'Could not load statistics',\n notAvailable: 'Statistics are unavailable',\n ranking: 'User ranking 🏆',\n mostQuestions: {\n title: 'Most questions',\n description: 'People who have posted most questions',\n },\n mostAnswers: {\n title: 'Most answers',\n description: 'People who have posted most answers',\n },\n topVotedQuestions: {\n title: 'Top voted questions',\n description: 'People who have the highest rated questions',\n },\n topVotedAnswers: {\n title: 'Top voted answers',\n description: 'People who have the highest rated answers',\n },\n topVotedCorrectAnswers: {\n title: 'Top voted correct answers',\n description: 'People who have the highest rated correct answers',\n },\n },\n tagPage: {\n errorLoading: 'Could not load tags',\n defaultTitle: 'Tags',\n search: {\n label: 'Search tag',\n placeholder: 'Search...',\n },\n tags_zero: 'No tags',\n tags_one: '{{count}} tag',\n tags_other: '{{count}} tags',\n },\n entitiesPage: {\n errorLoading: 'Could not load entities',\n defaultTitle: 'Entities',\n search: {\n label: 'Search entity',\n placeholder: 'Search...',\n },\n entities_zero: 'No entities',\n entities_one: '{{count}} entity',\n entities_other: '{{count}} entities',\n },\n aiAnswerCard: {\n regenerate: 'Regenerate this answer',\n answer: 'Answer from {{name}}',\n summary: 'Summary by {{name}}',\n show: 'Show',\n hide: 'Hide',\n loading: 'Thinking...',\n },\n usersPage: {\n title: 'Users',\n errorLoading: 'Could not load users',\n defaultTitle: 'users',\n search: {\n label: 'Search user',\n placeholder: 'Search...',\n },\n users_zero: 'No users',\n users_one: '{{count}} user',\n users_other: '{{count}} users',\n },\n userPage: {\n profileTab: 'Profile',\n statistics: 'Statistics',\n questions: 'Questions',\n answers: 'Answers',\n collections: 'Collections',\n articles: 'Articles',\n },\n stats: {\n noStats: 'No statistics available. Check back later!',\n questions: 'Questions',\n answers: 'Answers',\n comments: 'Comments',\n votes: 'Votes',\n views: 'Views',\n articles: 'Articles',\n followers: 'Followers',\n users: 'Users',\n tags: 'Tags',\n },\n collectionButton: {\n follow: 'Follow',\n unfollow: 'Unfollow',\n tooltip:\n 'By following a collection, you will get notified when ever a new post is added to the collection',\n },\n tagButton: {\n follow: 'Follow',\n unfollow: 'Unfollow',\n edit: 'Edit',\n tooltip:\n 'By following a tag, you will get notified when ever a new post with that tag is posted',\n },\n entityButton: {\n follow: 'Follow',\n unfollow: 'Unfollow',\n tooltip:\n 'By following an entity, you will get notified when ever a new post for that entity is posted',\n },\n userButton: {\n follow: 'Follow',\n unfollow: 'Unfollow',\n tooltip:\n 'By following a user, you will get notified when ever a new post by that user is posted',\n },\n },\n});\n\nexport const qetaTranslations = createTranslationResource({\n ref: qetaTranslationRef,\n translations: {},\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"translation.esm.js","sources":["../src/translation.ts"],"sourcesContent":["import {\n createTranslationRef,\n createTranslationResource,\n} from '@backstage/core-plugin-api/alpha';\n\n/** @alpha */\nexport const qetaTranslationRef = createTranslationRef({\n id: 'qeta',\n messages: {\n pluginName: 'Q&A',\n answerList: {\n errorLoading: 'Could not load answers',\n noAnswers: 'No answers',\n limitSelect: 'Answers per page',\n },\n common: {\n post: 'post',\n question: 'question',\n article: 'article',\n score: '{{score}} score',\n comments: 'Comments',\n anonymousAuthor: 'Anonymous',\n answers_zero: 'No answers',\n answers_one: '{{count}} answer',\n answers_other: '{{count}} answers',\n views_zero: 'Viewed {{count}} times',\n views_one: 'Viewed {{count}} time',\n views_other: 'Viewed {{count}} times',\n viewsShort_zero: '0 views',\n viewsShort_one: '{{count}} view',\n viewsShort_other: '{{count}} views',\n votes_zero: '0 votes',\n votes_one: '{{count}} vote',\n votes_other: '{{count}} votes',\n posts_zero: 'No {{itemType}}s',\n posts_one: '{{count}} {{itemType}}',\n posts_other: '{{count}} {{itemType}}s',\n collections_zero: 'No collections',\n collections_one: '{{count}} collection',\n collections_other: '{{count}} collections',\n followers_zero: 'No followers',\n followers_one: '{{count}} follower',\n followers_other: '{{count}} followers',\n },\n answer: {\n questionTitle: 'Q: {{question}}',\n answeredTime: 'answered',\n },\n answerContainer: {\n title: {\n answersBy: 'Answers by',\n answersAbout: 'Answers about',\n answersTagged: `Answers tagged with {{tags}}`,\n },\n search: {\n label: 'Search answer',\n placeholder: 'Search...',\n },\n },\n anonymousCheckbox: {\n tooltip:\n \"By enabling this, other users won't be able to see you as an author\",\n answerAnonymously: 'Answer anonymously',\n postAnonymously: 'Post anonymously',\n },\n fileInput: {\n label: 'Header image',\n helperText: 'URL of the header image to be used',\n uploadHeaderImage: 'Upload image',\n preview: 'Preview image',\n },\n collectionForm: {\n errorPosting: 'Could not create collection',\n titleInput: {\n label: 'Title',\n helperText: 'Name of the colleciton',\n },\n descriptionInput: {\n placeholder: 'Collection description, what does it contain?',\n },\n submit: {\n existingCollection: 'Save',\n newCollection: 'Create',\n },\n },\n postForm: {\n errorPosting: 'Could not post {{type}}',\n uploadHeaderImage: 'Upload header image',\n titleInput: {\n label: 'Title',\n helperText:\n 'Write good title for your {{type}} that people can understand',\n },\n contentInput: {\n placeholder: 'Your {{type}}',\n },\n submit: {\n existingPost: 'Save',\n newPost: 'Post',\n },\n },\n answerForm: {\n errorPosting: 'Could not post answer',\n contentInput: {\n placeholder: 'Your answer',\n },\n submit: {\n existingAnswer: 'Save',\n newAnswer: 'Post',\n },\n },\n entitiesInput: {\n label: 'Entities',\n placeholder: 'Type or select entities',\n helperText: 'Add up to {{max}} entities this question relates to',\n },\n tagsInput: {\n label: 'Tags',\n placeholder: 'Type or select tags',\n helperText: 'Add up to {{max}} tags to categorize your question',\n },\n askPage: {\n title: {\n existingQuestion: 'Edit question',\n entityQuestion: 'Ask a question about {{entity}}',\n newQuestion: 'Ask a question',\n },\n },\n writePage: {\n title: {\n existingArticle: 'Edit article',\n entityArticle: 'Write an article about {{entity}}',\n newArticle: 'New article',\n },\n },\n collectionCreatePage: {\n title: {\n existingCollection: 'Edit collection',\n newCollection: 'New collection',\n },\n },\n askQuestionButton: {\n title: 'Ask a question',\n },\n addToCollectionButton: {\n title: 'Collections',\n manage: 'Add or remove this post from collections',\n close: 'Close',\n },\n writeArticleButton: {\n title: 'Write an article',\n },\n createCollectionButton: {\n title: 'Create a collection',\n },\n commentList: {\n deleteLink: 'delete',\n },\n commentSection: {\n input: {\n placeholder: 'Your comment',\n },\n addComment: 'Add a comment',\n post: 'Post',\n },\n editTagModal: {\n title: 'Edit tag {{tag}}',\n description: 'Tag description',\n errorPosting: 'Failed to edit',\n saveButton: 'Save',\n cancelButton: 'Cancel',\n },\n deleteModal: {\n title: {\n question: 'Are you sure you want to delete this post?',\n answer: 'Are you sure you want to delete this answer?',\n collection: 'Are you sure you want to delete this collection?',\n },\n errorDeleting: 'Failed to delete',\n deleteButton: 'Delete',\n cancelButton: 'Cancel',\n },\n favoritePage: {\n title: 'Favorited posts',\n },\n leftMenu: {\n buttonLabel: 'Menu',\n home: 'Home',\n questions: 'Questions',\n articles: 'Articles',\n profile: 'Profile',\n tags: 'Tags',\n entities: 'Entities',\n favoriteQuestions: 'Favorites',\n statistics: 'Statistics',\n collections: 'Collections',\n content: 'Content',\n community: 'Community',\n users: 'Users',\n manage: 'Manage',\n moderate: 'Moderate',\n },\n moderatorPage: {\n title: 'Moderate',\n tools: 'Tools',\n templates: 'Templates',\n templatesInfo:\n 'Templates can be used to prefill question content for the user',\n },\n suggestionsCard: {\n title: 'Suggestions',\n noCorrectAnswer:\n 'Your question \"{{title}}\" does not have a correct answer',\n newQuestion: 'Do you have an answer for \"{{title}}\"?',\n newArticle: 'You might like to read \"{{title}}\"',\n },\n homePage: {\n title: 'Home',\n },\n impactCard: {\n title: 'Your impact',\n views: 'views',\n contributions: 'Your contributions helped {{lastWeek}} people this week',\n },\n rightMenu: {\n followedEntities: 'Followed entities',\n followedTags: 'Followed tags',\n followedCollections: 'Followed collections',\n followedUsers: 'Followed users',\n },\n highlights: {\n loadError: 'Failed to load questions',\n own: {\n title: 'Your latest questions',\n noQuestionsLabel: 'No questions',\n },\n hotQuestions: {\n title: 'Hot questions',\n noQuestionsLabel: 'No questions',\n },\n hotArticles: {\n title: 'Hot articles',\n noArticlesLabel: 'No articles',\n },\n unanswered: {\n title: 'Unanswered questions',\n noQuestionsLabel: 'No unanswered questions',\n },\n incorrect: {\n title: 'Questions without correct answer',\n noQuestionsLabel: 'No questions without correct answers',\n },\n },\n questionsPage: {\n title: 'All questions',\n },\n articlesPage: {\n title: 'All articles',\n },\n userLink: {\n anonymous: 'Anonymous',\n },\n articlePage: {\n notFound: 'Could not find the article',\n errorLoading: 'Could not load article',\n editButton: 'Edit this article',\n deleteButton: 'Delete this article',\n },\n templateList: {\n errorLoading: 'Could not load templates',\n editButton: 'Edit',\n deleteButton: 'Delete',\n createButton: 'Create',\n errorPosting: 'Could not post template',\n noTemplates: 'No templates',\n noTemplatesDescription: 'Create a new template to get started',\n titleInput: {\n label: 'Title',\n helperText: 'Name of the template',\n },\n descriptionInput: {\n label: 'Description',\n helperText: 'Template description, what is it used for?',\n },\n questionTitleInput: {\n label: 'Default question title',\n helperText:\n 'Question title to be used when creating a question with this template',\n },\n questionContentInput: {\n placeholder:\n 'Question content to be used when creating a question with this template',\n },\n submit: {\n existingTemplate: 'Save',\n newTemplate: 'Create',\n },\n },\n templateSelectList: {\n selectButton: 'Choose',\n title: 'Create a question from template',\n genericQuestion: 'Generic question',\n genericQuestionDescription: 'Create a generic question',\n },\n pagination: {\n defaultTooltip: 'Number of items',\n },\n collectionsPage: {\n title: 'Collections',\n search: {\n label: 'Search collection',\n placeholder: 'Search...',\n },\n },\n collectionPage: {\n description: 'Description',\n info: 'You can add questions and articles to the collection from question and article pages',\n },\n questionPage: {\n errorLoading: 'Could not load question',\n editButton: 'Edit',\n notFound: 'Could not find the question',\n sortAnswers: {\n label: 'Sort answers',\n default: 'Default',\n createdDesc: 'Created (desc)',\n createdAsc: 'Created (asc)',\n scoreDesc: 'Score (desc)',\n scoreAsc: 'Score (asc)',\n commentsDesc: 'Comments (desc)',\n commentsAsc: 'Comments (asc)',\n authorDesc: 'Author (desc)',\n authorAsc: 'Author (asc)',\n updatedDesc: 'Updated (desc)',\n updatedAsc: 'Updated (asc)',\n },\n },\n authorBox: {\n postedAtTime: 'Posted',\n updatedAtTime: 'Updated',\n updatedBy: 'by',\n },\n favorite: {\n remove: 'Remove this post from favorites',\n add: 'Mark this post as favorite',\n },\n link: {\n post: 'Copy link to this post to clipboard',\n answer: 'Copy link to this answer to clipboard',\n aria: 'Copy link to clipboard',\n },\n voteButtons: {\n answer: {\n markCorrect: 'Mark this answer correct',\n markIncorrect: 'Mark this answer incorrect',\n marked: 'This answer has been marked as correct',\n good: 'This answer is good',\n bad: 'This answer is not good',\n own: 'You cannot vote your own answer',\n },\n question: {\n good: 'This post is good',\n bad: 'This post is not good',\n own: 'You cannot vote your own post',\n },\n },\n datePicker: {\n from: 'From date',\n to: 'To date',\n invalidRange:\n \"Date range invalid, 'To date' should be greater than 'From date'\",\n range: {\n label: 'Date range',\n default: 'Select',\n last7days: 'Last 7 days',\n last30days: 'Last 30 days',\n custom: 'Custom',\n },\n },\n ranking: {\n top: 'Rank this question to the top in this collection',\n bottom: 'Rank this question to the bottom in this collection',\n up: 'Rank this question up in this collection',\n down: 'Rank this question down in this collection',\n },\n filterPanel: {\n filterButton: 'Filter',\n noAnswers: {\n label: 'No answers',\n },\n noCorrectAnswers: {\n label: 'No correct answers',\n },\n noVotes: {\n label: 'No votes',\n },\n quickFilters: {\n label: 'Quick filters',\n },\n starredEntities: {\n label: 'Starred entities',\n },\n ownedEntities: {\n label: 'Owned entities',\n },\n entitiesRelation: {\n label: 'Entities relation',\n },\n toggleEntityRelation: {\n and: 'Change to only with all selected entities (AND)',\n or: 'Change to with any selected entities (OR)',\n },\n toggleTagRelation: {\n and: 'Change to only with all selected tags (AND)',\n or: 'Change to with any selected tags (OR)',\n },\n orderBy: {\n rank: 'Rank',\n label: 'Order by',\n title: 'Title',\n created: 'Created',\n views: 'Views',\n score: 'Score',\n trend: 'Trend',\n answers: 'Answers',\n updated: 'Updated',\n },\n order: {\n label: 'Order',\n asc: 'Ascending',\n desc: 'Descending',\n },\n filters: {\n label: 'Filters',\n entity: {\n label: 'Entity',\n placeholder: 'Type or select entity',\n },\n tag: {\n label: 'Tag',\n placeholder: 'Type or select tag',\n },\n },\n },\n postsList: {\n errorLoading: 'Could not load {{itemType}}s',\n postsPerPage: '{{itemType}}s per page',\n },\n postsContainer: {\n title: {\n by: `{{itemType}}s by`,\n about: '{{itemType}}s about',\n tagged: `{{itemType}} tagged with {{tags}}`,\n favorite: 'Your favorite {{itemType}}s',\n },\n search: {\n label: 'Search {{itemType}}',\n placeholder: 'Search...',\n },\n noItems: 'No {{itemType}}s',\n createButton: 'Go ahead and create one!',\n },\n questionsTable: {\n errorLoading: 'Could not load questions',\n latest: 'Latest',\n mostViewed: 'Most viewed',\n favorites: 'Favorites',\n cells: {\n title: 'Title',\n author: 'Author',\n asked: 'Asked',\n updated: 'Last updated',\n },\n },\n statistics: {\n errorLoading: 'Could not load statistics',\n notAvailable: 'Statistics are unavailable',\n ranking: 'User ranking 🏆',\n mostQuestions: {\n title: 'Most questions',\n description: 'People who have posted most questions',\n },\n mostAnswers: {\n title: 'Most answers',\n description: 'People who have posted most answers',\n },\n topVotedQuestions: {\n title: 'Top voted questions',\n description: 'People who have the highest rated questions',\n },\n topVotedAnswers: {\n title: 'Top voted answers',\n description: 'People who have the highest rated answers',\n },\n topVotedCorrectAnswers: {\n title: 'Top voted correct answers',\n description: 'People who have the highest rated correct answers',\n },\n },\n tagPage: {\n errorLoading: 'Could not load tags',\n defaultTitle: 'Tags',\n search: {\n label: 'Search tag',\n placeholder: 'Search...',\n },\n tags_zero: 'No tags',\n tags_one: '{{count}} tag',\n tags_other: '{{count}} tags',\n },\n entitiesPage: {\n errorLoading: 'Could not load entities',\n defaultTitle: 'Entities',\n search: {\n label: 'Search entity',\n placeholder: 'Search...',\n },\n entities_zero: 'No entities',\n entities_one: '{{count}} entity',\n entities_other: '{{count}} entities',\n },\n aiAnswerCard: {\n regenerate: 'Regenerate this answer',\n answer: 'Answer from {{name}}',\n summary: 'Summary by {{name}}',\n show: 'Show',\n hide: 'Hide',\n loading: 'Thinking...',\n },\n usersPage: {\n title: 'Users',\n errorLoading: 'Could not load users',\n defaultTitle: 'users',\n search: {\n label: 'Search user',\n placeholder: 'Search...',\n },\n users_zero: 'No users',\n users_one: '{{count}} user',\n users_other: '{{count}} users',\n },\n userPage: {\n profileTab: 'Profile',\n statistics: 'Statistics',\n questions: 'Questions',\n answers: 'Answers',\n collections: 'Collections',\n articles: 'Articles',\n },\n stats: {\n noStats: 'No statistics available. Check back later!',\n questions: 'Questions',\n answers: 'Answers',\n comments: 'Comments',\n votes: 'Votes',\n views: 'Views',\n articles: 'Articles',\n followers: 'Followers',\n users: 'Users',\n tags: 'Tags',\n },\n collectionButton: {\n follow: 'Follow',\n unfollow: 'Unfollow',\n tooltip:\n 'By following a collection, you will get notified when ever a new post is added to the collection',\n },\n tagButton: {\n follow: 'Follow',\n unfollow: 'Unfollow',\n edit: 'Edit',\n tooltip:\n 'By following a tag, you will get notified when ever a new post with that tag is posted',\n },\n entityButton: {\n follow: 'Follow',\n unfollow: 'Unfollow',\n tooltip:\n 'By following an entity, you will get notified when ever a new post for that entity is posted',\n },\n userButton: {\n follow: 'Follow',\n unfollow: 'Unfollow',\n tooltip:\n 'By following a user, you will get notified when ever a new post by that user is posted',\n },\n },\n});\n\nexport const qetaTranslations = createTranslationResource({\n ref: qetaTranslationRef,\n translations: {},\n});\n"],"names":[],"mappings":"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"}