@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.
Files changed (42) hide show
  1. package/config.schema.json +210 -0
  2. package/dist/components/ArticlePage/ArticlePage.esm.js +5 -1
  3. package/dist/components/ArticlePage/ArticlePage.esm.js.map +1 -1
  4. package/dist/components/ArticlesPage/ArticlesPage.esm.js +5 -1
  5. package/dist/components/ArticlesPage/ArticlesPage.esm.js.map +1 -1
  6. package/dist/components/AskPage/AskPage.esm.js +5 -1
  7. package/dist/components/AskPage/AskPage.esm.js.map +1 -1
  8. package/dist/components/CollectionCreatePage/CollectionCreatePage.esm.js +5 -1
  9. package/dist/components/CollectionCreatePage/CollectionCreatePage.esm.js.map +1 -1
  10. package/dist/components/CollectionPage/CollectionPage.esm.js +5 -1
  11. package/dist/components/CollectionPage/CollectionPage.esm.js.map +1 -1
  12. package/dist/components/CollectionsPage/CollectionsPage.esm.js +5 -1
  13. package/dist/components/CollectionsPage/CollectionsPage.esm.js.map +1 -1
  14. package/dist/components/CreateLinkPage/CreateLinkPage.esm.js +5 -1
  15. package/dist/components/CreateLinkPage/CreateLinkPage.esm.js.map +1 -1
  16. package/dist/components/EntityPage/EntityPage.esm.js +9 -1
  17. package/dist/components/EntityPage/EntityPage.esm.js.map +1 -1
  18. package/dist/components/HomePage/HomePage.esm.js +7 -4
  19. package/dist/components/HomePage/HomePage.esm.js.map +1 -1
  20. package/dist/components/LinkPage/LinkPage.esm.js +5 -1
  21. package/dist/components/LinkPage/LinkPage.esm.js.map +1 -1
  22. package/dist/components/LinksPage/LinksPage.esm.js +5 -1
  23. package/dist/components/LinksPage/LinksPage.esm.js.map +1 -1
  24. package/dist/components/QetaPage/QetaPage.esm.js +131 -100
  25. package/dist/components/QetaPage/QetaPage.esm.js.map +1 -1
  26. package/dist/components/QuestionPage/QuestionPage.esm.js +5 -1
  27. package/dist/components/QuestionPage/QuestionPage.esm.js.map +1 -1
  28. package/dist/components/QuestionsPage/QuestionsPage.esm.js +5 -1
  29. package/dist/components/QuestionsPage/QuestionsPage.esm.js.map +1 -1
  30. package/dist/components/RightContent/RightContent.esm.js +10 -9
  31. package/dist/components/RightContent/RightContent.esm.js.map +1 -1
  32. package/dist/components/Statistics/StatisticsPage.esm.js +10 -4
  33. package/dist/components/Statistics/StatisticsPage.esm.js.map +1 -1
  34. package/dist/components/TagPage/TagPage.esm.js +5 -1
  35. package/dist/components/TagPage/TagPage.esm.js.map +1 -1
  36. package/dist/components/UserPage/UserPage.esm.js +111 -88
  37. package/dist/components/UserPage/UserPage.esm.js.map +1 -1
  38. package/dist/components/WritePage/WritePage.esm.js +5 -1
  39. package/dist/components/WritePage/WritePage.esm.js.map +1 -1
  40. package/dist/package.json.esm.js +2 -2
  41. package/package.json +26 -26
  42. 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__ */ jsxs(
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":"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"}
@@ -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":";;;;;;;;;AAYO,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,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;;;;"}
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;;;;"}
@@ -6,7 +6,7 @@ var keywords = [
6
6
  "frontend",
7
7
  "backstage.io"
8
8
  ];
9
- var version = "3.59.9";
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.15.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.59.9",
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.11",
78
- "@backstage/core-components": "^0.18.10",
79
- "@backstage/core-plugin-api": "^1.12.6",
80
- "@backstage/frontend-plugin-api": "^0.17.0",
81
- "@backstage/plugin-catalog-react": "^3.0.0",
82
- "@backstage/plugin-home-react": "^0.1.38",
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.4",
85
- "@backstage/plugin-signals-react": "^0.0.22",
86
- "@backstage/plugin-techdocs-react": "^1.3.11",
87
- "@drodil/backstage-plugin-qeta-common": "^3.59.9",
88
- "@drodil/backstage-plugin-qeta-react": "^3.59.9",
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.15.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.2",
109
- "@backstage/frontend-defaults": "^0.5.2",
110
- "@backstage/plugin-catalog": "^2.0.5",
111
- "@backstage/plugin-home": "^0.9.6",
112
- "@backstage/plugin-notifications": "^0.5.17",
113
- "@backstage/plugin-search": "^1.7.4",
114
- "@backstage/plugin-search-react": "^1.11.4",
115
- "@backstage/plugin-signals": "^0.0.31",
116
- "@backstage/plugin-techdocs": "^1.17.6",
117
- "@backstage/plugin-user-settings": "^0.9.3",
118
- "@backstage/ui": "^0.15.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
- "configSchema.d.ts"
127
+ "config.schema.json"
128
128
  ],
129
- "configSchema": "configSchema.d.ts",
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
- }