@drodil/backstage-plugin-qeta 3.29.0 → 3.29.1
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/components/QetaSearchResultListItem/QetaSearchResultListItem.esm.js +1 -2
- package/dist/components/QetaSearchResultListItem/QetaSearchResultListItem.esm.js.map +1 -1
- package/dist/components/UserPage/UserPage.esm.js +0 -1
- package/dist/components/UserPage/UserPage.esm.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QetaSearchResultListItem.esm.js","sources":["../../../src/components/QetaSearchResultListItem/QetaSearchResultListItem.tsx"],"sourcesContent":["import { DateTime } from 'luxon';\nimport { Link } from '@backstage/core-components';\nimport {\n IndexableDocument,\n ResultHighlight,\n} from '@backstage/plugin-search-common';\nimport { HighlightedSearchResultText } from '@backstage/plugin-search-react';\nimport CollectionsBookmarkIcon from '@material-ui/icons/CollectionsBookmark';\nimport {\n Divider,\n ListItem,\n ListItemIcon,\n ListItemText,\n makeStyles,\n} from '@material-ui/core';\nimport {\n QetaCollectionDocument,\n QetaPostDocument,\n QetaSearchDocument,\n removeMarkdownFormatting,\n truncate,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport HelpOutlined from '@material-ui/icons/HelpOutlined';\nimport PlaylistPlay from '@material-ui/icons/PlaylistPlay';\nimport DOMPurify from 'dompurify';\nimport { capitalize } from 'lodash';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '@drodil/backstage-plugin-qeta-react';\n\nconst useStyles = makeStyles({\n excerptText: {\n display: 'block',\n marginTop: '0.2rem',\n marginBottom: '0.4rem',\n fontSize: '0.8rem',\n },\n excerpt: {\n lineHeight: '1.55',\n },\n itemText: {\n wordBreak: 'break-all',\n },\n});\n\nexport type QetaSearchResultListItemProps = {\n result?: IndexableDocument;\n highlight?: ResultHighlight;\n rank?: number;\n hideIcon?: boolean;\n};\n\nconst isQetaSearchDocument = (\n document: IndexableDocument,\n): document is QetaSearchDocument => {\n return (\n 'docType' in document &&\n (document.docType === 'qeta_post' || document.docType === 'qeta_collection')\n );\n};\n\nconst isQetaPostDocument = (\n document: QetaSearchDocument,\n): document is QetaPostDocument => {\n return document.docType === 'qeta_post';\n};\n\nconst isQetaCollectionDocument = (\n document: QetaSearchDocument,\n): document is QetaCollectionDocument => {\n return document.docType === 'qeta_collection';\n};\n\nconst Excerpt = (props: {\n document: QetaSearchDocument;\n highlight?: ResultHighlight;\n}) => {\n const { document, highlight } = props;\n const classes = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const text = DOMPurify.sanitize(\n truncate(\n removeMarkdownFormatting(highlight?.fields.text ?? document.text),\n 300,\n ),\n );\n if (isQetaPostDocument(document)) {\n return (\n <>\n <span className={classes.excerptText}>\n {capitalize(t(`common.${document.postType}`))}\n {' · '}\n {t('searchResult.created')}{' '}\n {DateTime.fromISO(document.created.toString() as string).toRelative()}\n {' · '}\n <EntityRefLink entityRef={document.author} hideIcon />\n {' · '}\n {t('common.score', { score: document.score.toString(10) })}\n {' · '}\n {t('common.viewsShort', { count: document.views })}\n {' · '}\n {t('common.answersCount', { count: document.answerCount })}\n </span>\n <>\n {highlight?.fields.text ? (\n <HighlightedSearchResultText\n text={text}\n preTag={highlight.preTag}\n postTag={highlight.postTag}\n />\n ) : (\n text\n )}\n </>\n </>\n );\n } else if (isQetaCollectionDocument(document)) {\n return (\n <>\n <span className={classes.excerptText}>\n {capitalize(t(`common.collection`))}\n {' · '}\n {t('searchResult.created')}{' '}\n {DateTime.fromISO(document.created.toString() as string).toRelative()}\n {' · '}\n <EntityRefLink entityRef={document.owner} hideIcon />\n {' · '}\n {t('common.posts', {\n count: document.postsCount,\n itemType: t('common.post'),\n })}\n </span>\n <>\n {highlight?.fields.text ? (\n <HighlightedSearchResultText\n text={text}\n preTag={highlight.preTag}\n postTag={highlight.postTag}\n />\n ) : (\n text\n )}\n </>\n </>\n );\n }\n\n return null;\n};\n\nconst ResultIcon = (props: { document: QetaSearchDocument }) => {\n const { document } = props;\n if (isQetaPostDocument(document)) {\n if (document.postType === 'article') {\n return <CollectionsBookmarkIcon />;\n }\n return <HelpOutlined />;\n }\n\n return <PlaylistPlay />;\n};\n\nexport const QetaSearchResultListItem = (\n props: QetaSearchResultListItemProps,\n) => {\n const classes = useStyles();\n const { result, highlight, hideIcon } = props;\n\n if (!result || !isQetaSearchDocument(result)) {\n return null;\n }\n\n const title = (\n <Link noTrack to={result.location}>\n {highlight?.fields.title ? (\n <HighlightedSearchResultText\n text={highlight.fields.title}\n preTag={highlight.preTag}\n postTag={highlight.postTag}\n />\n ) : (\n result.title\n )}\n </Link>\n );\n\n return (\n <>\n <ListItem\n alignItems=\"center\"\n role=\"article\"\n aria-labelledby={`search-result-${result.title}`}\n >\n {hideIcon !== true && (\n <ListItemIcon>\n <ResultIcon document={result} aria-hidden=\"true\" />\n </ListItemIcon>\n )}\n <ListItemText\n primary={title}\n secondary={<Excerpt document={result} highlight={highlight} />}\n className={classes.itemText}\n primaryTypographyProps={{\n variant: 'h6',\n id: `search-result-${result.title}`,\n component: 'h3',\n }}\n />\n </ListItem>\n\n <Divider component=\"li\" aria-hidden=\"true\" />\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QetaSearchResultListItem.esm.js","sources":["../../../src/components/QetaSearchResultListItem/QetaSearchResultListItem.tsx"],"sourcesContent":["import { DateTime } from 'luxon';\nimport { Link } from '@backstage/core-components';\nimport {\n IndexableDocument,\n ResultHighlight,\n} from '@backstage/plugin-search-common';\nimport { HighlightedSearchResultText } from '@backstage/plugin-search-react';\nimport CollectionsBookmarkIcon from '@material-ui/icons/CollectionsBookmark';\nimport {\n Divider,\n ListItem,\n ListItemIcon,\n ListItemText,\n makeStyles,\n} from '@material-ui/core';\nimport {\n QetaCollectionDocument,\n QetaPostDocument,\n QetaSearchDocument,\n removeMarkdownFormatting,\n truncate,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport HelpOutlined from '@material-ui/icons/HelpOutlined';\nimport PlaylistPlay from '@material-ui/icons/PlaylistPlay';\nimport DOMPurify from 'dompurify';\nimport { capitalize } from 'lodash';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '@drodil/backstage-plugin-qeta-react';\n\nconst useStyles = makeStyles({\n excerptText: {\n display: 'block',\n marginTop: '0.2rem',\n marginBottom: '0.4rem',\n },\n excerpt: {\n lineHeight: '1.55',\n },\n itemText: {\n wordBreak: 'break-all',\n },\n});\n\nexport type QetaSearchResultListItemProps = {\n result?: IndexableDocument;\n highlight?: ResultHighlight;\n rank?: number;\n hideIcon?: boolean;\n};\n\nconst isQetaSearchDocument = (\n document: IndexableDocument,\n): document is QetaSearchDocument => {\n return (\n 'docType' in document &&\n (document.docType === 'qeta_post' || document.docType === 'qeta_collection')\n );\n};\n\nconst isQetaPostDocument = (\n document: QetaSearchDocument,\n): document is QetaPostDocument => {\n return document.docType === 'qeta_post';\n};\n\nconst isQetaCollectionDocument = (\n document: QetaSearchDocument,\n): document is QetaCollectionDocument => {\n return document.docType === 'qeta_collection';\n};\n\nconst Excerpt = (props: {\n document: QetaSearchDocument;\n highlight?: ResultHighlight;\n}) => {\n const { document, highlight } = props;\n const classes = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const text = DOMPurify.sanitize(\n truncate(\n removeMarkdownFormatting(highlight?.fields.text ?? document.text),\n 300,\n ),\n );\n if (isQetaPostDocument(document)) {\n return (\n <>\n <span className={classes.excerptText}>\n {capitalize(t(`common.${document.postType}`))}\n {' · '}\n {t('searchResult.created')}{' '}\n {DateTime.fromISO(document.created.toString() as string).toRelative()}\n {' · '}\n <EntityRefLink entityRef={document.author} hideIcon />\n {' · '}\n {t('common.score', { score: document.score.toString(10) })}\n {' · '}\n {t('common.viewsShort', { count: document.views })}\n {' · '}\n {t('common.answersCount', { count: document.answerCount })}\n </span>\n <>\n {highlight?.fields.text ? (\n <HighlightedSearchResultText\n text={text}\n preTag={highlight.preTag}\n postTag={highlight.postTag}\n />\n ) : (\n text\n )}\n </>\n </>\n );\n } else if (isQetaCollectionDocument(document)) {\n return (\n <>\n <span className={classes.excerptText}>\n {capitalize(t(`common.collection`))}\n {' · '}\n {t('searchResult.created')}{' '}\n {DateTime.fromISO(document.created.toString() as string).toRelative()}\n {' · '}\n <EntityRefLink entityRef={document.owner} hideIcon />\n {' · '}\n {t('common.posts', {\n count: document.postsCount,\n itemType: t('common.post'),\n })}\n </span>\n <>\n {highlight?.fields.text ? (\n <HighlightedSearchResultText\n text={text}\n preTag={highlight.preTag}\n postTag={highlight.postTag}\n />\n ) : (\n text\n )}\n </>\n </>\n );\n }\n\n return null;\n};\n\nconst ResultIcon = (props: { document: QetaSearchDocument }) => {\n const { document } = props;\n if (isQetaPostDocument(document)) {\n if (document.postType === 'article') {\n return <CollectionsBookmarkIcon />;\n }\n return <HelpOutlined />;\n }\n\n return <PlaylistPlay />;\n};\n\nexport const QetaSearchResultListItem = (\n props: QetaSearchResultListItemProps,\n) => {\n const classes = useStyles();\n const { result, highlight, hideIcon } = props;\n\n if (!result || !isQetaSearchDocument(result)) {\n return null;\n }\n\n const title = (\n <Link noTrack to={result.location}>\n {highlight?.fields.title ? (\n <HighlightedSearchResultText\n text={highlight.fields.title}\n preTag={highlight.preTag}\n postTag={highlight.postTag}\n />\n ) : (\n result.title\n )}\n </Link>\n );\n\n return (\n <>\n <ListItem\n alignItems=\"center\"\n role=\"article\"\n aria-labelledby={`search-result-${result.title}`}\n >\n {hideIcon !== true && (\n <ListItemIcon>\n <ResultIcon document={result} aria-hidden=\"true\" />\n </ListItemIcon>\n )}\n <ListItemText\n primary={title}\n secondary={<Excerpt document={result} highlight={highlight} />}\n className={classes.itemText}\n primaryTypographyProps={{\n variant: 'h6',\n id: `search-result-${result.title}`,\n component: 'h3',\n }}\n />\n </ListItem>\n\n <Divider component=\"li\" aria-hidden=\"true\" />\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserPage.esm.js","sources":["../../../src/components/UserPage/UserPage.tsx"],"sourcesContent":["import { ChangeEvent, useState } from 'react';\nimport { ContentHeader } from '@backstage/core-components';\nimport { useParams, useSearchParams } from 'react-router-dom';\nimport {\n AnswersContainer,\n AskQuestionButton,\n ButtonContainer,\n CollectionsGrid,\n PostsContainer,\n PostsGrid,\n qetaTranslationRef,\n useIdentityApi,\n UserFollowButton,\n useUserInfo,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { UserStatsContent } from './UserStatsContent';\nimport { TabContext, TabList, TabPanel } from '@material-ui/lab';\nimport {\n Avatar,\n Box,\n Tab,\n Typography,\n Tooltip,\n makeStyles,\n} from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport AssessmentIcon from '@material-ui/icons/Assessment';\nimport HelpOutlineIcon from '@material-ui/icons/HelpOutline';\nimport CollectionsBookmarkIcon from '@material-ui/icons/CollectionsBookmark';\nimport CollectionsIcon from '@material-ui/icons/Collections';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\n\nconst useStyles = makeStyles(theme => ({\n tabIcon: {\n fontSize: '1.2rem',\n marginRight: theme.spacing(1),\n },\n tabPanel: {\n padding: theme.spacing(3),\n },\n avatar: {\n width: theme.spacing(6),\n height: theme.spacing(6),\n marginRight: theme.spacing(2),\n },\n headerContent: {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(2),\n },\n tabList: {},\n tabLabel: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n minWidth: 0,\n },\n}));\n\nexport const UserPage = () => {\n const identity = useParams()['*'] ?? 'unknown';\n const { name, initials, user, secondaryTitle } = useUserInfo(identity);\n const [tab, setTab] = useState('statistics');\n const { t } = useTranslationRef(qetaTranslationRef);\n const [_searchParams, setSearchParams] = useSearchParams();\n const classes = useStyles();\n const {\n value: currentUser,\n loading: loadingUser,\n error: userError,\n } = useIdentityApi(api => api.getBackstageIdentity(), []);\n\n const handleChange = (_event: ChangeEvent<{}>, newValue: string) => {\n setSearchParams({});\n setTab(newValue);\n };\n\n const TabLabel = ({\n icon,\n label,\n }: {\n icon: React.ReactNode;\n label: string;\n }) => (\n <div className={classes.tabLabel}>\n {icon}\n <span>{label}</span>\n </div>\n );\n\n const title = (\n <Box\n className={classes.headerContent}\n role=\"banner\"\n aria-label={t('userPage.profileHeader')}\n >\n <Avatar\n src={user?.spec?.profile?.picture}\n alt={name}\n variant=\"rounded\"\n className={classes.avatar}\n aria-label={t('userPage.profilePicture', { name })}\n >\n {initials}\n </Avatar>\n <Box>\n <Tooltip title={secondaryTitle || ''} arrow>\n <Typography variant=\"h5\" component=\"h2\" id=\"user-name\">\n {name}\n </Typography>\n </Tooltip>\n {!loadingUser &&\n !userError &&\n currentUser?.userEntityRef !== identity && (\n <UserFollowButton\n userRef={identity}\n style={{ marginLeft: '0.5em' }}\n aria-label={t('userPage.followUser', { name })}\n />\n )}\n </Box>\n </Box>\n );\n\n return (\n <>\n <ContentHeader titleComponent={title}>\n <ButtonContainer>\n <AskQuestionButton />\n <WriteArticleButton />\n </ButtonContainer>\n </ContentHeader>\n <TabContext value={tab}>\n <Box className={classes.tabList}>\n <TabList\n onChange={handleChange}\n aria-label={t('userPage.profileTab')}\n aria-labelledby=\"user-name\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n <Tab\n value=\"statistics\"\n label={\n <TabLabel\n icon={<AssessmentIcon className={classes.tabIcon} />}\n label={t('userPage.statistics')}\n />\n }\n />\n <Tab\n value=\"questions\"\n label={\n <TabLabel\n icon={<HelpOutlineIcon className={classes.tabIcon} />}\n label={t('userPage.questions')}\n />\n }\n />\n <Tab\n value=\"articles\"\n label={\n <TabLabel\n icon={<CollectionsBookmarkIcon className={classes.tabIcon} />}\n label={t('userPage.articles')}\n />\n }\n />\n <Tab\n value=\"collections\"\n label={\n <TabLabel\n icon={<CollectionsIcon className={classes.tabIcon} />}\n label={t('userPage.collections')}\n />\n }\n />\n <Tab\n value=\"answers\"\n label={\n <TabLabel\n icon={<QuestionAnswerIcon className={classes.tabIcon} />}\n label={t('userPage.answers')}\n />\n }\n />\n </TabList>\n </Box>\n <TabPanel value=\"statistics\" className={classes.tabPanel}>\n <UserStatsContent userRef={identity ?? ''} />\n </TabPanel>\n <TabPanel value=\"questions\" className={classes.tabPanel}>\n <PostsContainer\n author={identity ?? ''}\n showNoQuestionsBtn={false}\n type=\"question\"\n />\n </TabPanel>\n <TabPanel value=\"articles\" className={classes.tabPanel}>\n <PostsGrid\n author={identity ?? ''}\n type=\"article\"\n showNoQuestionsBtn={false}\n />\n </TabPanel>\n <TabPanel value=\"collections\" className={classes.tabPanel}>\n <CollectionsGrid owner={identity ?? ''} />\n </TabPanel>\n <TabPanel value=\"answers\" className={classes.tabPanel}>\n <AnswersContainer\n author={identity ?? ''}\n title={t('userPage.answers')}\n />\n </TabPanel>\n </TabContext>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UserPage.esm.js","sources":["../../../src/components/UserPage/UserPage.tsx"],"sourcesContent":["import { ChangeEvent, useState } from 'react';\nimport { ContentHeader } from '@backstage/core-components';\nimport { useParams, useSearchParams } from 'react-router-dom';\nimport {\n AnswersContainer,\n AskQuestionButton,\n ButtonContainer,\n CollectionsGrid,\n PostsContainer,\n PostsGrid,\n qetaTranslationRef,\n useIdentityApi,\n UserFollowButton,\n useUserInfo,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { UserStatsContent } from './UserStatsContent';\nimport { TabContext, TabList, TabPanel } from '@material-ui/lab';\nimport {\n Avatar,\n Box,\n makeStyles,\n Tab,\n Tooltip,\n Typography,\n} from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport AssessmentIcon from '@material-ui/icons/Assessment';\nimport HelpOutlineIcon from '@material-ui/icons/HelpOutline';\nimport CollectionsBookmarkIcon from '@material-ui/icons/CollectionsBookmark';\nimport CollectionsIcon from '@material-ui/icons/Collections';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\n\nconst useStyles = makeStyles(theme => ({\n tabIcon: {\n marginRight: theme.spacing(1),\n },\n tabPanel: {\n padding: theme.spacing(3),\n },\n avatar: {\n width: theme.spacing(6),\n height: theme.spacing(6),\n marginRight: theme.spacing(2),\n },\n headerContent: {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(2),\n },\n tabList: {},\n tabLabel: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n minWidth: 0,\n },\n}));\n\nexport const UserPage = () => {\n const identity = useParams()['*'] ?? 'unknown';\n const { name, initials, user, secondaryTitle } = useUserInfo(identity);\n const [tab, setTab] = useState('statistics');\n const { t } = useTranslationRef(qetaTranslationRef);\n const [_searchParams, setSearchParams] = useSearchParams();\n const classes = useStyles();\n const {\n value: currentUser,\n loading: loadingUser,\n error: userError,\n } = useIdentityApi(api => api.getBackstageIdentity(), []);\n\n const handleChange = (_event: ChangeEvent<{}>, newValue: string) => {\n setSearchParams({});\n setTab(newValue);\n };\n\n const TabLabel = ({\n icon,\n label,\n }: {\n icon: React.ReactNode;\n label: string;\n }) => (\n <div className={classes.tabLabel}>\n {icon}\n <span>{label}</span>\n </div>\n );\n\n const title = (\n <Box\n className={classes.headerContent}\n role=\"banner\"\n aria-label={t('userPage.profileHeader')}\n >\n <Avatar\n src={user?.spec?.profile?.picture}\n alt={name}\n variant=\"rounded\"\n className={classes.avatar}\n aria-label={t('userPage.profilePicture', { name })}\n >\n {initials}\n </Avatar>\n <Box>\n <Tooltip title={secondaryTitle || ''} arrow>\n <Typography variant=\"h5\" component=\"h2\" id=\"user-name\">\n {name}\n </Typography>\n </Tooltip>\n {!loadingUser &&\n !userError &&\n currentUser?.userEntityRef !== identity && (\n <UserFollowButton\n userRef={identity}\n style={{ marginLeft: '0.5em' }}\n aria-label={t('userPage.followUser', { name })}\n />\n )}\n </Box>\n </Box>\n );\n\n return (\n <>\n <ContentHeader titleComponent={title}>\n <ButtonContainer>\n <AskQuestionButton />\n <WriteArticleButton />\n </ButtonContainer>\n </ContentHeader>\n <TabContext value={tab}>\n <Box className={classes.tabList}>\n <TabList\n onChange={handleChange}\n aria-label={t('userPage.profileTab')}\n aria-labelledby=\"user-name\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n <Tab\n value=\"statistics\"\n label={\n <TabLabel\n icon={<AssessmentIcon className={classes.tabIcon} />}\n label={t('userPage.statistics')}\n />\n }\n />\n <Tab\n value=\"questions\"\n label={\n <TabLabel\n icon={<HelpOutlineIcon className={classes.tabIcon} />}\n label={t('userPage.questions')}\n />\n }\n />\n <Tab\n value=\"articles\"\n label={\n <TabLabel\n icon={<CollectionsBookmarkIcon className={classes.tabIcon} />}\n label={t('userPage.articles')}\n />\n }\n />\n <Tab\n value=\"collections\"\n label={\n <TabLabel\n icon={<CollectionsIcon className={classes.tabIcon} />}\n label={t('userPage.collections')}\n />\n }\n />\n <Tab\n value=\"answers\"\n label={\n <TabLabel\n icon={<QuestionAnswerIcon className={classes.tabIcon} />}\n label={t('userPage.answers')}\n />\n }\n />\n </TabList>\n </Box>\n <TabPanel value=\"statistics\" className={classes.tabPanel}>\n <UserStatsContent userRef={identity ?? ''} />\n </TabPanel>\n <TabPanel value=\"questions\" className={classes.tabPanel}>\n <PostsContainer\n author={identity ?? ''}\n showNoQuestionsBtn={false}\n type=\"question\"\n />\n </TabPanel>\n <TabPanel value=\"articles\" className={classes.tabPanel}>\n <PostsGrid\n author={identity ?? ''}\n type=\"article\"\n showNoQuestionsBtn={false}\n />\n </TabPanel>\n <TabPanel value=\"collections\" className={classes.tabPanel}>\n <CollectionsGrid owner={identity ?? ''} />\n </TabPanel>\n <TabPanel value=\"answers\" className={classes.tabPanel}>\n <AnswersContainer\n author={identity ?? ''}\n title={t('userPage.answers')}\n />\n </TabPanel>\n </TabContext>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"frontend",
|
|
8
8
|
"backstage.io"
|
|
9
9
|
],
|
|
10
|
-
"version": "3.29.
|
|
10
|
+
"version": "3.29.1",
|
|
11
11
|
"main": "dist/index.esm.js",
|
|
12
12
|
"types": "dist/index.d.ts",
|
|
13
13
|
"prepublishOnly": "yarn tsc && yarn build",
|
|
@@ -56,8 +56,8 @@
|
|
|
56
56
|
"@backstage/plugin-search-common": "^1.2.18",
|
|
57
57
|
"@backstage/plugin-search-react": "^1.9.0",
|
|
58
58
|
"@backstage/plugin-signals-react": "^0.0.13",
|
|
59
|
-
"@drodil/backstage-plugin-qeta-common": "^3.29.
|
|
60
|
-
"@drodil/backstage-plugin-qeta-react": "^3.29.
|
|
59
|
+
"@drodil/backstage-plugin-qeta-common": "^3.29.1",
|
|
60
|
+
"@drodil/backstage-plugin-qeta-react": "^3.29.1",
|
|
61
61
|
"@material-ui/core": "^4.12.2",
|
|
62
62
|
"@material-ui/icons": "^4.11.3",
|
|
63
63
|
"@material-ui/lab": "4.0.0-alpha.61",
|