@drodil/backstage-plugin-qeta 3.59.9 → 3.60.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/config.schema.json +210 -0
- package/dist/components/ArticlePage/ArticlePage.esm.js +5 -1
- package/dist/components/ArticlePage/ArticlePage.esm.js.map +1 -1
- package/dist/components/ArticlesPage/ArticlesPage.esm.js +5 -1
- package/dist/components/ArticlesPage/ArticlesPage.esm.js.map +1 -1
- package/dist/components/AskPage/AskPage.esm.js +5 -1
- package/dist/components/AskPage/AskPage.esm.js.map +1 -1
- package/dist/components/CollectionCreatePage/CollectionCreatePage.esm.js +5 -1
- package/dist/components/CollectionCreatePage/CollectionCreatePage.esm.js.map +1 -1
- package/dist/components/CollectionPage/CollectionPage.esm.js +5 -1
- package/dist/components/CollectionPage/CollectionPage.esm.js.map +1 -1
- package/dist/components/CollectionsPage/CollectionsPage.esm.js +5 -1
- package/dist/components/CollectionsPage/CollectionsPage.esm.js.map +1 -1
- package/dist/components/CreateLinkPage/CreateLinkPage.esm.js +5 -1
- package/dist/components/CreateLinkPage/CreateLinkPage.esm.js.map +1 -1
- package/dist/components/EntityPage/EntityPage.esm.js +9 -1
- package/dist/components/EntityPage/EntityPage.esm.js.map +1 -1
- package/dist/components/HomePage/HomePage.esm.js +7 -4
- package/dist/components/HomePage/HomePage.esm.js.map +1 -1
- package/dist/components/LinkPage/LinkPage.esm.js +5 -1
- package/dist/components/LinkPage/LinkPage.esm.js.map +1 -1
- package/dist/components/LinksPage/LinksPage.esm.js +5 -1
- package/dist/components/LinksPage/LinksPage.esm.js.map +1 -1
- package/dist/components/QetaPage/QetaPage.esm.js +131 -100
- package/dist/components/QetaPage/QetaPage.esm.js.map +1 -1
- package/dist/components/QuestionPage/QuestionPage.esm.js +5 -1
- package/dist/components/QuestionPage/QuestionPage.esm.js.map +1 -1
- package/dist/components/QuestionsPage/QuestionsPage.esm.js +5 -1
- package/dist/components/QuestionsPage/QuestionsPage.esm.js.map +1 -1
- package/dist/components/RightContent/RightContent.esm.js +10 -9
- package/dist/components/RightContent/RightContent.esm.js.map +1 -1
- package/dist/components/Statistics/StatisticsPage.esm.js +10 -4
- package/dist/components/Statistics/StatisticsPage.esm.js.map +1 -1
- package/dist/components/TagPage/TagPage.esm.js +5 -1
- package/dist/components/TagPage/TagPage.esm.js.map +1 -1
- package/dist/components/UserPage/UserPage.esm.js +111 -88
- package/dist/components/UserPage/UserPage.esm.js.map +1 -1
- package/dist/components/WritePage/WritePage.esm.js +5 -1
- package/dist/components/WritePage/WritePage.esm.js.map +1 -1
- package/dist/package.json.esm.js +2 -2
- package/package.json +26 -26
- package/configSchema.d.ts +0 -147
|
@@ -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 PostHistoryButton,\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 retry,\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 <PostHistoryButton post={question} onRestore={retry} />\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
|
+
{"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 PostHistoryButton,\n qetaTranslationRef,\n QuestionCard,\n RelativeTimeWithTooltip,\n useQetaConfig,\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 { disabled } = useQetaConfig();\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 retry,\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 (disabled.questions) {\n return null;\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 <PostHistoryButton post={question} onRestore={retry} />\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,7 +1,7 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useSearchParams } from 'react-router-dom';
|
|
3
3
|
import { useState, useEffect } from 'react';
|
|
4
|
-
import { qetaTranslationRef, ContentHeader, AskQuestionButton, PostsContainer } from '@drodil/backstage-plugin-qeta-react';
|
|
4
|
+
import { qetaTranslationRef, useQetaConfig, ContentHeader, AskQuestionButton, PostsContainer } from '@drodil/backstage-plugin-qeta-react';
|
|
5
5
|
import { filterTags } from '@drodil/backstage-plugin-qeta-common';
|
|
6
6
|
import HelpOutline from '@material-ui/icons/HelpOutline';
|
|
7
7
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
@@ -11,10 +11,14 @@ const QuestionsPage = () => {
|
|
|
11
11
|
const [entityRef, setEntityRef] = useState(void 0);
|
|
12
12
|
const [tags, setTags] = useState(void 0);
|
|
13
13
|
const { t } = useTranslationRef(qetaTranslationRef);
|
|
14
|
+
const { disabled } = useQetaConfig();
|
|
14
15
|
useEffect(() => {
|
|
15
16
|
setEntityRef(searchParams.get("entity") ?? void 0);
|
|
16
17
|
setTags(filterTags(searchParams.get("tags")));
|
|
17
18
|
}, [searchParams, setEntityRef]);
|
|
19
|
+
if (disabled.questions) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
18
22
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
19
23
|
/* @__PURE__ */ jsx(
|
|
20
24
|
ContentHeader,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuestionsPage.esm.js","sources":["../../../src/components/QuestionsPage/QuestionsPage.tsx"],"sourcesContent":["import { useSearchParams } from 'react-router-dom';\nimport { useEffect, useState } from 'react';\nimport {\n AskQuestionButton,\n ContentHeader,\n PostsContainer,\n qetaTranslationRef,\n} from '@drodil/backstage-plugin-qeta-react';\n\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport HelpOutline from '@material-ui/icons/HelpOutline';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const QuestionsPage = () => {\n const [searchParams] = useSearchParams();\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 <>\n <ContentHeader\n title={t('questionsPage.title')}\n titleIcon={<HelpOutline fontSize=\"large\" />}\n >\n <AskQuestionButton entity={entityRef} tags={tags} />\n </ContentHeader>\n <PostsContainer type=\"question\" defaultView=\"list\" />\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"QuestionsPage.esm.js","sources":["../../../src/components/QuestionsPage/QuestionsPage.tsx"],"sourcesContent":["import { useSearchParams } from 'react-router-dom';\nimport { useEffect, useState } from 'react';\nimport {\n AskQuestionButton,\n ContentHeader,\n PostsContainer,\n qetaTranslationRef,\n useQetaConfig,\n} from '@drodil/backstage-plugin-qeta-react';\n\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport HelpOutline from '@material-ui/icons/HelpOutline';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const QuestionsPage = () => {\n const [searchParams] = useSearchParams();\n\n const [entityRef, setEntityRef] = useState<string | undefined>(undefined);\n const [tags, setTags] = useState<string[] | undefined>(undefined);\n const { t } = useTranslationRef(qetaTranslationRef);\n const { disabled } = useQetaConfig();\n\n useEffect(() => {\n setEntityRef(searchParams.get('entity') ?? undefined);\n setTags(filterTags(searchParams.get('tags')));\n }, [searchParams, setEntityRef]);\n\n if (disabled.questions) {\n return null;\n }\n\n return (\n <>\n <ContentHeader\n title={t('questionsPage.title')}\n titleIcon={<HelpOutline fontSize=\"large\" />}\n >\n <AskQuestionButton entity={entityRef} tags={tags} />\n </ContentHeader>\n <PostsContainer type=\"question\" defaultView=\"list\" />\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAcO,MAAM,gBAAgB,MAAM;AACjC,EAAA,MAAM,CAAC,YAAY,CAAA,GAAI,eAAA,EAAgB;AAEvC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAA6B,MAAS,CAAA;AACxE,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAA+B,MAAS,CAAA;AAChE,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,aAAA,EAAc;AAEnC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,YAAA,CAAa,YAAA,CAAa,GAAA,CAAI,QAAQ,CAAA,IAAK,MAAS,CAAA;AACpD,IAAA,OAAA,CAAQ,UAAA,CAAW,YAAA,CAAa,GAAA,CAAI,MAAM,CAAC,CAAC,CAAA;AAAA,EAC9C,CAAA,EAAG,CAAC,YAAA,EAAc,YAAY,CAAC,CAAA;AAE/B,EAAA,IAAI,SAAS,SAAA,EAAW;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,qBAAqB,CAAA;AAAA,QAC9B,SAAA,kBAAW,GAAA,CAAC,WAAA,EAAA,EAAY,QAAA,EAAS,OAAA,EAAQ,CAAA;AAAA,QAEzC,QAAA,kBAAA,GAAA,CAAC,iBAAA,EAAA,EAAkB,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAY;AAAA;AAAA,KACpD;AAAA,oBACA,GAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAK,UAAA,EAAW,aAAY,MAAA,EAAO;AAAA,GAAA,EACrD,CAAA;AAEJ;;;;"}
|
|
@@ -2,7 +2,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { useState, useEffect } from 'react';
|
|
3
3
|
import { useRouteRef } from '@backstage/core-plugin-api';
|
|
4
4
|
import { AskRightContent } from './AskRightContent.esm.js';
|
|
5
|
-
import { qetaTranslationRef, questionsRouteRef, articlesRouteRef, usersRouteRef, tagsRouteRef, linksRouteRef, collectionsRouteRef, entitiesRouteRef, favoriteQuestionsRouteRef, qetaRouteRef, askRouteRef, editQuestionRouteRef, userRouteRef, tagRouteRef, entityRouteRef, questionRouteRef, articleRouteRef, linkRouteRef } from '@drodil/backstage-plugin-qeta-react';
|
|
5
|
+
import { useQetaConfig, qetaTranslationRef, questionsRouteRef, articlesRouteRef, usersRouteRef, tagsRouteRef, linksRouteRef, collectionsRouteRef, entitiesRouteRef, favoriteQuestionsRouteRef, qetaRouteRef, askRouteRef, editQuestionRouteRef, userRouteRef, tagRouteRef, entityRouteRef, questionRouteRef, articleRouteRef, linkRouteRef } from '@drodil/backstage-plugin-qeta-react';
|
|
6
6
|
import { Box, Tooltip, IconButton, makeStyles } from '@material-ui/core';
|
|
7
7
|
import { useLocation, useSearchParams, matchPath } from 'react-router-dom';
|
|
8
8
|
import { filterTags } from '@drodil/backstage-plugin-qeta-common';
|
|
@@ -47,6 +47,7 @@ const useStyles = makeStyles((theme) => ({
|
|
|
47
47
|
}));
|
|
48
48
|
const RightContent = (props) => {
|
|
49
49
|
const { compact = false, onToggle } = props;
|
|
50
|
+
const { disabled } = useQetaConfig();
|
|
50
51
|
const classes = useStyles({ compact });
|
|
51
52
|
const location = useLocation();
|
|
52
53
|
const [searchParams] = useSearchParams();
|
|
@@ -175,27 +176,27 @@ const RightContent = (props) => {
|
|
|
175
176
|
} else if (isPostPage) {
|
|
176
177
|
const id = questionMatch?.params.id || articleMatch?.params.id || linkMatch?.params.id;
|
|
177
178
|
content = /* @__PURE__ */ jsx(PostRightContent, { id });
|
|
178
|
-
} else if (isQuestions) {
|
|
179
|
+
} else if (isQuestions && !disabled.questions) {
|
|
179
180
|
content = /* @__PURE__ */ jsx(QuestionsRightContent, { tags, entityRef });
|
|
180
|
-
} else if (isArticles) {
|
|
181
|
+
} else if (isArticles && !disabled.articles) {
|
|
181
182
|
content = /* @__PURE__ */ jsx(ArticlesRightContent, { tags, entityRef });
|
|
182
|
-
} else if (isLinks) {
|
|
183
|
+
} else if (isLinks && !disabled.links) {
|
|
183
184
|
content = /* @__PURE__ */ jsx(LinksRightContent, { tags, entityRef });
|
|
184
185
|
} else if (isFavorite) {
|
|
185
186
|
content = /* @__PURE__ */ jsx(FavoriteRightContent, {});
|
|
186
187
|
} else if (isUsers) {
|
|
187
188
|
content = /* @__PURE__ */ jsx(UsersRightContent, {});
|
|
188
|
-
} else if (tagMatch) {
|
|
189
|
+
} else if (tagMatch && !disabled.tags) {
|
|
189
190
|
content = /* @__PURE__ */ jsx(TagRightContent, { tags });
|
|
190
191
|
} else if (userMatch && userRef) {
|
|
191
192
|
content = null;
|
|
192
|
-
} else if (isTags) {
|
|
193
|
+
} else if (isTags && !disabled.tags) {
|
|
193
194
|
content = /* @__PURE__ */ jsx(TagsRightContent, {});
|
|
194
|
-
} else if (isEntities) {
|
|
195
|
+
} else if (isEntities && !disabled.entities) {
|
|
195
196
|
content = /* @__PURE__ */ jsx(EntitiesRightContent, {});
|
|
196
|
-
} else if (entityMatch && entityRef) {
|
|
197
|
+
} else if (entityMatch && entityRef && !disabled.entities) {
|
|
197
198
|
content = /* @__PURE__ */ jsx(EntityRightContent, { entityRef });
|
|
198
|
-
} else if (isCollections) {
|
|
199
|
+
} else if (isCollections && !disabled.collections) {
|
|
199
200
|
content = /* @__PURE__ */ jsx(CollectionsRightContent, {});
|
|
200
201
|
}
|
|
201
202
|
if (!content) {
|
|
@@ -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' : '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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"}
|
|
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 useQetaConfig,\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 { disabled } = useQetaConfig();\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 && !disabled.questions) {\n content = <QuestionsRightContent tags={tags} entityRef={entityRef} />;\n } else if (isArticles && !disabled.articles) {\n content = <ArticlesRightContent tags={tags} entityRef={entityRef} />;\n } else if (isLinks && !disabled.links) {\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 && !disabled.tags) {\n content = <TagRightContent tags={tags} />;\n } else if (userMatch && userRef) {\n content = null;\n } else if (isTags && !disabled.tags) {\n content = <TagsRightContent />;\n } else if (isEntities && !disabled.entities) {\n content = <EntitiesRightContent />;\n } else if (entityMatch && entityRef && !disabled.entities) {\n content = <EntityRightContent entityRef={entityRef} />;\n } else if (isCollections && !disabled.collections) {\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,13 +1,19 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { ContentHeader, AskQuestionButton, WriteArticleButton, CreateLinkButton, TopRankingUsers } from '@drodil/backstage-plugin-qeta-react';
|
|
2
|
+
import { useQetaConfig, ContentHeader, AskQuestionButton, WriteArticleButton, CreateLinkButton, TopRankingUsers } from '@drodil/backstage-plugin-qeta-react';
|
|
3
3
|
import { GlobalStatsContent } from './GlobalStatsContent.esm.js';
|
|
4
4
|
import { Box, Tab } from '@material-ui/core';
|
|
5
5
|
import EmojiEventsOutlined from '@material-ui/icons/EmojiEventsOutlined';
|
|
6
6
|
import { TabContext, TabList, TabPanel } from '@material-ui/lab';
|
|
7
|
-
import { useState } from 'react';
|
|
7
|
+
import { useState, useEffect } from 'react';
|
|
8
8
|
|
|
9
9
|
const StatisticsPage = () => {
|
|
10
10
|
const [tab, setTab] = useState("global");
|
|
11
|
+
const { disabled } = useQetaConfig();
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
if (disabled.questions && tab === "leaderboard") {
|
|
14
|
+
setTab("global");
|
|
15
|
+
}
|
|
16
|
+
}, [disabled.questions, tab]);
|
|
11
17
|
const handleChange = (_event, newValue) => {
|
|
12
18
|
setTab(newValue);
|
|
13
19
|
};
|
|
@@ -27,10 +33,10 @@ const StatisticsPage = () => {
|
|
|
27
33
|
/* @__PURE__ */ jsxs(TabContext, { value: tab, children: [
|
|
28
34
|
/* @__PURE__ */ jsx(Box, { sx: { borderBottom: 1, borderColor: "divider" }, children: /* @__PURE__ */ jsxs(TabList, { onChange: handleChange, style: { padding: 0 }, children: [
|
|
29
35
|
/* @__PURE__ */ jsx(Tab, { label: "Global Stats", value: "global" }),
|
|
30
|
-
/* @__PURE__ */ jsx(Tab, { label: "Leaderboard", value: "leaderboard" })
|
|
36
|
+
!disabled.questions && /* @__PURE__ */ jsx(Tab, { label: "Leaderboard", value: "leaderboard" })
|
|
31
37
|
] }) }),
|
|
32
38
|
/* @__PURE__ */ jsx(TabPanel, { value: "global", style: { padding: "24px 0" }, children: /* @__PURE__ */ jsx(GlobalStatsContent, {}) }),
|
|
33
|
-
/* @__PURE__ */ jsx(TabPanel, { value: "leaderboard", style: { padding: "24px 0" }, children: /* @__PURE__ */ jsx(TopRankingUsers, { limit: 10 }) })
|
|
39
|
+
!disabled.questions && /* @__PURE__ */ jsx(TabPanel, { value: "leaderboard", style: { padding: "24px 0" }, children: /* @__PURE__ */ jsx(TopRankingUsers, { limit: 10 }) })
|
|
34
40
|
] })
|
|
35
41
|
] });
|
|
36
42
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatisticsPage.esm.js","sources":["../../../src/components/Statistics/StatisticsPage.tsx"],"sourcesContent":["import {\n AskQuestionButton,\n ContentHeader,\n CreateLinkButton,\n TopRankingUsers,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { GlobalStatsContent } from './GlobalStatsContent';\nimport { Box, Tab } from '@material-ui/core';\nimport EmojiEventsOutlined from '@material-ui/icons/EmojiEventsOutlined';\nimport { TabContext, TabList, TabPanel } from '@material-ui/lab';\nimport { useState } from 'react';\n\nexport const StatisticsPage = () => {\n const [tab, setTab] = useState('global');\n\n const handleChange = (_event: React.ChangeEvent<{}>, newValue: string) => {\n setTab(newValue);\n };\n\n return (\n <>\n <ContentHeader\n title=\"Statistics\"\n titleIcon={<EmojiEventsOutlined fontSize=\"large\" />}\n >\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n <TabContext value={tab}>\n <Box sx={{ borderBottom: 1, borderColor: 'divider' }}>\n <TabList onChange={handleChange} style={{ padding: 0 }}>\n <Tab label=\"Global Stats\" value=\"global\" />\n <Tab label=\"Leaderboard\" value=\"leaderboard\" />\n </TabList>\n </Box>\n <TabPanel value=\"global\" style={{ padding: '24px 0' }}>\n <GlobalStatsContent />\n </TabPanel>\n <TabPanel value=\"leaderboard\" style={{ padding: '24px 0' }}>\n
|
|
1
|
+
{"version":3,"file":"StatisticsPage.esm.js","sources":["../../../src/components/Statistics/StatisticsPage.tsx"],"sourcesContent":["import {\n AskQuestionButton,\n ContentHeader,\n CreateLinkButton,\n TopRankingUsers,\n useQetaConfig,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { GlobalStatsContent } from './GlobalStatsContent';\nimport { Box, Tab } from '@material-ui/core';\nimport EmojiEventsOutlined from '@material-ui/icons/EmojiEventsOutlined';\nimport { TabContext, TabList, TabPanel } from '@material-ui/lab';\nimport { useEffect, useState } from 'react';\n\nexport const StatisticsPage = () => {\n const [tab, setTab] = useState('global');\n const { disabled } = useQetaConfig();\n\n useEffect(() => {\n if (disabled.questions && tab === 'leaderboard') {\n setTab('global');\n }\n }, [disabled.questions, tab]);\n\n const handleChange = (_event: React.ChangeEvent<{}>, newValue: string) => {\n setTab(newValue);\n };\n\n return (\n <>\n <ContentHeader\n title=\"Statistics\"\n titleIcon={<EmojiEventsOutlined fontSize=\"large\" />}\n >\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n <TabContext value={tab}>\n <Box sx={{ borderBottom: 1, borderColor: 'divider' }}>\n <TabList onChange={handleChange} style={{ padding: 0 }}>\n <Tab label=\"Global Stats\" value=\"global\" />\n {!disabled.questions && (\n <Tab label=\"Leaderboard\" value=\"leaderboard\" />\n )}\n </TabList>\n </Box>\n <TabPanel value=\"global\" style={{ padding: '24px 0' }}>\n <GlobalStatsContent />\n </TabPanel>\n {!disabled.questions && (\n <TabPanel value=\"leaderboard\" style={{ padding: '24px 0' }}>\n <TopRankingUsers limit={10} />\n </TabPanel>\n )}\n </TabContext>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAcO,MAAM,iBAAiB,MAAM;AAClC,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAI,SAAS,QAAQ,CAAA;AACvC,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,aAAA,EAAc;AAEnC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,QAAA,CAAS,SAAA,IAAa,GAAA,KAAQ,aAAA,EAAe;AAC/C,MAAA,MAAA,CAAO,QAAQ,CAAA;AAAA,IACjB;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,CAAS,SAAA,EAAW,GAAG,CAAC,CAAA;AAE5B,EAAA,MAAM,YAAA,GAAe,CAAC,MAAA,EAA+B,QAAA,KAAqB;AACxE,IAAA,MAAA,CAAO,QAAQ,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAM,YAAA;AAAA,QACN,SAAA,kBAAW,GAAA,CAAC,mBAAA,EAAA,EAAoB,QAAA,EAAS,OAAA,EAAQ,CAAA;AAAA,QAEjD,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,iBAAA,EAAA,EAAkB,CAAA;AAAA,8BAClB,kBAAA,EAAA,EAAmB,CAAA;AAAA,8BACnB,gBAAA,EAAA,EAAiB;AAAA;AAAA;AAAA,KACpB;AAAA,oBACA,IAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAO,GAAA,EACjB,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,OAAI,EAAA,EAAI,EAAE,YAAA,EAAc,CAAA,EAAG,aAAa,SAAA,EAAU,EACjD,QAAA,kBAAA,IAAA,CAAC,OAAA,EAAA,EAAQ,UAAU,YAAA,EAAc,KAAA,EAAO,EAAE,OAAA,EAAS,GAAE,EACnD,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,GAAA,EAAA,EAAI,KAAA,EAAM,cAAA,EAAe,KAAA,EAAM,QAAA,EAAS,CAAA;AAAA,QACxC,CAAC,SAAS,SAAA,oBACT,GAAA,CAAC,OAAI,KAAA,EAAM,aAAA,EAAc,OAAM,aAAA,EAAc;AAAA,OAAA,EAEjD,CAAA,EACF,CAAA;AAAA,sBACA,GAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAM,QAAA,EAAS,KAAA,EAAO,EAAE,OAAA,EAAS,QAAA,EAAS,EAClD,QAAA,kBAAA,GAAA,CAAC,kBAAA,EAAA,EAAmB,CAAA,EACtB,CAAA;AAAA,MACC,CAAC,QAAA,CAAS,SAAA,oBACT,GAAA,CAAC,QAAA,EAAA,EAAS,OAAM,aAAA,EAAc,KAAA,EAAO,EAAE,OAAA,EAAS,UAAS,EACvD,QAAA,kBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAO,IAAI,CAAA,EAC9B;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
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, useIsModerator, qetaApiRef, ContentHeader, TagFollowButton, AskQuestionButton, WriteArticleButton, CreateLinkButton, ContentHeaderCard, PostsContainer, TagsContainer, EditTagModal, DeleteModal } from '@drodil/backstage-plugin-qeta-react';
|
|
4
|
+
import { qetaTranslationRef, useQetaConfig, 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';
|
|
@@ -15,6 +15,7 @@ import { Typography, Button } from '@material-ui/core';
|
|
|
15
15
|
const TagPage = () => {
|
|
16
16
|
const { tag } = useParams();
|
|
17
17
|
const { t } = useTranslationRef(qetaTranslationRef);
|
|
18
|
+
const { disabled } = useQetaConfig();
|
|
18
19
|
const [resp, setResp] = useState();
|
|
19
20
|
const { isModerator } = useIsModerator();
|
|
20
21
|
const [editModalOpen, setEditModalOpen] = useState(false);
|
|
@@ -48,6 +49,9 @@ const TagPage = () => {
|
|
|
48
49
|
const handleDeleteModalClose = () => {
|
|
49
50
|
setDeleteModalOpen(false);
|
|
50
51
|
};
|
|
52
|
+
if (disabled.tags) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
51
55
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
52
56
|
tag ? /* @__PURE__ */ jsxs(
|
|
53
57
|
ContentHeader,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TagPage.esm.js","sources":["../../../src/components/TagPage/TagPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useParams } from 'react-router-dom';\nimport {\n AskQuestionButton,\n ContentHeader,\n CreateLinkButton,\n DeleteModal,\n EditTagModal,\n PostsContainer,\n qetaApiRef,\n qetaTranslationRef,\n TagFollowButton,\n TagsContainer,\n useIsModerator,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport LocalOfferOutlined from '@material-ui/icons/LocalOfferOutlined';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport PeopleIcon from '@material-ui/icons/People';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport { TagResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { ContentHeaderCard } from '@drodil/backstage-plugin-qeta-react';\nimport { Button, Typography } from '@material-ui/core';\n\nexport const TagPage = () => {\n const { tag } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n const [resp, setResp] = useState<undefined | TagResponse>();\n const { isModerator } = useIsModerator();\n\n const [editModalOpen, setEditModalOpen] = useState(false);\n const [deleteModalOpen, setDeleteModalOpen] = useState(false);\n\n const qetaApi = useApi(qetaApiRef);\n const alertApi = useApi(alertApiRef);\n\n const fetchTag = () => {\n if (!tag) {\n setResp(undefined);\n return;\n }\n\n qetaApi\n .getTag(tag)\n .then(res => {\n if (res) {\n setResp(res);\n }\n })\n .catch(e => {\n alertApi.post({\n message: e.message,\n severity: 'error',\n display: 'transient',\n });\n });\n };\n\n useEffect(() => {\n fetchTag();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [qetaApi, tag, alertApi]);\n\n const handleEditModalClose = () => {\n setEditModalOpen(false);\n fetchTag();\n };\n\n const handleDeleteModalClose = () => {\n setDeleteModalOpen(false);\n };\n\n return (\n <>\n {tag ? (\n <ContentHeader\n title={tag}\n titleIcon={<LocalOfferOutlined fontSize=\"large\" />}\n >\n <TagFollowButton tag={tag} />\n <AskQuestionButton tags={[tag]} />\n <WriteArticleButton tags={[tag]} />\n <CreateLinkButton tags={[tag]} />\n </ContentHeader>\n ) : (\n <ContentHeader\n title={t('tagPage.defaultTitle', {})}\n titleIcon={<LocalOfferOutlined fontSize=\"large\" />}\n >\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n )}\n {resp && (\n <ContentHeaderCard\n description={resp.description}\n imageIcon={<LocalOfferOutlined style={{ fontSize: 80 }} />}\n stats={[\n {\n label: t('common.postsLabel', {\n count: resp.postsCount,\n itemType: 'post',\n }),\n value: resp.postsCount,\n icon: <QuestionAnswerIcon fontSize=\"small\" />,\n },\n {\n label: t('common.followersLabel', { count: resp.followerCount }),\n value: resp.followerCount,\n icon: <PeopleIcon fontSize=\"small\" />,\n },\n ]}\n >\n {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.canEdit || resp.canDelete) && (\n <div style={{ marginTop: '1em' }}>\n {resp.canEdit && (\n <Button\n variant=\"outlined\"\n size=\"small\"\n startIcon={<EditIcon />}\n onClick={() => setEditModalOpen(true)}\n style={{ marginRight: '0.5em' }}\n >\n {t('tagButton.edit')}\n </Button>\n )}\n {resp.canDelete && (\n <Button\n variant=\"outlined\"\n size=\"small\"\n color=\"secondary\"\n startIcon={<DeleteIcon />}\n onClick={() => setDeleteModalOpen(true)}\n >\n {t('tagButton.delete')}\n </Button>\n )}\n </div>\n )}\n </ContentHeaderCard>\n )}\n {tag && (\n <PostsContainer\n tags={[tag ?? '']}\n filterPanelProps={{ showTagFilter: false }}\n showTypeLabel\n defaultView=\"list\"\n prefix=\"tag-posts\"\n />\n )}\n {!tag && <TagsContainer />}\n {resp && (\n <>\n <EditTagModal\n tag={resp}\n open={editModalOpen}\n onClose={handleEditModalClose}\n isModerator={isModerator}\n />\n <DeleteModal\n open={deleteModalOpen}\n onClose={handleDeleteModalClose}\n entity={resp}\n />\n </>\n )}\n </>\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 { useParams } from 'react-router-dom';\nimport {\n AskQuestionButton,\n ContentHeader,\n CreateLinkButton,\n DeleteModal,\n EditTagModal,\n PostsContainer,\n qetaApiRef,\n qetaTranslationRef,\n TagFollowButton,\n TagsContainer,\n useQetaConfig,\n useIsModerator,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport LocalOfferOutlined from '@material-ui/icons/LocalOfferOutlined';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport PeopleIcon from '@material-ui/icons/People';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport { TagResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { ContentHeaderCard } from '@drodil/backstage-plugin-qeta-react';\nimport { Button, Typography } from '@material-ui/core';\n\nexport const TagPage = () => {\n const { tag } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n const { disabled } = useQetaConfig();\n const [resp, setResp] = useState<undefined | TagResponse>();\n const { isModerator } = useIsModerator();\n\n const [editModalOpen, setEditModalOpen] = useState(false);\n const [deleteModalOpen, setDeleteModalOpen] = useState(false);\n\n const qetaApi = useApi(qetaApiRef);\n const alertApi = useApi(alertApiRef);\n\n const fetchTag = () => {\n if (!tag) {\n setResp(undefined);\n return;\n }\n\n qetaApi\n .getTag(tag)\n .then(res => {\n if (res) {\n setResp(res);\n }\n })\n .catch(e => {\n alertApi.post({\n message: e.message,\n severity: 'error',\n display: 'transient',\n });\n });\n };\n\n useEffect(() => {\n fetchTag();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [qetaApi, tag, alertApi]);\n\n const handleEditModalClose = () => {\n setEditModalOpen(false);\n fetchTag();\n };\n\n const handleDeleteModalClose = () => {\n setDeleteModalOpen(false);\n };\n\n if (disabled.tags) {\n return null;\n }\n\n return (\n <>\n {tag ? (\n <ContentHeader\n title={tag}\n titleIcon={<LocalOfferOutlined fontSize=\"large\" />}\n >\n <TagFollowButton tag={tag} />\n <AskQuestionButton tags={[tag]} />\n <WriteArticleButton tags={[tag]} />\n <CreateLinkButton tags={[tag]} />\n </ContentHeader>\n ) : (\n <ContentHeader\n title={t('tagPage.defaultTitle', {})}\n titleIcon={<LocalOfferOutlined fontSize=\"large\" />}\n >\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n )}\n {resp && (\n <ContentHeaderCard\n description={resp.description}\n imageIcon={<LocalOfferOutlined style={{ fontSize: 80 }} />}\n stats={[\n {\n label: t('common.postsLabel', {\n count: resp.postsCount,\n itemType: 'post',\n }),\n value: resp.postsCount,\n icon: <QuestionAnswerIcon fontSize=\"small\" />,\n },\n {\n label: t('common.followersLabel', { count: resp.followerCount }),\n value: resp.followerCount,\n icon: <PeopleIcon fontSize=\"small\" />,\n },\n ]}\n >\n {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.canEdit || resp.canDelete) && (\n <div style={{ marginTop: '1em' }}>\n {resp.canEdit && (\n <Button\n variant=\"outlined\"\n size=\"small\"\n startIcon={<EditIcon />}\n onClick={() => setEditModalOpen(true)}\n style={{ marginRight: '0.5em' }}\n >\n {t('tagButton.edit')}\n </Button>\n )}\n {resp.canDelete && (\n <Button\n variant=\"outlined\"\n size=\"small\"\n color=\"secondary\"\n startIcon={<DeleteIcon />}\n onClick={() => setDeleteModalOpen(true)}\n >\n {t('tagButton.delete')}\n </Button>\n )}\n </div>\n )}\n </ContentHeaderCard>\n )}\n {tag && (\n <PostsContainer\n tags={[tag ?? '']}\n filterPanelProps={{ showTagFilter: false }}\n showTypeLabel\n defaultView=\"list\"\n prefix=\"tag-posts\"\n />\n )}\n {!tag && <TagsContainer />}\n {resp && (\n <>\n <EditTagModal\n tag={resp}\n open={editModalOpen}\n onClose={handleEditModalClose}\n isModerator={isModerator}\n />\n <DeleteModal\n open={deleteModalOpen}\n onClose={handleDeleteModalClose}\n entity={resp}\n />\n </>\n )}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|