@drodil/backstage-plugin-qeta 3.35.1 → 3.36.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.
- package/dist/components/CreateLinkPage/CreateLinkPage.esm.js +44 -0
- package/dist/components/CreateLinkPage/CreateLinkPage.esm.js.map +1 -0
- package/dist/components/EntityPage/EntityPage.esm.js +4 -24
- package/dist/components/EntityPage/EntityPage.esm.js.map +1 -1
- package/dist/components/FavoritePage/FavoritePage.esm.js +4 -27
- package/dist/components/FavoritePage/FavoritePage.esm.js.map +1 -1
- package/dist/components/HomePage/HomePage.esm.js +3 -2
- package/dist/components/HomePage/HomePage.esm.js.map +1 -1
- package/dist/components/LinkPage/LinkPage.esm.js +110 -0
- package/dist/components/LinkPage/LinkPage.esm.js.map +1 -0
- package/dist/components/LinksPage/LinksPage.esm.js +44 -0
- package/dist/components/LinksPage/LinksPage.esm.js.map +1 -0
- package/dist/components/QetaPage/QetaPage.esm.js +20 -1
- package/dist/components/QetaPage/QetaPage.esm.js.map +1 -1
- package/dist/components/QetaSearchResultListItem/QetaSearchResultListItem.esm.js +8 -5
- package/dist/components/QetaSearchResultListItem/QetaSearchResultListItem.esm.js.map +1 -1
- package/dist/components/Statistics/StatisticsPage.esm.js +3 -2
- package/dist/components/Statistics/StatisticsPage.esm.js.map +1 -1
- package/dist/components/TagPage/TagPage.esm.js +6 -25
- package/dist/components/TagPage/TagPage.esm.js.map +1 -1
- package/dist/components/UserPage/UserPage.esm.js +25 -2
- package/dist/components/UserPage/UserPage.esm.js.map +1 -1
- package/dist/components/UsersPage/UsersPage.esm.js +2 -22
- package/dist/components/UsersPage/UsersPage.esm.js.map +1 -1
- package/dist/package.json.esm.js +1 -1
- package/dist/plugin.esm.js +1 -1
- package/dist/plugin.esm.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useParams, useSearchParams } from 'react-router-dom';
|
|
3
|
+
import { filterTags } from '@drodil/backstage-plugin-qeta-common';
|
|
4
|
+
import { qetaTranslationRef, PostForm } from '@drodil/backstage-plugin-qeta-react';
|
|
5
|
+
import { useEntityPresentation } from '@backstage/plugin-catalog-react';
|
|
6
|
+
import { ContentHeader, InfoCard } from '@backstage/core-components';
|
|
7
|
+
import { Grid } from '@material-ui/core';
|
|
8
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
9
|
+
|
|
10
|
+
const CreateLinkPage = () => {
|
|
11
|
+
const { id } = useParams();
|
|
12
|
+
const [searchParams] = useSearchParams();
|
|
13
|
+
const entity = searchParams.get("entity") ?? void 0;
|
|
14
|
+
const entityPage = searchParams.get("entityPage") === "true";
|
|
15
|
+
const tags = filterTags(searchParams.get("tags"));
|
|
16
|
+
const { t } = useTranslationRef(qetaTranslationRef);
|
|
17
|
+
let title;
|
|
18
|
+
if (id) {
|
|
19
|
+
title = t("createLinkPage.title.existingLink");
|
|
20
|
+
} else if (entity) {
|
|
21
|
+
const representation = useEntityPresentation(entity);
|
|
22
|
+
title = t("createLinkPage.title.entityLink", {
|
|
23
|
+
entity: representation.primaryTitle
|
|
24
|
+
});
|
|
25
|
+
} else {
|
|
26
|
+
title = t("createLinkPage.title.newLink");
|
|
27
|
+
}
|
|
28
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
29
|
+
/* @__PURE__ */ jsx(ContentHeader, { title }),
|
|
30
|
+
/* @__PURE__ */ jsx(Grid, { container: true, spacing: 3, direction: "column", children: /* @__PURE__ */ jsx(Grid, { item: true, children: /* @__PURE__ */ jsx(InfoCard, { children: /* @__PURE__ */ jsx(
|
|
31
|
+
PostForm,
|
|
32
|
+
{
|
|
33
|
+
id,
|
|
34
|
+
entity,
|
|
35
|
+
entityPage,
|
|
36
|
+
tags,
|
|
37
|
+
type: "link"
|
|
38
|
+
}
|
|
39
|
+
) }) }) })
|
|
40
|
+
] });
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export { CreateLinkPage };
|
|
44
|
+
//# sourceMappingURL=CreateLinkPage.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateLinkPage.esm.js","sources":["../../../src/components/CreateLinkPage/CreateLinkPage.tsx"],"sourcesContent":["import { useParams, useSearchParams } from 'react-router-dom';\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport {\n PostForm,\n qetaTranslationRef,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { ContentHeader, InfoCard } from '@backstage/core-components';\nimport { Grid } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const CreateLinkPage = () => {\n const { id } = useParams();\n const [searchParams] = useSearchParams();\n const entity = searchParams.get('entity') ?? undefined;\n const entityPage = searchParams.get('entityPage') === 'true';\n const tags = filterTags(searchParams.get('tags'));\n const { t } = useTranslationRef(qetaTranslationRef);\n let title;\n if (id) {\n title = t('createLinkPage.title.existingLink');\n } else if (entity) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const representation = useEntityPresentation(entity);\n title = t('createLinkPage.title.entityLink', {\n entity: representation.primaryTitle,\n });\n } else {\n title = t('createLinkPage.title.newLink');\n }\n\n return (\n <>\n <ContentHeader title={title} />\n <Grid container spacing={3} direction=\"column\">\n <Grid item>\n <InfoCard>\n <PostForm\n id={id}\n entity={entity}\n entityPage={entityPage}\n tags={tags}\n type=\"link\"\n />\n </InfoCard>\n </Grid>\n </Grid>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAWO,MAAM,iBAAiB,MAAM;AAClC,EAAM,MAAA,EAAE,EAAG,EAAA,GAAI,SAAU,EAAA;AACzB,EAAM,MAAA,CAAC,YAAY,CAAA,GAAI,eAAgB,EAAA;AACvC,EAAA,MAAM,MAAS,GAAA,YAAA,CAAa,GAAI,CAAA,QAAQ,CAAK,IAAA,KAAA,CAAA;AAC7C,EAAA,MAAM,UAAa,GAAA,YAAA,CAAa,GAAI,CAAA,YAAY,CAAM,KAAA,MAAA;AACtD,EAAA,MAAM,IAAO,GAAA,UAAA,CAAW,YAAa,CAAA,GAAA,CAAI,MAAM,CAAC,CAAA;AAChD,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAI,IAAA,KAAA;AACJ,EAAA,IAAI,EAAI,EAAA;AACN,IAAA,KAAA,GAAQ,EAAE,mCAAmC,CAAA;AAAA,aACpC,MAAQ,EAAA;AAEjB,IAAM,MAAA,cAAA,GAAiB,sBAAsB,MAAM,CAAA;AACnD,IAAA,KAAA,GAAQ,EAAE,iCAAmC,EAAA;AAAA,MAC3C,QAAQ,cAAe,CAAA;AAAA,KACxB,CAAA;AAAA,GACI,MAAA;AACL,IAAA,KAAA,GAAQ,EAAE,8BAA8B,CAAA;AAAA;AAG1C,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,iBAAc,KAAc,EAAA,CAAA;AAAA,oBAC5B,GAAA,CAAA,IAAA,EAAA,EAAK,SAAS,EAAA,IAAA,EAAC,OAAS,EAAA,CAAA,EAAG,SAAU,EAAA,QAAA,EACpC,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EACR,8BAAC,QACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,MAAA;AAAA,QACA,UAAA;AAAA,QACA,IAAA;AAAA,QACA,IAAK,EAAA;AAAA;AAAA,KACP,EACF,GACF,CACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -2,7 +2,7 @@ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
|
2
2
|
import { useState, useEffect } from 'react';
|
|
3
3
|
import { ContentHeader } from '@backstage/core-components';
|
|
4
4
|
import { useParams } from 'react-router-dom';
|
|
5
|
-
import { qetaTranslationRef, qetaApiRef, EntityFollowButton, ButtonContainer, AskQuestionButton, WriteArticleButton, PostsGrid, PostsContainer, EntitiesGrid, FollowedEntitiesList, PostHighlightList } from '@drodil/backstage-plugin-qeta-react';
|
|
5
|
+
import { qetaTranslationRef, qetaApiRef, EntityFollowButton, ButtonContainer, AskQuestionButton, WriteArticleButton, CreateLinkButton, PostsGrid, PostsContainer, EntitiesGrid, FollowedEntitiesList, PostHighlightList, PostHighlightListContainer } from '@drodil/backstage-plugin-qeta-react';
|
|
6
6
|
import Whatshot from '@material-ui/icons/Whatshot';
|
|
7
7
|
import { useApi } from '@backstage/core-plugin-api';
|
|
8
8
|
import { EntityRefLink } from '@backstage/plugin-catalog-react';
|
|
@@ -55,7 +55,8 @@ const EntityPage = () => {
|
|
|
55
55
|
] }),
|
|
56
56
|
children: /* @__PURE__ */ jsxs(ButtonContainer, { children: [
|
|
57
57
|
/* @__PURE__ */ jsx(AskQuestionButton, { entity: entityRef }),
|
|
58
|
-
/* @__PURE__ */ jsx(WriteArticleButton, { entity: entityRef })
|
|
58
|
+
/* @__PURE__ */ jsx(WriteArticleButton, { entity: entityRef }),
|
|
59
|
+
/* @__PURE__ */ jsx(CreateLinkButton, { entity: entityRef })
|
|
59
60
|
] })
|
|
60
61
|
}
|
|
61
62
|
),
|
|
@@ -122,28 +123,7 @@ const EntityPage = () => {
|
|
|
122
123
|
}
|
|
123
124
|
)
|
|
124
125
|
] }),
|
|
125
|
-
!resp && /* @__PURE__ */
|
|
126
|
-
/* @__PURE__ */ jsx(
|
|
127
|
-
PostHighlightList,
|
|
128
|
-
{
|
|
129
|
-
type: "hot",
|
|
130
|
-
title: t("highlights.hotQuestions.title"),
|
|
131
|
-
noQuestionsLabel: t("highlights.hotQuestions.noQuestionsLabel"),
|
|
132
|
-
icon: /* @__PURE__ */ jsx(Whatshot, { fontSize: "small" }),
|
|
133
|
-
postType: "question"
|
|
134
|
-
}
|
|
135
|
-
),
|
|
136
|
-
/* @__PURE__ */ jsx(
|
|
137
|
-
PostHighlightList,
|
|
138
|
-
{
|
|
139
|
-
type: "hot",
|
|
140
|
-
title: t("highlights.hotArticles.title"),
|
|
141
|
-
noQuestionsLabel: t("highlights.hotArticles.noArticlesLabel"),
|
|
142
|
-
icon: /* @__PURE__ */ jsx(Whatshot, { fontSize: "small" }),
|
|
143
|
-
postType: "article"
|
|
144
|
-
}
|
|
145
|
-
)
|
|
146
|
-
] })
|
|
126
|
+
!resp && /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(PostHighlightListContainer, {}) })
|
|
147
127
|
] })
|
|
148
128
|
] });
|
|
149
129
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityPage.esm.js","sources":["../../../src/components/EntityPage/EntityPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { ContentHeader } from '@backstage/core-components';\nimport { useParams } from 'react-router-dom';\nimport {\n AskQuestionButton,\n ButtonContainer,\n EntitiesGrid,\n EntityFollowButton,\n FollowedEntitiesList,\n PostHighlightList,\n PostsContainer,\n PostsGrid,\n qetaApiRef,\n qetaTranslationRef,\n ViewType,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport Whatshot from '@material-ui/icons/Whatshot';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { EntityResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport { Card, CardContent, Grid, Typography } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const EntityPage = () => {\n const { entityRef } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n const [resp, setResp] = useState<undefined | EntityResponse>();\n const [view, setView] = useState<ViewType>('list');\n\n const qetaApi = useApi(qetaApiRef);\n\n useEffect(() => {\n if (!entityRef) {\n setResp(undefined);\n return;\n }\n\n qetaApi.getEntity(entityRef).then(res => {\n if (res) {\n setResp(res);\n }\n });\n }, [qetaApi, entityRef]);\n\n let shownTitle: string = t('entitiesPage.defaultTitle');\n let link = undefined;\n if (entityRef) {\n shownTitle = '';\n link = <EntityRefLink entityRef={entityRef} />;\n }\n\n return (\n <Grid container spacing={4}>\n <Grid item md={12} lg={9} xl={10}>\n <ContentHeader\n titleComponent={\n <span style={{ display: 'flex', alignItems: 'center' }}>\n <Typography\n variant=\"h5\"\n component=\"h2\"\n style={{ marginRight: '0.5em' }}\n >\n {shownTitle} {link}\n </Typography>\n {entityRef && <EntityFollowButton entityRef={entityRef} />}\n </span>\n }\n >\n <ButtonContainer>\n <AskQuestionButton entity={entityRef} />\n <WriteArticleButton entity={entityRef} />\n </ButtonContainer>\n </ContentHeader>\n {resp && (\n <Card variant=\"outlined\" style={{ marginBottom: '1em' }}>\n <CardContent>\n <Typography variant=\"caption\">\n {t('common.posts', {\n count: resp.postsCount,\n itemType: 'post',\n })}\n {' · '}\n {t('common.followers', { count: resp.followerCount })}\n </Typography>\n </CardContent>\n </Card>\n )}\n {entityRef &&\n (view === 'grid' ? (\n <PostsGrid\n entity={entityRef}\n filterPanelProps={{ showEntityFilter: false }}\n view={view}\n onViewChange={setView}\n />\n ) : (\n <PostsContainer\n entity={entityRef}\n filterPanelProps={{ showEntityFilter: false }}\n view={view}\n showTypeLabel\n onViewChange={setView}\n />\n ))}\n {!entityRef && <EntitiesGrid />}\n </Grid>\n <Grid item lg={3} xl={2}>\n <FollowedEntitiesList />\n {resp && (\n <>\n <PostHighlightList\n type=\"hot\"\n title={t('highlights.hotQuestions.title')}\n noQuestionsLabel={t('highlights.hotQuestions.noQuestionsLabel')}\n icon={<Whatshot fontSize=\"small\" />}\n options={{ entities: [resp.entityRef] }}\n postType=\"question\"\n />\n <PostHighlightList\n type=\"unanswered\"\n title={t('highlights.unanswered.title')}\n noQuestionsLabel={t('highlights.unanswered.noQuestionsLabel')}\n options={{ entities: [resp.entityRef] }}\n postType=\"question\"\n />\n <PostHighlightList\n type=\"incorrect\"\n title={t('highlights.incorrect.title')}\n noQuestionsLabel={t('highlights.incorrect.noQuestionsLabel')}\n options={{ entities: [resp.entityRef] }}\n postType=\"question\"\n />\n </>\n )}\n {!resp && (\n <>\n <
|
|
1
|
+
{"version":3,"file":"EntityPage.esm.js","sources":["../../../src/components/EntityPage/EntityPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { ContentHeader } from '@backstage/core-components';\nimport { useParams } from 'react-router-dom';\nimport {\n AskQuestionButton,\n ButtonContainer,\n CreateLinkButton,\n EntitiesGrid,\n EntityFollowButton,\n FollowedEntitiesList,\n PostHighlightList,\n PostHighlightListContainer,\n PostsContainer,\n PostsGrid,\n qetaApiRef,\n qetaTranslationRef,\n ViewType,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport Whatshot from '@material-ui/icons/Whatshot';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { EntityResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport { Card, CardContent, Grid, Typography } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const EntityPage = () => {\n const { entityRef } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n const [resp, setResp] = useState<undefined | EntityResponse>();\n const [view, setView] = useState<ViewType>('list');\n\n const qetaApi = useApi(qetaApiRef);\n\n useEffect(() => {\n if (!entityRef) {\n setResp(undefined);\n return;\n }\n\n qetaApi.getEntity(entityRef).then(res => {\n if (res) {\n setResp(res);\n }\n });\n }, [qetaApi, entityRef]);\n\n let shownTitle: string = t('entitiesPage.defaultTitle');\n let link = undefined;\n if (entityRef) {\n shownTitle = '';\n link = <EntityRefLink entityRef={entityRef} />;\n }\n\n return (\n <Grid container spacing={4}>\n <Grid item md={12} lg={9} xl={10}>\n <ContentHeader\n titleComponent={\n <span style={{ display: 'flex', alignItems: 'center' }}>\n <Typography\n variant=\"h5\"\n component=\"h2\"\n style={{ marginRight: '0.5em' }}\n >\n {shownTitle} {link}\n </Typography>\n {entityRef && <EntityFollowButton entityRef={entityRef} />}\n </span>\n }\n >\n <ButtonContainer>\n <AskQuestionButton entity={entityRef} />\n <WriteArticleButton entity={entityRef} />\n <CreateLinkButton entity={entityRef} />\n </ButtonContainer>\n </ContentHeader>\n {resp && (\n <Card variant=\"outlined\" style={{ marginBottom: '1em' }}>\n <CardContent>\n <Typography variant=\"caption\">\n {t('common.posts', {\n count: resp.postsCount,\n itemType: 'post',\n })}\n {' · '}\n {t('common.followers', { count: resp.followerCount })}\n </Typography>\n </CardContent>\n </Card>\n )}\n {entityRef &&\n (view === 'grid' ? (\n <PostsGrid\n entity={entityRef}\n filterPanelProps={{ showEntityFilter: false }}\n view={view}\n onViewChange={setView}\n />\n ) : (\n <PostsContainer\n entity={entityRef}\n filterPanelProps={{ showEntityFilter: false }}\n view={view}\n showTypeLabel\n onViewChange={setView}\n />\n ))}\n {!entityRef && <EntitiesGrid />}\n </Grid>\n <Grid item lg={3} xl={2}>\n <FollowedEntitiesList />\n {resp && (\n <>\n <PostHighlightList\n type=\"hot\"\n title={t('highlights.hotQuestions.title')}\n noQuestionsLabel={t('highlights.hotQuestions.noQuestionsLabel')}\n icon={<Whatshot fontSize=\"small\" />}\n options={{ entities: [resp.entityRef] }}\n postType=\"question\"\n />\n <PostHighlightList\n type=\"unanswered\"\n title={t('highlights.unanswered.title')}\n noQuestionsLabel={t('highlights.unanswered.noQuestionsLabel')}\n options={{ entities: [resp.entityRef] }}\n postType=\"question\"\n />\n <PostHighlightList\n type=\"incorrect\"\n title={t('highlights.incorrect.title')}\n noQuestionsLabel={t('highlights.incorrect.noQuestionsLabel')}\n options={{ entities: [resp.entityRef] }}\n postType=\"question\"\n />\n </>\n )}\n {!resp && (\n <>\n <PostHighlightListContainer />\n </>\n )}\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AA0BO,MAAM,aAAa,MAAM;AAC9B,EAAM,MAAA,EAAE,SAAU,EAAA,GAAI,SAAU,EAAA;AAChC,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,QAAqC,EAAA;AAC7D,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAmB,MAAM,CAAA;AAEjD,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA;AAEjC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,SAAW,EAAA;AACd,MAAA,OAAA,CAAQ,KAAS,CAAA,CAAA;AACjB,MAAA;AAAA;AAGF,IAAA,OAAA,CAAQ,SAAU,CAAA,SAAS,CAAE,CAAA,IAAA,CAAK,CAAO,GAAA,KAAA;AACvC,MAAA,IAAI,GAAK,EAAA;AACP,QAAA,OAAA,CAAQ,GAAG,CAAA;AAAA;AACb,KACD,CAAA;AAAA,GACA,EAAA,CAAC,OAAS,EAAA,SAAS,CAAC,CAAA;AAEvB,EAAI,IAAA,UAAA,GAAqB,EAAE,2BAA2B,CAAA;AACtD,EAAA,IAAI,IAAO,GAAA,KAAA,CAAA;AACX,EAAA,IAAI,SAAW,EAAA;AACb,IAAa,UAAA,GAAA,EAAA;AACb,IAAO,IAAA,mBAAA,GAAA,CAAC,iBAAc,SAAsB,EAAA,CAAA;AAAA;AAG9C,EAAA,uBACG,IAAA,CAAA,IAAA,EAAA,EAAK,SAAS,EAAA,IAAA,EAAC,SAAS,CACvB,EAAA,QAAA,EAAA;AAAA,oBAAC,IAAA,CAAA,IAAA,EAAA,EAAK,MAAI,IAAC,EAAA,EAAA,EAAI,IAAI,EAAI,EAAA,CAAA,EAAG,IAAI,EAC5B,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,cAAA,uBACG,MAAK,EAAA,EAAA,KAAA,EAAO,EAAE,OAAS,EAAA,MAAA,EAAQ,UAAY,EAAA,QAAA,EAC1C,EAAA,QAAA,EAAA;AAAA,4BAAA,IAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,OAAQ,EAAA,IAAA;AAAA,gBACR,SAAU,EAAA,IAAA;AAAA,gBACV,KAAA,EAAO,EAAE,WAAA,EAAa,OAAQ,EAAA;AAAA,gBAE7B,QAAA,EAAA;AAAA,kBAAA,UAAA;AAAA,kBAAW,GAAA;AAAA,kBAAE;AAAA;AAAA;AAAA,aAChB;AAAA,YACC,SAAA,oBAAc,GAAA,CAAA,kBAAA,EAAA,EAAmB,SAAsB,EAAA;AAAA,WAC1D,EAAA,CAAA;AAAA,UAGF,+BAAC,eACC,EAAA,EAAA,QAAA,EAAA;AAAA,4BAAC,GAAA,CAAA,iBAAA,EAAA,EAAkB,QAAQ,SAAW,EAAA,CAAA;AAAA,4BACtC,GAAA,CAAC,kBAAmB,EAAA,EAAA,MAAA,EAAQ,SAAW,EAAA,CAAA;AAAA,4BACvC,GAAA,CAAC,gBAAiB,EAAA,EAAA,MAAA,EAAQ,SAAW,EAAA;AAAA,WACvC,EAAA;AAAA;AAAA,OACF;AAAA,MACC,IACC,oBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,OAAA,EAAQ,YAAW,KAAO,EAAA,EAAE,YAAc,EAAA,KAAA,IAC9C,QAAC,kBAAA,GAAA,CAAA,WAAA,EAAA,EACC,QAAC,kBAAA,IAAA,CAAA,UAAA,EAAA,EAAW,SAAQ,SACjB,EAAA,QAAA,EAAA;AAAA,QAAA,CAAA,CAAE,cAAgB,EAAA;AAAA,UACjB,OAAO,IAAK,CAAA,UAAA;AAAA,UACZ,QAAU,EAAA;AAAA,SACX,CAAA;AAAA,QACA,QAAA;AAAA,QACA,EAAE,kBAAoB,EAAA,EAAE,KAAO,EAAA,IAAA,CAAK,eAAe;AAAA,OAAA,EACtD,GACF,CACF,EAAA,CAAA;AAAA,MAED,SAAA,KACE,SAAS,MACR,mBAAA,GAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,MAAQ,EAAA,SAAA;AAAA,UACR,gBAAA,EAAkB,EAAE,gBAAA,EAAkB,KAAM,EAAA;AAAA,UAC5C,IAAA;AAAA,UACA,YAAc,EAAA;AAAA;AAAA,OAGhB,mBAAA,GAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,MAAQ,EAAA,SAAA;AAAA,UACR,gBAAA,EAAkB,EAAE,gBAAA,EAAkB,KAAM,EAAA;AAAA,UAC5C,IAAA;AAAA,UACA,aAAa,EAAA,IAAA;AAAA,UACb,YAAc,EAAA;AAAA;AAAA,OAChB,CAAA;AAAA,MAEH,CAAC,SAAa,oBAAA,GAAA,CAAC,YAAa,EAAA,EAAA;AAAA,KAC/B,EAAA,CAAA;AAAA,yBACC,IAAK,EAAA,EAAA,IAAA,EAAI,MAAC,EAAI,EAAA,CAAA,EAAG,IAAI,CACpB,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,oBAAqB,EAAA,EAAA,CAAA;AAAA,MACrB,wBAEG,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YACC,IAAK,EAAA,KAAA;AAAA,YACL,KAAA,EAAO,EAAE,+BAA+B,CAAA;AAAA,YACxC,gBAAA,EAAkB,EAAE,0CAA0C,CAAA;AAAA,YAC9D,IAAM,kBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,CAAA;AAAA,YACjC,SAAS,EAAE,QAAA,EAAU,CAAC,IAAA,CAAK,SAAS,CAAE,EAAA;AAAA,YACtC,QAAS,EAAA;AAAA;AAAA,SACX;AAAA,wBACA,GAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YACC,IAAK,EAAA,YAAA;AAAA,YACL,KAAA,EAAO,EAAE,6BAA6B,CAAA;AAAA,YACtC,gBAAA,EAAkB,EAAE,wCAAwC,CAAA;AAAA,YAC5D,SAAS,EAAE,QAAA,EAAU,CAAC,IAAA,CAAK,SAAS,CAAE,EAAA;AAAA,YACtC,QAAS,EAAA;AAAA;AAAA,SACX;AAAA,wBACA,GAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YACC,IAAK,EAAA,WAAA;AAAA,YACL,KAAA,EAAO,EAAE,4BAA4B,CAAA;AAAA,YACrC,gBAAA,EAAkB,EAAE,uCAAuC,CAAA;AAAA,YAC3D,SAAS,EAAE,QAAA,EAAU,CAAC,IAAA,CAAK,SAAS,CAAE,EAAA;AAAA,YACtC,QAAS,EAAA;AAAA;AAAA;AACX,OACF,EAAA,CAAA;AAAA,MAED,CAAC,IAAA,oBAEE,GAAA,CAAA,QAAA,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,8BAA2B,CAC9B,EAAA;AAAA,KAEJ,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { ContentHeader } from '@backstage/core-components';
|
|
3
|
-
import { qetaTranslationRef, ButtonContainer, AskQuestionButton, WriteArticleButton, PostsGrid, PostsContainer,
|
|
4
|
-
import Whatshot from '@material-ui/icons/Whatshot';
|
|
3
|
+
import { qetaTranslationRef, ButtonContainer, AskQuestionButton, WriteArticleButton, CreateLinkButton, PostsGrid, PostsContainer, PostHighlightListContainer } from '@drodil/backstage-plugin-qeta-react';
|
|
5
4
|
import { Grid } from '@material-ui/core';
|
|
6
5
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
7
6
|
import { useState } from 'react';
|
|
@@ -13,7 +12,8 @@ const FavoritePage = () => {
|
|
|
13
12
|
/* @__PURE__ */ jsxs(Grid, { item: true, md: 12, lg: 9, xl: 10, children: [
|
|
14
13
|
/* @__PURE__ */ jsx(ContentHeader, { title: t("favoritePage.title"), children: /* @__PURE__ */ jsxs(ButtonContainer, { children: [
|
|
15
14
|
/* @__PURE__ */ jsx(AskQuestionButton, {}),
|
|
16
|
-
/* @__PURE__ */ jsx(WriteArticleButton, {})
|
|
15
|
+
/* @__PURE__ */ jsx(WriteArticleButton, {}),
|
|
16
|
+
/* @__PURE__ */ jsx(CreateLinkButton, {})
|
|
17
17
|
] }) }),
|
|
18
18
|
view === "grid" ? /* @__PURE__ */ jsx(
|
|
19
19
|
PostsGrid,
|
|
@@ -34,30 +34,7 @@ const FavoritePage = () => {
|
|
|
34
34
|
}
|
|
35
35
|
)
|
|
36
36
|
] }),
|
|
37
|
-
/* @__PURE__ */
|
|
38
|
-
/* @__PURE__ */ jsx(
|
|
39
|
-
PostHighlightList,
|
|
40
|
-
{
|
|
41
|
-
type: "hot",
|
|
42
|
-
title: t("highlights.hotQuestions.title"),
|
|
43
|
-
noQuestionsLabel: t("highlights.hotQuestions.noQuestionsLabel"),
|
|
44
|
-
icon: /* @__PURE__ */ jsx(Whatshot, { fontSize: "small" }),
|
|
45
|
-
options: { favorite: true },
|
|
46
|
-
postType: "question"
|
|
47
|
-
}
|
|
48
|
-
),
|
|
49
|
-
/* @__PURE__ */ jsx(
|
|
50
|
-
PostHighlightList,
|
|
51
|
-
{
|
|
52
|
-
type: "hot",
|
|
53
|
-
title: t("highlights.hotArticles.title"),
|
|
54
|
-
noQuestionsLabel: t("highlights.hotArticles.noArticlesLabel"),
|
|
55
|
-
icon: /* @__PURE__ */ jsx(Whatshot, { fontSize: "small" }),
|
|
56
|
-
options: { favorite: true },
|
|
57
|
-
postType: "article"
|
|
58
|
-
}
|
|
59
|
-
)
|
|
60
|
-
] })
|
|
37
|
+
/* @__PURE__ */ jsx(Grid, { item: true, lg: 3, xl: 2, children: /* @__PURE__ */ jsx(PostHighlightListContainer, { options: { favorite: true } }) })
|
|
61
38
|
] });
|
|
62
39
|
};
|
|
63
40
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FavoritePage.esm.js","sources":["../../../src/components/FavoritePage/FavoritePage.tsx"],"sourcesContent":["import { ContentHeader } from '@backstage/core-components';\nimport {\n AskQuestionButton,\n ButtonContainer,\n
|
|
1
|
+
{"version":3,"file":"FavoritePage.esm.js","sources":["../../../src/components/FavoritePage/FavoritePage.tsx"],"sourcesContent":["import { ContentHeader } from '@backstage/core-components';\nimport {\n AskQuestionButton,\n ButtonContainer,\n CreateLinkButton,\n PostHighlightListContainer,\n PostsContainer,\n PostsGrid,\n qetaTranslationRef,\n ViewType,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Grid } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { useState } from 'react';\n\nexport const FavoritePage = () => {\n const [view, setView] = useState<ViewType>('list');\n const { t } = useTranslationRef(qetaTranslationRef);\n return (\n <Grid container spacing={4}>\n <Grid item md={12} lg={9} xl={10}>\n <ContentHeader title={t('favoritePage.title')}>\n <ButtonContainer>\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ButtonContainer>\n </ContentHeader>\n {view === 'grid' ? (\n <PostsGrid\n favorite\n showNoQuestionsBtn={false}\n view={view}\n onViewChange={setView}\n />\n ) : (\n <PostsContainer\n favorite\n showNoQuestionsBtn={false}\n showTypeLabel\n view={view}\n onViewChange={setView}\n />\n )}\n </Grid>\n <Grid item lg={3} xl={2}>\n <PostHighlightListContainer options={{ favorite: true }} />\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAgBO,MAAM,eAAe,MAAM;AAChC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAmB,MAAM,CAAA;AACjD,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,uBACG,IAAA,CAAA,IAAA,EAAA,EAAK,SAAS,EAAA,IAAA,EAAC,SAAS,CACvB,EAAA,QAAA,EAAA;AAAA,oBAAC,IAAA,CAAA,IAAA,EAAA,EAAK,MAAI,IAAC,EAAA,EAAA,EAAI,IAAI,EAAI,EAAA,CAAA,EAAG,IAAI,EAC5B,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,iBAAc,KAAO,EAAA,CAAA,CAAE,oBAAoB,CAAA,EAC1C,+BAAC,eACC,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,iBAAkB,EAAA,EAAA,CAAA;AAAA,4BAClB,kBAAmB,EAAA,EAAA,CAAA;AAAA,4BACnB,gBAAiB,EAAA,EAAA;AAAA,OAAA,EACpB,CACF,EAAA,CAAA;AAAA,MACC,SAAS,MACR,mBAAA,GAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,QAAQ,EAAA,IAAA;AAAA,UACR,kBAAoB,EAAA,KAAA;AAAA,UACpB,IAAA;AAAA,UACA,YAAc,EAAA;AAAA;AAAA,OAGhB,mBAAA,GAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,QAAQ,EAAA,IAAA;AAAA,UACR,kBAAoB,EAAA,KAAA;AAAA,UACpB,aAAa,EAAA,IAAA;AAAA,UACb,IAAA;AAAA,UACA,YAAc,EAAA;AAAA;AAAA;AAChB,KAEJ,EAAA,CAAA;AAAA,oBACC,GAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,IAAI,CAAG,EAAA,EAAA,EAAI,CACpB,EAAA,QAAA,kBAAA,GAAA,CAAC,8BAA2B,OAAS,EAAA,EAAE,QAAU,EAAA,IAAA,IAAQ,CAC3D,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { ContentHeader } from '@backstage/core-components';
|
|
3
|
-
import { qetaTranslationRef, useIdentityApi, ButtonContainer, AskQuestionButton, WriteArticleButton, SuggestionsCard, PostsCard, ImpactCard, FollowedTagsList, FollowedEntitiesList, FollowedCollectionsList } from '@drodil/backstage-plugin-qeta-react';
|
|
3
|
+
import { qetaTranslationRef, useIdentityApi, ButtonContainer, AskQuestionButton, WriteArticleButton, CreateLinkButton, SuggestionsCard, PostsCard, ImpactCard, FollowedTagsList, FollowedEntitiesList, FollowedCollectionsList } from '@drodil/backstage-plugin-qeta-react';
|
|
4
4
|
import { Grid } from '@material-ui/core';
|
|
5
5
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
6
6
|
|
|
@@ -15,7 +15,8 @@ const HomePage = () => {
|
|
|
15
15
|
/* @__PURE__ */ jsxs(Grid, { item: true, md: 12, lg: 9, xl: 10, children: [
|
|
16
16
|
/* @__PURE__ */ jsx(ContentHeader, { title: t("homePage.title"), children: /* @__PURE__ */ jsxs(ButtonContainer, { children: [
|
|
17
17
|
/* @__PURE__ */ jsx(AskQuestionButton, {}),
|
|
18
|
-
/* @__PURE__ */ jsx(WriteArticleButton, {})
|
|
18
|
+
/* @__PURE__ */ jsx(WriteArticleButton, {}),
|
|
19
|
+
/* @__PURE__ */ jsx(CreateLinkButton, {})
|
|
19
20
|
] }) }),
|
|
20
21
|
/* @__PURE__ */ jsxs(Grid, { container: true, children: [
|
|
21
22
|
/* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(SuggestionsCard, {}) }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HomePage.esm.js","sources":["../../../src/components/HomePage/HomePage.tsx"],"sourcesContent":["import { ContentHeader } from '@backstage/core-components';\nimport {\n AskQuestionButton,\n ButtonContainer,\n FollowedCollectionsList,\n FollowedEntitiesList,\n FollowedTagsList,\n ImpactCard,\n PostsCard,\n qetaTranslationRef,\n SuggestionsCard,\n useIdentityApi,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Grid } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const HomePage = () => {\n const { t } = useTranslationRef(qetaTranslationRef);\n const {\n value: user,\n loading: loadingUser,\n error: userError,\n } = useIdentityApi(api => api.getBackstageIdentity(), []);\n\n return (\n <Grid container spacing={4}>\n <Grid item md={12} lg={9} xl={10}>\n <ContentHeader title={t('homePage.title')}>\n <ButtonContainer>\n <AskQuestionButton />\n <WriteArticleButton />\n </ButtonContainer>\n </ContentHeader>\n <Grid container>\n <Grid item xs={12}>\n <SuggestionsCard />\n </Grid>\n <Grid item xs={12}>\n <PostsCard\n title={t('highlights.unanswered.title')}\n options={{ noAnswers: true, random: true, type: 'question' }}\n postType=\"question\"\n />\n </Grid>\n {user && !loadingUser && !userError && (\n <Grid item xs={12}>\n <PostsCard\n title={t('highlights.own.title')}\n options={{ author: user.userEntityRef }}\n postType=\"question\"\n />\n </Grid>\n )}\n </Grid>\n </Grid>\n <Grid item lg={3} xl={2}>\n <ImpactCard />\n <FollowedTagsList />\n <FollowedEntitiesList />\n <FollowedCollectionsList />\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"HomePage.esm.js","sources":["../../../src/components/HomePage/HomePage.tsx"],"sourcesContent":["import { ContentHeader } from '@backstage/core-components';\nimport {\n AskQuestionButton,\n ButtonContainer,\n FollowedCollectionsList,\n FollowedEntitiesList,\n FollowedTagsList,\n ImpactCard,\n PostsCard,\n qetaTranslationRef,\n SuggestionsCard,\n useIdentityApi,\n WriteArticleButton,\n CreateLinkButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Grid } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const HomePage = () => {\n const { t } = useTranslationRef(qetaTranslationRef);\n const {\n value: user,\n loading: loadingUser,\n error: userError,\n } = useIdentityApi(api => api.getBackstageIdentity(), []);\n\n return (\n <Grid container spacing={4}>\n <Grid item md={12} lg={9} xl={10}>\n <ContentHeader title={t('homePage.title')}>\n <ButtonContainer>\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ButtonContainer>\n </ContentHeader>\n <Grid container>\n <Grid item xs={12}>\n <SuggestionsCard />\n </Grid>\n <Grid item xs={12}>\n <PostsCard\n title={t('highlights.unanswered.title')}\n options={{ noAnswers: true, random: true, type: 'question' }}\n postType=\"question\"\n />\n </Grid>\n {user && !loadingUser && !userError && (\n <Grid item xs={12}>\n <PostsCard\n title={t('highlights.own.title')}\n options={{ author: user.userEntityRef }}\n postType=\"question\"\n />\n </Grid>\n )}\n </Grid>\n </Grid>\n <Grid item lg={3} xl={2}>\n <ImpactCard />\n <FollowedTagsList />\n <FollowedEntitiesList />\n <FollowedCollectionsList />\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;;;AAkBO,MAAM,WAAW,MAAM;AAC5B,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAM,MAAA;AAAA,IACJ,KAAO,EAAA,IAAA;AAAA,IACP,OAAS,EAAA,WAAA;AAAA,IACT,KAAO,EAAA;AAAA,MACL,cAAe,CAAA,CAAA,GAAA,KAAO,IAAI,oBAAqB,EAAA,EAAG,EAAE,CAAA;AAExD,EAAA,uBACG,IAAA,CAAA,IAAA,EAAA,EAAK,SAAS,EAAA,IAAA,EAAC,SAAS,CACvB,EAAA,QAAA,EAAA;AAAA,oBAAC,IAAA,CAAA,IAAA,EAAA,EAAK,MAAI,IAAC,EAAA,EAAA,EAAI,IAAI,EAAI,EAAA,CAAA,EAAG,IAAI,EAC5B,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,iBAAc,KAAO,EAAA,CAAA,CAAE,gBAAgB,CAAA,EACtC,+BAAC,eACC,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,iBAAkB,EAAA,EAAA,CAAA;AAAA,4BAClB,kBAAmB,EAAA,EAAA,CAAA;AAAA,4BACnB,gBAAiB,EAAA,EAAA;AAAA,OAAA,EACpB,CACF,EAAA,CAAA;AAAA,sBACA,IAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAS,IACb,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QAAK,IAAI,EAAA,IAAA,EAAC,IAAI,EACb,EAAA,QAAA,kBAAA,GAAA,CAAC,mBAAgB,CACnB,EAAA,CAAA;AAAA,wBACC,GAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,IAAI,EACb,EAAA,QAAA,kBAAA,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,EAAE,6BAA6B,CAAA;AAAA,YACtC,SAAS,EAAE,SAAA,EAAW,MAAM,MAAQ,EAAA,IAAA,EAAM,MAAM,UAAW,EAAA;AAAA,YAC3D,QAAS,EAAA;AAAA;AAAA,SAEb,EAAA,CAAA;AAAA,QACC,IAAA,IAAQ,CAAC,WAAA,IAAe,CAAC,SAAA,wBACvB,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,EACb,EAAA,QAAA,kBAAA,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,EAAE,sBAAsB,CAAA;AAAA,YAC/B,OAAS,EAAA,EAAE,MAAQ,EAAA,IAAA,CAAK,aAAc,EAAA;AAAA,YACtC,QAAS,EAAA;AAAA;AAAA,SAEb,EAAA;AAAA,OAEJ,EAAA;AAAA,KACF,EAAA,CAAA;AAAA,yBACC,IAAK,EAAA,EAAA,IAAA,EAAI,MAAC,EAAI,EAAA,CAAA,EAAG,IAAI,CACpB,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,CAAA;AAAA,0BACX,gBAAiB,EAAA,EAAA,CAAA;AAAA,0BACjB,oBAAqB,EAAA,EAAA,CAAA;AAAA,0BACrB,uBAAwB,EAAA,EAAA;AAAA,KAC3B,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { useState, useEffect } from 'react';
|
|
4
|
+
import { useParams } from 'react-router-dom';
|
|
5
|
+
import { useSignal } from '@backstage/plugin-signals-react';
|
|
6
|
+
import { WarningPanel, ContentHeader } from '@backstage/core-components';
|
|
7
|
+
import { qetaApiRef, qetaTranslationRef, useQetaApi, FaviconItem, ButtonContainer, CreateLinkButton, AddToCollectionButton, DraftBanner, DeletedBanner, LinkCard, RelativeTimeWithTooltip, UpdatedByLink } from '@drodil/backstage-plugin-qeta-react';
|
|
8
|
+
import { Skeleton } from '@material-ui/lab';
|
|
9
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
10
|
+
import { makeStyles, Box } from '@material-ui/core';
|
|
11
|
+
import { useApi } from '@backstage/core-plugin-api';
|
|
12
|
+
|
|
13
|
+
const useDescriptionStyles = makeStyles(
|
|
14
|
+
() => ({
|
|
15
|
+
root: {},
|
|
16
|
+
box: {
|
|
17
|
+
display: "inline"
|
|
18
|
+
}
|
|
19
|
+
}),
|
|
20
|
+
{ name: "QetaDescription" }
|
|
21
|
+
);
|
|
22
|
+
const LinkPage = () => {
|
|
23
|
+
const { id } = useParams();
|
|
24
|
+
const qetaApi = useApi(qetaApiRef);
|
|
25
|
+
const { t } = useTranslationRef(qetaTranslationRef);
|
|
26
|
+
const dStyles = useDescriptionStyles();
|
|
27
|
+
const [score, setScore] = useState(0);
|
|
28
|
+
const { lastSignal } = useSignal(`qeta:post_${id}`);
|
|
29
|
+
const {
|
|
30
|
+
value: post,
|
|
31
|
+
loading,
|
|
32
|
+
error
|
|
33
|
+
} = useQetaApi((api) => api.getPost(id), [id]);
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
if (post) {
|
|
36
|
+
setScore(post.score);
|
|
37
|
+
}
|
|
38
|
+
}, [post]);
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
if (lastSignal?.type === "post_stats") {
|
|
41
|
+
setScore(lastSignal.score);
|
|
42
|
+
}
|
|
43
|
+
}, [lastSignal]);
|
|
44
|
+
if (loading) {
|
|
45
|
+
return /* @__PURE__ */ jsx(Skeleton, { variant: "rect", height: 200 });
|
|
46
|
+
}
|
|
47
|
+
if (error || post === void 0) {
|
|
48
|
+
return /* @__PURE__ */ jsx(WarningPanel, { severity: "error", title: t("linkPage.errorLoading"), children: error?.message });
|
|
49
|
+
}
|
|
50
|
+
if (post.type !== "link") {
|
|
51
|
+
return /* @__PURE__ */ jsx(WarningPanel, { title: "Not found", message: t("linkPage.notFound") });
|
|
52
|
+
}
|
|
53
|
+
const getDescription = (q) => {
|
|
54
|
+
return /* @__PURE__ */ jsxs("span", { className: dStyles.root, children: [
|
|
55
|
+
/* @__PURE__ */ jsxs(Box, { fontWeight: "fontWeightMedium", className: dStyles.box, children: [
|
|
56
|
+
t("authorBox.postedAtTime"),
|
|
57
|
+
" ",
|
|
58
|
+
/* @__PURE__ */ jsx(RelativeTimeWithTooltip, { value: q.created }),
|
|
59
|
+
" \xB7 "
|
|
60
|
+
] }),
|
|
61
|
+
q.updated && /* @__PURE__ */ jsx(React.Fragment, { children: /* @__PURE__ */ jsxs(Box, { fontWeight: "fontWeightMedium", className: dStyles.box, children: [
|
|
62
|
+
t("authorBox.updatedAtTime"),
|
|
63
|
+
" ",
|
|
64
|
+
/* @__PURE__ */ jsx(RelativeTimeWithTooltip, { value: q.updated }),
|
|
65
|
+
" ",
|
|
66
|
+
t("authorBox.updatedBy"),
|
|
67
|
+
" ",
|
|
68
|
+
/* @__PURE__ */ jsx(UpdatedByLink, { entity: q }),
|
|
69
|
+
" \xB7 "
|
|
70
|
+
] }) }),
|
|
71
|
+
/* @__PURE__ */ jsx(Box, { fontWeight: "fontWeightMedium", className: dStyles.box, children: t("common.clicksCount", { count: score }) })
|
|
72
|
+
] });
|
|
73
|
+
};
|
|
74
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
75
|
+
/* @__PURE__ */ jsx(
|
|
76
|
+
ContentHeader,
|
|
77
|
+
{
|
|
78
|
+
title: post.url ? /* @__PURE__ */ jsxs(Box, { display: "flex", alignItems: "center", children: [
|
|
79
|
+
/* @__PURE__ */ jsx(FaviconItem, { entity: post }),
|
|
80
|
+
/* @__PURE__ */ jsx(
|
|
81
|
+
"a",
|
|
82
|
+
{
|
|
83
|
+
href: post.url,
|
|
84
|
+
target: "_blank",
|
|
85
|
+
rel: "noopener noreferrer",
|
|
86
|
+
style: { color: "inherit", textDecoration: "none" },
|
|
87
|
+
"data-testid": "link-title",
|
|
88
|
+
onClick: (event) => {
|
|
89
|
+
event.stopPropagation();
|
|
90
|
+
qetaApi.clickLink(post.id);
|
|
91
|
+
},
|
|
92
|
+
children: post.title
|
|
93
|
+
}
|
|
94
|
+
)
|
|
95
|
+
] }) : post.title,
|
|
96
|
+
description: getDescription(post),
|
|
97
|
+
children: /* @__PURE__ */ jsxs(ButtonContainer, { children: [
|
|
98
|
+
/* @__PURE__ */ jsx(CreateLinkButton, {}),
|
|
99
|
+
/* @__PURE__ */ jsx(AddToCollectionButton, { post })
|
|
100
|
+
] })
|
|
101
|
+
}
|
|
102
|
+
),
|
|
103
|
+
post.status === "draft" && /* @__PURE__ */ jsx(DraftBanner, {}),
|
|
104
|
+
post.status === "deleted" && /* @__PURE__ */ jsx(DeletedBanner, {}),
|
|
105
|
+
/* @__PURE__ */ jsx(LinkCard, { link: post })
|
|
106
|
+
] });
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export { LinkPage };
|
|
110
|
+
//# sourceMappingURL=LinkPage.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinkPage.esm.js","sources":["../../../src/components/LinkPage/LinkPage.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useParams } from 'react-router-dom';\nimport { useEffect, useState } from 'react';\nimport { useSignal } from '@backstage/plugin-signals-react';\nimport { ContentHeader, WarningPanel } from '@backstage/core-components';\nimport { PostResponse, QetaSignal } from '@drodil/backstage-plugin-qeta-common';\nimport {\n AddToCollectionButton,\n ButtonContainer,\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 <React.Fragment>\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 </React.Fragment>\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 // @ts-ignore, it can accept a react node, like description.\n title={\n post.url ? (\n <Box display=\"flex\" alignItems=\"center\">\n <FaviconItem entity={post} />\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 </Box>\n ) : (\n post.title\n )\n }\n // @ts-ignore, it can accept a react node. See QuestionPage.\n description={getDescription(post)}\n >\n <ButtonContainer>\n <CreateLinkButton />\n <AddToCollectionButton post={post} />\n </ButtonContainer>\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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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useSearchParams } from 'react-router-dom';
|
|
3
|
+
import { useState, useEffect } from 'react';
|
|
4
|
+
import { ContentHeader } from '@backstage/core-components';
|
|
5
|
+
import { qetaTranslationRef, ButtonContainer, CreateLinkButton, PostsGrid, PostsContainer, PostHighlightList, FollowedTagsList, FollowedEntitiesList } from '@drodil/backstage-plugin-qeta-react';
|
|
6
|
+
import { filterTags } from '@drodil/backstage-plugin-qeta-common';
|
|
7
|
+
import Whatshot from '@material-ui/icons/Whatshot';
|
|
8
|
+
import { Grid } from '@material-ui/core';
|
|
9
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
10
|
+
|
|
11
|
+
const LinksPage = () => {
|
|
12
|
+
const [searchParams] = useSearchParams();
|
|
13
|
+
const [view, setView] = useState("list");
|
|
14
|
+
const [entityRef, setEntityRef] = useState(void 0);
|
|
15
|
+
const [tags, setTags] = useState(void 0);
|
|
16
|
+
const { t } = useTranslationRef(qetaTranslationRef);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
setEntityRef(searchParams.get("entity") ?? void 0);
|
|
19
|
+
setTags(filterTags(searchParams.get("tags")));
|
|
20
|
+
}, [searchParams, setEntityRef]);
|
|
21
|
+
return /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 4, children: [
|
|
22
|
+
/* @__PURE__ */ jsxs(Grid, { item: true, md: 12, lg: 9, xl: 10, children: [
|
|
23
|
+
/* @__PURE__ */ jsx(ContentHeader, { title: t("linksPage.title"), children: /* @__PURE__ */ jsx(ButtonContainer, { children: /* @__PURE__ */ jsx(CreateLinkButton, { entity: entityRef, tags }) }) }),
|
|
24
|
+
view === "grid" ? /* @__PURE__ */ jsx(PostsGrid, { type: "link", view, onViewChange: setView }) : /* @__PURE__ */ jsx(PostsContainer, { type: "link", view, onViewChange: setView })
|
|
25
|
+
] }),
|
|
26
|
+
/* @__PURE__ */ jsxs(Grid, { item: true, lg: 3, xl: 2, children: [
|
|
27
|
+
/* @__PURE__ */ jsx(
|
|
28
|
+
PostHighlightList,
|
|
29
|
+
{
|
|
30
|
+
type: "hot",
|
|
31
|
+
title: t("highlights.hotLinks.title"),
|
|
32
|
+
noQuestionsLabel: t("highlights.hotLinks.noLinksLabel"),
|
|
33
|
+
icon: /* @__PURE__ */ jsx(Whatshot, { fontSize: "small" }),
|
|
34
|
+
postType: "link"
|
|
35
|
+
}
|
|
36
|
+
),
|
|
37
|
+
/* @__PURE__ */ jsx(FollowedTagsList, {}),
|
|
38
|
+
/* @__PURE__ */ jsx(FollowedEntitiesList, {})
|
|
39
|
+
] })
|
|
40
|
+
] });
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export { LinksPage };
|
|
44
|
+
//# sourceMappingURL=LinksPage.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinksPage.esm.js","sources":["../../../src/components/LinksPage/LinksPage.tsx"],"sourcesContent":["import { useSearchParams } from 'react-router-dom';\nimport { useEffect, useState } from 'react';\nimport { ContentHeader } from '@backstage/core-components';\nimport {\n ButtonContainer,\n CreateLinkButton,\n FollowedEntitiesList,\n FollowedTagsList,\n PostHighlightList,\n PostsContainer,\n PostsGrid,\n qetaTranslationRef,\n ViewType,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport Whatshot from '@material-ui/icons/Whatshot';\nimport { Grid } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const LinksPage = () => {\n const [searchParams] = useSearchParams();\n const [view, setView] = useState<ViewType>('list');\n\n const [entityRef, setEntityRef] = useState<string | undefined>(undefined);\n const [tags, setTags] = useState<string[] | undefined>(undefined);\n const { t } = useTranslationRef(qetaTranslationRef);\n useEffect(() => {\n setEntityRef(searchParams.get('entity') ?? undefined);\n setTags(filterTags(searchParams.get('tags')));\n }, [searchParams, setEntityRef]);\n\n return (\n <Grid container spacing={4}>\n <Grid item md={12} lg={9} xl={10}>\n <ContentHeader title={t('linksPage.title')}>\n <ButtonContainer>\n <CreateLinkButton entity={entityRef} tags={tags} />\n </ButtonContainer>\n </ContentHeader>\n {view === 'grid' ? (\n <PostsGrid type=\"link\" view={view} onViewChange={setView} />\n ) : (\n <PostsContainer type=\"link\" view={view} onViewChange={setView} />\n )}\n </Grid>\n <Grid item lg={3} xl={2}>\n <PostHighlightList\n type=\"hot\"\n title={t('highlights.hotLinks.title')}\n noQuestionsLabel={t('highlights.hotLinks.noLinksLabel')}\n icon={<Whatshot fontSize=\"small\" />}\n postType=\"link\"\n />\n <FollowedTagsList />\n <FollowedEntitiesList />\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAmBO,MAAM,YAAY,MAAM;AAC7B,EAAM,MAAA,CAAC,YAAY,CAAA,GAAI,eAAgB,EAAA;AACvC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAmB,MAAM,CAAA;AAEjD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAA6B,KAAS,CAAA,CAAA;AACxE,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAA+B,KAAS,CAAA,CAAA;AAChE,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,YAAA,CAAa,YAAa,CAAA,GAAA,CAAI,QAAQ,CAAA,IAAK,KAAS,CAAA,CAAA;AACpD,IAAA,OAAA,CAAQ,UAAW,CAAA,YAAA,CAAa,GAAI,CAAA,MAAM,CAAC,CAAC,CAAA;AAAA,GAC3C,EAAA,CAAC,YAAc,EAAA,YAAY,CAAC,CAAA;AAE/B,EAAA,uBACG,IAAA,CAAA,IAAA,EAAA,EAAK,SAAS,EAAA,IAAA,EAAC,SAAS,CACvB,EAAA,QAAA,EAAA;AAAA,oBAAC,IAAA,CAAA,IAAA,EAAA,EAAK,MAAI,IAAC,EAAA,EAAA,EAAI,IAAI,EAAI,EAAA,CAAA,EAAG,IAAI,EAC5B,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,aAAc,EAAA,EAAA,KAAA,EAAO,CAAE,CAAA,iBAAiB,CACvC,EAAA,QAAA,kBAAA,GAAA,CAAC,eACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,gBAAiB,EAAA,EAAA,MAAA,EAAQ,SAAW,EAAA,IAAA,EAAY,GACnD,CACF,EAAA,CAAA;AAAA,MACC,SAAS,MACR,mBAAA,GAAA,CAAC,SAAU,EAAA,EAAA,IAAA,EAAK,QAAO,IAAY,EAAA,YAAA,EAAc,OAAS,EAAA,CAAA,uBAEzD,cAAe,EAAA,EAAA,IAAA,EAAK,MAAO,EAAA,IAAA,EAAY,cAAc,OAAS,EAAA;AAAA,KAEnE,EAAA,CAAA;AAAA,yBACC,IAAK,EAAA,EAAA,IAAA,EAAI,MAAC,EAAI,EAAA,CAAA,EAAG,IAAI,CACpB,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,KAAA;AAAA,UACL,KAAA,EAAO,EAAE,2BAA2B,CAAA;AAAA,UACpC,gBAAA,EAAkB,EAAE,kCAAkC,CAAA;AAAA,UACtD,IAAM,kBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,CAAA;AAAA,UACjC,QAAS,EAAA;AAAA;AAAA,OACX;AAAA,0BACC,gBAAiB,EAAA,EAAA,CAAA;AAAA,0BACjB,oBAAqB,EAAA,EAAA;AAAA,KACxB,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -7,12 +7,15 @@ import { TagPage } from '../TagPage/TagPage.esm.js';
|
|
|
7
7
|
import { UserPage } from '../UserPage/UserPage.esm.js';
|
|
8
8
|
import { FavoritePage } from '../FavoritePage/FavoritePage.esm.js';
|
|
9
9
|
import { StatisticsPage } from '../Statistics/StatisticsPage.esm.js';
|
|
10
|
-
import { LeftMenuButton, LeftMenu, questionsRouteRef, askRouteRef, articlesRouteRef, writeRouteRef, favoriteQuestionsRouteRef, editQuestionRouteRef, editArticleRouteRef, questionRouteRef, articleRouteRef, tagsRouteRef, tagRouteRef, usersRouteRef, userRouteRef, statisticsRouteRef, collectionsRouteRef, collectionCreateRouteRef, collectionEditRouteRef, collectionRouteRef, entitiesRouteRef, entityRouteRef, moderatorRouteRef } from '@drodil/backstage-plugin-qeta-react';
|
|
10
|
+
import { LeftMenuButton, LeftMenu, questionsRouteRef, askRouteRef, articlesRouteRef, writeRouteRef, linksRouteRef, createLinkRouteRef, favoriteQuestionsRouteRef, editQuestionRouteRef, editArticleRouteRef, editLinkRouteRef, questionRouteRef, linkRouteRef, articleRouteRef, tagsRouteRef, tagRouteRef, usersRouteRef, userRouteRef, statisticsRouteRef, collectionsRouteRef, collectionCreateRouteRef, collectionEditRouteRef, collectionRouteRef, entitiesRouteRef, entityRouteRef, moderatorRouteRef } from '@drodil/backstage-plugin-qeta-react';
|
|
11
11
|
import { QuestionsPage } from '../QuestionsPage/QuestionsPage.esm.js';
|
|
12
12
|
import { HomePage } from '../HomePage/HomePage.esm.js';
|
|
13
13
|
import { ArticlesPage } from '../ArticlesPage/ArticlesPage.esm.js';
|
|
14
14
|
import { WritePage } from '../WritePage/WritePage.esm.js';
|
|
15
15
|
import { ArticlePage } from '../ArticlePage/ArticlePage.esm.js';
|
|
16
|
+
import { LinksPage } from '../LinksPage/LinksPage.esm.js';
|
|
17
|
+
import { LinkPage } from '../LinkPage/LinkPage.esm.js';
|
|
18
|
+
import { CreateLinkPage } from '../CreateLinkPage/CreateLinkPage.esm.js';
|
|
16
19
|
import { CollectionsPage } from '../CollectionsPage/CollectionsPage.esm.js';
|
|
17
20
|
import { CollectionPage } from '../CollectionPage/CollectionPage.esm.js';
|
|
18
21
|
import { CollectionCreatePage } from '../CollectionCreatePage/CollectionCreatePage.esm.js';
|
|
@@ -76,6 +79,14 @@ const QetaPage = (props) => {
|
|
|
76
79
|
}
|
|
77
80
|
),
|
|
78
81
|
/* @__PURE__ */ jsx(Route, { path: writeRouteRef.path, element: /* @__PURE__ */ jsx(WritePage, {}) }),
|
|
82
|
+
/* @__PURE__ */ jsx(Route, { path: linksRouteRef.path, element: /* @__PURE__ */ jsx(LinksPage, {}) }),
|
|
83
|
+
/* @__PURE__ */ jsx(
|
|
84
|
+
Route,
|
|
85
|
+
{
|
|
86
|
+
path: createLinkRouteRef.path,
|
|
87
|
+
element: /* @__PURE__ */ jsx(CreateLinkPage, {})
|
|
88
|
+
}
|
|
89
|
+
),
|
|
79
90
|
/* @__PURE__ */ jsx(
|
|
80
91
|
Route,
|
|
81
92
|
{
|
|
@@ -91,6 +102,13 @@ const QetaPage = (props) => {
|
|
|
91
102
|
element: /* @__PURE__ */ jsx(WritePage, {})
|
|
92
103
|
}
|
|
93
104
|
),
|
|
105
|
+
/* @__PURE__ */ jsx(
|
|
106
|
+
Route,
|
|
107
|
+
{
|
|
108
|
+
path: editLinkRouteRef.path,
|
|
109
|
+
element: /* @__PURE__ */ jsx(CreateLinkPage, {})
|
|
110
|
+
}
|
|
111
|
+
),
|
|
94
112
|
/* @__PURE__ */ jsx(
|
|
95
113
|
Route,
|
|
96
114
|
{
|
|
@@ -98,6 +116,7 @@ const QetaPage = (props) => {
|
|
|
98
116
|
element: /* @__PURE__ */ jsx(QuestionPage, {})
|
|
99
117
|
}
|
|
100
118
|
),
|
|
119
|
+
/* @__PURE__ */ jsx(Route, { path: linkRouteRef.path, element: /* @__PURE__ */ jsx(LinkPage, {}) }),
|
|
101
120
|
/* @__PURE__ */ jsx(Route, { path: articleRouteRef.path, element: /* @__PURE__ */ jsx(ArticlePage, {}) }),
|
|
102
121
|
/* @__PURE__ */ jsx(Route, { path: tagsRouteRef.path, element: /* @__PURE__ */ jsx(TagPage, {}) }),
|
|
103
122
|
/* @__PURE__ */ jsx(Route, { path: tagRouteRef.path, element: /* @__PURE__ */ jsx(TagPage, {}) }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QetaPage.esm.js","sources":["../../../src/components/QetaPage/QetaPage.tsx"],"sourcesContent":["import { ReactNode } from 'react';\nimport { Content, Header, Page } from '@backstage/core-components';\nimport { Route, Routes } 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 editArticleRouteRef,\n editQuestionRouteRef,\n entitiesRouteRef,\n entityRouteRef,\n favoriteQuestionsRouteRef,\n LeftMenu,\n LeftMenuButton,\n moderatorRouteRef,\n questionRouteRef,\n questionsRouteRef,\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 { 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 { Box, Container, Grid } from '@material-ui/core';\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};\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 } = props ?? {};\n\n return (\n <Page themeId={themeId}>\n <Header\n title={title}\n subtitle={subtitle}\n type={headerType}\n typeLink={headerTypeLink}\n tooltip={headerTooltip}\n >\n {headerElements}\n </Header>\n <Content className=\"qetaHomePage\">\n {introElement}\n <Container maxWidth=\"xl\">\n <Grid container spacing={4} justifyContent=\"flex-start\">\n <Grid item md={1} lg={2} style={{ padding: 0 }}>\n <Box display={{ md: 'block', lg: 'none' }}>\n <LeftMenuButton />\n </Box>\n <Box display={{ xs: 'none', md: 'block' }}>\n <LeftMenu />\n </Box>\n </Grid>\n <Grid\n item\n md={12}\n lg={10}\n style={{ paddingLeft: '8px', paddingRight: '0' }}\n >\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\n path={favoriteQuestionsRouteRef.path}\n element={<FavoritePage />}\n />\n <Route path={editQuestionRouteRef.path} element={<AskPage />} />\n <Route\n path={editArticleRouteRef.path}\n element={<WritePage />}\n />\n <Route\n path={questionRouteRef.path}\n element={<QuestionPage />}\n />\n <Route path={articleRouteRef.path} element={<ArticlePage />} />\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 path={entitiesRouteRef.path} element={<EntityPage />} />\n <Route path={entityRouteRef.path} element={<EntityPage />} />\n <Route\n path={moderatorRouteRef.path}\n element={<ModeratorPage />}\n />\n </Routes>\n </Grid>\n </Grid>\n </Container>\n </Content>\n </Page>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QetaPage.esm.js","sources":["../../../src/components/QetaPage/QetaPage.tsx"],"sourcesContent":["import { ReactNode } from 'react';\nimport { Content, Header, Page } from '@backstage/core-components';\nimport { Route, Routes } 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 questionRouteRef,\n questionsRouteRef,\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.tsx';\nimport { LinkPage } from '../LinkPage/LinkPage.tsx';\nimport { CreateLinkPage } from '../CreateLinkPage/CreateLinkPage.tsx';\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 { Box, Container, Grid } from '@material-ui/core';\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};\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 } = props ?? {};\n\n return (\n <Page themeId={themeId}>\n <Header\n title={title}\n subtitle={subtitle}\n type={headerType}\n typeLink={headerTypeLink}\n tooltip={headerTooltip}\n >\n {headerElements}\n </Header>\n <Content className=\"qetaHomePage\">\n {introElement}\n <Container maxWidth=\"xl\">\n <Grid container spacing={4} justifyContent=\"flex-start\">\n <Grid item md={1} lg={2} style={{ padding: 0 }}>\n <Box display={{ md: 'block', lg: 'none' }}>\n <LeftMenuButton />\n </Box>\n <Box display={{ xs: 'none', md: 'block' }}>\n <LeftMenu />\n </Box>\n </Grid>\n <Grid\n item\n md={12}\n lg={10}\n style={{ paddingLeft: '8px', paddingRight: '0' }}\n >\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 path={editQuestionRouteRef.path} element={<AskPage />} />\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 path={articleRouteRef.path} element={<ArticlePage />} />\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 path={entitiesRouteRef.path} element={<EntityPage />} />\n <Route path={entityRouteRef.path} element={<EntityPage />} />\n <Route\n path={moderatorRouteRef.path}\n element={<ModeratorPage />}\n />\n </Routes>\n </Grid>\n </Grid>\n </Container>\n </Content>\n </Page>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { Link } from '@backstage/core-components';
|
|
|
4
4
|
import { HighlightedSearchResultText } from '@backstage/plugin-search-react';
|
|
5
5
|
import CollectionsBookmarkIcon from '@material-ui/icons/CollectionsBookmark';
|
|
6
6
|
import { makeStyles, ListItem, ListItemIcon, ListItemText, Divider } from '@material-ui/core';
|
|
7
|
-
import { truncate, removeMarkdownFormatting } from '@drodil/backstage-plugin-qeta-common';
|
|
7
|
+
import { truncate, removeMarkdownFormatting, selectByPostType } from '@drodil/backstage-plugin-qeta-common';
|
|
8
8
|
import { EntityRefLink } from '@backstage/plugin-catalog-react';
|
|
9
9
|
import HelpOutlined from '@material-ui/icons/HelpOutlined';
|
|
10
10
|
import PlaylistPlay from '@material-ui/icons/PlaylistPlay';
|
|
@@ -12,6 +12,7 @@ import DOMPurify from 'dompurify';
|
|
|
12
12
|
import { capitalize } from 'lodash';
|
|
13
13
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
14
14
|
import { qetaTranslationRef } from '@drodil/backstage-plugin-qeta-react';
|
|
15
|
+
import LinkIcon from '@material-ui/icons/Link';
|
|
15
16
|
|
|
16
17
|
const useStyles = makeStyles({
|
|
17
18
|
excerptText: {
|
|
@@ -102,10 +103,12 @@ const Excerpt = (props) => {
|
|
|
102
103
|
const ResultIcon = (props) => {
|
|
103
104
|
const { document } = props;
|
|
104
105
|
if (isQetaPostDocument(document)) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
106
|
+
return selectByPostType(
|
|
107
|
+
document.postType,
|
|
108
|
+
/* @__PURE__ */ jsx(HelpOutlined, {}),
|
|
109
|
+
/* @__PURE__ */ jsx(CollectionsBookmarkIcon, {}),
|
|
110
|
+
/* @__PURE__ */ jsx(LinkIcon, {})
|
|
111
|
+
);
|
|
109
112
|
}
|
|
110
113
|
return /* @__PURE__ */ jsx(PlaylistPlay, {});
|
|
111
114
|
};
|
|
@@ -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 },\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 selectByPostType,\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';\nimport LinkIcon from '@material-ui/icons/Link';\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 return selectByPostType(\n document.postType,\n <HelpOutlined />,\n <CollectionsBookmarkIcon />,\n <LinkIcon />,\n );\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,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { ContentHeader } from '@backstage/core-components';
|
|
3
|
-
import { ButtonContainer, AskQuestionButton, WriteArticleButton, TopRankingUsers } from '@drodil/backstage-plugin-qeta-react';
|
|
3
|
+
import { ButtonContainer, AskQuestionButton, WriteArticleButton, CreateLinkButton, TopRankingUsers } from '@drodil/backstage-plugin-qeta-react';
|
|
4
4
|
import { GlobalStatsContent } from './GlobalStatsContent.esm.js';
|
|
5
5
|
import { Grid } from '@material-ui/core';
|
|
6
6
|
|
|
@@ -8,7 +8,8 @@ const StatisticsPage = () => {
|
|
|
8
8
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
9
9
|
/* @__PURE__ */ jsx(ContentHeader, { title: "Statistics", children: /* @__PURE__ */ jsxs(ButtonContainer, { children: [
|
|
10
10
|
/* @__PURE__ */ jsx(AskQuestionButton, {}),
|
|
11
|
-
/* @__PURE__ */ jsx(WriteArticleButton, {})
|
|
11
|
+
/* @__PURE__ */ jsx(WriteArticleButton, {}),
|
|
12
|
+
/* @__PURE__ */ jsx(CreateLinkButton, {})
|
|
12
13
|
] }) }),
|
|
13
14
|
/* @__PURE__ */ jsxs(Grid, { container: true, children: [
|
|
14
15
|
/* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(GlobalStatsContent, {}) }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatisticsPage.esm.js","sources":["../../../src/components/Statistics/StatisticsPage.tsx"],"sourcesContent":["import { ContentHeader } from '@backstage/core-components';\nimport {\n AskQuestionButton,\n ButtonContainer,\n TopRankingUsers,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { GlobalStatsContent } from './GlobalStatsContent';\nimport { Grid } from '@material-ui/core';\n\nexport const StatisticsPage = () => {\n return (\n <>\n <ContentHeader title=\"Statistics\">\n <ButtonContainer>\n <AskQuestionButton />\n <WriteArticleButton />\n </ButtonContainer>\n </ContentHeader>\n <Grid container>\n <Grid item xs={12}>\n <GlobalStatsContent />\n </Grid>\n <Grid item xs={12}>\n <TopRankingUsers limit={10} />\n </Grid>\n </Grid>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"StatisticsPage.esm.js","sources":["../../../src/components/Statistics/StatisticsPage.tsx"],"sourcesContent":["import { ContentHeader } from '@backstage/core-components';\nimport {\n AskQuestionButton,\n ButtonContainer,\n CreateLinkButton,\n TopRankingUsers,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { GlobalStatsContent } from './GlobalStatsContent';\nimport { Grid } from '@material-ui/core';\n\nexport const StatisticsPage = () => {\n return (\n <>\n <ContentHeader title=\"Statistics\">\n <ButtonContainer>\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ButtonContainer>\n </ContentHeader>\n <Grid container>\n <Grid item xs={12}>\n <GlobalStatsContent />\n </Grid>\n <Grid item xs={12}>\n <TopRankingUsers limit={10} />\n </Grid>\n </Grid>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;AAWO,MAAM,iBAAiB,MAAM;AAClC,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,aAAc,EAAA,EAAA,KAAA,EAAM,YACnB,EAAA,QAAA,kBAAA,IAAA,CAAC,eACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,iBAAkB,EAAA,EAAA,CAAA;AAAA,0BAClB,kBAAmB,EAAA,EAAA,CAAA;AAAA,0BACnB,gBAAiB,EAAA,EAAA;AAAA,KAAA,EACpB,CACF,EAAA,CAAA;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,sBAAmB,CACtB,EAAA,CAAA;AAAA,sBACA,GAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,IACb,QAAC,kBAAA,GAAA,CAAA,eAAA,EAAA,EAAgB,KAAO,EAAA,EAAA,EAAI,CAC9B,EAAA;AAAA,KACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -2,7 +2,7 @@ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
|
2
2
|
import { useState, useEffect } from 'react';
|
|
3
3
|
import { ContentHeader } from '@backstage/core-components';
|
|
4
4
|
import { useParams } from 'react-router-dom';
|
|
5
|
-
import { qetaTranslationRef, qetaApiRef, TagFollowButton, ButtonContainer, AskQuestionButton, WriteArticleButton, MarkdownRenderer, PostsGrid, PostsContainer, TagsGrid, FollowedTagsList, PostHighlightList } from '@drodil/backstage-plugin-qeta-react';
|
|
5
|
+
import { qetaTranslationRef, qetaApiRef, TagFollowButton, ButtonContainer, AskQuestionButton, WriteArticleButton, CreateLinkButton, MarkdownRenderer, PostsGrid, PostsContainer, TagsGrid, FollowedTagsList, PostHighlightList, PostHighlightListContainer } from '@drodil/backstage-plugin-qeta-react';
|
|
6
6
|
import Whatshot from '@material-ui/icons/Whatshot';
|
|
7
7
|
import { useApi } from '@backstage/core-plugin-api';
|
|
8
8
|
import { Grid, Typography, Card, CardContent } from '@material-ui/core';
|
|
@@ -49,12 +49,14 @@ const TagPage = () => {
|
|
|
49
49
|
] }),
|
|
50
50
|
children: /* @__PURE__ */ jsxs(ButtonContainer, { children: [
|
|
51
51
|
/* @__PURE__ */ jsx(AskQuestionButton, { tags: [tag] }),
|
|
52
|
-
/* @__PURE__ */ jsx(WriteArticleButton, { tags: [tag] })
|
|
52
|
+
/* @__PURE__ */ jsx(WriteArticleButton, { tags: [tag] }),
|
|
53
|
+
/* @__PURE__ */ jsx(CreateLinkButton, { tags: [tag] })
|
|
53
54
|
] })
|
|
54
55
|
}
|
|
55
56
|
) : /* @__PURE__ */ jsx(ContentHeader, { title: t("tagPage.defaultTitle"), children: /* @__PURE__ */ jsxs(ButtonContainer, { children: [
|
|
56
57
|
/* @__PURE__ */ jsx(AskQuestionButton, {}),
|
|
57
|
-
/* @__PURE__ */ jsx(WriteArticleButton, {})
|
|
58
|
+
/* @__PURE__ */ jsx(WriteArticleButton, {}),
|
|
59
|
+
/* @__PURE__ */ jsx(CreateLinkButton, {})
|
|
58
60
|
] }) }),
|
|
59
61
|
resp && /* @__PURE__ */ jsx(Card, { variant: "outlined", style: { marginBottom: "1em" }, children: /* @__PURE__ */ jsxs(CardContent, { children: [
|
|
60
62
|
/* @__PURE__ */ jsxs(Typography, { variant: "caption", children: [
|
|
@@ -131,28 +133,7 @@ const TagPage = () => {
|
|
|
131
133
|
}
|
|
132
134
|
)
|
|
133
135
|
] }),
|
|
134
|
-
!resp && /* @__PURE__ */
|
|
135
|
-
/* @__PURE__ */ jsx(
|
|
136
|
-
PostHighlightList,
|
|
137
|
-
{
|
|
138
|
-
type: "hot",
|
|
139
|
-
title: t("highlights.hotQuestions.title"),
|
|
140
|
-
noQuestionsLabel: t("highlights.hotQuestions.noQuestionsLabel"),
|
|
141
|
-
icon: /* @__PURE__ */ jsx(Whatshot, { fontSize: "small" }),
|
|
142
|
-
postType: "question"
|
|
143
|
-
}
|
|
144
|
-
),
|
|
145
|
-
/* @__PURE__ */ jsx(
|
|
146
|
-
PostHighlightList,
|
|
147
|
-
{
|
|
148
|
-
type: "hot",
|
|
149
|
-
title: t("highlights.hotArticles.title"),
|
|
150
|
-
noQuestionsLabel: t("highlights.hotArticles.noArticlesLabel"),
|
|
151
|
-
icon: /* @__PURE__ */ jsx(Whatshot, { fontSize: "small" }),
|
|
152
|
-
postType: "article"
|
|
153
|
-
}
|
|
154
|
-
)
|
|
155
|
-
] })
|
|
136
|
+
!resp && /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(PostHighlightListContainer, {}) })
|
|
156
137
|
] })
|
|
157
138
|
] });
|
|
158
139
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TagPage.esm.js","sources":["../../../src/components/TagPage/TagPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { ContentHeader } from '@backstage/core-components';\nimport { useParams } from 'react-router-dom';\nimport {\n AskQuestionButton,\n ButtonContainer,\n FollowedTagsList,\n MarkdownRenderer,\n PostHighlightList,\n PostsContainer,\n PostsGrid,\n qetaApiRef,\n qetaTranslationRef,\n TagFollowButton,\n TagsGrid,\n ViewType,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport Whatshot from '@material-ui/icons/Whatshot';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { TagResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { Card, CardContent, Grid, Typography } from '@material-ui/core';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const TagPage = () => {\n const { tag } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n const [resp, setResp] = useState<undefined | TagResponse>();\n const [view, setView] = useState<ViewType>('list');\n\n const qetaApi = useApi(qetaApiRef);\n\n useEffect(() => {\n if (!tag) {\n setResp(undefined);\n return;\n }\n\n qetaApi.getTag(tag).then(res => {\n if (res) {\n setResp(res);\n }\n });\n }, [qetaApi, tag]);\n\n return (\n <Grid container spacing={4}>\n <Grid item md={12} lg={9} xl={10}>\n {tag ? (\n <ContentHeader\n titleComponent={\n <span style={{ display: 'flex', alignItems: 'center' }}>\n <Typography\n variant=\"h5\"\n component=\"h2\"\n id=\"tag-title\"\n style={{ marginRight: '0.5em' }}\n >\n #{tag}\n </Typography>\n <TagFollowButton tag={tag} />\n </span>\n }\n >\n <ButtonContainer>\n <AskQuestionButton tags={[tag]} />\n <WriteArticleButton tags={[tag]} />\n </ButtonContainer>\n </ContentHeader>\n ) : (\n <ContentHeader title={t('tagPage.defaultTitle')}>\n <ButtonContainer>\n <AskQuestionButton />\n <WriteArticleButton />\n </ButtonContainer>\n </ContentHeader>\n )}\n {resp && (\n <Card variant=\"outlined\" style={{ marginBottom: '1em' }}>\n <CardContent>\n <Typography variant=\"caption\">\n {t('common.posts', {\n count: resp.postsCount,\n itemType: 'post',\n })}\n {' · '}\n {t('common.followers', { count: resp.followerCount })}\n </Typography>\n <br />\n {resp.experts && resp.experts.length > 0 && (\n <Typography variant=\"caption\">\n {t('common.experts')}\n {': '}\n {resp.experts.map((e, i) => (\n <>\n <EntityRefLink key={e} entityRef={e} />\n {i === resp.experts!.length - 1 ? '' : ','}\n </>\n ))}\n </Typography>\n )}\n {resp.description && (\n <MarkdownRenderer content={resp.description} />\n )}\n </CardContent>\n </Card>\n )}\n {tag &&\n (view === 'grid' ? (\n <PostsGrid\n tags={[tag ?? '']}\n filterPanelProps={{ showTagFilter: false }}\n view={view}\n onViewChange={setView}\n />\n ) : (\n <PostsContainer\n tags={[tag ?? '']}\n filterPanelProps={{ showTagFilter: false }}\n view={view}\n showTypeLabel\n onViewChange={setView}\n />\n ))}\n {!tag && <TagsGrid />}\n </Grid>\n <Grid item lg={3} xl={2}>\n <FollowedTagsList />\n {resp && (\n <>\n <PostHighlightList\n type=\"hot\"\n title={t('highlights.hotQuestions.title')}\n noQuestionsLabel={t('highlights.hotQuestions.noQuestionsLabel')}\n icon={<Whatshot fontSize=\"small\" />}\n options={{ tags: [resp.tag] }}\n postType=\"question\"\n />\n\n <PostHighlightList\n type=\"unanswered\"\n title={t('highlights.unanswered.title')}\n noQuestionsLabel={t('highlights.unanswered.noQuestionsLabel')}\n options={{ tags: [resp.tag] }}\n postType=\"question\"\n />\n <PostHighlightList\n type=\"incorrect\"\n title={t('highlights.incorrect.title')}\n noQuestionsLabel={t('highlights.incorrect.noQuestionsLabel')}\n options={{ tags: [resp.tag] }}\n postType=\"question\"\n />\n </>\n )}\n {!resp && (\n <>\n <PostHighlightList\n type=\"hot\"\n title={t('highlights.hotQuestions.title')}\n noQuestionsLabel={t('highlights.hotQuestions.noQuestionsLabel')}\n icon={<Whatshot fontSize=\"small\" />}\n postType=\"question\"\n />\n <PostHighlightList\n type=\"hot\"\n title={t('highlights.hotArticles.title')}\n noQuestionsLabel={t('highlights.hotArticles.noArticlesLabel')}\n icon={<Whatshot fontSize=\"small\" />}\n postType=\"article\"\n />\n </>\n )}\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TagPage.esm.js","sources":["../../../src/components/TagPage/TagPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { ContentHeader } from '@backstage/core-components';\nimport { useParams } from 'react-router-dom';\nimport {\n AskQuestionButton,\n ButtonContainer,\n CreateLinkButton,\n FollowedTagsList,\n MarkdownRenderer,\n PostHighlightList,\n PostHighlightListContainer,\n PostsContainer,\n PostsGrid,\n qetaApiRef,\n qetaTranslationRef,\n TagFollowButton,\n TagsGrid,\n ViewType,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport Whatshot from '@material-ui/icons/Whatshot';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { TagResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { Card, CardContent, Grid, Typography } from '@material-ui/core';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const TagPage = () => {\n const { tag } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n const [resp, setResp] = useState<undefined | TagResponse>();\n const [view, setView] = useState<ViewType>('list');\n\n const qetaApi = useApi(qetaApiRef);\n\n useEffect(() => {\n if (!tag) {\n setResp(undefined);\n return;\n }\n\n qetaApi.getTag(tag).then(res => {\n if (res) {\n setResp(res);\n }\n });\n }, [qetaApi, tag]);\n\n return (\n <Grid container spacing={4}>\n <Grid item md={12} lg={9} xl={10}>\n {tag ? (\n <ContentHeader\n titleComponent={\n <span style={{ display: 'flex', alignItems: 'center' }}>\n <Typography\n variant=\"h5\"\n component=\"h2\"\n id=\"tag-title\"\n style={{ marginRight: '0.5em' }}\n >\n #{tag}\n </Typography>\n <TagFollowButton tag={tag} />\n </span>\n }\n >\n <ButtonContainer>\n <AskQuestionButton tags={[tag]} />\n <WriteArticleButton tags={[tag]} />\n <CreateLinkButton tags={[tag]} />\n </ButtonContainer>\n </ContentHeader>\n ) : (\n <ContentHeader title={t('tagPage.defaultTitle')}>\n <ButtonContainer>\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ButtonContainer>\n </ContentHeader>\n )}\n {resp && (\n <Card variant=\"outlined\" style={{ marginBottom: '1em' }}>\n <CardContent>\n <Typography variant=\"caption\">\n {t('common.posts', {\n count: resp.postsCount,\n itemType: 'post',\n })}\n {' · '}\n {t('common.followers', { count: resp.followerCount })}\n </Typography>\n <br />\n {resp.experts && resp.experts.length > 0 && (\n <Typography variant=\"caption\">\n {t('common.experts')}\n {': '}\n {resp.experts.map((e, i) => (\n <>\n <EntityRefLink key={e} entityRef={e} />\n {i === resp.experts!.length - 1 ? '' : ','}\n </>\n ))}\n </Typography>\n )}\n {resp.description && (\n <MarkdownRenderer content={resp.description} />\n )}\n </CardContent>\n </Card>\n )}\n {tag &&\n (view === 'grid' ? (\n <PostsGrid\n tags={[tag ?? '']}\n filterPanelProps={{ showTagFilter: false }}\n view={view}\n onViewChange={setView}\n />\n ) : (\n <PostsContainer\n tags={[tag ?? '']}\n filterPanelProps={{ showTagFilter: false }}\n view={view}\n showTypeLabel\n onViewChange={setView}\n />\n ))}\n {!tag && <TagsGrid />}\n </Grid>\n <Grid item lg={3} xl={2}>\n <FollowedTagsList />\n {resp && (\n <>\n <PostHighlightList\n type=\"hot\"\n title={t('highlights.hotQuestions.title')}\n noQuestionsLabel={t('highlights.hotQuestions.noQuestionsLabel')}\n icon={<Whatshot fontSize=\"small\" />}\n options={{ tags: [resp.tag] }}\n postType=\"question\"\n />\n\n <PostHighlightList\n type=\"unanswered\"\n title={t('highlights.unanswered.title')}\n noQuestionsLabel={t('highlights.unanswered.noQuestionsLabel')}\n options={{ tags: [resp.tag] }}\n postType=\"question\"\n />\n <PostHighlightList\n type=\"incorrect\"\n title={t('highlights.incorrect.title')}\n noQuestionsLabel={t('highlights.incorrect.noQuestionsLabel')}\n options={{ tags: [resp.tag] }}\n postType=\"question\"\n />\n </>\n )}\n {!resp && (\n <>\n <PostHighlightListContainer />\n </>\n )}\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AA2BO,MAAM,UAAU,MAAM;AAC3B,EAAM,MAAA,EAAE,GAAI,EAAA,GAAI,SAAU,EAAA;AAC1B,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,QAAkC,EAAA;AAC1D,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAmB,MAAM,CAAA;AAEjD,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA;AAEjC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,GAAK,EAAA;AACR,MAAA,OAAA,CAAQ,KAAS,CAAA,CAAA;AACjB,MAAA;AAAA;AAGF,IAAA,OAAA,CAAQ,MAAO,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,CAAO,GAAA,KAAA;AAC9B,MAAA,IAAI,GAAK,EAAA;AACP,QAAA,OAAA,CAAQ,GAAG,CAAA;AAAA;AACb,KACD,CAAA;AAAA,GACA,EAAA,CAAC,OAAS,EAAA,GAAG,CAAC,CAAA;AAEjB,EAAA,uBACG,IAAA,CAAA,IAAA,EAAA,EAAK,SAAS,EAAA,IAAA,EAAC,SAAS,CACvB,EAAA,QAAA,EAAA;AAAA,oBAAC,IAAA,CAAA,IAAA,EAAA,EAAK,MAAI,IAAC,EAAA,EAAA,EAAI,IAAI,EAAI,EAAA,CAAA,EAAG,IAAI,EAC3B,EAAA,QAAA,EAAA;AAAA,MACC,GAAA,mBAAA,GAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,cAAA,uBACG,MAAK,EAAA,EAAA,KAAA,EAAO,EAAE,OAAS,EAAA,MAAA,EAAQ,UAAY,EAAA,QAAA,EAC1C,EAAA,QAAA,EAAA;AAAA,4BAAA,IAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,OAAQ,EAAA,IAAA;AAAA,gBACR,SAAU,EAAA,IAAA;AAAA,gBACV,EAAG,EAAA,WAAA;AAAA,gBACH,KAAA,EAAO,EAAE,WAAA,EAAa,OAAQ,EAAA;AAAA,gBAC/B,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,kBACG;AAAA;AAAA;AAAA,aACJ;AAAA,4BACA,GAAA,CAAC,mBAAgB,GAAU,EAAA;AAAA,WAC7B,EAAA,CAAA;AAAA,UAGF,+BAAC,eACC,EAAA,EAAA,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,iBAAkB,EAAA,EAAA,IAAA,EAAM,CAAC,GAAG,CAAG,EAAA,CAAA;AAAA,4BAC/B,GAAA,CAAA,kBAAA,EAAA,EAAmB,IAAM,EAAA,CAAC,GAAG,CAAG,EAAA,CAAA;AAAA,4BAChC,GAAA,CAAA,gBAAA,EAAA,EAAiB,IAAM,EAAA,CAAC,GAAG,CAAG,EAAA;AAAA,WACjC,EAAA;AAAA;AAAA,OACF,uBAEC,aAAc,EAAA,EAAA,KAAA,EAAO,EAAE,sBAAsB,CAAA,EAC5C,+BAAC,eACC,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,iBAAkB,EAAA,EAAA,CAAA;AAAA,4BAClB,kBAAmB,EAAA,EAAA,CAAA;AAAA,4BACnB,gBAAiB,EAAA,EAAA;AAAA,OAAA,EACpB,CACF,EAAA,CAAA;AAAA,MAED,IAAA,oBACE,GAAA,CAAA,IAAA,EAAA,EAAK,OAAQ,EAAA,UAAA,EAAW,KAAO,EAAA,EAAE,YAAc,EAAA,KAAA,EAC9C,EAAA,QAAA,kBAAA,IAAA,CAAC,WACC,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAC,IAAA,CAAA,UAAA,EAAA,EAAW,SAAQ,SACjB,EAAA,QAAA,EAAA;AAAA,UAAA,CAAA,CAAE,cAAgB,EAAA;AAAA,YACjB,OAAO,IAAK,CAAA,UAAA;AAAA,YACZ,QAAU,EAAA;AAAA,WACX,CAAA;AAAA,UACA,QAAA;AAAA,UACA,EAAE,kBAAoB,EAAA,EAAE,KAAO,EAAA,IAAA,CAAK,eAAe;AAAA,SACtD,EAAA,CAAA;AAAA,4BACC,IAAG,EAAA,EAAA,CAAA;AAAA,QACH,IAAA,CAAK,WAAW,IAAK,CAAA,OAAA,CAAQ,SAAS,CACrC,oBAAA,IAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,SACjB,EAAA,QAAA,EAAA;AAAA,UAAA,CAAA,CAAE,gBAAgB,CAAA;AAAA,UAClB,IAAA;AAAA,UACA,KAAK,OAAQ,CAAA,GAAA,CAAI,CAAC,CAAA,EAAG,sBAElB,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,4BAAC,GAAA,CAAA,aAAA,EAAA,EAAsB,SAAW,EAAA,CAAA,EAAA,EAAd,CAAiB,CAAA;AAAA,YACpC,CAAM,KAAA,IAAA,CAAK,OAAS,CAAA,MAAA,GAAS,IAAI,EAAK,GAAA;AAAA,WAAA,EACzC,CACD;AAAA,SACH,EAAA,CAAA;AAAA,QAED,KAAK,WACJ,oBAAA,GAAA,CAAC,gBAAiB,EAAA,EAAA,OAAA,EAAS,KAAK,WAAa,EAAA;AAAA,OAAA,EAEjD,CACF,EAAA,CAAA;AAAA,MAED,GAAA,KACE,SAAS,MACR,mBAAA,GAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM,CAAC,GAAA,IAAO,EAAE,CAAA;AAAA,UAChB,gBAAA,EAAkB,EAAE,aAAA,EAAe,KAAM,EAAA;AAAA,UACzC,IAAA;AAAA,UACA,YAAc,EAAA;AAAA;AAAA,OAGhB,mBAAA,GAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM,CAAC,GAAA,IAAO,EAAE,CAAA;AAAA,UAChB,gBAAA,EAAkB,EAAE,aAAA,EAAe,KAAM,EAAA;AAAA,UACzC,IAAA;AAAA,UACA,aAAa,EAAA,IAAA;AAAA,UACb,YAAc,EAAA;AAAA;AAAA,OAChB,CAAA;AAAA,MAEH,CAAC,GAAO,oBAAA,GAAA,CAAC,QAAS,EAAA,EAAA;AAAA,KACrB,EAAA,CAAA;AAAA,yBACC,IAAK,EAAA,EAAA,IAAA,EAAI,MAAC,EAAI,EAAA,CAAA,EAAG,IAAI,CACpB,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,gBAAiB,EAAA,EAAA,CAAA;AAAA,MACjB,wBAEG,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YACC,IAAK,EAAA,KAAA;AAAA,YACL,KAAA,EAAO,EAAE,+BAA+B,CAAA;AAAA,YACxC,gBAAA,EAAkB,EAAE,0CAA0C,CAAA;AAAA,YAC9D,IAAM,kBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,CAAA;AAAA,YACjC,SAAS,EAAE,IAAA,EAAM,CAAC,IAAA,CAAK,GAAG,CAAE,EAAA;AAAA,YAC5B,QAAS,EAAA;AAAA;AAAA,SACX;AAAA,wBAEA,GAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YACC,IAAK,EAAA,YAAA;AAAA,YACL,KAAA,EAAO,EAAE,6BAA6B,CAAA;AAAA,YACtC,gBAAA,EAAkB,EAAE,wCAAwC,CAAA;AAAA,YAC5D,SAAS,EAAE,IAAA,EAAM,CAAC,IAAA,CAAK,GAAG,CAAE,EAAA;AAAA,YAC5B,QAAS,EAAA;AAAA;AAAA,SACX;AAAA,wBACA,GAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YACC,IAAK,EAAA,WAAA;AAAA,YACL,KAAA,EAAO,EAAE,4BAA4B,CAAA;AAAA,YACrC,gBAAA,EAAkB,EAAE,uCAAuC,CAAA;AAAA,YAC3D,SAAS,EAAE,IAAA,EAAM,CAAC,IAAA,CAAK,GAAG,CAAE,EAAA;AAAA,YAC5B,QAAS,EAAA;AAAA;AAAA;AACX,OACF,EAAA,CAAA;AAAA,MAED,CAAC,IAAA,oBAEE,GAAA,CAAA,QAAA,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,8BAA2B,CAC9B,EAAA;AAAA,KAEJ,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -2,7 +2,7 @@ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
|
2
2
|
import { useState } from 'react';
|
|
3
3
|
import { ContentHeader } from '@backstage/core-components';
|
|
4
4
|
import { useParams, useSearchParams } from 'react-router-dom';
|
|
5
|
-
import { useUserInfo, qetaTranslationRef, useIdentityApi, UserFollowButton, ButtonContainer, AskQuestionButton, WriteArticleButton, PostsContainer, PostsGrid, CollectionsGrid, AnswersContainer } from '@drodil/backstage-plugin-qeta-react';
|
|
5
|
+
import { useUserInfo, qetaTranslationRef, useIdentityApi, UserFollowButton, ButtonContainer, AskQuestionButton, WriteArticleButton, CreateLinkButton, PostsContainer, PostsGrid, CollectionsGrid, AnswersContainer } from '@drodil/backstage-plugin-qeta-react';
|
|
6
6
|
import { UserStatsContent } from './UserStatsContent.esm.js';
|
|
7
7
|
import { TabContext, TabList, TabPanel } from '@material-ui/lab';
|
|
8
8
|
import { makeStyles, Box, Avatar, Tooltip, Typography, Tab } from '@material-ui/core';
|
|
@@ -12,6 +12,7 @@ import HelpOutlineIcon from '@material-ui/icons/HelpOutline';
|
|
|
12
12
|
import CollectionsBookmarkIcon from '@material-ui/icons/CollectionsBookmark';
|
|
13
13
|
import CollectionsIcon from '@material-ui/icons/Collections';
|
|
14
14
|
import QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';
|
|
15
|
+
import LinkIcon from '@material-ui/icons/Link';
|
|
15
16
|
|
|
16
17
|
const useStyles = makeStyles((theme) => ({
|
|
17
18
|
tabIcon: {
|
|
@@ -96,7 +97,8 @@ const UserPage = () => {
|
|
|
96
97
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
97
98
|
/* @__PURE__ */ jsx(ContentHeader, { titleComponent: title, children: /* @__PURE__ */ jsxs(ButtonContainer, { children: [
|
|
98
99
|
/* @__PURE__ */ jsx(AskQuestionButton, {}),
|
|
99
|
-
/* @__PURE__ */ jsx(WriteArticleButton, {})
|
|
100
|
+
/* @__PURE__ */ jsx(WriteArticleButton, {}),
|
|
101
|
+
/* @__PURE__ */ jsx(CreateLinkButton, {})
|
|
100
102
|
] }) }),
|
|
101
103
|
/* @__PURE__ */ jsxs(TabContext, { value: tab, children: [
|
|
102
104
|
/* @__PURE__ */ jsx(Box, { className: classes.tabList, children: /* @__PURE__ */ jsxs(
|
|
@@ -147,6 +149,19 @@ const UserPage = () => {
|
|
|
147
149
|
)
|
|
148
150
|
}
|
|
149
151
|
),
|
|
152
|
+
/* @__PURE__ */ jsx(
|
|
153
|
+
Tab,
|
|
154
|
+
{
|
|
155
|
+
value: "links",
|
|
156
|
+
label: /* @__PURE__ */ jsx(
|
|
157
|
+
TabLabel,
|
|
158
|
+
{
|
|
159
|
+
icon: /* @__PURE__ */ jsx(LinkIcon, { className: classes.tabIcon }),
|
|
160
|
+
label: t("userPage.links")
|
|
161
|
+
}
|
|
162
|
+
)
|
|
163
|
+
}
|
|
164
|
+
),
|
|
150
165
|
/* @__PURE__ */ jsx(
|
|
151
166
|
Tab,
|
|
152
167
|
{
|
|
@@ -193,6 +208,14 @@ const UserPage = () => {
|
|
|
193
208
|
showNoQuestionsBtn: false
|
|
194
209
|
}
|
|
195
210
|
) }),
|
|
211
|
+
/* @__PURE__ */ jsx(TabPanel, { value: "links", className: classes.tabPanel, children: /* @__PURE__ */ jsx(
|
|
212
|
+
PostsGrid,
|
|
213
|
+
{
|
|
214
|
+
author: identity ?? "",
|
|
215
|
+
type: "link",
|
|
216
|
+
showNoQuestionsBtn: false
|
|
217
|
+
}
|
|
218
|
+
) }),
|
|
196
219
|
/* @__PURE__ */ jsx(TabPanel, { value: "collections", className: classes.tabPanel, children: /* @__PURE__ */ jsx(CollectionsGrid, { owner: identity ?? "" }) }),
|
|
197
220
|
/* @__PURE__ */ jsx(TabPanel, { value: "answers", className: classes.tabPanel, children: /* @__PURE__ */ jsx(
|
|
198
221
|
AnswersContainer,
|
|
@@ -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 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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"}
|
|
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 CreateLinkButton,\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';\nimport LinkIcon from '@material-ui/icons/Link';\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 <CreateLinkButton />\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=\"links\"\n label={\n <TabLabel\n icon={<LinkIcon className={classes.tabIcon} />}\n label={t('userPage.links')}\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=\"links\" className={classes.tabPanel}>\n <PostsGrid\n author={identity ?? ''}\n type=\"link\"\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":";;;;;;;;;;;;;;;;AAmCA,MAAM,SAAA,GAAY,WAAW,CAAU,KAAA,MAAA;AAAA,EACrC,OAAS,EAAA;AAAA,IACP,WAAA,EAAa,KAAM,CAAA,OAAA,CAAQ,CAAC;AAAA,GAC9B;AAAA,EACA,QAAU,EAAA;AAAA,IACR,OAAA,EAAS,KAAM,CAAA,OAAA,CAAQ,CAAC;AAAA,GAC1B;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IACtB,MAAA,EAAQ,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IACvB,WAAA,EAAa,KAAM,CAAA,OAAA,CAAQ,CAAC;AAAA,GAC9B;AAAA,EACA,aAAe,EAAA;AAAA,IACb,OAAS,EAAA,MAAA;AAAA,IACT,UAAY,EAAA,QAAA;AAAA,IACZ,OAAA,EAAS,KAAM,CAAA,OAAA,CAAQ,CAAC;AAAA,GAC1B;AAAA,EACA,SAAS,EAAC;AAAA,EACV,QAAU,EAAA;AAAA,IACR,OAAS,EAAA,MAAA;AAAA,IACT,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA,YAAA;AAAA,IAChB,QAAU,EAAA;AAAA;AAEd,CAAE,CAAA,CAAA;AAEK,MAAM,WAAW,MAAM;AAC5B,EAAA,MAAM,QAAW,GAAA,SAAA,EAAY,CAAA,GAAG,CAAK,IAAA,SAAA;AACrC,EAAA,MAAM,EAAE,IAAM,EAAA,QAAA,EAAU,MAAM,cAAe,EAAA,GAAI,YAAY,QAAQ,CAAA;AACrE,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAI,SAAS,YAAY,CAAA;AAC3C,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,CAAC,aAAA,EAAe,eAAe,CAAA,GAAI,eAAgB,EAAA;AACzD,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAM,MAAA;AAAA,IACJ,KAAO,EAAA,WAAA;AAAA,IACP,OAAS,EAAA,WAAA;AAAA,IACT,KAAO,EAAA;AAAA,MACL,cAAe,CAAA,CAAA,GAAA,KAAO,IAAI,oBAAqB,EAAA,EAAG,EAAE,CAAA;AAExD,EAAM,MAAA,YAAA,GAAe,CAAC,MAAA,EAAyB,QAAqB,KAAA;AAClE,IAAA,eAAA,CAAgB,EAAE,CAAA;AAClB,IAAA,MAAA,CAAO,QAAQ,CAAA;AAAA,GACjB;AAEA,EAAA,MAAM,WAAW,CAAC;AAAA,IAChB,IAAA;AAAA,IACA;AAAA,GAKA,qBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,QAAQ,QACrB,EAAA,QAAA,EAAA;AAAA,IAAA,IAAA;AAAA,oBACD,GAAA,CAAC,UAAM,QAAM,EAAA,KAAA,EAAA;AAAA,GACf,EAAA,CAAA;AAGF,EAAA,MAAM,KACJ,mBAAA,IAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,WAAW,OAAQ,CAAA,aAAA;AAAA,MACnB,IAAK,EAAA,QAAA;AAAA,MACL,YAAA,EAAY,EAAE,wBAAwB,CAAA;AAAA,MAEtC,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,IAAM,EAAA,IAAA,EAAM,OAAS,EAAA,OAAA;AAAA,YAC1B,GAAK,EAAA,IAAA;AAAA,YACL,OAAQ,EAAA,SAAA;AAAA,YACR,WAAW,OAAQ,CAAA,MAAA;AAAA,YACnB,YAAY,EAAA,CAAA,CAAE,yBAA2B,EAAA,EAAE,MAAM,CAAA;AAAA,YAEhD,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,6BACC,GACC,EAAA,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,OAAQ,EAAA,EAAA,KAAA,EAAO,cAAkB,IAAA,EAAA,EAAI,OAAK,IACzC,EAAA,QAAA,kBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,MAAK,SAAU,EAAA,IAAA,EAAK,EAAG,EAAA,WAAA,EACxC,gBACH,CACF,EAAA,CAAA;AAAA,UACC,CAAC,WACA,IAAA,CAAC,SACD,IAAA,WAAA,EAAa,kBAAkB,QAC7B,oBAAA,GAAA;AAAA,YAAC,gBAAA;AAAA,YAAA;AAAA,cACC,OAAS,EAAA,QAAA;AAAA,cACT,KAAA,EAAO,EAAE,UAAA,EAAY,OAAQ,EAAA;AAAA,cAC7B,YAAY,EAAA,CAAA,CAAE,qBAAuB,EAAA,EAAE,MAAM;AAAA;AAAA;AAC/C,SAEN,EAAA;AAAA;AAAA;AAAA,GACF;AAGF,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,aAAc,EAAA,EAAA,cAAA,EAAgB,KAC7B,EAAA,QAAA,kBAAA,IAAA,CAAC,eACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,iBAAkB,EAAA,EAAA,CAAA;AAAA,0BAClB,kBAAmB,EAAA,EAAA,CAAA;AAAA,0BACnB,gBAAiB,EAAA,EAAA;AAAA,KAAA,EACpB,CACF,EAAA,CAAA;AAAA,oBACA,IAAA,CAAC,UAAW,EAAA,EAAA,KAAA,EAAO,GACjB,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,GAAA,EAAA,EAAI,SAAW,EAAA,OAAA,CAAQ,OACtB,EAAA,QAAA,kBAAA,IAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,QAAU,EAAA,YAAA;AAAA,UACV,YAAA,EAAY,EAAE,qBAAqB,CAAA;AAAA,UACnC,iBAAgB,EAAA,WAAA;AAAA,UAChB,OAAQ,EAAA,YAAA;AAAA,UACR,aAAc,EAAA,MAAA;AAAA,UAEd,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,KAAM,EAAA,YAAA;AAAA,gBACN,KACE,kBAAA,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAM,kBAAA,GAAA,CAAC,cAAe,EAAA,EAAA,SAAA,EAAW,QAAQ,OAAS,EAAA,CAAA;AAAA,oBAClD,KAAA,EAAO,EAAE,qBAAqB;AAAA;AAAA;AAChC;AAAA,aAEJ;AAAA,4BACA,GAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,KAAM,EAAA,WAAA;AAAA,gBACN,KACE,kBAAA,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAM,kBAAA,GAAA,CAAC,eAAgB,EAAA,EAAA,SAAA,EAAW,QAAQ,OAAS,EAAA,CAAA;AAAA,oBACnD,KAAA,EAAO,EAAE,oBAAoB;AAAA;AAAA;AAC/B;AAAA,aAEJ;AAAA,4BACA,GAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,KAAM,EAAA,UAAA;AAAA,gBACN,KACE,kBAAA,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAM,kBAAA,GAAA,CAAC,uBAAwB,EAAA,EAAA,SAAA,EAAW,QAAQ,OAAS,EAAA,CAAA;AAAA,oBAC3D,KAAA,EAAO,EAAE,mBAAmB;AAAA;AAAA;AAC9B;AAAA,aAEJ;AAAA,4BACA,GAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,KAAM,EAAA,OAAA;AAAA,gBACN,KACE,kBAAA,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAM,kBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,SAAA,EAAW,QAAQ,OAAS,EAAA,CAAA;AAAA,oBAC5C,KAAA,EAAO,EAAE,gBAAgB;AAAA;AAAA;AAC3B;AAAA,aAEJ;AAAA,4BACA,GAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,KAAM,EAAA,aAAA;AAAA,gBACN,KACE,kBAAA,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAM,kBAAA,GAAA,CAAC,eAAgB,EAAA,EAAA,SAAA,EAAW,QAAQ,OAAS,EAAA,CAAA;AAAA,oBACnD,KAAA,EAAO,EAAE,sBAAsB;AAAA;AAAA;AACjC;AAAA,aAEJ;AAAA,4BACA,GAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,KAAM,EAAA,SAAA;AAAA,gBACN,KACE,kBAAA,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAM,kBAAA,GAAA,CAAC,kBAAmB,EAAA,EAAA,SAAA,EAAW,QAAQ,OAAS,EAAA,CAAA;AAAA,oBACtD,KAAA,EAAO,EAAE,kBAAkB;AAAA;AAAA;AAC7B;AAAA;AAEJ;AAAA;AAAA,OAEJ,EAAA,CAAA;AAAA,sBACC,GAAA,CAAA,QAAA,EAAA,EAAS,KAAM,EAAA,YAAA,EAAa,SAAW,EAAA,OAAA,CAAQ,QAC9C,EAAA,QAAA,kBAAA,GAAA,CAAC,gBAAiB,EAAA,EAAA,OAAA,EAAS,QAAY,IAAA,EAAA,EAAI,CAC7C,EAAA,CAAA;AAAA,0BACC,QAAS,EAAA,EAAA,KAAA,EAAM,WAAY,EAAA,SAAA,EAAW,QAAQ,QAC7C,EAAA,QAAA,kBAAA,GAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,QAAQ,QAAY,IAAA,EAAA;AAAA,UACpB,kBAAoB,EAAA,KAAA;AAAA,UACpB,IAAK,EAAA;AAAA;AAAA,OAET,EAAA,CAAA;AAAA,0BACC,QAAS,EAAA,EAAA,KAAA,EAAM,UAAW,EAAA,SAAA,EAAW,QAAQ,QAC5C,EAAA,QAAA,kBAAA,GAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,QAAQ,QAAY,IAAA,EAAA;AAAA,UACpB,IAAK,EAAA,SAAA;AAAA,UACL,kBAAoB,EAAA;AAAA;AAAA,OAExB,EAAA,CAAA;AAAA,0BACC,QAAS,EAAA,EAAA,KAAA,EAAM,OAAQ,EAAA,SAAA,EAAW,QAAQ,QACzC,EAAA,QAAA,kBAAA,GAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,QAAQ,QAAY,IAAA,EAAA;AAAA,UACpB,IAAK,EAAA,MAAA;AAAA,UACL,kBAAoB,EAAA;AAAA;AAAA,OAExB,EAAA,CAAA;AAAA,sBACC,GAAA,CAAA,QAAA,EAAA,EAAS,KAAM,EAAA,aAAA,EAAc,SAAW,EAAA,OAAA,CAAQ,QAC/C,EAAA,QAAA,kBAAA,GAAA,CAAC,eAAgB,EAAA,EAAA,KAAA,EAAO,QAAY,IAAA,EAAA,EAAI,CAC1C,EAAA,CAAA;AAAA,0BACC,QAAS,EAAA,EAAA,KAAA,EAAM,SAAU,EAAA,SAAA,EAAW,QAAQ,QAC3C,EAAA,QAAA,kBAAA,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,QAAQ,QAAY,IAAA,EAAA;AAAA,UACpB,KAAA,EAAO,EAAE,kBAAkB;AAAA;AAAA,OAE/B,EAAA;AAAA,KACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { qetaTranslationRef, UsersGrid, FollowedUsersList,
|
|
2
|
+
import { qetaTranslationRef, UsersGrid, FollowedUsersList, PostHighlightListContainer } from '@drodil/backstage-plugin-qeta-react';
|
|
3
3
|
import { ContentHeader } from '@backstage/core-components';
|
|
4
4
|
import { Grid } from '@material-ui/core';
|
|
5
|
-
import Whatshot from '@material-ui/icons/Whatshot';
|
|
6
5
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
7
6
|
|
|
8
7
|
const UsersPage = () => {
|
|
@@ -14,26 +13,7 @@ const UsersPage = () => {
|
|
|
14
13
|
] }),
|
|
15
14
|
/* @__PURE__ */ jsxs(Grid, { item: true, lg: 3, xl: 2, children: [
|
|
16
15
|
/* @__PURE__ */ jsx(FollowedUsersList, {}),
|
|
17
|
-
/* @__PURE__ */ jsx(
|
|
18
|
-
PostHighlightList,
|
|
19
|
-
{
|
|
20
|
-
type: "hot",
|
|
21
|
-
title: t("highlights.hotQuestions.title"),
|
|
22
|
-
noQuestionsLabel: t("highlights.hotQuestions.noQuestionsLabel"),
|
|
23
|
-
icon: /* @__PURE__ */ jsx(Whatshot, { fontSize: "small" }),
|
|
24
|
-
postType: "question"
|
|
25
|
-
}
|
|
26
|
-
),
|
|
27
|
-
/* @__PURE__ */ jsx(
|
|
28
|
-
PostHighlightList,
|
|
29
|
-
{
|
|
30
|
-
type: "hot",
|
|
31
|
-
title: t("highlights.hotArticles.title"),
|
|
32
|
-
noQuestionsLabel: t("highlights.hotArticles.noArticlesLabel"),
|
|
33
|
-
icon: /* @__PURE__ */ jsx(Whatshot, { fontSize: "small" }),
|
|
34
|
-
postType: "article"
|
|
35
|
-
}
|
|
36
|
-
)
|
|
16
|
+
/* @__PURE__ */ jsx(PostHighlightListContainer, {})
|
|
37
17
|
] })
|
|
38
18
|
] });
|
|
39
19
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UsersPage.esm.js","sources":["../../../src/components/UsersPage/UsersPage.tsx"],"sourcesContent":["import {\n FollowedUsersList,\n
|
|
1
|
+
{"version":3,"file":"UsersPage.esm.js","sources":["../../../src/components/UsersPage/UsersPage.tsx"],"sourcesContent":["import {\n FollowedUsersList,\n PostHighlightListContainer,\n qetaTranslationRef,\n UsersGrid,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { ContentHeader } from '@backstage/core-components';\nimport { Grid } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const UsersPage = () => {\n const { t } = useTranslationRef(qetaTranslationRef);\n\n return (\n <Grid container spacing={4}>\n <Grid item md={12} lg={9} xl={10}>\n <ContentHeader title={t('usersPage.title')} />\n <UsersGrid />\n </Grid>\n <Grid item lg={3} xl={2}>\n <FollowedUsersList />\n <PostHighlightListContainer />\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;;;AAUO,MAAM,YAAY,MAAM;AAC7B,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAA,uBACG,IAAA,CAAA,IAAA,EAAA,EAAK,SAAS,EAAA,IAAA,EAAC,SAAS,CACvB,EAAA,QAAA,EAAA;AAAA,oBAAC,IAAA,CAAA,IAAA,EAAA,EAAK,MAAI,IAAC,EAAA,EAAA,EAAI,IAAI,EAAI,EAAA,CAAA,EAAG,IAAI,EAC5B,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,aAAc,EAAA,EAAA,KAAA,EAAO,CAAE,CAAA,iBAAiB,CAAG,EAAA,CAAA;AAAA,0BAC3C,SAAU,EAAA,EAAA;AAAA,KACb,EAAA,CAAA;AAAA,yBACC,IAAK,EAAA,EAAA,IAAA,EAAI,MAAC,EAAI,EAAA,CAAA,EAAG,IAAI,CACpB,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,iBAAkB,EAAA,EAAA,CAAA;AAAA,0BAClB,0BAA2B,EAAA,EAAA;AAAA,KAC9B,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
|
package/dist/package.json.esm.js
CHANGED
package/dist/plugin.esm.js
CHANGED
package/dist/plugin.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.esm.js","sources":["../src/plugin.ts"],"sourcesContent":["import {\n createApiFactory,\n createPlugin,\n createRoutableExtension,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\nimport { createCardExtension } from '@backstage/plugin-home-react';\nimport { createSearchResultListItemExtension } from '@backstage/plugin-search-react';\nimport { qetaApiRef, qetaRouteRef } from '@drodil/backstage-plugin-qeta-react';\nimport { PostType, QetaClient } from '@drodil/backstage-plugin-qeta-common';\nimport type { QetaSearchResultListItemProps } from './components/QetaSearchResultListItem';\n\nexport const qetaPlugin = createPlugin({\n id: 'qeta',\n routes: {\n root: qetaRouteRef,\n },\n apis: [\n createApiFactory({\n api: qetaApiRef,\n deps: { fetchApi: fetchApiRef, discoveryApi: discoveryApiRef },\n factory: ({ fetchApi, discoveryApi }) =>\n new QetaClient({ fetchApi, discoveryApi }),\n }),\n ],\n});\n\nexport const QetaPage = qetaPlugin.provide(\n createRoutableExtension({\n name: 'QetaPage',\n component: () => import('./components/QetaPage').then(m => m.QetaPage),\n mountPoint: qetaRouteRef,\n }),\n);\n\nexport const PostsTableCard = qetaPlugin.provide(\n createCardExtension<{\n postType?: PostType;\n rowsPerPage?: number;\n quickFilter?: string;\n }>({\n name: 'PostsTableCard',\n title: 'Q&A',\n description: 'Shows Q&A posts',\n components: () => import('./components/PostsTableCard'),\n layout: {\n height: { minRows: 6 },\n width: { minColumns: 6 },\n },\n settings: {\n schema: {\n title: 'Q&A',\n type: 'object',\n properties: {\n postType: {\n title: 'Post type',\n type: 'string',\n enum: ['question', 'article'],\n default: undefined,\n },\n rowsPerPage: {\n title: 'Rows per page',\n type: 'number',\n enum: [5, 10, 20, 30, 40, 50],\n default: 10,\n },\n quickFilter: {\n title: 'Default filter',\n type: 'string',\n enum: ['latest', 'favorites', 'most_viewed'],\n default: 'latest',\n },\n },\n },\n },\n }),\n);\n\n/**\n * @deprecated Use PostsTableCard instead\n */\nexport const QuestionsTableCard = PostsTableCard;\n\n/**\n * React extension used to render results on Search page or modal\n *\n * @public\n */\nexport const QetaSearchResultListItem: (\n props: QetaSearchResultListItemProps,\n) => JSX.Element | null = qetaPlugin.provide(\n createSearchResultListItemExtension({\n name: 'QetaSearchResultListItem',\n component: () =>\n import('./components/QetaSearchResultListItem').then(\n m => m.QetaSearchResultListItem,\n ),\n predicate: result => result.type === 'qeta',\n }),\n);\n"],"names":[],"mappings":";;;;;;AAaO,MAAM,aAAa,YAAa,CAAA;AAAA,EACrC,EAAI,EAAA,MAAA;AAAA,EACJ,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA;AAAA,GACR;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,gBAAiB,CAAA;AAAA,MACf,GAAK,EAAA,UAAA;AAAA,MACL,IAAM,EAAA,EAAE,QAAU,EAAA,WAAA,EAAa,cAAc,eAAgB,EAAA;AAAA,MAC7D,OAAA,EAAS,CAAC,EAAE,QAAU,EAAA,YAAA,EACpB,KAAA,IAAI,UAAW,CAAA,EAAE,QAAU,EAAA,YAAA,EAAc;AAAA,KAC5C;AAAA;AAEL,CAAC;AAEM,MAAM,WAAW,UAAW,CAAA,OAAA;AAAA,EACjC,uBAAwB,CAAA;AAAA,IACtB,IAAM,EAAA,UAAA;AAAA,IACN,SAAA,EAAW,MAAM,OAAO,oCAAuB,EAAE,IAAK,CAAA,CAAA,CAAA,KAAK,EAAE,QAAQ,CAAA;AAAA,IACrE,UAAY,EAAA;AAAA,GACb;AACH;AAEO,MAAM,iBAAiB,UAAW,CAAA,OAAA;AAAA,EACvC,mBAIG,CAAA;AAAA,IACD,IAAM,EAAA,gBAAA;AAAA,IACN,KAAO,EAAA,KAAA;AAAA,IACP,WAAa,EAAA,iBAAA;AAAA,IACb,UAAA,EAAY,MAAM,OAAO,0CAA6B,CAAA;AAAA,IACtD,MAAQ,EAAA;AAAA,MACN,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAE,EAAA;AAAA,MACrB,KAAA,EAAO,EAAE,UAAA,EAAY,CAAE;AAAA,KACzB;AAAA,IACA,QAAU,EAAA;AAAA,MACR,MAAQ,EAAA;AAAA,QACN,KAAO,EAAA,KAAA;AAAA,QACP,IAAM,EAAA,QAAA;AAAA,QACN,UAAY,EAAA;AAAA,UACV,QAAU,EAAA;AAAA,YACR,KAAO,EAAA,WAAA;AAAA,YACP,IAAM,EAAA,QAAA;AAAA,YACN,
|
|
1
|
+
{"version":3,"file":"plugin.esm.js","sources":["../src/plugin.ts"],"sourcesContent":["import {\n createApiFactory,\n createPlugin,\n createRoutableExtension,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\nimport { createCardExtension } from '@backstage/plugin-home-react';\nimport { createSearchResultListItemExtension } from '@backstage/plugin-search-react';\nimport { qetaApiRef, qetaRouteRef } from '@drodil/backstage-plugin-qeta-react';\nimport { PostType, QetaClient } from '@drodil/backstage-plugin-qeta-common';\nimport type { QetaSearchResultListItemProps } from './components/QetaSearchResultListItem';\n\nexport const qetaPlugin = createPlugin({\n id: 'qeta',\n routes: {\n root: qetaRouteRef,\n },\n apis: [\n createApiFactory({\n api: qetaApiRef,\n deps: { fetchApi: fetchApiRef, discoveryApi: discoveryApiRef },\n factory: ({ fetchApi, discoveryApi }) =>\n new QetaClient({ fetchApi, discoveryApi }),\n }),\n ],\n});\n\nexport const QetaPage = qetaPlugin.provide(\n createRoutableExtension({\n name: 'QetaPage',\n component: () => import('./components/QetaPage').then(m => m.QetaPage),\n mountPoint: qetaRouteRef,\n }),\n);\n\nexport const PostsTableCard = qetaPlugin.provide(\n createCardExtension<{\n postType?: PostType;\n rowsPerPage?: number;\n quickFilter?: string;\n }>({\n name: 'PostsTableCard',\n title: 'Q&A',\n description: 'Shows Q&A posts',\n components: () => import('./components/PostsTableCard'),\n layout: {\n height: { minRows: 6 },\n width: { minColumns: 6 },\n },\n settings: {\n schema: {\n title: 'Q&A',\n type: 'object',\n properties: {\n postType: {\n title: 'Post type',\n type: 'string',\n enum: ['question', 'article', 'link'],\n default: undefined,\n },\n rowsPerPage: {\n title: 'Rows per page',\n type: 'number',\n enum: [5, 10, 20, 30, 40, 50],\n default: 10,\n },\n quickFilter: {\n title: 'Default filter',\n type: 'string',\n enum: ['latest', 'favorites', 'most_viewed'],\n default: 'latest',\n },\n },\n },\n },\n }),\n);\n\n/**\n * @deprecated Use PostsTableCard instead\n */\nexport const QuestionsTableCard = PostsTableCard;\n\n/**\n * React extension used to render results on Search page or modal\n *\n * @public\n */\nexport const QetaSearchResultListItem: (\n props: QetaSearchResultListItemProps,\n) => JSX.Element | null = qetaPlugin.provide(\n createSearchResultListItemExtension({\n name: 'QetaSearchResultListItem',\n component: () =>\n import('./components/QetaSearchResultListItem').then(\n m => m.QetaSearchResultListItem,\n ),\n predicate: result => result.type === 'qeta',\n }),\n);\n"],"names":[],"mappings":";;;;;;AAaO,MAAM,aAAa,YAAa,CAAA;AAAA,EACrC,EAAI,EAAA,MAAA;AAAA,EACJ,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA;AAAA,GACR;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,gBAAiB,CAAA;AAAA,MACf,GAAK,EAAA,UAAA;AAAA,MACL,IAAM,EAAA,EAAE,QAAU,EAAA,WAAA,EAAa,cAAc,eAAgB,EAAA;AAAA,MAC7D,OAAA,EAAS,CAAC,EAAE,QAAU,EAAA,YAAA,EACpB,KAAA,IAAI,UAAW,CAAA,EAAE,QAAU,EAAA,YAAA,EAAc;AAAA,KAC5C;AAAA;AAEL,CAAC;AAEM,MAAM,WAAW,UAAW,CAAA,OAAA;AAAA,EACjC,uBAAwB,CAAA;AAAA,IACtB,IAAM,EAAA,UAAA;AAAA,IACN,SAAA,EAAW,MAAM,OAAO,oCAAuB,EAAE,IAAK,CAAA,CAAA,CAAA,KAAK,EAAE,QAAQ,CAAA;AAAA,IACrE,UAAY,EAAA;AAAA,GACb;AACH;AAEO,MAAM,iBAAiB,UAAW,CAAA,OAAA;AAAA,EACvC,mBAIG,CAAA;AAAA,IACD,IAAM,EAAA,gBAAA;AAAA,IACN,KAAO,EAAA,KAAA;AAAA,IACP,WAAa,EAAA,iBAAA;AAAA,IACb,UAAA,EAAY,MAAM,OAAO,0CAA6B,CAAA;AAAA,IACtD,MAAQ,EAAA;AAAA,MACN,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAE,EAAA;AAAA,MACrB,KAAA,EAAO,EAAE,UAAA,EAAY,CAAE;AAAA,KACzB;AAAA,IACA,QAAU,EAAA;AAAA,MACR,MAAQ,EAAA;AAAA,QACN,KAAO,EAAA,KAAA;AAAA,QACP,IAAM,EAAA,QAAA;AAAA,QACN,UAAY,EAAA;AAAA,UACV,QAAU,EAAA;AAAA,YACR,KAAO,EAAA,WAAA;AAAA,YACP,IAAM,EAAA,QAAA;AAAA,YACN,IAAM,EAAA,CAAC,UAAY,EAAA,SAAA,EAAW,MAAM,CAAA;AAAA,YACpC,OAAS,EAAA,KAAA;AAAA,WACX;AAAA,UACA,WAAa,EAAA;AAAA,YACX,KAAO,EAAA,eAAA;AAAA,YACP,IAAM,EAAA,QAAA;AAAA,YACN,MAAM,CAAC,CAAA,EAAG,IAAI,EAAI,EAAA,EAAA,EAAI,IAAI,EAAE,CAAA;AAAA,YAC5B,OAAS,EAAA;AAAA,WACX;AAAA,UACA,WAAa,EAAA;AAAA,YACX,KAAO,EAAA,gBAAA;AAAA,YACP,IAAM,EAAA,QAAA;AAAA,YACN,IAAM,EAAA,CAAC,QAAU,EAAA,WAAA,EAAa,aAAa,CAAA;AAAA,YAC3C,OAAS,EAAA;AAAA;AACX;AACF;AACF;AACF,GACD;AACH;AAKO,MAAM,kBAAqB,GAAA;AAO3B,MAAM,2BAEa,UAAW,CAAA,OAAA;AAAA,EACnC,mCAAoC,CAAA;AAAA,IAClC,IAAM,EAAA,0BAAA;AAAA,IACN,SAAW,EAAA,MACT,OAAO,oDAAuC,CAAE,CAAA,IAAA;AAAA,MAC9C,OAAK,CAAE,CAAA;AAAA,KACT;AAAA,IACF,SAAA,EAAW,CAAU,MAAA,KAAA,MAAA,CAAO,IAAS,KAAA;AAAA,GACtC;AACH;;;;"}
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"frontend",
|
|
8
8
|
"backstage.io"
|
|
9
9
|
],
|
|
10
|
-
"version": "3.
|
|
10
|
+
"version": "3.36.0",
|
|
11
11
|
"main": "./dist/index.esm.js",
|
|
12
12
|
"types": "./dist/index.d.ts",
|
|
13
13
|
"prepublishOnly": "yarn tsc && yarn build",
|
|
@@ -83,8 +83,8 @@
|
|
|
83
83
|
"@backstage/plugin-search-common": "^1.2.19",
|
|
84
84
|
"@backstage/plugin-search-react": "^1.9.4",
|
|
85
85
|
"@backstage/plugin-signals-react": "^0.0.15",
|
|
86
|
-
"@drodil/backstage-plugin-qeta-common": "^3.
|
|
87
|
-
"@drodil/backstage-plugin-qeta-react": "^3.
|
|
86
|
+
"@drodil/backstage-plugin-qeta-common": "^3.36.0",
|
|
87
|
+
"@drodil/backstage-plugin-qeta-react": "^3.36.0",
|
|
88
88
|
"@material-ui/core": "^4.12.2",
|
|
89
89
|
"@material-ui/icons": "^4.11.3",
|
|
90
90
|
"@material-ui/lab": "4.0.0-alpha.61",
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
"react-markdown": "8.0.7"
|
|
104
104
|
},
|
|
105
105
|
"devDependencies": {
|
|
106
|
-
"@backstage/cli": "^0.34.
|
|
106
|
+
"@backstage/cli": "^0.34.3",
|
|
107
107
|
"@backstage/dev-utils": "^1.1.14",
|
|
108
108
|
"@backstage/plugin-catalog": "^1.31.3",
|
|
109
109
|
"@backstage/plugin-home": "^0.8.12",
|