@drodil/backstage-plugin-qeta 3.57.0 → 3.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/components/ArticlePage/ArticlePage.esm.js +2 -1
  2. package/dist/components/ArticlePage/ArticlePage.esm.js.map +1 -1
  3. package/dist/components/CollectionPage/CollectionPage.esm.js +4 -10
  4. package/dist/components/CollectionPage/CollectionPage.esm.js.map +1 -1
  5. package/dist/components/EntityPage/EntityPage.esm.js +9 -11
  6. package/dist/components/EntityPage/EntityPage.esm.js.map +1 -1
  7. package/dist/components/HomePage/HomePage.esm.js +56 -6
  8. package/dist/components/HomePage/HomePage.esm.js.map +1 -1
  9. package/dist/components/LinkPage/LinkPage.esm.js +2 -1
  10. package/dist/components/LinkPage/LinkPage.esm.js.map +1 -1
  11. package/dist/components/QetaPage/QetaPage.esm.js +15 -9
  12. package/dist/components/QetaPage/QetaPage.esm.js.map +1 -1
  13. package/dist/components/QuestionPage/QuestionPage.esm.js +2 -1
  14. package/dist/components/QuestionPage/QuestionPage.esm.js.map +1 -1
  15. package/dist/components/RightContent/HomeRightContent.esm.js +36 -9
  16. package/dist/components/RightContent/HomeRightContent.esm.js.map +1 -1
  17. package/dist/components/RightContent/LinkedPosts.esm.js +46 -0
  18. package/dist/components/RightContent/LinkedPosts.esm.js.map +1 -0
  19. package/dist/components/RightContent/PostRightContent.esm.js +2 -0
  20. package/dist/components/RightContent/PostRightContent.esm.js.map +1 -1
  21. package/dist/components/RightContent/RightContent.esm.js +5 -2
  22. package/dist/components/RightContent/RightContent.esm.js.map +1 -1
  23. package/dist/components/RightContent/SimilarQuestions.esm.js +18 -2
  24. package/dist/components/RightContent/SimilarQuestions.esm.js.map +1 -1
  25. package/dist/components/TagPage/TagPage.esm.js +2 -4
  26. package/dist/components/TagPage/TagPage.esm.js.map +1 -1
  27. package/dist/components/UserPage/UserPage.esm.js +37 -23
  28. package/dist/components/UserPage/UserPage.esm.js.map +1 -1
  29. package/dist/components/UserPage/UserStatsContent.esm.js +15 -5
  30. package/dist/components/UserPage/UserStatsContent.esm.js.map +1 -1
  31. package/dist/package.json.esm.js +1 -1
  32. package/package.json +3 -3
@@ -3,7 +3,7 @@ import { useParams } from 'react-router-dom';
3
3
  import { useState, useEffect } from 'react';
4
4
  import { useSignal } from '@backstage/plugin-signals-react';
5
5
  import { WarningPanel } from '@backstage/core-components';
6
- import { qetaTranslationRef, useQetaApi, ContentHeader, WriteArticleButton, AddToCollectionButton, AIAnswerCard, ArticleContent } from '@drodil/backstage-plugin-qeta-react';
6
+ import { qetaTranslationRef, useQetaApi, ContentHeader, FollowPostButton, WriteArticleButton, AddToCollectionButton, AIAnswerCard, ArticleContent } from '@drodil/backstage-plugin-qeta-react';
7
7
  import { Container } from '@material-ui/core';
8
8
  import { Skeleton } from '@material-ui/lab';
