@drodil/backstage-plugin-qeta-react 3.59.2 → 3.59.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 (161) hide show
  1. package/dist/alpha.esm.js.map +1 -1
  2. package/dist/api.esm.js.map +1 -1
  3. package/dist/components/AIAnswerCard/AIAnswerCard.esm.js +1 -1
  4. package/dist/components/AIAnswerCard/AIAnswerCard.esm.js.map +1 -1
  5. package/dist/components/AnswerCard/AnswerCard.esm.js.map +1 -1
  6. package/dist/components/AnswerForm/AnswerForm.esm.js +1 -1
  7. package/dist/components/AnswerForm/AnswerForm.esm.js.map +1 -1
  8. package/dist/components/AnswersContainer/AnswerListItem.esm.js.map +1 -1
  9. package/dist/components/AnswersContainer/AnswersContainer.esm.js.map +1 -1
  10. package/dist/components/AnswersContainer/AnswersGridItem.esm.js.map +1 -1
  11. package/dist/components/ArticleContent/ArticleButtons.esm.js.map +1 -1
  12. package/dist/components/ArticleContent/ArticleContent.esm.js.map +1 -1
  13. package/dist/components/AuthorBox/AuthorBox.esm.js.map +1 -1
  14. package/dist/components/AuthorBox/AuthorBoxes.esm.js.map +1 -1
  15. package/dist/components/Badges/BadgeChip.esm.js.map +1 -1
  16. package/dist/components/Badges/UserBadges.esm.js.map +1 -1
  17. package/dist/components/Buttons/AddToCollectionButton.esm.js.map +1 -1
  18. package/dist/components/Buttons/AskQuestionButton.esm.js.map +1 -1
  19. package/dist/components/Buttons/ButtonContainer.esm.js.map +1 -1
  20. package/dist/components/Buttons/CollectionFollowButton.esm.js.map +1 -1
  21. package/dist/components/Buttons/ContentHeaderButton.esm.js.map +1 -1
  22. package/dist/components/Buttons/CreateCollectionButton.esm.js.map +1 -1
  23. package/dist/components/Buttons/CreateLinkButton.esm.js.map +1 -1
  24. package/dist/components/Buttons/EntityFollowButton.esm.js.map +1 -1
  25. package/dist/components/Buttons/FavoriteButton.esm.js.map +1 -1
  26. package/dist/components/Buttons/FollowPostButton.esm.js.map +1 -1
  27. package/dist/components/Buttons/LinkButton.esm.js.map +1 -1
  28. package/dist/components/Buttons/OpenLinkButton.esm.js.map +1 -1
  29. package/dist/components/Buttons/RankingButtons.esm.js.map +1 -1
  30. package/dist/components/Buttons/TagFollowButton.esm.js.map +1 -1
  31. package/dist/components/Buttons/UserFollowButton.esm.js.map +1 -1
  32. package/dist/components/Buttons/VoteButtons.esm.js.map +1 -1
  33. package/dist/components/Buttons/WriteArticleButton.esm.js.map +1 -1
  34. package/dist/components/CollectionForm/CollectionForm.esm.js.map +1 -1
  35. package/dist/components/CollectionsContainer/CollectionListItem.esm.js.map +1 -1
  36. package/dist/components/CollectionsContainer/CollectionsContainer.esm.js.map +1 -1
  37. package/dist/components/CollectionsContainer/CollectionsGridItem.esm.js.map +1 -1
  38. package/dist/components/CommentSection/CommentForm.esm.js.map +1 -1
  39. package/dist/components/CommentSection/CommentList.esm.js.map +1 -1
  40. package/dist/components/CommentSection/CommentListItem.esm.js.map +1 -1
  41. package/dist/components/CommentSection/CommentSection.esm.js.map +1 -1
  42. package/dist/components/ContentHeader/ContentHeader.esm.js.map +1 -1
  43. package/dist/components/ContentHeaderCard/ContentHeaderCard.esm.js.map +1 -1
  44. package/dist/components/EntitiesContainer/EntitiesContainer.esm.js.map +1 -1
  45. package/dist/components/EntitiesContainer/EntitiesGridItem.esm.js.map +1 -1
  46. package/dist/components/EntitiesContainer/EntityListItem.esm.js.map +1 -1
  47. package/dist/components/FaviconItem/FaviconItem.esm.js.map +1 -1
  48. package/dist/components/FilterPanel/DateRangeFilter.esm.js.map +1 -1
  49. package/dist/components/FilterPanel/FilterPanel.esm.js.map +1 -1
  50. package/dist/components/FollowedLists/FollowedCollectionsList.esm.js.map +1 -1
  51. package/dist/components/FollowedLists/FollowedEntitiesList.esm.js.map +1 -1
  52. package/dist/components/FollowedLists/FollowedTagsList.esm.js.map +1 -1
  53. package/dist/components/FollowedLists/FollowedUsersList.esm.js.map +1 -1
  54. package/dist/components/GridItemStyles/useGridItemStyles.esm.js.map +1 -1
  55. package/dist/components/HeaderImageInput/HeaderImageInput.esm.js.map +1 -1
  56. package/dist/components/HomePageCards/CommunityActivityCard.esm.js.map +1 -1
  57. package/dist/components/HomePageCards/FollowedItemsCard.esm.js.map +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/Icons/ExpertIcon.esm.js.map +1 -1
  61. package/dist/components/LeftMenu/LeftMenu.esm.js.map +1 -1
  62. package/dist/components/LeftMenu/LeftMenuButton.esm.js.map +1 -1
  63. package/dist/components/LinkCard/LinkCard.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.map +1 -1
  67. package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js.map +1 -1
  68. package/dist/components/Modals/DeleteModal.esm.js.map +1 -1
  69. package/dist/components/Modals/ObsoleteModal.esm.js.map +1 -1
  70. package/dist/components/Modals/ValidReviewModal.esm.js.map +1 -1
  71. package/dist/components/PostAnonymouslyCheckbox/PostAnonymouslyCheckbox.esm.js.map +1 -1
  72. package/dist/components/PostForm/AutocompleteListComponent.esm.js +1 -1
  73. package/dist/components/PostForm/AutocompleteListComponent.esm.js.map +1 -1
  74. package/dist/components/PostForm/EntitiesInput.esm.js +3 -6
  75. package/dist/components/PostForm/EntitiesInput.esm.js.map +1 -1
  76. package/dist/components/PostForm/PostForm.esm.js.map +1 -1
  77. package/dist/components/PostForm/TagInput.esm.js +1 -1
  78. package/dist/components/PostForm/TagInput.esm.js.map +1 -1
  79. package/dist/components/PostHighlightList/PostHighlightList.esm.js.map +1 -1
  80. package/dist/components/PostHighlightList/PostHighlightListContainer.esm.js.map +1 -1
  81. package/dist/components/PostHistory/PostHistory.esm.js.map +1 -1
  82. package/dist/components/PostHistoryButton/PostHistoryButton.esm.js +4 -5
  83. package/dist/components/PostHistoryButton/PostHistoryButton.esm.js.map +1 -1
  84. package/dist/components/PostsContainer/NoPostsCard.esm.js.map +1 -1
  85. package/dist/components/PostsContainer/PostListItem.esm.js.map +1 -1
  86. package/dist/components/PostsContainer/PostsContainer.esm.js.map +1 -1
  87. package/dist/components/PostsContainer/PostsGridItem.esm.js.map +1 -1
  88. package/dist/components/PostsTable/PostsTable.esm.js.map +1 -1
  89. package/dist/components/PostsTable/PostsTableRow.esm.js.map +1 -1
  90. package/dist/components/QetaContext/QetaContext.esm.js +1 -1
  91. package/dist/components/QetaContext/QetaContext.esm.js.map +1 -1
  92. package/dist/components/QetaEntityContainer/QetaEntityContainer.esm.js.map +1 -1
  93. package/dist/components/QuestionCard/QuestionCard.esm.js.map +1 -1
  94. package/dist/components/RelativeTimeWithTooltip/RelativeTimeWithTooltip.esm.js.map +1 -1
  95. package/dist/components/SearchBar/SearchBar.esm.js.map +1 -1
  96. package/dist/components/SelectTemplateList/SelectTemplateList.esm.js.map +1 -1
  97. package/dist/components/StatsChart/StatsChart.esm.js +1 -1
  98. package/dist/components/StatsChart/StatsChart.esm.js.map +1 -1
  99. package/dist/components/StatsChart/util.esm.js.map +1 -1
  100. package/dist/components/SuggestionsCard/SuggestionsCard.esm.js.map +1 -1
  101. package/dist/components/TagsAndEntities/EntityChip.esm.js.map +1 -1
  102. package/dist/components/TagsAndEntities/TagChip.esm.js.map +1 -1
  103. package/dist/components/TagsAndEntities/TagsAndEntities.esm.js.map +1 -1
  104. package/dist/components/TagsContainer/CreateTagModal.esm.js.map +1 -1
  105. package/dist/components/TagsContainer/EditTagModal.esm.js.map +1 -1
  106. package/dist/components/TagsContainer/TagGridItem.esm.js.map +1 -1
  107. package/dist/components/TagsContainer/TagListItem.esm.js.map +1 -1
  108. package/dist/components/TagsContainer/TagsContainer.esm.js.map +1 -1
  109. package/dist/components/TemplateList/TemplateForm.esm.js.map +1 -1
  110. package/dist/components/TemplateList/TemplateList.esm.js.map +1 -1
  111. package/dist/components/Timeline/Timeline.esm.js.map +1 -1
  112. package/dist/components/Timeline/TimelineItem.esm.js.map +1 -1
  113. package/dist/components/Tooltips/CollectionTooltip.esm.js.map +1 -1
  114. package/dist/components/Tooltips/EntityTooltip.esm.js.map +1 -1
  115. package/dist/components/Tooltips/PostTooltip.esm.js.map +1 -1
  116. package/dist/components/Tooltips/TagTooltip.esm.js.map +1 -1
  117. package/dist/components/Tooltips/UserTooltip.esm.js.map +1 -1
  118. package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js.map +1 -1
  119. package/dist/components/TopRankingUsersCard/TrophyIcon.esm.js.map +1 -1
  120. package/dist/components/UsersContainer/UserListItem.esm.js.map +1 -1
  121. package/dist/components/UsersContainer/UsersContainer.esm.js.map +1 -1
  122. package/dist/components/UsersContainer/UsersGridItem.esm.js.map +1 -1
  123. package/dist/components/Utility/ClickableLink.esm.js.map +1 -1
  124. package/dist/components/Utility/DeletedBanner.esm.js.map +1 -1
  125. package/dist/components/Utility/DraftBanner.esm.js.map +1 -1
  126. package/dist/components/Utility/ModalContent.esm.js.map +1 -1
  127. package/dist/components/Utility/ObsoleteBanner.esm.js.map +1 -1
  128. package/dist/components/Utility/OptionalRequirePermission.esm.js.map +1 -1
  129. package/dist/components/Utility/QetaGridHeader.esm.js.map +1 -1
  130. package/dist/components/Utility/QetaPagination.esm.js.map +1 -1
  131. package/dist/components/Utility/RightList.esm.js +1 -1
  132. package/dist/components/Utility/RightList.esm.js.map +1 -1
  133. package/dist/components/Utility/StatusChip.esm.js.map +1 -1
  134. package/dist/components/Utility/VoteButtonContainer.esm.js.map +1 -1
  135. package/dist/components/ViewToggle/ViewToggle.esm.js.map +1 -1
  136. package/dist/hooks/useAI.esm.js.map +1 -1
  137. package/dist/hooks/useCanReview.esm.js.map +1 -1
  138. package/dist/hooks/useCollectionsFollow.esm.js.map +1 -1
  139. package/dist/hooks/useEntityAuthor.esm.js.map +1 -1
  140. package/dist/hooks/useEntityFollow.esm.js.map +1 -1
  141. package/dist/hooks/useEntityQueryParameter.esm.js.map +1 -1
  142. package/dist/hooks/useFavicon.esm.js.map +1 -1
  143. package/dist/hooks/useFollow.esm.js.map +1 -1
  144. package/dist/hooks/useGridPageSize.esm.js.map +1 -1
  145. package/dist/hooks/useHistoryEnabled.esm.js.map +1 -1
  146. package/dist/hooks/useIdentityApi.esm.js.map +1 -1
  147. package/dist/hooks/useIsDarkTheme.esm.js.map +1 -1
  148. package/dist/hooks/useIsModerator.esm.js.map +1 -1
  149. package/dist/hooks/useListItemStyles.esm.js.map +1 -1
  150. package/dist/hooks/useQetaApi.esm.js.map +1 -1
  151. package/dist/hooks/useQetaEntities.esm.js.map +1 -1
  152. package/dist/hooks/useTagsFollow.esm.js.map +1 -1
  153. package/dist/hooks/useTooltipStyles.esm.js.map +1 -1
  154. package/dist/hooks/useUserFollow.esm.js.map +1 -1
  155. package/dist/hooks/useUserSettings.esm.js.map +1 -1
  156. package/dist/hooks/useVoting.esm.js.map +1 -1
  157. package/dist/index.d.ts +1 -1
  158. package/dist/routes.esm.js.map +1 -1
  159. package/dist/translation.esm.js.map +1 -1
  160. package/dist/utils/utils.esm.js.map +1 -1
  161. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderImageInput.esm.js","sources":["../../../src/components/HeaderImageInput/HeaderImageInput.tsx"],"sourcesContent":["import { imageUpload } from '../../utils/utils';\nimport { configApiRef, errorApiRef, useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../../api';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport {\n Button,\n Grid,\n makeStyles,\n TextField,\n Typography,\n CircularProgress,\n Paper,\n Box,\n IconButton,\n InputAdornment,\n} from '@material-ui/core';\nimport CloudUploadIcon from '@material-ui/icons/CloudUpload';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { useState, useCallback, useEffect } from 'react';\nimport { useDropzone } from 'react-dropzone';\n\nconst useStyles = makeStyles(theme => ({\n headerImage: {\n marginBottom: '1rem',\n height: '250px',\n objectFit: 'cover',\n width: '100%',\n border: `1px solid ${theme.palette.background.paper}`,\n borderRadius: theme.shape.borderRadius,\n boxShadow: theme.shadows[2],\n },\n dropzone: {\n border: `2px dashed ${theme.palette.primary.main}`,\n borderRadius: theme.shape.borderRadius,\n padding: theme.spacing(2),\n textAlign: 'center',\n cursor: 'pointer',\n backgroundColor: theme.palette.background.paper,\n transition: 'all 0.2s ease-in-out',\n margin: '0 auto',\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n },\n dropzoneActive: {\n borderColor: theme.palette.primary.dark,\n backgroundColor: theme.palette.action.selected,\n },\n uploadIcon: {\n fontSize: 36,\n color: theme.palette.primary.main,\n marginBottom: theme.spacing(1),\n },\n previewContainer: {\n position: 'relative',\n marginTop: theme.spacing(1),\n margin: '0 auto',\n },\n loadingOverlay: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(255, 255, 255, 0.7)',\n borderRadius: theme.shape.borderRadius,\n },\n previewLabel: {\n marginBottom: theme.spacing(1),\n color: theme.palette.text.secondary,\n },\n imageErrorBox: {\n padding: theme.spacing(3),\n textAlign: 'center',\n color: theme.palette.error.main,\n border: `1px solid ${theme.palette.error.main}`,\n borderRadius: theme.shape.borderRadius,\n backgroundColor: '#fff3f3',\n marginTop: theme.spacing(1),\n },\n}));\n\nexport const HeaderImageInput = (props: {\n url?: string;\n onChange: (url?: string) => void;\n onImageUpload: (imageId: number) => void;\n postId?: number;\n collectionId?: number;\n}) => {\n const { url, onChange, onImageUpload, postId, collectionId } = props;\n const configApi = useApi(configApiRef);\n const qetaApi = useApi(qetaApiRef);\n const errorApi = useApi(errorApiRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n const styles = useStyles();\n const [isUploading, setIsUploading] = useState(false);\n const [imageError, setImageError] = useState(false);\n const [inputValue, setInputValue] = useState(url ?? '');\n const [debouncedValue, setDebouncedValue] = useState(url ?? '');\n\n const isUploadDisabled =\n configApi.getOptionalBoolean('qeta.storage.disabled') || false;\n\n const allowedMimeTypes = configApi.getOptionalStringArray(\n 'qeta.storage.allowedMimeTypes',\n ) || ['image/png', 'image/jpeg', 'image/jpg', 'image/gif'];\n\n const acceptObj = allowedMimeTypes.reduce(\n (acc, type) => {\n if (!type.includes('image/')) {\n return acc;\n }\n acc[type] = [];\n return acc;\n },\n {} as Record<string, string[]>,\n );\n\n const handleClearUrl = () => {\n setInputValue('');\n setDebouncedValue('');\n onChange(undefined);\n setImageError(false);\n };\n\n useEffect(() => {\n setInputValue(url ?? '');\n }, [url]);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(inputValue);\n if (inputValue !== url && !(inputValue === '' && url === undefined)) {\n onChange(inputValue);\n }\n }, 400);\n return () => clearTimeout(handler);\n }, [inputValue, onChange, url]);\n\n useEffect(() => {\n setImageError(false);\n }, [debouncedValue]);\n\n const onDrop = useCallback(\n async (acceptedFiles: File[]) => {\n if (acceptedFiles.length === 0) return;\n\n try {\n setIsUploading(true);\n const buffer = await acceptedFiles[0].arrayBuffer();\n const uri = await imageUpload({\n qetaApi,\n errorApi,\n onImageUpload,\n postId,\n collectionId,\n })(buffer).next();\n if (typeof uri.value === 'string') {\n setInputValue(uri.value);\n }\n } catch (error) {\n errorApi.post(error);\n } finally {\n setIsUploading(false);\n }\n },\n [qetaApi, errorApi, onImageUpload, postId, collectionId],\n );\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop,\n accept: acceptObj,\n maxFiles: 1,\n disabled: isUploadDisabled,\n });\n\n if (Object.keys(acceptObj).length === 0) {\n return null;\n }\n\n return (\n <Grid container spacing={2} style={{ marginBottom: '1rem' }}>\n <Grid item xs={12}>\n <TextField\n value={inputValue}\n fullWidth\n label={t('fileInput.label')}\n placeholder=\"https://\"\n margin=\"normal\"\n variant=\"outlined\"\n onChange={e => {\n setInputValue(e.target.value);\n }}\n helperText={t('fileInput.helperText')}\n FormHelperTextProps={{\n style: { marginLeft: '0.2em' },\n }}\n InputProps={{\n endAdornment: url && (\n <InputAdornment position=\"end\">\n <IconButton\n aria-label=\"clear image url\"\n onClick={handleClearUrl}\n edge=\"end\"\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n {!isUploadDisabled && !url && (\n <Grid item xs={12}>\n <Paper\n {...getRootProps()}\n className={`${styles.dropzone} ${\n isDragActive ? styles.dropzoneActive : ''\n }`}\n >\n <input {...getInputProps()} />\n <CloudUploadIcon className={styles.uploadIcon} />\n <Typography variant=\"h6\" gutterBottom>\n {isDragActive\n ? t('fileInput.dropHere')\n : t('fileInput.dragAndDrop')}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {t('fileInput.supportedFormats', {\n formats: allowedMimeTypes.join(', '),\n })}\n </Typography>\n <Box mt={2}>\n <Button variant=\"contained\" color=\"primary\">\n {t('fileInput.selectFile')}\n </Button>\n </Box>\n </Paper>\n </Grid>\n )}\n {debouncedValue && (\n <Grid item xs={12}>\n <div className={styles.previewContainer}>\n <Typography variant=\"subtitle2\" className={styles.previewLabel}>\n {t('fileInput.preview')}\n </Typography>\n {imageError ? (\n <div className={styles.imageErrorBox}>\n {t('fileInput.imageLoadError')}\n </div>\n ) : (\n <img\n className={styles.headerImage}\n src={debouncedValue}\n alt=\"header\"\n onError={() => setImageError(true)}\n />\n )}\n {isUploading && (\n <div className={styles.loadingOverlay}>\n <CircularProgress />\n </div>\n )}\n </div>\n </Grid>\n )}\n </Grid>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HeaderImageInput.esm.js","sources":["../../../src/components/HeaderImageInput/HeaderImageInput.tsx"],"sourcesContent":["import { imageUpload } from '../../utils/utils';\nimport { configApiRef, errorApiRef, useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../../api';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport {\n Button,\n Grid,\n makeStyles,\n TextField,\n Typography,\n CircularProgress,\n Paper,\n Box,\n IconButton,\n InputAdornment,\n} from '@material-ui/core';\nimport CloudUploadIcon from '@material-ui/icons/CloudUpload';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { useState, useCallback, useEffect } from 'react';\nimport { useDropzone } from 'react-dropzone';\n\nconst useStyles = makeStyles(theme => ({\n headerImage: {\n marginBottom: '1rem',\n height: '250px',\n objectFit: 'cover',\n width: '100%',\n border: `1px solid ${theme.palette.background.paper}`,\n borderRadius: theme.shape.borderRadius,\n boxShadow: theme.shadows[2],\n },\n dropzone: {\n border: `2px dashed ${theme.palette.primary.main}`,\n borderRadius: theme.shape.borderRadius,\n padding: theme.spacing(2),\n textAlign: 'center',\n cursor: 'pointer',\n backgroundColor: theme.palette.background.paper,\n transition: 'all 0.2s ease-in-out',\n margin: '0 auto',\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n },\n dropzoneActive: {\n borderColor: theme.palette.primary.dark,\n backgroundColor: theme.palette.action.selected,\n },\n uploadIcon: {\n fontSize: 36,\n color: theme.palette.primary.main,\n marginBottom: theme.spacing(1),\n },\n previewContainer: {\n position: 'relative',\n marginTop: theme.spacing(1),\n margin: '0 auto',\n },\n loadingOverlay: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(255, 255, 255, 0.7)',\n borderRadius: theme.shape.borderRadius,\n },\n previewLabel: {\n marginBottom: theme.spacing(1),\n color: theme.palette.text.secondary,\n },\n imageErrorBox: {\n padding: theme.spacing(3),\n textAlign: 'center',\n color: theme.palette.error.main,\n border: `1px solid ${theme.palette.error.main}`,\n borderRadius: theme.shape.borderRadius,\n backgroundColor: '#fff3f3',\n marginTop: theme.spacing(1),\n },\n}));\n\nexport const HeaderImageInput = (props: {\n url?: string;\n onChange: (url?: string) => void;\n onImageUpload: (imageId: number) => void;\n postId?: number;\n collectionId?: number;\n}) => {\n const { url, onChange, onImageUpload, postId, collectionId } = props;\n const configApi = useApi(configApiRef);\n const qetaApi = useApi(qetaApiRef);\n const errorApi = useApi(errorApiRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n const styles = useStyles();\n const [isUploading, setIsUploading] = useState(false);\n const [imageError, setImageError] = useState(false);\n const [inputValue, setInputValue] = useState(url ?? '');\n const [debouncedValue, setDebouncedValue] = useState(url ?? '');\n\n const isUploadDisabled =\n configApi.getOptionalBoolean('qeta.storage.disabled') || false;\n\n const allowedMimeTypes = configApi.getOptionalStringArray(\n 'qeta.storage.allowedMimeTypes',\n ) || ['image/png', 'image/jpeg', 'image/jpg', 'image/gif'];\n\n const acceptObj = allowedMimeTypes.reduce(\n (acc, type) => {\n if (!type.includes('image/')) {\n return acc;\n }\n acc[type] = [];\n return acc;\n },\n {} as Record<string, string[]>,\n );\n\n const handleClearUrl = () => {\n setInputValue('');\n setDebouncedValue('');\n onChange(undefined);\n setImageError(false);\n };\n\n useEffect(() => {\n setInputValue(url ?? '');\n }, [url]);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(inputValue);\n if (inputValue !== url && !(inputValue === '' && url === undefined)) {\n onChange(inputValue);\n }\n }, 400);\n return () => clearTimeout(handler);\n }, [inputValue, onChange, url]);\n\n useEffect(() => {\n setImageError(false);\n }, [debouncedValue]);\n\n const onDrop = useCallback(\n async (acceptedFiles: File[]) => {\n if (acceptedFiles.length === 0) return;\n\n try {\n setIsUploading(true);\n const buffer = await acceptedFiles[0].arrayBuffer();\n const uri = await imageUpload({\n qetaApi,\n errorApi,\n onImageUpload,\n postId,\n collectionId,\n })(buffer).next();\n if (typeof uri.value === 'string') {\n setInputValue(uri.value);\n }\n } catch (error) {\n errorApi.post(error);\n } finally {\n setIsUploading(false);\n }\n },\n [qetaApi, errorApi, onImageUpload, postId, collectionId],\n );\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop,\n accept: acceptObj,\n maxFiles: 1,\n disabled: isUploadDisabled,\n });\n\n if (Object.keys(acceptObj).length === 0) {\n return null;\n }\n\n return (\n <Grid container spacing={2} style={{ marginBottom: '1rem' }}>\n <Grid item xs={12}>\n <TextField\n value={inputValue}\n fullWidth\n label={t('fileInput.label')}\n placeholder=\"https://\"\n margin=\"normal\"\n variant=\"outlined\"\n onChange={e => {\n setInputValue(e.target.value);\n }}\n helperText={t('fileInput.helperText')}\n FormHelperTextProps={{\n style: { marginLeft: '0.2em' },\n }}\n InputProps={{\n endAdornment: url && (\n <InputAdornment position=\"end\">\n <IconButton\n aria-label=\"clear image url\"\n onClick={handleClearUrl}\n edge=\"end\"\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n {!isUploadDisabled && !url && (\n <Grid item xs={12}>\n <Paper\n {...getRootProps()}\n className={`${styles.dropzone} ${\n isDragActive ? styles.dropzoneActive : ''\n }`}\n >\n <input {...getInputProps()} />\n <CloudUploadIcon className={styles.uploadIcon} />\n <Typography variant=\"h6\" gutterBottom>\n {isDragActive\n ? t('fileInput.dropHere')\n : t('fileInput.dragAndDrop')}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {t('fileInput.supportedFormats', {\n formats: allowedMimeTypes.join(', '),\n })}\n </Typography>\n <Box mt={2}>\n <Button variant=\"contained\" color=\"primary\">\n {t('fileInput.selectFile')}\n </Button>\n </Box>\n </Paper>\n </Grid>\n )}\n {debouncedValue && (\n <Grid item xs={12}>\n <div className={styles.previewContainer}>\n <Typography variant=\"subtitle2\" className={styles.previewLabel}>\n {t('fileInput.preview')}\n </Typography>\n {imageError ? (\n <div className={styles.imageErrorBox}>\n {t('fileInput.imageLoadError')}\n </div>\n ) : (\n <img\n className={styles.headerImage}\n src={debouncedValue}\n alt=\"header\"\n onError={() => setImageError(true)}\n />\n )}\n {isUploading && (\n <div className={styles.loadingOverlay}>\n <CircularProgress />\n </div>\n )}\n </div>\n </Grid>\n )}\n </Grid>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CommunityActivityCard.esm.js","sources":["../../../src/components/HomePageCards/CommunityActivityCard.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { qetaTranslationRef } from '../../translation';\nimport { useQetaApi } from '../../hooks';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport {\n Box,\n Card,\n CardContent,\n CardHeader,\n Grid,\n makeStyles,\n MenuItem,\n Select,\n Typography,\n} from '@material-ui/core';\nimport { Skeleton } from '@material-ui/lab';\nimport PostAddIcon from '@material-ui/icons/PostAdd';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport CommentIcon from '@material-ui/icons/Comment';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport PeopleIcon from '@material-ui/icons/People';\nimport GroupWorkIcon from '@material-ui/icons/GroupWork';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n height: '100%',\n },\n statBox: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n padding: theme.spacing(1.5),\n borderRadius: theme.shape.borderRadius,\n background:\n theme.palette.type === 'dark'\n ? 'rgba(255, 255, 255, 0.05)'\n : 'rgba(0, 0, 0, 0.02)',\n },\n statIcon: {\n marginBottom: theme.spacing(0.5),\n color: theme.palette.primary.main,\n opacity: 0.8,\n },\n statValue: {\n fontWeight: 'bold',\n fontSize: '1.3rem',\n color: theme.palette.primary.main,\n lineHeight: 1.2,\n },\n statLabel: {\n color: theme.palette.text.secondary,\n fontSize: '0.75rem',\n marginTop: theme.spacing(0.25),\n },\n header: {\n paddingBottom: 0,\n },\n select: {\n fontSize: '0.8rem',\n },\n}));\n\nexport const CommunityActivityCard = () => {\n const classes = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n const [period, setPeriod] = useState('7d');\n\n const { value: stats, loading } = useQetaApi(\n api => api.getCommunityActivity(period),\n [period],\n );\n\n const renderContent = () => {\n if (loading) {\n return (\n <Grid container spacing={2}>\n {Array.from(new Array(6)).map((_, i) => (\n <Grid item xs={6} md={4} key={i}>\n <Box className={classes.statBox}>\n <Skeleton\n variant=\"circle\"\n width={24}\n height={24}\n className={classes.statIcon}\n />\n <Skeleton variant=\"text\" width=\"60%\" height={32} />\n <Skeleton variant=\"text\" width=\"40%\" />\n </Box>\n </Grid>\n ))}\n </Grid>\n );\n }\n\n if (!stats) {\n return null;\n }\n\n const statItems = [\n {\n icon: PostAddIcon,\n value: stats.posts,\n label: t('communityActivity.newPosts'),\n },\n {\n icon: QuestionAnswerIcon,\n value: stats.answers,\n label: t('communityActivity.newAnswers'),\n },\n {\n icon: VisibilityIcon,\n value: stats.views,\n label: t('communityActivity.views'),\n },\n {\n icon: CommentIcon,\n value: stats.comments,\n label: t('communityActivity.newComments'),\n },\n {\n icon: ThumbUpIcon,\n value: stats.votes,\n label: t('communityActivity.newVotes'),\n },\n {\n icon: PeopleIcon,\n value: stats.activeUsers,\n label: t('communityActivity.activeUsers'),\n },\n ];\n\n return (\n <Grid container spacing={2}>\n {statItems.map((item, index) => (\n <Grid item xs={6} md={4} key={index}>\n <Box className={classes.statBox}>\n <item.icon className={classes.statIcon} />\n <Typography className={classes.statValue}>\n {item.value}\n </Typography>\n <Typography className={classes.statLabel}>\n {item.label}\n </Typography>\n </Box>\n </Grid>\n ))}\n </Grid>\n );\n };\n\n return (\n <Card className={classes.root} variant=\"outlined\">\n <CardHeader\n title={t('communityActivity.title')}\n className={classes.header}\n avatar={<GroupWorkIcon />}\n titleTypographyProps={{ variant: 'h5' }}\n action={\n <Select\n value={period}\n onChange={e => setPeriod(e.target.value as string)}\n className={classes.select}\n disableUnderline\n >\n <MenuItem value=\"1d\">{t('communityActivity.period.1d')}</MenuItem>\n <MenuItem value=\"3d\">{t('communityActivity.period.3d')}</MenuItem>\n <MenuItem value=\"7d\">{t('communityActivity.period.7d')}</MenuItem>\n <MenuItem value=\"14d\">{t('communityActivity.period.14d')}</MenuItem>\n <MenuItem value=\"30d\">{t('communityActivity.period.30d')}</MenuItem>\n <MenuItem value=\"90d\">{t('communityActivity.period.90d')}</MenuItem>\n <MenuItem value=\"1y\">{t('communityActivity.period.1y')}</MenuItem>\n </Select>\n }\n />\n <CardContent>{renderContent()}</CardContent>\n </Card>\n );\n};\n"],"names":["VisibilityIcon","ThumbUpIcon"],"mappings":"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"}
1
+ {"version":3,"file":"CommunityActivityCard.esm.js","sources":["../../../src/components/HomePageCards/CommunityActivityCard.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { qetaTranslationRef } from '../../translation';\nimport { useQetaApi } from '../../hooks';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport {\n Box,\n Card,\n CardContent,\n CardHeader,\n Grid,\n makeStyles,\n MenuItem,\n Select,\n Typography,\n} from '@material-ui/core';\nimport { Skeleton } from '@material-ui/lab';\nimport PostAddIcon from '@material-ui/icons/PostAdd';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport CommentIcon from '@material-ui/icons/Comment';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport PeopleIcon from '@material-ui/icons/People';\nimport GroupWorkIcon from '@material-ui/icons/GroupWork';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n height: '100%',\n },\n statBox: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n padding: theme.spacing(1.5),\n borderRadius: theme.shape.borderRadius,\n background:\n theme.palette.type === 'dark'\n ? 'rgba(255, 255, 255, 0.05)'\n : 'rgba(0, 0, 0, 0.02)',\n },\n statIcon: {\n marginBottom: theme.spacing(0.5),\n color: theme.palette.primary.main,\n opacity: 0.8,\n },\n statValue: {\n fontWeight: 'bold',\n fontSize: '1.3rem',\n color: theme.palette.primary.main,\n lineHeight: 1.2,\n },\n statLabel: {\n color: theme.palette.text.secondary,\n fontSize: '0.75rem',\n marginTop: theme.spacing(0.25),\n },\n header: {\n paddingBottom: 0,\n },\n select: {\n fontSize: '0.8rem',\n },\n}));\n\nexport const CommunityActivityCard = () => {\n const classes = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n const [period, setPeriod] = useState('7d');\n\n const { value: stats, loading } = useQetaApi(\n api => api.getCommunityActivity(period),\n [period],\n );\n\n const renderContent = () => {\n if (loading) {\n return (\n <Grid container spacing={2}>\n {Array.from(new Array(6)).map((_, i) => (\n <Grid item xs={6} md={4} key={i}>\n <Box className={classes.statBox}>\n <Skeleton\n variant=\"circle\"\n width={24}\n height={24}\n className={classes.statIcon}\n />\n <Skeleton variant=\"text\" width=\"60%\" height={32} />\n <Skeleton variant=\"text\" width=\"40%\" />\n </Box>\n </Grid>\n ))}\n </Grid>\n );\n }\n\n if (!stats) {\n return null;\n }\n\n const statItems = [\n {\n icon: PostAddIcon,\n value: stats.posts,\n label: t('communityActivity.newPosts'),\n },\n {\n icon: QuestionAnswerIcon,\n value: stats.answers,\n label: t('communityActivity.newAnswers'),\n },\n {\n icon: VisibilityIcon,\n value: stats.views,\n label: t('communityActivity.views'),\n },\n {\n icon: CommentIcon,\n value: stats.comments,\n label: t('communityActivity.newComments'),\n },\n {\n icon: ThumbUpIcon,\n value: stats.votes,\n label: t('communityActivity.newVotes'),\n },\n {\n icon: PeopleIcon,\n value: stats.activeUsers,\n label: t('communityActivity.activeUsers'),\n },\n ];\n\n return (\n <Grid container spacing={2}>\n {statItems.map((item, index) => (\n <Grid item xs={6} md={4} key={index}>\n <Box className={classes.statBox}>\n <item.icon className={classes.statIcon} />\n <Typography className={classes.statValue}>\n {item.value}\n </Typography>\n <Typography className={classes.statLabel}>\n {item.label}\n </Typography>\n </Box>\n </Grid>\n ))}\n </Grid>\n );\n };\n\n return (\n <Card className={classes.root} variant=\"outlined\">\n <CardHeader\n title={t('communityActivity.title')}\n className={classes.header}\n avatar={<GroupWorkIcon />}\n titleTypographyProps={{ variant: 'h5' }}\n action={\n <Select\n value={period}\n onChange={e => setPeriod(e.target.value as string)}\n className={classes.select}\n disableUnderline\n >\n <MenuItem value=\"1d\">{t('communityActivity.period.1d')}</MenuItem>\n <MenuItem value=\"3d\">{t('communityActivity.period.3d')}</MenuItem>\n <MenuItem value=\"7d\">{t('communityActivity.period.7d')}</MenuItem>\n <MenuItem value=\"14d\">{t('communityActivity.period.14d')}</MenuItem>\n <MenuItem value=\"30d\">{t('communityActivity.period.30d')}</MenuItem>\n <MenuItem value=\"90d\">{t('communityActivity.period.90d')}</MenuItem>\n <MenuItem value=\"1y\">{t('communityActivity.period.1y')}</MenuItem>\n </Select>\n }\n />\n <CardContent>{renderContent()}</CardContent>\n </Card>\n );\n};\n"],"names":["VisibilityIcon","ThumbUpIcon"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FollowedItemsCard.esm.js","sources":["../../../src/components/HomePageCards/FollowedItemsCard.tsx"],"sourcesContent":["import { Fragment } from 'react';\nimport {\n Box,\n Card,\n CardContent,\n CardHeader,\n List,\n ListItem,\n ListItemText,\n ListItemAvatar,\n Avatar,\n makeStyles,\n Typography,\n} from '@material-ui/core';\nimport { Skeleton } from '@material-ui/lab';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation';\nimport {\n tagRouteRef,\n userRouteRef,\n collectionRouteRef,\n entityRouteRef,\n} from '../../routes';\nimport {\n useTagsFollow,\n useEntityFollow,\n useUserFollow,\n useCollectionsFollow,\n} from '../../hooks';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { Link } from 'react-router-dom';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport {\n EntityTooltip,\n UserTooltip,\n TagTooltip,\n CollectionTooltip,\n} from '../Tooltips';\nimport LocalOfferOutlined from '@material-ui/icons/LocalOfferOutlined';\nimport LibraryBooks from '@material-ui/icons/LibraryBooks';\nimport CategoryIcon from '@material-ui/icons/Category';\nimport NotificationsActive from '@material-ui/icons/NotificationsActive';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n },\n header: {\n padding: theme.spacing(2, 2, 1, 2),\n },\n content: {\n padding: theme.spacing(0, 2, 2, 2),\n flexGrow: 1,\n overflow: 'auto',\n '&:last-child': {\n paddingBottom: theme.spacing(2),\n },\n },\n sectionTitle: {\n color: theme.palette.text.secondary,\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(0.5),\n fontSize: '0.75rem',\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n },\n list: {\n padding: 0,\n },\n listItem: {\n paddingLeft: 0,\n paddingRight: 0,\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n },\n iconBox: {\n minWidth: 24,\n maxWidth: 24,\n height: 20,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: theme.spacing(1),\n color: theme.palette.text.secondary,\n },\n avatar: {\n width: 20,\n height: 20,\n fontSize: '0.65rem',\n },\n emptyMessage: {\n color: theme.palette.text.disabled,\n fontStyle: 'italic',\n padding: theme.spacing(2, 0),\n textAlign: 'center',\n },\n entityText: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n}));\n\nconst EntityItem = ({ entityRef }: { entityRef: string }) => {\n const classes = useStyles();\n const entityRoute = useRouteRef(entityRouteRef);\n const { primaryTitle, Icon } = useEntityPresentation(entityRef);\n\n return (\n <EntityTooltip\n entity={entityRef}\n interactive={false}\n enterDelay={400}\n enterNextDelay={400}\n placement=\"left\"\n >\n <ListItem\n button\n component={Link}\n to={entityRoute({ entityRef })}\n className={classes.listItem}\n >\n <Box className={classes.iconBox}>\n {Icon ? (\n <Icon fontSize=\"small\" />\n ) : (\n <CategoryIcon style={{ fontSize: 14 }} />\n )}\n </Box>\n <ListItemText\n primary={primaryTitle ?? entityRef}\n classes={{ primary: classes.entityText }}\n />\n </ListItem>\n </EntityTooltip>\n );\n};\n\nexport const FollowedItemsCard = () => {\n const classes = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const { tags, loading: tagsLoading } = useTagsFollow();\n const { entities, loading: entitiesLoading } = useEntityFollow();\n const { users, userEntities, loading: usersLoading } = useUserFollow();\n const { collections, loading: collectionsLoading } = useCollectionsFollow();\n\n const tagRoute = useRouteRef(tagRouteRef);\n const userRoute = useRouteRef(userRouteRef);\n const collectionRoute = useRouteRef(collectionRouteRef);\n\n const isLoading =\n tagsLoading || entitiesLoading || usersLoading || collectionsLoading;\n\n const hasAnyItems =\n tags.length > 0 ||\n entities.length > 0 ||\n users.length > 0 ||\n collections.length > 0;\n\n const renderContent = () => {\n if (isLoading) {\n return (\n <Box>\n {[1, 2, 3].map(row => (\n <Fragment key={row}>\n <Skeleton\n variant=\"text\"\n width=\"40%\"\n style={{ marginTop: 16, marginBottom: 8 }}\n />\n <List dense>\n {[1, 2].map(i => (\n <ListItem key={i} className={classes.listItem}>\n <Skeleton\n variant=\"circle\"\n width={20}\n height={20}\n style={{ marginRight: 8 }}\n />\n <Skeleton variant=\"text\" width=\"60%\" />\n </ListItem>\n ))}\n </List>\n </Fragment>\n ))}\n </Box>\n );\n }\n\n if (!hasAnyItems) {\n return (\n <Typography className={classes.emptyMessage}>\n {t('homePage.noFollowedItems')}\n </Typography>\n );\n }\n\n return (\n <>\n {tags.length > 0 && (\n <>\n <Typography className={classes.sectionTitle}>\n {t('homePage.tags')}\n </Typography>\n <List className={classes.list} dense>\n {tags.slice(0, 5).map(tag => (\n <TagTooltip\n key={tag}\n tag={tag}\n interactive={false}\n enterDelay={400}\n enterNextDelay={400}\n placement=\"left\"\n >\n <ListItem\n button\n component={Link}\n to={tagRoute({ tag })}\n className={classes.listItem}\n >\n <Box className={classes.iconBox}>\n <LocalOfferOutlined style={{ fontSize: 14 }} />\n </Box>\n <ListItemText primary={tag} />\n </ListItem>\n </TagTooltip>\n ))}\n </List>\n </>\n )}\n\n {entities.length > 0 && (\n <>\n <Typography className={classes.sectionTitle}>\n {t('homePage.entities')}\n </Typography>\n <List className={classes.list} dense>\n {entities.slice(0, 5).map(entity => (\n <EntityItem key={entity} entityRef={entity} />\n ))}\n </List>\n </>\n )}\n\n {users.length > 0 && (\n <>\n <Typography className={classes.sectionTitle}>\n {t('homePage.users')}\n </Typography>\n <List className={classes.list} dense>\n {users.slice(0, 5).map(user => {\n const entity = userEntities.get(user);\n const displayName = entity?.spec?.profile?.displayName ?? user;\n const initials = (displayName ?? '')\n .replace(/[^a-zA-Z]/g, '')\n .split(' ')\n .map(p => p[0])\n .join('')\n .substring(0, 2)\n .toUpperCase();\n return (\n <UserTooltip\n key={user}\n entityRef={user}\n interactive={false}\n enterDelay={400}\n enterNextDelay={400}\n placement=\"left\"\n >\n <ListItem\n button\n component={Link}\n to={`${userRoute()}/${user}`}\n className={classes.listItem}\n >\n <ListItemAvatar style={{ minWidth: 32 }}>\n <Avatar\n alt={user}\n src={entity?.spec?.profile?.picture}\n className={classes.avatar}\n >\n {initials || user.charAt(0).toUpperCase()}\n </Avatar>\n </ListItemAvatar>\n <ListItemText primary={displayName} />\n </ListItem>\n </UserTooltip>\n );\n })}\n </List>\n </>\n )}\n\n {collections.length > 0 && (\n <>\n <Typography className={classes.sectionTitle}>\n {t('homePage.collections')}\n </Typography>\n <List className={classes.list} dense>\n {collections.slice(0, 5).map(collection => (\n <CollectionTooltip\n key={collection.id}\n collectionId={collection.id}\n interactive={false}\n enterDelay={400}\n enterNextDelay={400}\n placement=\"left\"\n >\n <ListItem\n button\n component={Link}\n to={collectionRoute({ id: collection.id.toString() })}\n className={classes.listItem}\n >\n <Box className={classes.iconBox}>\n <LibraryBooks style={{ fontSize: 14 }} />\n </Box>\n <ListItemText primary={collection.title} />\n </ListItem>\n </CollectionTooltip>\n ))}\n </List>\n </>\n )}\n </>\n );\n };\n\n return (\n <Card className={classes.root} variant=\"outlined\">\n <CardHeader\n title={t('homePage.followedItems')}\n className={classes.header}\n avatar={<NotificationsActive />}\n titleTypographyProps={{ variant: 'h5' }}\n />\n <CardContent className={classes.content}>{renderContent()}</CardContent>\n </Card>\n );\n};\n"],"names":["Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"FollowedItemsCard.esm.js","sources":["../../../src/components/HomePageCards/FollowedItemsCard.tsx"],"sourcesContent":["import { Fragment } from 'react';\nimport {\n Box,\n Card,\n CardContent,\n CardHeader,\n List,\n ListItem,\n ListItemText,\n ListItemAvatar,\n Avatar,\n makeStyles,\n Typography,\n} from '@material-ui/core';\nimport { Skeleton } from '@material-ui/lab';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation';\nimport {\n tagRouteRef,\n userRouteRef,\n collectionRouteRef,\n entityRouteRef,\n} from '../../routes';\nimport {\n useTagsFollow,\n useEntityFollow,\n useUserFollow,\n useCollectionsFollow,\n} from '../../hooks';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { Link } from 'react-router-dom';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport {\n EntityTooltip,\n UserTooltip,\n TagTooltip,\n CollectionTooltip,\n} from '../Tooltips';\nimport LocalOfferOutlined from '@material-ui/icons/LocalOfferOutlined';\nimport LibraryBooks from '@material-ui/icons/LibraryBooks';\nimport CategoryIcon from '@material-ui/icons/Category';\nimport NotificationsActive from '@material-ui/icons/NotificationsActive';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n },\n header: {\n padding: theme.spacing(2, 2, 1, 2),\n },\n content: {\n padding: theme.spacing(0, 2, 2, 2),\n flexGrow: 1,\n overflow: 'auto',\n '&:last-child': {\n paddingBottom: theme.spacing(2),\n },\n },\n sectionTitle: {\n color: theme.palette.text.secondary,\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(0.5),\n fontSize: '0.75rem',\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n },\n list: {\n padding: 0,\n },\n listItem: {\n paddingLeft: 0,\n paddingRight: 0,\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n },\n iconBox: {\n minWidth: 24,\n maxWidth: 24,\n height: 20,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: theme.spacing(1),\n color: theme.palette.text.secondary,\n },\n avatar: {\n width: 20,\n height: 20,\n fontSize: '0.65rem',\n },\n emptyMessage: {\n color: theme.palette.text.disabled,\n fontStyle: 'italic',\n padding: theme.spacing(2, 0),\n textAlign: 'center',\n },\n entityText: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n}));\n\nconst EntityItem = ({ entityRef }: { entityRef: string }) => {\n const classes = useStyles();\n const entityRoute = useRouteRef(entityRouteRef);\n const { primaryTitle, Icon } = useEntityPresentation(entityRef);\n\n return (\n <EntityTooltip\n entity={entityRef}\n interactive={false}\n enterDelay={400}\n enterNextDelay={400}\n placement=\"left\"\n >\n <ListItem\n button\n component={Link}\n to={entityRoute({ entityRef })}\n className={classes.listItem}\n >\n <Box className={classes.iconBox}>\n {Icon ? (\n <Icon fontSize=\"small\" />\n ) : (\n <CategoryIcon style={{ fontSize: 14 }} />\n )}\n </Box>\n <ListItemText\n primary={primaryTitle ?? entityRef}\n classes={{ primary: classes.entityText }}\n />\n </ListItem>\n </EntityTooltip>\n );\n};\n\nexport const FollowedItemsCard = () => {\n const classes = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const { tags, loading: tagsLoading } = useTagsFollow();\n const { entities, loading: entitiesLoading } = useEntityFollow();\n const { users, userEntities, loading: usersLoading } = useUserFollow();\n const { collections, loading: collectionsLoading } = useCollectionsFollow();\n\n const tagRoute = useRouteRef(tagRouteRef);\n const userRoute = useRouteRef(userRouteRef);\n const collectionRoute = useRouteRef(collectionRouteRef);\n\n const isLoading =\n tagsLoading || entitiesLoading || usersLoading || collectionsLoading;\n\n const hasAnyItems =\n tags.length > 0 ||\n entities.length > 0 ||\n users.length > 0 ||\n collections.length > 0;\n\n const renderContent = () => {\n if (isLoading) {\n return (\n <Box>\n {[1, 2, 3].map(row => (\n <Fragment key={row}>\n <Skeleton\n variant=\"text\"\n width=\"40%\"\n style={{ marginTop: 16, marginBottom: 8 }}\n />\n <List dense>\n {[1, 2].map(i => (\n <ListItem key={i} className={classes.listItem}>\n <Skeleton\n variant=\"circle\"\n width={20}\n height={20}\n style={{ marginRight: 8 }}\n />\n <Skeleton variant=\"text\" width=\"60%\" />\n </ListItem>\n ))}\n </List>\n </Fragment>\n ))}\n </Box>\n );\n }\n\n if (!hasAnyItems) {\n return (\n <Typography className={classes.emptyMessage}>\n {t('homePage.noFollowedItems')}\n </Typography>\n );\n }\n\n return (\n <>\n {tags.length > 0 && (\n <>\n <Typography className={classes.sectionTitle}>\n {t('homePage.tags')}\n </Typography>\n <List className={classes.list} dense>\n {tags.slice(0, 5).map(tag => (\n <TagTooltip\n key={tag}\n tag={tag}\n interactive={false}\n enterDelay={400}\n enterNextDelay={400}\n placement=\"left\"\n >\n <ListItem\n button\n component={Link}\n to={tagRoute({ tag })}\n className={classes.listItem}\n >\n <Box className={classes.iconBox}>\n <LocalOfferOutlined style={{ fontSize: 14 }} />\n </Box>\n <ListItemText primary={tag} />\n </ListItem>\n </TagTooltip>\n ))}\n </List>\n </>\n )}\n\n {entities.length > 0 && (\n <>\n <Typography className={classes.sectionTitle}>\n {t('homePage.entities')}\n </Typography>\n <List className={classes.list} dense>\n {entities.slice(0, 5).map(entity => (\n <EntityItem key={entity} entityRef={entity} />\n ))}\n </List>\n </>\n )}\n\n {users.length > 0 && (\n <>\n <Typography className={classes.sectionTitle}>\n {t('homePage.users')}\n </Typography>\n <List className={classes.list} dense>\n {users.slice(0, 5).map(user => {\n const entity = userEntities.get(user);\n const displayName = entity?.spec?.profile?.displayName ?? user;\n const initials = (displayName ?? '')\n .replace(/[^a-zA-Z]/g, '')\n .split(' ')\n .map(p => p[0])\n .join('')\n .substring(0, 2)\n .toUpperCase();\n return (\n <UserTooltip\n key={user}\n entityRef={user}\n interactive={false}\n enterDelay={400}\n enterNextDelay={400}\n placement=\"left\"\n >\n <ListItem\n button\n component={Link}\n to={`${userRoute()}/${user}`}\n className={classes.listItem}\n >\n <ListItemAvatar style={{ minWidth: 32 }}>\n <Avatar\n alt={user}\n src={entity?.spec?.profile?.picture}\n className={classes.avatar}\n >\n {initials || user.charAt(0).toUpperCase()}\n </Avatar>\n </ListItemAvatar>\n <ListItemText primary={displayName} />\n </ListItem>\n </UserTooltip>\n );\n })}\n </List>\n </>\n )}\n\n {collections.length > 0 && (\n <>\n <Typography className={classes.sectionTitle}>\n {t('homePage.collections')}\n </Typography>\n <List className={classes.list} dense>\n {collections.slice(0, 5).map(collection => (\n <CollectionTooltip\n key={collection.id}\n collectionId={collection.id}\n interactive={false}\n enterDelay={400}\n enterNextDelay={400}\n placement=\"left\"\n >\n <ListItem\n button\n component={Link}\n to={collectionRoute({ id: collection.id.toString() })}\n className={classes.listItem}\n >\n <Box className={classes.iconBox}>\n <LibraryBooks style={{ fontSize: 14 }} />\n </Box>\n <ListItemText primary={collection.title} />\n </ListItem>\n </CollectionTooltip>\n ))}\n </List>\n </>\n )}\n </>\n );\n };\n\n return (\n <Card className={classes.root} variant=\"outlined\">\n <CardHeader\n title={t('homePage.followedItems')}\n className={classes.header}\n avatar={<NotificationsActive />}\n titleTypographyProps={{ variant: 'h5' }}\n />\n <CardContent className={classes.content}>{renderContent()}</CardContent>\n </Card>\n );\n};\n"],"names":["Fragment"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ImpactCard.esm.js","sources":["../../../src/components/HomePageCards/ImpactCard.tsx"],"sourcesContent":["import numeral from 'numeral';\nimport { useIdentityApi, useQetaApi } from '../../hooks';\nimport {\n Box,\n Card,\n CardContent,\n CardHeader,\n Grid,\n Tooltip,\n Typography,\n makeStyles,\n} from '@material-ui/core';\nimport { Alert, Skeleton } from '@material-ui/lab';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport {\n ImpactResponse,\n StatisticsResponse,\n UserStat,\n} from '@drodil/backstage-plugin-qeta-common';\nimport ThumbUp from '@material-ui/icons/ThumbUp';\nimport HelpOutline from '@material-ui/icons/HelpOutline';\nimport QuestionAnswer from '@material-ui/icons/QuestionAnswer';\nimport People from '@material-ui/icons/People';\nimport EmojiEvents from '@material-ui/icons/EmojiEvents';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport LinkIcon from '@material-ui/icons/Link';\nimport Star from '@material-ui/icons/Star';\nimport CheckCircle from '@material-ui/icons/CheckCircle';\nimport TrendingUp from '@material-ui/icons/TrendingUp';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\n\nconst useStyles = makeStyles(theme => ({\n card: {\n height: '100%',\n },\n header: {\n paddingBottom: 0,\n },\n content: {\n paddingTop: theme.spacing(1),\n },\n heroSection: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: theme.spacing(1, 0),\n marginBottom: theme.spacing(1.5),\n },\n viewsBox: {\n display: 'flex',\n alignItems: 'baseline',\n },\n viewsValue: {\n fontSize: '2rem',\n fontWeight: 'bold',\n color: theme.palette.primary.main,\n lineHeight: 1,\n },\n viewsLabel: {\n marginLeft: theme.spacing(0.5),\n color: theme.palette.text.secondary,\n fontSize: '0.9rem',\n },\n reputationBox: {\n display: 'flex',\n alignItems: 'center',\n background:\n theme.palette.type === 'dark'\n ? 'rgba(255, 215, 0, 0.1)'\n : 'rgba(255, 215, 0, 0.15)',\n padding: theme.spacing(0.75, 1.5),\n borderRadius: 20,\n },\n reputationIcon: {\n color: '#FFD700',\n marginRight: theme.spacing(0.5),\n fontSize: '1.2rem',\n },\n reputationValue: {\n fontWeight: 'bold',\n fontSize: '1rem',\n userSelect: 'none',\n },\n statGrid: {\n marginTop: theme.spacing(0.5),\n },\n statItem: {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(0.5, 0),\n },\n statIcon: {\n color: theme.palette.text.secondary,\n marginRight: theme.spacing(1),\n fontSize: '1rem',\n },\n statValue: {\n fontWeight: 'bold',\n marginRight: theme.spacing(0.5),\n minWidth: 24,\n },\n statLabel: {\n color: theme.palette.text.secondary,\n fontSize: '0.8rem',\n },\n contributionsText: {\n color: theme.palette.text.secondary,\n marginBottom: theme.spacing(1),\n fontSize: '0.875rem',\n },\n}));\n\nexport const ImpactCard = () => {\n const { t } = useTranslationRef(qetaTranslationRef);\n const classes = useStyles();\n const { value: user, loading: userLoading } = useIdentityApi(\n api => api.getBackstageIdentity(),\n [],\n );\n\n const {\n value: response,\n loading: statsLoading,\n error,\n } = useQetaApi<{\n impact: ImpactResponse;\n stats: StatisticsResponse<UserStat>;\n } | null>(\n async api => {\n if (!user) {\n return null;\n }\n const [impact, stats] = await Promise.all([\n api.getUserImpact(),\n api.getUserStats(user.userEntityRef),\n ]);\n return { impact, stats };\n },\n [user],\n );\n\n const loading = userLoading || statsLoading;\n\n const renderContent = () => {\n if (loading) {\n return (\n <Box>\n <Box display=\"flex\" justifyContent=\"space-between\" mb={2}>\n <Skeleton variant=\"text\" width=\"40%\" height={40} />\n <Skeleton\n variant=\"rect\"\n width={80}\n height={32}\n style={{ borderRadius: 16 }}\n />\n </Box>\n <Grid container spacing={1}>\n {Array.from(new Array(6)).map((_, i) => (\n <Grid item xs={6} key={i}>\n <Skeleton variant=\"text\" width=\"80%\" />\n </Grid>\n ))}\n </Grid>\n </Box>\n );\n }\n\n if (error) {\n return <Alert severity=\"error\">{t('impactCard.error')}</Alert>;\n }\n\n if (!response) {\n return null;\n }\n\n const { impact, stats } = response;\n\n const formatNumber = (num: number) => {\n return num >= 1000 ? numeral(num).format('0.0a') : num;\n };\n\n const statItems = [\n {\n icon: TrendingUp,\n value:\n stats.summary.totalQuestions +\n stats.summary.totalAnswers +\n stats.summary.totalArticles +\n stats.summary.totalLinks,\n label: t('impactCard.totalContributions'),\n },\n {\n icon: HelpOutline,\n value: stats.summary.totalQuestions,\n label: t('impactCard.questions'),\n },\n {\n icon: QuestionAnswer,\n value: stats.summary.totalAnswers,\n label: t('impactCard.answers'),\n },\n {\n icon: DescriptionIcon,\n value: stats.summary.totalArticles,\n label: t('impactCard.articles'),\n },\n {\n icon: LinkIcon,\n value: stats.summary.totalLinks,\n label: t('impactCard.links'),\n },\n {\n icon: ThumbUp,\n value: stats.summary.totalVotes,\n label: t('impactCard.votes'),\n },\n {\n icon: People,\n value: stats.summary.totalFollowers,\n label: t('impactCard.followers'),\n },\n {\n icon: Star,\n value: stats.summary.postScore,\n label: t('impactCard.postScore'),\n },\n {\n icon: CheckCircle,\n value: stats.summary.correctAnswers,\n label: t('impactCard.correctAnswers'),\n },\n ];\n\n return (\n <>\n <Box className={classes.heroSection}>\n <Box className={classes.viewsBox}>\n <Typography className={classes.viewsValue}>\n {formatNumber(impact.impact)}\n </Typography>\n <Typography className={classes.viewsLabel}>\n {t('impactCard.views')}\n </Typography>\n </Box>\n <Box className={classes.reputationBox}>\n <EmojiEvents className={classes.reputationIcon} />\n <Typography className={classes.reputationValue}>\n {stats.summary.reputation || 0}\n </Typography>\n </Box>\n </Box>\n\n <Typography variant=\"body2\" className={classes.contributionsText}>\n {t('impactCard.contributions', {\n lastWeek: impact.lastWeekImpact.toString(10),\n })}\n </Typography>\n\n <Grid container spacing={1} className={classes.statGrid}>\n {statItems.map((item, index) => (\n <Grid item xs={6} sm={4} key={index}>\n <Tooltip title={item.label}>\n <Box className={classes.statItem}>\n <item.icon className={classes.statIcon} />\n <Typography className={classes.statValue}>\n {formatNumber(item.value)}\n </Typography>\n <Typography className={classes.statLabel} noWrap>\n {item.label}\n </Typography>\n </Box>\n </Tooltip>\n </Grid>\n ))}\n </Grid>\n </>\n );\n };\n\n return (\n <Card className={classes.card} variant=\"outlined\">\n <CardHeader\n title={t('impactCard.title')}\n className={classes.header}\n avatar={<VisibilityIcon />}\n titleTypographyProps={{ variant: 'h5' }}\n />\n <CardContent className={classes.content}>{renderContent()}</CardContent>\n </Card>\n );\n};\n"],"names":["QuestionAnswer","People","Star","VisibilityIcon"],"mappings":"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"}
1
+ {"version":3,"file":"ImpactCard.esm.js","sources":["../../../src/components/HomePageCards/ImpactCard.tsx"],"sourcesContent":["import numeral from 'numeral';\nimport { useIdentityApi, useQetaApi } from '../../hooks';\nimport {\n Box,\n Card,\n CardContent,\n CardHeader,\n Grid,\n Tooltip,\n Typography,\n makeStyles,\n} from '@material-ui/core';\nimport { Alert, Skeleton } from '@material-ui/lab';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport {\n ImpactResponse,\n StatisticsResponse,\n UserStat,\n} from '@drodil/backstage-plugin-qeta-common';\nimport ThumbUp from '@material-ui/icons/ThumbUp';\nimport HelpOutline from '@material-ui/icons/HelpOutline';\nimport QuestionAnswer from '@material-ui/icons/QuestionAnswer';\nimport People from '@material-ui/icons/People';\nimport EmojiEvents from '@material-ui/icons/EmojiEvents';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport LinkIcon from '@material-ui/icons/Link';\nimport Star from '@material-ui/icons/Star';\nimport CheckCircle from '@material-ui/icons/CheckCircle';\nimport TrendingUp from '@material-ui/icons/TrendingUp';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\n\nconst useStyles = makeStyles(theme => ({\n card: {\n height: '100%',\n },\n header: {\n paddingBottom: 0,\n },\n content: {\n paddingTop: theme.spacing(1),\n },\n heroSection: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: theme.spacing(1, 0),\n marginBottom: theme.spacing(1.5),\n },\n viewsBox: {\n display: 'flex',\n alignItems: 'baseline',\n },\n viewsValue: {\n fontSize: '2rem',\n fontWeight: 'bold',\n color: theme.palette.primary.main,\n lineHeight: 1,\n },\n viewsLabel: {\n marginLeft: theme.spacing(0.5),\n color: theme.palette.text.secondary,\n fontSize: '0.9rem',\n },\n reputationBox: {\n display: 'flex',\n alignItems: 'center',\n background:\n theme.palette.type === 'dark'\n ? 'rgba(255, 215, 0, 0.1)'\n : 'rgba(255, 215, 0, 0.15)',\n padding: theme.spacing(0.75, 1.5),\n borderRadius: 20,\n },\n reputationIcon: {\n color: '#FFD700',\n marginRight: theme.spacing(0.5),\n fontSize: '1.2rem',\n },\n reputationValue: {\n fontWeight: 'bold',\n fontSize: '1rem',\n userSelect: 'none',\n },\n statGrid: {\n marginTop: theme.spacing(0.5),\n },\n statItem: {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(0.5, 0),\n },\n statIcon: {\n color: theme.palette.text.secondary,\n marginRight: theme.spacing(1),\n fontSize: '1rem',\n },\n statValue: {\n fontWeight: 'bold',\n marginRight: theme.spacing(0.5),\n minWidth: 24,\n },\n statLabel: {\n color: theme.palette.text.secondary,\n fontSize: '0.8rem',\n },\n contributionsText: {\n color: theme.palette.text.secondary,\n marginBottom: theme.spacing(1),\n fontSize: '0.875rem',\n },\n}));\n\nexport const ImpactCard = () => {\n const { t } = useTranslationRef(qetaTranslationRef);\n const classes = useStyles();\n const { value: user, loading: userLoading } = useIdentityApi(\n api => api.getBackstageIdentity(),\n [],\n );\n\n const {\n value: response,\n loading: statsLoading,\n error,\n } = useQetaApi<{\n impact: ImpactResponse;\n stats: StatisticsResponse<UserStat>;\n } | null>(\n async api => {\n if (!user) {\n return null;\n }\n const [impact, stats] = await Promise.all([\n api.getUserImpact(),\n api.getUserStats(user.userEntityRef),\n ]);\n return { impact, stats };\n },\n [user],\n );\n\n const loading = userLoading || statsLoading;\n\n const renderContent = () => {\n if (loading) {\n return (\n <Box>\n <Box display=\"flex\" justifyContent=\"space-between\" mb={2}>\n <Skeleton variant=\"text\" width=\"40%\" height={40} />\n <Skeleton\n variant=\"rect\"\n width={80}\n height={32}\n style={{ borderRadius: 16 }}\n />\n </Box>\n <Grid container spacing={1}>\n {Array.from(new Array(6)).map((_, i) => (\n <Grid item xs={6} key={i}>\n <Skeleton variant=\"text\" width=\"80%\" />\n </Grid>\n ))}\n </Grid>\n </Box>\n );\n }\n\n if (error) {\n return <Alert severity=\"error\">{t('impactCard.error')}</Alert>;\n }\n\n if (!response) {\n return null;\n }\n\n const { impact, stats } = response;\n\n const formatNumber = (num: number) => {\n return num >= 1000 ? numeral(num).format('0.0a') : num;\n };\n\n const statItems = [\n {\n icon: TrendingUp,\n value:\n stats.summary.totalQuestions +\n stats.summary.totalAnswers +\n stats.summary.totalArticles +\n stats.summary.totalLinks,\n label: t('impactCard.totalContributions'),\n },\n {\n icon: HelpOutline,\n value: stats.summary.totalQuestions,\n label: t('impactCard.questions'),\n },\n {\n icon: QuestionAnswer,\n value: stats.summary.totalAnswers,\n label: t('impactCard.answers'),\n },\n {\n icon: DescriptionIcon,\n value: stats.summary.totalArticles,\n label: t('impactCard.articles'),\n },\n {\n icon: LinkIcon,\n value: stats.summary.totalLinks,\n label: t('impactCard.links'),\n },\n {\n icon: ThumbUp,\n value: stats.summary.totalVotes,\n label: t('impactCard.votes'),\n },\n {\n icon: People,\n value: stats.summary.totalFollowers,\n label: t('impactCard.followers'),\n },\n {\n icon: Star,\n value: stats.summary.postScore,\n label: t('impactCard.postScore'),\n },\n {\n icon: CheckCircle,\n value: stats.summary.correctAnswers,\n label: t('impactCard.correctAnswers'),\n },\n ];\n\n return (\n <>\n <Box className={classes.heroSection}>\n <Box className={classes.viewsBox}>\n <Typography className={classes.viewsValue}>\n {formatNumber(impact.impact)}\n </Typography>\n <Typography className={classes.viewsLabel}>\n {t('impactCard.views')}\n </Typography>\n </Box>\n <Box className={classes.reputationBox}>\n <EmojiEvents className={classes.reputationIcon} />\n <Typography className={classes.reputationValue}>\n {stats.summary.reputation || 0}\n </Typography>\n </Box>\n </Box>\n\n <Typography variant=\"body2\" className={classes.contributionsText}>\n {t('impactCard.contributions', {\n lastWeek: impact.lastWeekImpact.toString(10),\n })}\n </Typography>\n\n <Grid container spacing={1} className={classes.statGrid}>\n {statItems.map((item, index) => (\n <Grid item xs={6} sm={4} key={index}>\n <Tooltip title={item.label}>\n <Box className={classes.statItem}>\n <item.icon className={classes.statIcon} />\n <Typography className={classes.statValue}>\n {formatNumber(item.value)}\n </Typography>\n <Typography className={classes.statLabel} noWrap>\n {item.label}\n </Typography>\n </Box>\n </Tooltip>\n </Grid>\n ))}\n </Grid>\n </>\n );\n };\n\n return (\n <Card className={classes.card} variant=\"outlined\">\n <CardHeader\n title={t('impactCard.title')}\n className={classes.header}\n avatar={<VisibilityIcon />}\n titleTypographyProps={{ variant: 'h5' }}\n />\n <CardContent className={classes.content}>{renderContent()}</CardContent>\n </Card>\n );\n};\n"],"names":["QuestionAnswer","People","Star","VisibilityIcon"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PostsCard.esm.js","sources":["../../../src/components/HomePageCards/PostsCard.tsx"],"sourcesContent":["import { PostsQuery, PostType } from '@drodil/backstage-plugin-qeta-common';\nimport { PostListItem } from '../PostsContainer';\nimport { useQetaApi } from '../../hooks';\nimport { Card, CardHeader, Divider, Grid } from '@material-ui/core';\n\nexport const PostsCard = (props: {\n title: string;\n options?: PostsQuery;\n postType?: PostType;\n}) => {\n const { value: response } = useQetaApi(\n api =>\n api.getPosts({\n limit: 3,\n type: props.postType,\n includeAttachments: false,\n includeExperts: false,\n includeAnswers: false,\n includeComments: false,\n includeVotes: false,\n includeTrend: false,\n ...props.options,\n }),\n [],\n );\n\n const posts = response?.posts ?? [];\n if (posts.length === 0) {\n return null;\n }\n\n return (\n <Card>\n <CardHeader style={{ paddingBottom: '8px' }} title={props.title} />\n <Grid container spacing={2}>\n {posts.map(question => {\n return (\n <Grid item xs={12} key={question.id}>\n <PostListItem post={question} type={props.postType} />\n <Divider />\n </Grid>\n );\n })}\n </Grid>\n </Card>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKa,MAAA,SAAA,GAAY,CAAC,KAIpB,KAAA;AACJ,EAAM,MAAA,EAAE,KAAO,EAAA,QAAA,EAAa,GAAA,UAAA;AAAA,IAC1B,CAAA,GAAA,KACE,IAAI,QAAS,CAAA;AAAA,MACX,KAAO,EAAA,CAAA;AAAA,MACP,MAAM,KAAM,CAAA,QAAA;AAAA,MACZ,kBAAoB,EAAA,KAAA;AAAA,MACpB,cAAgB,EAAA,KAAA;AAAA,MAChB,cAAgB,EAAA,KAAA;AAAA,MAChB,eAAiB,EAAA,KAAA;AAAA,MACjB,YAAc,EAAA,KAAA;AAAA,MACd,YAAc,EAAA,KAAA;AAAA,MACd,GAAG,KAAM,CAAA;AAAA,KACV,CAAA;AAAA,IACH;AAAC,GACH;AAEA,EAAM,MAAA,KAAA,GAAQ,QAAU,EAAA,KAAA,IAAS,EAAC;AAClC,EAAI,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACtB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,4BACG,IACC,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,UAAA,EAAA,EAAW,OAAO,EAAE,aAAA,EAAe,OAAS,EAAA,KAAA,EAAO,MAAM,KAAO,EAAA,CAAA;AAAA,oBACjE,GAAA,CAAC,QAAK,SAAS,EAAA,IAAA,EAAC,SAAS,CACtB,EAAA,QAAA,EAAA,KAAA,CAAM,IAAI,CAAY,QAAA,KAAA;AACrB,MAAA,uBACG,IAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,IAAI,EACb,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,YAAa,EAAA,EAAA,IAAA,EAAM,QAAU,EAAA,IAAA,EAAM,MAAM,QAAU,EAAA,CAAA;AAAA,4BACnD,OAAQ,EAAA,EAAA;AAAA,OAAA,EAAA,EAFa,SAAS,EAGjC,CAAA;AAAA,KAEH,CACH,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"PostsCard.esm.js","sources":["../../../src/components/HomePageCards/PostsCard.tsx"],"sourcesContent":["import { PostsQuery, PostType } from '@drodil/backstage-plugin-qeta-common';\nimport { PostListItem } from '../PostsContainer';\nimport { useQetaApi } from '../../hooks';\nimport { Card, CardHeader, Divider, Grid } from '@material-ui/core';\n\nexport const PostsCard = (props: {\n title: string;\n options?: PostsQuery;\n postType?: PostType;\n}) => {\n const { value: response } = useQetaApi(\n api =>\n api.getPosts({\n limit: 3,\n type: props.postType,\n includeAttachments: false,\n includeExperts: false,\n includeAnswers: false,\n includeComments: false,\n includeVotes: false,\n includeTrend: false,\n ...props.options,\n }),\n [],\n );\n\n const posts = response?.posts ?? [];\n if (posts.length === 0) {\n return null;\n }\n\n return (\n <Card>\n <CardHeader style={{ paddingBottom: '8px' }} title={props.title} />\n <Grid container spacing={2}>\n {posts.map(question => {\n return (\n <Grid item xs={12} key={question.id}>\n <PostListItem post={question} type={props.postType} />\n <Divider />\n </Grid>\n );\n })}\n </Grid>\n </Card>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKO,MAAM,SAAA,GAAY,CAAC,KAAA,KAIpB;AACJ,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAI,UAAA;AAAA,IAC1B,CAAA,GAAA,KACE,IAAI,QAAA,CAAS;AAAA,MACX,KAAA,EAAO,CAAA;AAAA,MACP,MAAM,KAAA,CAAM,QAAA;AAAA,MACZ,kBAAA,EAAoB,KAAA;AAAA,MACpB,cAAA,EAAgB,KAAA;AAAA,MAChB,cAAA,EAAgB,KAAA;AAAA,MAChB,eAAA,EAAiB,KAAA;AAAA,MACjB,YAAA,EAAc,KAAA;AAAA,MACd,YAAA,EAAc,KAAA;AAAA,MACd,GAAG,KAAA,CAAM;AAAA,KACV,CAAA;AAAA,IACH;AAAC,GACH;AAEA,EAAA,MAAM,KAAA,GAAQ,QAAA,EAAU,KAAA,IAAS,EAAC;AAClC,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,4BACG,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAO,EAAE,aAAA,EAAe,OAAM,EAAG,KAAA,EAAO,MAAM,KAAA,EAAO,CAAA;AAAA,oBACjE,GAAA,CAAC,QAAK,SAAA,EAAS,IAAA,EAAC,SAAS,CAAA,EACtB,QAAA,EAAA,KAAA,CAAM,IAAI,CAAA,QAAA,KAAY;AACrB,MAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,IAAI,EAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,MAAM,QAAA,EAAU,CAAA;AAAA,4BACnD,OAAA,EAAA,EAAQ;AAAA,OAAA,EAAA,EAFa,SAAS,EAGjC,CAAA;AAAA,IAEJ,CAAC,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ExpertIcon.esm.js","sources":["../../../src/components/Icons/ExpertIcon.tsx"],"sourcesContent":["import { SvgIconProps, Tooltip } from '@material-ui/core';\nimport StarIcon from '@material-ui/icons/Star';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nexport const ExpertIcon = (props: SvgIconProps) => {\n const { t } = useTranslationRef(qetaTranslationRef);\n return (\n <Tooltip title={t('common.tagExpert')}>\n <StarIcon\n color=\"secondary\"\n style={{ width: '0.5em', height: '0.5em' }}\n {...props}\n />\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;AAKa,MAAA,UAAA,GAAa,CAAC,KAAwB,KAAA;AACjD,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,uBACG,GAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,CAAA,CAAE,kBAAkB,CAClC,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,KAAM,EAAA,WAAA;AAAA,MACN,KAAO,EAAA,EAAE,KAAO,EAAA,OAAA,EAAS,QAAQ,OAAQ,EAAA;AAAA,MACxC,GAAG;AAAA;AAAA,GAER,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"ExpertIcon.esm.js","sources":["../../../src/components/Icons/ExpertIcon.tsx"],"sourcesContent":["import { SvgIconProps, Tooltip } from '@material-ui/core';\nimport StarIcon from '@material-ui/icons/Star';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nexport const ExpertIcon = (props: SvgIconProps) => {\n const { t } = useTranslationRef(qetaTranslationRef);\n return (\n <Tooltip title={t('common.tagExpert')}>\n <StarIcon\n color=\"secondary\"\n style={{ width: '0.5em', height: '0.5em' }}\n {...props}\n />\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;AAKO,MAAM,UAAA,GAAa,CAAC,KAAA,KAAwB;AACjD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,uBACE,GAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,kBAAkB,CAAA,EAClC,QAAA,kBAAA,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,WAAA;AAAA,MACN,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA,EAAS,QAAQ,OAAA,EAAQ;AAAA,MACxC,GAAG;AAAA;AAAA,GACN,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"LeftMenu.esm.js","sources":["../../../src/components/LeftMenu/LeftMenu.tsx"],"sourcesContent":["import {\n Box,\n IconButton,\n List,\n ListItemIcon,\n makeStyles,\n MenuItem,\n Tooltip,\n Typography,\n} from '@material-ui/core';\nimport { KeyboardEvent, MouseEvent, ReactNode } from 'react';\nimport { useApp, useRouteRef } from '@backstage/core-plugin-api';\nimport { useNavigate } from 'react-router-dom';\nimport { useLocation } from 'react-use';\n// Icons\nimport HomeOutlined from '@material-ui/icons/HomeOutlined';\nimport HelpOutline from '@material-ui/icons/HelpOutline';\nimport LibraryBooksOutlined from '@material-ui/icons/LibraryBooksOutlined';\nimport LinkIcon from '@material-ui/icons/Link';\nimport StarBorder from '@material-ui/icons/StarBorder';\nimport CategoryOutlined from '@material-ui/icons/CategoryOutlined'; // For Entities?\nimport LocalOfferOutlined from '@material-ui/icons/LocalOfferOutlined';\nimport PlaylistPlayOutlined from '@material-ui/icons/PlaylistPlayOutlined'; // Check if exists, else PlaylistPlay\nimport PeopleOutline from '@material-ui/icons/PeopleOutline';\nimport PersonOutline from '@material-ui/icons/PersonOutline';\nimport EmojiEventsOutlined from '@material-ui/icons/EmojiEventsOutlined'; // Check, else plain\nimport SettingsOutlined from '@material-ui/icons/SettingsOutlined';\nimport GavelOutlined from '@material-ui/icons/GavelOutlined';\nimport MenuOpenIcon from '@material-ui/icons/MenuOpen';\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\nimport RateReviewOutlined from '@material-ui/icons/RateReviewOutlined';\n\nimport {\n articlesRouteRef,\n collectionsRouteRef,\n entitiesRouteRef,\n favoriteQuestionsRouteRef,\n linksRouteRef,\n moderatorRouteRef,\n qetaRouteRef,\n questionsRouteRef,\n reviewRouteRef,\n settingsRouteRef,\n statisticsRouteRef,\n tagsRouteRef,\n userRouteRef,\n usersRouteRef,\n} from '../../routes';\nimport { useCanReview, useIdentityApi, useIsModerator } from '../../hooks';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nexport const useStyles = makeStyles(\n theme => {\n return {\n leftMenu: {\n top: '0',\n width: '220px', // Standard width\n paddingTop: 0,\n paddingBottom: theme.spacing(2),\n transition: 'width 0.2s ease-in-out',\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n },\n leftMenuCompact: {\n width: '70px',\n overflowX: 'hidden',\n '& $sectionHeader': {\n display: 'none',\n },\n },\n inPopup: {\n marginRight: 0,\n padding: theme.spacing(1),\n width: 'auto',\n },\n outsidePopup: {\n paddingRight: theme.spacing(2),\n },\n menuItem: {\n margin: (props: any) => (props.compact ? 0 : theme.spacing(0, 0)),\n justifyContent: (props: any) =>\n props.compact ? 'center' : 'flex-start',\n padding: (props: any) =>\n props.compact ? theme.spacing(1, 0) : theme.spacing(0.5, 0.5),\n borderRadius: (props: any) =>\n props.compact ? 0 : theme.shape.borderRadius,\n transition: 'all 0.2s ease-in-out',\n color: theme.palette.text.primary,\n display: 'flex',\n alignItems: 'center',\n minHeight: 40,\n maxWidth: '75%',\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n },\n selectedMenuItem: {\n color: theme.palette.primary.main,\n backgroundColor: 'transparent',\n fontWeight: 600,\n position: 'relative',\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n '& svg': {\n color: theme.palette.primary.main,\n },\n },\n menuIcon: {\n minWidth: '32px',\n color: 'inherit',\n display: 'flex',\n justifyContent: 'center',\n },\n sectionHeader: {\n padding: theme.spacing(0.5, 2, 0.5, 1),\n marginTop: theme.spacing(2),\n color: theme.palette.text.secondary,\n fontWeight: 600,\n textTransform: 'uppercase',\n fontSize: '14px',\n letterSpacing: '0.5px',\n whiteSpace: 'nowrap',\n },\n toggleButton: {\n marginLeft: 'auto',\n marginRight: theme.spacing(0),\n marginBottom: theme.spacing(1),\n },\n label: {\n marginLeft: theme.spacing(1),\n whiteSpace: 'nowrap',\n opacity: 1,\n transition: 'opacity 0.2s',\n },\n labelHidden: {\n opacity: 0,\n width: 0,\n display: 'none',\n },\n };\n },\n { name: 'QetaLeftMenu' },\n);\n\nexport const LeftMenu = (props: {\n onKeyDown?: (event: KeyboardEvent) => void;\n autoFocusItem?: boolean;\n onClick?: (event: MouseEvent<EventTarget>) => void;\n inPopup?: boolean;\n compact?: boolean;\n onToggle?: () => void;\n}) => {\n const rootRoute = useRouteRef(qetaRouteRef);\n const tagsRoute = useRouteRef(tagsRouteRef);\n const favoritesRoute = useRouteRef(favoriteQuestionsRouteRef);\n const statisticsRoute = useRouteRef(statisticsRouteRef);\n const userRoute = useRouteRef(userRouteRef);\n const questionsRoute = useRouteRef(questionsRouteRef);\n const articlesRoute = useRouteRef(articlesRouteRef);\n const linksRoute = useRouteRef(linksRouteRef);\n const collectionsRoute = useRouteRef(collectionsRouteRef);\n const entitiesRoute = useRouteRef(entitiesRouteRef);\n const usersRoute = useRouteRef(usersRouteRef);\n const moderatorRoute = useRouteRef(moderatorRouteRef);\n const reviewRoute = useRouteRef(reviewRouteRef);\n const settingsRoute = useRouteRef(settingsRouteRef);\n const styles = useStyles(props);\n const { t } = useTranslationRef(qetaTranslationRef);\n const location = useLocation();\n const navigate = useNavigate();\n const { isModerator } = useIsModerator();\n const { canReview } = useCanReview();\n const app = useApp();\n const { compact = false, onToggle } = props;\n const {\n value: user,\n loading: loadingUser,\n error: userError,\n } = useIdentityApi(api => api.getBackstageIdentity(), []);\n\n const EntityIcon = app.getSystemIcon('kind:system') ?? CategoryOutlined;\n\n const CustomMenuItem = ({\n route,\n hasSubRoutes,\n children,\n label,\n }: {\n route: string;\n hasSubRoutes?: boolean;\n children: ReactNode;\n label: string;\n }) => {\n const isSelected =\n route === location.pathname ||\n (hasSubRoutes && location.pathname?.startsWith(route));\n\n return (\n <Tooltip title={compact ? label : ''} placement=\"right\">\n <MenuItem\n onClick={e => {\n if (e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) {\n return;\n }\n e.preventDefault();\n navigate(route);\n if (props.onClick) {\n props.onClick(e);\n }\n }}\n className={`${styles.menuItem} ${\n isSelected ? styles.selectedMenuItem : ''\n }`}\n href={route}\n component=\"a\"\n >\n {children}\n <Typography\n variant=\"body2\"\n className={compact ? styles.labelHidden : styles.label}\n style={{ fontWeight: isSelected ? 600 : 400 }}\n >\n {label}\n </Typography>\n </MenuItem>\n </Tooltip>\n );\n };\n\n const isPopup = props.inPopup;\n const isCompact = compact && !isPopup;\n\n return (\n <List\n id=\"left-menu\"\n className={`${styles.leftMenu} ${\n isPopup\n ? styles.inPopup\n : `${styles.outsidePopup} ${isCompact ? styles.leftMenuCompact : ''}`\n }`}\n component=\"nav\"\n aria-labelledby=\"nested-list-subheader\"\n disablePadding\n >\n <CustomMenuItem route={rootRoute()} label={t('leftMenu.home')}>\n <ListItemIcon className={styles.menuIcon}>\n <HomeOutlined fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n <li style={{ listStyle: 'none' }}>\n <Typography className={styles.sectionHeader}>\n {t('leftMenu.content')}\n </Typography>\n </li>\n\n <CustomMenuItem\n route={questionsRoute()}\n hasSubRoutes\n label={t('leftMenu.questions')}\n >\n <ListItemIcon className={styles.menuIcon}>\n <HelpOutline fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n <CustomMenuItem\n route={articlesRoute()}\n hasSubRoutes\n label={t('leftMenu.articles')}\n >\n <ListItemIcon className={styles.menuIcon}>\n <LibraryBooksOutlined fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n <CustomMenuItem\n route={linksRoute()}\n hasSubRoutes\n label={t('leftMenu.links')}\n >\n <ListItemIcon className={styles.menuIcon}>\n <LinkIcon fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n <CustomMenuItem\n route={favoritesRoute()}\n label={t('leftMenu.favoriteQuestions')}\n >\n <ListItemIcon className={styles.menuIcon}>\n <StarBorder fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n <CustomMenuItem\n route={entitiesRoute()}\n hasSubRoutes\n label={t('leftMenu.entities')}\n >\n <ListItemIcon className={styles.menuIcon}>\n <EntityIcon fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n <CustomMenuItem\n route={tagsRoute()}\n hasSubRoutes\n label={t('leftMenu.tags')}\n >\n <ListItemIcon className={styles.menuIcon}>\n <LocalOfferOutlined fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n <li style={{ listStyle: 'none' }}>\n <Typography className={styles.sectionHeader}>\n {t('leftMenu.community')}\n </Typography>\n </li>\n\n <CustomMenuItem\n route={collectionsRoute()}\n hasSubRoutes\n label={t('leftMenu.collections')}\n >\n <ListItemIcon className={styles.menuIcon}>\n <PlaylistPlayOutlined fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n <CustomMenuItem route={usersRoute()} label={t('leftMenu.users')}>\n <ListItemIcon className={styles.menuIcon}>\n <PeopleOutline fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n {user && !loadingUser && !userError && (\n <CustomMenuItem\n route={`${userRoute()}/${user.userEntityRef}`}\n label={t('leftMenu.profile')}\n >\n <ListItemIcon className={styles.menuIcon}>\n <PersonOutline fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n )}\n\n <CustomMenuItem\n route={statisticsRoute()}\n label={t('leftMenu.statistics')}\n >\n <ListItemIcon className={styles.menuIcon}>\n <EmojiEventsOutlined fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n <li style={{ listStyle: 'none' }}>\n <Typography className={styles.sectionHeader}>\n {t('leftMenu.manage')}\n </Typography>\n </li>\n <CustomMenuItem route={settingsRoute()} label={t('leftMenu.settings')}>\n <ListItemIcon className={styles.menuIcon}>\n <SettingsOutlined fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n {canReview && (\n <CustomMenuItem route={reviewRoute()} label={t('leftMenu.review')}>\n <ListItemIcon className={styles.menuIcon}>\n <RateReviewOutlined fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n )}\n {isModerator && (\n <CustomMenuItem route={moderatorRoute()} label={t('leftMenu.moderate')}>\n <ListItemIcon className={styles.menuIcon}>\n <GavelOutlined fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n )}\n {!isPopup && (\n <Box\n display=\"flex\"\n justifyContent={isCompact ? 'center' : 'flex-start'}\n style={{ marginTop: 'auto' }}\n >\n <Tooltip\n title={isCompact ? t('leftMenu.expand') : t('leftMenu.collapse')}\n placement=\"right\"\n >\n <IconButton\n onClick={onToggle}\n size=\"small\"\n className={isCompact ? '' : styles.toggleButton}\n style={{ marginTop: 8, marginLeft: isCompact ? -10 : 5 }}\n >\n {isCompact ? <ChevronRightIcon /> : <MenuOpenIcon />}\n </IconButton>\n </Tooltip>\n </Box>\n )}\n </List>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LeftMenu.esm.js","sources":["../../../src/components/LeftMenu/LeftMenu.tsx"],"sourcesContent":["import {\n Box,\n IconButton,\n List,\n ListItemIcon,\n makeStyles,\n MenuItem,\n Tooltip,\n Typography,\n} from '@material-ui/core';\nimport { KeyboardEvent, MouseEvent, ReactNode } from 'react';\nimport { useApp, useRouteRef } from '@backstage/core-plugin-api';\nimport { useNavigate } from 'react-router-dom';\nimport { useLocation } from 'react-use';\n// Icons\nimport HomeOutlined from '@material-ui/icons/HomeOutlined';\nimport HelpOutline from '@material-ui/icons/HelpOutline';\nimport LibraryBooksOutlined from '@material-ui/icons/LibraryBooksOutlined';\nimport LinkIcon from '@material-ui/icons/Link';\nimport StarBorder from '@material-ui/icons/StarBorder';\nimport CategoryOutlined from '@material-ui/icons/CategoryOutlined'; // For Entities?\nimport LocalOfferOutlined from '@material-ui/icons/LocalOfferOutlined';\nimport PlaylistPlayOutlined from '@material-ui/icons/PlaylistPlayOutlined'; // Check if exists, else PlaylistPlay\nimport PeopleOutline from '@material-ui/icons/PeopleOutline';\nimport PersonOutline from '@material-ui/icons/PersonOutline';\nimport EmojiEventsOutlined from '@material-ui/icons/EmojiEventsOutlined'; // Check, else plain\nimport SettingsOutlined from '@material-ui/icons/SettingsOutlined';\nimport GavelOutlined from '@material-ui/icons/GavelOutlined';\nimport MenuOpenIcon from '@material-ui/icons/MenuOpen';\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\nimport RateReviewOutlined from '@material-ui/icons/RateReviewOutlined';\n\nimport {\n articlesRouteRef,\n collectionsRouteRef,\n entitiesRouteRef,\n favoriteQuestionsRouteRef,\n linksRouteRef,\n moderatorRouteRef,\n qetaRouteRef,\n questionsRouteRef,\n reviewRouteRef,\n settingsRouteRef,\n statisticsRouteRef,\n tagsRouteRef,\n userRouteRef,\n usersRouteRef,\n} from '../../routes';\nimport { useCanReview, useIdentityApi, useIsModerator } from '../../hooks';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nexport const useStyles = makeStyles(\n theme => {\n return {\n leftMenu: {\n top: '0',\n width: '220px', // Standard width\n paddingTop: 0,\n paddingBottom: theme.spacing(2),\n transition: 'width 0.2s ease-in-out',\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n },\n leftMenuCompact: {\n width: '70px',\n overflowX: 'hidden',\n '& $sectionHeader': {\n display: 'none',\n },\n },\n inPopup: {\n marginRight: 0,\n padding: theme.spacing(1),\n width: 'auto',\n },\n outsidePopup: {\n paddingRight: theme.spacing(2),\n },\n menuItem: {\n margin: (props: any) => (props.compact ? 0 : theme.spacing(0, 0)),\n justifyContent: (props: any) =>\n props.compact ? 'center' : 'flex-start',\n padding: (props: any) =>\n props.compact ? theme.spacing(1, 0) : theme.spacing(0.5, 0.5),\n borderRadius: (props: any) =>\n props.compact ? 0 : theme.shape.borderRadius,\n transition: 'all 0.2s ease-in-out',\n color: theme.palette.text.primary,\n display: 'flex',\n alignItems: 'center',\n minHeight: 40,\n maxWidth: '75%',\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n },\n selectedMenuItem: {\n color: theme.palette.primary.main,\n backgroundColor: 'transparent',\n fontWeight: 600,\n position: 'relative',\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n '& svg': {\n color: theme.palette.primary.main,\n },\n },\n menuIcon: {\n minWidth: '32px',\n color: 'inherit',\n display: 'flex',\n justifyContent: 'center',\n },\n sectionHeader: {\n padding: theme.spacing(0.5, 2, 0.5, 1),\n marginTop: theme.spacing(2),\n color: theme.palette.text.secondary,\n fontWeight: 600,\n textTransform: 'uppercase',\n fontSize: '14px',\n letterSpacing: '0.5px',\n whiteSpace: 'nowrap',\n },\n toggleButton: {\n marginLeft: 'auto',\n marginRight: theme.spacing(0),\n marginBottom: theme.spacing(1),\n },\n label: {\n marginLeft: theme.spacing(1),\n whiteSpace: 'nowrap',\n opacity: 1,\n transition: 'opacity 0.2s',\n },\n labelHidden: {\n opacity: 0,\n width: 0,\n display: 'none',\n },\n };\n },\n { name: 'QetaLeftMenu' },\n);\n\nexport const LeftMenu = (props: {\n onKeyDown?: (event: KeyboardEvent) => void;\n autoFocusItem?: boolean;\n onClick?: (event: MouseEvent<EventTarget>) => void;\n inPopup?: boolean;\n compact?: boolean;\n onToggle?: () => void;\n}) => {\n const rootRoute = useRouteRef(qetaRouteRef);\n const tagsRoute = useRouteRef(tagsRouteRef);\n const favoritesRoute = useRouteRef(favoriteQuestionsRouteRef);\n const statisticsRoute = useRouteRef(statisticsRouteRef);\n const userRoute = useRouteRef(userRouteRef);\n const questionsRoute = useRouteRef(questionsRouteRef);\n const articlesRoute = useRouteRef(articlesRouteRef);\n const linksRoute = useRouteRef(linksRouteRef);\n const collectionsRoute = useRouteRef(collectionsRouteRef);\n const entitiesRoute = useRouteRef(entitiesRouteRef);\n const usersRoute = useRouteRef(usersRouteRef);\n const moderatorRoute = useRouteRef(moderatorRouteRef);\n const reviewRoute = useRouteRef(reviewRouteRef);\n const settingsRoute = useRouteRef(settingsRouteRef);\n const styles = useStyles(props);\n const { t } = useTranslationRef(qetaTranslationRef);\n const location = useLocation();\n const navigate = useNavigate();\n const { isModerator } = useIsModerator();\n const { canReview } = useCanReview();\n const app = useApp();\n const { compact = false, onToggle } = props;\n const {\n value: user,\n loading: loadingUser,\n error: userError,\n } = useIdentityApi(api => api.getBackstageIdentity(), []);\n\n const EntityIcon = app.getSystemIcon('kind:system') ?? CategoryOutlined;\n\n const CustomMenuItem = ({\n route,\n hasSubRoutes,\n children,\n label,\n }: {\n route: string;\n hasSubRoutes?: boolean;\n children: ReactNode;\n label: string;\n }) => {\n const isSelected =\n route === location.pathname ||\n (hasSubRoutes && location.pathname?.startsWith(route));\n\n return (\n <Tooltip title={compact ? label : ''} placement=\"right\">\n <MenuItem\n onClick={e => {\n if (e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) {\n return;\n }\n e.preventDefault();\n navigate(route);\n if (props.onClick) {\n props.onClick(e);\n }\n }}\n className={`${styles.menuItem} ${\n isSelected ? styles.selectedMenuItem : ''\n }`}\n href={route}\n component=\"a\"\n >\n {children}\n <Typography\n variant=\"body2\"\n className={compact ? styles.labelHidden : styles.label}\n style={{ fontWeight: isSelected ? 600 : 400 }}\n >\n {label}\n </Typography>\n </MenuItem>\n </Tooltip>\n );\n };\n\n const isPopup = props.inPopup;\n const isCompact = compact && !isPopup;\n\n return (\n <List\n id=\"left-menu\"\n className={`${styles.leftMenu} ${\n isPopup\n ? styles.inPopup\n : `${styles.outsidePopup} ${isCompact ? styles.leftMenuCompact : ''}`\n }`}\n component=\"nav\"\n aria-labelledby=\"nested-list-subheader\"\n disablePadding\n >\n <CustomMenuItem route={rootRoute()} label={t('leftMenu.home')}>\n <ListItemIcon className={styles.menuIcon}>\n <HomeOutlined fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n <li style={{ listStyle: 'none' }}>\n <Typography className={styles.sectionHeader}>\n {t('leftMenu.content')}\n </Typography>\n </li>\n\n <CustomMenuItem\n route={questionsRoute()}\n hasSubRoutes\n label={t('leftMenu.questions')}\n >\n <ListItemIcon className={styles.menuIcon}>\n <HelpOutline fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n <CustomMenuItem\n route={articlesRoute()}\n hasSubRoutes\n label={t('leftMenu.articles')}\n >\n <ListItemIcon className={styles.menuIcon}>\n <LibraryBooksOutlined fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n <CustomMenuItem\n route={linksRoute()}\n hasSubRoutes\n label={t('leftMenu.links')}\n >\n <ListItemIcon className={styles.menuIcon}>\n <LinkIcon fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n <CustomMenuItem\n route={favoritesRoute()}\n label={t('leftMenu.favoriteQuestions')}\n >\n <ListItemIcon className={styles.menuIcon}>\n <StarBorder fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n <CustomMenuItem\n route={entitiesRoute()}\n hasSubRoutes\n label={t('leftMenu.entities')}\n >\n <ListItemIcon className={styles.menuIcon}>\n <EntityIcon fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n <CustomMenuItem\n route={tagsRoute()}\n hasSubRoutes\n label={t('leftMenu.tags')}\n >\n <ListItemIcon className={styles.menuIcon}>\n <LocalOfferOutlined fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n <li style={{ listStyle: 'none' }}>\n <Typography className={styles.sectionHeader}>\n {t('leftMenu.community')}\n </Typography>\n </li>\n\n <CustomMenuItem\n route={collectionsRoute()}\n hasSubRoutes\n label={t('leftMenu.collections')}\n >\n <ListItemIcon className={styles.menuIcon}>\n <PlaylistPlayOutlined fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n <CustomMenuItem route={usersRoute()} label={t('leftMenu.users')}>\n <ListItemIcon className={styles.menuIcon}>\n <PeopleOutline fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n {user && !loadingUser && !userError && (\n <CustomMenuItem\n route={`${userRoute()}/${user.userEntityRef}`}\n label={t('leftMenu.profile')}\n >\n <ListItemIcon className={styles.menuIcon}>\n <PersonOutline fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n )}\n\n <CustomMenuItem\n route={statisticsRoute()}\n label={t('leftMenu.statistics')}\n >\n <ListItemIcon className={styles.menuIcon}>\n <EmojiEventsOutlined fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n <li style={{ listStyle: 'none' }}>\n <Typography className={styles.sectionHeader}>\n {t('leftMenu.manage')}\n </Typography>\n </li>\n <CustomMenuItem route={settingsRoute()} label={t('leftMenu.settings')}>\n <ListItemIcon className={styles.menuIcon}>\n <SettingsOutlined fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n\n {canReview && (\n <CustomMenuItem route={reviewRoute()} label={t('leftMenu.review')}>\n <ListItemIcon className={styles.menuIcon}>\n <RateReviewOutlined fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n )}\n {isModerator && (\n <CustomMenuItem route={moderatorRoute()} label={t('leftMenu.moderate')}>\n <ListItemIcon className={styles.menuIcon}>\n <GavelOutlined fontSize=\"small\" />\n </ListItemIcon>\n </CustomMenuItem>\n )}\n {!isPopup && (\n <Box\n display=\"flex\"\n justifyContent={isCompact ? 'center' : 'flex-start'}\n style={{ marginTop: 'auto' }}\n >\n <Tooltip\n title={isCompact ? t('leftMenu.expand') : t('leftMenu.collapse')}\n placement=\"right\"\n >\n <IconButton\n onClick={onToggle}\n size=\"small\"\n className={isCompact ? '' : styles.toggleButton}\n style={{ marginTop: 8, marginLeft: isCompact ? -10 : 5 }}\n >\n {isCompact ? <ChevronRightIcon /> : <MenuOpenIcon />}\n </IconButton>\n </Tooltip>\n </Box>\n )}\n </List>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LeftMenuButton.esm.js","sources":["../../../src/components/LeftMenu/LeftMenuButton.tsx"],"sourcesContent":["import {\n Button,\n ClickAwayListener,\n Grow,\n makeStyles,\n Paper,\n Popper,\n} from '@material-ui/core';\nimport { MouseEvent, KeyboardEvent, useState, useRef, useEffect } from 'react';\nimport { LeftMenu } from './LeftMenu';\nimport MenuIcon from '@material-ui/icons/Menu';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nconst useStyles = makeStyles(\n () => ({\n button: {\n marginTop: '1em',\n marginBottom: '-1em',\n },\n popper: {\n zIndex: 1000,\n },\n }),\n { name: 'QetaLeftMenuButton' },\n);\n\nexport const LeftMenuButton = () => {\n const [open, setOpen] = useState(false);\n const styles = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n const anchorRef = useRef<HTMLButtonElement>(null);\n\n const handleToggle = () => {\n setOpen(prevOpen => !prevOpen);\n };\n\n const handleClose = (event: MouseEvent<EventTarget>) => {\n if (\n anchorRef.current &&\n anchorRef.current.contains(event.target as HTMLElement)\n ) {\n return;\n }\n\n setOpen(false);\n };\n\n function handleListKeyDown(event: KeyboardEvent) {\n if (event.key === 'Tab') {\n event.preventDefault();\n setOpen(false);\n }\n }\n\n // return focus to the button when we transitioned from !open -> open\n const prevOpen = useRef(open);\n useEffect(() => {\n if (prevOpen.current && !open) {\n anchorRef.current!.focus();\n }\n\n prevOpen.current = open;\n }, [open]);\n\n return (\n <div>\n <Button\n ref={anchorRef}\n aria-controls={open ? 'menu-list-grow' : undefined}\n aria-haspopup=\"true\"\n color=\"primary\"\n size=\"large\"\n variant=\"contained\"\n onClick={handleToggle}\n startIcon={<MenuIcon />}\n className={styles.button}\n >\n {t('leftMenu.buttonLabel')}\n </Button>\n <Popper\n open={open}\n anchorEl={anchorRef.current}\n role={undefined}\n disablePortal\n className={styles.popper}\n >\n {({ TransitionProps, placement }) => (\n <Grow\n {...TransitionProps}\n style={{\n transformOrigin:\n placement === 'bottom' ? 'left top' : 'left bottom',\n }}\n >\n <ClickAwayListener onClickAway={handleClose}>\n <Paper>\n <LeftMenu\n onKeyDown={handleListKeyDown}\n autoFocusItem={open}\n onClick={handleClose}\n inPopup\n />\n </Paper>\n </ClickAwayListener>\n </Grow>\n )}\n </Popper>\n </div>\n );\n};\n"],"names":["prevOpen"],"mappings":"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"}
1
+ {"version":3,"file":"LeftMenuButton.esm.js","sources":["../../../src/components/LeftMenu/LeftMenuButton.tsx"],"sourcesContent":["import {\n Button,\n ClickAwayListener,\n Grow,\n makeStyles,\n Paper,\n Popper,\n} from '@material-ui/core';\nimport { MouseEvent, KeyboardEvent, useState, useRef, useEffect } from 'react';\nimport { LeftMenu } from './LeftMenu';\nimport MenuIcon from '@material-ui/icons/Menu';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nconst useStyles = makeStyles(\n () => ({\n button: {\n marginTop: '1em',\n marginBottom: '-1em',\n },\n popper: {\n zIndex: 1000,\n },\n }),\n { name: 'QetaLeftMenuButton' },\n);\n\nexport const LeftMenuButton = () => {\n const [open, setOpen] = useState(false);\n const styles = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n const anchorRef = useRef<HTMLButtonElement>(null);\n\n const handleToggle = () => {\n setOpen(prevOpen => !prevOpen);\n };\n\n const handleClose = (event: MouseEvent<EventTarget>) => {\n if (\n anchorRef.current &&\n anchorRef.current.contains(event.target as HTMLElement)\n ) {\n return;\n }\n\n setOpen(false);\n };\n\n function handleListKeyDown(event: KeyboardEvent) {\n if (event.key === 'Tab') {\n event.preventDefault();\n setOpen(false);\n }\n }\n\n // return focus to the button when we transitioned from !open -> open\n const prevOpen = useRef(open);\n useEffect(() => {\n if (prevOpen.current && !open) {\n anchorRef.current!.focus();\n }\n\n prevOpen.current = open;\n }, [open]);\n\n return (\n <div>\n <Button\n ref={anchorRef}\n aria-controls={open ? 'menu-list-grow' : undefined}\n aria-haspopup=\"true\"\n color=\"primary\"\n size=\"large\"\n variant=\"contained\"\n onClick={handleToggle}\n startIcon={<MenuIcon />}\n className={styles.button}\n >\n {t('leftMenu.buttonLabel')}\n </Button>\n <Popper\n open={open}\n anchorEl={anchorRef.current}\n role={undefined}\n disablePortal\n className={styles.popper}\n >\n {({ TransitionProps, placement }) => (\n <Grow\n {...TransitionProps}\n style={{\n transformOrigin:\n placement === 'bottom' ? 'left top' : 'left bottom',\n }}\n >\n <ClickAwayListener onClickAway={handleClose}>\n <Paper>\n <LeftMenu\n onKeyDown={handleListKeyDown}\n autoFocusItem={open}\n onClick={handleClose}\n inPopup\n />\n </Paper>\n </ClickAwayListener>\n </Grow>\n )}\n </Popper>\n </div>\n );\n};\n"],"names":["prevOpen"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LinkCard.esm.js","sources":["../../../src/components/LinkCard/LinkCard.tsx"],"sourcesContent":["import {\n AnswerResponse,\n PostResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { useState } from 'react';\nimport { DeleteModal } from '../Modals';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport EditIcon from '@material-ui/icons/Edit';\nimport RestoreIcon from '@material-ui/icons/Restore';\nimport { FavoriteButton } from '../Buttons/FavoriteButton';\nimport { TagsAndEntities } from '../TagsAndEntities/TagsAndEntities';\nimport { CommentSection } from '../CommentSection/CommentSection';\nimport { alertApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport { LinkButton } from '../Buttons/LinkButton';\nimport { MarkdownRenderer } from '../MarkdownRenderer/MarkdownRenderer';\nimport { editLinkRouteRef } from '../../routes';\nimport { useNavigate } from 'react-router-dom';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport {\n Box,\n Button,\n Card,\n CardContent,\n Grid,\n makeStyles,\n} from '@material-ui/core';\nimport { useIsModerator } from '../../hooks';\nimport { AuthorBoxes } from '../AuthorBox/AuthorBoxes.tsx';\nimport { OpenLinkButton } from '../Buttons/OpenLinkButton.tsx';\nimport { qetaApiRef } from '../../api.ts';\n\nconst useStyles = makeStyles(\n theme => ({\n root: {},\n contentContainer: {\n marginLeft: '0.5em',\n width: 'calc(100% - 70px)',\n },\n markdownContainer: {\n paddingBottom: '0.5em',\n },\n buttons: {\n marginTop: '1em',\n '& *:not(:last-child)': {\n marginRight: '0.3em',\n },\n },\n metadata: {\n marginTop: theme.spacing(3),\n },\n }),\n { name: 'QetaLinkCard' },\n);\n\nexport const LinkCard = (props: { link: PostResponse }) => {\n const { link } = props;\n const navigate = useNavigate();\n const qetaApi = useApi(qetaApiRef);\n const editLinkRoute = useRouteRef(editLinkRouteRef);\n const [deleteModalOpen, setDeleteModalOpen] = useState(false);\n const [linkEntity, setLinkEntity] = useState(link);\n const { isModerator } = useIsModerator();\n const handleDeleteModalOpen = () => setDeleteModalOpen(true);\n const handleDeleteModalClose = () => setDeleteModalOpen(false);\n const { t } = useTranslationRef(qetaTranslationRef);\n const onCommentAction = (l: PostResponse, _?: AnswerResponse) => {\n setLinkEntity(l);\n };\n const alertApi = useApi(alertApiRef);\n const styles = useStyles();\n\n const restoreLink = async () => {\n qetaApi\n .restorePost(link.id)\n .catch(e =>\n alertApi.post({\n message: e.message,\n display: 'transient',\n severity: 'error',\n }),\n )\n .then(l => {\n if (l) {\n setLinkEntity(l);\n }\n });\n };\n\n return (\n <>\n <Card variant=\"outlined\" className={styles.root}>\n <CardContent>\n <Box\n display=\"flex\"\n justifyContent=\"flex-end\"\n alignItems=\"flex-start\"\n mb={1}\n >\n <Box display=\"flex\" alignItems=\"center\" flexGrow={1}>\n <a\n href={linkEntity.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n fontWeight: 400,\n fontSize: '1.2rem',\n marginRight: 16,\n wordBreak: 'break-all',\n textDecoration: 'underline',\n cursor: 'pointer',\n }}\n onClick={event => {\n event.stopPropagation();\n qetaApi.clickLink(linkEntity.id);\n }}\n >\n {linkEntity.url}\n </a>\n </Box>\n <LinkButton entity={linkEntity} />\n <FavoriteButton entity={linkEntity} />\n <OpenLinkButton entity={linkEntity} />\n </Box>\n <Grid\n container\n spacing={2}\n justifyContent=\"flex-start\"\n style={{ flexWrap: 'nowrap' }}\n >\n <Grid\n item\n className={styles.contentContainer}\n style={{ flexGrow: '1' }}\n >\n {linkEntity.headerImage && (\n <Grid\n item\n justifyContent=\"center\"\n style={{ textAlign: 'center' }}\n >\n <img\n src={linkEntity.headerImage}\n alt={linkEntity.title}\n onError={e => (e.currentTarget.style.display = 'none')}\n style={{\n maxWidth: '90%',\n maxHeight: '300px',\n margin: '1rem',\n }}\n />\n </Grid>\n )}\n <Grid item className={styles.markdownContainer}>\n <MarkdownRenderer content={linkEntity.content} />\n </Grid>\n <Box\n display=\"flex\"\n alignItems=\"flex-start\"\n justifyContent=\"space-between\"\n className={styles.metadata}\n style={{ width: '100%' }}\n >\n <Box flex=\"1 1 0%\" minWidth={0}>\n <TagsAndEntities entity={linkEntity} />\n <Box className={styles.buttons}>\n {link.canEdit && link.status !== 'obsolete' && (\n <Button\n variant=\"outlined\"\n size=\"small\"\n startIcon={<EditIcon />}\n onClick={() =>\n navigate(\n editLinkRoute({\n id: link.id.toString(10),\n }),\n )\n }\n className=\"qetaQuestionCardEditBtn\"\n >\n {t('linkPage.editButton')}\n </Button>\n )}\n {link.canDelete && (\n <>\n <Button\n variant=\"outlined\"\n size=\"small\"\n color=\"secondary\"\n onClick={handleDeleteModalOpen}\n startIcon={<DeleteIcon />}\n >\n {t('deleteModal.deleteButton')}\n </Button>\n <DeleteModal\n open={deleteModalOpen}\n onClose={handleDeleteModalClose}\n entity={linkEntity}\n />\n </>\n )}\n {isModerator && linkEntity.status === 'deleted' && (\n <Button\n variant=\"contained\"\n size=\"small\"\n startIcon={<RestoreIcon />}\n onClick={() => restoreLink()}\n className=\"qetaLinkCardRestoreBtn\"\n >\n {t('linkPage.restoreButton')}\n </Button>\n )}\n </Box>\n </Box>\n <AuthorBoxes entity={linkEntity} />\n </Box>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n {(link.status === 'active' || link.status === 'obsolete') && (\n <CommentSection post={linkEntity} onCommentAction={onCommentAction} />\n )}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LinkCard.esm.js","sources":["../../../src/components/LinkCard/LinkCard.tsx"],"sourcesContent":["import {\n AnswerResponse,\n PostResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { useState } from 'react';\nimport { DeleteModal } from '../Modals';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport EditIcon from '@material-ui/icons/Edit';\nimport RestoreIcon from '@material-ui/icons/Restore';\nimport { FavoriteButton } from '../Buttons/FavoriteButton';\nimport { TagsAndEntities } from '../TagsAndEntities/TagsAndEntities';\nimport { CommentSection } from '../CommentSection/CommentSection';\nimport { alertApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport { LinkButton } from '../Buttons/LinkButton';\nimport { MarkdownRenderer } from '../MarkdownRenderer/MarkdownRenderer';\nimport { editLinkRouteRef } from '../../routes';\nimport { useNavigate } from 'react-router-dom';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport {\n Box,\n Button,\n Card,\n CardContent,\n Grid,\n makeStyles,\n} from '@material-ui/core';\nimport { useIsModerator } from '../../hooks';\nimport { AuthorBoxes } from '../AuthorBox/AuthorBoxes.tsx';\nimport { OpenLinkButton } from '../Buttons/OpenLinkButton.tsx';\nimport { qetaApiRef } from '../../api.ts';\n\nconst useStyles = makeStyles(\n theme => ({\n root: {},\n contentContainer: {\n marginLeft: '0.5em',\n width: 'calc(100% - 70px)',\n },\n markdownContainer: {\n paddingBottom: '0.5em',\n },\n buttons: {\n marginTop: '1em',\n '& *:not(:last-child)': {\n marginRight: '0.3em',\n },\n },\n metadata: {\n marginTop: theme.spacing(3),\n },\n }),\n { name: 'QetaLinkCard' },\n);\n\nexport const LinkCard = (props: { link: PostResponse }) => {\n const { link } = props;\n const navigate = useNavigate();\n const qetaApi = useApi(qetaApiRef);\n const editLinkRoute = useRouteRef(editLinkRouteRef);\n const [deleteModalOpen, setDeleteModalOpen] = useState(false);\n const [linkEntity, setLinkEntity] = useState(link);\n const { isModerator } = useIsModerator();\n const handleDeleteModalOpen = () => setDeleteModalOpen(true);\n const handleDeleteModalClose = () => setDeleteModalOpen(false);\n const { t } = useTranslationRef(qetaTranslationRef);\n const onCommentAction = (l: PostResponse, _?: AnswerResponse) => {\n setLinkEntity(l);\n };\n const alertApi = useApi(alertApiRef);\n const styles = useStyles();\n\n const restoreLink = async () => {\n qetaApi\n .restorePost(link.id)\n .catch(e =>\n alertApi.post({\n message: e.message,\n display: 'transient',\n severity: 'error',\n }),\n )\n .then(l => {\n if (l) {\n setLinkEntity(l);\n }\n });\n };\n\n return (\n <>\n <Card variant=\"outlined\" className={styles.root}>\n <CardContent>\n <Box\n display=\"flex\"\n justifyContent=\"flex-end\"\n alignItems=\"flex-start\"\n mb={1}\n >\n <Box display=\"flex\" alignItems=\"center\" flexGrow={1}>\n <a\n href={linkEntity.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n fontWeight: 400,\n fontSize: '1.2rem',\n marginRight: 16,\n wordBreak: 'break-all',\n textDecoration: 'underline',\n cursor: 'pointer',\n }}\n onClick={event => {\n event.stopPropagation();\n qetaApi.clickLink(linkEntity.id);\n }}\n >\n {linkEntity.url}\n </a>\n </Box>\n <LinkButton entity={linkEntity} />\n <FavoriteButton entity={linkEntity} />\n <OpenLinkButton entity={linkEntity} />\n </Box>\n <Grid\n container\n spacing={2}\n justifyContent=\"flex-start\"\n style={{ flexWrap: 'nowrap' }}\n >\n <Grid\n item\n className={styles.contentContainer}\n style={{ flexGrow: '1' }}\n >\n {linkEntity.headerImage && (\n <Grid\n item\n justifyContent=\"center\"\n style={{ textAlign: 'center' }}\n >\n <img\n src={linkEntity.headerImage}\n alt={linkEntity.title}\n onError={e => (e.currentTarget.style.display = 'none')}\n style={{\n maxWidth: '90%',\n maxHeight: '300px',\n margin: '1rem',\n }}\n />\n </Grid>\n )}\n <Grid item className={styles.markdownContainer}>\n <MarkdownRenderer content={linkEntity.content} />\n </Grid>\n <Box\n display=\"flex\"\n alignItems=\"flex-start\"\n justifyContent=\"space-between\"\n className={styles.metadata}\n style={{ width: '100%' }}\n >\n <Box flex=\"1 1 0%\" minWidth={0}>\n <TagsAndEntities entity={linkEntity} />\n <Box className={styles.buttons}>\n {link.canEdit && link.status !== 'obsolete' && (\n <Button\n variant=\"outlined\"\n size=\"small\"\n startIcon={<EditIcon />}\n onClick={() =>\n navigate(\n editLinkRoute({\n id: link.id.toString(10),\n }),\n )\n }\n className=\"qetaQuestionCardEditBtn\"\n >\n {t('linkPage.editButton')}\n </Button>\n )}\n {link.canDelete && (\n <>\n <Button\n variant=\"outlined\"\n size=\"small\"\n color=\"secondary\"\n onClick={handleDeleteModalOpen}\n startIcon={<DeleteIcon />}\n >\n {t('deleteModal.deleteButton')}\n </Button>\n <DeleteModal\n open={deleteModalOpen}\n onClose={handleDeleteModalClose}\n entity={linkEntity}\n />\n </>\n )}\n {isModerator && linkEntity.status === 'deleted' && (\n <Button\n variant=\"contained\"\n size=\"small\"\n startIcon={<RestoreIcon />}\n onClick={() => restoreLink()}\n className=\"qetaLinkCardRestoreBtn\"\n >\n {t('linkPage.restoreButton')}\n </Button>\n )}\n </Box>\n </Box>\n <AuthorBoxes entity={linkEntity} />\n </Box>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n {(link.status === 'active' || link.status === 'obsolete') && (\n <CommentSection post={linkEntity} onCommentAction={onCommentAction} />\n )}\n </>\n );\n};\n"],"names":[],"mappings":"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"}