@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,7 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import { useState } from 'react';
|
|
2
|
+
import { useState, useMemo, useEffect } from 'react';
|
|
3
3
|
import { useParams, useSearchParams } from 'react-router-dom';
|
|
4
|
-
import { useUserInfo, qetaTranslationRef, useIdentityApi, useQetaApi, RelativeTimeWithTooltip, ContentHeader, UserFollowButton, AskQuestionButton, WriteArticleButton, CreateLinkButton, PostsContainer, CollectionsContainer, AnswersContainer } from '@drodil/backstage-plugin-qeta-react';
|
|
4
|
+
import { useUserInfo, qetaTranslationRef, useQetaConfig, useIdentityApi, useQetaApi, RelativeTimeWithTooltip, ContentHeader, UserFollowButton, AskQuestionButton, WriteArticleButton, CreateLinkButton, PostsContainer, CollectionsContainer, AnswersContainer } from '@drodil/backstage-plugin-qeta-react';
|
|
5
5
|
import { UserStatsContent } from './UserStatsContent.esm.js';
|
|
6
6
|
import { TabContext, TabList, TabPanel } from '@material-ui/lab';
|
|
7
7
|
import { Box, Avatar, Typography, Tab, makeStyles } from '@material-ui/core';
|
|
@@ -46,6 +46,7 @@ const UserPage = () => {
|
|
|
46
46
|
const { t } = useTranslationRef(qetaTranslationRef);
|
|
47
47
|
const [_searchParams, setSearchParams] = useSearchParams();
|
|
48
48
|
const classes = useStyles();
|
|
49
|
+
const { disabled } = useQetaConfig();
|
|
49
50
|
const {
|
|
50
51
|
value: currentUser,
|
|
51
52
|
loading: loadingUser,
|
|
@@ -59,6 +60,21 @@ const UserPage = () => {
|
|
|
59
60
|
setSearchParams({});
|
|
60
61
|
setTab(newValue);
|
|
61
62
|
};
|
|
63
|
+
const availableTabs = useMemo(() => {
|
|
64
|
+
return [
|
|
65
|
+
"statistics",
|
|
66
|
+
!disabled.questions ? "questions" : null,
|
|
67
|
+
!disabled.articles ? "articles" : null,
|
|
68
|
+
!disabled.links ? "links" : null,
|
|
69
|
+
!disabled.collections ? "collections" : null,
|
|
70
|
+
!disabled.questions ? "answers" : null
|
|
71
|
+
].filter((v) => Boolean(v));
|
|
72
|
+
}, [disabled]);
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
if (!availableTabs.includes(tab)) {
|
|
75
|
+
setTab(availableTabs[0]);
|
|
76
|
+
}
|
|
77
|
+
}, [availableTabs, tab]);
|
|
62
78
|
const TabLabel = ({
|
|
63
79
|
icon,
|
|
64
80
|
label
|
|
@@ -106,6 +122,92 @@ const UserPage = () => {
|
|
|
106
122
|
]
|
|
107
123
|
}
|
|
108
124
|
);
|
|
125
|
+
const tabItems = [
|
|
126
|
+
/* @__PURE__ */ jsx(
|
|
127
|
+
Tab,
|
|
128
|
+
{
|
|
129
|
+
value: "statistics",
|
|
130
|
+
label: /* @__PURE__ */ jsx(
|
|
131
|
+
TabLabel,
|
|
132
|
+
{
|
|
133
|
+
icon: /* @__PURE__ */ jsx(AssessmentIcon, { className: classes.tabIcon }),
|
|
134
|
+
label: t("userPage.statistics", {})
|
|
135
|
+
}
|
|
136
|
+
)
|
|
137
|
+
},
|
|
138
|
+
"statistics"
|
|
139
|
+
),
|
|
140
|
+
!disabled.questions ? /* @__PURE__ */ jsx(
|
|
141
|
+
Tab,
|
|
142
|
+
{
|
|
143
|
+
value: "questions",
|
|
144
|
+
label: /* @__PURE__ */ jsx(
|
|
145
|
+
TabLabel,
|
|
146
|
+
{
|
|
147
|
+
icon: /* @__PURE__ */ jsx(HelpOutline, { className: classes.tabIcon }),
|
|
148
|
+
label: t("userPage.questions", {})
|
|
149
|
+
}
|
|
150
|
+
)
|
|
151
|
+
},
|
|
152
|
+
"questions"
|
|
153
|
+
) : null,
|
|
154
|
+
!disabled.articles ? /* @__PURE__ */ jsx(
|
|
155
|
+
Tab,
|
|
156
|
+
{
|
|
157
|
+
value: "articles",
|
|
158
|
+
label: /* @__PURE__ */ jsx(
|
|
159
|
+
TabLabel,
|
|
160
|
+
{
|
|
161
|
+
icon: /* @__PURE__ */ jsx(CollectionsBookmarkIcon, { className: classes.tabIcon }),
|
|
162
|
+
label: t("userPage.articles", {})
|
|
163
|
+
}
|
|
164
|
+
)
|
|
165
|
+
},
|
|
166
|
+
"articles"
|
|
167
|
+
) : null,
|
|
168
|
+
!disabled.links ? /* @__PURE__ */ jsx(
|
|
169
|
+
Tab,
|
|
170
|
+
{
|
|
171
|
+
value: "links",
|
|
172
|
+
label: /* @__PURE__ */ jsx(
|
|
173
|
+
TabLabel,
|
|
174
|
+
{
|
|
175
|
+
icon: /* @__PURE__ */ jsx(LinkIcon, { className: classes.tabIcon }),
|
|
176
|
+
label: t("userPage.links", {})
|
|
177
|
+
}
|
|
178
|
+
)
|
|
179
|
+
},
|
|
180
|
+
"links"
|
|
181
|
+
) : null,
|
|
182
|
+
!disabled.collections ? /* @__PURE__ */ jsx(
|
|
183
|
+
Tab,
|
|
184
|
+
{
|
|
185
|
+
value: "collections",
|
|
186
|
+
label: /* @__PURE__ */ jsx(
|
|
187
|
+
TabLabel,
|
|
188
|
+
{
|
|
189
|
+
icon: /* @__PURE__ */ jsx(CollectionsIcon, { className: classes.tabIcon }),
|
|
190
|
+
label: t("userPage.collections", {})
|
|
191
|
+
}
|
|
192
|
+
)
|
|
193
|
+
},
|
|
194
|
+
"collections"
|
|
195
|
+
) : null,
|
|
196
|
+
!disabled.questions ? /* @__PURE__ */ jsx(
|
|
197
|
+
Tab,
|
|
198
|
+
{
|
|
199
|
+
value: "answers",
|
|
200
|
+
label: /* @__PURE__ */ jsx(
|
|
201
|
+
TabLabel,
|
|
202
|
+
{
|
|
203
|
+
icon: /* @__PURE__ */ jsx(QuestionAnswerIcon, { className: classes.tabIcon }),
|
|
204
|
+
label: t("userPage.answers", {})
|
|
205
|
+
}
|
|
206
|
+
)
|
|
207
|
+
},
|
|
208
|
+
"answers"
|
|
209
|
+
) : null
|
|
210
|
+
].filter((item) => item !== null);
|
|
109
211
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
110
212
|
/* @__PURE__ */ jsxs(ContentHeader, { titleComponent: title, children: [
|
|
111
213
|
!loadingUser && !userError && currentUser?.userEntityRef !== identity && /* @__PURE__ */ jsx(
|
|
@@ -120,7 +222,7 @@ const UserPage = () => {
|
|
|
120
222
|
/* @__PURE__ */ jsx(CreateLinkButton, {})
|
|
121
223
|
] }),
|
|
122
224
|
/* @__PURE__ */ jsxs(TabContext, { value: tab, children: [
|
|
123
|
-
/* @__PURE__ */ jsx(Box, { className: classes.tabList, children: /* @__PURE__ */
|
|
225
|
+
/* @__PURE__ */ jsx(Box, { className: classes.tabList, children: /* @__PURE__ */ jsx(
|
|
124
226
|
TabList,
|
|
125
227
|
{
|
|
126
228
|
onChange: handleChange,
|
|
@@ -128,86 +230,7 @@ const UserPage = () => {
|
|
|
128
230
|
"aria-labelledby": "user-name",
|
|
129
231
|
variant: "scrollable",
|
|
130
232
|
scrollButtons: "auto",
|
|
131
|
-
children:
|
|
132
|
-
/* @__PURE__ */ jsx(
|
|
133
|
-
Tab,
|
|
134
|
-
{
|
|
135
|
-
value: "statistics",
|
|
136
|
-
label: /* @__PURE__ */ jsx(
|
|
137
|
-
TabLabel,
|
|
138
|
-
{
|
|
139
|
-
icon: /* @__PURE__ */ jsx(AssessmentIcon, { className: classes.tabIcon }),
|
|
140
|
-
label: t("userPage.statistics", {})
|
|
141
|
-
}
|
|
142
|
-
)
|
|
143
|
-
}
|
|
144
|
-
),
|
|
145
|
-
/* @__PURE__ */ jsx(
|
|
146
|
-
Tab,
|
|
147
|
-
{
|
|
148
|
-
value: "questions",
|
|
149
|
-
label: /* @__PURE__ */ jsx(
|
|
150
|
-
TabLabel,
|
|
151
|
-
{
|
|
152
|
-
icon: /* @__PURE__ */ jsx(HelpOutline, { className: classes.tabIcon }),
|
|
153
|
-
label: t("userPage.questions", {})
|
|
154
|
-
}
|
|
155
|
-
)
|
|
156
|
-
}
|
|
157
|
-
),
|
|
158
|
-
/* @__PURE__ */ jsx(
|
|
159
|
-
Tab,
|
|
160
|
-
{
|
|
161
|
-
value: "articles",
|
|
162
|
-
label: /* @__PURE__ */ jsx(
|
|
163
|
-
TabLabel,
|
|
164
|
-
{
|
|
165
|
-
icon: /* @__PURE__ */ jsx(CollectionsBookmarkIcon, { className: classes.tabIcon }),
|
|
166
|
-
label: t("userPage.articles", {})
|
|
167
|
-
}
|
|
168
|
-
)
|
|
169
|
-
}
|
|
170
|
-
),
|
|
171
|
-
/* @__PURE__ */ jsx(
|
|
172
|
-
Tab,
|
|
173
|
-
{
|
|
174
|
-
value: "links",
|
|
175
|
-
label: /* @__PURE__ */ jsx(
|
|
176
|
-
TabLabel,
|
|
177
|
-
{
|
|
178
|
-
icon: /* @__PURE__ */ jsx(LinkIcon, { className: classes.tabIcon }),
|
|
179
|
-
label: t("userPage.links", {})
|
|
180
|
-
}
|
|
181
|
-
)
|
|
182
|
-
}
|
|
183
|
-
),
|
|
184
|
-
/* @__PURE__ */ jsx(
|
|
185
|
-
Tab,
|
|
186
|
-
{
|
|
187
|
-
value: "collections",
|
|
188
|
-
label: /* @__PURE__ */ jsx(
|
|
189
|
-
TabLabel,
|
|
190
|
-
{
|
|
191
|
-
icon: /* @__PURE__ */ jsx(CollectionsIcon, { className: classes.tabIcon }),
|
|
192
|
-
label: t("userPage.collections", {})
|
|
193
|
-
}
|
|
194
|
-
)
|
|
195
|
-
}
|
|
196
|
-
),
|
|
197
|
-
/* @__PURE__ */ jsx(
|
|
198
|
-
Tab,
|
|
199
|
-
{
|
|
200
|
-
value: "answers",
|
|
201
|
-
label: /* @__PURE__ */ jsx(
|
|
202
|
-
TabLabel,
|
|
203
|
-
{
|
|
204
|
-
icon: /* @__PURE__ */ jsx(QuestionAnswerIcon, { className: classes.tabIcon }),
|
|
205
|
-
label: t("userPage.answers", {})
|
|
206
|
-
}
|
|
207
|
-
)
|
|
208
|
-
}
|
|
209
|
-
)
|
|
210
|
-
]
|
|
233
|
+
children: tabItems
|
|
211
234
|
}
|
|
212
235
|
) }),
|
|
213
236
|
/* @__PURE__ */ jsx(TabPanel, { value: "statistics", className: classes.tabPanel, children: /* @__PURE__ */ jsx(
|
|
@@ -218,7 +241,7 @@ const UserPage = () => {
|
|
|
218
241
|
loading: loadingUserStats
|
|
219
242
|
}
|
|
220
243
|
) }),
|
|
221
|
-
/* @__PURE__ */ jsx(TabPanel, { value: "questions", className: classes.tabPanel, children: /* @__PURE__ */ jsx(
|
|
244
|
+
!disabled.questions && /* @__PURE__ */ jsx(TabPanel, { value: "questions", className: classes.tabPanel, children: /* @__PURE__ */ jsx(
|
|
222
245
|
PostsContainer,
|
|
223
246
|
{
|
|
224
247
|
author: identity ?? "",
|
|
@@ -227,7 +250,7 @@ const UserPage = () => {
|
|
|
227
250
|
prefix: "user-questions"
|
|
228
251
|
}
|
|
229
252
|
) }),
|
|
230
|
-
/* @__PURE__ */ jsx(TabPanel, { value: "articles", className: classes.tabPanel, children: /* @__PURE__ */ jsx(
|
|
253
|
+
!disabled.articles && /* @__PURE__ */ jsx(TabPanel, { value: "articles", className: classes.tabPanel, children: /* @__PURE__ */ jsx(
|
|
231
254
|
PostsContainer,
|
|
232
255
|
{
|
|
233
256
|
author: identity ?? "",
|
|
@@ -236,7 +259,7 @@ const UserPage = () => {
|
|
|
236
259
|
prefix: "user-articles"
|
|
237
260
|
}
|
|
238
261
|
) }),
|
|
239
|
-
/* @__PURE__ */ jsx(TabPanel, { value: "links", className: classes.tabPanel, children: /* @__PURE__ */ jsx(
|
|
262
|
+
!disabled.links && /* @__PURE__ */ jsx(TabPanel, { value: "links", className: classes.tabPanel, children: /* @__PURE__ */ jsx(
|
|
240
263
|
PostsContainer,
|
|
241
264
|
{
|
|
242
265
|
author: identity ?? "",
|
|
@@ -245,14 +268,14 @@ const UserPage = () => {
|
|
|
245
268
|
prefix: "user-links"
|
|
246
269
|
}
|
|
247
270
|
) }),
|
|
248
|
-
/* @__PURE__ */ jsx(TabPanel, { value: "collections", className: classes.tabPanel, children: /* @__PURE__ */ jsx(
|
|
271
|
+
!disabled.collections && /* @__PURE__ */ jsx(TabPanel, { value: "collections", className: classes.tabPanel, children: /* @__PURE__ */ jsx(
|
|
249
272
|
CollectionsContainer,
|
|
250
273
|
{
|
|
251
274
|
owner: identity ?? "",
|
|
252
275
|
prefix: "user-collections"
|
|
253
276
|
}
|
|
254
277
|
) }),
|
|
255
|
-
/* @__PURE__ */ jsx(TabPanel, { value: "answers", className: classes.tabPanel, children: /* @__PURE__ */ jsx(
|
|
278
|
+
!disabled.questions && /* @__PURE__ */ jsx(TabPanel, { value: "answers", className: classes.tabPanel, children: /* @__PURE__ */ jsx(
|
|
256
279
|
AnswersContainer,
|
|
257
280
|
{
|
|
258
281
|
author: identity ?? "",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserPage.esm.js","sources":["../../../src/components/UserPage/UserPage.tsx"],"sourcesContent":["import { ChangeEvent, useState } from 'react';\nimport { useParams, useSearchParams } from 'react-router-dom';\nimport {\n AnswersContainer,\n AskQuestionButton,\n CollectionsContainer,\n ContentHeader,\n CreateLinkButton,\n PostsContainer,\n qetaTranslationRef,\n useIdentityApi,\n UserFollowButton,\n useUserInfo,\n WriteArticleButton,\n useQetaApi,\n RelativeTimeWithTooltip,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { UserStatsContent } from './UserStatsContent';\nimport { TabContext, TabList, TabPanel } from '@material-ui/lab';\nimport { Avatar, Box, makeStyles, Tab, Typography } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport AssessmentIcon from '@material-ui/icons/Assessment';\nimport HelpOutlineIcon from '@material-ui/icons/HelpOutline';\nimport CollectionsBookmarkIcon from '@material-ui/icons/CollectionsBookmark';\nimport CollectionsIcon from '@material-ui/icons/Collections';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport LinkIcon from '@material-ui/icons/Link';\n\nconst useStyles = makeStyles(theme => ({\n tabIcon: {\n marginRight: theme.spacing(1),\n },\n tabPanel: {\n padding: theme.spacing(3, 0),\n },\n avatar: {\n width: theme.spacing(12),\n height: theme.spacing(12),\n marginRight: theme.spacing(3),\n boxShadow: theme.shadows[2],\n },\n headerContent: {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(3, 0),\n },\n tabList: {},\n tabLabel: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n minWidth: 0,\n },\n}));\n\nexport const UserPage = () => {\n const identity = useParams()['*'] ?? 'unknown';\n const { name, initials, user, secondaryTitle } = useUserInfo(identity);\n const [tab, setTab] = useState('statistics');\n const { t } = useTranslationRef(qetaTranslationRef);\n const [_searchParams, setSearchParams] = useSearchParams();\n const classes = useStyles();\n const {\n value: currentUser,\n loading: loadingUser,\n error: userError,\n } = useIdentityApi(api => api.getBackstageIdentity(), []);\n const { value: userStats, loading: loadingUserStats } = useQetaApi(\n api => api.getUserStats(identity),\n [identity],\n );\n\n const handleChange = (_event: ChangeEvent<{}>, newValue: string) => {\n setSearchParams({});\n setTab(newValue);\n };\n\n const TabLabel = ({\n icon,\n label,\n }: {\n icon: React.ReactNode;\n label: string;\n }) => (\n <div className={classes.tabLabel}>\n {icon}\n <span>{label}</span>\n </div>\n );\n\n const title = (\n <Box\n className={classes.headerContent}\n role=\"banner\"\n aria-label={t('userPage.profileHeader', {})}\n >\n <Avatar\n src={user?.spec?.profile?.picture}\n alt={name}\n variant=\"rounded\"\n className={classes.avatar}\n aria-label={t('userPage.profilePicture', { name })}\n >\n {initials}\n </Avatar>\n <Box display=\"flex\" flexDirection=\"column\" justifyContent=\"center\">\n <Box display=\"flex\" alignItems=\"center\">\n <Typography\n variant=\"h4\"\n component=\"h2\"\n id=\"user-name\"\n style={{ fontWeight: 700 }}\n >\n {name}\n </Typography>\n </Box>\n {(secondaryTitle || user?.spec?.profile?.email) && (\n <Typography variant=\"h6\" color=\"textSecondary\">\n {secondaryTitle || user?.spec?.profile?.email}\n </Typography>\n )}\n {userStats?.summary?.lastSeen && (\n <Typography variant=\"body2\" color=\"textSecondary\">\n {t('stats.lastSeen')}:{' '}\n <RelativeTimeWithTooltip value={userStats.summary.lastSeen} />\n </Typography>\n )}\n </Box>\n </Box>\n );\n\n return (\n <>\n <ContentHeader titleComponent={title}>\n {!loadingUser &&\n !userError &&\n currentUser?.userEntityRef !== identity && (\n <UserFollowButton\n userRef={identity}\n aria-label={t('userPage.followUser', { name })}\n />\n )}\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n <TabContext value={tab}>\n <Box className={classes.tabList}>\n <TabList\n onChange={handleChange}\n aria-label={t('userPage.profileTab', {})}\n aria-labelledby=\"user-name\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n <Tab\n value=\"statistics\"\n label={\n <TabLabel\n icon={<AssessmentIcon className={classes.tabIcon} />}\n label={t('userPage.statistics', {})}\n />\n }\n />\n <Tab\n value=\"questions\"\n label={\n <TabLabel\n icon={<HelpOutlineIcon className={classes.tabIcon} />}\n label={t('userPage.questions', {})}\n />\n }\n />\n <Tab\n value=\"articles\"\n label={\n <TabLabel\n icon={<CollectionsBookmarkIcon className={classes.tabIcon} />}\n label={t('userPage.articles', {})}\n />\n }\n />\n <Tab\n value=\"links\"\n label={\n <TabLabel\n icon={<LinkIcon className={classes.tabIcon} />}\n label={t('userPage.links', {})}\n />\n }\n />\n <Tab\n value=\"collections\"\n label={\n <TabLabel\n icon={<CollectionsIcon className={classes.tabIcon} />}\n label={t('userPage.collections', {})}\n />\n }\n />\n <Tab\n value=\"answers\"\n label={\n <TabLabel\n icon={<QuestionAnswerIcon className={classes.tabIcon} />}\n label={t('userPage.answers', {})}\n />\n }\n />\n </TabList>\n </Box>\n <TabPanel value=\"statistics\" className={classes.tabPanel}>\n <UserStatsContent\n userRef={identity ?? ''}\n stats={userStats}\n loading={loadingUserStats}\n />\n </TabPanel>\n <TabPanel value=\"questions\" className={classes.tabPanel}>\n <PostsContainer\n author={identity ?? ''}\n showNoQuestionsBtn={false}\n type=\"question\"\n prefix=\"user-questions\"\n />\n </TabPanel>\n <TabPanel value=\"articles\" className={classes.tabPanel}>\n <PostsContainer\n author={identity ?? ''}\n type=\"article\"\n showNoQuestionsBtn={false}\n prefix=\"user-articles\"\n />\n </TabPanel>\n <TabPanel value=\"links\" className={classes.tabPanel}>\n <PostsContainer\n author={identity ?? ''}\n type=\"link\"\n showNoQuestionsBtn={false}\n prefix=\"user-links\"\n />\n </TabPanel>\n <TabPanel value=\"collections\" className={classes.tabPanel}>\n <CollectionsContainer\n owner={identity ?? ''}\n prefix=\"user-collections\"\n />\n </TabPanel>\n <TabPanel value=\"answers\" className={classes.tabPanel}>\n <AnswersContainer\n author={identity ?? ''}\n title={t('userPage.answers', {})}\n prefix=\"user-answers\"\n />\n </TabPanel>\n </TabContext>\n </>\n );\n};\n"],"names":["HelpOutlineIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UserPage.esm.js","sources":["../../../src/components/UserPage/UserPage.tsx"],"sourcesContent":["import React, { ChangeEvent, useEffect, useMemo, useState } from 'react';\nimport { useParams, useSearchParams } from 'react-router-dom';\nimport {\n AnswersContainer,\n AskQuestionButton,\n CollectionsContainer,\n ContentHeader,\n CreateLinkButton,\n PostsContainer,\n qetaTranslationRef,\n useIdentityApi,\n UserFollowButton,\n useUserInfo,\n WriteArticleButton,\n useQetaApi,\n RelativeTimeWithTooltip,\n useQetaConfig,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { UserStatsContent } from './UserStatsContent';\nimport { TabContext, TabList, TabPanel } from '@material-ui/lab';\nimport { Avatar, Box, makeStyles, Tab, Typography } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport AssessmentIcon from '@material-ui/icons/Assessment';\nimport HelpOutlineIcon from '@material-ui/icons/HelpOutline';\nimport CollectionsBookmarkIcon from '@material-ui/icons/CollectionsBookmark';\nimport CollectionsIcon from '@material-ui/icons/Collections';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport LinkIcon from '@material-ui/icons/Link';\n\nconst useStyles = makeStyles(theme => ({\n tabIcon: {\n marginRight: theme.spacing(1),\n },\n tabPanel: {\n padding: theme.spacing(3, 0),\n },\n avatar: {\n width: theme.spacing(12),\n height: theme.spacing(12),\n marginRight: theme.spacing(3),\n boxShadow: theme.shadows[2],\n },\n headerContent: {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(3, 0),\n },\n tabList: {},\n tabLabel: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n minWidth: 0,\n },\n}));\n\nexport const UserPage = () => {\n const identity = useParams()['*'] ?? 'unknown';\n const { name, initials, user, secondaryTitle } = useUserInfo(identity);\n const [tab, setTab] = useState('statistics');\n const { t } = useTranslationRef(qetaTranslationRef);\n const [_searchParams, setSearchParams] = useSearchParams();\n const classes = useStyles();\n const { disabled } = useQetaConfig();\n const {\n value: currentUser,\n loading: loadingUser,\n error: userError,\n } = useIdentityApi(api => api.getBackstageIdentity(), []);\n const { value: userStats, loading: loadingUserStats } = useQetaApi(\n api => api.getUserStats(identity),\n [identity],\n );\n\n const handleChange = (_event: ChangeEvent<{}>, newValue: string) => {\n setSearchParams({});\n setTab(newValue);\n };\n\n const availableTabs = useMemo(() => {\n return [\n 'statistics',\n !disabled.questions ? 'questions' : null,\n !disabled.articles ? 'articles' : null,\n !disabled.links ? 'links' : null,\n !disabled.collections ? 'collections' : null,\n !disabled.questions ? 'answers' : null,\n ].filter((v): v is string => Boolean(v));\n }, [disabled]);\n\n useEffect(() => {\n if (!availableTabs.includes(tab)) {\n setTab(availableTabs[0]);\n }\n }, [availableTabs, tab]);\n\n const TabLabel = ({\n icon,\n label,\n }: {\n icon: React.ReactNode;\n label: string;\n }) => (\n <div className={classes.tabLabel}>\n {icon}\n <span>{label}</span>\n </div>\n );\n\n const title = (\n <Box\n className={classes.headerContent}\n role=\"banner\"\n aria-label={t('userPage.profileHeader', {})}\n >\n <Avatar\n src={user?.spec?.profile?.picture}\n alt={name}\n variant=\"rounded\"\n className={classes.avatar}\n aria-label={t('userPage.profilePicture', { name })}\n >\n {initials}\n </Avatar>\n <Box display=\"flex\" flexDirection=\"column\" justifyContent=\"center\">\n <Box display=\"flex\" alignItems=\"center\">\n <Typography\n variant=\"h4\"\n component=\"h2\"\n id=\"user-name\"\n style={{ fontWeight: 700 }}\n >\n {name}\n </Typography>\n </Box>\n {(secondaryTitle || user?.spec?.profile?.email) && (\n <Typography variant=\"h6\" color=\"textSecondary\">\n {secondaryTitle || user?.spec?.profile?.email}\n </Typography>\n )}\n {userStats?.summary?.lastSeen && (\n <Typography variant=\"body2\" color=\"textSecondary\">\n {t('stats.lastSeen')}:{' '}\n <RelativeTimeWithTooltip value={userStats.summary.lastSeen} />\n </Typography>\n )}\n </Box>\n </Box>\n );\n\n const tabItems = [\n <Tab\n key=\"statistics\"\n value=\"statistics\"\n label={\n <TabLabel\n icon={<AssessmentIcon className={classes.tabIcon} />}\n label={t('userPage.statistics', {})}\n />\n }\n />,\n !disabled.questions ? (\n <Tab\n key=\"questions\"\n value=\"questions\"\n label={\n <TabLabel\n icon={<HelpOutlineIcon className={classes.tabIcon} />}\n label={t('userPage.questions', {})}\n />\n }\n />\n ) : null,\n !disabled.articles ? (\n <Tab\n key=\"articles\"\n value=\"articles\"\n label={\n <TabLabel\n icon={<CollectionsBookmarkIcon className={classes.tabIcon} />}\n label={t('userPage.articles', {})}\n />\n }\n />\n ) : null,\n !disabled.links ? (\n <Tab\n key=\"links\"\n value=\"links\"\n label={\n <TabLabel\n icon={<LinkIcon className={classes.tabIcon} />}\n label={t('userPage.links', {})}\n />\n }\n />\n ) : null,\n !disabled.collections ? (\n <Tab\n key=\"collections\"\n value=\"collections\"\n label={\n <TabLabel\n icon={<CollectionsIcon className={classes.tabIcon} />}\n label={t('userPage.collections', {})}\n />\n }\n />\n ) : null,\n !disabled.questions ? (\n <Tab\n key=\"answers\"\n value=\"answers\"\n label={\n <TabLabel\n icon={<QuestionAnswerIcon className={classes.tabIcon} />}\n label={t('userPage.answers', {})}\n />\n }\n />\n ) : null,\n ].filter((item): item is React.ReactElement => item !== null);\n\n return (\n <>\n <ContentHeader titleComponent={title}>\n {!loadingUser &&\n !userError &&\n currentUser?.userEntityRef !== identity && (\n <UserFollowButton\n userRef={identity}\n aria-label={t('userPage.followUser', { name })}\n />\n )}\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n <TabContext value={tab}>\n <Box className={classes.tabList}>\n <TabList\n onChange={handleChange}\n aria-label={t('userPage.profileTab', {})}\n aria-labelledby=\"user-name\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n {tabItems}\n </TabList>\n </Box>\n <TabPanel value=\"statistics\" className={classes.tabPanel}>\n <UserStatsContent\n userRef={identity ?? ''}\n stats={userStats}\n loading={loadingUserStats}\n />\n </TabPanel>\n {!disabled.questions && (\n <TabPanel value=\"questions\" className={classes.tabPanel}>\n <PostsContainer\n author={identity ?? ''}\n showNoQuestionsBtn={false}\n type=\"question\"\n prefix=\"user-questions\"\n />\n </TabPanel>\n )}\n {!disabled.articles && (\n <TabPanel value=\"articles\" className={classes.tabPanel}>\n <PostsContainer\n author={identity ?? ''}\n type=\"article\"\n showNoQuestionsBtn={false}\n prefix=\"user-articles\"\n />\n </TabPanel>\n )}\n {!disabled.links && (\n <TabPanel value=\"links\" className={classes.tabPanel}>\n <PostsContainer\n author={identity ?? ''}\n type=\"link\"\n showNoQuestionsBtn={false}\n prefix=\"user-links\"\n />\n </TabPanel>\n )}\n {!disabled.collections && (\n <TabPanel value=\"collections\" className={classes.tabPanel}>\n <CollectionsContainer\n owner={identity ?? ''}\n prefix=\"user-collections\"\n />\n </TabPanel>\n )}\n {!disabled.questions && (\n <TabPanel value=\"answers\" className={classes.tabPanel}>\n <AnswersContainer\n author={identity ?? ''}\n title={t('userPage.answers', {})}\n prefix=\"user-answers\"\n />\n </TabPanel>\n )}\n </TabContext>\n </>\n );\n};\n"],"names":["HelpOutlineIcon"],"mappings":";;;;;;;;;;;;;;;AA6BA,MAAM,SAAA,GAAY,WAAW,CAAA,KAAA,MAAU;AAAA,EACrC,OAAA,EAAS;AAAA,IACP,WAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA,GAC9B;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,CAAC;AAAA,GAC7B;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA;AAAA,IACvB,MAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA;AAAA,IACxB,WAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC5B,SAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA,GAC5B;AAAA,EACA,aAAA,EAAe;AAAA,IACb,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,CAAC;AAAA,GAC7B;AAAA,EACA,SAAS,EAAC;AAAA,EACV,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,YAAA;AAAA,IAChB,QAAA,EAAU;AAAA;AAEd,CAAA,CAAE,CAAA;AAEK,MAAM,WAAW,MAAM;AAC5B,EAAA,MAAM,QAAA,GAAW,SAAA,EAAU,CAAE,GAAG,CAAA,IAAK,SAAA;AACrC,EAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,cAAA,EAAe,GAAI,YAAY,QAAQ,CAAA;AACrE,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAI,SAAS,YAAY,CAAA;AAC3C,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,CAAC,aAAA,EAAe,eAAe,CAAA,GAAI,eAAA,EAAgB;AACzD,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,aAAA,EAAc;AACnC,EAAA,MAAM;AAAA,IACJ,KAAA,EAAO,WAAA;AAAA,IACP,OAAA,EAAS,WAAA;AAAA,IACT,KAAA,EAAO;AAAA,MACL,cAAA,CAAe,CAAA,GAAA,KAAO,IAAI,oBAAA,EAAqB,EAAG,EAAE,CAAA;AACxD,EAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAW,OAAA,EAAS,kBAAiB,GAAI,UAAA;AAAA,IACtD,CAAA,GAAA,KAAO,GAAA,CAAI,YAAA,CAAa,QAAQ,CAAA;AAAA,IAChC,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,MAAA,EAAyB,QAAA,KAAqB;AAClE,IAAA,eAAA,CAAgB,EAAE,CAAA;AAClB,IAAA,MAAA,CAAO,QAAQ,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,QAAQ,MAAM;AAClC,IAAA,OAAO;AAAA,MACL,YAAA;AAAA,MACA,CAAC,QAAA,CAAS,SAAA,GAAY,WAAA,GAAc,IAAA;AAAA,MACpC,CAAC,QAAA,CAAS,QAAA,GAAW,UAAA,GAAa,IAAA;AAAA,MAClC,CAAC,QAAA,CAAS,KAAA,GAAQ,OAAA,GAAU,IAAA;AAAA,MAC5B,CAAC,QAAA,CAAS,WAAA,GAAc,aAAA,GAAgB,IAAA;AAAA,MACxC,CAAC,QAAA,CAAS,SAAA,GAAY,SAAA,GAAY;AAAA,MAClC,MAAA,CAAO,CAAC,CAAA,KAAmB,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,EACzC,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,aAAA,CAAc,QAAA,CAAS,GAAG,CAAA,EAAG;AAChC,MAAA,MAAA,CAAO,aAAA,CAAc,CAAC,CAAC,CAAA;AAAA,IACzB;AAAA,EACF,CAAA,EAAG,CAAC,aAAA,EAAe,GAAG,CAAC,CAAA;AAEvB,EAAA,MAAM,WAAW,CAAC;AAAA,IAChB,IAAA;AAAA,IACA;AAAA,GACF,qBAIE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,QAAQ,QAAA,EACrB,QAAA,EAAA;AAAA,IAAA,IAAA;AAAA,oBACD,GAAA,CAAC,UAAM,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EACf,CAAA;AAGF,EAAA,MAAM,KAAA,mBACJ,IAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,WAAW,OAAA,CAAQ,aAAA;AAAA,MACnB,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAY,CAAA,CAAE,wBAAA,EAA0B,EAAE,CAAA;AAAA,MAE1C,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,OAAA;AAAA,YAC1B,GAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAQ,SAAA;AAAA,YACR,WAAW,OAAA,CAAQ,MAAA;AAAA,YACnB,YAAA,EAAY,CAAA,CAAE,yBAAA,EAA2B,EAAE,MAAM,CAAA;AAAA,YAEhD,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,6BACC,GAAA,EAAA,EAAI,OAAA,EAAQ,QAAO,aAAA,EAAc,QAAA,EAAS,gBAAe,QAAA,EACxD,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,GAAA,EAAA,EAAI,OAAA,EAAQ,MAAA,EAAO,UAAA,EAAW,QAAA,EAC7B,QAAA,kBAAA,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,IAAA;AAAA,cACR,SAAA,EAAU,IAAA;AAAA,cACV,EAAA,EAAG,WAAA;AAAA,cACH,KAAA,EAAO,EAAE,UAAA,EAAY,GAAA,EAAI;AAAA,cAExB,QAAA,EAAA;AAAA;AAAA,WACH,EACF,CAAA;AAAA,UAAA,CACE,cAAA,IAAkB,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,0BACvC,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,IAAA,EAAK,OAAM,eAAA,EAC5B,QAAA,EAAA,cAAA,IAAkB,IAAA,EAAM,IAAA,EAAM,SAAS,KAAA,EAC1C,CAAA;AAAA,UAED,SAAA,EAAW,SAAS,QAAA,oBACnB,IAAA,CAAC,cAAW,OAAA,EAAQ,OAAA,EAAQ,OAAM,eAAA,EAC/B,QAAA,EAAA;AAAA,YAAA,CAAA,CAAE,gBAAgB,CAAA;AAAA,YAAE,GAAA;AAAA,YAAE,GAAA;AAAA,4BACvB,GAAA,CAAC,uBAAA,EAAA,EAAwB,KAAA,EAAO,SAAA,CAAU,QAAQ,QAAA,EAAU;AAAA,WAAA,EAC9D;AAAA,SAAA,EAEJ;AAAA;AAAA;AAAA,GACF;AAGF,EAAA,MAAM,QAAA,GAAW;AAAA,oBACf,GAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QAEC,KAAA,EAAM,YAAA;AAAA,QACN,KAAA,kBACE,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,kBAAM,GAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAW,QAAQ,OAAA,EAAS,CAAA;AAAA,YAClD,KAAA,EAAO,CAAA,CAAE,qBAAA,EAAuB,EAAE;AAAA;AAAA;AACpC,OAAA;AAAA,MANE;AAAA,KAQN;AAAA,IACA,CAAC,SAAS,SAAA,mBACR,GAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QAEC,KAAA,EAAM,WAAA;AAAA,QACN,KAAA,kBACE,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,kBAAM,GAAA,CAACA,WAAA,EAAA,EAAgB,SAAA,EAAW,QAAQ,OAAA,EAAS,CAAA;AAAA,YACnD,KAAA,EAAO,CAAA,CAAE,oBAAA,EAAsB,EAAE;AAAA;AAAA;AACnC,OAAA;AAAA,MANE;AAAA,KAQN,GACE,IAAA;AAAA,IACJ,CAAC,SAAS,QAAA,mBACR,GAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QAEC,KAAA,EAAM,UAAA;AAAA,QACN,KAAA,kBACE,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,kBAAM,GAAA,CAAC,uBAAA,EAAA,EAAwB,SAAA,EAAW,QAAQ,OAAA,EAAS,CAAA;AAAA,YAC3D,KAAA,EAAO,CAAA,CAAE,mBAAA,EAAqB,EAAE;AAAA;AAAA;AAClC,OAAA;AAAA,MANE;AAAA,KAQN,GACE,IAAA;AAAA,IACJ,CAAC,SAAS,KAAA,mBACR,GAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QAEC,KAAA,EAAM,OAAA;AAAA,QACN,KAAA,kBACE,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,kBAAM,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAW,QAAQ,OAAA,EAAS,CAAA;AAAA,YAC5C,KAAA,EAAO,CAAA,CAAE,gBAAA,EAAkB,EAAE;AAAA;AAAA;AAC/B,OAAA;AAAA,MANE;AAAA,KAQN,GACE,IAAA;AAAA,IACJ,CAAC,SAAS,WAAA,mBACR,GAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QAEC,KAAA,EAAM,aAAA;AAAA,QACN,KAAA,kBACE,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,kBAAM,GAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAW,QAAQ,OAAA,EAAS,CAAA;AAAA,YACnD,KAAA,EAAO,CAAA,CAAE,sBAAA,EAAwB,EAAE;AAAA;AAAA;AACrC,OAAA;AAAA,MANE;AAAA,KAQN,GACE,IAAA;AAAA,IACJ,CAAC,SAAS,SAAA,mBACR,GAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QAEC,KAAA,EAAM,SAAA;AAAA,QACN,KAAA,kBACE,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,kBAAM,GAAA,CAAC,kBAAA,EAAA,EAAmB,SAAA,EAAW,QAAQ,OAAA,EAAS,CAAA;AAAA,YACtD,KAAA,EAAO,CAAA,CAAE,kBAAA,EAAoB,EAAE;AAAA;AAAA;AACjC,OAAA;AAAA,MANE;AAAA,KAQN,GACE;AAAA,GACN,CAAE,MAAA,CAAO,CAAC,IAAA,KAAqC,SAAS,IAAI,CAAA;AAE5D,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,aAAA,EAAA,EAAc,gBAAgB,KAAA,EAC5B,QAAA,EAAA;AAAA,MAAA,CAAC,WAAA,IACA,CAAC,SAAA,IACD,WAAA,EAAa,kBAAkB,QAAA,oBAC7B,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,QAAA;AAAA,UACT,YAAA,EAAY,CAAA,CAAE,qBAAA,EAAuB,EAAE,MAAM;AAAA;AAAA,OAC/C;AAAA,0BAEH,iBAAA,EAAA,EAAkB,CAAA;AAAA,0BAClB,kBAAA,EAAA,EAAmB,CAAA;AAAA,0BACnB,gBAAA,EAAA,EAAiB;AAAA,KAAA,EACpB,CAAA;AAAA,oBACA,IAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAO,GAAA,EACjB,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,OAAA,EACtB,QAAA,kBAAA,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,QAAA,EAAU,YAAA;AAAA,UACV,YAAA,EAAY,CAAA,CAAE,qBAAA,EAAuB,EAAE,CAAA;AAAA,UACvC,iBAAA,EAAgB,WAAA;AAAA,UAChB,OAAA,EAAQ,YAAA;AAAA,UACR,aAAA,EAAc,MAAA;AAAA,UAEb,QAAA,EAAA;AAAA;AAAA,OACH,EACF,CAAA;AAAA,0BACC,QAAA,EAAA,EAAS,KAAA,EAAM,YAAA,EAAa,SAAA,EAAW,QAAQ,QAAA,EAC9C,QAAA,kBAAA,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,SAAS,QAAA,IAAY,EAAA;AAAA,UACrB,KAAA,EAAO,SAAA;AAAA,UACP,OAAA,EAAS;AAAA;AAAA,OACX,EACF,CAAA;AAAA,MACC,CAAC,SAAS,SAAA,oBACT,GAAA,CAAC,YAAS,KAAA,EAAM,WAAA,EAAY,SAAA,EAAW,OAAA,CAAQ,QAAA,EAC7C,QAAA,kBAAA,GAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,QAAQ,QAAA,IAAY,EAAA;AAAA,UACpB,kBAAA,EAAoB,KAAA;AAAA,UACpB,IAAA,EAAK,UAAA;AAAA,UACL,MAAA,EAAO;AAAA;AAAA,OACT,EACF,CAAA;AAAA,MAED,CAAC,SAAS,QAAA,oBACT,GAAA,CAAC,YAAS,KAAA,EAAM,UAAA,EAAW,SAAA,EAAW,OAAA,CAAQ,QAAA,EAC5C,QAAA,kBAAA,GAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,QAAQ,QAAA,IAAY,EAAA;AAAA,UACpB,IAAA,EAAK,SAAA;AAAA,UACL,kBAAA,EAAoB,KAAA;AAAA,UACpB,MAAA,EAAO;AAAA;AAAA,OACT,EACF,CAAA;AAAA,MAED,CAAC,SAAS,KAAA,oBACT,GAAA,CAAC,YAAS,KAAA,EAAM,OAAA,EAAQ,SAAA,EAAW,OAAA,CAAQ,QAAA,EACzC,QAAA,kBAAA,GAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,QAAQ,QAAA,IAAY,EAAA;AAAA,UACpB,IAAA,EAAK,MAAA;AAAA,UACL,kBAAA,EAAoB,KAAA;AAAA,UACpB,MAAA,EAAO;AAAA;AAAA,OACT,EACF,CAAA;AAAA,MAED,CAAC,SAAS,WAAA,oBACT,GAAA,CAAC,YAAS,KAAA,EAAM,aAAA,EAAc,SAAA,EAAW,OAAA,CAAQ,QAAA,EAC/C,QAAA,kBAAA,GAAA;AAAA,QAAC,oBAAA;AAAA,QAAA;AAAA,UACC,OAAO,QAAA,IAAY,EAAA;AAAA,UACnB,MAAA,EAAO;AAAA;AAAA,OACT,EACF,CAAA;AAAA,MAED,CAAC,SAAS,SAAA,oBACT,GAAA,CAAC,YAAS,KAAA,EAAM,SAAA,EAAU,SAAA,EAAW,OAAA,CAAQ,QAAA,EAC3C,QAAA,kBAAA,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,QAAQ,QAAA,IAAY,EAAA;AAAA,UACpB,KAAA,EAAO,CAAA,CAAE,kBAAA,EAAoB,EAAE,CAAA;AAAA,UAC/B,MAAA,EAAO;AAAA;AAAA,OACT,EACF;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 { useParams, useSearchParams } from 'react-router-dom';
|
|
3
3
|
import { filterTags } from '@drodil/backstage-plugin-qeta-common';
|
|
4
|
-
import { qetaTranslationRef, ContentHeader, PostForm } from '@drodil/backstage-plugin-qeta-react';
|
|
4
|
+
import { qetaTranslationRef, useQetaConfig, ContentHeader, PostForm } from '@drodil/backstage-plugin-qeta-react';
|
|
5
5
|
import { useEntityPresentation } from '@backstage/plugin-catalog-react';
|
|
6
6
|
import { InfoCard } from '@backstage/core-components';
|
|
7
7
|
import { Grid } from '@material-ui/core';
|
|
@@ -14,6 +14,10 @@ const WritePage = () => {
|
|
|
14
14
|
const entityPage = searchParams.get("entityPage") === "true";
|
|
15
15
|
const tags = filterTags(searchParams.get("tags"));
|
|
16
16
|
const { t } = useTranslationRef(qetaTranslationRef);
|
|
17
|
+
const { disabled } = useQetaConfig();
|
|
18
|
+
if (disabled.articles) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
17
21
|
let title;
|
|
18
22
|
if (id) {
|
|
19
23
|
title = t("writePage.title.existingArticle");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WritePage.esm.js","sources":["../../../src/components/WritePage/WritePage.tsx"],"sourcesContent":["import { useParams, useSearchParams } from 'react-router-dom';\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport {\n ContentHeader,\n PostForm,\n qetaTranslationRef,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { InfoCard } from '@backstage/core-components';\nimport { Grid } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const WritePage = () => {\n const { id } = useParams();\n const [searchParams] = useSearchParams();\n const entity = searchParams.get('entity') ?? undefined;\n const entityPage = searchParams.get('entityPage') === 'true';\n const tags = filterTags(searchParams.get('tags'));\n const { t } = useTranslationRef(qetaTranslationRef);\n let title;\n if (id) {\n title = t('writePage.title.existingArticle');\n } else if (entity) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const representation = useEntityPresentation(entity);\n title = t('writePage.title.entityArticle', {\n entity: representation.primaryTitle,\n });\n } else {\n title = t('writePage.title.newArticle');\n }\n\n return (\n <>\n <ContentHeader title={title} />\n <Grid container spacing={3} direction=\"column\">\n <Grid item>\n <InfoCard>\n <PostForm\n id={id}\n entity={entity}\n entityPage={entityPage}\n tags={tags}\n type=\"article\"\n />\n </InfoCard>\n </Grid>\n </Grid>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"WritePage.esm.js","sources":["../../../src/components/WritePage/WritePage.tsx"],"sourcesContent":["import { useParams, useSearchParams } from 'react-router-dom';\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport {\n ContentHeader,\n PostForm,\n qetaTranslationRef,\n useQetaConfig,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { InfoCard } from '@backstage/core-components';\nimport { Grid } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const WritePage = () => {\n const { id } = useParams();\n const [searchParams] = useSearchParams();\n const entity = searchParams.get('entity') ?? undefined;\n const entityPage = searchParams.get('entityPage') === 'true';\n const tags = filterTags(searchParams.get('tags'));\n const { t } = useTranslationRef(qetaTranslationRef);\n const { disabled } = useQetaConfig();\n\n if (disabled.articles) {\n return null;\n }\n\n let title;\n if (id) {\n title = t('writePage.title.existingArticle');\n } else if (entity) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const representation = useEntityPresentation(entity);\n title = t('writePage.title.entityArticle', {\n entity: representation.primaryTitle,\n });\n } else {\n title = t('writePage.title.newArticle');\n }\n\n return (\n <>\n <ContentHeader title={title} />\n <Grid container spacing={3} direction=\"column\">\n <Grid item>\n <InfoCard>\n <PostForm\n id={id}\n entity={entity}\n entityPage={entityPage}\n tags={tags}\n type=\"article\"\n />\n </InfoCard>\n </Grid>\n </Grid>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAaO,MAAM,YAAY,MAAM;AAC7B,EAAA,MAAM,EAAE,EAAA,EAAG,GAAI,SAAA,EAAU;AACzB,EAAA,MAAM,CAAC,YAAY,CAAA,GAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,GAAA,CAAI,QAAQ,CAAA,IAAK,MAAA;AAC7C,EAAA,MAAM,UAAA,GAAa,YAAA,CAAa,GAAA,CAAI,YAAY,CAAA,KAAM,MAAA;AACtD,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,YAAA,CAAa,GAAA,CAAI,MAAM,CAAC,CAAA;AAChD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,aAAA,EAAc;AAEnC,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,EAAA,EAAI;AACN,IAAA,KAAA,GAAQ,EAAE,iCAAiC,CAAA;AAAA,EAC7C,WAAW,MAAA,EAAQ;AAEjB,IAAA,MAAM,cAAA,GAAiB,sBAAsB,MAAM,CAAA;AACnD,IAAA,KAAA,GAAQ,EAAE,+BAAA,EAAiC;AAAA,MACzC,QAAQ,cAAA,CAAe;AAAA,KACxB,CAAA;AAAA,EACH,CAAA,MAAO;AACL,IAAA,KAAA,GAAQ,EAAE,4BAA4B,CAAA;AAAA,EACxC;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,iBAAc,KAAA,EAAc,CAAA;AAAA,oBAC7B,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAS,IAAA,EAAC,OAAA,EAAS,CAAA,EAAG,SAAA,EAAU,QAAA,EACpC,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EACR,8BAAC,QAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,MAAA;AAAA,QACA,UAAA;AAAA,QACA,IAAA;AAAA,QACA,IAAA,EAAK;AAAA;AAAA,KACP,EACF,GACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
package/dist/package.json.esm.js
CHANGED
|
@@ -6,7 +6,7 @@ var keywords = [
|
|
|
6
6
|
"frontend",
|
|
7
7
|
"backstage.io"
|
|
8
8
|
];
|
|
9
|
-
var version = "3.
|
|
9
|
+
var version = "3.60.0";
|
|
10
10
|
var main = "src/index.ts";
|
|
11
11
|
var types = "src/index.ts";
|
|
12
12
|
var prepublishOnly = "yarn tsc && yarn build";
|
|
@@ -83,7 +83,7 @@ var dependencies = {
|
|
|
83
83
|
unified: "^11.0.5"
|
|
84
84
|
};
|
|
85
85
|
var peerDependencies = {
|
|
86
|
-
"@backstage/catalog-client": "^1.
|
|
86
|
+
"@backstage/catalog-client": "^1.16.1",
|
|
87
87
|
react: " ^18.0.0 || ^19.0.0",
|
|
88
88
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
89
89
|
"react-router-dom": "6.0.0-beta.0 || ^6.3.0"
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"frontend",
|
|
8
8
|
"backstage.io"
|
|
9
9
|
],
|
|
10
|
-
"version": "3.
|
|
10
|
+
"version": "3.60.0",
|
|
11
11
|
"main": "./dist/index.esm.js",
|
|
12
12
|
"types": "./dist/index.d.ts",
|
|
13
13
|
"prepublishOnly": "yarn tsc && yarn build",
|
|
@@ -74,18 +74,18 @@
|
|
|
74
74
|
},
|
|
75
75
|
"dependencies": {
|
|
76
76
|
"@backstage/catalog-model": "^1.9.0",
|
|
77
|
-
"@backstage/core-compat-api": "^0.5.
|
|
78
|
-
"@backstage/core-components": "^0.18.
|
|
79
|
-
"@backstage/core-plugin-api": "^1.12.
|
|
80
|
-
"@backstage/frontend-plugin-api": "^0.17.
|
|
81
|
-
"@backstage/plugin-catalog-react": "^3.
|
|
82
|
-
"@backstage/plugin-home-react": "^0.1.
|
|
77
|
+
"@backstage/core-compat-api": "^0.5.13",
|
|
78
|
+
"@backstage/core-components": "^0.18.12",
|
|
79
|
+
"@backstage/core-plugin-api": "^1.12.8",
|
|
80
|
+
"@backstage/frontend-plugin-api": "^0.17.3",
|
|
81
|
+
"@backstage/plugin-catalog-react": "^3.2.0",
|
|
82
|
+
"@backstage/plugin-home-react": "^0.1.40",
|
|
83
83
|
"@backstage/plugin-search-common": "^1.2.24",
|
|
84
|
-
"@backstage/plugin-search-react": "^1.11.
|
|
85
|
-
"@backstage/plugin-signals-react": "^0.0.
|
|
86
|
-
"@backstage/plugin-techdocs-react": "^1.3.
|
|
87
|
-
"@drodil/backstage-plugin-qeta-common": "^3.
|
|
88
|
-
"@drodil/backstage-plugin-qeta-react": "^3.
|
|
84
|
+
"@backstage/plugin-search-react": "^1.11.6",
|
|
85
|
+
"@backstage/plugin-signals-react": "^0.0.24",
|
|
86
|
+
"@backstage/plugin-techdocs-react": "^1.3.13",
|
|
87
|
+
"@drodil/backstage-plugin-qeta-common": "^3.60.0",
|
|
88
|
+
"@drodil/backstage-plugin-qeta-react": "^3.60.0",
|
|
89
89
|
"@material-ui/core": "^4.12.2",
|
|
90
90
|
"@material-ui/icons": "^4.11.3",
|
|
91
91
|
"@material-ui/lab": "4.0.0-alpha.61",
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
"unified": "^11.0.5"
|
|
97
97
|
},
|
|
98
98
|
"peerDependencies": {
|
|
99
|
-
"@backstage/catalog-client": "^1.
|
|
99
|
+
"@backstage/catalog-client": "^1.16.1",
|
|
100
100
|
"react": " ^18.0.0 || ^19.0.0",
|
|
101
101
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
102
102
|
"react-router-dom": "6.0.0-beta.0 || ^6.3.0"
|
|
@@ -105,17 +105,17 @@
|
|
|
105
105
|
"react-markdown": "8.0.7"
|
|
106
106
|
},
|
|
107
107
|
"devDependencies": {
|
|
108
|
-
"@backstage/cli": "^0.36.
|
|
109
|
-
"@backstage/frontend-defaults": "^0.5.
|
|
110
|
-
"@backstage/plugin-catalog": "^2.0.
|
|
111
|
-
"@backstage/plugin-home": "^0.9.
|
|
112
|
-
"@backstage/plugin-notifications": "^0.5.
|
|
113
|
-
"@backstage/plugin-search": "^1.7.
|
|
114
|
-
"@backstage/plugin-search-react": "^1.11.
|
|
115
|
-
"@backstage/plugin-signals": "^0.0.
|
|
116
|
-
"@backstage/plugin-techdocs": "^1.17.
|
|
117
|
-
"@backstage/plugin-user-settings": "^0.9.
|
|
118
|
-
"@backstage/ui": "^0.
|
|
108
|
+
"@backstage/cli": "^0.36.4",
|
|
109
|
+
"@backstage/frontend-defaults": "^0.5.4",
|
|
110
|
+
"@backstage/plugin-catalog": "^2.0.7",
|
|
111
|
+
"@backstage/plugin-home": "^0.9.8",
|
|
112
|
+
"@backstage/plugin-notifications": "^0.5.19",
|
|
113
|
+
"@backstage/plugin-search": "^1.7.6",
|
|
114
|
+
"@backstage/plugin-search-react": "^1.11.6",
|
|
115
|
+
"@backstage/plugin-signals": "^0.0.33",
|
|
116
|
+
"@backstage/plugin-techdocs": "^1.17.8",
|
|
117
|
+
"@backstage/plugin-user-settings": "^0.9.5",
|
|
118
|
+
"@backstage/ui": "^0.17.0",
|
|
119
119
|
"@testing-library/jest-dom": "^6.1.3",
|
|
120
120
|
"@types/lodash": "^4.14.199",
|
|
121
121
|
"@types/luxon": "^3",
|
|
@@ -124,8 +124,8 @@
|
|
|
124
124
|
},
|
|
125
125
|
"files": [
|
|
126
126
|
"dist",
|
|
127
|
-
"
|
|
127
|
+
"config.schema.json"
|
|
128
128
|
],
|
|
129
|
-
"configSchema": "
|
|
129
|
+
"configSchema": "config.schema.json",
|
|
130
130
|
"module": "./dist/index.esm.js"
|
|
131
131
|
}
|
package/configSchema.d.ts
DELETED
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
export interface Config {
|
|
2
|
-
qeta?: {
|
|
3
|
-
/**
|
|
4
|
-
* Allow anonymous questions
|
|
5
|
-
*
|
|
6
|
-
* @visibility frontend
|
|
7
|
-
*/
|
|
8
|
-
allowAnonymous?: boolean;
|
|
9
|
-
/**
|
|
10
|
-
* @visibility frontend
|
|
11
|
-
*/
|
|
12
|
-
permissions?: boolean;
|
|
13
|
-
/**
|
|
14
|
-
* Determine what kind of entities can be attached to questions.
|
|
15
|
-
* For example [System, Component, API, Location, Template]. Default is [Component, System].
|
|
16
|
-
*
|
|
17
|
-
* @visibility frontend
|
|
18
|
-
* @deprecated use `entities` config instead
|
|
19
|
-
*/
|
|
20
|
-
entityKinds?: string[];
|
|
21
|
-
/**
|
|
22
|
-
* Entities configuration for posts.
|
|
23
|
-
*
|
|
24
|
-
* @visibility frontend
|
|
25
|
-
*/
|
|
26
|
-
entities?: {
|
|
27
|
-
/**
|
|
28
|
-
* Determine what kind of entities can be attached to posts.
|
|
29
|
-
* For example [System, Component, API, Location, Template]. Default is [Component, System].
|
|
30
|
-
*
|
|
31
|
-
* @visibility frontend
|
|
32
|
-
*/
|
|
33
|
-
kinds?: string[];
|
|
34
|
-
/**
|
|
35
|
-
* Maximum entities to attach to posts.
|
|
36
|
-
*
|
|
37
|
-
* @visibility frontend
|
|
38
|
-
*/
|
|
39
|
-
max?: number;
|
|
40
|
-
/**
|
|
41
|
-
* Minimum entities required to attach to post.
|
|
42
|
-
*
|
|
43
|
-
* @visibility frontend
|
|
44
|
-
*/
|
|
45
|
-
min?: number;
|
|
46
|
-
};
|
|
47
|
-
/**
|
|
48
|
-
* Posts tags specific configuration
|
|
49
|
-
*
|
|
50
|
-
* @visibility frontend
|
|
51
|
-
*/
|
|
52
|
-
tags?: {
|
|
53
|
-
/**
|
|
54
|
-
* Allow creation of new tags. Default: true
|
|
55
|
-
*
|
|
56
|
-
* @visibility frontend
|
|
57
|
-
*/
|
|
58
|
-
allowCreation?: boolean;
|
|
59
|
-
/**
|
|
60
|
-
* Allowed tags to be used with posts.
|
|
61
|
-
* Only valid if allowCreation is false.
|
|
62
|
-
*
|
|
63
|
-
* @visibility frontend
|
|
64
|
-
*/
|
|
65
|
-
allowedTags?: string[];
|
|
66
|
-
/**
|
|
67
|
-
* Maximum number of tags per post. Default: 5
|
|
68
|
-
*
|
|
69
|
-
* @visibility frontend
|
|
70
|
-
*/
|
|
71
|
-
max?: number;
|
|
72
|
-
/**
|
|
73
|
-
* Minimum number of tags required per post.
|
|
74
|
-
*
|
|
75
|
-
* @visibility frontend
|
|
76
|
-
*/
|
|
77
|
-
min?: number;
|
|
78
|
-
};
|
|
79
|
-
/**
|
|
80
|
-
* Posts mentions specific configuration
|
|
81
|
-
*
|
|
82
|
-
* @visibility frontend
|
|
83
|
-
*/
|
|
84
|
-
mentions?: {
|
|
85
|
-
/**
|
|
86
|
-
* List of types of mentions that can be used in posts.
|
|
87
|
-
*
|
|
88
|
-
* Currently supported types are:
|
|
89
|
-
* - `user`: Mention a user
|
|
90
|
-
* - `group`: Mention a group
|
|
91
|
-
*
|
|
92
|
-
* @visibility frontend
|
|
93
|
-
*/
|
|
94
|
-
supportedKinds?: string[];
|
|
95
|
-
};
|
|
96
|
-
/**
|
|
97
|
-
* List of users/groups that can moderate questions and answers in case permission framework is not in use.
|
|
98
|
-
* In case permission framework is in use, this list is used to determine if user
|
|
99
|
-
* can access the moderator panel
|
|
100
|
-
*
|
|
101
|
-
* @visibility frontend
|
|
102
|
-
*/
|
|
103
|
-
moderators?: string[];
|
|
104
|
-
/**
|
|
105
|
-
* If desire to disable image upload.
|
|
106
|
-
* @visibility frontend
|
|
107
|
-
*/
|
|
108
|
-
storage?: {
|
|
109
|
-
/**
|
|
110
|
-
* If desire to disable image upload.
|
|
111
|
-
* @visibility frontend
|
|
112
|
-
*/
|
|
113
|
-
disabled?: boolean;
|
|
114
|
-
/**
|
|
115
|
-
* Allowed mime types for images.
|
|
116
|
-
* @visibility frontend
|
|
117
|
-
*/
|
|
118
|
-
allowedMimeTypes?: string[];
|
|
119
|
-
};
|
|
120
|
-
/**
|
|
121
|
-
* Name of the AI bot that responds to users questions. Defaults to 'AI'
|
|
122
|
-
* @visibility frontend
|
|
123
|
-
*/
|
|
124
|
-
aiBotName?: string;
|
|
125
|
-
/**
|
|
126
|
-
* Post history / revision tracking configuration
|
|
127
|
-
*
|
|
128
|
-
* @visibility frontend
|
|
129
|
-
*/
|
|
130
|
-
history?: {
|
|
131
|
-
/**
|
|
132
|
-
* Enable or disable revision tracking. Default: false
|
|
133
|
-
*
|
|
134
|
-
* @visibility frontend
|
|
135
|
-
*/
|
|
136
|
-
enabled?: boolean;
|
|
137
|
-
/**
|
|
138
|
-
* Content types that should have revision tracking enabled.
|
|
139
|
-
* Possible values: 'article', 'question', 'link'
|
|
140
|
-
* Default: ['article']
|
|
141
|
-
*
|
|
142
|
-
* @visibility frontend
|
|
143
|
-
*/
|
|
144
|
-
enabledContent?: string[];
|
|
145
|
-
};
|
|
146
|
-
};
|
|
147
|
-
}
|