@drodil/backstage-plugin-qeta 3.60.0 → 4.0.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/README.md +6 -11
- package/dist/components/ArticlePage/ArticlePage.esm.js +57 -15
- package/dist/components/ArticlePage/ArticlePage.esm.js.map +1 -1
- package/dist/components/ArticlesPage/ArticlesPage.esm.js +5 -22
- package/dist/components/ArticlesPage/ArticlesPage.esm.js.map +1 -1
- package/dist/components/AskPage/AskPage.esm.js +6 -7
- package/dist/components/AskPage/AskPage.esm.js.map +1 -1
- package/dist/components/CollectionCreatePage/CollectionCreatePage.esm.js +3 -4
- package/dist/components/CollectionCreatePage/CollectionCreatePage.esm.js.map +1 -1
- package/dist/components/CollectionPage/CollectionPage.esm.js +43 -87
- package/dist/components/CollectionPage/CollectionPage.esm.js.map +1 -1
- package/dist/components/CollectionsPage/CollectionsPage.esm.js +4 -5
- package/dist/components/CollectionsPage/CollectionsPage.esm.js.map +1 -1
- package/dist/components/ContentHealthCard/ContentHealthCard.esm.js +61 -89
- package/dist/components/ContentHealthCard/ContentHealthCard.esm.js.map +1 -1
- package/dist/components/ContentHealthCard/ContentHealthCard.module.css.esm.js +8 -0
- package/dist/components/ContentHealthCard/ContentHealthCard.module.css.esm.js.map +1 -0
- package/dist/components/ContentHealthCard/ReviewList.esm.js +27 -60
- package/dist/components/ContentHealthCard/ReviewList.esm.js.map +1 -1
- package/dist/components/ContentHealthCard/ReviewList.module.css.esm.js +8 -0
- package/dist/components/ContentHealthCard/ReviewList.module.css.esm.js.map +1 -0
- package/dist/components/CreateLinkPage/CreateLinkPage.esm.js +5 -6
- package/dist/components/CreateLinkPage/CreateLinkPage.esm.js.map +1 -1
- package/dist/components/EntityPage/EntityPage.esm.js +40 -58
- package/dist/components/EntityPage/EntityPage.esm.js.map +1 -1
- package/dist/components/EntityPostsContent/EntityPostsContent.esm.js +2 -3
- package/dist/components/EntityPostsContent/EntityPostsContent.esm.js.map +1 -1
- package/dist/components/FavoritePage/FavoritePage.esm.js +3 -14
- package/dist/components/FavoritePage/FavoritePage.esm.js.map +1 -1
- package/dist/components/HomePage/HomePage.esm.js +14 -60
- package/dist/components/HomePage/HomePage.esm.js.map +1 -1
- package/dist/components/HomePage/HomePage.module.css.esm.js +8 -0
- package/dist/components/HomePage/HomePage.module.css.esm.js.map +1 -0
- package/dist/components/LinkPage/LinkPage.esm.js +56 -61
- package/dist/components/LinkPage/LinkPage.esm.js.map +1 -1
- package/dist/components/LinksPage/LinksPage.esm.js +5 -16
- package/dist/components/LinksPage/LinksPage.esm.js.map +1 -1
- package/dist/components/ModeratorPage/ModeratorPage.esm.js +19 -29
- package/dist/components/ModeratorPage/ModeratorPage.esm.js.map +1 -1
- package/dist/components/ModeratorPage/ModeratorPage.module.css.esm.js +8 -0
- package/dist/components/ModeratorPage/ModeratorPage.module.css.esm.js.map +1 -0
- package/dist/components/QetaPage/QetaPage.esm.js +185 -268
- package/dist/components/QetaPage/QetaPage.esm.js.map +1 -1
- package/dist/components/QetaPage/QetaPage.module.css.esm.js +8 -0
- package/dist/components/QetaPage/QetaPage.module.css.esm.js.map +1 -0
- package/dist/components/QetaSearchResultListItem/QetaSearchResultListItem.esm.js +67 -78
- package/dist/components/QetaSearchResultListItem/QetaSearchResultListItem.esm.js.map +1 -1
- package/dist/components/QetaSearchResultListItem/QetaSearchResultListItem.module.css.esm.js +8 -0
- package/dist/components/QetaSearchResultListItem/QetaSearchResultListItem.module.css.esm.js.map +1 -0
- package/dist/components/QuestionPage/QuestionPage.esm.js +118 -97
- package/dist/components/QuestionPage/QuestionPage.esm.js.map +1 -1
- package/dist/components/QuestionsPage/QuestionsPage.esm.js +4 -5
- package/dist/components/QuestionsPage/QuestionsPage.esm.js.map +1 -1
- package/dist/components/ReviewPage/ReviewPage.esm.js +53 -18
- package/dist/components/ReviewPage/ReviewPage.esm.js.map +1 -1
- package/dist/components/RightContent/ArticlesRightContent.esm.js +2 -2
- package/dist/components/RightContent/ArticlesRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/DefaultRightContent.esm.js +2 -2
- package/dist/components/RightContent/DefaultRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/EntityRightContent.esm.js +2 -2
- package/dist/components/RightContent/EntityRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/LinkedPosts.esm.js +5 -19
- package/dist/components/RightContent/LinkedPosts.esm.js.map +1 -1
- package/dist/components/RightContent/LinkedPosts.module.css.esm.js +8 -0
- package/dist/components/RightContent/LinkedPosts.module.css.esm.js.map +1 -0
- package/dist/components/RightContent/LinksRightContent.esm.js +2 -2
- package/dist/components/RightContent/LinksRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/PostRightContent.esm.js +4 -4
- package/dist/components/RightContent/PostRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/QuestionsRightContent.esm.js +2 -2
- package/dist/components/RightContent/QuestionsRightContent.esm.js.map +1 -1
- package/dist/components/RightContent/RightContent.esm.js +36 -52
- package/dist/components/RightContent/RightContent.esm.js.map +1 -1
- package/dist/components/RightContent/RightContent.module.css.esm.js +8 -0
- package/dist/components/RightContent/RightContent.module.css.esm.js.map +1 -0
- package/dist/components/RightContent/SimilarQuestions.esm.js +3 -16
- package/dist/components/RightContent/SimilarQuestions.esm.js.map +1 -1
- package/dist/components/RightContent/SimilarQuestions.module.css.esm.js +8 -0
- package/dist/components/RightContent/SimilarQuestions.module.css.esm.js.map +1 -0
- package/dist/components/RightContent/TagRightContent.esm.js +2 -2
- package/dist/components/RightContent/TagRightContent.esm.js.map +1 -1
- package/dist/components/SettingsPage/SettingsPage.esm.js +198 -200
- package/dist/components/SettingsPage/SettingsPage.esm.js.map +1 -1
- package/dist/components/SettingsPage/SettingsPage.module.css.esm.js +8 -0
- package/dist/components/SettingsPage/SettingsPage.module.css.esm.js.map +1 -0
- package/dist/components/Statistics/GlobalStatsContent.esm.js +5 -5
- package/dist/components/Statistics/GlobalStatsContent.esm.js.map +1 -1
- package/dist/components/Statistics/StatisticsPage.esm.js +14 -19
- package/dist/components/Statistics/StatisticsPage.esm.js.map +1 -1
- package/dist/components/Statistics/StatisticsPage.module.css.esm.js +8 -0
- package/dist/components/Statistics/StatisticsPage.module.css.esm.js.map +1 -0
- package/dist/components/TagPage/TagPage.esm.js +54 -87
- package/dist/components/TagPage/TagPage.esm.js.map +1 -1
- package/dist/components/TechDocsAskQuestionAddon/TechDocsAskQuestionAddon.esm.js +23 -32
- package/dist/components/TechDocsAskQuestionAddon/TechDocsAskQuestionAddon.esm.js.map +1 -1
- package/dist/components/TechDocsAskQuestionAddon/TechDocsAskQuestionAddon.module.css.esm.js +8 -0
- package/dist/components/TechDocsAskQuestionAddon/TechDocsAskQuestionAddon.module.css.esm.js.map +1 -0
- package/dist/components/UserPage/UserPage.esm.js +137 -236
- package/dist/components/UserPage/UserPage.esm.js.map +1 -1
- package/dist/components/UserPage/UserPage.module.css.esm.js +8 -0
- package/dist/components/UserPage/UserPage.module.css.esm.js.map +1 -0
- package/dist/components/UserPage/UserStatsContent.esm.js +5 -5
- package/dist/components/UserPage/UserStatsContent.esm.js.map +1 -1
- package/dist/components/UsersPage/UsersPage.esm.js +3 -9
- package/dist/components/UsersPage/UsersPage.esm.js.map +1 -1
- package/dist/components/WritePage/WritePage.esm.js +5 -6
- package/dist/components/WritePage/WritePage.esm.js.map +1 -1
- package/dist/index.d.ts +283 -77
- package/dist/index.esm.js +262 -7
- package/dist/index.esm.js.map +1 -1
- package/dist/node_modules_dist/style-inject/dist/style-inject.es.esm.js +29 -0
- package/dist/node_modules_dist/style-inject/dist/style-inject.es.esm.js.map +1 -0
- package/dist/{package.json.esm.js → plugins/qeta/package.json.esm.js} +8 -13
- package/dist/{package.json.esm.js.map → plugins/qeta/package.json.esm.js.map} +1 -1
- package/package.json +9 -18
- package/dist/alpha.d.ts +0 -255
- package/dist/alpha.esm.js +0 -238
- package/dist/alpha.esm.js.map +0 -1
- package/dist/components/EntityCards/EntityPostsContainerCard.esm.js +0 -13
- package/dist/components/EntityCards/EntityPostsContainerCard.esm.js.map +0 -1
- package/dist/components/EntityCards/EntityPostsGridCard.esm.js +0 -20
- package/dist/components/EntityCards/EntityPostsGridCard.esm.js.map +0 -1
- package/dist/components/ReviewPage/index.esm.js +0 -6
- package/dist/components/ReviewPage/index.esm.js.map +0 -1
- package/dist/plugin.esm.js +0 -84
- package/dist/plugin.esm.js.map +0 -1
|
@@ -1,43 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { useTheme, CardContent, Typography, FormControlLabel, Switch, Box, ButtonGroup, Button, makeStyles } from '@material-ui/core';
|
|
3
|
-
import { InfoCard } from '@backstage/core-components';
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
2
|
import { useUserSettings, qetaTranslationRef, useAI } from '@drodil/backstage-plugin-qeta-react';
|
|
5
3
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
6
4
|
import { useApi, configApiRef } from '@backstage/core-plugin-api';
|
|
5
|
+
import { Card, CardHeader, Text, CardBody, Box, Switch, ToggleButtonGroup, ToggleButton, Flex, Button } from '@backstage/ui';
|
|
6
|
+
import styles from './SettingsPage.module.css.esm.js';
|
|
7
7
|
|
|
8
|
-
const useStyles = makeStyles((theme) => ({
|
|
9
|
-
content: {
|
|
10
|
-
maxWidth: "800px",
|
|
11
|
-
margin: "0 auto"
|
|
12
|
-
},
|
|
13
|
-
section: {
|
|
14
|
-
marginBottom: theme.spacing(3)
|
|
15
|
-
},
|
|
16
|
-
sectionTitle: {
|
|
17
|
-
marginBottom: theme.spacing(2),
|
|
18
|
-
fontWeight: 600
|
|
19
|
-
},
|
|
20
|
-
settingItem: {
|
|
21
|
-
marginBottom: theme.spacing(2)
|
|
22
|
-
},
|
|
23
|
-
description: {
|
|
24
|
-
color: theme.palette.text.secondary,
|
|
25
|
-
fontSize: "0.875rem",
|
|
26
|
-
marginTop: theme.spacing(0.5)
|
|
27
|
-
},
|
|
28
|
-
viewTypeItem: {
|
|
29
|
-
marginBottom: theme.spacing(2),
|
|
30
|
-
display: "flex",
|
|
31
|
-
alignItems: "center",
|
|
32
|
-
justifyContent: "space-between"
|
|
33
|
-
},
|
|
34
|
-
viewTypeLabel: {
|
|
35
|
-
minWidth: "200px"
|
|
36
|
-
}
|
|
37
|
-
}));
|
|
38
8
|
const SettingsPage = () => {
|
|
39
|
-
const classes = useStyles();
|
|
40
|
-
const theme = useTheme();
|
|
41
9
|
const {
|
|
42
10
|
settings,
|
|
43
11
|
setSetting,
|
|
@@ -129,186 +97,216 @@ const SettingsPage = () => {
|
|
|
129
97
|
if (!isLoaded) {
|
|
130
98
|
return null;
|
|
131
99
|
}
|
|
132
|
-
return /* @__PURE__ */
|
|
133
|
-
/* @__PURE__ */
|
|
134
|
-
|
|
135
|
-
/* @__PURE__ */ jsxs(
|
|
136
|
-
/* @__PURE__ */ jsx(
|
|
137
|
-
|
|
100
|
+
return /* @__PURE__ */ jsxs(Card, { "data-testid": "settings-page", children: [
|
|
101
|
+
/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(Text, { as: "h1", variant: "title-small", children: t("settingsPage.title", {}) }) }),
|
|
102
|
+
/* @__PURE__ */ jsx(CardBody, { children: /* @__PURE__ */ jsxs(Box, { className: styles.content, children: [
|
|
103
|
+
/* @__PURE__ */ jsxs(Box, { className: styles.section, children: [
|
|
104
|
+
/* @__PURE__ */ jsx(Text, { as: "h2", variant: "title-small", className: styles.sectionTitle, children: t("settingsPage.editorPreferences", {}) }),
|
|
105
|
+
/* @__PURE__ */ jsxs("div", { className: styles.settingItem, "data-testid": "auto-save-setting", children: [
|
|
106
|
+
/* @__PURE__ */ jsx(
|
|
107
|
+
Switch,
|
|
108
|
+
{
|
|
109
|
+
isSelected: settings.autoSaveEnabled,
|
|
110
|
+
onChange: (value) => setSetting("autoSaveEnabled", value),
|
|
111
|
+
label: t("settingsPage.autoSave.label", {}),
|
|
112
|
+
"data-testid": "auto-save-switch"
|
|
113
|
+
}
|
|
114
|
+
),
|
|
115
|
+
/* @__PURE__ */ jsx(
|
|
116
|
+
Text,
|
|
117
|
+
{
|
|
118
|
+
as: "div",
|
|
119
|
+
variant: "body-small",
|
|
120
|
+
color: "secondary",
|
|
121
|
+
className: styles.description,
|
|
122
|
+
children: t("settingsPage.autoSave.description", {})
|
|
123
|
+
}
|
|
124
|
+
)
|
|
125
|
+
] }),
|
|
126
|
+
allowAnonymous && /* @__PURE__ */ jsxs(
|
|
127
|
+
"div",
|
|
138
128
|
{
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
129
|
+
className: styles.settingItem,
|
|
130
|
+
"data-testid": "anonymous-posting-setting",
|
|
131
|
+
children: [
|
|
132
|
+
/* @__PURE__ */ jsx(
|
|
133
|
+
Switch,
|
|
134
|
+
{
|
|
135
|
+
isSelected: settings.anonymousPosting,
|
|
136
|
+
onChange: (value) => setSetting("anonymousPosting", value),
|
|
137
|
+
label: t("settingsPage.anonymousPosting.label", {}),
|
|
138
|
+
"data-testid": "anonymous-posting-switch"
|
|
139
|
+
}
|
|
140
|
+
),
|
|
141
|
+
/* @__PURE__ */ jsx(
|
|
142
|
+
Text,
|
|
143
|
+
{
|
|
144
|
+
as: "div",
|
|
145
|
+
variant: "body-small",
|
|
146
|
+
color: "secondary",
|
|
147
|
+
className: styles.description,
|
|
148
|
+
children: t("settingsPage.anonymousPosting.description", {})
|
|
149
|
+
}
|
|
150
|
+
)
|
|
151
|
+
]
|
|
149
152
|
}
|
|
150
|
-
)
|
|
151
|
-
/* @__PURE__ */ jsx(Typography, { className: classes.description, children: t("settingsPage.autoSave.description", {}) })
|
|
153
|
+
)
|
|
152
154
|
] }),
|
|
153
|
-
|
|
154
|
-
"
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
"data-testid": "anonymous-posting-setting",
|
|
158
|
-
children: [
|
|
159
|
-
/* @__PURE__ */ jsx(
|
|
160
|
-
FormControlLabel,
|
|
161
|
-
{
|
|
162
|
-
control: /* @__PURE__ */ jsx(
|
|
163
|
-
Switch,
|
|
164
|
-
{
|
|
165
|
-
checked: settings.anonymousPosting,
|
|
166
|
-
onChange: (e) => setSetting("anonymousPosting", e.target.checked),
|
|
167
|
-
color: "primary",
|
|
168
|
-
"data-testid": "anonymous-posting-switch"
|
|
169
|
-
}
|
|
170
|
-
),
|
|
171
|
-
label: t("settingsPage.anonymousPosting.label", {})
|
|
172
|
-
}
|
|
173
|
-
),
|
|
174
|
-
/* @__PURE__ */ jsx(Typography, { className: classes.description, children: t("settingsPage.anonymousPosting.description", {}) })
|
|
175
|
-
]
|
|
176
|
-
}
|
|
177
|
-
)
|
|
178
|
-
] }),
|
|
179
|
-
/* @__PURE__ */ jsxs("div", { className: classes.section, children: [
|
|
180
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h6", className: classes.sectionTitle, children: t("settingsPage.displayPreferences", {}) }),
|
|
181
|
-
isAIEnabled && /* @__PURE__ */ jsxs(
|
|
182
|
-
"div",
|
|
183
|
-
{
|
|
184
|
-
className: classes.settingItem,
|
|
185
|
-
"data-testid": "ai-answer-setting",
|
|
186
|
-
children: [
|
|
187
|
-
/* @__PURE__ */ jsx(
|
|
188
|
-
FormControlLabel,
|
|
189
|
-
{
|
|
190
|
-
control: /* @__PURE__ */ jsx(
|
|
191
|
-
Switch,
|
|
192
|
-
{
|
|
193
|
-
checked: settings.aiAnswerExpanded,
|
|
194
|
-
onChange: (e) => setSetting("aiAnswerExpanded", e.target.checked),
|
|
195
|
-
color: "primary",
|
|
196
|
-
"data-testid": "ai-answer-switch"
|
|
197
|
-
}
|
|
198
|
-
),
|
|
199
|
-
label: t("settingsPage.aiAnswerExpanded.label", {})
|
|
200
|
-
}
|
|
201
|
-
),
|
|
202
|
-
/* @__PURE__ */ jsx(Typography, { className: classes.description, children: t("settingsPage.aiAnswerExpanded.description", {}) })
|
|
203
|
-
]
|
|
204
|
-
}
|
|
205
|
-
),
|
|
206
|
-
/* @__PURE__ */ jsxs("div", { className: classes.settingItem, "data-testid": "pagination-setting", children: [
|
|
207
|
-
/* @__PURE__ */ jsx(
|
|
208
|
-
FormControlLabel,
|
|
155
|
+
/* @__PURE__ */ jsxs(Box, { className: styles.section, children: [
|
|
156
|
+
/* @__PURE__ */ jsx(Text, { as: "h2", variant: "title-small", className: styles.sectionTitle, children: t("settingsPage.displayPreferences", {}) }),
|
|
157
|
+
isAIEnabled && /* @__PURE__ */ jsxs(
|
|
158
|
+
"div",
|
|
209
159
|
{
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
160
|
+
className: styles.settingItem,
|
|
161
|
+
"data-testid": "ai-answer-setting",
|
|
162
|
+
children: [
|
|
163
|
+
/* @__PURE__ */ jsx(
|
|
164
|
+
Switch,
|
|
165
|
+
{
|
|
166
|
+
isSelected: settings.aiAnswerExpanded,
|
|
167
|
+
onChange: (value) => setSetting("aiAnswerExpanded", value),
|
|
168
|
+
label: t("settingsPage.aiAnswerExpanded.label", {}),
|
|
169
|
+
"data-testid": "ai-answer-switch"
|
|
170
|
+
}
|
|
171
|
+
),
|
|
172
|
+
/* @__PURE__ */ jsx(
|
|
173
|
+
Text,
|
|
174
|
+
{
|
|
175
|
+
as: "div",
|
|
176
|
+
variant: "body-small",
|
|
177
|
+
color: "secondary",
|
|
178
|
+
className: styles.description,
|
|
179
|
+
children: t("settingsPage.aiAnswerExpanded.description", {})
|
|
180
|
+
}
|
|
181
|
+
)
|
|
182
|
+
]
|
|
220
183
|
}
|
|
221
184
|
),
|
|
222
|
-
/* @__PURE__ */
|
|
223
|
-
|
|
224
|
-
/* @__PURE__ */ jsxs(Box, { mt: 3, children: [
|
|
225
|
-
/* @__PURE__ */ jsx(
|
|
226
|
-
Typography,
|
|
185
|
+
/* @__PURE__ */ jsxs(
|
|
186
|
+
"div",
|
|
227
187
|
{
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
children:
|
|
188
|
+
className: styles.settingItem,
|
|
189
|
+
"data-testid": "pagination-setting",
|
|
190
|
+
children: [
|
|
191
|
+
/* @__PURE__ */ jsx(
|
|
192
|
+
Switch,
|
|
193
|
+
{
|
|
194
|
+
isSelected: settings.usePagination,
|
|
195
|
+
onChange: (value) => setSetting("usePagination", value),
|
|
196
|
+
label: t("settingsPage.usePagination.label", {}),
|
|
197
|
+
"data-testid": "pagination-switch"
|
|
198
|
+
}
|
|
199
|
+
),
|
|
200
|
+
/* @__PURE__ */ jsx(
|
|
201
|
+
Text,
|
|
202
|
+
{
|
|
203
|
+
as: "div",
|
|
204
|
+
variant: "body-small",
|
|
205
|
+
color: "secondary",
|
|
206
|
+
className: styles.description,
|
|
207
|
+
children: t("settingsPage.usePagination.description", {})
|
|
208
|
+
}
|
|
209
|
+
)
|
|
210
|
+
]
|
|
231
211
|
}
|
|
232
212
|
),
|
|
233
|
-
/* @__PURE__ */
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
style: { marginBottom: 16 },
|
|
238
|
-
children: t("settingsPage.viewTypePreferences.description", {})
|
|
239
|
-
}
|
|
240
|
-
),
|
|
241
|
-
viewTypes.map(({ key, label }) => {
|
|
242
|
-
const currentView = getViewType(key);
|
|
243
|
-
return /* @__PURE__ */ jsxs(
|
|
244
|
-
"div",
|
|
213
|
+
/* @__PURE__ */ jsxs(Box, { className: styles.viewTypeSection, children: [
|
|
214
|
+
/* @__PURE__ */ jsx(Text, { as: "h3", variant: "title-x-small", children: t("settingsPage.viewTypePreferences.title", {}) }),
|
|
215
|
+
/* @__PURE__ */ jsx(
|
|
216
|
+
Text,
|
|
245
217
|
{
|
|
246
|
-
|
|
247
|
-
"
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
/* @__PURE__ */ jsx(
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
variant: currentView === "list" ? "contained" : "outlined",
|
|
265
|
-
onClick: () => handleViewTypeChange(key, "list"),
|
|
266
|
-
"data-testid": `view-type-${key}-list`,
|
|
267
|
-
"data-selected": currentView === "list",
|
|
268
|
-
children: t("settingsPage.viewTypePreferences.list", {})
|
|
269
|
-
}
|
|
270
|
-
),
|
|
271
|
-
/* @__PURE__ */ jsx(
|
|
272
|
-
Button,
|
|
218
|
+
as: "div",
|
|
219
|
+
variant: "body-small",
|
|
220
|
+
color: "secondary",
|
|
221
|
+
className: styles.description,
|
|
222
|
+
children: t("settingsPage.viewTypePreferences.description", {})
|
|
223
|
+
}
|
|
224
|
+
),
|
|
225
|
+
viewTypes.map(({ key, label }) => {
|
|
226
|
+
const currentView = getViewType(key) ?? "default";
|
|
227
|
+
return /* @__PURE__ */ jsxs(
|
|
228
|
+
"div",
|
|
229
|
+
{
|
|
230
|
+
className: styles.viewTypeItem,
|
|
231
|
+
"data-testid": `view-type-${key}`,
|
|
232
|
+
children: [
|
|
233
|
+
/* @__PURE__ */ jsx(Text, { className: styles.viewTypeLabel, children: label }),
|
|
234
|
+
/* @__PURE__ */ jsxs(
|
|
235
|
+
ToggleButtonGroup,
|
|
273
236
|
{
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
237
|
+
selectionMode: "single",
|
|
238
|
+
disallowEmptySelection: true,
|
|
239
|
+
selectedKeys: [currentView],
|
|
240
|
+
onSelectionChange: (keys) => {
|
|
241
|
+
const selected = Array.from(keys)[0];
|
|
242
|
+
handleViewTypeChange(
|
|
243
|
+
key,
|
|
244
|
+
selected === "default" ? null : selected
|
|
245
|
+
);
|
|
246
|
+
},
|
|
247
|
+
children: [
|
|
248
|
+
/* @__PURE__ */ jsx(
|
|
249
|
+
ToggleButton,
|
|
250
|
+
{
|
|
251
|
+
id: "grid",
|
|
252
|
+
size: "small",
|
|
253
|
+
"data-testid": `view-type-${key}-grid`,
|
|
254
|
+
children: t("settingsPage.viewTypePreferences.grid", {})
|
|
255
|
+
}
|
|
256
|
+
),
|
|
257
|
+
/* @__PURE__ */ jsx(
|
|
258
|
+
ToggleButton,
|
|
259
|
+
{
|
|
260
|
+
id: "list",
|
|
261
|
+
size: "small",
|
|
262
|
+
"data-testid": `view-type-${key}-list`,
|
|
263
|
+
children: t("settingsPage.viewTypePreferences.list", {})
|
|
264
|
+
}
|
|
265
|
+
),
|
|
266
|
+
/* @__PURE__ */ jsx(
|
|
267
|
+
ToggleButton,
|
|
268
|
+
{
|
|
269
|
+
id: "default",
|
|
270
|
+
size: "small",
|
|
271
|
+
"data-testid": `view-type-${key}-default`,
|
|
272
|
+
children: t("settingsPage.viewTypePreferences.default", {})
|
|
273
|
+
}
|
|
274
|
+
)
|
|
275
|
+
]
|
|
279
276
|
}
|
|
280
277
|
)
|
|
281
|
-
]
|
|
282
|
-
|
|
278
|
+
]
|
|
279
|
+
},
|
|
280
|
+
key
|
|
281
|
+
);
|
|
282
|
+
})
|
|
283
|
+
] })
|
|
284
|
+
] }),
|
|
285
|
+
/* @__PURE__ */ jsxs(Flex, { direction: "column", className: styles.footer, children: [
|
|
286
|
+
/* @__PURE__ */ jsx(
|
|
287
|
+
Button,
|
|
288
|
+
{
|
|
289
|
+
variant: "secondary",
|
|
290
|
+
onClick: () => {
|
|
291
|
+
resetSettings();
|
|
283
292
|
},
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
293
|
+
"data-testid": "reset-all-settings-button",
|
|
294
|
+
children: t("settingsPage.resetAllSettings", {})
|
|
295
|
+
}
|
|
296
|
+
),
|
|
297
|
+
/* @__PURE__ */ jsx(
|
|
298
|
+
Text,
|
|
299
|
+
{
|
|
300
|
+
as: "div",
|
|
301
|
+
variant: "body-small",
|
|
302
|
+
color: "secondary",
|
|
303
|
+
className: styles.description,
|
|
304
|
+
children: t("settingsPage.resetAllSettingsDescription", {})
|
|
305
|
+
}
|
|
306
|
+
)
|
|
287
307
|
] })
|
|
288
|
-
] })
|
|
289
|
-
|
|
290
|
-
/* @__PURE__ */ jsx(
|
|
291
|
-
Button,
|
|
292
|
-
{
|
|
293
|
-
variant: "outlined",
|
|
294
|
-
color: "secondary",
|
|
295
|
-
onClick: () => {
|
|
296
|
-
resetSettings();
|
|
297
|
-
},
|
|
298
|
-
"data-testid": "reset-all-settings-button",
|
|
299
|
-
children: t("settingsPage.resetAllSettings", {})
|
|
300
|
-
}
|
|
301
|
-
),
|
|
302
|
-
/* @__PURE__ */ jsx(
|
|
303
|
-
Typography,
|
|
304
|
-
{
|
|
305
|
-
className: classes.description,
|
|
306
|
-
style: { marginTop: theme.spacing(1) },
|
|
307
|
-
children: t("settingsPage.resetAllSettingsDescription", {})
|
|
308
|
-
}
|
|
309
|
-
)
|
|
310
|
-
] })
|
|
311
|
-
] }) });
|
|
308
|
+
] }) })
|
|
309
|
+
] });
|
|
312
310
|
};
|
|
313
311
|
|
|
314
312
|
export { SettingsPage };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsPage.esm.js","sources":["../../../src/components/SettingsPage/SettingsPage.tsx"],"sourcesContent":["import {\n Box,\n Button,\n ButtonGroup,\n CardContent,\n FormControlLabel,\n makeStyles,\n Switch,\n Typography,\n useTheme,\n} from '@material-ui/core';\nimport { InfoCard } from '@backstage/core-components';\nimport {\n qetaTranslationRef,\n useAI,\n useUserSettings,\n ViewType,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\n\nconst useStyles = makeStyles(theme => ({\n content: {\n maxWidth: '800px',\n margin: '0 auto',\n },\n section: {\n marginBottom: theme.spacing(3),\n },\n sectionTitle: {\n marginBottom: theme.spacing(2),\n fontWeight: 600,\n },\n settingItem: {\n marginBottom: theme.spacing(2),\n },\n description: {\n color: theme.palette.text.secondary,\n fontSize: '0.875rem',\n marginTop: theme.spacing(0.5),\n },\n viewTypeItem: {\n marginBottom: theme.spacing(2),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n viewTypeLabel: {\n minWidth: '200px',\n },\n}));\n\nexport const SettingsPage = () => {\n const classes = useStyles();\n const theme = useTheme();\n const {\n settings,\n setSetting,\n getSetting,\n resetSettings,\n isLoaded,\n updateSettings,\n } = useUserSettings();\n const { t } = useTranslationRef(qetaTranslationRef);\n const { isAIEnabled } = useAI();\n const configApi = useApi(configApiRef);\n const allowAnonymous = configApi.getOptionalBoolean('qeta.allowAnonymous');\n\n const viewTypes = [\n {\n key: 'posts-question',\n label: t('settingsPage.viewTypePreferences.labels.questions', {}),\n },\n {\n key: 'posts-article',\n label: t('settingsPage.viewTypePreferences.labels.articles', {}),\n },\n {\n key: 'posts-link',\n label: t('settingsPage.viewTypePreferences.labels.links', {}),\n },\n {\n key: 'favorites',\n label: t('settingsPage.viewTypePreferences.labels.favorites', {}),\n },\n {\n key: 'collections',\n label: t('settingsPage.viewTypePreferences.labels.collections', {}),\n },\n {\n key: 'tags',\n label: t('settingsPage.viewTypePreferences.labels.tags', {}),\n },\n {\n key: 'users',\n label: t('settingsPage.viewTypePreferences.labels.users', {}),\n },\n {\n key: 'entities',\n label: t('settingsPage.viewTypePreferences.labels.entities', {}),\n },\n {\n key: 'tag-posts',\n label: t('settingsPage.viewTypePreferences.labels.tagPosts', {}),\n },\n {\n key: 'collection-posts',\n label: t('settingsPage.viewTypePreferences.labels.collectionPosts', {}),\n },\n {\n key: 'user-questions',\n label: t('settingsPage.viewTypePreferences.labels.userQuestions', {}),\n },\n {\n key: 'user-articles',\n label: t('settingsPage.viewTypePreferences.labels.userArticles', {}),\n },\n {\n key: 'user-links',\n label: t('settingsPage.viewTypePreferences.labels.userLinks', {}),\n },\n {\n key: 'user-collections',\n label: t('settingsPage.viewTypePreferences.labels.userCollections', {}),\n },\n {\n key: 'user-answers',\n label: t('settingsPage.viewTypePreferences.labels.userAnswers', {}),\n },\n ];\n\n const handleViewTypeChange = (key: string, value: ViewType | null) => {\n if (value === null) {\n updateSettings({\n viewType: { ...getSetting('viewType'), [key]: undefined as any },\n });\n } else {\n updateSettings({\n viewType: { ...getSetting('viewType'), [key]: value },\n });\n }\n };\n\n const getViewType = (key: string): ViewType | null => {\n return settings.viewType[key] || null;\n };\n\n if (!isLoaded) {\n return null;\n }\n\n return (\n <InfoCard title={t('settingsPage.title', {})} data-testid=\"settings-page\">\n <CardContent>\n <div className={classes.section}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n {t('settingsPage.editorPreferences', {})}\n </Typography>\n\n <div className={classes.settingItem} data-testid=\"auto-save-setting\">\n <FormControlLabel\n control={\n <Switch\n checked={settings.autoSaveEnabled}\n onChange={e =>\n setSetting('autoSaveEnabled', e.target.checked)\n }\n color=\"primary\"\n data-testid=\"auto-save-switch\"\n />\n }\n label={t('settingsPage.autoSave.label', {})}\n />\n <Typography className={classes.description}>\n {t('settingsPage.autoSave.description', {})}\n </Typography>\n </div>\n\n {allowAnonymous && (\n <div\n className={classes.settingItem}\n data-testid=\"anonymous-posting-setting\"\n >\n <FormControlLabel\n control={\n <Switch\n checked={settings.anonymousPosting}\n onChange={e =>\n setSetting('anonymousPosting', e.target.checked)\n }\n color=\"primary\"\n data-testid=\"anonymous-posting-switch\"\n />\n }\n label={t('settingsPage.anonymousPosting.label', {})}\n />\n <Typography className={classes.description}>\n {t('settingsPage.anonymousPosting.description', {})}\n </Typography>\n </div>\n )}\n </div>\n\n <div className={classes.section}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n {t('settingsPage.displayPreferences', {})}\n </Typography>\n\n {isAIEnabled && (\n <div\n className={classes.settingItem}\n data-testid=\"ai-answer-setting\"\n >\n <FormControlLabel\n control={\n <Switch\n checked={settings.aiAnswerExpanded}\n onChange={e =>\n setSetting('aiAnswerExpanded', e.target.checked)\n }\n color=\"primary\"\n data-testid=\"ai-answer-switch\"\n />\n }\n label={t('settingsPage.aiAnswerExpanded.label', {})}\n />\n <Typography className={classes.description}>\n {t('settingsPage.aiAnswerExpanded.description', {})}\n </Typography>\n </div>\n )}\n\n <div className={classes.settingItem} data-testid=\"pagination-setting\">\n <FormControlLabel\n control={\n <Switch\n checked={settings.usePagination}\n onChange={e => setSetting('usePagination', e.target.checked)}\n color=\"primary\"\n data-testid=\"pagination-switch\"\n />\n }\n label={t('settingsPage.usePagination.label', {})}\n />\n <Typography className={classes.description}>\n {t('settingsPage.usePagination.description', {})}\n </Typography>\n </div>\n\n <Box mt={3}>\n <Typography\n variant=\"subtitle1\"\n style={{ fontWeight: 500, marginBottom: 16 }}\n >\n {t('settingsPage.viewTypePreferences.title', {})}\n </Typography>\n <Typography\n className={classes.description}\n style={{ marginBottom: 16 }}\n >\n {t('settingsPage.viewTypePreferences.description', {})}\n </Typography>\n\n {viewTypes.map(({ key, label }) => {\n const currentView = getViewType(key);\n return (\n <div\n key={key}\n className={classes.viewTypeItem}\n data-testid={`view-type-${key}`}\n >\n <Typography className={classes.viewTypeLabel}>\n {label}\n </Typography>\n <ButtonGroup size=\"small\" color=\"primary\">\n <Button\n variant={\n currentView === 'grid' ? 'contained' : 'outlined'\n }\n onClick={() => handleViewTypeChange(key, 'grid')}\n data-testid={`view-type-${key}-grid`}\n data-selected={currentView === 'grid'}\n >\n {t('settingsPage.viewTypePreferences.grid', {})}\n </Button>\n <Button\n variant={\n currentView === 'list' ? 'contained' : 'outlined'\n }\n onClick={() => handleViewTypeChange(key, 'list')}\n data-testid={`view-type-${key}-list`}\n data-selected={currentView === 'list'}\n >\n {t('settingsPage.viewTypePreferences.list', {})}\n </Button>\n <Button\n variant={currentView === null ? 'contained' : 'outlined'}\n onClick={() => handleViewTypeChange(key, null)}\n data-testid={`view-type-${key}-default`}\n data-selected={currentView === null}\n >\n {t('settingsPage.viewTypePreferences.default', {})}\n </Button>\n </ButtonGroup>\n </div>\n );\n })}\n </Box>\n </div>\n\n <Box mt={4} pt={3} borderTop={`1px solid ${theme.palette.divider}`}>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n onClick={() => {\n resetSettings();\n }}\n data-testid=\"reset-all-settings-button\"\n >\n {t('settingsPage.resetAllSettings', {})}\n </Button>\n <Typography\n className={classes.description}\n style={{ marginTop: theme.spacing(1) }}\n >\n {t('settingsPage.resetAllSettingsDescription', {})}\n </Typography>\n </Box>\n </CardContent>\n </InfoCard>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SettingsPage.esm.js","sources":["../../../src/components/SettingsPage/SettingsPage.tsx"],"sourcesContent":["import {\n qetaTranslationRef,\n useAI,\n useUserSettings,\n ViewType,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\nimport {\n Box,\n Button,\n Card,\n CardBody,\n CardHeader,\n Flex,\n Switch,\n Text,\n ToggleButton,\n ToggleButtonGroup,\n} from '@backstage/ui';\nimport styles from './SettingsPage.module.css';\n\nexport const SettingsPage = () => {\n const {\n settings,\n setSetting,\n getSetting,\n resetSettings,\n isLoaded,\n updateSettings,\n } = useUserSettings();\n const { t } = useTranslationRef(qetaTranslationRef);\n const { isAIEnabled } = useAI();\n const configApi = useApi(configApiRef);\n const allowAnonymous = configApi.getOptionalBoolean('qeta.allowAnonymous');\n\n const viewTypes = [\n {\n key: 'posts-question',\n label: t('settingsPage.viewTypePreferences.labels.questions', {}),\n },\n {\n key: 'posts-article',\n label: t('settingsPage.viewTypePreferences.labels.articles', {}),\n },\n {\n key: 'posts-link',\n label: t('settingsPage.viewTypePreferences.labels.links', {}),\n },\n {\n key: 'favorites',\n label: t('settingsPage.viewTypePreferences.labels.favorites', {}),\n },\n {\n key: 'collections',\n label: t('settingsPage.viewTypePreferences.labels.collections', {}),\n },\n {\n key: 'tags',\n label: t('settingsPage.viewTypePreferences.labels.tags', {}),\n },\n {\n key: 'users',\n label: t('settingsPage.viewTypePreferences.labels.users', {}),\n },\n {\n key: 'entities',\n label: t('settingsPage.viewTypePreferences.labels.entities', {}),\n },\n {\n key: 'tag-posts',\n label: t('settingsPage.viewTypePreferences.labels.tagPosts', {}),\n },\n {\n key: 'collection-posts',\n label: t('settingsPage.viewTypePreferences.labels.collectionPosts', {}),\n },\n {\n key: 'user-questions',\n label: t('settingsPage.viewTypePreferences.labels.userQuestions', {}),\n },\n {\n key: 'user-articles',\n label: t('settingsPage.viewTypePreferences.labels.userArticles', {}),\n },\n {\n key: 'user-links',\n label: t('settingsPage.viewTypePreferences.labels.userLinks', {}),\n },\n {\n key: 'user-collections',\n label: t('settingsPage.viewTypePreferences.labels.userCollections', {}),\n },\n {\n key: 'user-answers',\n label: t('settingsPage.viewTypePreferences.labels.userAnswers', {}),\n },\n ];\n\n const handleViewTypeChange = (key: string, value: ViewType | null) => {\n if (value === null) {\n updateSettings({\n viewType: { ...getSetting('viewType'), [key]: undefined as any },\n });\n } else {\n updateSettings({\n viewType: { ...getSetting('viewType'), [key]: value },\n });\n }\n };\n\n const getViewType = (key: string): ViewType | null => {\n return settings.viewType[key] || null;\n };\n\n if (!isLoaded) {\n return null;\n }\n\n return (\n <Card data-testid=\"settings-page\">\n <CardHeader>\n <Text as=\"h1\" variant=\"title-small\">\n {t('settingsPage.title', {})}\n </Text>\n </CardHeader>\n <CardBody>\n <Box className={styles.content}>\n <Box className={styles.section}>\n <Text as=\"h2\" variant=\"title-small\" className={styles.sectionTitle}>\n {t('settingsPage.editorPreferences', {})}\n </Text>\n\n <div className={styles.settingItem} data-testid=\"auto-save-setting\">\n <Switch\n isSelected={settings.autoSaveEnabled}\n onChange={value => setSetting('autoSaveEnabled', value)}\n label={t('settingsPage.autoSave.label', {})}\n data-testid=\"auto-save-switch\"\n />\n <Text\n as=\"div\"\n variant=\"body-small\"\n color=\"secondary\"\n className={styles.description}\n >\n {t('settingsPage.autoSave.description', {})}\n </Text>\n </div>\n\n {allowAnonymous && (\n <div\n className={styles.settingItem}\n data-testid=\"anonymous-posting-setting\"\n >\n <Switch\n isSelected={settings.anonymousPosting}\n onChange={value => setSetting('anonymousPosting', value)}\n label={t('settingsPage.anonymousPosting.label', {})}\n data-testid=\"anonymous-posting-switch\"\n />\n <Text\n as=\"div\"\n variant=\"body-small\"\n color=\"secondary\"\n className={styles.description}\n >\n {t('settingsPage.anonymousPosting.description', {})}\n </Text>\n </div>\n )}\n </Box>\n\n <Box className={styles.section}>\n <Text as=\"h2\" variant=\"title-small\" className={styles.sectionTitle}>\n {t('settingsPage.displayPreferences', {})}\n </Text>\n\n {isAIEnabled && (\n <div\n className={styles.settingItem}\n data-testid=\"ai-answer-setting\"\n >\n <Switch\n isSelected={settings.aiAnswerExpanded}\n onChange={value => setSetting('aiAnswerExpanded', value)}\n label={t('settingsPage.aiAnswerExpanded.label', {})}\n data-testid=\"ai-answer-switch\"\n />\n <Text\n as=\"div\"\n variant=\"body-small\"\n color=\"secondary\"\n className={styles.description}\n >\n {t('settingsPage.aiAnswerExpanded.description', {})}\n </Text>\n </div>\n )}\n\n <div\n className={styles.settingItem}\n data-testid=\"pagination-setting\"\n >\n <Switch\n isSelected={settings.usePagination}\n onChange={value => setSetting('usePagination', value)}\n label={t('settingsPage.usePagination.label', {})}\n data-testid=\"pagination-switch\"\n />\n <Text\n as=\"div\"\n variant=\"body-small\"\n color=\"secondary\"\n className={styles.description}\n >\n {t('settingsPage.usePagination.description', {})}\n </Text>\n </div>\n\n <Box className={styles.viewTypeSection}>\n <Text as=\"h3\" variant=\"title-x-small\">\n {t('settingsPage.viewTypePreferences.title', {})}\n </Text>\n <Text\n as=\"div\"\n variant=\"body-small\"\n color=\"secondary\"\n className={styles.description}\n >\n {t('settingsPage.viewTypePreferences.description', {})}\n </Text>\n\n {viewTypes.map(({ key, label }) => {\n const currentView = getViewType(key) ?? 'default';\n return (\n <div\n key={key}\n className={styles.viewTypeItem}\n data-testid={`view-type-${key}`}\n >\n <Text className={styles.viewTypeLabel}>{label}</Text>\n <ToggleButtonGroup\n selectionMode=\"single\"\n disallowEmptySelection\n selectedKeys={[currentView]}\n onSelectionChange={keys => {\n const selected = Array.from(keys)[0];\n handleViewTypeChange(\n key,\n selected === 'default'\n ? null\n : (selected as ViewType),\n );\n }}\n >\n <ToggleButton\n id=\"grid\"\n size=\"small\"\n data-testid={`view-type-${key}-grid`}\n >\n {t('settingsPage.viewTypePreferences.grid', {})}\n </ToggleButton>\n <ToggleButton\n id=\"list\"\n size=\"small\"\n data-testid={`view-type-${key}-list`}\n >\n {t('settingsPage.viewTypePreferences.list', {})}\n </ToggleButton>\n <ToggleButton\n id=\"default\"\n size=\"small\"\n data-testid={`view-type-${key}-default`}\n >\n {t('settingsPage.viewTypePreferences.default', {})}\n </ToggleButton>\n </ToggleButtonGroup>\n </div>\n );\n })}\n </Box>\n </Box>\n\n <Flex direction=\"column\" className={styles.footer}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n resetSettings();\n }}\n data-testid=\"reset-all-settings-button\"\n >\n {t('settingsPage.resetAllSettings', {})}\n </Button>\n <Text\n as=\"div\"\n variant=\"body-small\"\n color=\"secondary\"\n className={styles.description}\n >\n {t('settingsPage.resetAllSettingsDescription', {})}\n </Text>\n </Flex>\n </Box>\n </CardBody>\n </Card>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAsBO,MAAM,eAAe,MAAM;AAChC,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,MACE,eAAA,EAAgB;AACpB,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,KAAA,EAAM;AAC9B,EAAA,MAAM,SAAA,GAAY,OAAO,YAAY,CAAA;AACrC,EAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,kBAAA,CAAmB,qBAAqB,CAAA;AAEzE,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB;AAAA,MACE,GAAA,EAAK,gBAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,mDAAA,EAAqD,EAAE;AAAA,KAClE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,eAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,kDAAA,EAAoD,EAAE;AAAA,KACjE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,YAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,+CAAA,EAAiD,EAAE;AAAA,KAC9D;AAAA,IACA;AAAA,MACE,GAAA,EAAK,WAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,mDAAA,EAAqD,EAAE;AAAA,KAClE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,aAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,qDAAA,EAAuD,EAAE;AAAA,KACpE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,MAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,8CAAA,EAAgD,EAAE;AAAA,KAC7D;AAAA,IACA;AAAA,MACE,GAAA,EAAK,OAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,+CAAA,EAAiD,EAAE;AAAA,KAC9D;AAAA,IACA;AAAA,MACE,GAAA,EAAK,UAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,kDAAA,EAAoD,EAAE;AAAA,KACjE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,WAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,kDAAA,EAAoD,EAAE;AAAA,KACjE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,kBAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,yDAAA,EAA2D,EAAE;AAAA,KACxE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,gBAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,uDAAA,EAAyD,EAAE;AAAA,KACtE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,eAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,sDAAA,EAAwD,EAAE;AAAA,KACrE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,YAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,mDAAA,EAAqD,EAAE;AAAA,KAClE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,kBAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,yDAAA,EAA2D,EAAE;AAAA,KACxE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,cAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,qDAAA,EAAuD,EAAE;AAAA;AACpE,GACF;AAEA,EAAA,MAAM,oBAAA,GAAuB,CAAC,GAAA,EAAa,KAAA,KAA2B;AACpE,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,cAAA,CAAe;AAAA,QACb,QAAA,EAAU,EAAE,GAAG,UAAA,CAAW,UAAU,CAAA,EAAG,CAAC,GAAG,GAAG,MAAA;AAAiB,OAChE,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,cAAA,CAAe;AAAA,QACb,QAAA,EAAU,EAAE,GAAG,UAAA,CAAW,UAAU,CAAA,EAAG,CAAC,GAAG,GAAG,KAAA;AAAM,OACrD,CAAA;AAAA,IACH;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,GAAA,KAAiC;AACpD,IAAA,OAAO,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,IAAK,IAAA;AAAA,EACnC,CAAA;AAEA,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAK,aAAA,EAAY,eAAA,EAChB,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,OAAA,EAAQ,aAAA,EACnB,QAAA,EAAA,CAAA,CAAE,oBAAA,EAAsB,EAAE,CAAA,EAC7B,CAAA,EACF,CAAA;AAAA,wBACC,QAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,OAAO,OAAA,EACrB,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,OAAA,EACrB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,OAAA,EAAQ,aAAA,EAAc,SAAA,EAAW,MAAA,CAAO,YAAA,EACnD,QAAA,EAAA,CAAA,CAAE,gCAAA,EAAkC,EAAE,CAAA,EACzC,CAAA;AAAA,6BAEC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,WAAA,EAAa,eAAY,mBAAA,EAC9C,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,YAAY,QAAA,CAAS,eAAA;AAAA,cACrB,QAAA,EAAU,CAAA,KAAA,KAAS,UAAA,CAAW,iBAAA,EAAmB,KAAK,CAAA;AAAA,cACtD,KAAA,EAAO,CAAA,CAAE,6BAAA,EAA+B,EAAE,CAAA;AAAA,cAC1C,aAAA,EAAY;AAAA;AAAA,WACd;AAAA,0BACA,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,KAAA;AAAA,cACH,OAAA,EAAQ,YAAA;AAAA,cACR,KAAA,EAAM,WAAA;AAAA,cACN,WAAW,MAAA,CAAO,WAAA;AAAA,cAEjB,QAAA,EAAA,CAAA,CAAE,mCAAA,EAAqC,EAAE;AAAA;AAAA;AAC5C,SAAA,EACF,CAAA;AAAA,QAEC,cAAA,oBACC,IAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAW,MAAA,CAAO,WAAA;AAAA,YAClB,aAAA,EAAY,2BAAA;AAAA,YAEZ,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,YAAY,QAAA,CAAS,gBAAA;AAAA,kBACrB,QAAA,EAAU,CAAA,KAAA,KAAS,UAAA,CAAW,kBAAA,EAAoB,KAAK,CAAA;AAAA,kBACvD,KAAA,EAAO,CAAA,CAAE,qCAAA,EAAuC,EAAE,CAAA;AAAA,kBAClD,aAAA,EAAY;AAAA;AAAA,eACd;AAAA,8BACA,GAAA;AAAA,gBAAC,IAAA;AAAA,gBAAA;AAAA,kBACC,EAAA,EAAG,KAAA;AAAA,kBACH,OAAA,EAAQ,YAAA;AAAA,kBACR,KAAA,EAAM,WAAA;AAAA,kBACN,WAAW,MAAA,CAAO,WAAA;AAAA,kBAEjB,QAAA,EAAA,CAAA,CAAE,2CAAA,EAA6C,EAAE;AAAA;AAAA;AACpD;AAAA;AAAA;AACF,OAAA,EAEJ,CAAA;AAAA,sBAEA,IAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,OAAA,EACrB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,OAAA,EAAQ,aAAA,EAAc,SAAA,EAAW,MAAA,CAAO,YAAA,EACnD,QAAA,EAAA,CAAA,CAAE,iCAAA,EAAmC,EAAE,CAAA,EAC1C,CAAA;AAAA,QAEC,WAAA,oBACC,IAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAW,MAAA,CAAO,WAAA;AAAA,YAClB,aAAA,EAAY,mBAAA;AAAA,YAEZ,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,YAAY,QAAA,CAAS,gBAAA;AAAA,kBACrB,QAAA,EAAU,CAAA,KAAA,KAAS,UAAA,CAAW,kBAAA,EAAoB,KAAK,CAAA;AAAA,kBACvD,KAAA,EAAO,CAAA,CAAE,qCAAA,EAAuC,EAAE,CAAA;AAAA,kBAClD,aAAA,EAAY;AAAA;AAAA,eACd;AAAA,8BACA,GAAA;AAAA,gBAAC,IAAA;AAAA,gBAAA;AAAA,kBACC,EAAA,EAAG,KAAA;AAAA,kBACH,OAAA,EAAQ,YAAA;AAAA,kBACR,KAAA,EAAM,WAAA;AAAA,kBACN,WAAW,MAAA,CAAO,WAAA;AAAA,kBAEjB,QAAA,EAAA,CAAA,CAAE,2CAAA,EAA6C,EAAE;AAAA;AAAA;AACpD;AAAA;AAAA,SACF;AAAA,wBAGF,IAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAW,MAAA,CAAO,WAAA;AAAA,YAClB,aAAA,EAAY,oBAAA;AAAA,YAEZ,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,YAAY,QAAA,CAAS,aAAA;AAAA,kBACrB,QAAA,EAAU,CAAA,KAAA,KAAS,UAAA,CAAW,eAAA,EAAiB,KAAK,CAAA;AAAA,kBACpD,KAAA,EAAO,CAAA,CAAE,kCAAA,EAAoC,EAAE,CAAA;AAAA,kBAC/C,aAAA,EAAY;AAAA;AAAA,eACd;AAAA,8BACA,GAAA;AAAA,gBAAC,IAAA;AAAA,gBAAA;AAAA,kBACC,EAAA,EAAG,KAAA;AAAA,kBACH,OAAA,EAAQ,YAAA;AAAA,kBACR,KAAA,EAAM,WAAA;AAAA,kBACN,WAAW,MAAA,CAAO,WAAA;AAAA,kBAEjB,QAAA,EAAA,CAAA,CAAE,wCAAA,EAA0C,EAAE;AAAA;AAAA;AACjD;AAAA;AAAA,SACF;AAAA,wBAEA,IAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,eAAA,EACrB,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAG,IAAA,EAAK,OAAA,EAAQ,iBACnB,QAAA,EAAA,CAAA,CAAE,wCAAA,EAA0C,EAAE,CAAA,EACjD,CAAA;AAAA,0BACA,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,KAAA;AAAA,cACH,OAAA,EAAQ,YAAA;AAAA,cACR,KAAA,EAAM,WAAA;AAAA,cACN,WAAW,MAAA,CAAO,WAAA;AAAA,cAEjB,QAAA,EAAA,CAAA,CAAE,8CAAA,EAAgD,EAAE;AAAA;AAAA,WACvD;AAAA,UAEC,UAAU,GAAA,CAAI,CAAC,EAAE,GAAA,EAAK,OAAM,KAAM;AACjC,YAAA,MAAM,WAAA,GAAc,WAAA,CAAY,GAAG,CAAA,IAAK,SAAA;AACxC,YAAA,uBACE,IAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBAEC,WAAW,MAAA,CAAO,YAAA;AAAA,gBAClB,aAAA,EAAa,aAAa,GAAG,CAAA,CAAA;AAAA,gBAE7B,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,aAAA,EAAgB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,kCAC9C,IAAA;AAAA,oBAAC,iBAAA;AAAA,oBAAA;AAAA,sBACC,aAAA,EAAc,QAAA;AAAA,sBACd,sBAAA,EAAsB,IAAA;AAAA,sBACtB,YAAA,EAAc,CAAC,WAAW,CAAA;AAAA,sBAC1B,mBAAmB,CAAA,IAAA,KAAQ;AACzB,wBAAA,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,IAAI,EAAE,CAAC,CAAA;AACnC,wBAAA,oBAAA;AAAA,0BACE,GAAA;AAAA,0BACA,QAAA,KAAa,YACT,IAAA,GACC;AAAA,yBACP;AAAA,sBACF,CAAA;AAAA,sBAEA,QAAA,EAAA;AAAA,wCAAA,GAAA;AAAA,0BAAC,YAAA;AAAA,0BAAA;AAAA,4BACC,EAAA,EAAG,MAAA;AAAA,4BACH,IAAA,EAAK,OAAA;AAAA,4BACL,aAAA,EAAa,aAAa,GAAG,CAAA,KAAA,CAAA;AAAA,4BAE5B,QAAA,EAAA,CAAA,CAAE,uCAAA,EAAyC,EAAE;AAAA;AAAA,yBAChD;AAAA,wCACA,GAAA;AAAA,0BAAC,YAAA;AAAA,0BAAA;AAAA,4BACC,EAAA,EAAG,MAAA;AAAA,4BACH,IAAA,EAAK,OAAA;AAAA,4BACL,aAAA,EAAa,aAAa,GAAG,CAAA,KAAA,CAAA;AAAA,4BAE5B,QAAA,EAAA,CAAA,CAAE,uCAAA,EAAyC,EAAE;AAAA;AAAA,yBAChD;AAAA,wCACA,GAAA;AAAA,0BAAC,YAAA;AAAA,0BAAA;AAAA,4BACC,EAAA,EAAG,SAAA;AAAA,4BACH,IAAA,EAAK,OAAA;AAAA,4BACL,aAAA,EAAa,aAAa,GAAG,CAAA,QAAA,CAAA;AAAA,4BAE5B,QAAA,EAAA,CAAA,CAAE,0CAAA,EAA4C,EAAE;AAAA;AAAA;AACnD;AAAA;AAAA;AACF;AAAA,eAAA;AAAA,cAxCK;AAAA,aAyCP;AAAA,UAEJ,CAAC;AAAA,SAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,2BAEC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,SAAA,EAAW,OAAO,MAAA,EACzC,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,WAAA;AAAA,YACR,SAAS,MAAM;AACb,cAAA,aAAA,EAAc;AAAA,YAChB,CAAA;AAAA,YACA,aAAA,EAAY,2BAAA;AAAA,YAEX,QAAA,EAAA,CAAA,CAAE,+BAAA,EAAiC,EAAE;AAAA;AAAA,SACxC;AAAA,wBACA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,KAAA;AAAA,YACH,OAAA,EAAQ,YAAA;AAAA,YACR,KAAA,EAAM,WAAA;AAAA,YACN,WAAW,MAAA,CAAO,WAAA;AAAA,YAEjB,QAAA,EAAA,CAAA,CAAE,0CAAA,EAA4C,EAAE;AAAA;AAAA;AACnD,OAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
|
|
2
|
+
|
|
3
|
+
var css_248z = "@layer components {\n .SettingsPage_content__2ebcd1e39b {\n max-width: 800px;\n margin: 0 auto;\n }\n\n .SettingsPage_section__2ebcd1e39b {\n margin-bottom: var(--bui-space-6);\n }\n\n .SettingsPage_sectionTitle__2ebcd1e39b {\n margin-bottom: var(--bui-space-4);\n }\n\n .SettingsPage_settingItem__2ebcd1e39b {\n margin-bottom: var(--bui-space-4);\n }\n\n .SettingsPage_description__2ebcd1e39b {\n margin-top: var(--bui-space-1);\n }\n\n .SettingsPage_viewTypeSection__2ebcd1e39b {\n margin-top: var(--bui-space-6);\n }\n\n .SettingsPage_viewTypeItem__2ebcd1e39b {\n margin-bottom: var(--bui-space-4);\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--bui-space-2);\n }\n\n .SettingsPage_viewTypeLabel__2ebcd1e39b {\n min-width: 200px;\n }\n\n .SettingsPage_footer__2ebcd1e39b {\n margin-top: var(--bui-space-8);\n padding-top: var(--bui-space-6);\n border-top: 1px solid var(--bui-border-1);\n }\n}\n";
|
|
4
|
+
var styles = {"content":"SettingsPage_content__2ebcd1e39b","section":"SettingsPage_section__2ebcd1e39b","sectionTitle":"SettingsPage_sectionTitle__2ebcd1e39b","settingItem":"SettingsPage_settingItem__2ebcd1e39b","description":"SettingsPage_description__2ebcd1e39b","viewTypeSection":"SettingsPage_viewTypeSection__2ebcd1e39b","viewTypeItem":"SettingsPage_viewTypeItem__2ebcd1e39b","viewTypeLabel":"SettingsPage_viewTypeLabel__2ebcd1e39b","footer":"SettingsPage_footer__2ebcd1e39b"};
|
|
5
|
+
styleInject(css_248z);
|
|
6
|
+
|
|
7
|
+
export { styles as default };
|
|
8
|
+
//# sourceMappingURL=SettingsPage.module.css.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsPage.module.css.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { useQetaApi, StatsChart } from '@drodil/backstage-plugin-qeta-react';
|
|
3
|
-
import { Grid, Card, CardHeader,
|
|
3
|
+
import { Grid, Card, CardHeader, CardBody, Skeleton } from '@backstage/ui';
|
|
4
4
|
|
|
5
5
|
const GlobalStatsContent = () => {
|
|
6
6
|
const {
|
|
@@ -11,9 +11,9 @@ const GlobalStatsContent = () => {
|
|
|
11
11
|
if (error) {
|
|
12
12
|
return null;
|
|
13
13
|
}
|
|
14
|
-
return /* @__PURE__ */ jsx(Grid, {
|
|
15
|
-
/* @__PURE__ */ jsx(CardHeader, {
|
|
16
|
-
/* @__PURE__ */ jsxs(
|
|
14
|
+
return /* @__PURE__ */ jsx(Grid.Root, { columns: { sm: "12" }, gap: "6", children: /* @__PURE__ */ jsx(Grid.Item, { colSpan: { sm: "12" }, children: /* @__PURE__ */ jsxs(Card, { children: [
|
|
15
|
+
/* @__PURE__ */ jsx(CardHeader, { children: "Activity Trends" }),
|
|
16
|
+
/* @__PURE__ */ jsxs(CardBody, { children: [
|
|
17
17
|
!loading && response && /* @__PURE__ */ jsx(
|
|
18
18
|
StatsChart,
|
|
19
19
|
{
|
|
@@ -21,7 +21,7 @@ const GlobalStatsContent = () => {
|
|
|
21
21
|
summary: response.summary
|
|
22
22
|
}
|
|
23
23
|
),
|
|
24
|
-
loading && /* @__PURE__ */ jsx(
|
|
24
|
+
loading && /* @__PURE__ */ jsx(Skeleton, { width: "100%", height: 300 })
|
|
25
25
|
] })
|
|
26
26
|
] }) }) });
|
|
27
27
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalStatsContent.esm.js","sources":["../../../src/components/Statistics/GlobalStatsContent.tsx"],"sourcesContent":["import { StatsChart, useQetaApi } from '@drodil/backstage-plugin-qeta-react';\nimport {
|
|
1
|
+
{"version":3,"file":"GlobalStatsContent.esm.js","sources":["../../../src/components/Statistics/GlobalStatsContent.tsx"],"sourcesContent":["import { StatsChart, useQetaApi } from '@drodil/backstage-plugin-qeta-react';\nimport { Card, CardBody, CardHeader, Grid, Skeleton } from '@backstage/ui';\n\nexport const GlobalStatsContent = () => {\n const {\n value: response,\n loading,\n error,\n } = useQetaApi(api => api.getGlobalStats(), []);\n if (error) {\n return null;\n }\n return (\n <Grid.Root columns={{ sm: '12' }} gap=\"6\">\n <Grid.Item colSpan={{ sm: '12' }}>\n <Card>\n <CardHeader>Activity Trends</CardHeader>\n <CardBody>\n {!loading && response && (\n <StatsChart\n data={response.statistics}\n summary={response.summary as unknown as Record<string, number>}\n />\n )}\n {loading && <Skeleton width=\"100%\" height={300} />}\n </CardBody>\n </Card>\n </Grid.Item>\n </Grid.Root>\n );\n};\n"],"names":[],"mappings":";;;;AAGO,MAAM,qBAAqB,MAAM;AACtC,EAAA,MAAM;AAAA,IACJ,KAAA,EAAO,QAAA;AAAA,IACP,OAAA;AAAA,IACA;AAAA,MACE,UAAA,CAAW,CAAA,GAAA,KAAO,IAAI,cAAA,EAAe,EAAG,EAAE,CAAA;AAC9C,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,uBACE,GAAA,CAAC,KAAK,IAAA,EAAL,EAAU,SAAS,EAAE,EAAA,EAAI,MAAK,EAAG,GAAA,EAAI,KACpC,QAAA,kBAAA,GAAA,CAAC,IAAA,CAAK,MAAL,EAAU,OAAA,EAAS,EAAE,EAAA,EAAI,IAAA,EAAK,EAC7B,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,cAAW,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,yBAC1B,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,MAAA,CAAC,WAAW,QAAA,oBACX,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,MAAM,QAAA,CAAS,UAAA;AAAA,UACf,SAAS,QAAA,CAAS;AAAA;AAAA,OACpB;AAAA,MAED,2BAAW,GAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAM,MAAA,EAAO,QAAQ,GAAA,EAAK;AAAA,KAAA,EAClD;AAAA,GAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { useQetaConfig,
|
|
2
|
+
import { useQetaConfig, AskQuestionButton, WriteArticleButton, CreateLinkButton, TopRankingUsers } from '@drodil/backstage-plugin-qeta-react';
|
|
3
3
|
import { GlobalStatsContent } from './GlobalStatsContent.esm.js';
|
|
4
|
-
import {
|
|
5
|
-
import EmojiEventsOutlined from '@material-ui/icons/EmojiEventsOutlined';
|
|
6
|
-
import { TabContext, TabList, TabPanel } from '@material-ui/lab';
|
|
4
|
+
import { Header, Tabs, TabList, Tab, TabPanel } from '@backstage/ui';
|
|
7
5
|
import { useState, useEffect } from 'react';
|
|
6
|
+
import styles from './StatisticsPage.module.css.esm.js';
|
|
8
7
|
|
|
9
8
|
const StatisticsPage = () => {
|
|
10
9
|
const [tab, setTab] = useState("global");
|
|
@@ -14,29 +13,25 @@ const StatisticsPage = () => {
|
|
|
14
13
|
setTab("global");
|
|
15
14
|
}
|
|
16
15
|
}, [disabled.questions, tab]);
|
|
17
|
-
const handleChange = (_event, newValue) => {
|
|
18
|
-
setTab(newValue);
|
|
19
|
-
};
|
|
20
16
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
21
|
-
/* @__PURE__ */
|
|
22
|
-
|
|
17
|
+
/* @__PURE__ */ jsx(
|
|
18
|
+
Header,
|
|
23
19
|
{
|
|
24
20
|
title: "Statistics",
|
|
25
|
-
|
|
26
|
-
children: [
|
|
21
|
+
customActions: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
27
22
|
/* @__PURE__ */ jsx(AskQuestionButton, {}),
|
|
28
23
|
/* @__PURE__ */ jsx(WriteArticleButton, {}),
|
|
29
24
|
/* @__PURE__ */ jsx(CreateLinkButton, {})
|
|
30
|
-
]
|
|
25
|
+
] })
|
|
31
26
|
}
|
|
32
27
|
),
|
|
33
|
-
/* @__PURE__ */ jsxs(
|
|
34
|
-
/* @__PURE__ */
|
|
35
|
-
/* @__PURE__ */ jsx(Tab, {
|
|
36
|
-
!disabled.questions && /* @__PURE__ */ jsx(Tab, {
|
|
37
|
-
] })
|
|
38
|
-
/* @__PURE__ */ jsx(TabPanel, {
|
|
39
|
-
!disabled.questions && /* @__PURE__ */ jsx(TabPanel, {
|
|
28
|
+
/* @__PURE__ */ jsxs(Tabs, { selectedKey: tab, onSelectionChange: (key) => setTab(key), children: [
|
|
29
|
+
/* @__PURE__ */ jsxs(TabList, { children: [
|
|
30
|
+
/* @__PURE__ */ jsx(Tab, { id: "global", children: "Global Stats" }),
|
|
31
|
+
!disabled.questions && /* @__PURE__ */ jsx(Tab, { id: "leaderboard", children: "Leaderboard" })
|
|
32
|
+
] }),
|
|
33
|
+
/* @__PURE__ */ jsx(TabPanel, { id: "global", className: styles.tabPanel, children: /* @__PURE__ */ jsx(GlobalStatsContent, {}) }),
|
|
34
|
+
!disabled.questions && /* @__PURE__ */ jsx(TabPanel, { id: "leaderboard", className: styles.tabPanel, children: /* @__PURE__ */ jsx(TopRankingUsers, { limit: 10 }) })
|
|
40
35
|
] })
|
|
41
36
|
] });
|
|
42
37
|
};
|