@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.
- package/dist/alpha.esm.js.map +1 -1
- package/dist/api.esm.js.map +1 -1
- package/dist/components/AIAnswerCard/AIAnswerCard.esm.js +1 -1
- package/dist/components/AIAnswerCard/AIAnswerCard.esm.js.map +1 -1
- package/dist/components/AnswerCard/AnswerCard.esm.js.map +1 -1
- package/dist/components/AnswerForm/AnswerForm.esm.js +1 -1
- package/dist/components/AnswerForm/AnswerForm.esm.js.map +1 -1
- package/dist/components/AnswersContainer/AnswerListItem.esm.js.map +1 -1
- package/dist/components/AnswersContainer/AnswersContainer.esm.js.map +1 -1
- package/dist/components/AnswersContainer/AnswersGridItem.esm.js.map +1 -1
- package/dist/components/ArticleContent/ArticleButtons.esm.js.map +1 -1
- package/dist/components/ArticleContent/ArticleContent.esm.js.map +1 -1
- package/dist/components/AuthorBox/AuthorBox.esm.js.map +1 -1
- package/dist/components/AuthorBox/AuthorBoxes.esm.js.map +1 -1
- package/dist/components/Badges/BadgeChip.esm.js.map +1 -1
- package/dist/components/Badges/UserBadges.esm.js.map +1 -1
- package/dist/components/Buttons/AddToCollectionButton.esm.js.map +1 -1
- package/dist/components/Buttons/AskQuestionButton.esm.js.map +1 -1
- package/dist/components/Buttons/ButtonContainer.esm.js.map +1 -1
- package/dist/components/Buttons/CollectionFollowButton.esm.js.map +1 -1
- package/dist/components/Buttons/ContentHeaderButton.esm.js.map +1 -1
- package/dist/components/Buttons/CreateCollectionButton.esm.js.map +1 -1
- package/dist/components/Buttons/CreateLinkButton.esm.js.map +1 -1
- package/dist/components/Buttons/EntityFollowButton.esm.js.map +1 -1
- package/dist/components/Buttons/FavoriteButton.esm.js.map +1 -1
- package/dist/components/Buttons/FollowPostButton.esm.js.map +1 -1
- package/dist/components/Buttons/LinkButton.esm.js.map +1 -1
- package/dist/components/Buttons/OpenLinkButton.esm.js.map +1 -1
- package/dist/components/Buttons/RankingButtons.esm.js.map +1 -1
- package/dist/components/Buttons/TagFollowButton.esm.js.map +1 -1
- package/dist/components/Buttons/UserFollowButton.esm.js.map +1 -1
- package/dist/components/Buttons/VoteButtons.esm.js.map +1 -1
- package/dist/components/Buttons/WriteArticleButton.esm.js.map +1 -1
- package/dist/components/CollectionForm/CollectionForm.esm.js.map +1 -1
- package/dist/components/CollectionsContainer/CollectionListItem.esm.js.map +1 -1
- package/dist/components/CollectionsContainer/CollectionsContainer.esm.js.map +1 -1
- package/dist/components/CollectionsContainer/CollectionsGridItem.esm.js.map +1 -1
- package/dist/components/CommentSection/CommentForm.esm.js.map +1 -1
- package/dist/components/CommentSection/CommentList.esm.js.map +1 -1
- package/dist/components/CommentSection/CommentListItem.esm.js.map +1 -1
- package/dist/components/CommentSection/CommentSection.esm.js.map +1 -1
- package/dist/components/ContentHeader/ContentHeader.esm.js.map +1 -1
- package/dist/components/ContentHeaderCard/ContentHeaderCard.esm.js.map +1 -1
- package/dist/components/EntitiesContainer/EntitiesContainer.esm.js.map +1 -1
- package/dist/components/EntitiesContainer/EntitiesGridItem.esm.js.map +1 -1
- package/dist/components/EntitiesContainer/EntityListItem.esm.js.map +1 -1
- package/dist/components/FaviconItem/FaviconItem.esm.js.map +1 -1
- package/dist/components/FilterPanel/DateRangeFilter.esm.js.map +1 -1
- package/dist/components/FilterPanel/FilterPanel.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedCollectionsList.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedEntitiesList.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedTagsList.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedUsersList.esm.js.map +1 -1
- package/dist/components/GridItemStyles/useGridItemStyles.esm.js.map +1 -1
- package/dist/components/HeaderImageInput/HeaderImageInput.esm.js.map +1 -1
- package/dist/components/HomePageCards/CommunityActivityCard.esm.js.map +1 -1
- package/dist/components/HomePageCards/FollowedItemsCard.esm.js.map +1 -1
- package/dist/components/HomePageCards/ImpactCard.esm.js.map +1 -1
- package/dist/components/HomePageCards/PostsCard.esm.js.map +1 -1
- package/dist/components/Icons/ExpertIcon.esm.js.map +1 -1
- package/dist/components/LeftMenu/LeftMenu.esm.js.map +1 -1
- package/dist/components/LeftMenu/LeftMenuButton.esm.js.map +1 -1
- package/dist/components/LinkCard/LinkCard.esm.js.map +1 -1
- package/dist/components/Links/Links.esm.js.map +1 -1
- package/dist/components/LoadingGrid/LoadingGrid.esm.js.map +1 -1
- package/dist/components/MarkdownEditor/MarkdownEditor.esm.js.map +1 -1
- package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js.map +1 -1
- package/dist/components/Modals/DeleteModal.esm.js.map +1 -1
- package/dist/components/Modals/ObsoleteModal.esm.js.map +1 -1
- package/dist/components/Modals/ValidReviewModal.esm.js.map +1 -1
- package/dist/components/PostAnonymouslyCheckbox/PostAnonymouslyCheckbox.esm.js.map +1 -1
- package/dist/components/PostForm/AutocompleteListComponent.esm.js +1 -1
- package/dist/components/PostForm/AutocompleteListComponent.esm.js.map +1 -1
- package/dist/components/PostForm/EntitiesInput.esm.js +3 -6
- package/dist/components/PostForm/EntitiesInput.esm.js.map +1 -1
- package/dist/components/PostForm/PostForm.esm.js.map +1 -1
- package/dist/components/PostForm/TagInput.esm.js +1 -1
- package/dist/components/PostForm/TagInput.esm.js.map +1 -1
- package/dist/components/PostHighlightList/PostHighlightList.esm.js.map +1 -1
- package/dist/components/PostHighlightList/PostHighlightListContainer.esm.js.map +1 -1
- package/dist/components/PostHistory/PostHistory.esm.js.map +1 -1
- package/dist/components/PostHistoryButton/PostHistoryButton.esm.js +4 -5
- package/dist/components/PostHistoryButton/PostHistoryButton.esm.js.map +1 -1
- package/dist/components/PostsContainer/NoPostsCard.esm.js.map +1 -1
- package/dist/components/PostsContainer/PostListItem.esm.js.map +1 -1
- package/dist/components/PostsContainer/PostsContainer.esm.js.map +1 -1
- package/dist/components/PostsContainer/PostsGridItem.esm.js.map +1 -1
- package/dist/components/PostsTable/PostsTable.esm.js.map +1 -1
- package/dist/components/PostsTable/PostsTableRow.esm.js.map +1 -1
- package/dist/components/QetaContext/QetaContext.esm.js +1 -1
- package/dist/components/QetaContext/QetaContext.esm.js.map +1 -1
- package/dist/components/QetaEntityContainer/QetaEntityContainer.esm.js.map +1 -1
- package/dist/components/QuestionCard/QuestionCard.esm.js.map +1 -1
- package/dist/components/RelativeTimeWithTooltip/RelativeTimeWithTooltip.esm.js.map +1 -1
- package/dist/components/SearchBar/SearchBar.esm.js.map +1 -1
- package/dist/components/SelectTemplateList/SelectTemplateList.esm.js.map +1 -1
- package/dist/components/StatsChart/StatsChart.esm.js +1 -1
- package/dist/components/StatsChart/StatsChart.esm.js.map +1 -1
- package/dist/components/StatsChart/util.esm.js.map +1 -1
- package/dist/components/SuggestionsCard/SuggestionsCard.esm.js.map +1 -1
- package/dist/components/TagsAndEntities/EntityChip.esm.js.map +1 -1
- package/dist/components/TagsAndEntities/TagChip.esm.js.map +1 -1
- package/dist/components/TagsAndEntities/TagsAndEntities.esm.js.map +1 -1
- package/dist/components/TagsContainer/CreateTagModal.esm.js.map +1 -1
- package/dist/components/TagsContainer/EditTagModal.esm.js.map +1 -1
- package/dist/components/TagsContainer/TagGridItem.esm.js.map +1 -1
- package/dist/components/TagsContainer/TagListItem.esm.js.map +1 -1
- package/dist/components/TagsContainer/TagsContainer.esm.js.map +1 -1
- package/dist/components/TemplateList/TemplateForm.esm.js.map +1 -1
- package/dist/components/TemplateList/TemplateList.esm.js.map +1 -1
- package/dist/components/Timeline/Timeline.esm.js.map +1 -1
- package/dist/components/Timeline/TimelineItem.esm.js.map +1 -1
- package/dist/components/Tooltips/CollectionTooltip.esm.js.map +1 -1
- package/dist/components/Tooltips/EntityTooltip.esm.js.map +1 -1
- package/dist/components/Tooltips/PostTooltip.esm.js.map +1 -1
- package/dist/components/Tooltips/TagTooltip.esm.js.map +1 -1
- package/dist/components/Tooltips/UserTooltip.esm.js.map +1 -1
- package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js.map +1 -1
- package/dist/components/TopRankingUsersCard/TrophyIcon.esm.js.map +1 -1
- package/dist/components/UsersContainer/UserListItem.esm.js.map +1 -1
- package/dist/components/UsersContainer/UsersContainer.esm.js.map +1 -1
- package/dist/components/UsersContainer/UsersGridItem.esm.js.map +1 -1
- package/dist/components/Utility/ClickableLink.esm.js.map +1 -1
- package/dist/components/Utility/DeletedBanner.esm.js.map +1 -1
- package/dist/components/Utility/DraftBanner.esm.js.map +1 -1
- package/dist/components/Utility/ModalContent.esm.js.map +1 -1
- package/dist/components/Utility/ObsoleteBanner.esm.js.map +1 -1
- package/dist/components/Utility/OptionalRequirePermission.esm.js.map +1 -1
- package/dist/components/Utility/QetaGridHeader.esm.js.map +1 -1
- package/dist/components/Utility/QetaPagination.esm.js.map +1 -1
- package/dist/components/Utility/RightList.esm.js +1 -1
- package/dist/components/Utility/RightList.esm.js.map +1 -1
- package/dist/components/Utility/StatusChip.esm.js.map +1 -1
- package/dist/components/Utility/VoteButtonContainer.esm.js.map +1 -1
- package/dist/components/ViewToggle/ViewToggle.esm.js.map +1 -1
- package/dist/hooks/useAI.esm.js.map +1 -1
- package/dist/hooks/useCanReview.esm.js.map +1 -1
- package/dist/hooks/useCollectionsFollow.esm.js.map +1 -1
- package/dist/hooks/useEntityAuthor.esm.js.map +1 -1
- package/dist/hooks/useEntityFollow.esm.js.map +1 -1
- package/dist/hooks/useEntityQueryParameter.esm.js.map +1 -1
- package/dist/hooks/useFavicon.esm.js.map +1 -1
- package/dist/hooks/useFollow.esm.js.map +1 -1
- package/dist/hooks/useGridPageSize.esm.js.map +1 -1
- package/dist/hooks/useHistoryEnabled.esm.js.map +1 -1
- package/dist/hooks/useIdentityApi.esm.js.map +1 -1
- package/dist/hooks/useIsDarkTheme.esm.js.map +1 -1
- package/dist/hooks/useIsModerator.esm.js.map +1 -1
- package/dist/hooks/useListItemStyles.esm.js.map +1 -1
- package/dist/hooks/useQetaApi.esm.js.map +1 -1
- package/dist/hooks/useQetaEntities.esm.js.map +1 -1
- package/dist/hooks/useTagsFollow.esm.js.map +1 -1
- package/dist/hooks/useTooltipStyles.esm.js.map +1 -1
- package/dist/hooks/useUserFollow.esm.js.map +1 -1
- package/dist/hooks/useUserSettings.esm.js.map +1 -1
- package/dist/hooks/useVoting.esm.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/routes.esm.js.map +1 -1
- package/dist/translation.esm.js.map +1 -1
- package/dist/utils/utils.esm.js.map +1 -1
- package/package.json +13 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthorBoxes.esm.js","sources":["../../../src/components/AuthorBox/AuthorBoxes.tsx"],"sourcesContent":["import {\n Answer,\n PostAnswerEntity,\n isAnswer,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { Box } from '@material-ui/core';\nimport { AuthorBox } from './AuthorBox.tsx';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nexport const AuthorBoxes = (props: { entity: PostAnswerEntity }) => {\n const entity = props.entity;\n const { t } = useTranslationRef(qetaTranslationRef);\n\n return (\n <Box\n display=\"flex\"\n minWidth={220}\n style={{ gap: '8px', justifyContent: 'flex-end' }}\n ml={1}\n >\n {entity.updated && entity.updatedBy && (\n <AuthorBox\n userEntityRef={entity.updatedBy}\n time={entity.updated}\n label={t('authorBox.updatedAtTime')}\n expert={false}\n anonymous={entity.anonymous}\n />\n )}\n <AuthorBox\n userEntityRef={entity.author}\n time={entity.created}\n label={\n isAnswer(entity)\n ? t('authorBox.answeredAtTime')\n : t('authorBox.postedAtTime')\n }\n expert={isAnswer(entity) ? (entity as Answer).expert : false}\n anonymous={entity.anonymous}\n />\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"AuthorBoxes.esm.js","sources":["../../../src/components/AuthorBox/AuthorBoxes.tsx"],"sourcesContent":["import {\n Answer,\n PostAnswerEntity,\n isAnswer,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { Box } from '@material-ui/core';\nimport { AuthorBox } from './AuthorBox.tsx';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nexport const AuthorBoxes = (props: { entity: PostAnswerEntity }) => {\n const entity = props.entity;\n const { t } = useTranslationRef(qetaTranslationRef);\n\n return (\n <Box\n display=\"flex\"\n minWidth={220}\n style={{ gap: '8px', justifyContent: 'flex-end' }}\n ml={1}\n >\n {entity.updated && entity.updatedBy && (\n <AuthorBox\n userEntityRef={entity.updatedBy}\n time={entity.updated}\n label={t('authorBox.updatedAtTime')}\n expert={false}\n anonymous={entity.anonymous}\n />\n )}\n <AuthorBox\n userEntityRef={entity.author}\n time={entity.created}\n label={\n isAnswer(entity)\n ? t('authorBox.answeredAtTime')\n : t('authorBox.postedAtTime')\n }\n expert={isAnswer(entity) ? (entity as Answer).expert : false}\n anonymous={entity.anonymous}\n />\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAUO,MAAM,WAAA,GAAc,CAAC,KAAA,KAAwC;AAClE,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAA,uBACE,IAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,MAAA;AAAA,MACR,QAAA,EAAU,GAAA;AAAA,MACV,KAAA,EAAO,EAAE,GAAA,EAAK,KAAA,EAAO,gBAAgB,UAAA,EAAW;AAAA,MAChD,EAAA,EAAI,CAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,MAAA,CAAO,OAAA,IAAW,OAAO,SAAA,oBACxB,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,eAAe,MAAA,CAAO,SAAA;AAAA,YACtB,MAAM,MAAA,CAAO,OAAA;AAAA,YACb,KAAA,EAAO,EAAE,yBAAyB,CAAA;AAAA,YAClC,MAAA,EAAQ,KAAA;AAAA,YACR,WAAW,MAAA,CAAO;AAAA;AAAA,SACpB;AAAA,wBAEF,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,eAAe,MAAA,CAAO,MAAA;AAAA,YACtB,MAAM,MAAA,CAAO,OAAA;AAAA,YACb,KAAA,EACE,SAAS,MAAM,CAAA,GACX,EAAE,0BAA0B,CAAA,GAC5B,EAAE,wBAAwB,CAAA;AAAA,YAEhC,MAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,GAAK,OAAkB,MAAA,GAAS,KAAA;AAAA,YACvD,WAAW,MAAA,CAAO;AAAA;AAAA;AACpB;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BadgeChip.esm.js","sources":["../../../src/components/Badges/BadgeChip.tsx"],"sourcesContent":["import { Badge } from '@drodil/backstage-plugin-qeta-common';\nimport { Box, makeStyles, Typography } from '@material-ui/core';\nimport Star from '@material-ui/icons/Star';\nimport VerifiedUser from '@material-ui/icons/VerifiedUser';\nimport Visibility from '@material-ui/icons/Visibility';\nimport EmojiEvents from '@material-ui/icons/EmojiEvents';\nimport Help from '@material-ui/icons/Help';\nimport Search from '@material-ui/icons/Search';\nimport Support from '@material-ui/icons/ContactSupport';\nimport Build from '@material-ui/icons/Build';\nimport School from '@material-ui/icons/School';\nimport MenuBook from '@material-ui/icons/MenuBook';\nimport CastForEducation from '@material-ui/icons/CastForEducation';\nimport ThumbUp from '@material-ui/icons/ThumbUp';\nimport RateReview from '@material-ui/icons/RateReview';\nimport Article from '@material-ui/icons/Description';\nimport Create from '@material-ui/icons/Create';\nimport Link from '@material-ui/icons/Link';\nimport Comment from '@material-ui/icons/Comment';\nimport ViewColumn from '@material-ui/icons/ViewColumn';\nimport Share from '@material-ui/icons/Share';\nimport Public from '@material-ui/icons/Public';\nimport RecordVoiceOver from '@material-ui/icons/RecordVoiceOver';\nimport SpeakerNotes from '@material-ui/icons/SpeakerNotes';\nimport Gavel from '@material-ui/icons/Gavel';\nimport DeviceHub from '@material-ui/icons/DeviceHub';\nimport Hearing from '@material-ui/icons/Hearing';\nimport Stars from '@material-ui/icons/Stars';\nimport Flare from '@material-ui/icons/Flare';\nimport CheckCircle from '@material-ui/icons/CheckCircle';\nimport DoneAll from '@material-ui/icons/DoneAll';\nimport PersonAdd from '@material-ui/icons/PersonAdd';\nimport TrendingUp from '@material-ui/icons/TrendingUp';\nimport Group from '@material-ui/icons/Group';\nimport NightsStay from '@material-ui/icons/NightsStay';\nimport ChatBubble from '@material-ui/icons/ChatBubble';\nimport Translate from '@material-ui/icons/Translate';\nimport LibraryBooks from '@material-ui/icons/LibraryBooks';\nimport CollectionsBookmark from '@material-ui/icons/CollectionsBookmark';\nimport LocalLibrary from '@material-ui/icons/LocalLibrary';\nimport Archive from '@material-ui/icons/Archive';\nimport PlaylistAdd from '@material-ui/icons/PlaylistAdd';\nimport FolderSpecial from '@material-ui/icons/FolderSpecial';\nimport StarRate from '@material-ui/icons/StarRate';\nimport Whatshot from '@material-ui/icons/Whatshot';\nimport Palette from '@material-ui/icons/Palette';\nimport CameraAlt from '@material-ui/icons/CameraAlt';\nimport LabelImportant from '@material-ui/icons/LabelImportant';\n\nconst useStyles = makeStyles(theme => ({\n badge: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'flex-start',\n padding: theme.spacing(1.5),\n borderRadius: theme.shape.borderRadius * 2,\n width: '100%',\n minHeight: 140,\n height: '100%',\n boxSizing: 'border-box',\n border: '1px solid rgba(0, 0, 0, 0.12)',\n boxShadow: '0 4px 8px rgba(0,0,0,0.1)',\n textAlign: 'center',\n userSelect: 'none',\n position: 'relative',\n },\n count: {\n position: 'absolute',\n top: 18,\n right: -12,\n backgroundColor: 'white !important',\n color: 'black !important',\n borderRadius: '2px',\n display: 'flex',\n padding: '4px',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '12px',\n fontWeight: 'bold',\n boxShadow: '0 2px 4px rgba(0,0,0,0.2)',\n },\n bronze: {\n background: 'linear-gradient(135deg, #cd7f32 0%, #a0522d 100%)',\n '& *': {\n color: '#ffffff',\n },\n },\n silver: {\n background: 'linear-gradient(135deg, #e8e8e8 0%, #a8a8a8 100%)',\n '& *': {\n color: '#333333',\n },\n },\n gold: {\n background: 'linear-gradient(135deg, #ffd700 0%, #daa520 100%)',\n '& *': {\n color: '#333333',\n },\n },\n diamond: {\n background: 'linear-gradient(135deg, #b9f2ff 0%, #7ec8e3 100%)',\n '& *': {\n color: '#333333',\n },\n },\n icon: {\n fontSize: 28,\n marginBottom: theme.spacing(0.5),\n },\n name: {\n fontWeight: 600,\n fontSize: '0.85rem',\n lineHeight: 1.2,\n marginBottom: theme.spacing(0.5),\n },\n level: {\n fontSize: '0.65rem',\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n opacity: 0.85,\n marginBottom: theme.spacing(0.5),\n },\n description: {\n fontSize: '0.7rem',\n lineHeight: 1.3,\n opacity: 0.9,\n },\n}));\n\nconst getIcon = (icon: string) => {\n switch (icon) {\n case 'star':\n return <Star />;\n case 'local_police':\n return <VerifiedUser />;\n case 'visibility':\n return <Visibility />;\n case 'workspace_premium':\n return <EmojiEvents />;\n case 'help':\n return <Help />;\n case 'psychology':\n return <Search />;\n case 'support':\n return <Support />;\n case 'build':\n return <Build />;\n case 'school':\n return <School />;\n case 'menu_book':\n return <MenuBook />;\n case 'cast_for_education':\n return <CastForEducation />;\n case 'thumb_up':\n return <ThumbUp />;\n case 'rate_review':\n return <RateReview />;\n case 'article':\n return <Article />;\n case 'history_edu':\n return <Create />;\n case 'link':\n return <Link />;\n case 'comment':\n return <Comment />;\n case 'view_column':\n return <ViewColumn />;\n case 'share':\n return <Share />;\n case 'public':\n return <Public />;\n case 'record_voice_over':\n return <RecordVoiceOver />;\n case 'campaign':\n return <SpeakerNotes />;\n case 'gavel':\n return <Gavel />;\n case 'device_hub':\n return <DeviceHub />;\n case 'hearing':\n return <Hearing />;\n case 'military_tech':\n return <Stars />;\n case 'verified':\n return <VerifiedUser />;\n case 'check_circle':\n return <CheckCircle />;\n case 'done_all':\n return <DoneAll />;\n case 'construction':\n return <Build />;\n case 'auto_fix_high':\n return <Flare />;\n case 'person_add':\n return <PersonAdd />;\n case 'trending_up':\n return <TrendingUp />;\n case 'emoji_events':\n return <EmojiEvents />;\n case 'groups':\n return <Group />;\n case 'nights_stay':\n return <NightsStay />;\n case 'auto_stories':\n return <LibraryBooks />;\n case 'translate':\n return <Translate />;\n case 'chat_bubble':\n return <ChatBubble />;\n // Collection badges\n case 'collections_bookmark':\n return <CollectionsBookmark />;\n case 'local_library':\n return <LocalLibrary />;\n case 'archive':\n return <Archive />;\n case 'playlist_add':\n return <PlaylistAdd />;\n case 'folder_special':\n return <FolderSpecial />;\n case 'inventory':\n return <Archive />;\n case 'star_rate':\n return <StarRate />;\n case 'diamond':\n return <Stars />;\n case 'whatshot':\n return <Whatshot />;\n case 'palette':\n return <Palette />;\n case 'camera_alt':\n return <CameraAlt />;\n case 'label_important':\n return <LabelImportant />;\n default:\n return <VerifiedUser />;\n }\n};\n\nexport const BadgeChip = ({\n badge,\n count,\n}: {\n badge: Badge;\n count?: number;\n}) => {\n const classes = useStyles();\n const IconComponent = getIcon(badge.icon);\n\n return (\n <Box className={`${classes.badge} ${classes[badge.level]}`}>\n <Box className={classes.icon}>{IconComponent}</Box>\n <Typography className={classes.name}>{badge.name}</Typography>\n <Typography className={classes.level}>{badge.level}</Typography>\n <Typography className={classes.description}>\n {badge.description}\n </Typography>\n {count && count > 1 && <Box className={classes.count}>x {count}</Box>}\n </Box>\n );\n};\n"],"names":["Star","Help","Search","Article","Create","Link","Comment","CollectionsBookmark","PlaylistAdd"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BadgeChip.esm.js","sources":["../../../src/components/Badges/BadgeChip.tsx"],"sourcesContent":["import { Badge } from '@drodil/backstage-plugin-qeta-common';\nimport { Box, makeStyles, Typography } from '@material-ui/core';\nimport Star from '@material-ui/icons/Star';\nimport VerifiedUser from '@material-ui/icons/VerifiedUser';\nimport Visibility from '@material-ui/icons/Visibility';\nimport EmojiEvents from '@material-ui/icons/EmojiEvents';\nimport Help from '@material-ui/icons/Help';\nimport Search from '@material-ui/icons/Search';\nimport Support from '@material-ui/icons/ContactSupport';\nimport Build from '@material-ui/icons/Build';\nimport School from '@material-ui/icons/School';\nimport MenuBook from '@material-ui/icons/MenuBook';\nimport CastForEducation from '@material-ui/icons/CastForEducation';\nimport ThumbUp from '@material-ui/icons/ThumbUp';\nimport RateReview from '@material-ui/icons/RateReview';\nimport Article from '@material-ui/icons/Description';\nimport Create from '@material-ui/icons/Create';\nimport Link from '@material-ui/icons/Link';\nimport Comment from '@material-ui/icons/Comment';\nimport ViewColumn from '@material-ui/icons/ViewColumn';\nimport Share from '@material-ui/icons/Share';\nimport Public from '@material-ui/icons/Public';\nimport RecordVoiceOver from '@material-ui/icons/RecordVoiceOver';\nimport SpeakerNotes from '@material-ui/icons/SpeakerNotes';\nimport Gavel from '@material-ui/icons/Gavel';\nimport DeviceHub from '@material-ui/icons/DeviceHub';\nimport Hearing from '@material-ui/icons/Hearing';\nimport Stars from '@material-ui/icons/Stars';\nimport Flare from '@material-ui/icons/Flare';\nimport CheckCircle from '@material-ui/icons/CheckCircle';\nimport DoneAll from '@material-ui/icons/DoneAll';\nimport PersonAdd from '@material-ui/icons/PersonAdd';\nimport TrendingUp from '@material-ui/icons/TrendingUp';\nimport Group from '@material-ui/icons/Group';\nimport NightsStay from '@material-ui/icons/NightsStay';\nimport ChatBubble from '@material-ui/icons/ChatBubble';\nimport Translate from '@material-ui/icons/Translate';\nimport LibraryBooks from '@material-ui/icons/LibraryBooks';\nimport CollectionsBookmark from '@material-ui/icons/CollectionsBookmark';\nimport LocalLibrary from '@material-ui/icons/LocalLibrary';\nimport Archive from '@material-ui/icons/Archive';\nimport PlaylistAdd from '@material-ui/icons/PlaylistAdd';\nimport FolderSpecial from '@material-ui/icons/FolderSpecial';\nimport StarRate from '@material-ui/icons/StarRate';\nimport Whatshot from '@material-ui/icons/Whatshot';\nimport Palette from '@material-ui/icons/Palette';\nimport CameraAlt from '@material-ui/icons/CameraAlt';\nimport LabelImportant from '@material-ui/icons/LabelImportant';\n\nconst useStyles = makeStyles(theme => ({\n badge: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'flex-start',\n padding: theme.spacing(1.5),\n borderRadius: theme.shape.borderRadius * 2,\n width: '100%',\n minHeight: 140,\n height: '100%',\n boxSizing: 'border-box',\n border: '1px solid rgba(0, 0, 0, 0.12)',\n boxShadow: '0 4px 8px rgba(0,0,0,0.1)',\n textAlign: 'center',\n userSelect: 'none',\n position: 'relative',\n },\n count: {\n position: 'absolute',\n top: 18,\n right: -12,\n backgroundColor: 'white !important',\n color: 'black !important',\n borderRadius: '2px',\n display: 'flex',\n padding: '4px',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '12px',\n fontWeight: 'bold',\n boxShadow: '0 2px 4px rgba(0,0,0,0.2)',\n },\n bronze: {\n background: 'linear-gradient(135deg, #cd7f32 0%, #a0522d 100%)',\n '& *': {\n color: '#ffffff',\n },\n },\n silver: {\n background: 'linear-gradient(135deg, #e8e8e8 0%, #a8a8a8 100%)',\n '& *': {\n color: '#333333',\n },\n },\n gold: {\n background: 'linear-gradient(135deg, #ffd700 0%, #daa520 100%)',\n '& *': {\n color: '#333333',\n },\n },\n diamond: {\n background: 'linear-gradient(135deg, #b9f2ff 0%, #7ec8e3 100%)',\n '& *': {\n color: '#333333',\n },\n },\n icon: {\n fontSize: 28,\n marginBottom: theme.spacing(0.5),\n },\n name: {\n fontWeight: 600,\n fontSize: '0.85rem',\n lineHeight: 1.2,\n marginBottom: theme.spacing(0.5),\n },\n level: {\n fontSize: '0.65rem',\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n opacity: 0.85,\n marginBottom: theme.spacing(0.5),\n },\n description: {\n fontSize: '0.7rem',\n lineHeight: 1.3,\n opacity: 0.9,\n },\n}));\n\nconst getIcon = (icon: string) => {\n switch (icon) {\n case 'star':\n return <Star />;\n case 'local_police':\n return <VerifiedUser />;\n case 'visibility':\n return <Visibility />;\n case 'workspace_premium':\n return <EmojiEvents />;\n case 'help':\n return <Help />;\n case 'psychology':\n return <Search />;\n case 'support':\n return <Support />;\n case 'build':\n return <Build />;\n case 'school':\n return <School />;\n case 'menu_book':\n return <MenuBook />;\n case 'cast_for_education':\n return <CastForEducation />;\n case 'thumb_up':\n return <ThumbUp />;\n case 'rate_review':\n return <RateReview />;\n case 'article':\n return <Article />;\n case 'history_edu':\n return <Create />;\n case 'link':\n return <Link />;\n case 'comment':\n return <Comment />;\n case 'view_column':\n return <ViewColumn />;\n case 'share':\n return <Share />;\n case 'public':\n return <Public />;\n case 'record_voice_over':\n return <RecordVoiceOver />;\n case 'campaign':\n return <SpeakerNotes />;\n case 'gavel':\n return <Gavel />;\n case 'device_hub':\n return <DeviceHub />;\n case 'hearing':\n return <Hearing />;\n case 'military_tech':\n return <Stars />;\n case 'verified':\n return <VerifiedUser />;\n case 'check_circle':\n return <CheckCircle />;\n case 'done_all':\n return <DoneAll />;\n case 'construction':\n return <Build />;\n case 'auto_fix_high':\n return <Flare />;\n case 'person_add':\n return <PersonAdd />;\n case 'trending_up':\n return <TrendingUp />;\n case 'emoji_events':\n return <EmojiEvents />;\n case 'groups':\n return <Group />;\n case 'nights_stay':\n return <NightsStay />;\n case 'auto_stories':\n return <LibraryBooks />;\n case 'translate':\n return <Translate />;\n case 'chat_bubble':\n return <ChatBubble />;\n // Collection badges\n case 'collections_bookmark':\n return <CollectionsBookmark />;\n case 'local_library':\n return <LocalLibrary />;\n case 'archive':\n return <Archive />;\n case 'playlist_add':\n return <PlaylistAdd />;\n case 'folder_special':\n return <FolderSpecial />;\n case 'inventory':\n return <Archive />;\n case 'star_rate':\n return <StarRate />;\n case 'diamond':\n return <Stars />;\n case 'whatshot':\n return <Whatshot />;\n case 'palette':\n return <Palette />;\n case 'camera_alt':\n return <CameraAlt />;\n case 'label_important':\n return <LabelImportant />;\n default:\n return <VerifiedUser />;\n }\n};\n\nexport const BadgeChip = ({\n badge,\n count,\n}: {\n badge: Badge;\n count?: number;\n}) => {\n const classes = useStyles();\n const IconComponent = getIcon(badge.icon);\n\n return (\n <Box className={`${classes.badge} ${classes[badge.level]}`}>\n <Box className={classes.icon}>{IconComponent}</Box>\n <Typography className={classes.name}>{badge.name}</Typography>\n <Typography className={classes.level}>{badge.level}</Typography>\n <Typography className={classes.description}>\n {badge.description}\n </Typography>\n {count && count > 1 && <Box className={classes.count}>x {count}</Box>}\n </Box>\n );\n};\n"],"names":["Star","Help","Search","Article","Create","Link","Comment","CollectionsBookmark","PlaylistAdd"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserBadges.esm.js","sources":["../../../src/components/Badges/UserBadges.tsx"],"sourcesContent":["import { useQetaApi } from '../../hooks';\nimport { BadgeChip } from './BadgeChip';\nimport { Box, Grid, Typography } from '@material-ui/core';\nimport { Alert, Skeleton } from '@material-ui/lab';\nimport { UserBadge } from '@drodil/backstage-plugin-qeta-common';\n\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation';\n\nconst LEVEL_ORDER: Record<string, number> = {\n diamond: 0,\n gold: 1,\n silver: 2,\n bronze: 3,\n};\n\nconst sortBadgesByLevel = (badges: UserBadge[]): UserBadge[] => {\n return [...badges].sort((a, b) => {\n const levelA = LEVEL_ORDER[a.badge.level] ?? 99;\n const levelB = LEVEL_ORDER[b.badge.level] ?? 99;\n return levelA - levelB;\n });\n};\n\nexport const UserBadges = ({ entityRef }: { entityRef: string }) => {\n const { t } = useTranslationRef(qetaTranslationRef);\n const {\n value: badges,\n loading,\n error,\n } = useQetaApi(api => api.getUserBadges(entityRef), [entityRef]);\n\n if (loading) {\n return <Skeleton variant=\"rect\" height={100} />;\n }\n\n if (error) {\n return <Alert severity=\"error\">{t('userBadges.error')}</Alert>;\n }\n\n const sortedBadges = badges ? sortBadgesByLevel(badges) : [];\n\n const groupedBadges = sortedBadges.reduce(\n (acc, userBadge) => {\n const key = userBadge.badge.id;\n if (!acc[key]) {\n acc[key] = {\n badge: userBadge.badge,\n count: 0,\n };\n }\n acc[key].count += 1;\n return acc;\n },\n {} as Record<string, { badge: UserBadge['badge']; count: number }>,\n );\n\n const displayBadges = Object.values(groupedBadges).sort((a, b) => {\n const levelA = LEVEL_ORDER[a.badge.level] ?? 99;\n const levelB = LEVEL_ORDER[b.badge.level] ?? 99;\n return levelA - levelB;\n });\n\n return (\n <Box>\n <Typography variant=\"h6\" gutterBottom>\n {t('userBadges.title')}\n </Typography>\n {displayBadges.length === 0 ? (\n <Typography variant=\"body2\">{t('userBadges.noBadges')}</Typography>\n ) : (\n <Grid\n container\n spacing={3}\n style={{ padding: '1em' }}\n justifyContent=\"flex-start\"\n alignItems=\"stretch\"\n >\n {displayBadges.map(item => (\n <Grid item key={item.badge.key} xs={6} sm={4} md={4} lg={3}>\n <BadgeChip badge={item.badge} count={item.count} />\n </Grid>\n ))}\n </Grid>\n )}\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AASA,MAAM,
|
|
1
|
+
{"version":3,"file":"UserBadges.esm.js","sources":["../../../src/components/Badges/UserBadges.tsx"],"sourcesContent":["import { useQetaApi } from '../../hooks';\nimport { BadgeChip } from './BadgeChip';\nimport { Box, Grid, Typography } from '@material-ui/core';\nimport { Alert, Skeleton } from '@material-ui/lab';\nimport { UserBadge } from '@drodil/backstage-plugin-qeta-common';\n\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation';\n\nconst LEVEL_ORDER: Record<string, number> = {\n diamond: 0,\n gold: 1,\n silver: 2,\n bronze: 3,\n};\n\nconst sortBadgesByLevel = (badges: UserBadge[]): UserBadge[] => {\n return [...badges].sort((a, b) => {\n const levelA = LEVEL_ORDER[a.badge.level] ?? 99;\n const levelB = LEVEL_ORDER[b.badge.level] ?? 99;\n return levelA - levelB;\n });\n};\n\nexport const UserBadges = ({ entityRef }: { entityRef: string }) => {\n const { t } = useTranslationRef(qetaTranslationRef);\n const {\n value: badges,\n loading,\n error,\n } = useQetaApi(api => api.getUserBadges(entityRef), [entityRef]);\n\n if (loading) {\n return <Skeleton variant=\"rect\" height={100} />;\n }\n\n if (error) {\n return <Alert severity=\"error\">{t('userBadges.error')}</Alert>;\n }\n\n const sortedBadges = badges ? sortBadgesByLevel(badges) : [];\n\n const groupedBadges = sortedBadges.reduce(\n (acc, userBadge) => {\n const key = userBadge.badge.id;\n if (!acc[key]) {\n acc[key] = {\n badge: userBadge.badge,\n count: 0,\n };\n }\n acc[key].count += 1;\n return acc;\n },\n {} as Record<string, { badge: UserBadge['badge']; count: number }>,\n );\n\n const displayBadges = Object.values(groupedBadges).sort((a, b) => {\n const levelA = LEVEL_ORDER[a.badge.level] ?? 99;\n const levelB = LEVEL_ORDER[b.badge.level] ?? 99;\n return levelA - levelB;\n });\n\n return (\n <Box>\n <Typography variant=\"h6\" gutterBottom>\n {t('userBadges.title')}\n </Typography>\n {displayBadges.length === 0 ? (\n <Typography variant=\"body2\">{t('userBadges.noBadges')}</Typography>\n ) : (\n <Grid\n container\n spacing={3}\n style={{ padding: '1em' }}\n justifyContent=\"flex-start\"\n alignItems=\"stretch\"\n >\n {displayBadges.map(item => (\n <Grid item key={item.badge.key} xs={6} sm={4} md={4} lg={3}>\n <BadgeChip badge={item.badge} count={item.count} />\n </Grid>\n ))}\n </Grid>\n )}\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddToCollectionButton.esm.js","sources":["../../../src/components/Buttons/AddToCollectionButton.tsx"],"sourcesContent":["import { Collection, PostResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { useState } from 'react';\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Grid,\n} from '@material-ui/core';\nimport AddCircle from '@material-ui/icons/AddCircle';\nimport RemoveCircle from '@material-ui/icons/RemoveCircle';\nimport PlayListAddIcon from '@material-ui/icons/PlaylistAdd';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../../api';\nimport { useQetaApi } from '../../hooks';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { ContentHeaderButton } from './ContentHeaderButton';\n\nexport const AddToCollectionButton = (props: { post: PostResponse }) => {\n const { post } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const alertApi = useApi(alertApiRef);\n const { value: response, retry } = useQetaApi(api => {\n return api.getCollections({\n checkAccess: true,\n includeExperts: false,\n includePosts: true,\n });\n }, []);\n const [open, setOpen] = useState(false);\n const qetaApi = useApi(qetaApiRef);\n\n const handleClickOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n const handleClick = (collection: Collection) => {\n if (collection.posts?.find(p => p.id === post.id)) {\n qetaApi\n .removePostFromCollection(collection.id, post.id)\n .then(() => {\n alertApi.post({\n message: t('addToCollectionButton.removed', {\n collection: collection.title,\n }),\n severity: 'success',\n display: 'transient',\n });\n retry();\n })\n .catch(e => {\n alertApi.post({\n message: e.message,\n severity: 'error',\n display: 'transient',\n });\n });\n } else {\n qetaApi\n .addPostToCollection(collection.id, post.id)\n .then(() => {\n alertApi.post({\n message: t('addToCollectionButton.added', {\n collection: collection.title,\n }),\n severity: 'success',\n display: 'transient',\n });\n retry();\n })\n .catch(e => {\n alertApi.post({\n message: e.message,\n severity: 'error',\n display: 'transient',\n });\n });\n }\n };\n\n if (post.status !== 'active') {\n return null;\n }\n\n const collections = (response?.collections ?? []).filter(c => c.canEdit);\n if (!collections.length) {\n return null;\n }\n\n return (\n <>\n <ContentHeaderButton onClick={handleClickOpen} icon={<PlayListAddIcon />}>\n {t('addToCollectionButton.title')}\n </ContentHeaderButton>\n <Dialog open={open} onClose={handleClose} fullWidth>\n <DialogTitle>{t('addToCollectionButton.manage')}</DialogTitle>\n <DialogContent>\n <Grid container>\n {collections.map(collection => {\n const isInCollection = collection.posts?.find(\n p => p.id === post.id,\n );\n\n return (\n <Grid item key={collection.id}>\n <Button\n variant=\"outlined\"\n startIcon={\n isInCollection ? <RemoveCircle /> : <AddCircle />\n }\n color={isInCollection ? 'secondary' : 'primary'}\n onClick={() => handleClick(collection)}\n >\n {collection.title}\n </Button>\n </Grid>\n );\n })}\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} color=\"primary\">\n {t('addToCollectionButton.close')}\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"AddToCollectionButton.esm.js","sources":["../../../src/components/Buttons/AddToCollectionButton.tsx"],"sourcesContent":["import { Collection, PostResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { useState } from 'react';\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Grid,\n} from '@material-ui/core';\nimport AddCircle from '@material-ui/icons/AddCircle';\nimport RemoveCircle from '@material-ui/icons/RemoveCircle';\nimport PlayListAddIcon from '@material-ui/icons/PlaylistAdd';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../../api';\nimport { useQetaApi } from '../../hooks';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { ContentHeaderButton } from './ContentHeaderButton';\n\nexport const AddToCollectionButton = (props: { post: PostResponse }) => {\n const { post } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const alertApi = useApi(alertApiRef);\n const { value: response, retry } = useQetaApi(api => {\n return api.getCollections({\n checkAccess: true,\n includeExperts: false,\n includePosts: true,\n });\n }, []);\n const [open, setOpen] = useState(false);\n const qetaApi = useApi(qetaApiRef);\n\n const handleClickOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n const handleClick = (collection: Collection) => {\n if (collection.posts?.find(p => p.id === post.id)) {\n qetaApi\n .removePostFromCollection(collection.id, post.id)\n .then(() => {\n alertApi.post({\n message: t('addToCollectionButton.removed', {\n collection: collection.title,\n }),\n severity: 'success',\n display: 'transient',\n });\n retry();\n })\n .catch(e => {\n alertApi.post({\n message: e.message,\n severity: 'error',\n display: 'transient',\n });\n });\n } else {\n qetaApi\n .addPostToCollection(collection.id, post.id)\n .then(() => {\n alertApi.post({\n message: t('addToCollectionButton.added', {\n collection: collection.title,\n }),\n severity: 'success',\n display: 'transient',\n });\n retry();\n })\n .catch(e => {\n alertApi.post({\n message: e.message,\n severity: 'error',\n display: 'transient',\n });\n });\n }\n };\n\n if (post.status !== 'active') {\n return null;\n }\n\n const collections = (response?.collections ?? []).filter(c => c.canEdit);\n if (!collections.length) {\n return null;\n }\n\n return (\n <>\n <ContentHeaderButton onClick={handleClickOpen} icon={<PlayListAddIcon />}>\n {t('addToCollectionButton.title')}\n </ContentHeaderButton>\n <Dialog open={open} onClose={handleClose} fullWidth>\n <DialogTitle>{t('addToCollectionButton.manage')}</DialogTitle>\n <DialogContent>\n <Grid container>\n {collections.map(collection => {\n const isInCollection = collection.posts?.find(\n p => p.id === post.id,\n );\n\n return (\n <Grid item key={collection.id}>\n <Button\n variant=\"outlined\"\n startIcon={\n isInCollection ? <RemoveCircle /> : <AddCircle />\n }\n color={isInCollection ? 'secondary' : 'primary'}\n onClick={() => handleClick(collection)}\n >\n {collection.title}\n </Button>\n </Grid>\n );\n })}\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} color=\"primary\">\n {t('addToCollectionButton.close')}\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AskQuestionButton.esm.js","sources":["../../../src/components/Buttons/AskQuestionButton.tsx"],"sourcesContent":["import HelpOutline from '@material-ui/icons/HelpOutline';\nimport { qetaCreatePostPermission } from '@drodil/backstage-plugin-qeta-common';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { askRouteRef } from '../../routes';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { OptionalRequirePermission } from '../Utility/OptionalRequirePermission';\nimport { ContentHeaderButton } from './ContentHeaderButton';\n\nexport const AskQuestionButton = (props: {\n entity?: string;\n tags?: string[];\n entityPage?: boolean;\n}) => {\n const { entity, entityPage, tags } = props;\n const askRoute = useRouteRef(askRouteRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const params = new URLSearchParams();\n if (entity) {\n params.set('entity', entity);\n }\n if (entityPage) {\n params.set('entityPage', 'true');\n }\n if (tags && tags.length > 0) {\n params.set('tags', tags.join(','));\n }\n\n return (\n <OptionalRequirePermission\n permission={qetaCreatePostPermission}\n errorPage={<></>}\n >\n <ContentHeaderButton\n to={entity || tags ? `${askRoute()}?${params.toString()}` : askRoute()}\n color=\"primary\"\n icon={<HelpOutline />}\n >\n {t('askQuestionButton.title')}\n </ContentHeaderButton>\n </OptionalRequirePermission>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"AskQuestionButton.esm.js","sources":["../../../src/components/Buttons/AskQuestionButton.tsx"],"sourcesContent":["import HelpOutline from '@material-ui/icons/HelpOutline';\nimport { qetaCreatePostPermission } from '@drodil/backstage-plugin-qeta-common';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { askRouteRef } from '../../routes';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { OptionalRequirePermission } from '../Utility/OptionalRequirePermission';\nimport { ContentHeaderButton } from './ContentHeaderButton';\n\nexport const AskQuestionButton = (props: {\n entity?: string;\n tags?: string[];\n entityPage?: boolean;\n}) => {\n const { entity, entityPage, tags } = props;\n const askRoute = useRouteRef(askRouteRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const params = new URLSearchParams();\n if (entity) {\n params.set('entity', entity);\n }\n if (entityPage) {\n params.set('entityPage', 'true');\n }\n if (tags && tags.length > 0) {\n params.set('tags', tags.join(','));\n }\n\n return (\n <OptionalRequirePermission\n permission={qetaCreatePostPermission}\n errorPage={<></>}\n >\n <ContentHeaderButton\n to={entity || tags ? `${askRoute()}?${params.toString()}` : askRoute()}\n color=\"primary\"\n icon={<HelpOutline />}\n >\n {t('askQuestionButton.title')}\n </ContentHeaderButton>\n </OptionalRequirePermission>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AASO,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAI5B;AACJ,EAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAY,IAAA,EAAK,GAAI,KAAA;AACrC,EAAA,MAAM,QAAA,GAAW,YAAY,WAAW,CAAA;AACxC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAA,CAAO,GAAA,CAAI,UAAU,MAAM,CAAA;AAAA,EAC7B;AACA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAA,CAAO,GAAA,CAAI,cAAc,MAAM,CAAA;AAAA,EACjC;AACA,EAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AAC3B,IAAA,MAAA,CAAO,GAAA,CAAI,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EACnC;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,yBAAA;AAAA,IAAA;AAAA,MACC,UAAA,EAAY,wBAAA;AAAA,MACZ,2BAAW,GAAA,CAAA,QAAA,EAAA,EAAE,CAAA;AAAA,MAEb,QAAA,kBAAA,GAAA;AAAA,QAAC,mBAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAI,MAAA,IAAU,IAAA,GAAO,CAAA,EAAG,QAAA,EAAU,CAAA,CAAA,EAAI,MAAA,CAAO,QAAA,EAAU,CAAA,CAAA,GAAK,QAAA,EAAS;AAAA,UACrE,KAAA,EAAM,SAAA;AAAA,UACN,IAAA,sBAAO,WAAA,EAAA,EAAY,CAAA;AAAA,UAElB,YAAE,yBAAyB;AAAA;AAAA;AAC9B;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ButtonContainer.esm.js","sources":["../../../src/components/Buttons/ButtonContainer.tsx"],"sourcesContent":["import { ReactNode } from 'react';\nimport { makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles(\n () => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: '8px',\n },\n }),\n { name: 'ContentHeaderButtons' },\n);\n\nexport const ButtonContainer = (props: { children: ReactNode }) => {\n const styles = useStyles();\n return <div className={styles.root}>{props.children}</div>;\n};\n"],"names":[],"mappings":";;;AAGA,MAAM,
|
|
1
|
+
{"version":3,"file":"ButtonContainer.esm.js","sources":["../../../src/components/Buttons/ButtonContainer.tsx"],"sourcesContent":["import { ReactNode } from 'react';\nimport { makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles(\n () => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: '8px',\n },\n }),\n { name: 'ContentHeaderButtons' },\n);\n\nexport const ButtonContainer = (props: { children: ReactNode }) => {\n const styles = useStyles();\n return <div className={styles.root}>{props.children}</div>;\n};\n"],"names":[],"mappings":";;;AAGA,MAAM,SAAA,GAAY,UAAA;AAAA,EAChB,OAAO;AAAA,IACL,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,cAAA,EAAgB,UAAA;AAAA,MAChB,GAAA,EAAK;AAAA;AACP,GACF,CAAA;AAAA,EACA,EAAE,MAAM,sBAAA;AACV,CAAA;AAEO,MAAM,eAAA,GAAkB,CAAC,KAAA,KAAmC;AACjE,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,2BAAQ,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,IAAA,EAAO,gBAAM,QAAA,EAAS,CAAA;AACtD;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CollectionFollowButton.esm.js","sources":["../../../src/components/Buttons/CollectionFollowButton.tsx"],"sourcesContent":["import { CSSProperties } from 'react';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport NotificationsActive from '@material-ui/icons/NotificationsActive';\nimport NotificationsNone from '@material-ui/icons/NotificationsNone';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { Collection } from '@drodil/backstage-plugin-qeta-common';\nimport { useCollectionsFollow } from '../../hooks/useCollectionsFollow';\n\nexport const CollectionFollowButton = (props: {\n collection: Collection;\n style?: CSSProperties;\n}) => {\n const { collection, style } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const collections = useCollectionsFollow();\n if (collections.loading) {\n return null;\n }\n return (\n <Tooltip title={t('collectionButton.tooltip')}>\n <IconButton\n size=\"small\"\n color={\n collections.isFollowingCollection(collection)\n ? 'secondary'\n : 'default'\n }\n onClick={() => {\n if (collections.isFollowingCollection(collection)) {\n collections.unfollowCollection(collection);\n } else {\n collections.followCollection(collection);\n }\n }}\n style={style}\n >\n {collections.isFollowingCollection(collection) ? (\n <NotificationsActive />\n ) : (\n <NotificationsNone />\n )}\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"CollectionFollowButton.esm.js","sources":["../../../src/components/Buttons/CollectionFollowButton.tsx"],"sourcesContent":["import { CSSProperties } from 'react';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport NotificationsActive from '@material-ui/icons/NotificationsActive';\nimport NotificationsNone from '@material-ui/icons/NotificationsNone';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { Collection } from '@drodil/backstage-plugin-qeta-common';\nimport { useCollectionsFollow } from '../../hooks/useCollectionsFollow';\n\nexport const CollectionFollowButton = (props: {\n collection: Collection;\n style?: CSSProperties;\n}) => {\n const { collection, style } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const collections = useCollectionsFollow();\n if (collections.loading) {\n return null;\n }\n return (\n <Tooltip title={t('collectionButton.tooltip')}>\n <IconButton\n size=\"small\"\n color={\n collections.isFollowingCollection(collection)\n ? 'secondary'\n : 'default'\n }\n onClick={() => {\n if (collections.isFollowingCollection(collection)) {\n collections.unfollowCollection(collection);\n } else {\n collections.followCollection(collection);\n }\n }}\n style={style}\n >\n {collections.isFollowingCollection(collection) ? (\n <NotificationsActive />\n ) : (\n <NotificationsNone />\n )}\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AASO,MAAM,sBAAA,GAAyB,CAAC,KAAA,KAGjC;AACJ,EAAA,MAAM,EAAE,UAAA,EAAY,KAAA,EAAM,GAAI,KAAA;AAC9B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,cAAc,oBAAA,EAAqB;AACzC,EAAA,IAAI,YAAY,OAAA,EAAS;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,uBACE,GAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,0BAA0B,CAAA,EAC1C,QAAA,kBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,KAAA,EACE,WAAA,CAAY,qBAAA,CAAsB,UAAU,IACxC,WAAA,GACA,SAAA;AAAA,MAEN,SAAS,MAAM;AACb,QAAA,IAAI,WAAA,CAAY,qBAAA,CAAsB,UAAU,CAAA,EAAG;AACjD,UAAA,WAAA,CAAY,mBAAmB,UAAU,CAAA;AAAA,QAC3C,CAAA,MAAO;AACL,UAAA,WAAA,CAAY,iBAAiB,UAAU,CAAA;AAAA,QACzC;AAAA,MACF,CAAA;AAAA,MACA,KAAA;AAAA,MAEC,QAAA,EAAA,WAAA,CAAY,sBAAsB,UAAU,CAAA,uBAC1C,mBAAA,EAAA,EAAoB,CAAA,uBAEpB,iBAAA,EAAA,EAAkB;AAAA;AAAA,GAEvB,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentHeaderButton.esm.js","sources":["../../../src/components/Buttons/ContentHeaderButton.tsx"],"sourcesContent":["import { ReactNode } from 'react';\nimport { LinkButton } from '@backstage/core-components';\nimport { useTheme, useMediaQuery, Button } from '@material-ui/core';\n\ninterface ContentHeaderButtonProps {\n to?: string;\n onClick?: () => void;\n icon: ReactNode;\n children: ReactNode;\n color?: 'primary' | 'secondary' | 'default';\n disabled?: boolean;\n}\n\nexport const ContentHeaderButton = (props: ContentHeaderButtonProps) => {\n const { to, onClick, icon, children, color = 'primary', disabled } = props;\n const theme = useTheme();\n const isSmallScreen = useMediaQuery(theme.breakpoints.down('md'));\n\n const commonProps = {\n size: 'small' as const,\n variant: 'contained' as const,\n color,\n startIcon: isSmallScreen ? undefined : icon,\n style: {\n minWidth: isSmallScreen ? '0' : undefined,\n padding: isSmallScreen ? '6px' : undefined,\n },\n disabled,\n };\n\n if (to) {\n return (\n <LinkButton {...commonProps} to={to}>\n {isSmallScreen ? icon : children}\n </LinkButton>\n );\n }\n\n return (\n <Button {...commonProps} onClick={onClick}>\n {isSmallScreen ? icon : children}\n </Button>\n );\n};\n"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"ContentHeaderButton.esm.js","sources":["../../../src/components/Buttons/ContentHeaderButton.tsx"],"sourcesContent":["import { ReactNode } from 'react';\nimport { LinkButton } from '@backstage/core-components';\nimport { useTheme, useMediaQuery, Button } from '@material-ui/core';\n\ninterface ContentHeaderButtonProps {\n to?: string;\n onClick?: () => void;\n icon: ReactNode;\n children: ReactNode;\n color?: 'primary' | 'secondary' | 'default';\n disabled?: boolean;\n}\n\nexport const ContentHeaderButton = (props: ContentHeaderButtonProps) => {\n const { to, onClick, icon, children, color = 'primary', disabled } = props;\n const theme = useTheme();\n const isSmallScreen = useMediaQuery(theme.breakpoints.down('md'));\n\n const commonProps = {\n size: 'small' as const,\n variant: 'contained' as const,\n color,\n startIcon: isSmallScreen ? undefined : icon,\n style: {\n minWidth: isSmallScreen ? '0' : undefined,\n padding: isSmallScreen ? '6px' : undefined,\n },\n disabled,\n };\n\n if (to) {\n return (\n <LinkButton {...commonProps} to={to}>\n {isSmallScreen ? icon : children}\n </LinkButton>\n );\n }\n\n return (\n <Button {...commonProps} onClick={onClick}>\n {isSmallScreen ? icon : children}\n </Button>\n );\n};\n"],"names":[],"mappings":";;;;AAaO,MAAM,mBAAA,GAAsB,CAAC,KAAA,KAAoC;AACtE,EAAA,MAAM,EAAE,IAAI,OAAA,EAAS,IAAA,EAAM,UAAU,KAAA,GAAQ,SAAA,EAAW,UAAS,GAAI,KAAA;AACrE,EAAA,MAAM,QAAQ,QAAA,EAAS;AACvB,EAAA,MAAM,gBAAgB,aAAA,CAAc,KAAA,CAAM,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA;AAEhE,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS,WAAA;AAAA,IACT,KAAA;AAAA,IACA,SAAA,EAAW,gBAAgB,MAAA,GAAY,IAAA;AAAA,IACvC,KAAA,EAAO;AAAA,MACL,QAAA,EAAU,gBAAgB,GAAA,GAAM,MAAA;AAAA,MAChC,OAAA,EAAS,gBAAgB,KAAA,GAAQ;AAAA,KACnC;AAAA,IACA;AAAA,GACF;AAEA,EAAA,IAAI,EAAA,EAAI;AACN,IAAA,2BACG,UAAA,EAAA,EAAY,GAAG,aAAa,EAAA,EAC1B,QAAA,EAAA,aAAA,GAAgB,OAAO,QAAA,EAC1B,CAAA;AAAA,EAEJ;AAEA,EAAA,2BACG,MAAA,EAAA,EAAQ,GAAG,aAAa,OAAA,EACtB,QAAA,EAAA,aAAA,GAAgB,OAAO,QAAA,EAC1B,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateCollectionButton.esm.js","sources":["../../../src/components/Buttons/CreateCollectionButton.tsx"],"sourcesContent":["import PlayListAddIcon from '@material-ui/icons/PlaylistAdd';\nimport { qetaCreateCollectionPermission } from '@drodil/backstage-plugin-qeta-common';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { collectionCreateRouteRef } from '../../routes';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { OptionalRequirePermission } from '../Utility/OptionalRequirePermission';\nimport { ContentHeaderButton } from './ContentHeaderButton';\n\nexport const CreateCollectionButton = () => {\n const createRoute = useRouteRef(collectionCreateRouteRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n\n return (\n <OptionalRequirePermission\n permission={qetaCreateCollectionPermission}\n errorPage={<></>}\n >\n <ContentHeaderButton\n to={createRoute()}\n color=\"primary\"\n icon={<PlayListAddIcon />}\n >\n {t('createCollectionButton.title')}\n </ContentHeaderButton>\n </OptionalRequirePermission>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AASO,MAAM,yBAAyB,MAAM;AAC1C,
|
|
1
|
+
{"version":3,"file":"CreateCollectionButton.esm.js","sources":["../../../src/components/Buttons/CreateCollectionButton.tsx"],"sourcesContent":["import PlayListAddIcon from '@material-ui/icons/PlaylistAdd';\nimport { qetaCreateCollectionPermission } from '@drodil/backstage-plugin-qeta-common';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { collectionCreateRouteRef } from '../../routes';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { OptionalRequirePermission } from '../Utility/OptionalRequirePermission';\nimport { ContentHeaderButton } from './ContentHeaderButton';\n\nexport const CreateCollectionButton = () => {\n const createRoute = useRouteRef(collectionCreateRouteRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n\n return (\n <OptionalRequirePermission\n permission={qetaCreateCollectionPermission}\n errorPage={<></>}\n >\n <ContentHeaderButton\n to={createRoute()}\n color=\"primary\"\n icon={<PlayListAddIcon />}\n >\n {t('createCollectionButton.title')}\n </ContentHeaderButton>\n </OptionalRequirePermission>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AASO,MAAM,yBAAyB,MAAM;AAC1C,EAAA,MAAM,WAAA,GAAc,YAAY,wBAAwB,CAAA;AACxD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAA,uBACE,GAAA;AAAA,IAAC,yBAAA;AAAA,IAAA;AAAA,MACC,UAAA,EAAY,8BAAA;AAAA,MACZ,2BAAW,GAAA,CAAA,QAAA,EAAA,EAAE,CAAA;AAAA,MAEb,QAAA,kBAAA,GAAA;AAAA,QAAC,mBAAA;AAAA,QAAA;AAAA,UACC,IAAI,WAAA,EAAY;AAAA,UAChB,KAAA,EAAM,SAAA;AAAA,UACN,IAAA,sBAAO,eAAA,EAAA,EAAgB,CAAA;AAAA,UAEtB,YAAE,8BAA8B;AAAA;AAAA;AACnC;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateLinkButton.esm.js","sources":["../../../src/components/Buttons/CreateLinkButton.tsx"],"sourcesContent":["import LinkIcon from '@material-ui/icons/Link';\nimport { qetaCreatePostPermission } from '@drodil/backstage-plugin-qeta-common';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { createLinkRouteRef } from '../../routes';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { OptionalRequirePermission } from '../Utility/OptionalRequirePermission';\nimport { ContentHeaderButton } from './ContentHeaderButton';\n\nexport const CreateLinkButton = (props: {\n entity?: string;\n tags?: string[];\n entityPage?: boolean;\n}) => {\n const { entity, entityPage, tags } = props;\n const linkRoute = useRouteRef(createLinkRouteRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const params = new URLSearchParams();\n if (entity) {\n params.set('entity', entity);\n }\n if (entityPage) {\n params.set('entityPage', 'true');\n }\n if (tags && tags.length > 0) {\n params.set('tags', tags.join(','));\n }\n\n return (\n <OptionalRequirePermission\n permission={qetaCreatePostPermission}\n errorPage={<></>}\n >\n <ContentHeaderButton\n to={\n entity || tags ? `${linkRoute()}?${params.toString()}` : linkRoute()\n }\n color=\"primary\"\n icon={<LinkIcon />}\n >\n {t('createLinkButton.title')}\n </ContentHeaderButton>\n </OptionalRequirePermission>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"CreateLinkButton.esm.js","sources":["../../../src/components/Buttons/CreateLinkButton.tsx"],"sourcesContent":["import LinkIcon from '@material-ui/icons/Link';\nimport { qetaCreatePostPermission } from '@drodil/backstage-plugin-qeta-common';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { createLinkRouteRef } from '../../routes';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { OptionalRequirePermission } from '../Utility/OptionalRequirePermission';\nimport { ContentHeaderButton } from './ContentHeaderButton';\n\nexport const CreateLinkButton = (props: {\n entity?: string;\n tags?: string[];\n entityPage?: boolean;\n}) => {\n const { entity, entityPage, tags } = props;\n const linkRoute = useRouteRef(createLinkRouteRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const params = new URLSearchParams();\n if (entity) {\n params.set('entity', entity);\n }\n if (entityPage) {\n params.set('entityPage', 'true');\n }\n if (tags && tags.length > 0) {\n params.set('tags', tags.join(','));\n }\n\n return (\n <OptionalRequirePermission\n permission={qetaCreatePostPermission}\n errorPage={<></>}\n >\n <ContentHeaderButton\n to={\n entity || tags ? `${linkRoute()}?${params.toString()}` : linkRoute()\n }\n color=\"primary\"\n icon={<LinkIcon />}\n >\n {t('createLinkButton.title')}\n </ContentHeaderButton>\n </OptionalRequirePermission>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AASO,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAI3B;AACJ,EAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAY,IAAA,EAAK,GAAI,KAAA;AACrC,EAAA,MAAM,SAAA,GAAY,YAAY,kBAAkB,CAAA;AAChD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAA,CAAO,GAAA,CAAI,UAAU,MAAM,CAAA;AAAA,EAC7B;AACA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAA,CAAO,GAAA,CAAI,cAAc,MAAM,CAAA;AAAA,EACjC;AACA,EAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AAC3B,IAAA,MAAA,CAAO,GAAA,CAAI,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EACnC;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,yBAAA;AAAA,IAAA;AAAA,MACC,UAAA,EAAY,wBAAA;AAAA,MACZ,2BAAW,GAAA,CAAA,QAAA,EAAA,EAAE,CAAA;AAAA,MAEb,QAAA,kBAAA,GAAA;AAAA,QAAC,mBAAA;AAAA,QAAA;AAAA,UACC,EAAA,EACE,MAAA,IAAU,IAAA,GAAO,CAAA,EAAG,SAAA,EAAW,CAAA,CAAA,EAAI,MAAA,CAAO,QAAA,EAAU,CAAA,CAAA,GAAK,SAAA,EAAU;AAAA,UAErE,KAAA,EAAM,SAAA;AAAA,UACN,IAAA,sBAAO,QAAA,EAAA,EAAS,CAAA;AAAA,UAEf,YAAE,wBAAwB;AAAA;AAAA;AAC7B;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityFollowButton.esm.js","sources":["../../../src/components/Buttons/EntityFollowButton.tsx"],"sourcesContent":["import NotificationsActive from '@material-ui/icons/NotificationsActive';\nimport NotificationsNone from '@material-ui/icons/NotificationsNone';\nimport { useEntityFollow } from '../../hooks';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nexport const EntityFollowButton = (props: { entityRef: string }) => {\n const { entityRef } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const entities = useEntityFollow();\n if (entities.loading) {\n return null;\n }\n\n return (\n <Tooltip title={t('entityButton.tooltip')}>\n <IconButton\n disableRipple\n size=\"small\"\n color={entities.isFollowingEntity(entityRef) ? 'secondary' : 'default'}\n onClick={() => {\n if (entities.isFollowingEntity(entityRef)) {\n entities.unfollowEntity(entityRef);\n } else {\n entities.followEntity(entityRef);\n }\n }}\n >\n {entities.isFollowingEntity(entityRef) ? (\n <NotificationsActive />\n ) : (\n <NotificationsNone />\n )}\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"EntityFollowButton.esm.js","sources":["../../../src/components/Buttons/EntityFollowButton.tsx"],"sourcesContent":["import NotificationsActive from '@material-ui/icons/NotificationsActive';\nimport NotificationsNone from '@material-ui/icons/NotificationsNone';\nimport { useEntityFollow } from '../../hooks';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nexport const EntityFollowButton = (props: { entityRef: string }) => {\n const { entityRef } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const entities = useEntityFollow();\n if (entities.loading) {\n return null;\n }\n\n return (\n <Tooltip title={t('entityButton.tooltip')}>\n <IconButton\n disableRipple\n size=\"small\"\n color={entities.isFollowingEntity(entityRef) ? 'secondary' : 'default'}\n onClick={() => {\n if (entities.isFollowingEntity(entityRef)) {\n entities.unfollowEntity(entityRef);\n } else {\n entities.followEntity(entityRef);\n }\n }}\n >\n {entities.isFollowingEntity(entityRef) ? (\n <NotificationsActive />\n ) : (\n <NotificationsNone />\n )}\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAOO,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAAiC;AAClE,EAAA,MAAM,EAAE,WAAU,GAAI,KAAA;AACtB,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,WAAW,eAAA,EAAgB;AACjC,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,GAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,sBAAsB,CAAA,EACtC,QAAA,kBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAa,IAAA;AAAA,MACb,IAAA,EAAK,OAAA;AAAA,MACL,KAAA,EAAO,QAAA,CAAS,iBAAA,CAAkB,SAAS,IAAI,WAAA,GAAc,SAAA;AAAA,MAC7D,SAAS,MAAM;AACb,QAAA,IAAI,QAAA,CAAS,iBAAA,CAAkB,SAAS,CAAA,EAAG;AACzC,UAAA,QAAA,CAAS,eAAe,SAAS,CAAA;AAAA,QACnC,CAAA,MAAO;AACL,UAAA,QAAA,CAAS,aAAa,SAAS,CAAA;AAAA,QACjC;AAAA,MACF,CAAA;AAAA,MAEC,QAAA,EAAA,QAAA,CAAS,kBAAkB,SAAS,CAAA,uBAClC,mBAAA,EAAA,EAAoB,CAAA,uBAEpB,iBAAA,EAAA,EAAkB;AAAA;AAAA,GAEvB,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FavoriteButton.esm.js","sources":["../../../src/components/Buttons/FavoriteButton.tsx"],"sourcesContent":["import { PostResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport { Fragment, useState } from 'react';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport StarIcon from '@material-ui/icons/Star';\nimport StarOutlineIcon from '@material-ui/icons/StarOutline';\nimport { qetaApiRef } from '../../api';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nexport const FavoriteButton = (props: { entity: PostResponse }) => {\n const [entity, setEntity] = useState<PostResponse>(props.entity);\n const qetaApi = useApi(qetaApiRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n const alertApi = useApi(alertApiRef);\n\n const favoriteQuestion = () => {\n qetaApi\n .favoritePost(entity.id)\n .catch(e =>\n alertApi.post({\n message: e.message,\n display: 'transient',\n severity: 'error',\n }),\n )\n .then(response => {\n if (response) {\n setEntity(response);\n }\n });\n };\n\n const unfavoriteQuestion = () => {\n qetaApi\n .unfavoritePost(entity.id)\n .catch(e =>\n alertApi.post({\n message: e.message,\n display: 'transient',\n severity: 'error',\n }),\n )\n .then(response => {\n if (response) {\n setEntity(response);\n }\n });\n };\n\n return (\n <Fragment>\n {entity.favorite ? (\n <Tooltip title={t('favorite.remove')}>\n <IconButton\n aria-label=\"unfavorite\"\n size=\"small\"\n disabled={\n entity.status !== 'active' && entity.status !== 'obsolete'\n }\n onClick={unfavoriteQuestion}\n className=\"qetaUnfavoriteBtn\"\n >\n <StarIcon />\n </IconButton>\n </Tooltip>\n ) : (\n <Tooltip title={t('favorite.add')}>\n <IconButton\n aria-label=\"favorite\"\n size=\"small\"\n disabled={\n entity.status !== 'active' && entity.status !== 'obsolete'\n }\n onClick={favoriteQuestion}\n className=\"qetaFavoriteBtn\"\n >\n <StarOutlineIcon />\n </IconButton>\n </Tooltip>\n )}\n </Fragment>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"FavoriteButton.esm.js","sources":["../../../src/components/Buttons/FavoriteButton.tsx"],"sourcesContent":["import { PostResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport { Fragment, useState } from 'react';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport StarIcon from '@material-ui/icons/Star';\nimport StarOutlineIcon from '@material-ui/icons/StarOutline';\nimport { qetaApiRef } from '../../api';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nexport const FavoriteButton = (props: { entity: PostResponse }) => {\n const [entity, setEntity] = useState<PostResponse>(props.entity);\n const qetaApi = useApi(qetaApiRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n const alertApi = useApi(alertApiRef);\n\n const favoriteQuestion = () => {\n qetaApi\n .favoritePost(entity.id)\n .catch(e =>\n alertApi.post({\n message: e.message,\n display: 'transient',\n severity: 'error',\n }),\n )\n .then(response => {\n if (response) {\n setEntity(response);\n }\n });\n };\n\n const unfavoriteQuestion = () => {\n qetaApi\n .unfavoritePost(entity.id)\n .catch(e =>\n alertApi.post({\n message: e.message,\n display: 'transient',\n severity: 'error',\n }),\n )\n .then(response => {\n if (response) {\n setEntity(response);\n }\n });\n };\n\n return (\n <Fragment>\n {entity.favorite ? (\n <Tooltip title={t('favorite.remove')}>\n <IconButton\n aria-label=\"unfavorite\"\n size=\"small\"\n disabled={\n entity.status !== 'active' && entity.status !== 'obsolete'\n }\n onClick={unfavoriteQuestion}\n className=\"qetaUnfavoriteBtn\"\n >\n <StarIcon />\n </IconButton>\n </Tooltip>\n ) : (\n <Tooltip title={t('favorite.add')}>\n <IconButton\n aria-label=\"favorite\"\n size=\"small\"\n disabled={\n entity.status !== 'active' && entity.status !== 'obsolete'\n }\n onClick={favoriteQuestion}\n className=\"qetaFavoriteBtn\"\n >\n <StarOutlineIcon />\n </IconButton>\n </Tooltip>\n )}\n </Fragment>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAUO,MAAM,cAAA,GAAiB,CAAC,KAAA,KAAoC;AACjE,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,QAAA,CAAuB,MAAM,MAAM,CAAA;AAC/D,EAAA,MAAM,OAAA,GAAU,OAAO,UAAU,CAAA;AACjC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,QAAA,GAAW,OAAO,WAAW,CAAA;AAEnC,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,OAAA,CACG,YAAA,CAAa,MAAA,CAAO,EAAE,CAAA,CACtB,KAAA;AAAA,MAAM,CAAA,CAAA,KACL,SAAS,IAAA,CAAK;AAAA,QACZ,SAAS,CAAA,CAAE,OAAA;AAAA,QACX,OAAA,EAAS,WAAA;AAAA,QACT,QAAA,EAAU;AAAA,OACX;AAAA,KACH,CACC,KAAK,CAAA,QAAA,KAAY;AAChB,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,SAAA,CAAU,QAAQ,CAAA;AAAA,MACpB;AAAA,IACF,CAAC,CAAA;AAAA,EACL,CAAA;AAEA,EAAA,MAAM,qBAAqB,MAAM;AAC/B,IAAA,OAAA,CACG,cAAA,CAAe,MAAA,CAAO,EAAE,CAAA,CACxB,KAAA;AAAA,MAAM,CAAA,CAAA,KACL,SAAS,IAAA,CAAK;AAAA,QACZ,SAAS,CAAA,CAAE,OAAA;AAAA,QACX,OAAA,EAAS,WAAA;AAAA,QACT,QAAA,EAAU;AAAA,OACX;AAAA,KACH,CACC,KAAK,CAAA,QAAA,KAAY;AAChB,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,SAAA,CAAU,QAAQ,CAAA;AAAA,MACpB;AAAA,IACF,CAAC,CAAA;AAAA,EACL,CAAA;AAEA,EAAA,uBACE,GAAA,CAAC,YACE,QAAA,EAAA,MAAA,CAAO,QAAA,uBACL,OAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,iBAAiB,CAAA,EACjC,QAAA,kBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAW,YAAA;AAAA,MACX,IAAA,EAAK,OAAA;AAAA,MACL,QAAA,EACE,MAAA,CAAO,MAAA,KAAW,QAAA,IAAY,OAAO,MAAA,KAAW,UAAA;AAAA,MAElD,OAAA,EAAS,kBAAA;AAAA,MACT,SAAA,EAAU,mBAAA;AAAA,MAEV,8BAAC,QAAA,EAAA,EAAS;AAAA;AAAA,KAEd,CAAA,mBAEA,GAAA,CAAC,WAAQ,KAAA,EAAO,CAAA,CAAE,cAAc,CAAA,EAC9B,QAAA,kBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAW,UAAA;AAAA,MACX,IAAA,EAAK,OAAA;AAAA,MACL,QAAA,EACE,MAAA,CAAO,MAAA,KAAW,QAAA,IAAY,OAAO,MAAA,KAAW,UAAA;AAAA,MAElD,OAAA,EAAS,gBAAA;AAAA,MACT,SAAA,EAAU,iBAAA;AAAA,MAEV,8BAAC,eAAA,EAAA,EAAgB;AAAA;AAAA,KAErB,CAAA,EAEJ,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FollowPostButton.esm.js","sources":["../../../src/components/Buttons/FollowPostButton.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport NotificationsActive from '@material-ui/icons/NotificationsActive';\nimport NotificationsNone from '@material-ui/icons/NotificationsNone';\nimport { Post } from '@drodil/backstage-plugin-qeta-common';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../../api';\n\nexport const FollowPostButton = (props: { post: Post }) => {\n const { post } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const qetaApi = useApi(qetaApiRef);\n const [following, setFollowing] = useState(post.following ?? false);\n\n const handleFollow = async () => {\n if (following) {\n await qetaApi.unfollowPost(post.id);\n setFollowing(false);\n } else {\n await qetaApi.followPost(post.id);\n setFollowing(true);\n }\n };\n\n return (\n <Tooltip\n title={\n following\n ? t('followPostButton.unfollow', {})\n : t('followPostButton.follow', {})\n }\n >\n <IconButton\n disableRipple\n size=\"small\"\n color={following ? 'secondary' : 'default'}\n onClick={handleFollow}\n >\n {following ? <NotificationsActive /> : <NotificationsNone />}\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"FollowPostButton.esm.js","sources":["../../../src/components/Buttons/FollowPostButton.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport NotificationsActive from '@material-ui/icons/NotificationsActive';\nimport NotificationsNone from '@material-ui/icons/NotificationsNone';\nimport { Post } from '@drodil/backstage-plugin-qeta-common';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../../api';\n\nexport const FollowPostButton = (props: { post: Post }) => {\n const { post } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const qetaApi = useApi(qetaApiRef);\n const [following, setFollowing] = useState(post.following ?? false);\n\n const handleFollow = async () => {\n if (following) {\n await qetaApi.unfollowPost(post.id);\n setFollowing(false);\n } else {\n await qetaApi.followPost(post.id);\n setFollowing(true);\n }\n };\n\n return (\n <Tooltip\n title={\n following\n ? t('followPostButton.unfollow', {})\n : t('followPostButton.follow', {})\n }\n >\n <IconButton\n disableRipple\n size=\"small\"\n color={following ? 'secondary' : 'default'}\n onClick={handleFollow}\n >\n {following ? <NotificationsActive /> : <NotificationsNone />}\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAUO,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAA0B;AACzD,EAAA,MAAM,EAAE,MAAK,GAAI,KAAA;AACjB,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,OAAA,GAAU,OAAO,UAAU,CAAA;AACjC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,IAAI,QAAA,CAAS,IAAA,CAAK,aAAa,KAAK,CAAA;AAElE,EAAA,MAAM,eAAe,YAAY;AAC/B,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,OAAA,CAAQ,YAAA,CAAa,IAAA,CAAK,EAAE,CAAA;AAClC,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB,CAAA,MAAO;AACL,MAAA,MAAM,OAAA,CAAQ,UAAA,CAAW,IAAA,CAAK,EAAE,CAAA;AAChC,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,IACnB;AAAA,EACF,CAAA;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,KAAA,EACE,SAAA,GACI,CAAA,CAAE,2BAAA,EAA6B,EAAE,CAAA,GACjC,CAAA,CAAE,yBAAA,EAA2B,EAAE,CAAA;AAAA,MAGrC,QAAA,kBAAA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,aAAA,EAAa,IAAA;AAAA,UACb,IAAA,EAAK,OAAA;AAAA,UACL,KAAA,EAAO,YAAY,WAAA,GAAc,SAAA;AAAA,UACjC,OAAA,EAAS,YAAA;AAAA,UAER,QAAA,EAAA,SAAA,mBAAY,GAAA,CAAC,mBAAA,EAAA,EAAoB,CAAA,uBAAM,iBAAA,EAAA,EAAkB;AAAA;AAAA;AAC5D;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkButton.esm.js","sources":["../../../src/components/Buttons/LinkButton.tsx"],"sourcesContent":["import {\n AnswerResponse,\n PostResponse,\n isPost,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport LinkIcon from '@material-ui/icons/Link';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\n\nexport const LinkButton = (props: {\n entity: PostResponse | AnswerResponse;\n className?: string;\n}) => {\n const isPostEntity = isPost(props.entity);\n const { t } = useTranslationRef(qetaTranslationRef);\n const alertApi = useApi(alertApiRef);\n const copyToClipboard = () => {\n const url = new URL(window.location.href);\n if (!isPostEntity) {\n url.hash = `#answer_${props.entity.id}`;\n }\n window.navigator.clipboard.writeText(url.toString());\n alertApi.post({\n message: t('link.copied'),\n severity: 'info',\n display: 'transient',\n });\n };\n\n return (\n <Tooltip title={isPostEntity ? t('link.post') : t('link.answer')}>\n <IconButton\n aria-label={t('link.aria')}\n size=\"small\"\n onClick={copyToClipboard}\n className={props.className}\n >\n <LinkIcon />\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"LinkButton.esm.js","sources":["../../../src/components/Buttons/LinkButton.tsx"],"sourcesContent":["import {\n AnswerResponse,\n PostResponse,\n isPost,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport LinkIcon from '@material-ui/icons/Link';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\n\nexport const LinkButton = (props: {\n entity: PostResponse | AnswerResponse;\n className?: string;\n}) => {\n const isPostEntity = isPost(props.entity);\n const { t } = useTranslationRef(qetaTranslationRef);\n const alertApi = useApi(alertApiRef);\n const copyToClipboard = () => {\n const url = new URL(window.location.href);\n if (!isPostEntity) {\n url.hash = `#answer_${props.entity.id}`;\n }\n window.navigator.clipboard.writeText(url.toString());\n alertApi.post({\n message: t('link.copied'),\n severity: 'info',\n display: 'transient',\n });\n };\n\n return (\n <Tooltip title={isPostEntity ? t('link.post') : t('link.answer')}>\n <IconButton\n aria-label={t('link.aria')}\n size=\"small\"\n onClick={copyToClipboard}\n className={props.className}\n >\n <LinkIcon />\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAWO,MAAM,UAAA,GAAa,CAAC,KAAA,KAGrB;AACJ,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA;AACxC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,QAAA,GAAW,OAAO,WAAW,CAAA;AACnC,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,MAAA,CAAO,SAAS,IAAI,CAAA;AACxC,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,GAAA,CAAI,IAAA,GAAO,CAAA,QAAA,EAAW,KAAA,CAAM,MAAA,CAAO,EAAE,CAAA,CAAA;AAAA,IACvC;AACA,IAAA,MAAA,CAAO,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,UAAU,CAAA;AACnD,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,OAAA,EAAS,EAAE,aAAa,CAAA;AAAA,MACxB,QAAA,EAAU,MAAA;AAAA,MACV,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,uBACE,GAAA,CAAC,WAAQ,KAAA,EAAO,YAAA,GAAe,EAAE,WAAW,CAAA,GAAI,CAAA,CAAE,aAAa,CAAA,EAC7D,QAAA,kBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,EAAE,WAAW,CAAA;AAAA,MACzB,IAAA,EAAK,OAAA;AAAA,MACL,OAAA,EAAS,eAAA;AAAA,MACT,WAAW,KAAA,CAAM,SAAA;AAAA,MAEjB,8BAAC,QAAA,EAAA,EAAS;AAAA;AAAA,GACZ,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenLinkButton.esm.js","sources":["../../../src/components/Buttons/OpenLinkButton.tsx"],"sourcesContent":["import { PostResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport OpenLinkIcon from '@material-ui/icons/OpenInNew';\nimport { qetaApiRef } from '../../api.ts';\nimport { useApi } from '@backstage/core-plugin-api';\n\nexport const OpenLinkButton = (props: {\n entity: PostResponse;\n className?: string;\n style?: React.CSSProperties;\n}) => {\n const { entity, className, style } = props;\n const qetaApi = useApi(qetaApiRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n\n if (!entity.url) {\n return null;\n }\n\n const handleClick = (\n event: React.MouseEvent<HTMLAnchorElement, MouseEvent>,\n ) => {\n event.stopPropagation();\n event.preventDefault();\n qetaApi.clickLink(entity.id);\n window.open(entity.url, '_blank', 'noopener,noreferrer');\n };\n\n return (\n <Tooltip title={`${t('link.open')}: ${entity.url}`}>\n <IconButton\n component=\"a\"\n href={entity.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={t('link.open')}\n size=\"small\"\n onClick={handleClick}\n className={className}\n style={style}\n >\n <OpenLinkIcon />\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"OpenLinkButton.esm.js","sources":["../../../src/components/Buttons/OpenLinkButton.tsx"],"sourcesContent":["import { PostResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport OpenLinkIcon from '@material-ui/icons/OpenInNew';\nimport { qetaApiRef } from '../../api.ts';\nimport { useApi } from '@backstage/core-plugin-api';\n\nexport const OpenLinkButton = (props: {\n entity: PostResponse;\n className?: string;\n style?: React.CSSProperties;\n}) => {\n const { entity, className, style } = props;\n const qetaApi = useApi(qetaApiRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n\n if (!entity.url) {\n return null;\n }\n\n const handleClick = (\n event: React.MouseEvent<HTMLAnchorElement, MouseEvent>,\n ) => {\n event.stopPropagation();\n event.preventDefault();\n qetaApi.clickLink(entity.id);\n window.open(entity.url, '_blank', 'noopener,noreferrer');\n };\n\n return (\n <Tooltip title={`${t('link.open')}: ${entity.url}`}>\n <IconButton\n component=\"a\"\n href={entity.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={t('link.open')}\n size=\"small\"\n onClick={handleClick}\n className={className}\n style={style}\n >\n <OpenLinkIcon />\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAQO,MAAM,cAAA,GAAiB,CAAC,KAAA,KAIzB;AACJ,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,EAAW,KAAA,EAAM,GAAI,KAAA;AACrC,EAAA,MAAM,OAAA,GAAU,OAAO,UAAU,CAAA;AACjC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAA,IAAI,CAAC,OAAO,GAAA,EAAK;AACf,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAA,GAAc,CAClB,KAAA,KACG;AACH,IAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,IAAA,KAAA,CAAM,cAAA,EAAe;AACrB,IAAA,OAAA,CAAQ,SAAA,CAAU,OAAO,EAAE,CAAA;AAC3B,IAAA,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,GAAA,EAAK,QAAA,EAAU,qBAAqB,CAAA;AAAA,EACzD,CAAA;AAEA,EAAA,uBACE,GAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,WAAW,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,GAAG,CAAA,CAAA,EAC9C,QAAA,kBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,GAAA;AAAA,MACV,MAAM,MAAA,CAAO,GAAA;AAAA,MACb,MAAA,EAAO,QAAA;AAAA,MACP,GAAA,EAAI,qBAAA;AAAA,MACJ,YAAA,EAAY,EAAE,WAAW,CAAA;AAAA,MACzB,IAAA,EAAK,OAAA;AAAA,MACL,OAAA,EAAS,WAAA;AAAA,MACT,SAAA;AAAA,MACA,KAAA;AAAA,MAEA,8BAAC,YAAA,EAAA,EAAa;AAAA;AAAA,GAChB,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RankingButtons.esm.js","sources":["../../../src/components/Buttons/RankingButtons.tsx"],"sourcesContent":["import { IconButton, Tooltip, Box, makeStyles } from '@material-ui/core';\nimport VerticalAlignTopIcon from '@material-ui/icons/VerticalAlignTop';\nimport VerticalAlignBottomIcon from '@material-ui/icons/VerticalAlignBottom';\nimport KeyboardArrowUpIcon from '@material-ui/icons/KeyboardArrowUp';\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../../api';\n\nconst useStyles = makeStyles(theme => ({\n rankingControls: {\n display: 'flex',\n justifyContent: 'flex-end',\n gap: theme.spacing(0.5),\n },\n rankingButton: {\n padding: theme.spacing(0.5),\n },\n}));\n\nexport interface RankingButtonsProps {\n postId: number;\n collectionId: number | undefined;\n onRankUpdate?: () => void;\n}\n\nexport const RankingButtons = (props: RankingButtonsProps) => {\n const { postId, collectionId, onRankUpdate } = props;\n const classes = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n const qetaApi = useApi(qetaApiRef);\n\n if (!collectionId) {\n return null;\n }\n\n const rank = (direction: 'top' | 'bottom' | 'up' | 'down') => {\n qetaApi.rankPostInCollection(collectionId, postId, direction).then(res => {\n if (res) {\n onRankUpdate?.();\n }\n });\n };\n\n return (\n <Box className={classes.rankingControls}>\n <Tooltip title={t('ranking.top', {})}>\n <IconButton\n size=\"small\"\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n rank('top');\n }}\n className={classes.rankingButton}\n >\n <VerticalAlignTopIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Tooltip title={t('ranking.up', {})}>\n <IconButton\n size=\"small\"\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n rank('up');\n }}\n className={classes.rankingButton}\n >\n <KeyboardArrowUpIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Tooltip title={t('ranking.down', {})}>\n <IconButton\n size=\"small\"\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n rank('down');\n }}\n className={classes.rankingButton}\n >\n <KeyboardArrowDownIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Tooltip title={t('ranking.bottom', {})}>\n <IconButton\n size=\"small\"\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n rank('bottom');\n }}\n className={classes.rankingButton}\n >\n <VerticalAlignBottomIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAUA,MAAM,SAAA,GAAY,WAAW,
|
|
1
|
+
{"version":3,"file":"RankingButtons.esm.js","sources":["../../../src/components/Buttons/RankingButtons.tsx"],"sourcesContent":["import { IconButton, Tooltip, Box, makeStyles } from '@material-ui/core';\nimport VerticalAlignTopIcon from '@material-ui/icons/VerticalAlignTop';\nimport VerticalAlignBottomIcon from '@material-ui/icons/VerticalAlignBottom';\nimport KeyboardArrowUpIcon from '@material-ui/icons/KeyboardArrowUp';\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../../api';\n\nconst useStyles = makeStyles(theme => ({\n rankingControls: {\n display: 'flex',\n justifyContent: 'flex-end',\n gap: theme.spacing(0.5),\n },\n rankingButton: {\n padding: theme.spacing(0.5),\n },\n}));\n\nexport interface RankingButtonsProps {\n postId: number;\n collectionId: number | undefined;\n onRankUpdate?: () => void;\n}\n\nexport const RankingButtons = (props: RankingButtonsProps) => {\n const { postId, collectionId, onRankUpdate } = props;\n const classes = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n const qetaApi = useApi(qetaApiRef);\n\n if (!collectionId) {\n return null;\n }\n\n const rank = (direction: 'top' | 'bottom' | 'up' | 'down') => {\n qetaApi.rankPostInCollection(collectionId, postId, direction).then(res => {\n if (res) {\n onRankUpdate?.();\n }\n });\n };\n\n return (\n <Box className={classes.rankingControls}>\n <Tooltip title={t('ranking.top', {})}>\n <IconButton\n size=\"small\"\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n rank('top');\n }}\n className={classes.rankingButton}\n >\n <VerticalAlignTopIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Tooltip title={t('ranking.up', {})}>\n <IconButton\n size=\"small\"\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n rank('up');\n }}\n className={classes.rankingButton}\n >\n <KeyboardArrowUpIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Tooltip title={t('ranking.down', {})}>\n <IconButton\n size=\"small\"\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n rank('down');\n }}\n className={classes.rankingButton}\n >\n <KeyboardArrowDownIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Tooltip title={t('ranking.bottom', {})}>\n <IconButton\n size=\"small\"\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n rank('bottom');\n }}\n className={classes.rankingButton}\n >\n <VerticalAlignBottomIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TagFollowButton.esm.js","sources":["../../../src/components/Buttons/TagFollowButton.tsx"],"sourcesContent":["import NotificationsActive from '@material-ui/icons/NotificationsActive';\nimport NotificationsNone from '@material-ui/icons/NotificationsNone';\nimport { useTagsFollow } from '../../hooks';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nexport const TagFollowButton = (props: { tag: string }) => {\n const { tag } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const tags = useTagsFollow();\n if (tags.loading) {\n return null;\n }\n return (\n <Tooltip title={t('tagButton.tooltip')}>\n <IconButton\n disableRipple\n size=\"small\"\n color={tags.isFollowingTag(tag) ? 'secondary' : 'default'}\n onClick={() => {\n if (tags.isFollowingTag(tag)) {\n tags.unfollowTag(tag);\n } else {\n tags.followTag(tag);\n }\n }}\n >\n {tags.isFollowingTag(tag) ? (\n <NotificationsActive />\n ) : (\n <NotificationsNone />\n )}\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"TagFollowButton.esm.js","sources":["../../../src/components/Buttons/TagFollowButton.tsx"],"sourcesContent":["import NotificationsActive from '@material-ui/icons/NotificationsActive';\nimport NotificationsNone from '@material-ui/icons/NotificationsNone';\nimport { useTagsFollow } from '../../hooks';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nexport const TagFollowButton = (props: { tag: string }) => {\n const { tag } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const tags = useTagsFollow();\n if (tags.loading) {\n return null;\n }\n return (\n <Tooltip title={t('tagButton.tooltip')}>\n <IconButton\n disableRipple\n size=\"small\"\n color={tags.isFollowingTag(tag) ? 'secondary' : 'default'}\n onClick={() => {\n if (tags.isFollowingTag(tag)) {\n tags.unfollowTag(tag);\n } else {\n tags.followTag(tag);\n }\n }}\n >\n {tags.isFollowingTag(tag) ? (\n <NotificationsActive />\n ) : (\n <NotificationsNone />\n )}\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAOO,MAAM,eAAA,GAAkB,CAAC,KAAA,KAA2B;AACzD,EAAA,MAAM,EAAE,KAAI,GAAI,KAAA;AAChB,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,OAAO,aAAA,EAAc;AAC3B,EAAA,IAAI,KAAK,OAAA,EAAS;AAChB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,uBACE,GAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,mBAAmB,CAAA,EACnC,QAAA,kBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAa,IAAA;AAAA,MACb,IAAA,EAAK,OAAA;AAAA,MACL,KAAA,EAAO,IAAA,CAAK,cAAA,CAAe,GAAG,IAAI,WAAA,GAAc,SAAA;AAAA,MAChD,SAAS,MAAM;AACb,QAAA,IAAI,IAAA,CAAK,cAAA,CAAe,GAAG,CAAA,EAAG;AAC5B,UAAA,IAAA,CAAK,YAAY,GAAG,CAAA;AAAA,QACtB,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,UAAU,GAAG,CAAA;AAAA,QACpB;AAAA,MACF,CAAA;AAAA,MAEC,QAAA,EAAA,IAAA,CAAK,eAAe,GAAG,CAAA,uBACrB,mBAAA,EAAA,EAAoB,CAAA,uBAEpB,iBAAA,EAAA,EAAkB;AAAA;AAAA,GAEvB,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserFollowButton.esm.js","sources":["../../../src/components/Buttons/UserFollowButton.tsx"],"sourcesContent":["import { CSSProperties } from 'react';\nimport NotificationsActive from '@material-ui/icons/NotificationsActive';\nimport NotificationsNone from '@material-ui/icons/NotificationsNone';\nimport { useUserFollow } from '../../hooks';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const UserFollowButton = (props: {\n userRef: string;\n style?: CSSProperties;\n}) => {\n const { userRef, style } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const users = useUserFollow();\n if (users.loading) {\n return null;\n }\n\n return (\n <Tooltip title={t('userButton.tooltip')}>\n <IconButton\n disableRipple\n size=\"small\"\n color={users.isFollowingUser(userRef) ? 'secondary' : 'default'}\n onClick={() => {\n if (users.isFollowingUser(userRef)) {\n users.unfollowUser(userRef);\n } else {\n users.followUser(userRef);\n }\n }}\n style={style}\n >\n {users.isFollowingUser(userRef) ? (\n <NotificationsActive />\n ) : (\n <NotificationsNone />\n )}\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"UserFollowButton.esm.js","sources":["../../../src/components/Buttons/UserFollowButton.tsx"],"sourcesContent":["import { CSSProperties } from 'react';\nimport NotificationsActive from '@material-ui/icons/NotificationsActive';\nimport NotificationsNone from '@material-ui/icons/NotificationsNone';\nimport { useUserFollow } from '../../hooks';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const UserFollowButton = (props: {\n userRef: string;\n style?: CSSProperties;\n}) => {\n const { userRef, style } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const users = useUserFollow();\n if (users.loading) {\n return null;\n }\n\n return (\n <Tooltip title={t('userButton.tooltip')}>\n <IconButton\n disableRipple\n size=\"small\"\n color={users.isFollowingUser(userRef) ? 'secondary' : 'default'}\n onClick={() => {\n if (users.isFollowingUser(userRef)) {\n users.unfollowUser(userRef);\n } else {\n users.followUser(userRef);\n }\n }}\n style={style}\n >\n {users.isFollowingUser(userRef) ? (\n <NotificationsActive />\n ) : (\n <NotificationsNone />\n )}\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAQO,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAG3B;AACJ,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,KAAA;AAC3B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,QAAQ,aAAA,EAAc;AAC5B,EAAA,IAAI,MAAM,OAAA,EAAS;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,GAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,oBAAoB,CAAA,EACpC,QAAA,kBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAa,IAAA;AAAA,MACb,IAAA,EAAK,OAAA;AAAA,MACL,KAAA,EAAO,KAAA,CAAM,eAAA,CAAgB,OAAO,IAAI,WAAA,GAAc,SAAA;AAAA,MACtD,SAAS,MAAM;AACb,QAAA,IAAI,KAAA,CAAM,eAAA,CAAgB,OAAO,CAAA,EAAG;AAClC,UAAA,KAAA,CAAM,aAAa,OAAO,CAAA;AAAA,QAC5B,CAAA,MAAO;AACL,UAAA,KAAA,CAAM,WAAW,OAAO,CAAA;AAAA,QAC1B;AAAA,MACF,CAAA;AAAA,MACA,KAAA;AAAA,MAEC,QAAA,EAAA,KAAA,CAAM,gBAAgB,OAAO,CAAA,uBAC3B,mBAAA,EAAA,EAAoB,CAAA,uBAEpB,iBAAA,EAAA,EAAkB;AAAA;AAAA,GAEvB,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VoteButtons.esm.js","sources":["../../../src/components/Buttons/VoteButtons.tsx"],"sourcesContent":["import {\n AnswerResponse,\n PostResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport ArrowDownward from '@material-ui/icons/ArrowDownward';\nimport ArrowUpward from '@material-ui/icons/ArrowUpward';\nimport Check from '@material-ui/icons/Check';\nimport { Fragment } from 'react';\nimport { useVoting } from '../../hooks/useVoting';\nimport {\n Box,\n createStyles,\n IconButton,\n makeStyles,\n Theme,\n Tooltip,\n Typography,\n} from '@material-ui/core';\n\nexport type QetaVoteButtonsClassKey =\n | 'qetaCorrectAnswerSelected'\n | 'qetaCorrectAnswer'\n | 'voteButtonContainer';\n\nconst useStyles = makeStyles(\n (theme: Theme) =>\n createStyles({\n qetaCorrectAnswerSelected: {\n color: theme.palette.success.main,\n },\n qetaCorrectAnswer: {\n color: theme.palette.grey[500],\n },\n voteButtonContainer: {\n borderWidth: '1px',\n borderColor: 'white',\n },\n }),\n { name: 'QetaVoteButtons' },\n);\n\nexport const VoteButtons = (props: {\n entity: PostResponse | AnswerResponse;\n post?: PostResponse;\n}) => {\n const {\n voteUpTooltip,\n ownVote,\n voteUp,\n score,\n voteDownTooltip,\n voteDown,\n correctAnswer,\n correctTooltip,\n toggleCorrectAnswer,\n } = useVoting(props.entity);\n const own = props.entity.own ?? false;\n const classes = useStyles();\n\n const isDisabled = (isCorrectButton = false) => {\n // Check if parent post is obsolete (for answers)\n if (props.post?.status === 'obsolete') {\n return true;\n }\n if (isCorrectButton) {\n return 'status' in props.entity && props.entity.status !== 'active';\n }\n return (\n own ||\n ('status' in props.entity &&\n props.entity.status !== 'active' &&\n props.entity.status !== 'obsolete') ||\n ('status' in props.entity && props.entity.status === 'obsolete')\n );\n };\n\n const getVoteUpTooltip = () => {\n if (isDisabled()) {\n return '';\n }\n return voteUpTooltip;\n };\n\n const getVoteDownTooltip = () => {\n if (isDisabled()) {\n return '';\n }\n return voteDownTooltip;\n };\n\n const getCorrectTooltip = () => {\n if (isDisabled(true)) {\n return '';\n }\n return correctTooltip;\n };\n\n return (\n <Fragment>\n <Tooltip title={getVoteUpTooltip()}>\n <span>\n <IconButton\n aria-label=\"vote up\"\n color={ownVote > 0 ? 'primary' : 'default'}\n className={ownVote > 0 ? 'qetaVoteUpSelected' : 'qetaVoteUp'}\n disabled={isDisabled()}\n size=\"small\"\n data-testid={`vote-up-btn-${\n ownVote > 0 ? 'selected' : 'unselected'\n }`}\n onClick={voteUp}\n >\n <ArrowUpward />\n </IconButton>\n </span>\n </Tooltip>\n <Typography\n variant=\"h6\"\n style={{ userSelect: 'none' }}\n data-testid=\"vote-count\"\n >\n {score}\n </Typography>\n <Tooltip title={getVoteDownTooltip()}>\n <span>\n <IconButton\n aria-label=\"vote down\"\n color={ownVote < 0 ? 'primary' : 'default'}\n className={ownVote < 0 ? 'qetaVoteDownSelected' : 'qetaVoteDown'}\n disabled={isDisabled()}\n size=\"small\"\n data-testid={`vote-down-btn-${\n ownVote < 0 ? 'selected' : 'unselected'\n }`}\n onClick={voteDown}\n >\n <ArrowDownward />\n </IconButton>\n </span>\n </Tooltip>\n {'correct' in props.entity &&\n (props.post?.own || props.post?.canEdit || correctAnswer) && (\n <Box>\n <Tooltip title={getCorrectTooltip()}>\n <span>\n <IconButton\n aria-label=\"mark correct\"\n size=\"small\"\n disabled={isDisabled(true)}\n data-testid={`mark-correct-answer-btn-${\n correctAnswer ? 'checked' : 'unchecked'\n }`}\n onClick={\n props.post?.own || props.post?.canEdit\n ? toggleCorrectAnswer\n : undefined\n }\n >\n <Check\n className={\n correctAnswer\n ? classes.qetaCorrectAnswerSelected\n : classes.qetaCorrectAnswer\n }\n />\n </IconButton>\n </span>\n </Tooltip>\n </Box>\n )}\n </Fragment>\n );\n};\n"],"names":["Check"],"mappings":";;;;;;;;AAwBA,MAAM,
|
|
1
|
+
{"version":3,"file":"VoteButtons.esm.js","sources":["../../../src/components/Buttons/VoteButtons.tsx"],"sourcesContent":["import {\n AnswerResponse,\n PostResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport ArrowDownward from '@material-ui/icons/ArrowDownward';\nimport ArrowUpward from '@material-ui/icons/ArrowUpward';\nimport Check from '@material-ui/icons/Check';\nimport { Fragment } from 'react';\nimport { useVoting } from '../../hooks/useVoting';\nimport {\n Box,\n createStyles,\n IconButton,\n makeStyles,\n Theme,\n Tooltip,\n Typography,\n} from '@material-ui/core';\n\nexport type QetaVoteButtonsClassKey =\n | 'qetaCorrectAnswerSelected'\n | 'qetaCorrectAnswer'\n | 'voteButtonContainer';\n\nconst useStyles = makeStyles(\n (theme: Theme) =>\n createStyles({\n qetaCorrectAnswerSelected: {\n color: theme.palette.success.main,\n },\n qetaCorrectAnswer: {\n color: theme.palette.grey[500],\n },\n voteButtonContainer: {\n borderWidth: '1px',\n borderColor: 'white',\n },\n }),\n { name: 'QetaVoteButtons' },\n);\n\nexport const VoteButtons = (props: {\n entity: PostResponse | AnswerResponse;\n post?: PostResponse;\n}) => {\n const {\n voteUpTooltip,\n ownVote,\n voteUp,\n score,\n voteDownTooltip,\n voteDown,\n correctAnswer,\n correctTooltip,\n toggleCorrectAnswer,\n } = useVoting(props.entity);\n const own = props.entity.own ?? false;\n const classes = useStyles();\n\n const isDisabled = (isCorrectButton = false) => {\n // Check if parent post is obsolete (for answers)\n if (props.post?.status === 'obsolete') {\n return true;\n }\n if (isCorrectButton) {\n return 'status' in props.entity && props.entity.status !== 'active';\n }\n return (\n own ||\n ('status' in props.entity &&\n props.entity.status !== 'active' &&\n props.entity.status !== 'obsolete') ||\n ('status' in props.entity && props.entity.status === 'obsolete')\n );\n };\n\n const getVoteUpTooltip = () => {\n if (isDisabled()) {\n return '';\n }\n return voteUpTooltip;\n };\n\n const getVoteDownTooltip = () => {\n if (isDisabled()) {\n return '';\n }\n return voteDownTooltip;\n };\n\n const getCorrectTooltip = () => {\n if (isDisabled(true)) {\n return '';\n }\n return correctTooltip;\n };\n\n return (\n <Fragment>\n <Tooltip title={getVoteUpTooltip()}>\n <span>\n <IconButton\n aria-label=\"vote up\"\n color={ownVote > 0 ? 'primary' : 'default'}\n className={ownVote > 0 ? 'qetaVoteUpSelected' : 'qetaVoteUp'}\n disabled={isDisabled()}\n size=\"small\"\n data-testid={`vote-up-btn-${\n ownVote > 0 ? 'selected' : 'unselected'\n }`}\n onClick={voteUp}\n >\n <ArrowUpward />\n </IconButton>\n </span>\n </Tooltip>\n <Typography\n variant=\"h6\"\n style={{ userSelect: 'none' }}\n data-testid=\"vote-count\"\n >\n {score}\n </Typography>\n <Tooltip title={getVoteDownTooltip()}>\n <span>\n <IconButton\n aria-label=\"vote down\"\n color={ownVote < 0 ? 'primary' : 'default'}\n className={ownVote < 0 ? 'qetaVoteDownSelected' : 'qetaVoteDown'}\n disabled={isDisabled()}\n size=\"small\"\n data-testid={`vote-down-btn-${\n ownVote < 0 ? 'selected' : 'unselected'\n }`}\n onClick={voteDown}\n >\n <ArrowDownward />\n </IconButton>\n </span>\n </Tooltip>\n {'correct' in props.entity &&\n (props.post?.own || props.post?.canEdit || correctAnswer) && (\n <Box>\n <Tooltip title={getCorrectTooltip()}>\n <span>\n <IconButton\n aria-label=\"mark correct\"\n size=\"small\"\n disabled={isDisabled(true)}\n data-testid={`mark-correct-answer-btn-${\n correctAnswer ? 'checked' : 'unchecked'\n }`}\n onClick={\n props.post?.own || props.post?.canEdit\n ? toggleCorrectAnswer\n : undefined\n }\n >\n <Check\n className={\n correctAnswer\n ? classes.qetaCorrectAnswerSelected\n : classes.qetaCorrectAnswer\n }\n />\n </IconButton>\n </span>\n </Tooltip>\n </Box>\n )}\n </Fragment>\n );\n};\n"],"names":["Check"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WriteArticleButton.esm.js","sources":["../../../src/components/Buttons/WriteArticleButton.tsx"],"sourcesContent":["import CreateIcon from '@material-ui/icons/Create';\nimport { qetaCreatePostPermission } from '@drodil/backstage-plugin-qeta-common';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { writeRouteRef } from '../../routes';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { OptionalRequirePermission } from '../Utility/OptionalRequirePermission';\nimport { ContentHeaderButton } from './ContentHeaderButton';\n\nexport const WriteArticleButton = (props: {\n entity?: string;\n tags?: string[];\n entityPage?: boolean;\n}) => {\n const { entity, entityPage, tags } = props;\n const writeRoute = useRouteRef(writeRouteRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const params = new URLSearchParams();\n if (entity) {\n params.set('entity', entity);\n }\n if (entityPage) {\n params.set('entityPage', 'true');\n }\n if (tags && tags.length > 0) {\n params.set('tags', tags.join(','));\n }\n\n return (\n <OptionalRequirePermission\n permission={qetaCreatePostPermission}\n errorPage={<></>}\n >\n <ContentHeaderButton\n to={\n entity || tags ? `${writeRoute()}?${params.toString()}` : writeRoute()\n }\n color=\"primary\"\n icon={<CreateIcon />}\n >\n {t('writeArticleButton.title')}\n </ContentHeaderButton>\n </OptionalRequirePermission>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"WriteArticleButton.esm.js","sources":["../../../src/components/Buttons/WriteArticleButton.tsx"],"sourcesContent":["import CreateIcon from '@material-ui/icons/Create';\nimport { qetaCreatePostPermission } from '@drodil/backstage-plugin-qeta-common';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { writeRouteRef } from '../../routes';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { OptionalRequirePermission } from '../Utility/OptionalRequirePermission';\nimport { ContentHeaderButton } from './ContentHeaderButton';\n\nexport const WriteArticleButton = (props: {\n entity?: string;\n tags?: string[];\n entityPage?: boolean;\n}) => {\n const { entity, entityPage, tags } = props;\n const writeRoute = useRouteRef(writeRouteRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const params = new URLSearchParams();\n if (entity) {\n params.set('entity', entity);\n }\n if (entityPage) {\n params.set('entityPage', 'true');\n }\n if (tags && tags.length > 0) {\n params.set('tags', tags.join(','));\n }\n\n return (\n <OptionalRequirePermission\n permission={qetaCreatePostPermission}\n errorPage={<></>}\n >\n <ContentHeaderButton\n to={\n entity || tags ? `${writeRoute()}?${params.toString()}` : writeRoute()\n }\n color=\"primary\"\n icon={<CreateIcon />}\n >\n {t('writeArticleButton.title')}\n </ContentHeaderButton>\n </OptionalRequirePermission>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AASO,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAI7B;AACJ,EAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAY,IAAA,EAAK,GAAI,KAAA;AACrC,EAAA,MAAM,UAAA,GAAa,YAAY,aAAa,CAAA;AAC5C,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAA,CAAO,GAAA,CAAI,UAAU,MAAM,CAAA;AAAA,EAC7B;AACA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAA,CAAO,GAAA,CAAI,cAAc,MAAM,CAAA;AAAA,EACjC;AACA,EAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AAC3B,IAAA,MAAA,CAAO,GAAA,CAAI,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EACnC;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,yBAAA;AAAA,IAAA;AAAA,MACC,UAAA,EAAY,wBAAA;AAAA,MACZ,2BAAW,GAAA,CAAA,QAAA,EAAA,EAAE,CAAA;AAAA,MAEb,QAAA,kBAAA,GAAA;AAAA,QAAC,mBAAA;AAAA,QAAA;AAAA,UACC,EAAA,EACE,MAAA,IAAU,IAAA,GAAO,CAAA,EAAG,UAAA,EAAY,CAAA,CAAA,EAAI,MAAA,CAAO,QAAA,EAAU,CAAA,CAAA,GAAK,UAAA,EAAW;AAAA,UAEvE,KAAA,EAAM,SAAA;AAAA,UACN,IAAA,sBAAO,UAAA,EAAA,EAAW,CAAA;AAAA,UAEjB,YAAE,0BAA0B;AAAA;AAAA;AAC/B;AAAA,GACF;AAEJ;;;;"}
|