@drodil/backstage-plugin-qeta 3.56.1 → 3.58.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ArticlePage/ArticlePage.esm.js +2 -1
- package/dist/components/ArticlePage/ArticlePage.esm.js.map +1 -1
- package/dist/components/CollectionPage/CollectionPage.esm.js +4 -10
- package/dist/components/CollectionPage/CollectionPage.esm.js.map +1 -1
- package/dist/components/EntityPage/EntityPage.esm.js +9 -11
- package/dist/components/EntityPage/EntityPage.esm.js.map +1 -1
- package/dist/components/HomePage/HomePage.esm.js +56 -6
- package/dist/components/HomePage/HomePage.esm.js.map +1 -1
- package/dist/components/LinkPage/LinkPage.esm.js +2 -1
- package/dist/components/LinkPage/LinkPage.esm.js.map +1 -1
- package/dist/components/QetaPage/QetaPage.esm.js +15 -9
- package/dist/components/QetaPage/QetaPage.esm.js.map +1 -1
- package/dist/components/QuestionPage/QuestionPage.esm.js +2 -1
- package/dist/components/QuestionPage/QuestionPage.esm.js.map +1 -1
- package/dist/components/RightContent/HomeRightContent.esm.js +36 -9
- package/dist/components/RightContent/HomeRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/LinkedPosts.esm.js +46 -0
- package/dist/components/RightContent/LinkedPosts.esm.js.map +1 -0
- package/dist/components/RightContent/PostRightContent.esm.js +2 -0
- package/dist/components/RightContent/PostRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/RightContent.esm.js +5 -2
- package/dist/components/RightContent/RightContent.esm.js.map +1 -1
- package/dist/components/RightContent/SimilarQuestions.esm.js +18 -2
- package/dist/components/RightContent/SimilarQuestions.esm.js.map +1 -1
- package/dist/components/TagPage/TagPage.esm.js +75 -17
- package/dist/components/TagPage/TagPage.esm.js.map +1 -1
- package/dist/components/UserPage/UserPage.esm.js +37 -23
- package/dist/components/UserPage/UserPage.esm.js.map +1 -1
- package/dist/components/UserPage/UserStatsContent.esm.js +15 -5
- package/dist/components/UserPage/UserStatsContent.esm.js.map +1 -1
- package/dist/package.json.esm.js +2 -2
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuestionPage.esm.js","sources":["../../../src/components/QuestionPage/QuestionPage.tsx"],"sourcesContent":["import { Fragment, useCallback, useEffect, useMemo, useState } from 'react';\nimport { WarningPanel } from '@backstage/core-components';\nimport { useParams } from 'react-router-dom';\nimport {\n AddToCollectionButton,\n AIAnswerCard,\n AnswerCard,\n AnswerForm,\n AskQuestionButton,\n ContentHeader,\n ContentHeaderButton,\n DeletedBanner,\n DraftBanner,\n ObsoleteBanner,\n qetaTranslationRef,\n QuestionCard,\n RelativeTimeWithTooltip,\n UpdatedByLink,\n useQetaApi,\n} from '@drodil/backstage-plugin-qeta-react';\nimport Comment from '@material-ui/icons/Comment';\nimport {\n Answer,\n AnswerResponse,\n PostResponse,\n QetaSignal,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { useSignal } from '@backstage/plugin-signals-react';\nimport {\n Box,\n FormControl,\n Grid,\n makeStyles,\n MenuItem,\n TextField,\n Typography,\n} from '@material-ui/core';\nimport { Skeleton } from '@material-ui/lab';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport HelpOutline from '@material-ui/icons/HelpOutline';\n\nconst useDescriptionStyles = makeStyles(\n () => ({\n root: {},\n box: {\n display: 'inline',\n },\n }),\n { name: 'QetaDescription' },\n);\n\nexport const QuestionPage = () => {\n const { id } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n const [answers, setAnswers] = useState<AnswerResponse[]>([]);\n const [newAnswers, setNewAnswers] = useState<AnswerResponse[]>([]);\n const [answerSort, setAnswerSort] = useState<string>('default');\n const dStyles = useDescriptionStyles();\n\n const [answersCount, setAnswersCount] = useState(0);\n const [views, setViews] = useState(0);\n\n const { lastSignal } = useSignal<QetaSignal>(`qeta:post_${id}`);\n\n const {\n value: question,\n loading,\n error,\n } = useQetaApi(api => api.getPost(id), [id]);\n\n useEffect(() => {\n if (question) {\n setAnswersCount(question.answersCount);\n setViews(question.views);\n setAnswers(question.answers ?? []);\n }\n }, [question]);\n\n useEffect(() => {\n if (lastSignal?.type === 'post_stats') {\n setAnswersCount(lastSignal.answersCount);\n setViews(lastSignal.views);\n }\n }, [lastSignal]);\n\n const sortAnswers = useCallback(\n (a: Answer, b: Answer) => {\n if (answerSort === 'default') {\n return 1;\n }\n\n const parts = answerSort.split('_');\n const field = parts[0];\n const order = parts[1];\n\n let ret = -1;\n switch (field) {\n case 'created':\n ret = a.created > b.created ? -1 : 1;\n break;\n case 'score':\n ret = a.score > b.score ? -1 : 1;\n break;\n case 'author':\n ret = a.author > b.author ? -1 : 1;\n break;\n case 'comments':\n ret = (a.comments?.length ?? 0) > (b.comments?.length ?? 0) ? -1 : 1;\n break;\n case 'updated':\n ret = (a.updated ?? a.created) > (b.updated ?? b.created) ? -1 : 1;\n break;\n default:\n return 1;\n }\n\n if (order === 'desc') {\n ret *= -1;\n }\n return ret;\n },\n [answerSort],\n );\n\n const sortedAnswers = useMemo(() => {\n const allAnswers = [...answers, ...newAnswers];\n return allAnswers.sort(sortAnswers);\n }, [answers, newAnswers, sortAnswers]);\n\n const onAnswerPost = (answer: AnswerResponse) => {\n setNewAnswers(newAnswers.concat([answer]));\n setAnswersCount(prev => prev + 1);\n };\n\n const onAnswerDelete = (answer: AnswerResponse) => {\n setNewAnswers(newAnswers.filter(a => a.id !== answer.id));\n setAnswers(answers.filter(a => a.id !== answer.id));\n setAnswersCount(prev => prev - 1);\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 <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 </Fragment>\n )}\n <Box fontWeight=\"fontWeightMedium\" className={dStyles.box}>\n {t('common.viewsCount', { count: views })}\n </Box>\n </span>\n );\n };\n\n if (loading) {\n return (\n <Box role=\"status\" aria-label={t('common.loading')}>\n <Skeleton variant=\"rect\" height={200} animation=\"wave\" />\n <Box mt={2}>\n <Skeleton variant=\"text\" height={40} width=\"60%\" animation=\"wave\" />\n <Skeleton variant=\"text\" height={20} width=\"40%\" animation=\"wave\" />\n <Skeleton variant=\"text\" height={20} width=\"80%\" animation=\"wave\" />\n </Box>\n </Box>\n );\n }\n\n if (error || question === undefined) {\n return (\n <WarningPanel\n severity=\"error\"\n title={t('questionPage.errorLoading')}\n aria-live=\"assertive\"\n >\n {error?.message}\n </WarningPanel>\n );\n }\n\n if (question.type !== 'question') {\n return (\n <WarningPanel title=\"Not found\" message={t('questionPage.notFound')} />\n );\n }\n\n return (\n <>\n <ContentHeader\n title={question.title}\n description={getDescription(question)}\n titleIcon={<HelpOutline fontSize=\"large\" />}\n >\n <AskQuestionButton />\n <ContentHeaderButton\n onClick={() => {\n const element = document.getElementById('qeta-answer-form');\n if (element) {\n element.scrollIntoView({ behavior: 'smooth' });\n const input = element.querySelector('textarea');\n if (input) {\n input.focus();\n }\n }\n }}\n icon={<Comment />}\n disabled={question.status === 'obsolete'}\n >\n {t('questionPage.answerButton')}\n </ContentHeaderButton>\n <AddToCollectionButton post={question} />\n </ContentHeader>\n {question.status === 'draft' && <DraftBanner />}\n {question.status === 'deleted' && <DeletedBanner />}\n {question.status === 'obsolete' && <ObsoleteBanner />}\n <QuestionCard question={question} />\n <AIAnswerCard question={question} debounceMs={0} />\n {(question.status === 'active' || question.status === 'obsolete') && (\n <>\n <Box sx={{ mt: 3, mb: 2 }}>\n <Grid container justifyContent=\"space-between\" alignItems=\"center\">\n <Grid item>\n <Typography variant=\"h6\">\n {t('common.answersCount', {\n count: answersCount,\n })}\n </Typography>\n </Grid>\n {sortedAnswers.length > 1 && (\n <Grid item>\n <FormControl>\n <TextField\n select\n size=\"small\"\n label={t('questionPage.sortAnswers.label')}\n value={answerSort}\n onChange={val =>\n setAnswerSort(val.target.value as string)\n }\n inputProps={{\n name: 'sortAnswers',\n id: 'sort-answers',\n 'aria-label': t('questionPage.sortAnswers.label'),\n 'aria-describedby': 'sort-answers-helper',\n }}\n variant=\"outlined\"\n SelectProps={{\n MenuProps: {\n 'aria-label': t('questionPage.sortAnswers.menuLabel'),\n },\n }}\n >\n <MenuItem value=\"default\">\n {t('questionPage.sortAnswers.default')}\n </MenuItem>\n <MenuItem value=\"created_desc\">\n {t('questionPage.sortAnswers.createdDesc')}\n </MenuItem>\n <MenuItem value=\"created_asc\">\n {t('questionPage.sortAnswers.createdAsc')}\n </MenuItem>\n <MenuItem value=\"score_desc\">\n {t('questionPage.sortAnswers.scoreDesc')}\n </MenuItem>\n <MenuItem value=\"score_asc\">\n {t('questionPage.sortAnswers.scoreAsc')}\n </MenuItem>\n <MenuItem value=\"comments_desc\">\n {t('questionPage.sortAnswers.commentsDesc')}\n </MenuItem>\n <MenuItem value=\"comments_asc\">\n {t('questionPage.sortAnswers.commentsAsc')}\n </MenuItem>\n <MenuItem value=\"author_desc\">\n {t('questionPage.sortAnswers.authorDesc')}\n </MenuItem>\n <MenuItem value=\"author_asc\">\n {t('questionPage.sortAnswers.authorAsc')}\n </MenuItem>\n <MenuItem value=\"updated_desc\">\n {t('questionPage.sortAnswers.updatedDesc')}\n </MenuItem>\n <MenuItem value=\"updated_asc\">\n {t('questionPage.sortAnswers.updatedAsc')}\n </MenuItem>\n </TextField>\n </FormControl>\n </Grid>\n )}\n </Grid>\n </Box>\n {sortedAnswers.map(a => {\n return (\n <Fragment key={a.id}>\n <Box key={a.id} sx={{ mb: 1 }}>\n <AnswerCard\n answer={a}\n question={question}\n onAnswerDelete={onAnswerDelete}\n />\n </Box>\n </Fragment>\n );\n })}\n\n {question.status === 'active' && (\n <div id=\"qeta-answer-form\">\n <AnswerForm post={question} onPost={onAnswerPost} />\n </div>\n )}\n </>\n )}\n </>\n );\n};\n"],"names":["Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QuestionPage.esm.js","sources":["../../../src/components/QuestionPage/QuestionPage.tsx"],"sourcesContent":["import { Fragment, useCallback, useEffect, useMemo, useState } from 'react';\nimport { WarningPanel } from '@backstage/core-components';\nimport { useParams } from 'react-router-dom';\nimport {\n AddToCollectionButton,\n AIAnswerCard,\n AnswerCard,\n AnswerForm,\n AskQuestionButton,\n ContentHeader,\n ContentHeaderButton,\n DeletedBanner,\n DraftBanner,\n ObsoleteBanner,\n qetaTranslationRef,\n QuestionCard,\n RelativeTimeWithTooltip,\n UpdatedByLink,\n useQetaApi,\n FollowPostButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport Comment from '@material-ui/icons/Comment';\nimport {\n Answer,\n AnswerResponse,\n PostResponse,\n QetaSignal,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { useSignal } from '@backstage/plugin-signals-react';\nimport {\n Box,\n FormControl,\n Grid,\n makeStyles,\n MenuItem,\n TextField,\n Typography,\n} from '@material-ui/core';\nimport { Skeleton } from '@material-ui/lab';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport HelpOutline from '@material-ui/icons/HelpOutline';\n\nconst useDescriptionStyles = makeStyles(\n () => ({\n root: {},\n box: {\n display: 'inline',\n },\n }),\n { name: 'QetaDescription' },\n);\n\nexport const QuestionPage = () => {\n const { id } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n const [answers, setAnswers] = useState<AnswerResponse[]>([]);\n const [newAnswers, setNewAnswers] = useState<AnswerResponse[]>([]);\n const [answerSort, setAnswerSort] = useState<string>('default');\n const dStyles = useDescriptionStyles();\n\n const [answersCount, setAnswersCount] = useState(0);\n const [views, setViews] = useState(0);\n\n const { lastSignal } = useSignal<QetaSignal>(`qeta:post_${id}`);\n\n const {\n value: question,\n loading,\n error,\n } = useQetaApi(api => api.getPost(id), [id]);\n\n useEffect(() => {\n if (question) {\n setAnswersCount(question.answersCount);\n setViews(question.views);\n setAnswers(question.answers ?? []);\n }\n }, [question]);\n\n useEffect(() => {\n if (lastSignal?.type === 'post_stats') {\n setAnswersCount(lastSignal.answersCount);\n setViews(lastSignal.views);\n }\n }, [lastSignal]);\n\n const sortAnswers = useCallback(\n (a: Answer, b: Answer) => {\n if (answerSort === 'default') {\n return 1;\n }\n\n const parts = answerSort.split('_');\n const field = parts[0];\n const order = parts[1];\n\n let ret = -1;\n switch (field) {\n case 'created':\n ret = a.created > b.created ? -1 : 1;\n break;\n case 'score':\n ret = a.score > b.score ? -1 : 1;\n break;\n case 'author':\n ret = a.author > b.author ? -1 : 1;\n break;\n case 'comments':\n ret = (a.comments?.length ?? 0) > (b.comments?.length ?? 0) ? -1 : 1;\n break;\n case 'updated':\n ret = (a.updated ?? a.created) > (b.updated ?? b.created) ? -1 : 1;\n break;\n default:\n return 1;\n }\n\n if (order === 'desc') {\n ret *= -1;\n }\n return ret;\n },\n [answerSort],\n );\n\n const sortedAnswers = useMemo(() => {\n const allAnswers = [...answers, ...newAnswers];\n return allAnswers.sort(sortAnswers);\n }, [answers, newAnswers, sortAnswers]);\n\n const onAnswerPost = (answer: AnswerResponse) => {\n setNewAnswers(newAnswers.concat([answer]));\n setAnswersCount(prev => prev + 1);\n };\n\n const onAnswerDelete = (answer: AnswerResponse) => {\n setNewAnswers(newAnswers.filter(a => a.id !== answer.id));\n setAnswers(answers.filter(a => a.id !== answer.id));\n setAnswersCount(prev => prev - 1);\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 <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 </Fragment>\n )}\n <Box fontWeight=\"fontWeightMedium\" className={dStyles.box}>\n {t('common.viewsCount', { count: views })}\n </Box>\n </span>\n );\n };\n\n if (loading) {\n return (\n <Box role=\"status\" aria-label={t('common.loading')}>\n <Skeleton variant=\"rect\" height={200} animation=\"wave\" />\n <Box mt={2}>\n <Skeleton variant=\"text\" height={40} width=\"60%\" animation=\"wave\" />\n <Skeleton variant=\"text\" height={20} width=\"40%\" animation=\"wave\" />\n <Skeleton variant=\"text\" height={20} width=\"80%\" animation=\"wave\" />\n </Box>\n </Box>\n );\n }\n\n if (error || question === undefined) {\n return (\n <WarningPanel\n severity=\"error\"\n title={t('questionPage.errorLoading')}\n aria-live=\"assertive\"\n >\n {error?.message}\n </WarningPanel>\n );\n }\n\n if (question.type !== 'question') {\n return (\n <WarningPanel title=\"Not found\" message={t('questionPage.notFound')} />\n );\n }\n\n return (\n <>\n <ContentHeader\n title={question.title}\n description={getDescription(question)}\n titleIcon={<HelpOutline fontSize=\"large\" />}\n >\n <FollowPostButton post={question} />\n <AskQuestionButton />\n <ContentHeaderButton\n onClick={() => {\n const element = document.getElementById('qeta-answer-form');\n if (element) {\n element.scrollIntoView({ behavior: 'smooth' });\n const input = element.querySelector('textarea');\n if (input) {\n input.focus();\n }\n }\n }}\n icon={<Comment />}\n disabled={question.status === 'obsolete'}\n >\n {t('questionPage.answerButton')}\n </ContentHeaderButton>\n <AddToCollectionButton post={question} />\n </ContentHeader>\n {question.status === 'draft' && <DraftBanner />}\n {question.status === 'deleted' && <DeletedBanner />}\n {question.status === 'obsolete' && <ObsoleteBanner />}\n <QuestionCard question={question} />\n <AIAnswerCard question={question} debounceMs={0} />\n {(question.status === 'active' || question.status === 'obsolete') && (\n <>\n <Box sx={{ mt: 3, mb: 2 }}>\n <Grid container justifyContent=\"space-between\" alignItems=\"center\">\n <Grid item>\n <Typography variant=\"h6\">\n {t('common.answersCount', {\n count: answersCount,\n })}\n </Typography>\n </Grid>\n {sortedAnswers.length > 1 && (\n <Grid item>\n <FormControl>\n <TextField\n select\n size=\"small\"\n label={t('questionPage.sortAnswers.label')}\n value={answerSort}\n onChange={val =>\n setAnswerSort(val.target.value as string)\n }\n inputProps={{\n name: 'sortAnswers',\n id: 'sort-answers',\n 'aria-label': t('questionPage.sortAnswers.label'),\n 'aria-describedby': 'sort-answers-helper',\n }}\n variant=\"outlined\"\n SelectProps={{\n MenuProps: {\n 'aria-label': t('questionPage.sortAnswers.menuLabel'),\n },\n }}\n >\n <MenuItem value=\"default\">\n {t('questionPage.sortAnswers.default')}\n </MenuItem>\n <MenuItem value=\"created_desc\">\n {t('questionPage.sortAnswers.createdDesc')}\n </MenuItem>\n <MenuItem value=\"created_asc\">\n {t('questionPage.sortAnswers.createdAsc')}\n </MenuItem>\n <MenuItem value=\"score_desc\">\n {t('questionPage.sortAnswers.scoreDesc')}\n </MenuItem>\n <MenuItem value=\"score_asc\">\n {t('questionPage.sortAnswers.scoreAsc')}\n </MenuItem>\n <MenuItem value=\"comments_desc\">\n {t('questionPage.sortAnswers.commentsDesc')}\n </MenuItem>\n <MenuItem value=\"comments_asc\">\n {t('questionPage.sortAnswers.commentsAsc')}\n </MenuItem>\n <MenuItem value=\"author_desc\">\n {t('questionPage.sortAnswers.authorDesc')}\n </MenuItem>\n <MenuItem value=\"author_asc\">\n {t('questionPage.sortAnswers.authorAsc')}\n </MenuItem>\n <MenuItem value=\"updated_desc\">\n {t('questionPage.sortAnswers.updatedDesc')}\n </MenuItem>\n <MenuItem value=\"updated_asc\">\n {t('questionPage.sortAnswers.updatedAsc')}\n </MenuItem>\n </TextField>\n </FormControl>\n </Grid>\n )}\n </Grid>\n </Box>\n {sortedAnswers.map(a => {\n return (\n <Fragment key={a.id}>\n <Box key={a.id} sx={{ mb: 1 }}>\n <AnswerCard\n answer={a}\n question={question}\n onAnswerDelete={onAnswerDelete}\n />\n </Box>\n </Fragment>\n );\n })}\n\n {question.status === 'active' && (\n <div id=\"qeta-answer-form\">\n <AnswerForm post={question} onPost={onAnswerPost} />\n </div>\n )}\n </>\n )}\n </>\n );\n};\n"],"names":["Fragment"],"mappings":"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"}
|
|
@@ -1,12 +1,41 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { qetaTranslationRef, useIdentityApi,
|
|
2
|
+
import { qetaTranslationRef, useIdentityApi, PostHighlightList } from '@drodil/backstage-plugin-qeta-react';
|
|
3
3
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
4
4
|
|
|
5
5
|
const HomeRightContent = () => {
|
|
6
6
|
const { t } = useTranslationRef(qetaTranslationRef);
|
|
7
7
|
const { value: user } = useIdentityApi((api) => api.getBackstageIdentity(), []);
|
|
8
8
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
9
|
-
/* @__PURE__ */ jsx(
|
|
9
|
+
/* @__PURE__ */ jsx(
|
|
10
|
+
PostHighlightList,
|
|
11
|
+
{
|
|
12
|
+
type: "recent",
|
|
13
|
+
title: t("highlights.recent.title"),
|
|
14
|
+
noQuestionsLabel: t("highlights.recent.noQuestionsLabel"),
|
|
15
|
+
options: { limit: 5 },
|
|
16
|
+
hideIfEmpty: true
|
|
17
|
+
}
|
|
18
|
+
),
|
|
19
|
+
/* @__PURE__ */ jsx(
|
|
20
|
+
PostHighlightList,
|
|
21
|
+
{
|
|
22
|
+
type: "followed",
|
|
23
|
+
title: t("highlights.followed.title"),
|
|
24
|
+
noQuestionsLabel: t("highlights.followed.noQuestionsLabel"),
|
|
25
|
+
options: { following: true, limit: 5 },
|
|
26
|
+
hideIfEmpty: true
|
|
27
|
+
}
|
|
28
|
+
),
|
|
29
|
+
/* @__PURE__ */ jsx(
|
|
30
|
+
PostHighlightList,
|
|
31
|
+
{
|
|
32
|
+
type: "hot",
|
|
33
|
+
title: t("highlights.hot.title"),
|
|
34
|
+
noQuestionsLabel: t("highlights.hot.noQuestionsLabel"),
|
|
35
|
+
options: { orderBy: "trend", limit: 5 },
|
|
36
|
+
hideIfEmpty: true
|
|
37
|
+
}
|
|
38
|
+
),
|
|
10
39
|
user && /* @__PURE__ */ jsx(
|
|
11
40
|
PostHighlightList,
|
|
12
41
|
{
|
|
@@ -14,7 +43,8 @@ const HomeRightContent = () => {
|
|
|
14
43
|
title: t("highlights.own.title"),
|
|
15
44
|
noQuestionsLabel: t("highlights.own.noQuestionsLabel"),
|
|
16
45
|
postType: "question",
|
|
17
|
-
options: { author: user.userEntityRef, limit: 5 }
|
|
46
|
+
options: { author: user.userEntityRef, limit: 5 },
|
|
47
|
+
hideIfEmpty: true
|
|
18
48
|
}
|
|
19
49
|
),
|
|
20
50
|
/* @__PURE__ */ jsx(
|
|
@@ -24,13 +54,10 @@ const HomeRightContent = () => {
|
|
|
24
54
|
title: t("highlights.unanswered.title"),
|
|
25
55
|
noQuestionsLabel: t("highlights.unanswered.noQuestionsLabel"),
|
|
26
56
|
postType: "question",
|
|
27
|
-
options: { noAnswers: true, limit: 5 }
|
|
57
|
+
options: { noAnswers: true, limit: 5 },
|
|
58
|
+
hideIfEmpty: true
|
|
28
59
|
}
|
|
29
|
-
)
|
|
30
|
-
/* @__PURE__ */ jsx(FollowedTagsList, {}),
|
|
31
|
-
/* @__PURE__ */ jsx(FollowedUsersList, {}),
|
|
32
|
-
/* @__PURE__ */ jsx(FollowedEntitiesList, {}),
|
|
33
|
-
/* @__PURE__ */ jsx(FollowedCollectionsList, {})
|
|
60
|
+
)
|
|
34
61
|
] });
|
|
35
62
|
};
|
|
36
63
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HomeRightContent.esm.js","sources":["../../../src/components/RightContent/HomeRightContent.tsx"],"sourcesContent":["import {\n
|
|
1
|
+
{"version":3,"file":"HomeRightContent.esm.js","sources":["../../../src/components/RightContent/HomeRightContent.tsx"],"sourcesContent":["import {\n PostHighlightList,\n qetaTranslationRef,\n useIdentityApi,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const HomeRightContent = () => {\n const { t } = useTranslationRef(qetaTranslationRef);\n const { value: user } = useIdentityApi(api => api.getBackstageIdentity(), []);\n\n return (\n <>\n <PostHighlightList\n type=\"recent\"\n title={t('highlights.recent.title')}\n noQuestionsLabel={t('highlights.recent.noQuestionsLabel')}\n options={{ limit: 5 }}\n hideIfEmpty\n />\n <PostHighlightList\n type=\"followed\"\n title={t('highlights.followed.title')}\n noQuestionsLabel={t('highlights.followed.noQuestionsLabel')}\n options={{ following: true, limit: 5 }}\n hideIfEmpty\n />\n <PostHighlightList\n type=\"hot\"\n title={t('highlights.hot.title')}\n noQuestionsLabel={t('highlights.hot.noQuestionsLabel')}\n options={{ orderBy: 'trend', limit: 5 }}\n hideIfEmpty\n />\n {user && (\n <PostHighlightList\n type=\"own\"\n title={t('highlights.own.title')}\n noQuestionsLabel={t('highlights.own.noQuestionsLabel')}\n postType=\"question\"\n options={{ author: user.userEntityRef, limit: 5 }}\n hideIfEmpty\n />\n )}\n <PostHighlightList\n type=\"unanswered\"\n title={t('highlights.unanswered.title')}\n noQuestionsLabel={t('highlights.unanswered.noQuestionsLabel')}\n postType=\"question\"\n options={{ noAnswers: true, limit: 5 }}\n hideIfEmpty\n />\n </>\n );\n};\n"],"names":[],"mappings":";;;;AAOO,MAAM,mBAAmB,MAAM;AACpC,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAM,MAAA,EAAE,KAAO,EAAA,IAAA,EAAS,GAAA,cAAA,CAAe,SAAO,GAAI,CAAA,oBAAA,EAAwB,EAAA,EAAE,CAAA;AAE5E,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,IAAK,EAAA,QAAA;AAAA,QACL,KAAA,EAAO,EAAE,yBAAyB,CAAA;AAAA,QAClC,gBAAA,EAAkB,EAAE,oCAAoC,CAAA;AAAA,QACxD,OAAA,EAAS,EAAE,KAAA,EAAO,CAAE,EAAA;AAAA,QACpB,WAAW,EAAA;AAAA;AAAA,KACb;AAAA,oBACA,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,IAAK,EAAA,UAAA;AAAA,QACL,KAAA,EAAO,EAAE,2BAA2B,CAAA;AAAA,QACpC,gBAAA,EAAkB,EAAE,sCAAsC,CAAA;AAAA,QAC1D,OAAS,EAAA,EAAE,SAAW,EAAA,IAAA,EAAM,OAAO,CAAE,EAAA;AAAA,QACrC,WAAW,EAAA;AAAA;AAAA,KACb;AAAA,oBACA,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,IAAK,EAAA,KAAA;AAAA,QACL,KAAA,EAAO,EAAE,sBAAsB,CAAA;AAAA,QAC/B,gBAAA,EAAkB,EAAE,iCAAiC,CAAA;AAAA,QACrD,OAAS,EAAA,EAAE,OAAS,EAAA,OAAA,EAAS,OAAO,CAAE,EAAA;AAAA,QACtC,WAAW,EAAA;AAAA;AAAA,KACb;AAAA,IACC,IACC,oBAAA,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,IAAK,EAAA,KAAA;AAAA,QACL,KAAA,EAAO,EAAE,sBAAsB,CAAA;AAAA,QAC/B,gBAAA,EAAkB,EAAE,iCAAiC,CAAA;AAAA,QACrD,QAAS,EAAA,UAAA;AAAA,QACT,SAAS,EAAE,MAAA,EAAQ,IAAK,CAAA,aAAA,EAAe,OAAO,CAAE,EAAA;AAAA,QAChD,WAAW,EAAA;AAAA;AAAA,KACb;AAAA,oBAEF,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,IAAK,EAAA,YAAA;AAAA,QACL,KAAA,EAAO,EAAE,6BAA6B,CAAA;AAAA,QACtC,gBAAA,EAAkB,EAAE,wCAAwC,CAAA;AAAA,QAC5D,QAAS,EAAA,UAAA;AAAA,QACT,OAAS,EAAA,EAAE,SAAW,EAAA,IAAA,EAAM,OAAO,CAAE,EAAA;AAAA,QACrC,WAAW,EAAA;AAAA;AAAA;AACb,GACF,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { qetaTranslationRef, useQetaApi, PostHighlightListContent } from '@drodil/backstage-plugin-qeta-react';
|
|
3
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
4
|
+
import { makeStyles } from '@material-ui/core';
|
|
5
|
+
import LinkIcon from '@material-ui/icons/Link';
|
|
6
|
+
|
|
7
|
+
const useStyles = makeStyles((theme) => ({
|
|
8
|
+
container: {
|
|
9
|
+
borderLeft: `3px solid ${theme.palette.info.main}`,
|
|
10
|
+
backgroundColor: theme.palette.type === "dark" ? "rgba(33, 150, 243, 0.08)" : "rgba(33, 150, 243, 0.05)",
|
|
11
|
+
borderRadius: theme.shape.borderRadius,
|
|
12
|
+
padding: `${theme.spacing(1)}px 2px ${theme.spacing(1)}px`,
|
|
13
|
+
marginBottom: theme.spacing(2)
|
|
14
|
+
},
|
|
15
|
+
title: {
|
|
16
|
+
color: theme.palette.info.main,
|
|
17
|
+
fontWeight: 600
|
|
18
|
+
}
|
|
19
|
+
}));
|
|
20
|
+
const LinkedPosts = (props) => {
|
|
21
|
+
const { postId } = props;
|
|
22
|
+
const classes = useStyles();
|
|
23
|
+
const { t } = useTranslationRef(qetaTranslationRef);
|
|
24
|
+
const {
|
|
25
|
+
value: posts,
|
|
26
|
+
loading,
|
|
27
|
+
error
|
|
28
|
+
} = useQetaApi((api) => api.getLinkedPosts(postId), [postId]);
|
|
29
|
+
if (error || !posts || posts.length === 0) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
return /* @__PURE__ */ jsx(
|
|
33
|
+
PostHighlightListContent,
|
|
34
|
+
{
|
|
35
|
+
title: t("rightMenu.linkedPosts"),
|
|
36
|
+
posts,
|
|
37
|
+
loading,
|
|
38
|
+
containerClassName: classes.container,
|
|
39
|
+
titleClassName: classes.title,
|
|
40
|
+
icon: /* @__PURE__ */ jsx(LinkIcon, { fontSize: "small" })
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export { LinkedPosts };
|
|
46
|
+
//# sourceMappingURL=LinkedPosts.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinkedPosts.esm.js","sources":["../../../src/components/RightContent/LinkedPosts.tsx"],"sourcesContent":["import {\n PostHighlightListContent,\n qetaTranslationRef,\n useQetaApi,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { makeStyles } from '@material-ui/core';\nimport LinkIcon from '@material-ui/icons/Link';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n borderLeft: `3px solid ${theme.palette.info.main}`,\n backgroundColor:\n theme.palette.type === 'dark'\n ? 'rgba(33, 150, 243, 0.08)'\n : 'rgba(33, 150, 243, 0.05)',\n borderRadius: theme.shape.borderRadius,\n padding: `${theme.spacing(1)}px 2px ${theme.spacing(1)}px`,\n marginBottom: theme.spacing(2),\n },\n title: {\n color: theme.palette.info.main,\n fontWeight: 600,\n },\n}));\n\nexport const LinkedPosts = (props: { postId: number }) => {\n const { postId } = props;\n const classes = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const {\n value: posts,\n loading,\n error,\n } = useQetaApi(api => api.getLinkedPosts(postId), [postId]);\n\n if (error || !posts || posts.length === 0) {\n return null;\n }\n\n return (\n <PostHighlightListContent\n title={t('rightMenu.linkedPosts')}\n posts={posts}\n loading={loading}\n containerClassName={classes.container}\n titleClassName={classes.title}\n icon={<LinkIcon fontSize=\"small\" />}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;AASA,MAAM,SAAA,GAAY,WAAW,CAAU,KAAA,MAAA;AAAA,EACrC,SAAW,EAAA;AAAA,IACT,UAAY,EAAA,CAAA,UAAA,EAAa,KAAM,CAAA,OAAA,CAAQ,KAAK,IAAI,CAAA,CAAA;AAAA,IAChD,eACE,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,KAAS,SACnB,0BACA,GAAA,0BAAA;AAAA,IACN,YAAA,EAAc,MAAM,KAAM,CAAA,YAAA;AAAA,IAC1B,OAAA,EAAS,CAAG,EAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,CAAC,CAAU,OAAA,EAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,IACtD,YAAA,EAAc,KAAM,CAAA,OAAA,CAAQ,CAAC;AAAA,GAC/B;AAAA,EACA,KAAO,EAAA;AAAA,IACL,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,IAAA;AAAA,IAC1B,UAAY,EAAA;AAAA;AAEhB,CAAE,CAAA,CAAA;AAEW,MAAA,WAAA,GAAc,CAAC,KAA8B,KAAA;AACxD,EAAM,MAAA,EAAE,QAAW,GAAA,KAAA;AACnB,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAM,MAAA;AAAA,IACJ,KAAO,EAAA,KAAA;AAAA,IACP,OAAA;AAAA,IACA;AAAA,GACF,GAAI,WAAW,CAAO,GAAA,KAAA,GAAA,CAAI,eAAe,MAAM,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAE1D,EAAA,IAAI,KAAS,IAAA,CAAC,KAAS,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACzC,IAAO,OAAA,IAAA;AAAA;AAGT,EACE,uBAAA,GAAA;AAAA,IAAC,wBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,EAAE,uBAAuB,CAAA;AAAA,MAChC,KAAA;AAAA,MACA,OAAA;AAAA,MACA,oBAAoB,OAAQ,CAAA,SAAA;AAAA,MAC5B,gBAAgB,OAAQ,CAAA,KAAA;AAAA,MACxB,IAAM,kBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA;AAAA;AAAA,GACnC;AAEJ;;;;"}
|
|
@@ -7,6 +7,7 @@ import { SimilarPosts } from './SimilarPosts.esm.js';
|
|
|
7
7
|
import { Box } from '@material-ui/core';
|
|
8
8
|
import Whatshot from '@material-ui/icons/Whatshot';
|
|
9
9
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
10
|
+
import { LinkedPosts } from './LinkedPosts.esm.js';
|
|
10
11
|
|
|
11
12
|
const PostRightContent = (props) => {
|
|
12
13
|
const { id: paramId } = useParams();
|
|
@@ -27,6 +28,7 @@ const PostRightContent = (props) => {
|
|
|
27
28
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
28
29
|
post && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
29
30
|
/* @__PURE__ */ jsx(Box, { mb: 2, children: /* @__PURE__ */ jsx(ContentHealthCard, { post }) }),
|
|
31
|
+
/* @__PURE__ */ jsx(LinkedPosts, { postId: post.id }),
|
|
30
32
|
/* @__PURE__ */ jsx(SimilarPosts, { post }),
|
|
31
33
|
/* @__PURE__ */ jsx(
|
|
32
34
|
PostHighlightList,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostRightContent.esm.js","sources":["../../../src/components/RightContent/PostRightContent.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\nimport {\n FollowedCollectionsList,\n FollowedEntitiesList,\n FollowedTagsList,\n FollowedUsersList,\n PostHighlightList,\n qetaTranslationRef,\n useQetaApi,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { DefaultRightContent } from './DefaultRightContent';\nimport { ContentHealthCard } from '../ContentHealthCard';\nimport { SimilarPosts } from './SimilarPosts';\nimport { Box } from '@material-ui/core';\nimport Whatshot from '@material-ui/icons/Whatshot';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const PostRightContent = (props?: { id?: string }) => {\n const { id: paramId } = useParams();\n const id = props?.id || paramId;\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const { value: post } = useQetaApi(\n api => api.getPost(id, { anonymous: true }),\n [id],\n );\n\n let title: string;\n\n if (post?.type === 'article') {\n title = t('highlights.hotArticles.title');\n } else if (post?.type === 'link') {\n title = t('highlights.hotLinks.title');\n } else {\n title = t('highlights.hotQuestions.title');\n }\n\n return (\n <>\n {post && (\n <>\n <Box mb={2}>\n <ContentHealthCard post={post} />\n </Box>\n <SimilarPosts post={post} />\n <PostHighlightList\n type=\"hot\"\n title={title}\n noQuestionsLabel={t('highlights.hotQuestions.noQuestionsLabel')}\n icon={<Whatshot fontSize=\"small\" />}\n postType={post.type}\n options={{\n tags: post.tags,\n entities: post.entities,\n }}\n />\n <FollowedTagsList />\n <FollowedUsersList />\n <FollowedEntitiesList />\n <FollowedCollectionsList />\n </>\n )}\n {!post && <DefaultRightContent />}\n </>\n );\n};\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PostRightContent.esm.js","sources":["../../../src/components/RightContent/PostRightContent.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\nimport {\n FollowedCollectionsList,\n FollowedEntitiesList,\n FollowedTagsList,\n FollowedUsersList,\n PostHighlightList,\n qetaTranslationRef,\n useQetaApi,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { DefaultRightContent } from './DefaultRightContent';\nimport { ContentHealthCard } from '../ContentHealthCard';\nimport { SimilarPosts } from './SimilarPosts';\nimport { Box } from '@material-ui/core';\nimport Whatshot from '@material-ui/icons/Whatshot';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nimport { LinkedPosts } from './LinkedPosts';\n\nexport const PostRightContent = (props?: { id?: string }) => {\n const { id: paramId } = useParams();\n const id = props?.id || paramId;\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const { value: post } = useQetaApi(\n api => api.getPost(id, { anonymous: true }),\n [id],\n );\n\n let title: string;\n\n if (post?.type === 'article') {\n title = t('highlights.hotArticles.title');\n } else if (post?.type === 'link') {\n title = t('highlights.hotLinks.title');\n } else {\n title = t('highlights.hotQuestions.title');\n }\n\n return (\n <>\n {post && (\n <>\n <Box mb={2}>\n <ContentHealthCard post={post} />\n </Box>\n <LinkedPosts postId={post.id} />\n <SimilarPosts post={post} />\n <PostHighlightList\n type=\"hot\"\n title={title}\n noQuestionsLabel={t('highlights.hotQuestions.noQuestionsLabel')}\n icon={<Whatshot fontSize=\"small\" />}\n postType={post.type}\n options={{\n tags: post.tags,\n entities: post.entities,\n }}\n />\n <FollowedTagsList />\n <FollowedUsersList />\n <FollowedEntitiesList />\n <FollowedCollectionsList />\n </>\n )}\n {!post && <DefaultRightContent />}\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAmBa,MAAA,gBAAA,GAAmB,CAAC,KAA4B,KAAA;AAC3D,EAAA,MAAM,EAAE,EAAA,EAAI,OAAQ,EAAA,GAAI,SAAU,EAAA;AAClC,EAAM,MAAA,EAAA,GAAK,OAAO,EAAM,IAAA,OAAA;AACxB,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAM,MAAA,EAAE,KAAO,EAAA,IAAA,EAAS,GAAA,UAAA;AAAA,IACtB,SAAO,GAAI,CAAA,OAAA,CAAQ,IAAI,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,IAC1C,CAAC,EAAE;AAAA,GACL;AAEA,EAAI,IAAA,KAAA;AAEJ,EAAI,IAAA,IAAA,EAAM,SAAS,SAAW,EAAA;AAC5B,IAAA,KAAA,GAAQ,EAAE,8BAA8B,CAAA;AAAA,GAC1C,MAAA,IAAW,IAAM,EAAA,IAAA,KAAS,MAAQ,EAAA;AAChC,IAAA,KAAA,GAAQ,EAAE,2BAA2B,CAAA;AAAA,GAChC,MAAA;AACL,IAAA,KAAA,GAAQ,EAAE,+BAA+B,CAAA;AAAA;AAG3C,EAAA,uBAEK,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,IAAA,IAAA,oBAEG,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,OAAI,EAAI,EAAA,CAAA,EACP,QAAC,kBAAA,GAAA,CAAA,iBAAA,EAAA,EAAkB,MAAY,CACjC,EAAA,CAAA;AAAA,sBACC,GAAA,CAAA,WAAA,EAAA,EAAY,MAAQ,EAAA,IAAA,CAAK,EAAI,EAAA,CAAA;AAAA,sBAC9B,GAAA,CAAC,gBAAa,IAAY,EAAA,CAAA;AAAA,sBAC1B,GAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,KAAA;AAAA,UACL,KAAA;AAAA,UACA,gBAAA,EAAkB,EAAE,0CAA0C,CAAA;AAAA,UAC9D,IAAM,kBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,CAAA;AAAA,UACjC,UAAU,IAAK,CAAA,IAAA;AAAA,UACf,OAAS,EAAA;AAAA,YACP,MAAM,IAAK,CAAA,IAAA;AAAA,YACX,UAAU,IAAK,CAAA;AAAA;AACjB;AAAA,OACF;AAAA,0BACC,gBAAiB,EAAA,EAAA,CAAA;AAAA,0BACjB,iBAAkB,EAAA,EAAA,CAAA;AAAA,0BAClB,oBAAqB,EAAA,EAAA,CAAA;AAAA,0BACrB,uBAAwB,EAAA,EAAA;AAAA,KAC3B,EAAA,CAAA;AAAA,IAED,CAAC,IAAQ,oBAAA,GAAA,CAAC,mBAAoB,EAAA,EAAA;AAAA,GACjC,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -25,12 +25,15 @@ import { PostRightContent } from './PostRightContent.esm.js';
|
|
|
25
25
|
|
|
26
26
|
const useStyles = makeStyles((theme) => ({
|
|
27
27
|
container: {
|
|
28
|
-
width: (props) => props.compact ? "72px" : "
|
|
28
|
+
width: (props) => props.compact ? "72px" : "245px",
|
|
29
29
|
padding: (props) => props.compact ? theme.spacing(1) : theme.spacing(0, 0, 0, 1),
|
|
30
30
|
transition: "width 0.2s ease-in-out",
|
|
31
31
|
display: "flex",
|
|
32
32
|
flexDirection: "column",
|
|
33
|
-
overflowX: "hidden"
|
|
33
|
+
overflowX: "hidden",
|
|
34
|
+
[theme.breakpoints.down("md")]: {
|
|
35
|
+
width: "100%"
|
|
36
|
+
}
|
|
34
37
|
},
|
|
35
38
|
toggleButton: {
|
|
36
39
|
marginBottom: theme.spacing(1),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RightContent.esm.js","sources":["../../../src/components/RightContent/RightContent.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { AskRightContent } from './AskRightContent';\nimport {\n articleRouteRef,\n articlesRouteRef,\n askRouteRef,\n collectionsRouteRef,\n editQuestionRouteRef,\n entitiesRouteRef,\n entityRouteRef,\n favoriteQuestionsRouteRef,\n linkRouteRef,\n linksRouteRef,\n qetaRouteRef,\n qetaTranslationRef,\n questionRouteRef,\n questionsRouteRef,\n tagRouteRef,\n tagsRouteRef,\n userRouteRef,\n usersRouteRef,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Box, IconButton, makeStyles, Tooltip } from '@material-ui/core';\nimport { matchPath, useLocation, useSearchParams } from 'react-router-dom';\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport { HomeRightContent } from './HomeRightContent';\nimport { QuestionsRightContent } from './QuestionsRightContent';\nimport { ArticlesRightContent } from './ArticlesRightContent';\nimport { LinksRightContent } from './LinksRightContent';\nimport { FavoriteRightContent } from './FavoriteRightContent';\nimport { UsersRightContent } from './UsersRightContent';\nimport { TagRightContent } from './TagRightContent';\nimport { TagsRightContent } from './TagsRightContent';\nimport { EntitiesRightContent } from './EntitiesRightContent';\nimport { EntityRightContent } from './EntityRightContent';\nimport { CollectionsRightContent } from './CollectionsRightContent';\nimport MenuOpenIcon from '@material-ui/icons/MenuOpen';\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { DefaultRightContent } from './DefaultRightContent';\nimport { PostRightContent } from './PostRightContent';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n width: (props: { compact: boolean }) => (props.compact ? '72px' : '230px'),\n padding: (props: { compact: boolean }) =>\n props.compact ? theme.spacing(1) : theme.spacing(0, 0, 0, 1),\n transition: 'width 0.2s ease-in-out',\n display: 'flex',\n flexDirection: 'column',\n overflowX: 'hidden',\n },\n toggleButton: {\n marginBottom: theme.spacing(1),\n marginRight: theme.spacing(1.5),\n },\n content: {\n display: (props: { compact: boolean }) =>\n props.compact ? 'none' : 'block',\n opacity: (props: { compact: boolean }) => (props.compact ? 0 : 1),\n transition: 'opacity 0.2s ease-in-out',\n },\n}));\n\nexport const RightContent = (props: {\n compact?: boolean;\n onToggle?: () => void;\n}) => {\n const { compact = false, onToggle } = props;\n const classes = useStyles({ compact });\n const location = useLocation();\n const [searchParams] = useSearchParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n // Route Refs\n const questionsPath = useRouteRef(questionsRouteRef);\n const articlesPath = useRouteRef(articlesRouteRef);\n const usersPath = useRouteRef(usersRouteRef);\n const tagsPath = useRouteRef(tagsRouteRef);\n const linksPath = useRouteRef(linksRouteRef);\n const collectionsPath = useRouteRef(collectionsRouteRef);\n const entitiesPath = useRouteRef(entitiesRouteRef);\n const favoritePath = useRouteRef(favoriteQuestionsRouteRef);\n const homePath = useRouteRef(qetaRouteRef);\n // qetaRouteRef gives the base path of the plugin, e.g. /qeta\n const rootPath = homePath();\n\n // Matchers\n const isQuestions = !!matchPath(\n { path: questionsPath(), end: true },\n location.pathname,\n );\n const isAsk = !!(\n matchPath(\n { path: `${rootPath}${askRouteRef.path}`, end: true },\n location.pathname,\n ) ||\n matchPath(\n { path: `${rootPath}${editQuestionRouteRef.path}`, end: true },\n location.pathname,\n )\n );\n\n const isArticles = !!matchPath(\n { path: articlesPath(), end: true },\n location.pathname,\n );\n const isUsers = !!matchPath(\n { path: usersPath(), end: true },\n location.pathname,\n );\n const userMatch = matchPath(\n { path: `${rootPath}${userRouteRef.path}` },\n location.pathname,\n );\n const isTags = !!matchPath(\n { path: tagsPath(), end: true },\n location.pathname,\n );\n const tagMatch = matchPath(\n { path: `${rootPath}${tagRouteRef.path}` },\n location.pathname,\n );\n const isCollections = !!matchPath(\n { path: collectionsPath(), end: true },\n location.pathname,\n );\n const isEntities = !!matchPath(\n { path: entitiesPath(), end: true },\n location.pathname,\n );\n const entityMatch = matchPath(\n { path: `${rootPath}${entityRouteRef.path}` },\n location.pathname,\n );\n const isLinks = !!matchPath(\n { path: linksPath(), end: true },\n location.pathname,\n );\n const isFavorite = !!matchPath(\n { path: favoritePath(), end: true },\n location.pathname,\n );\n const questionMatch = matchPath(\n { path: `${rootPath}${questionRouteRef.path}` },\n location.pathname,\n );\n const articleMatch = matchPath(\n { path: `${rootPath}${articleRouteRef.path}` },\n location.pathname,\n );\n const linkMatch = matchPath(\n { path: `${rootPath}${linkRouteRef.path}` },\n location.pathname,\n );\n const isPostPage = !!(questionMatch || articleMatch || linkMatch);\n const isHome = !!(\n matchPath({ path: homePath(), end: true }, location.pathname) ||\n location.pathname === homePath()\n );\n\n const [entityRef, setEntityRef] = useState<string | undefined>(undefined);\n const [tags, setTags] = useState<string[] | undefined>(undefined);\n const [userRef, setUserRef] = useState<string | undefined>(undefined);\n\n const tagParam = tagMatch?.params.tag;\n const userParam = userMatch?.params['*'];\n const entityParam = entityMatch?.params.entityRef;\n\n const entitySearchParam = searchParams.get('entity') ?? undefined;\n const tagsSearchParam = searchParams.get('tags');\n\n useEffect(() => {\n if (isQuestions || isArticles || isLinks) {\n setEntityRef(entitySearchParam);\n setTags(filterTags(tagsSearchParam));\n setUserRef(undefined);\n } else if (tagParam) {\n setTags([tagParam]);\n setEntityRef(undefined);\n setUserRef(undefined);\n } else if (userParam) {\n setUserRef(userParam);\n setTags(undefined);\n setEntityRef(undefined);\n } else if (entityParam) {\n setEntityRef(entityParam);\n setTags(undefined);\n setUserRef(undefined);\n } else {\n setTags(undefined);\n setEntityRef(undefined);\n setUserRef(undefined);\n }\n }, [\n entitySearchParam,\n tagsSearchParam,\n isQuestions,\n isArticles,\n isLinks,\n tagParam,\n userParam,\n entityParam,\n location.pathname,\n ]);\n\n let content = null;\n\n if (isHome) {\n content = <HomeRightContent />;\n } else if (isAsk) {\n content = <AskRightContent />;\n } else if (isPostPage) {\n const id =\n questionMatch?.params.id ||\n articleMatch?.params.id ||\n linkMatch?.params.id;\n content = <PostRightContent id={id} />;\n } else if (isQuestions) {\n content = <QuestionsRightContent tags={tags} entityRef={entityRef} />;\n } else if (isArticles) {\n content = <ArticlesRightContent tags={tags} entityRef={entityRef} />;\n } else if (isLinks) {\n content = <LinksRightContent tags={tags} entityRef={entityRef} />;\n } else if (isFavorite) {\n content = <FavoriteRightContent />;\n } else if (isUsers) {\n content = <UsersRightContent />;\n } else if (tagMatch) {\n content = <TagRightContent tags={tags} />;\n } else if (userMatch && userRef) {\n content = null;\n } else if (isTags) {\n content = <TagsRightContent />;\n } else if (isEntities) {\n content = <EntitiesRightContent />;\n } else if (entityMatch && entityRef) {\n content = <EntityRightContent entityRef={entityRef} />;\n } else if (isCollections) {\n content = <CollectionsRightContent />;\n }\n\n if (!content) {\n content = <DefaultRightContent />;\n }\n\n return (\n <Box className={classes.container}>\n <Box className={classes.content}>{content}</Box>\n <Box\n display=\"flex\"\n justifyContent={compact ? 'center' : 'flex-end'}\n style={{ marginTop: 'auto' }}\n >\n <Tooltip\n title={compact ? t('rightMenu.expand') : t('rightMenu.collapse')}\n placement=\"left\"\n >\n <IconButton\n onClick={onToggle}\n size=\"small\"\n className={compact ? '' : classes.toggleButton}\n style={{ marginTop: 8 }}\n >\n {compact ? (\n <ChevronLeftIcon />\n ) : (\n <MenuOpenIcon style={{ transform: 'scaleX(-1)' }} />\n )}\n </IconButton>\n </Tooltip>\n </Box>\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RightContent.esm.js","sources":["../../../src/components/RightContent/RightContent.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { AskRightContent } from './AskRightContent';\nimport {\n articleRouteRef,\n articlesRouteRef,\n askRouteRef,\n collectionsRouteRef,\n editQuestionRouteRef,\n entitiesRouteRef,\n entityRouteRef,\n favoriteQuestionsRouteRef,\n linkRouteRef,\n linksRouteRef,\n qetaRouteRef,\n qetaTranslationRef,\n questionRouteRef,\n questionsRouteRef,\n tagRouteRef,\n tagsRouteRef,\n userRouteRef,\n usersRouteRef,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Box, IconButton, makeStyles, Tooltip } from '@material-ui/core';\nimport { matchPath, useLocation, useSearchParams } from 'react-router-dom';\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport { HomeRightContent } from './HomeRightContent';\nimport { QuestionsRightContent } from './QuestionsRightContent';\nimport { ArticlesRightContent } from './ArticlesRightContent';\nimport { LinksRightContent } from './LinksRightContent';\nimport { FavoriteRightContent } from './FavoriteRightContent';\nimport { UsersRightContent } from './UsersRightContent';\nimport { TagRightContent } from './TagRightContent';\nimport { TagsRightContent } from './TagsRightContent';\nimport { EntitiesRightContent } from './EntitiesRightContent';\nimport { EntityRightContent } from './EntityRightContent';\nimport { CollectionsRightContent } from './CollectionsRightContent';\nimport MenuOpenIcon from '@material-ui/icons/MenuOpen';\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { DefaultRightContent } from './DefaultRightContent';\nimport { PostRightContent } from './PostRightContent';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n width: (props: { compact: boolean }) => (props.compact ? '72px' : '245px'),\n padding: (props: { compact: boolean }) =>\n props.compact ? theme.spacing(1) : theme.spacing(0, 0, 0, 1),\n transition: 'width 0.2s ease-in-out',\n display: 'flex',\n flexDirection: 'column',\n overflowX: 'hidden',\n [theme.breakpoints.down('md')]: {\n width: '100%',\n },\n },\n toggleButton: {\n marginBottom: theme.spacing(1),\n marginRight: theme.spacing(1.5),\n },\n content: {\n display: (props: { compact: boolean }) =>\n props.compact ? 'none' : 'block',\n opacity: (props: { compact: boolean }) => (props.compact ? 0 : 1),\n transition: 'opacity 0.2s ease-in-out',\n },\n}));\n\nexport const RightContent = (props: {\n compact?: boolean;\n onToggle?: () => void;\n}) => {\n const { compact = false, onToggle } = props;\n const classes = useStyles({ compact });\n const location = useLocation();\n const [searchParams] = useSearchParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n // Route Refs\n const questionsPath = useRouteRef(questionsRouteRef);\n const articlesPath = useRouteRef(articlesRouteRef);\n const usersPath = useRouteRef(usersRouteRef);\n const tagsPath = useRouteRef(tagsRouteRef);\n const linksPath = useRouteRef(linksRouteRef);\n const collectionsPath = useRouteRef(collectionsRouteRef);\n const entitiesPath = useRouteRef(entitiesRouteRef);\n const favoritePath = useRouteRef(favoriteQuestionsRouteRef);\n const homePath = useRouteRef(qetaRouteRef);\n // qetaRouteRef gives the base path of the plugin, e.g. /qeta\n const rootPath = homePath();\n\n // Matchers\n const isQuestions = !!matchPath(\n { path: questionsPath(), end: true },\n location.pathname,\n );\n const isAsk = !!(\n matchPath(\n { path: `${rootPath}${askRouteRef.path}`, end: true },\n location.pathname,\n ) ||\n matchPath(\n { path: `${rootPath}${editQuestionRouteRef.path}`, end: true },\n location.pathname,\n )\n );\n\n const isArticles = !!matchPath(\n { path: articlesPath(), end: true },\n location.pathname,\n );\n const isUsers = !!matchPath(\n { path: usersPath(), end: true },\n location.pathname,\n );\n const userMatch = matchPath(\n { path: `${rootPath}${userRouteRef.path}` },\n location.pathname,\n );\n const isTags = !!matchPath(\n { path: tagsPath(), end: true },\n location.pathname,\n );\n const tagMatch = matchPath(\n { path: `${rootPath}${tagRouteRef.path}` },\n location.pathname,\n );\n const isCollections = !!matchPath(\n { path: collectionsPath(), end: true },\n location.pathname,\n );\n const isEntities = !!matchPath(\n { path: entitiesPath(), end: true },\n location.pathname,\n );\n const entityMatch = matchPath(\n { path: `${rootPath}${entityRouteRef.path}` },\n location.pathname,\n );\n const isLinks = !!matchPath(\n { path: linksPath(), end: true },\n location.pathname,\n );\n const isFavorite = !!matchPath(\n { path: favoritePath(), end: true },\n location.pathname,\n );\n const questionMatch = matchPath(\n { path: `${rootPath}${questionRouteRef.path}` },\n location.pathname,\n );\n const articleMatch = matchPath(\n { path: `${rootPath}${articleRouteRef.path}` },\n location.pathname,\n );\n const linkMatch = matchPath(\n { path: `${rootPath}${linkRouteRef.path}` },\n location.pathname,\n );\n const isPostPage = !!(questionMatch || articleMatch || linkMatch);\n const isHome = !!(\n matchPath({ path: homePath(), end: true }, location.pathname) ||\n location.pathname === homePath()\n );\n\n const [entityRef, setEntityRef] = useState<string | undefined>(undefined);\n const [tags, setTags] = useState<string[] | undefined>(undefined);\n const [userRef, setUserRef] = useState<string | undefined>(undefined);\n\n const tagParam = tagMatch?.params.tag;\n const userParam = userMatch?.params['*'];\n const entityParam = entityMatch?.params.entityRef;\n\n const entitySearchParam = searchParams.get('entity') ?? undefined;\n const tagsSearchParam = searchParams.get('tags');\n\n useEffect(() => {\n if (isQuestions || isArticles || isLinks) {\n setEntityRef(entitySearchParam);\n setTags(filterTags(tagsSearchParam));\n setUserRef(undefined);\n } else if (tagParam) {\n setTags([tagParam]);\n setEntityRef(undefined);\n setUserRef(undefined);\n } else if (userParam) {\n setUserRef(userParam);\n setTags(undefined);\n setEntityRef(undefined);\n } else if (entityParam) {\n setEntityRef(entityParam);\n setTags(undefined);\n setUserRef(undefined);\n } else {\n setTags(undefined);\n setEntityRef(undefined);\n setUserRef(undefined);\n }\n }, [\n entitySearchParam,\n tagsSearchParam,\n isQuestions,\n isArticles,\n isLinks,\n tagParam,\n userParam,\n entityParam,\n location.pathname,\n ]);\n\n let content = null;\n\n if (isHome) {\n content = <HomeRightContent />;\n } else if (isAsk) {\n content = <AskRightContent />;\n } else if (isPostPage) {\n const id =\n questionMatch?.params.id ||\n articleMatch?.params.id ||\n linkMatch?.params.id;\n content = <PostRightContent id={id} />;\n } else if (isQuestions) {\n content = <QuestionsRightContent tags={tags} entityRef={entityRef} />;\n } else if (isArticles) {\n content = <ArticlesRightContent tags={tags} entityRef={entityRef} />;\n } else if (isLinks) {\n content = <LinksRightContent tags={tags} entityRef={entityRef} />;\n } else if (isFavorite) {\n content = <FavoriteRightContent />;\n } else if (isUsers) {\n content = <UsersRightContent />;\n } else if (tagMatch) {\n content = <TagRightContent tags={tags} />;\n } else if (userMatch && userRef) {\n content = null;\n } else if (isTags) {\n content = <TagsRightContent />;\n } else if (isEntities) {\n content = <EntitiesRightContent />;\n } else if (entityMatch && entityRef) {\n content = <EntityRightContent entityRef={entityRef} />;\n } else if (isCollections) {\n content = <CollectionsRightContent />;\n }\n\n if (!content) {\n content = <DefaultRightContent />;\n }\n\n return (\n <Box className={classes.container}>\n <Box className={classes.content}>{content}</Box>\n <Box\n display=\"flex\"\n justifyContent={compact ? 'center' : 'flex-end'}\n style={{ marginTop: 'auto' }}\n >\n <Tooltip\n title={compact ? t('rightMenu.expand') : t('rightMenu.collapse')}\n placement=\"left\"\n >\n <IconButton\n onClick={onToggle}\n size=\"small\"\n className={compact ? '' : classes.toggleButton}\n style={{ marginTop: 8 }}\n >\n {compact ? (\n <ChevronLeftIcon />\n ) : (\n <MenuOpenIcon style={{ transform: 'scaleX(-1)' }} />\n )}\n </IconButton>\n </Tooltip>\n </Box>\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -2,15 +2,29 @@ import { jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { useQetaContext, qetaTranslationRef, useQetaApi, PostHighlightListContent } from '@drodil/backstage-plugin-qeta-react';
|
|
3
3
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
4
4
|
import { useState, useEffect } from 'react';
|
|
5
|
+
import { makeStyles } from '@material-ui/core';
|
|
5
6
|
|
|
7
|
+
const useStyles = makeStyles((theme) => ({
|
|
8
|
+
similarQuestionsContainer: {
|
|
9
|
+
borderLeft: `3px solid ${theme.palette.warning.main}`,
|
|
10
|
+
backgroundColor: theme.palette.type === "dark" ? "rgba(255, 167, 38, 0.08)" : "rgba(255, 167, 38, 0.05)",
|
|
11
|
+
borderRadius: theme.shape.borderRadius,
|
|
12
|
+
padding: `${theme.spacing(1)}px 2px ${theme.spacing(1)}px`
|
|
13
|
+
},
|
|
14
|
+
similarQuestionsTitle: {
|
|
15
|
+
color: theme.palette.warning.main,
|
|
16
|
+
fontWeight: 600
|
|
17
|
+
}
|
|
18
|
+
}));
|
|
6
19
|
const SimilarQuestions = () => {
|
|
20
|
+
const classes = useStyles();
|
|
7
21
|
const { draftQuestion } = useQetaContext();
|
|
8
22
|
const { t } = useTranslationRef(qetaTranslationRef);
|
|
9
23
|
const [debouncedDraftQuestion, setDebouncedDraftQuestion] = useState(draftQuestion);
|
|
10
24
|
useEffect(() => {
|
|
11
25
|
const handler = setTimeout(() => {
|
|
12
26
|
setDebouncedDraftQuestion(draftQuestion);
|
|
13
|
-
},
|
|
27
|
+
}, 500);
|
|
14
28
|
return () => {
|
|
15
29
|
clearTimeout(handler);
|
|
16
30
|
};
|
|
@@ -49,7 +63,9 @@ const SimilarQuestions = () => {
|
|
|
49
63
|
title: t("rightMenu.similarQuestions"),
|
|
50
64
|
posts: displayQuestions,
|
|
51
65
|
loading,
|
|
52
|
-
disableLoading: true
|
|
66
|
+
disableLoading: true,
|
|
67
|
+
containerClassName: classes.similarQuestionsContainer,
|
|
68
|
+
titleClassName: classes.similarQuestionsTitle
|
|
53
69
|
}
|
|
54
70
|
);
|
|
55
71
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimilarQuestions.esm.js","sources":["../../../src/components/RightContent/SimilarQuestions.tsx"],"sourcesContent":["import {\n PostHighlightListContent,\n qetaTranslationRef,\n useQetaApi,\n useQetaContext,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { Post } from '@drodil/backstage-plugin-qeta-common';\nimport { useState, useEffect } from 'react';\n\nexport const SimilarQuestions = () => {\n const { draftQuestion } = useQetaContext();\n const { t } = useTranslationRef(qetaTranslationRef);\n const [debouncedDraftQuestion, setDebouncedDraftQuestion] =\n useState(draftQuestion);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedDraftQuestion(draftQuestion);\n },
|
|
1
|
+
{"version":3,"file":"SimilarQuestions.esm.js","sources":["../../../src/components/RightContent/SimilarQuestions.tsx"],"sourcesContent":["import {\n PostHighlightListContent,\n qetaTranslationRef,\n useQetaApi,\n useQetaContext,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { Post } from '@drodil/backstage-plugin-qeta-common';\nimport { useState, useEffect } from 'react';\nimport { makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles(theme => ({\n similarQuestionsContainer: {\n borderLeft: `3px solid ${theme.palette.warning.main}`,\n backgroundColor:\n theme.palette.type === 'dark'\n ? 'rgba(255, 167, 38, 0.08)'\n : 'rgba(255, 167, 38, 0.05)',\n borderRadius: theme.shape.borderRadius,\n padding: `${theme.spacing(1)}px 2px ${theme.spacing(1)}px`,\n },\n similarQuestionsTitle: {\n color: theme.palette.warning.main,\n fontWeight: 600,\n },\n}));\n\nexport const SimilarQuestions = () => {\n const classes = useStyles();\n const { draftQuestion } = useQetaContext();\n const { t } = useTranslationRef(qetaTranslationRef);\n const [debouncedDraftQuestion, setDebouncedDraftQuestion] =\n useState(draftQuestion);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedDraftQuestion(draftQuestion);\n }, 500);\n\n return () => {\n clearTimeout(handler);\n };\n }, [draftQuestion]);\n\n const { value: questions, loading } = useQetaApi(\n api => {\n if (\n !debouncedDraftQuestion ||\n debouncedDraftQuestion.title.length === 0\n ) {\n return Promise.resolve({ posts: [], total: 0 });\n }\n return api.suggest({\n title: debouncedDraftQuestion.title,\n content: debouncedDraftQuestion.content,\n tags: debouncedDraftQuestion.tags,\n entities: debouncedDraftQuestion.entities,\n });\n },\n [debouncedDraftQuestion],\n );\n\n const [displayQuestions, setDisplayQuestions] = useState<Post[]>([]);\n\n useEffect(() => {\n if (questions) {\n setDisplayQuestions(questions.posts);\n }\n }, [questions]);\n\n useEffect(() => {\n if (\n (!draftQuestion || draftQuestion.title.length === 0) &&\n displayQuestions.length > 0\n ) {\n setDisplayQuestions([]);\n }\n }, [draftQuestion, displayQuestions]);\n\n if (displayQuestions.length === 0) {\n return null;\n }\n\n return (\n <PostHighlightListContent\n title={t('rightMenu.similarQuestions')}\n posts={displayQuestions}\n loading={loading}\n disableLoading\n containerClassName={classes.similarQuestionsContainer}\n titleClassName={classes.similarQuestionsTitle}\n />\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,27 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useState, useEffect } from 'react';
|
|
3
3
|
import { useParams } from 'react-router-dom';
|
|
4
|
-
import { qetaTranslationRef, qetaApiRef, ContentHeader, TagFollowButton, AskQuestionButton, WriteArticleButton, CreateLinkButton, ContentHeaderCard, PostsContainer, TagsContainer } from '@drodil/backstage-plugin-qeta-react';
|
|
4
|
+
import { qetaTranslationRef, useIsModerator, qetaApiRef, ContentHeader, TagFollowButton, AskQuestionButton, WriteArticleButton, CreateLinkButton, ContentHeaderCard, PostsContainer, TagsContainer, EditTagModal, DeleteModal } from '@drodil/backstage-plugin-qeta-react';
|
|
5
5
|
import LocalOfferOutlined from '@material-ui/icons/LocalOfferOutlined';
|
|
6
6
|
import QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';
|
|
7
7
|
import PeopleIcon from '@material-ui/icons/People';
|
|
8
|
+
import EditIcon from '@material-ui/icons/Edit';
|
|
9
|
+
import DeleteIcon from '@material-ui/icons/Delete';
|
|
8
10
|
import { useApi, alertApiRef } from '@backstage/core-plugin-api';
|
|
9
11
|
import { EntityRefLink } from '@backstage/plugin-catalog-react';
|
|
10
12
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
11
|
-
import { Typography } from '@material-ui/core';
|
|
13
|
+
import { Typography, Button } from '@material-ui/core';
|
|
12
14
|
|
|
13
15
|
const TagPage = () => {
|
|
14
16
|
const { tag } = useParams();
|
|
15
17
|
const { t } = useTranslationRef(qetaTranslationRef);
|
|
16
18
|
const [resp, setResp] = useState();
|
|
19
|
+
const { isModerator } = useIsModerator();
|
|
20
|
+
const [editModalOpen, setEditModalOpen] = useState(false);
|
|
21
|
+
const [deleteModalOpen, setDeleteModalOpen] = useState(false);
|
|
17
22
|
const qetaApi = useApi(qetaApiRef);
|
|
18
23
|
const alertApi = useApi(alertApiRef);
|
|
19
|
-
|
|
24
|
+
const fetchTag = () => {
|
|
20
25
|
if (!tag) {
|
|
21
26
|
setResp(void 0);
|
|
22
27
|
return;
|
|
@@ -32,17 +37,25 @@ const TagPage = () => {
|
|
|
32
37
|
display: "transient"
|
|
33
38
|
});
|
|
34
39
|
});
|
|
40
|
+
};
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
fetchTag();
|
|
35
43
|
}, [qetaApi, tag, alertApi]);
|
|
44
|
+
const handleEditModalClose = () => {
|
|
45
|
+
setEditModalOpen(false);
|
|
46
|
+
fetchTag();
|
|
47
|
+
};
|
|
48
|
+
const handleDeleteModalClose = () => {
|
|
49
|
+
setDeleteModalOpen(false);
|
|
50
|
+
};
|
|
36
51
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
37
52
|
tag ? /* @__PURE__ */ jsxs(
|
|
38
53
|
ContentHeader,
|
|
39
54
|
{
|
|
40
|
-
title:
|
|
41
|
-
tag,
|
|
42
|
-
/* @__PURE__ */ jsx(TagFollowButton, { tag })
|
|
43
|
-
] }),
|
|
55
|
+
title: tag,
|
|
44
56
|
titleIcon: /* @__PURE__ */ jsx(LocalOfferOutlined, { fontSize: "large" }),
|
|
45
57
|
children: [
|
|
58
|
+
/* @__PURE__ */ jsx(TagFollowButton, { tag }),
|
|
46
59
|
/* @__PURE__ */ jsx(AskQuestionButton, { tags: [tag] }),
|
|
47
60
|
/* @__PURE__ */ jsx(WriteArticleButton, { tags: [tag] }),
|
|
48
61
|
/* @__PURE__ */ jsx(CreateLinkButton, { tags: [tag] })
|
|
@@ -60,7 +73,7 @@ const TagPage = () => {
|
|
|
60
73
|
]
|
|
61
74
|
}
|
|
62
75
|
),
|
|
63
|
-
resp && /* @__PURE__ */
|
|
76
|
+
resp && /* @__PURE__ */ jsxs(
|
|
64
77
|
ContentHeaderCard,
|
|
65
78
|
{
|
|
66
79
|
description: resp.description,
|
|
@@ -80,14 +93,40 @@ const TagPage = () => {
|
|
|
80
93
|
icon: /* @__PURE__ */ jsx(PeopleIcon, { fontSize: "small" })
|
|
81
94
|
}
|
|
82
95
|
],
|
|
83
|
-
children:
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
/* @__PURE__ */
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
96
|
+
children: [
|
|
97
|
+
resp.experts && resp.experts.length > 0 && /* @__PURE__ */ jsxs(Typography, { variant: "caption", children: [
|
|
98
|
+
t("common.experts"),
|
|
99
|
+
": ",
|
|
100
|
+
resp.experts.map((e, i) => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
101
|
+
/* @__PURE__ */ jsx(EntityRefLink, { entityRef: e }, e),
|
|
102
|
+
i === resp.experts.length - 1 ? "" : ","
|
|
103
|
+
] }))
|
|
104
|
+
] }),
|
|
105
|
+
(resp.canEdit || resp.canDelete) && /* @__PURE__ */ jsxs("div", { style: { marginTop: "1em" }, children: [
|
|
106
|
+
resp.canEdit && /* @__PURE__ */ jsx(
|
|
107
|
+
Button,
|
|
108
|
+
{
|
|
109
|
+
variant: "outlined",
|
|
110
|
+
size: "small",
|
|
111
|
+
startIcon: /* @__PURE__ */ jsx(EditIcon, {}),
|
|
112
|
+
onClick: () => setEditModalOpen(true),
|
|
113
|
+
style: { marginRight: "0.5em" },
|
|
114
|
+
children: t("tagButton.edit")
|
|
115
|
+
}
|
|
116
|
+
),
|
|
117
|
+
resp.canDelete && /* @__PURE__ */ jsx(
|
|
118
|
+
Button,
|
|
119
|
+
{
|
|
120
|
+
variant: "outlined",
|
|
121
|
+
size: "small",
|
|
122
|
+
color: "secondary",
|
|
123
|
+
startIcon: /* @__PURE__ */ jsx(DeleteIcon, {}),
|
|
124
|
+
onClick: () => setDeleteModalOpen(true),
|
|
125
|
+
children: t("tagButton.delete")
|
|
126
|
+
}
|
|
127
|
+
)
|
|
128
|
+
] })
|
|
129
|
+
]
|
|
91
130
|
}
|
|
92
131
|
),
|
|
93
132
|
tag && /* @__PURE__ */ jsx(
|
|
@@ -100,7 +139,26 @@ const TagPage = () => {
|
|
|
100
139
|
prefix: "tag-posts"
|
|
101
140
|
}
|
|
102
141
|
),
|
|
103
|
-
!tag && /* @__PURE__ */ jsx(TagsContainer, {})
|
|
142
|
+
!tag && /* @__PURE__ */ jsx(TagsContainer, {}),
|
|
143
|
+
resp && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
144
|
+
/* @__PURE__ */ jsx(
|
|
145
|
+
EditTagModal,
|
|
146
|
+
{
|
|
147
|
+
tag: resp,
|
|
148
|
+
open: editModalOpen,
|
|
149
|
+
onClose: handleEditModalClose,
|
|
150
|
+
isModerator
|
|
151
|
+
}
|
|
152
|
+
),
|
|
153
|
+
/* @__PURE__ */ jsx(
|
|
154
|
+
DeleteModal,
|
|
155
|
+
{
|
|
156
|
+
open: deleteModalOpen,
|
|
157
|
+
onClose: handleDeleteModalClose,
|
|
158
|
+
entity: resp
|
|
159
|
+
}
|
|
160
|
+
)
|
|
161
|
+
] })
|
|
104
162
|
] });
|
|
105
163
|
};
|
|
106
164
|
|