9
9
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
@@ -45,6 +45,7 @@ const ArticlePage = () => {
45
45
  title: post.title,
46
46
  titleIcon: /* @__PURE__ */ jsx(LibraryBooksOutlined, { fontSize: "large" }),
47
47
  children: [
48
+ /* @__PURE__ */ jsx(FollowPostButton, { post }),
48
49
  /* @__PURE__ */ jsx(WriteArticleButton, {}),
49
50
  /* @__PURE__ */ jsx(AddToCollectionButton, { post })
50
51
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"ArticlePage.esm.js","sources":["../../../src/components/ArticlePage/ArticlePage.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\nimport { useEffect, useState } from 'react';\nimport { useSignal } from '@backstage/plugin-signals-react';\nimport { WarningPanel } from '@backstage/core-components';\nimport { Article, QetaSignal } from '@drodil/backstage-plugin-qeta-common';\nimport {\n AddToCollectionButton,\n AIAnswerCard,\n ArticleContent,\n ContentHeader,\n qetaTranslationRef,\n useQetaApi,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Container } from '@material-ui/core';\nimport { Skeleton } from '@material-ui/lab';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport LibraryBooksOutlined from '@material-ui/icons/LibraryBooksOutlined';\n\nexport const ArticlePage = () => {\n const { id } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const [views, setViews] = useState(0);\n\n const { lastSignal } = useSignal<QetaSignal>(`qeta:post_${id}`);\n\n const {\n value: post,\n loading,\n error,\n } = useQetaApi(api => api.getPost(id), [id]);\n\n useEffect(() => {\n if (post) {\n setViews(post.views);\n }\n }, [post]);\n\n useEffect(() => {\n if (lastSignal?.type === 'post_stats') {\n setViews(lastSignal.views);\n }\n }, [lastSignal]);\n\n if (loading) {\n return <Skeleton variant=\"rect\" height={200} />;\n }\n\n if (error || post === undefined) {\n return (\n <WarningPanel severity=\"error\" title={t('articlePage.errorLoading')}>\n {error?.message}\n </WarningPanel>\n );\n }\n\n if (post.type !== 'article') {\n return (\n <WarningPanel title=\"Not found\" message={t('articlePage.notFound')} />\n );\n }\n\n return (\n <>\n <ContentHeader\n title={post.title}\n titleIcon={<LibraryBooksOutlined fontSize=\"large\" />}\n >\n <WriteArticleButton />\n <AddToCollectionButton post={post} />\n </ContentHeader>\n <Container maxWidth={false}>\n <AIAnswerCard\n article={post as Article}\n style={{ marginBottom: '2em' }}\n />\n <ArticleContent post={post} views={views} />\n </Container>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAmBO,MAAM,cAAc,MAAM;AAC/B,EAAM,MAAA,EAAE,EAAG,EAAA,GAAI,SAAU,EAAA;AACzB,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,CAAC,CAAA;AAEpC,EAAA,MAAM,EAAE,UAAW,EAAA,GAAI,SAAsB,CAAA,CAAA,UAAA,EAAa,EAAE,CAAE,CAAA,CAAA;AAE9D,EAAM,MAAA;AAAA,IACJ,KAAO,EAAA,IAAA;AAAA,IACP,OAAA;AAAA,IACA;AAAA,GACF,GAAI,WAAW,CAAO,GAAA,KAAA,GAAA,CAAI,QAAQ,EAAE,CAAA,EAAG,CAAC,EAAE,CAAC,CAAA;AAE3C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA;AACrB,GACF,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,UAAA,EAAY,SAAS,YAAc,EAAA;AACrC,MAAA,QAAA,CAAS,WAAW,KAAK,CAAA;AAAA;AAC3B,GACF,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,uBAAQ,GAAA,CAAA,QAAA,EAAA,EAAS,OAAQ,EAAA,MAAA,EAAO,QAAQ,GAAK,EAAA,CAAA;AAAA;AAG/C,EAAI,IAAA,KAAA,IAAS,SAAS,KAAW,CAAA,EAAA;AAC/B,IACE,uBAAA,GAAA,CAAC,gBAAa,QAAS,EAAA,OAAA,EAAQ,OAAO,CAAE,CAAA,0BAA0B,CAC/D,EAAA,QAAA,EAAA,KAAA,EAAO,OACV,EAAA,CAAA;AAAA;AAIJ,EAAI,IAAA,IAAA,CAAK,SAAS,SAAW,EAAA;AAC3B,IAAA,2BACG,YAAa,EAAA,EAAA,KAAA,EAAM,aAAY,OAAS,EAAA,CAAA,CAAE,sBAAsB,CAAG,EAAA,CAAA;AAAA;AAIxE,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,OAAO,IAAK,CAAA,KAAA;AAAA,QACZ,SAAW,kBAAA,GAAA,CAAC,oBAAqB,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,CAAA;AAAA,QAElD,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,kBAAmB,EAAA,EAAA,CAAA;AAAA,0BACpB,GAAA,CAAC,yBAAsB,IAAY,EAAA;AAAA;AAAA;AAAA,KACrC;AAAA,oBACA,IAAA,CAAC,SAAU,EAAA,EAAA,QAAA,EAAU,KACnB,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,OAAS,EAAA,IAAA;AAAA,UACT,KAAA,EAAO,EAAE,YAAA,EAAc,KAAM;AAAA;AAAA,OAC/B;AAAA,sBACA,GAAA,CAAC,cAAe,EAAA,EAAA,IAAA,EAAY,KAAc,EAAA;AAAA,KAC5C,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"ArticlePage.esm.js","sources":["../../../src/components/ArticlePage/ArticlePage.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\nimport { useEffect, useState } from 'react';\nimport { useSignal } from '@backstage/plugin-signals-react';\nimport { WarningPanel } from '@backstage/core-components';\nimport { Article, QetaSignal } from '@drodil/backstage-plugin-qeta-common';\nimport {\n AddToCollectionButton,\n AIAnswerCard,\n ArticleContent,\n ContentHeader,\n qetaTranslationRef,\n useQetaApi,\n WriteArticleButton,\n FollowPostButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Container } from '@material-ui/core';\nimport { Skeleton } from '@material-ui/lab';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport LibraryBooksOutlined from '@material-ui/icons/LibraryBooksOutlined';\n\nexport const ArticlePage = () => {\n const { id } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const [views, setViews] = useState(0);\n\n const { lastSignal } = useSignal<QetaSignal>(`qeta:post_${id}`);\n\n const {\n value: post,\n loading,\n error,\n } = useQetaApi(api => api.getPost(id), [id]);\n\n useEffect(() => {\n if (post) {\n setViews(post.views);\n }\n }, [post]);\n\n useEffect(() => {\n if (lastSignal?.type === 'post_stats') {\n setViews(lastSignal.views);\n }\n }, [lastSignal]);\n\n if (loading) {\n return <Skeleton variant=\"rect\" height={200} />;\n }\n\n if (error || post === undefined) {\n return (\n <WarningPanel severity=\"error\" title={t('articlePage.errorLoading')}>\n {error?.message}\n </WarningPanel>\n );\n }\n\n if (post.type !== 'article') {\n return (\n <WarningPanel title=\"Not found\" message={t('articlePage.notFound')} />\n );\n }\n\n return (\n <>\n <ContentHeader\n title={post.title}\n titleIcon={<LibraryBooksOutlined fontSize=\"large\" />}\n >\n <FollowPostButton post={post} />\n <WriteArticleButton />\n <AddToCollectionButton post={post} />\n </ContentHeader>\n <Container maxWidth={false}>\n <AIAnswerCard\n article={post as Article}\n style={{ marginBottom: '2em' }}\n />\n <ArticleContent post={post} views={views} />\n </Container>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAoBO,MAAM,cAAc,MAAM;AAC/B,EAAM,MAAA,EAAE,EAAG,EAAA,GAAI,SAAU,EAAA;AACzB,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,CAAC,CAAA;AAEpC,EAAA,MAAM,EAAE,UAAW,EAAA,GAAI,SAAsB,CAAA,CAAA,UAAA,EAAa,EAAE,CAAE,CAAA,CAAA;AAE9D,EAAM,MAAA;AAAA,IACJ,KAAO,EAAA,IAAA;AAAA,IACP,OAAA;AAAA,IACA;AAAA,GACF,GAAI,WAAW,CAAO,GAAA,KAAA,GAAA,CAAI,QAAQ,EAAE,CAAA,EAAG,CAAC,EAAE,CAAC,CAAA;AAE3C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA;AACrB,GACF,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,UAAA,EAAY,SAAS,YAAc,EAAA;AACrC,MAAA,QAAA,CAAS,WAAW,KAAK,CAAA;AAAA;AAC3B,GACF,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,uBAAQ,GAAA,CAAA,QAAA,EAAA,EAAS,OAAQ,EAAA,MAAA,EAAO,QAAQ,GAAK,EAAA,CAAA;AAAA;AAG/C,EAAI,IAAA,KAAA,IAAS,SAAS,KAAW,CAAA,EAAA;AAC/B,IACE,uBAAA,GAAA,CAAC,gBAAa,QAAS,EAAA,OAAA,EAAQ,OAAO,CAAE,CAAA,0BAA0B,CAC/D,EAAA,QAAA,EAAA,KAAA,EAAO,OACV,EAAA,CAAA;AAAA;AAIJ,EAAI,IAAA,IAAA,CAAK,SAAS,SAAW,EAAA;AAC3B,IAAA,2BACG,YAAa,EAAA,EAAA,KAAA,EAAM,aAAY,OAAS,EAAA,CAAA,CAAE,sBAAsB,CAAG,EAAA,CAAA;AAAA;AAIxE,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,OAAO,IAAK,CAAA,KAAA;AAAA,QACZ,SAAW,kBAAA,GAAA,CAAC,oBAAqB,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,CAAA;AAAA,QAElD,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,oBAAiB,IAAY,EAAA,CAAA;AAAA,8BAC7B,kBAAmB,EAAA,EAAA,CAAA;AAAA,0BACpB,GAAA,CAAC,yBAAsB,IAAY,EAAA;AAAA;AAAA;AAAA,KACrC;AAAA,oBACA,IAAA,CAAC,SAAU,EAAA,EAAA,QAAA,EAAU,KACnB,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,OAAS,EAAA,IAAA;AAAA,UACT,KAAA,EAAO,EAAE,YAAA,EAAc,KAAM;AAAA;AAAA,OAC/B;AAAA,sBACA,GAAA,CAAC,cAAe,EAAA,EAAA,IAAA,EAAY,KAAc,EAAA;AAAA,KAC5C,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { useParams, useNavigate } from 'react-router-dom';
3
- import { qetaTranslationRef, collectionEditRouteRef, useQetaApi, CollectionFollowButton, ContentHeader, ContentHeaderCard, PostsContainer, DeleteModal } from '@drodil/backstage-plugin-qeta-react';
3
+ import { qetaTranslationRef, collectionEditRouteRef, useQetaApi, ContentHeader, CollectionFollowButton, ContentHeaderCard, PostsContainer, DeleteModal } from '@drodil/backstage-plugin-qeta-react';
4
4
  import { Skeleton } from '@material-ui/lab';
5
5
  import { WarningPanel } from '@backstage/core-components';
6
6
  import { Typography, Button, Grid } from '@material-ui/core';
@@ -32,19 +32,13 @@ const CollectionPage = () => {
32
32
  if (error || collection === void 0) {
33
33
  return /* @__PURE__ */ jsx(WarningPanel, { severity: "error", title: t("questionPage.errorLoading", {}), children: error?.message });
34
34
  }
35
- const title = /* @__PURE__ */ jsxs(Typography, { variant: "h5", component: "h2", style: { display: "flex" }, children: [
35
+ const title = /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center" }, children: [
36
36
  /* @__PURE__ */ jsx(PlaylistPlayIcon, { fontSize: "large", style: { marginRight: "8px" } }),
37
- collection.title,
38
- /* @__PURE__ */ jsx(
39
- CollectionFollowButton,
40
- {
41
- collection,
42
- style: { marginLeft: "0.5em" }
43
- }
44
- )
37
+ /* @__PURE__ */ jsx(Typography, { variant: "h5", component: "h2", children: collection.title })
45
38
  ] });
46
39
  return /* @__PURE__ */ jsxs(Fragment, { children: [
47
40
  /* @__PURE__ */ jsxs(ContentHeader, { titleComponent: title, children: [
41
+ /* @__PURE__ */ jsx(CollectionFollowButton, { collection }),
48
42
  collection.canEdit && /* @__PURE__ */ jsx(
49
43
  Button,
50
44
  {
@@ -1 +1 @@
1
- {"version":3,"file":"CollectionPage.esm.js","sources":["../../../src/components/CollectionPage/CollectionPage.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\nimport {\n CollectionFollowButton,\n ContentHeader,\n DeleteModal,\n collectionEditRouteRef,\n qetaTranslationRef,\n useQetaApi,\n PostsContainer,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Skeleton } from '@material-ui/lab';\nimport { WarningPanel } from '@backstage/core-components';\nimport { Button, Grid, Typography } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { useState } from 'react';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport PlaylistPlayIcon from '@material-ui/icons/PlaylistPlay';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport PeopleIcon from '@material-ui/icons/People';\nimport { useNavigate } from 'react-router-dom';\nimport { ContentHeaderCard } from '@drodil/backstage-plugin-qeta-react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\n\nexport const CollectionPage = () => {\n const { id } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n const navigate = useNavigate();\n const editCollectionRoute = useRouteRef(collectionEditRouteRef);\n const [deleteModalOpen, setDeleteModalOpen] = useState(false);\n const handleDeleteModalOpen = () => setDeleteModalOpen(true);\n const handleDeleteModalClose = () => setDeleteModalOpen(false);\n\n const {\n value: collection,\n loading,\n error,\n } = useQetaApi(api => api.getCollection(id), [id]);\n\n if (loading) {\n return <Skeleton variant=\"rect\" height={200} />;\n }\n\n if (error || collection === undefined) {\n return (\n <WarningPanel severity=\"error\" title={t('questionPage.errorLoading', {})}>\n {error?.message}\n </WarningPanel>\n );\n }\n\n const title = (\n <Typography variant=\"h5\" component=\"h2\" style={{ display: 'flex' }}>\n <PlaylistPlayIcon fontSize=\"large\" style={{ marginRight: '8px' }} />\n {collection.title}\n <CollectionFollowButton\n collection={collection}\n style={{ marginLeft: '0.5em' }}\n />\n </Typography>\n );\n\n return (\n <>\n <ContentHeader titleComponent={title}>\n {collection.canEdit && (\n <Button\n variant=\"contained\"\n color=\"primary\"\n startIcon={<EditIcon />}\n onClick={() =>\n editCollectionRoute &&\n navigate(\n editCollectionRoute({\n id: collection.id.toString(10),\n }),\n )\n }\n >\n {t('templateList.editButton', {})}\n </Button>\n )}\n {collection.canDelete && (\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n startIcon={<DeleteIcon />}\n onClick={handleDeleteModalOpen}\n >\n {t('templateList.deleteButton', {})}\n </Button>\n )}\n </ContentHeader>\n <Grid container>\n <Grid item xs={12}>\n <ContentHeaderCard\n description={collection.description}\n image={collection.headerImage}\n imageIcon={<PlaylistPlayIcon style={{ fontSize: 80 }} />}\n tagsAndEntities={{ entity: collection }}\n stats={[\n {\n label: t('common.postsLabel', {\n count: collection.postsCount,\n itemType: 'post',\n }),\n value: collection.postsCount,\n icon: <QuestionAnswerIcon fontSize=\"small\" />,\n },\n {\n label: t('common.followersLabel', {\n count: collection.followers,\n }),\n value: collection.followers,\n icon: <PeopleIcon fontSize=\"small\" />,\n },\n ]}\n />\n </Grid>\n <Grid item xs={12}>\n <PostsContainer\n collectionId={collection.id}\n orderBy=\"rank\"\n allowRanking={collection.canEdit}\n defaultView=\"grid\"\n prefix=\"collection-posts\"\n />\n </Grid>\n </Grid>\n {collection.canDelete && (\n <DeleteModal\n open={deleteModalOpen}\n onClose={handleDeleteModalClose}\n entity={collection}\n />\n )}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CollectionPage.esm.js","sources":["../../../src/components/CollectionPage/CollectionPage.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\nimport {\n CollectionFollowButton,\n ContentHeader,\n DeleteModal,\n collectionEditRouteRef,\n qetaTranslationRef,\n useQetaApi,\n PostsContainer,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Skeleton } from '@material-ui/lab';\nimport { WarningPanel } from '@backstage/core-components';\nimport { Button, Grid, Typography } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { useState } from 'react';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport PlaylistPlayIcon from '@material-ui/icons/PlaylistPlay';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport PeopleIcon from '@material-ui/icons/People';\nimport { useNavigate } from 'react-router-dom';\nimport { ContentHeaderCard } from '@drodil/backstage-plugin-qeta-react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\n\nexport const CollectionPage = () => {\n const { id } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n const navigate = useNavigate();\n const editCollectionRoute = useRouteRef(collectionEditRouteRef);\n const [deleteModalOpen, setDeleteModalOpen] = useState(false);\n const handleDeleteModalOpen = () => setDeleteModalOpen(true);\n const handleDeleteModalClose = () => setDeleteModalOpen(false);\n\n const {\n value: collection,\n loading,\n error,\n } = useQetaApi(api => api.getCollection(id), [id]);\n\n if (loading) {\n return <Skeleton variant=\"rect\" height={200} />;\n }\n\n if (error || collection === undefined) {\n return (\n <WarningPanel severity=\"error\" title={t('questionPage.errorLoading', {})}>\n {error?.message}\n </WarningPanel>\n );\n }\n\n const title = (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <PlaylistPlayIcon fontSize=\"large\" style={{ marginRight: '8px' }} />\n <Typography variant=\"h5\" component=\"h2\">\n {collection.title}\n </Typography>\n </div>\n );\n\n return (\n <>\n <ContentHeader titleComponent={title}>\n <CollectionFollowButton collection={collection} />\n {collection.canEdit && (\n <Button\n variant=\"contained\"\n color=\"primary\"\n startIcon={<EditIcon />}\n onClick={() =>\n editCollectionRoute &&\n navigate(\n editCollectionRoute({\n id: collection.id.toString(10),\n }),\n )\n }\n >\n {t('templateList.editButton', {})}\n </Button>\n )}\n {collection.canDelete && (\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n startIcon={<DeleteIcon />}\n onClick={handleDeleteModalOpen}\n >\n {t('templateList.deleteButton', {})}\n </Button>\n )}\n </ContentHeader>\n <Grid container>\n <Grid item xs={12}>\n <ContentHeaderCard\n description={collection.description}\n image={collection.headerImage}\n imageIcon={<PlaylistPlayIcon style={{ fontSize: 80 }} />}\n tagsAndEntities={{ entity: collection }}\n stats={[\n {\n label: t('common.postsLabel', {\n count: collection.postsCount,\n itemType: 'post',\n }),\n value: collection.postsCount,\n icon: <QuestionAnswerIcon fontSize=\"small\" />,\n },\n {\n label: t('common.followersLabel', {\n count: collection.followers,\n }),\n value: collection.followers,\n icon: <PeopleIcon fontSize=\"small\" />,\n },\n ]}\n />\n </Grid>\n <Grid item xs={12}>\n <PostsContainer\n collectionId={collection.id}\n orderBy=\"rank\"\n allowRanking={collection.canEdit}\n defaultView=\"grid\"\n prefix=\"collection-posts\"\n />\n </Grid>\n </Grid>\n {collection.canDelete && (\n <DeleteModal\n open={deleteModalOpen}\n onClose={handleDeleteModalClose}\n entity={collection}\n />\n )}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -30,17 +30,14 @@ const SingleEntityPage = ({ entityRef }) => {
30
30
  if (error || !resp) {
31
31
  return /* @__PURE__ */ jsx(WarningPanel, { severity: "error", title: t("questionPage.errorLoading"), children: error?.message });
32
32
  }
33
- const title = /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center" }, children: [
34
- /* @__PURE__ */ jsx(
35
- EntityRefLink,
36
- {
37
- entityRef: resp.entityRef,
38
- defaultKind: "Component",
39
- hideIcon: true
40
- }
41
- ),
42
- /* @__PURE__ */ jsx("span", { style: { marginLeft: "0.5em", display: "flex" }, children: /* @__PURE__ */ jsx(EntityFollowButton, { entityRef: resp.entityRef }) })
43
- ] });
33
+ const title = /* @__PURE__ */ jsx("div", { style: { display: "flex", alignItems: "center" }, children: /* @__PURE__ */ jsx(
34
+ EntityRefLink,
35
+ {
36
+ entityRef: resp.entityRef,
37
+ defaultKind: "Component",
38
+ hideIcon: true
39
+ }
40
+ ) });
44
41
  const description = `${entity?.kind} ${entity?.spec?.type ? `(${entity?.spec?.type})` : ""}`;
45
42
  return /* @__PURE__ */ jsxs(Fragment, { children: [
46
43
  /* @__PURE__ */ jsxs(
@@ -50,6 +47,7 @@ const SingleEntityPage = ({ entityRef }) => {
50
47
  titleIcon: /* @__PURE__ */ jsx(CategoryOutlined, { fontSize: "large" }),
51
48
  description,
52
49
  children: [
50
+ /* @__PURE__ */ jsx(EntityFollowButton, { entityRef: resp.entityRef }),
53
51
  /* @__PURE__ */ jsx(AskQuestionButton, { entity: resp.entityRef }),
54
52
  /* @__PURE__ */ jsx(WriteArticleButton, { entity: resp.entityRef }),
55
53
  /* @__PURE__ */ jsx(CreateLinkButton, { entity: resp.entityRef })
@@ -1 +1 @@
1
- {"version":3,"file":"EntityPage.esm.js","sources":["../../../src/components/EntityPage/EntityPage.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { useApi } from '@backstage/core-plugin-api';\nimport {\n AskQuestionButton,\n CreateLinkButton,\n EntitiesContainer,\n EntityFollowButton,\n PostsContainer,\n qetaTranslationRef,\n useQetaApi,\n WriteArticleButton,\n ContentHeaderCard,\n ContentHeader,\n} from '@drodil/backstage-plugin-qeta-react';\nimport {\n EntityRefLink,\n useEntityPresentation,\n catalogApiRef,\n} from '@backstage/plugin-catalog-react';\nimport CategoryOutlined from '@material-ui/icons/CategoryOutlined';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport PeopleIcon from '@material-ui/icons/People';\nimport { Skeleton } from '@material-ui/lab';\nimport { WarningPanel } from '@backstage/core-components';\nimport { Entity } from '@backstage/catalog-model';\n\nconst SingleEntityPage = ({ entityRef }: { entityRef: string }) => {\n const { t } = useTranslationRef(qetaTranslationRef);\n const [entity, setEntity] = useState<Entity | undefined>(undefined);\n const { Icon } = useEntityPresentation(entityRef);\n const catalogApi = useApi(catalogApiRef);\n\n useEffect(() => {\n catalogApi.getEntityByRef(entityRef).then(e => setEntity(e));\n }, [catalogApi, entityRef]);\n\n const {\n value: resp,\n loading,\n error,\n } = useQetaApi(api => api.getEntity(entityRef), [entityRef]);\n\n if (loading) {\n return <Skeleton variant=\"rect\" height={200} />;\n }\n\n if (error || !resp) {\n return (\n <WarningPanel severity=\"error\" title={t('questionPage.errorLoading')}>\n {error?.message}\n </WarningPanel>\n );\n }\n\n const title = (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <EntityRefLink\n entityRef={resp.entityRef}\n defaultKind=\"Component\"\n hideIcon\n />\n <span style={{ marginLeft: '0.5em', display: 'flex' }}>\n <EntityFollowButton entityRef={resp.entityRef} />\n </span>\n </div>\n );\n\n const description = `${entity?.kind} ${\n entity?.spec?.type ? `(${entity?.spec?.type})` : ''\n }`;\n\n return (\n <>\n <ContentHeader\n title={title}\n titleIcon={<CategoryOutlined fontSize=\"large\" />}\n description={description}\n >\n <AskQuestionButton entity={resp.entityRef} />\n <WriteArticleButton entity={resp.entityRef} />\n <CreateLinkButton entity={resp.entityRef} />\n </ContentHeader>\n {resp && (\n <ContentHeaderCard\n description={entity?.metadata?.description}\n imageIcon={\n Icon ? (\n <div style={{ fontSize: '80px', display: 'flex' }}>\n <Icon fontSize=\"inherit\" />\n </div>\n ) : (\n <CategoryOutlined style={{ fontSize: 80 }} />\n )\n }\n stats={[\n {\n label: t('common.postsLabel', {\n count: resp.postsCount,\n itemType: 'post',\n }),\n value: resp.postsCount,\n icon: <QuestionAnswerIcon fontSize=\"small\" />,\n },\n {\n label: t('common.followersLabel', { count: resp.followerCount }),\n value: resp.followerCount,\n icon: <PeopleIcon fontSize=\"small\" />,\n },\n ]}\n />\n )}\n <PostsContainer\n entity={entityRef}\n filterPanelProps={{ showEntityFilter: false }}\n defaultView=\"list\"\n showTypeLabel\n />\n </>\n );\n};\n\nexport const EntityPage = () => {\n const { entityRef } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n if (entityRef) {\n return <SingleEntityPage entityRef={entityRef} />;\n }\n\n return (\n <>\n <ContentHeader\n title={t('entitiesPage.defaultTitle')}\n titleIcon={<CategoryOutlined fontSize=\"large\" />}\n >\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n <EntitiesContainer />\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;AA4BA,MAAM,gBAAmB,GAAA,CAAC,EAAE,SAAA,EAAuC,KAAA;AACjE,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAA6B,KAAS,CAAA,CAAA;AAClE,EAAA,MAAM,EAAE,IAAA,EAAS,GAAA,qBAAA,CAAsB,SAAS,CAAA;AAChD,EAAM,MAAA,UAAA,GAAa,OAAO,aAAa,CAAA;AAEvC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,UAAA,CAAW,eAAe,SAAS,CAAA,CAAE,KAAK,CAAK,CAAA,KAAA,SAAA,CAAU,CAAC,CAAC,CAAA;AAAA,GAC1D,EAAA,CAAC,UAAY,EAAA,SAAS,CAAC,CAAA;AAE1B,EAAM,MAAA;AAAA,IACJ,KAAO,EAAA,IAAA;AAAA,IACP,OAAA;AAAA,IACA;AAAA,GACF,GAAI,WAAW,CAAO,GAAA,KAAA,GAAA,CAAI,UAAU,SAAS,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAE3D,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,uBAAQ,GAAA,CAAA,QAAA,EAAA,EAAS,OAAQ,EAAA,MAAA,EAAO,QAAQ,GAAK,EAAA,CAAA;AAAA;AAG/C,EAAI,IAAA,KAAA,IAAS,CAAC,IAAM,EAAA;AAClB,IACE,uBAAA,GAAA,CAAC,gBAAa,QAAS,EAAA,OAAA,EAAQ,OAAO,CAAE,CAAA,2BAA2B,CAChE,EAAA,QAAA,EAAA,KAAA,EAAO,OACV,EAAA,CAAA;AAAA;AAIJ,EAAM,MAAA,KAAA,wBACH,KAAI,EAAA,EAAA,KAAA,EAAO,EAAE,OAAS,EAAA,MAAA,EAAQ,UAAY,EAAA,QAAA,EACzC,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,WAAW,IAAK,CAAA,SAAA;AAAA,QAChB,WAAY,EAAA,WAAA;AAAA,QACZ,QAAQ,EAAA;AAAA;AAAA,KACV;AAAA,oBACC,GAAA,CAAA,MAAA,EAAA,EAAK,KAAO,EAAA,EAAE,YAAY,OAAS,EAAA,OAAA,EAAS,MAAO,EAAA,EAClD,QAAC,kBAAA,GAAA,CAAA,kBAAA,EAAA,EAAmB,SAAW,EAAA,IAAA,CAAK,WAAW,CACjD,EAAA;AAAA,GACF,EAAA,CAAA;AAGF,EAAA,MAAM,WAAc,GAAA,CAAA,EAAG,MAAQ,EAAA,IAAI,CACjC,CAAA,EAAA,MAAA,EAAQ,IAAM,EAAA,IAAA,GAAO,CAAI,CAAA,EAAA,MAAA,EAAQ,IAAM,EAAA,IAAI,MAAM,EACnD,CAAA,CAAA;AAEA,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,SAAW,kBAAA,GAAA,CAAC,gBAAiB,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,CAAA;AAAA,QAC9C,WAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAC,GAAA,CAAA,iBAAA,EAAA,EAAkB,MAAQ,EAAA,IAAA,CAAK,SAAW,EAAA,CAAA;AAAA,0BAC1C,GAAA,CAAA,kBAAA,EAAA,EAAmB,MAAQ,EAAA,IAAA,CAAK,SAAW,EAAA,CAAA;AAAA,0BAC3C,GAAA,CAAA,gBAAA,EAAA,EAAiB,MAAQ,EAAA,IAAA,CAAK,SAAW,EAAA;AAAA;AAAA;AAAA,KAC5C;AAAA,IACC,IACC,oBAAA,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAa,QAAQ,QAAU,EAAA,WAAA;AAAA,QAC/B,SAAA,EACE,uBACG,GAAA,CAAA,KAAA,EAAA,EAAI,OAAO,EAAE,QAAA,EAAU,MAAQ,EAAA,OAAA,EAAS,MAAO,EAAA,EAC9C,8BAAC,IAAK,EAAA,EAAA,QAAA,EAAS,SAAU,EAAA,CAAA,EAC3B,CAEA,mBAAA,GAAA,CAAC,oBAAiB,KAAO,EAAA,EAAE,QAAU,EAAA,EAAA,EAAM,EAAA,CAAA;AAAA,QAG/C,KAAO,EAAA;AAAA,UACL;AAAA,YACE,KAAA,EAAO,EAAE,mBAAqB,EAAA;AAAA,cAC5B,OAAO,IAAK,CAAA,UAAA;AAAA,cACZ,QAAU,EAAA;AAAA,aACX,CAAA;AAAA,YACD,OAAO,IAAK,CAAA,UAAA;AAAA,YACZ,IAAM,kBAAA,GAAA,CAAC,kBAAmB,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA;AAAA,WAC7C;AAAA,UACA;AAAA,YACE,OAAO,CAAE,CAAA,uBAAA,EAAyB,EAAE,KAAO,EAAA,IAAA,CAAK,eAAe,CAAA;AAAA,YAC/D,OAAO,IAAK,CAAA,aAAA;AAAA,YACZ,IAAM,kBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA;AAAA;AACrC;AACF;AAAA,KACF;AAAA,oBAEF,GAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,MAAQ,EAAA,SAAA;AAAA,QACR,gBAAA,EAAkB,EAAE,gBAAA,EAAkB,KAAM,EAAA;AAAA,QAC5C,WAAY,EAAA,MAAA;AAAA,QACZ,aAAa,EAAA;AAAA;AAAA;AACf,GACF,EAAA,CAAA;AAEJ,CAAA;AAEO,MAAM,aAAa,MAAM;AAC9B,EAAM,MAAA,EAAE,SAAU,EAAA,GAAI,SAAU,EAAA;AAChC,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAA,IAAI,SAAW,EAAA;AACb,IAAO,uBAAA,GAAA,CAAC,oBAAiB,SAAsB,EAAA,CAAA;AAAA;AAGjD,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,2BAA2B,CAAA;AAAA,QACpC,SAAW,kBAAA,GAAA,CAAC,gBAAiB,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,CAAA;AAAA,QAE9C,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,iBAAkB,EAAA,EAAA,CAAA;AAAA,8BAClB,kBAAmB,EAAA,EAAA,CAAA;AAAA,8BACnB,gBAAiB,EAAA,EAAA;AAAA;AAAA;AAAA,KACpB;AAAA,wBACC,iBAAkB,EAAA,EAAA;AAAA,GACrB,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"EntityPage.esm.js","sources":["../../../src/components/EntityPage/EntityPage.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { useApi } from '@backstage/core-plugin-api';\nimport {\n AskQuestionButton,\n CreateLinkButton,\n EntitiesContainer,\n EntityFollowButton,\n PostsContainer,\n qetaTranslationRef,\n useQetaApi,\n WriteArticleButton,\n ContentHeaderCard,\n ContentHeader,\n} from '@drodil/backstage-plugin-qeta-react';\nimport {\n EntityRefLink,\n useEntityPresentation,\n catalogApiRef,\n} from '@backstage/plugin-catalog-react';\nimport CategoryOutlined from '@material-ui/icons/CategoryOutlined';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport PeopleIcon from '@material-ui/icons/People';\nimport { Skeleton } from '@material-ui/lab';\nimport { WarningPanel } from '@backstage/core-components';\nimport { Entity } from '@backstage/catalog-model';\n\nconst SingleEntityPage = ({ entityRef }: { entityRef: string }) => {\n const { t } = useTranslationRef(qetaTranslationRef);\n const [entity, setEntity] = useState<Entity | undefined>(undefined);\n const { Icon } = useEntityPresentation(entityRef);\n const catalogApi = useApi(catalogApiRef);\n\n useEffect(() => {\n catalogApi.getEntityByRef(entityRef).then(e => setEntity(e));\n }, [catalogApi, entityRef]);\n\n const {\n value: resp,\n loading,\n error,\n } = useQetaApi(api => api.getEntity(entityRef), [entityRef]);\n\n if (loading) {\n return <Skeleton variant=\"rect\" height={200} />;\n }\n\n if (error || !resp) {\n return (\n <WarningPanel severity=\"error\" title={t('questionPage.errorLoading')}>\n {error?.message}\n </WarningPanel>\n );\n }\n\n const title = (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <EntityRefLink\n entityRef={resp.entityRef}\n defaultKind=\"Component\"\n hideIcon\n />\n </div>\n );\n\n const description = `${entity?.kind} ${\n entity?.spec?.type ? `(${entity?.spec?.type})` : ''\n }`;\n\n return (\n <>\n <ContentHeader\n title={title}\n titleIcon={<CategoryOutlined fontSize=\"large\" />}\n description={description}\n >\n <EntityFollowButton entityRef={resp.entityRef} />\n <AskQuestionButton entity={resp.entityRef} />\n <WriteArticleButton entity={resp.entityRef} />\n <CreateLinkButton entity={resp.entityRef} />\n </ContentHeader>\n {resp && (\n <ContentHeaderCard\n description={entity?.metadata?.description}\n imageIcon={\n Icon ? (\n <div style={{ fontSize: '80px', display: 'flex' }}>\n <Icon fontSize=\"inherit\" />\n </div>\n ) : (\n <CategoryOutlined style={{ fontSize: 80 }} />\n )\n }\n stats={[\n {\n label: t('common.postsLabel', {\n count: resp.postsCount,\n itemType: 'post',\n }),\n value: resp.postsCount,\n icon: <QuestionAnswerIcon fontSize=\"small\" />,\n },\n {\n label: t('common.followersLabel', { count: resp.followerCount }),\n value: resp.followerCount,\n icon: <PeopleIcon fontSize=\"small\" />,\n },\n ]}\n />\n )}\n <PostsContainer\n entity={entityRef}\n filterPanelProps={{ showEntityFilter: false }}\n defaultView=\"list\"\n showTypeLabel\n />\n </>\n );\n};\n\nexport const EntityPage = () => {\n const { entityRef } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n if (entityRef) {\n return <SingleEntityPage entityRef={entityRef} />;\n }\n\n return (\n <>\n <ContentHeader\n title={t('entitiesPage.defaultTitle')}\n titleIcon={<CategoryOutlined fontSize=\"large\" />}\n >\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n <EntitiesContainer />\n </>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,10 +1,55 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
- import { qetaTranslationRef, ContentHeader, AskQuestionButton, WriteArticleButton, CreateLinkButton, SuggestionsCard, Timeline } from '@drodil/backstage-plugin-qeta-react';
3
- import { Grid } from '@material-ui/core';
2
+ import { qetaTranslationRef, ContentHeader, AskQuestionButton, WriteArticleButton, CreateLinkButton, SuggestionsCard, FollowedItemsCard, ImpactCard, CommunityActivityCard, Timeline } from '@drodil/backstage-plugin-qeta-react';
3
+ import { makeStyles, Box } from '@material-ui/core';
4
4
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
5
5
  import HomeOutlined from '@material-ui/icons/HomeOutlined';
6
6
 
7
+ const useStyles = makeStyles((theme) => ({
8
+ flexRow: {
9
+ display: "flex",
10
+ flexWrap: "wrap",
11
+ gap: theme.spacing(2),
12
+ width: "100%",
13
+ marginBottom: theme.spacing(2),
14
+ alignItems: "stretch"
15
+ },
16
+ suggestionColumn: {
17
+ flex: "3 1 350px",
18
+ display: "flex",
19
+ minWidth: 0,
20
+ "& > *": {
21
+ flex: 1,
22
+ maxHeight: 460,
23
+ overflowY: "auto"
24
+ }
25
+ },
26
+ followedColumn: {
27
+ flex: "1 1 250px",
28
+ display: "flex",
29
+ minWidth: 0,
30
+ "& > *": {
31
+ flex: 1,
32
+ maxHeight: 460,
33
+ overflowY: "auto"
34
+ }
35
+ },
36
+ equalColumn: {
37
+ flex: "1 1 395px",
38
+ display: "flex",
39
+ minWidth: 0,
40
+ "& > *": {
41
+ flex: 1,
42
+ maxHeight: 460,
43
+ overflowY: "auto"
44
+ }
45
+ },
46
+ timelineWrapper: {
47
+ width: "100%",
48
+ marginTop: theme.spacing(2)
49
+ }
50
+ }));
7
51
  const HomePage = () => {
52
+ const classes = useStyles();
8
53
  const { t } = useTranslationRef(qetaTranslationRef);
9
54
  return /* @__PURE__ */ jsxs(Fragment, { children: [
10
55
  /* @__PURE__ */ jsxs(
@@ -19,10 +64,15 @@ const HomePage = () => {
19
64
  ]
20
65
  }
21
66
  ),
22
- /* @__PURE__ */ jsxs(Grid, { container: true, children: [
23
- /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(SuggestionsCard, {}) }),
24
- /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(Timeline, {}) })
25
- ] })
67
+ /* @__PURE__ */ jsxs(Box, { className: classes.flexRow, children: [
68
+ /* @__PURE__ */ jsx(Box, { className: classes.suggestionColumn, children: /* @__PURE__ */ jsx(SuggestionsCard, {}) }),
69
+ /* @__PURE__ */ jsx(Box, { className: classes.followedColumn, children: /* @__PURE__ */ jsx(FollowedItemsCard, {}) })
70
+ ] }),
71
+ /* @__PURE__ */ jsxs(Box, { className: classes.flexRow, children: [
72
+ /* @__PURE__ */ jsx(Box, { className: classes.equalColumn, children: /* @__PURE__ */ jsx(ImpactCard, {}) }),
73
+ /* @__PURE__ */ jsx(Box, { className: classes.equalColumn, children: /* @__PURE__ */ jsx(CommunityActivityCard, {}) })
74
+ ] }),
75
+ /* @__PURE__ */ jsx(Box, { className: classes.timelineWrapper, children: /* @__PURE__ */ jsx(Timeline, {}) })
26
76
  ] });
27
77
  };
28
78
 
@@ -1 +1 @@
1
- {"version":3,"file":"HomePage.esm.js","sources":["../../../src/components/HomePage/HomePage.tsx"],"sourcesContent":["import {\n AskQuestionButton,\n ContentHeader,\n CreateLinkButton,\n qetaTranslationRef,\n SuggestionsCard,\n WriteArticleButton,\n Timeline,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Grid } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport HomeOutlined from '@material-ui/icons/HomeOutlined';\n\nexport const HomePage = () => {\n const { t } = useTranslationRef(qetaTranslationRef);\n\n return (\n <>\n <ContentHeader\n title={t('homePage.title')}\n titleIcon={<HomeOutlined fontSize=\"large\" />}\n >\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n <Grid container>\n <Grid item xs={12}>\n <SuggestionsCard />\n </Grid>\n <Grid item xs={12}>\n <Timeline />\n </Grid>\n </Grid>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;AAaO,MAAM,WAAW,MAAM;AAC5B,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,gBAAgB,CAAA;AAAA,QACzB,SAAW,kBAAA,GAAA,CAAC,YAAa,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,CAAA;AAAA,QAE1C,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,iBAAkB,EAAA,EAAA,CAAA;AAAA,8BAClB,kBAAmB,EAAA,EAAA,CAAA;AAAA,8BACnB,gBAAiB,EAAA,EAAA;AAAA;AAAA;AAAA,KACpB;AAAA,oBACA,IAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAS,IACb,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,QAAK,IAAI,EAAA,IAAA,EAAC,IAAI,EACb,EAAA,QAAA,kBAAA,GAAA,CAAC,mBAAgB,CACnB,EAAA,CAAA;AAAA,sBACA,GAAA,CAAC,QAAK,IAAI,EAAA,IAAA,EAAC,IAAI,EACb,EAAA,QAAA,kBAAA,GAAA,CAAC,YAAS,CACZ,EAAA;AAAA,KACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"HomePage.esm.js","sources":["../../../src/components/HomePage/HomePage.tsx"],"sourcesContent":["import {\n AskQuestionButton,\n ContentHeader,\n CreateLinkButton,\n ImpactCard,\n qetaTranslationRef,\n SuggestionsCard,\n WriteArticleButton,\n Timeline,\n CommunityActivityCard,\n FollowedItemsCard,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Box, makeStyles } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport HomeOutlined from '@material-ui/icons/HomeOutlined';\n\nconst useStyles = makeStyles(theme => ({\n flexRow: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: theme.spacing(2),\n width: '100%',\n marginBottom: theme.spacing(2),\n alignItems: 'stretch',\n },\n suggestionColumn: {\n flex: '3 1 350px',\n display: 'flex',\n minWidth: 0,\n '& > *': {\n flex: 1,\n maxHeight: 460,\n overflowY: 'auto',\n },\n },\n followedColumn: {\n flex: '1 1 250px',\n display: 'flex',\n minWidth: 0,\n '& > *': {\n flex: 1,\n maxHeight: 460,\n overflowY: 'auto',\n },\n },\n equalColumn: {\n flex: '1 1 395px',\n display: 'flex',\n minWidth: 0,\n '& > *': {\n flex: 1,\n maxHeight: 460,\n overflowY: 'auto',\n },\n },\n timelineWrapper: {\n width: '100%',\n marginTop: theme.spacing(2),\n },\n}));\n\nexport const HomePage = () => {\n const classes = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n return (\n <>\n <ContentHeader\n title={t('homePage.title')}\n titleIcon={<HomeOutlined fontSize=\"large\" />}\n >\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n\n <Box className={classes.flexRow}>\n <Box className={classes.suggestionColumn}>\n <SuggestionsCard />\n </Box>\n <Box className={classes.followedColumn}>\n <FollowedItemsCard />\n </Box>\n </Box>\n\n <Box className={classes.flexRow}>\n <Box className={classes.equalColumn}>\n <ImpactCard />\n </Box>\n <Box className={classes.equalColumn}>\n <CommunityActivityCard />\n </Box>\n </Box>\n\n <Box className={classes.timelineWrapper}>\n <Timeline />\n </Box>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { useParams } from 'react-router-dom';
3
3
  import { useState, useEffect } from 'react';
4
4
  import { useSignal } from '@backstage/plugin-signals-react';
5
5
  import { WarningPanel } from '@backstage/core-components';
6
- import { qetaApiRef, qetaTranslationRef, useQetaApi, ContentHeader, FaviconItem, CreateLinkButton, AddToCollectionButton, DraftBanner, DeletedBanner, LinkCard, RelativeTimeWithTooltip, UpdatedByLink } from '@drodil/backstage-plugin-qeta-react';
6
+ import { qetaApiRef, qetaTranslationRef, useQetaApi, ContentHeader, FaviconItem, FollowPostButton, CreateLinkButton, AddToCollectionButton, DraftBanner, DeletedBanner, LinkCard, RelativeTimeWithTooltip, UpdatedByLink } from '@drodil/backstage-plugin-qeta-react';
7
7
  import { Skeleton } from '@material-ui/lab';
8
8
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
9
9
  import { makeStyles, Box } from '@material-ui/core';
@@ -92,6 +92,7 @@ const LinkPage = () => {
92
92
  titleIcon: post.url ? /* @__PURE__ */ jsx(FaviconItem, { entity: post }) : void 0,
93
93
  description: getDescription(post),
94
94
  children: [
95
+ /* @__PURE__ */ jsx(FollowPostButton, { post }),
95
96
  /* @__PURE__ */ jsx(CreateLinkButton, {}),
96
97
  /* @__PURE__ */ jsx(AddToCollectionButton, { post })
97
98
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"LinkPage.esm.js","sources":["../../../src/components/LinkPage/LinkPage.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\nimport { useEffect, useState } from 'react';\nimport { useSignal } from '@backstage/plugin-signals-react';\nimport { WarningPanel } from '@backstage/core-components';\nimport { PostResponse, QetaSignal } from '@drodil/backstage-plugin-qeta-common';\nimport {\n AddToCollectionButton,\n ContentHeader,\n CreateLinkButton,\n DeletedBanner,\n DraftBanner,\n LinkCard,\n qetaTranslationRef,\n RelativeTimeWithTooltip,\n UpdatedByLink,\n useQetaApi,\n FaviconItem,\n qetaApiRef,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Skeleton } from '@material-ui/lab';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { Box, makeStyles } from '@material-ui/core';\nimport { useApi } from '@backstage/core-plugin-api';\n\nconst useDescriptionStyles = makeStyles(\n () => ({\n root: {},\n box: {\n display: 'inline',\n },\n }),\n { name: 'QetaDescription' },\n);\n\nexport const LinkPage = () => {\n const { id } = useParams();\n const qetaApi = useApi(qetaApiRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n const dStyles = useDescriptionStyles();\n const [score, setScore] = useState(0);\n const { lastSignal } = useSignal<QetaSignal>(`qeta:post_${id}`);\n\n const {\n value: post,\n loading,\n error,\n } = useQetaApi(api => api.getPost(id), [id]);\n\n useEffect(() => {\n if (post) {\n setScore(post.score);\n }\n }, [post]);\n\n useEffect(() => {\n if (lastSignal?.type === 'post_stats') {\n setScore(lastSignal.score);\n }\n }, [lastSignal]);\n\n if (loading) {\n return <Skeleton variant=\"rect\" height={200} />;\n }\n\n if (error || post === undefined) {\n return (\n <WarningPanel severity=\"error\" title={t('linkPage.errorLoading')}>\n {error?.message}\n </WarningPanel>\n );\n }\n\n if (post.type !== 'link') {\n return <WarningPanel title=\"Not found\" message={t('linkPage.notFound')} />;\n }\n\n const getDescription = (q: PostResponse) => {\n return (\n <span className={dStyles.root}>\n <Box fontWeight=\"fontWeightMedium\" className={dStyles.box}>\n {t('authorBox.postedAtTime')}{' '}\n <RelativeTimeWithTooltip value={q.created} />\n {' · '}\n </Box>\n {q.updated && (\n <Box fontWeight=\"fontWeightMedium\" className={dStyles.box}>\n {t('authorBox.updatedAtTime')}{' '}\n <RelativeTimeWithTooltip value={q.updated} />{' '}\n {t('authorBox.updatedBy')} <UpdatedByLink entity={q} />\n {' · '}\n </Box>\n )}\n <Box fontWeight=\"fontWeightMedium\" className={dStyles.box}>\n {t('common.clicksCount', { count: score })}\n </Box>\n </span>\n );\n };\n\n return (\n <>\n <ContentHeader\n title={\n post.url ? (\n <a\n href={post.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ color: 'inherit', textDecoration: 'none' }}\n data-testid=\"link-title\"\n onClick={event => {\n event.stopPropagation();\n qetaApi.clickLink(post.id);\n }}\n >\n {post.title}\n </a>\n ) : (\n post.title\n )\n }\n titleIcon={post.url ? <FaviconItem entity={post} /> : undefined}\n description={getDescription(post)}\n >\n <CreateLinkButton />\n <AddToCollectionButton post={post} />\n </ContentHeader>\n {post.status === 'draft' && <DraftBanner />}\n {post.status === 'deleted' && <DeletedBanner />}\n <LinkCard link={post} />\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAwBA,MAAM,oBAAuB,GAAA,UAAA;AAAA,EAC3B,OAAO;AAAA,IACL,MAAM,EAAC;AAAA,IACP,GAAK,EAAA;AAAA,MACH,OAAS,EAAA;AAAA;AACX,GACF,CAAA;AAAA,EACA,EAAE,MAAM,iBAAkB;AAC5B,CAAA;AAEO,MAAM,WAAW,MAAM;AAC5B,EAAM,MAAA,EAAE,EAAG,EAAA,GAAI,SAAU,EAAA;AACzB,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA;AACjC,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,UAAU,oBAAqB,EAAA;AACrC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,CAAC,CAAA;AACpC,EAAA,MAAM,EAAE,UAAW,EAAA,GAAI,SAAsB,CAAA,CAAA,UAAA,EAAa,EAAE,CAAE,CAAA,CAAA;AAE9D,EAAM,MAAA;AAAA,IACJ,KAAO,EAAA,IAAA;AAAA,IACP,OAAA;AAAA,IACA;AAAA,GACF,GAAI,WAAW,CAAO,GAAA,KAAA,GAAA,CAAI,QAAQ,EAAE,CAAA,EAAG,CAAC,EAAE,CAAC,CAAA;AAE3C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA;AACrB,GACF,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,UAAA,EAAY,SAAS,YAAc,EAAA;AACrC,MAAA,QAAA,CAAS,WAAW,KAAK,CAAA;AAAA;AAC3B,GACF,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,uBAAQ,GAAA,CAAA,QAAA,EAAA,EAAS,OAAQ,EAAA,MAAA,EAAO,QAAQ,GAAK,EAAA,CAAA;AAAA;AAG/C,EAAI,IAAA,KAAA,IAAS,SAAS,KAAW,CAAA,EAAA;AAC/B,IACE,uBAAA,GAAA,CAAC,gBAAa,QAAS,EAAA,OAAA,EAAQ,OAAO,CAAE,CAAA,uBAAuB,CAC5D,EAAA,QAAA,EAAA,KAAA,EAAO,OACV,EAAA,CAAA;AAAA;AAIJ,EAAI,IAAA,IAAA,CAAK,SAAS,MAAQ,EAAA;AACxB,IAAA,2BAAQ,YAAa,EAAA,EAAA,KAAA,EAAM,aAAY,OAAS,EAAA,CAAA,CAAE,mBAAmB,CAAG,EAAA,CAAA;AAAA;AAG1E,EAAM,MAAA,cAAA,GAAiB,CAAC,CAAoB,KAAA;AAC1C,IAAA,uBACG,IAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,OAAA,CAAQ,IACvB,EAAA,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,GAAI,EAAA,EAAA,UAAA,EAAW,kBAAmB,EAAA,SAAA,EAAW,QAAQ,GACnD,EAAA,QAAA,EAAA;AAAA,QAAA,CAAA,CAAE,wBAAwB,CAAA;AAAA,QAAG,GAAA;AAAA,wBAC7B,GAAA,CAAA,uBAAA,EAAA,EAAwB,KAAO,EAAA,CAAA,CAAE,OAAS,EAAA,CAAA;AAAA,QAC1C;AAAA,OACH,EAAA,CAAA;AAAA,MACC,CAAA,CAAE,2BACA,IAAA,CAAA,GAAA,EAAA,EAAI,YAAW,kBAAmB,EAAA,SAAA,EAAW,QAAQ,GACnD,EAAA,QAAA,EAAA;AAAA,QAAA,CAAA,CAAE,yBAAyB,CAAA;AAAA,QAAG,GAAA;AAAA,wBAC9B,GAAA,CAAA,uBAAA,EAAA,EAAwB,KAAO,EAAA,CAAA,CAAE,OAAS,EAAA,CAAA;AAAA,QAAG,GAAA;AAAA,QAC7C,EAAE,qBAAqB,CAAA;AAAA,QAAE,GAAA;AAAA,wBAAC,GAAA,CAAC,aAAc,EAAA,EAAA,MAAA,EAAQ,CAAG,EAAA,CAAA;AAAA,QACpD;AAAA,OACH,EAAA,CAAA;AAAA,sBAED,GAAA,CAAA,GAAA,EAAA,EAAI,UAAW,EAAA,kBAAA,EAAmB,SAAW,EAAA,OAAA,CAAQ,GACnD,EAAA,QAAA,EAAA,CAAA,CAAE,oBAAsB,EAAA,EAAE,KAAO,EAAA,KAAA,EAAO,CAC3C,EAAA;AAAA,KACF,EAAA,CAAA;AAAA,GAEJ;AAEA,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,KAAA,EACE,KAAK,GACH,mBAAA,GAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,MAAM,IAAK,CAAA,GAAA;AAAA,YACX,MAAO,EAAA,QAAA;AAAA,YACP,GAAI,EAAA,qBAAA;AAAA,YACJ,KAAO,EAAA,EAAE,KAAO,EAAA,SAAA,EAAW,gBAAgB,MAAO,EAAA;AAAA,YAClD,aAAY,EAAA,YAAA;AAAA,YACZ,SAAS,CAAS,KAAA,KAAA;AAChB,cAAA,KAAA,CAAM,eAAgB,EAAA;AACtB,cAAQ,OAAA,CAAA,SAAA,CAAU,KAAK,EAAE,CAAA;AAAA,aAC3B;AAAA,YAEC,QAAK,EAAA,IAAA,CAAA;AAAA;AAAA,YAGR,IAAK,CAAA,KAAA;AAAA,QAGT,WAAW,IAAK,CAAA,GAAA,uBAAO,WAAY,EAAA,EAAA,MAAA,EAAQ,MAAM,CAAK,GAAA,KAAA,CAAA;AAAA,QACtD,WAAA,EAAa,eAAe,IAAI,CAAA;AAAA,QAEhC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,gBAAiB,EAAA,EAAA,CAAA;AAAA,0BAClB,GAAA,CAAC,yBAAsB,IAAY,EAAA;AAAA;AAAA;AAAA,KACrC;AAAA,IACC,IAAK,CAAA,MAAA,KAAW,OAAW,oBAAA,GAAA,CAAC,WAAY,EAAA,EAAA,CAAA;AAAA,IACxC,IAAK,CAAA,MAAA,KAAW,SAAa,oBAAA,GAAA,CAAC,aAAc,EAAA,EAAA,CAAA;AAAA,oBAC7C,GAAA,CAAC,QAAS,EAAA,EAAA,IAAA,EAAM,IAAM,EAAA;AAAA,GACxB,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"LinkPage.esm.js","sources":["../../../src/components/LinkPage/LinkPage.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\nimport { useEffect, useState } from 'react';\nimport { useSignal } from '@backstage/plugin-signals-react';\nimport { WarningPanel } from '@backstage/core-components';\nimport { PostResponse, QetaSignal } from '@drodil/backstage-plugin-qeta-common';\nimport {\n AddToCollectionButton,\n ContentHeader,\n CreateLinkButton,\n DeletedBanner,\n DraftBanner,\n LinkCard,\n qetaTranslationRef,\n RelativeTimeWithTooltip,\n UpdatedByLink,\n useQetaApi,\n FaviconItem,\n qetaApiRef,\n FollowPostButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Skeleton } from '@material-ui/lab';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { Box, makeStyles } from '@material-ui/core';\nimport { useApi } from '@backstage/core-plugin-api';\n\nconst useDescriptionStyles = makeStyles(\n () => ({\n root: {},\n box: {\n display: 'inline',\n },\n }),\n { name: 'QetaDescription' },\n);\n\nexport const LinkPage = () => {\n const { id } = useParams();\n const qetaApi = useApi(qetaApiRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n const dStyles = useDescriptionStyles();\n const [score, setScore] = useState(0);\n const { lastSignal } = useSignal<QetaSignal>(`qeta:post_${id}`);\n\n const {\n value: post,\n loading,\n error,\n } = useQetaApi(api => api.getPost(id), [id]);\n\n useEffect(() => {\n if (post) {\n setScore(post.score);\n }\n }, [post]);\n\n useEffect(() => {\n if (lastSignal?.type === 'post_stats') {\n setScore(lastSignal.score);\n }\n }, [lastSignal]);\n\n if (loading) {\n return <Skeleton variant=\"rect\" height={200} />;\n }\n\n if (error || post === undefined) {\n return (\n <WarningPanel severity=\"error\" title={t('linkPage.errorLoading')}>\n {error?.message}\n </WarningPanel>\n );\n }\n\n if (post.type !== 'link') {\n return <WarningPanel title=\"Not found\" message={t('linkPage.notFound')} />;\n }\n\n const getDescription = (q: PostResponse) => {\n return (\n <span className={dStyles.root}>\n <Box fontWeight=\"fontWeightMedium\" className={dStyles.box}>\n {t('authorBox.postedAtTime')}{' '}\n <RelativeTimeWithTooltip value={q.created} />\n {' · '}\n </Box>\n {q.updated && (\n <Box fontWeight=\"fontWeightMedium\" className={dStyles.box}>\n {t('authorBox.updatedAtTime')}{' '}\n <RelativeTimeWithTooltip value={q.updated} />{' '}\n {t('authorBox.updatedBy')} <UpdatedByLink entity={q} />\n {' · '}\n </Box>\n )}\n <Box fontWeight=\"fontWeightMedium\" className={dStyles.box}>\n {t('common.clicksCount', { count: score })}\n </Box>\n </span>\n );\n };\n\n return (\n <>\n <ContentHeader\n title={\n post.url ? (\n <a\n href={post.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ color: 'inherit', textDecoration: 'none' }}\n data-testid=\"link-title\"\n onClick={event => {\n event.stopPropagation();\n qetaApi.clickLink(post.id);\n }}\n >\n {post.title}\n </a>\n ) : (\n post.title\n )\n }\n titleIcon={post.url ? <FaviconItem entity={post} /> : undefined}\n description={getDescription(post)}\n >\n <FollowPostButton post={post} />\n <CreateLinkButton />\n <AddToCollectionButton post={post} />\n </ContentHeader>\n {post.status === 'draft' && <DraftBanner />}\n {post.status === 'deleted' && <DeletedBanner />}\n <LinkCard link={post} />\n </>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -62,22 +62,28 @@ const useStyles = makeStyles((theme) => ({
62
62
  position: "sticky",
63
63
  top: theme.spacing(2),
64
64
  alignSelf: "flex-start",
65
- maxHeight: "calc(100dvh - 20px)",
65
+ maxHeight: "calc(100vh - 150px)",
66
+ overflowY: "auto",
66
67
  overflowX: "hidden",
68
+ // Hide scrollbar but keep scrolling functionality
69
+ scrollbarWidth: "none",
70
+ // Firefox
71
+ "-ms-overflow-style": "none",
72
+ // IE/Edge
73
+ "&::-webkit-scrollbar": {
74
+ display: "none"
75
+ // Chrome/Safari/Edge
76
+ },
67
77
  [theme.breakpoints.up("lg")]: {
68
- width: (props) => props.rightCompact ? 72 : 240,
69
- minWidth: (props) => props.rightCompact ? 72 : 240
78
+ width: (props) => props.rightCompact ? 72 : 250,
79
+ minWidth: (props) => props.rightCompact ? 72 : 250
70
80
  },
71
81
  [theme.breakpoints.down("md")]: {
72
82
  width: "100%",
73
83
  marginTop: theme.spacing(1),
74
84
  position: "static",
75
- maxHeight: "none"
76
- },
77
- "-ms-overflow-style": "none",
78
- "scrollbar-width": "none",
79
- "&::-webkit-scrollbar": {
80
- display: "none"
85
+ maxHeight: "none",
86
+ overflowY: "visible"
81
87
  }
82
88
  },
83
89
  mainColumn: {
@@ -1 +1 @@
1
- {"version":3,"file":"QetaPage.esm.js","sources":["../../../src/components/QetaPage/QetaPage.tsx"],"sourcesContent":["import { Fragment, ReactNode } from 'react';\nimport { Content, Header, Page } from '@backstage/core-components';\nimport { Route, Routes, useLocation } from 'react-router-dom';\nimport { AskPage } from '../AskPage';\nimport { QuestionPage } from '../QuestionPage/QuestionPage';\nimport { TagPage } from '../TagPage/TagPage';\nimport { UserPage } from '../UserPage/UserPage';\nimport { FavoritePage } from '../FavoritePage/FavoritePage';\nimport { StatisticsPage } from '../Statistics';\nimport {\n articleRouteRef,\n articlesRouteRef,\n askRouteRef,\n collectionCreateRouteRef,\n collectionEditRouteRef,\n collectionRouteRef,\n collectionsRouteRef,\n createLinkRouteRef,\n editArticleRouteRef,\n editLinkRouteRef,\n editQuestionRouteRef,\n entitiesRouteRef,\n entityRouteRef,\n favoriteQuestionsRouteRef,\n LeftMenu,\n LeftMenuButton,\n linkRouteRef,\n linksRouteRef,\n moderatorRouteRef,\n QetaProvider,\n questionRouteRef,\n questionsRouteRef,\n reviewRouteRef,\n settingsRouteRef,\n statisticsRouteRef,\n tagRouteRef,\n tagsRouteRef,\n userRouteRef,\n usersRouteRef,\n writeRouteRef,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { QuestionsPage } from '../QuestionsPage/QuestionsPage';\nimport { HomePage } from '../HomePage/HomePage';\nimport { ArticlesPage } from '../ArticlesPage/ArticlesPage';\nimport { WritePage } from '../WritePage/WritePage';\nimport { ArticlePage } from '../ArticlePage/ArticlePage';\nimport { LinksPage } from '../LinksPage/LinksPage';\nimport { LinkPage } from '../LinkPage/LinkPage';\nimport { CreateLinkPage } from '../CreateLinkPage/CreateLinkPage';\nimport { CollectionsPage } from '../CollectionsPage/CollectionsPage';\nimport { CollectionPage } from '../CollectionPage/CollectionPage';\nimport { CollectionCreatePage } from '../CollectionCreatePage/CollectionCreatePage';\nimport { EntityPage } from '../EntityPage/EntityPage';\nimport { UsersPage } from '../UsersPage/UsersPage';\nimport { ModeratorPage } from '../ModeratorPage/ModeratorPage';\nimport { ReviewPage } from '../ReviewPage/ReviewPage';\nimport { SettingsPage } from '../SettingsPage/SettingsPage';\nimport { Box, Container, Grid, makeStyles } from '@material-ui/core';\nimport { useSidebarSettings } from '../../hooks/useSidebarSettings';\nimport { RightContent } from '../RightContent/RightContent';\nimport type { PluggableList } from 'unified';\n\ntype Props = {\n title?: string;\n subtitle?: string;\n headerElements?: ReactNode[];\n themeId?: string;\n headerTooltip?: string;\n headerType?: string;\n headerTypeLink?: string;\n introElement?: ReactNode;\n remarkPlugins?: PluggableList;\n rehypePlugins?: PluggableList;\n};\n\ntype StyleProps = {\n leftCompact: boolean;\n rightCompact: boolean;\n};\n\nconst useStyles = makeStyles(theme => ({\n sidebarColumn: {\n padding: 0,\n transition: 'all 0.2s ease-in-out',\n flexShrink: 0,\n position: 'sticky',\n top: theme.spacing(2),\n alignSelf: 'flex-start',\n maxHeight: 'calc(100dvh - 20px)',\n overflowX: 'hidden',\n [theme.breakpoints.up('lg')]: {\n width: (props: StyleProps) => (props.leftCompact ? 80 : 180),\n minWidth: (props: StyleProps) => (props.leftCompact ? 80 : 180),\n },\n [theme.breakpoints.down('md')]: {\n width: '100%',\n marginBottom: theme.spacing(1),\n position: 'static',\n maxHeight: 'none',\n },\n '-ms-overflow-style': 'none',\n 'scrollbar-width': 'none',\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n },\n rightSidebarColumn: {\n padding: 0,\n transition: 'all 0.2s ease-in-out',\n flexShrink: 0,\n position: 'sticky',\n top: theme.spacing(2),\n alignSelf: 'flex-start',\n maxHeight: 'calc(100dvh - 20px)',\n overflowX: 'hidden',\n [theme.breakpoints.up('lg')]: {\n width: (props: StyleProps) => (props.rightCompact ? 72 : 240),\n minWidth: (props: StyleProps) => (props.rightCompact ? 72 : 240),\n },\n [theme.breakpoints.down('md')]: {\n width: '100%',\n marginTop: theme.spacing(1),\n position: 'static',\n maxHeight: 'none',\n },\n '-ms-overflow-style': 'none',\n 'scrollbar-width': 'none',\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n },\n mainColumn: {\n paddingRight: 0,\n minWidth: 0,\n transition: 'all 0.2s ease-in-out',\n [theme.breakpoints.down('md')]: {\n paddingLeft: 0,\n },\n },\n}));\n\nexport const QetaPage = (props?: Props) => {\n const {\n title = 'Q&A',\n subtitle,\n headerElements,\n themeId = 'tool',\n headerTooltip,\n headerType,\n headerTypeLink,\n introElement,\n remarkPlugins,\n rehypePlugins,\n } = props ?? {};\n const { leftCompact, rightCompact, toggleLeft, toggleRight } =\n useSidebarSettings();\n const location = useLocation();\n\n // Hide right sidebar on review and moderator pages\n const hideRightSidebar =\n location.pathname.includes('/review') ||\n location.pathname.includes('/moderate');\n\n const classes = useStyles({\n leftCompact,\n rightCompact,\n });\n\n return (\n <QetaProvider remarkPlugins={remarkPlugins} rehypePlugins={rehypePlugins}>\n <Page themeId={themeId}>\n <Header\n title={title}\n subtitle={subtitle}\n type={headerType}\n typeLink={headerTypeLink}\n tooltip={headerTooltip}\n >\n {headerElements?.map((element, index) => (\n <Fragment key={index}>{element}</Fragment>\n ))}\n </Header>\n <Content className=\"qetaHomePage\">\n {introElement}\n <Container maxWidth=\"xl\">\n <Grid\n container\n spacing={3}\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n >\n <Grid item className={classes.sidebarColumn}>\n <Box display={{ xs: 'block', lg: 'none' }}>\n <LeftMenuButton />\n </Box>\n <Box display={{ xs: 'none', lg: 'block' }}>\n <LeftMenu compact={leftCompact} onToggle={toggleLeft} />\n </Box>\n </Grid>\n <Grid item xs className={classes.mainColumn}>\n <Routes>\n <Route path=\"/\" element={<HomePage />} />\n <Route\n path={questionsRouteRef.path}\n element={<QuestionsPage />}\n />\n <Route path={askRouteRef.path} element={<AskPage />} />\n <Route\n path={articlesRouteRef.path}\n element={<ArticlesPage />}\n />\n <Route path={writeRouteRef.path} element={<WritePage />} />\n <Route path={linksRouteRef.path} element={<LinksPage />} />\n <Route\n path={createLinkRouteRef.path}\n element={<CreateLinkPage />}\n />\n <Route\n path={favoriteQuestionsRouteRef.path}\n element={<FavoritePage />}\n />\n <Route\n path={editQuestionRouteRef.path}\n element={<AskPage />}\n />\n <Route\n path={editArticleRouteRef.path}\n element={<WritePage />}\n />\n <Route\n path={editLinkRouteRef.path}\n element={<CreateLinkPage />}\n />\n <Route\n path={questionRouteRef.path}\n element={<QuestionPage />}\n />\n <Route path={linkRouteRef.path} element={<LinkPage />} />\n <Route\n path={articleRouteRef.path}\n element={<ArticlePage />}\n />\n <Route path={tagsRouteRef.path} element={<TagPage />} />\n <Route path={tagRouteRef.path} element={<TagPage />} />\n <Route path={usersRouteRef.path} element={<UsersPage />} />\n <Route path={userRouteRef.path} element={<UserPage />} />\n <Route\n path={statisticsRouteRef.path}\n element={<StatisticsPage />}\n />\n <Route\n path={collectionsRouteRef.path}\n element={<CollectionsPage />}\n />\n <Route\n path={collectionCreateRouteRef.path}\n element={<CollectionCreatePage />}\n />\n <Route\n path={collectionEditRouteRef.path}\n element={<CollectionCreatePage />}\n />\n <Route\n path={collectionRouteRef.path}\n element={<CollectionPage />}\n />\n <Route\n path={entitiesRouteRef.path}\n element={<EntityPage />}\n />\n <Route path={entityRouteRef.path} element={<EntityPage />} />\n <Route\n path={moderatorRouteRef.path}\n element={<ModeratorPage />}\n />\n <Route path={reviewRouteRef.path} element={<ReviewPage />} />\n <Route\n path={settingsRouteRef.path}\n element={<SettingsPage />}\n />\n </Routes>\n </Grid>\n {!hideRightSidebar && (\n <Grid item className={classes.rightSidebarColumn}>\n <RightContent compact={rightCompact} onToggle={toggleRight} />\n </Grid>\n )}\n </Grid>\n </Container>\n </Content>\n </Page>\n </QetaProvider>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QetaPage.esm.js","sources":["../../../src/components/QetaPage/QetaPage.tsx"],"sourcesContent":["import { Fragment, ReactNode } from 'react';\nimport { Content, Header, Page } from '@backstage/core-components';\nimport { Route, Routes, useLocation } from 'react-router-dom';\nimport { AskPage } from '../AskPage';\nimport { QuestionPage } from '../QuestionPage/QuestionPage';\nimport { TagPage } from '../TagPage/TagPage';\nimport { UserPage } from '../UserPage/UserPage';\nimport { FavoritePage } from '../FavoritePage/FavoritePage';\nimport { StatisticsPage } from '../Statistics';\nimport {\n articleRouteRef,\n articlesRouteRef,\n askRouteRef,\n collectionCreateRouteRef,\n collectionEditRouteRef,\n collectionRouteRef,\n collectionsRouteRef,\n createLinkRouteRef,\n editArticleRouteRef,\n editLinkRouteRef,\n editQuestionRouteRef,\n entitiesRouteRef,\n entityRouteRef,\n favoriteQuestionsRouteRef,\n LeftMenu,\n LeftMenuButton,\n linkRouteRef,\n linksRouteRef,\n moderatorRouteRef,\n QetaProvider,\n questionRouteRef,\n questionsRouteRef,\n reviewRouteRef,\n settingsRouteRef,\n statisticsRouteRef,\n tagRouteRef,\n tagsRouteRef,\n userRouteRef,\n usersRouteRef,\n writeRouteRef,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { QuestionsPage } from '../QuestionsPage/QuestionsPage';\nimport { HomePage } from '../HomePage/HomePage';\nimport { ArticlesPage } from '../ArticlesPage/ArticlesPage';\nimport { WritePage } from '../WritePage/WritePage';\nimport { ArticlePage } from '../ArticlePage/ArticlePage';\nimport { LinksPage } from '../LinksPage/LinksPage';\nimport { LinkPage } from '../LinkPage/LinkPage';\nimport { CreateLinkPage } from '../CreateLinkPage/CreateLinkPage';\nimport { CollectionsPage } from '../CollectionsPage/CollectionsPage';\nimport { CollectionPage } from '../CollectionPage/CollectionPage';\nimport { CollectionCreatePage } from '../CollectionCreatePage/CollectionCreatePage';\nimport { EntityPage } from '../EntityPage/EntityPage';\nimport { UsersPage } from '../UsersPage/UsersPage';\nimport { ModeratorPage } from '../ModeratorPage/ModeratorPage';\nimport { ReviewPage } from '../ReviewPage/ReviewPage';\nimport { SettingsPage } from '../SettingsPage/SettingsPage';\nimport { Box, Container, Grid, makeStyles } from '@material-ui/core';\nimport { useSidebarSettings } from '../../hooks/useSidebarSettings';\nimport { RightContent } from '../RightContent/RightContent';\nimport type { PluggableList } from 'unified';\n\ntype Props = {\n title?: string;\n subtitle?: string;\n headerElements?: ReactNode[];\n themeId?: string;\n headerTooltip?: string;\n headerType?: string;\n headerTypeLink?: string;\n introElement?: ReactNode;\n remarkPlugins?: PluggableList;\n rehypePlugins?: PluggableList;\n};\n\ntype StyleProps = {\n leftCompact: boolean;\n rightCompact: boolean;\n};\n\nconst useStyles = makeStyles(theme => ({\n sidebarColumn: {\n padding: 0,\n transition: 'all 0.2s ease-in-out',\n flexShrink: 0,\n position: 'sticky',\n top: theme.spacing(2),\n alignSelf: 'flex-start',\n maxHeight: 'calc(100dvh - 20px)',\n overflowX: 'hidden',\n [theme.breakpoints.up('lg')]: {\n width: (props: StyleProps) => (props.leftCompact ? 80 : 180),\n minWidth: (props: StyleProps) => (props.leftCompact ? 80 : 180),\n },\n [theme.breakpoints.down('md')]: {\n width: '100%',\n marginBottom: theme.spacing(1),\n position: 'static',\n maxHeight: 'none',\n },\n '-ms-overflow-style': 'none',\n 'scrollbar-width': 'none',\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n },\n rightSidebarColumn: {\n padding: 0,\n transition: 'all 0.2s ease-in-out',\n flexShrink: 0,\n position: 'sticky',\n top: theme.spacing(2),\n alignSelf: 'flex-start',\n maxHeight: 'calc(100vh - 150px)',\n overflowY: 'auto',\n overflowX: 'hidden',\n // Hide scrollbar but keep scrolling functionality\n scrollbarWidth: 'none', // Firefox\n '-ms-overflow-style': 'none', // IE/Edge\n '&::-webkit-scrollbar': {\n display: 'none', // Chrome/Safari/Edge\n },\n [theme.breakpoints.up('lg')]: {\n width: (props: StyleProps) => (props.rightCompact ? 72 : 250),\n minWidth: (props: StyleProps) => (props.rightCompact ? 72 : 250),\n },\n [theme.breakpoints.down('md')]: {\n width: '100%',\n marginTop: theme.spacing(1),\n position: 'static',\n maxHeight: 'none',\n overflowY: 'visible',\n },\n },\n mainColumn: {\n paddingRight: 0,\n minWidth: 0,\n transition: 'all 0.2s ease-in-out',\n [theme.breakpoints.down('md')]: {\n paddingLeft: 0,\n },\n },\n}));\n\nexport const QetaPage = (props?: Props) => {\n const {\n title = 'Q&A',\n subtitle,\n headerElements,\n themeId = 'tool',\n headerTooltip,\n headerType,\n headerTypeLink,\n introElement,\n remarkPlugins,\n rehypePlugins,\n } = props ?? {};\n const { leftCompact, rightCompact, toggleLeft, toggleRight } =\n useSidebarSettings();\n const location = useLocation();\n\n // Hide right sidebar on review and moderator pages\n const hideRightSidebar =\n location.pathname.includes('/review') ||\n location.pathname.includes('/moderate');\n\n const classes = useStyles({\n leftCompact,\n rightCompact,\n });\n\n return (\n <QetaProvider remarkPlugins={remarkPlugins} rehypePlugins={rehypePlugins}>\n <Page themeId={themeId}>\n <Header\n title={title}\n subtitle={subtitle}\n type={headerType}\n typeLink={headerTypeLink}\n tooltip={headerTooltip}\n >\n {headerElements?.map((element, index) => (\n <Fragment key={index}>{element}</Fragment>\n ))}\n </Header>\n <Content className=\"qetaHomePage\">\n {introElement}\n <Container maxWidth=\"xl\">\n <Grid\n container\n spacing={3}\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n >\n <Grid item className={classes.sidebarColumn}>\n <Box display={{ xs: 'block', lg: 'none' }}>\n <LeftMenuButton />\n </Box>\n <Box display={{ xs: 'none', lg: 'block' }}>\n <LeftMenu compact={leftCompact} onToggle={toggleLeft} />\n </Box>\n </Grid>\n <Grid item xs className={classes.mainColumn}>\n <Routes>\n <Route path=\"/\" element={<HomePage />} />\n <Route\n path={questionsRouteRef.path}\n element={<QuestionsPage />}\n />\n <Route path={askRouteRef.path} element={<AskPage />} />\n <Route\n path={articlesRouteRef.path}\n element={<ArticlesPage />}\n />\n <Route path={writeRouteRef.path} element={<WritePage />} />\n <Route path={linksRouteRef.path} element={<LinksPage />} />\n <Route\n path={createLinkRouteRef.path}\n element={<CreateLinkPage />}\n />\n <Route\n path={favoriteQuestionsRouteRef.path}\n element={<FavoritePage />}\n />\n <Route\n path={editQuestionRouteRef.path}\n element={<AskPage />}\n />\n <Route\n path={editArticleRouteRef.path}\n element={<WritePage />}\n />\n <Route\n path={editLinkRouteRef.path}\n element={<CreateLinkPage />}\n />\n <Route\n path={questionRouteRef.path}\n element={<QuestionPage />}\n />\n <Route path={linkRouteRef.path} element={<LinkPage />} />\n <Route\n path={articleRouteRef.path}\n element={<ArticlePage />}\n />\n <Route path={tagsRouteRef.path} element={<TagPage />} />\n <Route path={tagRouteRef.path} element={<TagPage />} />\n <Route path={usersRouteRef.path} element={<UsersPage />} />\n <Route path={userRouteRef.path} element={<UserPage />} />\n <Route\n path={statisticsRouteRef.path}\n element={<StatisticsPage />}\n />\n <Route\n path={collectionsRouteRef.path}\n element={<CollectionsPage />}\n />\n <Route\n path={collectionCreateRouteRef.path}\n element={<CollectionCreatePage />}\n />\n <Route\n path={collectionEditRouteRef.path}\n element={<CollectionCreatePage />}\n />\n <Route\n path={collectionRouteRef.path}\n element={<CollectionPage />}\n />\n <Route\n path={entitiesRouteRef.path}\n element={<EntityPage />}\n />\n <Route path={entityRouteRef.path} element={<EntityPage />} />\n <Route\n path={moderatorRouteRef.path}\n element={<ModeratorPage />}\n />\n <Route path={reviewRouteRef.path} element={<ReviewPage />} />\n <Route\n path={settingsRouteRef.path}\n element={<SettingsPage />}\n />\n </Routes>\n </Grid>\n {!hideRightSidebar && (\n <Grid item className={classes.rightSidebarColumn}>\n <RightContent compact={rightCompact} onToggle={toggleRight} />\n </Grid>\n )}\n </Grid>\n </Container>\n </Content>\n </Page>\n </QetaProvider>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import { useState, useEffect, useCallback, useMemo, Fragment as Fragment$1 } from 'react';
3
3
  import { WarningPanel } from '@backstage/core-components';
4
4
  import { useParams } from 'react-router-dom';
5
- import { qetaTranslationRef, useQetaApi, ContentHeader, AskQuestionButton, ContentHeaderButton, AddToCollectionButton, DraftBanner, DeletedBanner, ObsoleteBanner, QuestionCard, AIAnswerCard, AnswerCard, AnswerForm, RelativeTimeWithTooltip, UpdatedByLink } from '@drodil/backstage-plugin-qeta-react';
5
+ import { qetaTranslationRef, useQetaApi, ContentHeader, FollowPostButton, AskQuestionButton, ContentHeaderButton, AddToCollectionButton, DraftBanner, DeletedBanner, ObsoleteBanner, QuestionCard, AIAnswerCard, AnswerCard, AnswerForm, RelativeTimeWithTooltip, UpdatedByLink } from '@drodil/backstage-plugin-qeta-react';
6
6
  import Comment from '@material-ui/icons/Comment';
7
7
  import { useSignal } from '@backstage/plugin-signals-react';
8
8
  import { makeStyles, Box, Grid, Typography, FormControl, TextField, MenuItem } from '@material-ui/core';
@@ -148,6 +148,7 @@ const QuestionPage = () => {
148
148
  description: getDescription(question),
149
149
  titleIcon: /* @__PURE__ */ jsx(HelpOutline, { fontSize: "large" }),
150
150
  children: [
151
+ /* @__PURE__ */ jsx(FollowPostButton, { post: question }),
151
152
  /* @__PURE__ */ jsx(AskQuestionButton, {}),
152
153
  /* @__PURE__ */ jsx(
153
154
  ContentHeaderButton,