@drodil/backstage-plugin-qeta-react 3.48.1 → 3.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AIAnswerCard/AIAnswerCard.esm.js +4 -7
- package/dist/components/AIAnswerCard/AIAnswerCard.esm.js.map +1 -1
- package/dist/components/AnswerForm/AnswerForm.esm.js +12 -6
- package/dist/components/AnswerForm/AnswerForm.esm.js.map +1 -1
- package/dist/components/AnswersContainer/AnswerList.esm.js +2 -2
- package/dist/components/AnswersContainer/AnswerList.esm.js.map +1 -1
- package/dist/components/AnswersContainer/AnswerListItem.esm.js +162 -98
- package/dist/components/AnswersContainer/AnswerListItem.esm.js.map +1 -1
- package/dist/components/ArticleContent/ArticleContent.esm.js +1 -2
- package/dist/components/ArticleContent/ArticleContent.esm.js.map +1 -1
- package/dist/components/AuthorBox/AuthorBox.esm.js +3 -3
- package/dist/components/AuthorBox/AuthorBox.esm.js.map +1 -1
- package/dist/components/Buttons/AddToCollectionButton.esm.js +3 -11
- package/dist/components/Buttons/AddToCollectionButton.esm.js.map +1 -1
- package/dist/components/Buttons/AskQuestionButton.esm.js +5 -8
- package/dist/components/Buttons/AskQuestionButton.esm.js.map +1 -1
- package/dist/components/Buttons/ButtonContainer.esm.js +2 -4
- package/dist/components/Buttons/ButtonContainer.esm.js.map +1 -1
- package/dist/components/Buttons/ContentHeaderButton.esm.js +27 -0
- package/dist/components/Buttons/ContentHeaderButton.esm.js.map +1 -0
- package/dist/components/Buttons/CreateCollectionButton.esm.js +3 -5
- package/dist/components/Buttons/CreateCollectionButton.esm.js.map +1 -1
- package/dist/components/Buttons/CreateLinkButton.esm.js +5 -8
- package/dist/components/Buttons/CreateLinkButton.esm.js.map +1 -1
- package/dist/components/Buttons/OpenLinkButton.esm.js +3 -1
- package/dist/components/Buttons/OpenLinkButton.esm.js.map +1 -1
- package/dist/components/Buttons/WriteArticleButton.esm.js +5 -8
- package/dist/components/Buttons/WriteArticleButton.esm.js.map +1 -1
- package/dist/components/CollectionsGrid/CollectionsGrid.esm.js +1 -0
- package/dist/components/CollectionsGrid/CollectionsGrid.esm.js.map +1 -1
- package/dist/components/CollectionsGrid/CollectionsGridContent.esm.js +3 -13
- package/dist/components/CollectionsGrid/CollectionsGridContent.esm.js.map +1 -1
- package/dist/components/CollectionsGrid/CollectionsGridItem.esm.js +155 -51
- package/dist/components/CollectionsGrid/CollectionsGridItem.esm.js.map +1 -1
- package/dist/components/CommentSection/CommentForm.esm.js +49 -20
- package/dist/components/CommentSection/CommentForm.esm.js.map +1 -1
- package/dist/components/CommentSection/CommentListItem.esm.js +38 -32
- package/dist/components/CommentSection/CommentListItem.esm.js.map +1 -1
- package/dist/components/CommentSection/CommentSection.esm.js +3 -2
- package/dist/components/CommentSection/CommentSection.esm.js.map +1 -1
- package/dist/components/ContentHeader/ContentHeader.esm.js +83 -0
- package/dist/components/ContentHeader/ContentHeader.esm.js.map +1 -0
- package/dist/components/ContentHeaderCard/ContentHeaderCard.esm.js +151 -0
- package/dist/components/ContentHeaderCard/ContentHeaderCard.esm.js.map +1 -0
- package/dist/components/EntitiesGrid/EntitiesGrid.esm.js +63 -23
- package/dist/components/EntitiesGrid/EntitiesGrid.esm.js.map +1 -1
- package/dist/components/EntitiesGrid/EntitiesGridContent.esm.js +1 -1
- package/dist/components/EntitiesGrid/EntitiesGridContent.esm.js.map +1 -1
- package/dist/components/EntitiesGrid/EntitiesGridItem.esm.js +109 -55
- package/dist/components/EntitiesGrid/EntitiesGridItem.esm.js.map +1 -1
- package/dist/components/FilterPanel/DateRangeFilter.esm.js +5 -5
- package/dist/components/FilterPanel/DateRangeFilter.esm.js.map +1 -1
- package/dist/components/FilterPanel/FilterPanel.esm.js +171 -96
- package/dist/components/FilterPanel/FilterPanel.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedCollectionsList.esm.js +61 -4
- package/dist/components/FollowedLists/FollowedCollectionsList.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedEntitiesList.esm.js +64 -6
- package/dist/components/FollowedLists/FollowedEntitiesList.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedTagsList.esm.js +61 -5
- package/dist/components/FollowedLists/FollowedTagsList.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedUsersList.esm.js +69 -10
- package/dist/components/FollowedLists/FollowedUsersList.esm.js.map +1 -1
- package/dist/components/GridItemStyles/useGridItemStyles.esm.js +16 -6
- package/dist/components/GridItemStyles/useGridItemStyles.esm.js.map +1 -1
- package/dist/components/HeaderImageInput/HeaderImageInput.esm.js +1 -1
- package/dist/components/HeaderImageInput/HeaderImageInput.esm.js.map +1 -1
- package/dist/components/HomePageCards/ImpactCard.esm.js +96 -31
- package/dist/components/HomePageCards/ImpactCard.esm.js.map +1 -1
- package/dist/components/LeftMenu/LeftMenu.esm.js +237 -121
- package/dist/components/LeftMenu/LeftMenu.esm.js.map +1 -1
- package/dist/components/MarkdownEditor/MarkdownEditor.esm.js +7 -1
- package/dist/components/MarkdownEditor/MarkdownEditor.esm.js.map +1 -1
- package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js +2 -2
- package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js.map +1 -1
- package/dist/components/PostForm/EntitiesInput.esm.js +6 -1
- package/dist/components/PostForm/EntitiesInput.esm.js.map +1 -1
- package/dist/components/PostForm/PostForm.esm.js +24 -10
- package/dist/components/PostForm/PostForm.esm.js.map +1 -1
- package/dist/components/PostForm/TagInput.esm.js +4 -3
- package/dist/components/PostForm/TagInput.esm.js.map +1 -1
- package/dist/components/PostHighlightList/PostHighlightList.esm.js +45 -28
- package/dist/components/PostHighlightList/PostHighlightList.esm.js.map +1 -1
- package/dist/components/PostsContainer/PostList.esm.js +1 -1
- package/dist/components/PostsContainer/PostList.esm.js.map +1 -1
- package/dist/components/PostsContainer/PostListItem.esm.js +130 -133
- package/dist/components/PostsContainer/PostListItem.esm.js.map +1 -1
- package/dist/components/PostsContainer/PostsContainer.esm.js +1 -1
- package/dist/components/PostsGrid/PostsGrid.esm.js +2 -2
- package/dist/components/PostsGrid/PostsGrid.esm.js.map +1 -1
- package/dist/components/PostsGrid/PostsGridContent.esm.js +1 -2
- package/dist/components/PostsGrid/PostsGridContent.esm.js.map +1 -1
- package/dist/components/PostsGrid/PostsGridItem.esm.js +117 -51
- package/dist/components/PostsGrid/PostsGridItem.esm.js.map +1 -1
- package/dist/components/QetaContext/QetaContext.esm.js +26 -0
- package/dist/components/QetaContext/QetaContext.esm.js.map +1 -0
- package/dist/components/StatsChart/StatsChart.esm.js +143 -103
- package/dist/components/StatsChart/StatsChart.esm.js.map +1 -1
- package/dist/components/SuggestionsCard/SuggestionsCard.esm.js +51 -10
- package/dist/components/SuggestionsCard/SuggestionsCard.esm.js.map +1 -1
- package/dist/components/TagsAndEntities/TagChip.esm.js +3 -0
- package/dist/components/TagsAndEntities/TagChip.esm.js.map +1 -1
- package/dist/components/TagsAndEntities/UserChip.esm.js +7 -41
- package/dist/components/TagsAndEntities/UserChip.esm.js.map +1 -1
- package/dist/components/TagsGrid/TagGridItem.esm.js +213 -108
- package/dist/components/TagsGrid/TagGridItem.esm.js.map +1 -1
- package/dist/components/TagsGrid/TagsGrid.esm.js +93 -53
- package/dist/components/TagsGrid/TagsGrid.esm.js.map +1 -1
- package/dist/components/TagsGrid/TagsGridContent.esm.js +1 -1
- package/dist/components/TagsGrid/TagsGridContent.esm.js.map +1 -1
- package/dist/components/TemplateList/TemplateList.esm.js +1 -1
- package/dist/components/TemplateList/TemplateList.esm.js.map +1 -1
- package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js +21 -6
- package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js.map +1 -1
- package/dist/components/UsersGrid/UsersGrid.esm.js +53 -15
- package/dist/components/UsersGrid/UsersGrid.esm.js.map +1 -1
- package/dist/components/UsersGrid/UsersGridContent.esm.js +1 -1
- package/dist/components/UsersGrid/UsersGridContent.esm.js.map +1 -1
- package/dist/components/UsersGrid/UsersGridItem.esm.js +148 -82
- package/dist/components/UsersGrid/UsersGridItem.esm.js.map +1 -1
- package/dist/components/Utility/QetaGridHeader.esm.js +1 -0
- package/dist/components/Utility/QetaGridHeader.esm.js.map +1 -1
- package/dist/components/Utility/VoteButtonContainer.esm.js +10 -5
- package/dist/components/Utility/VoteButtonContainer.esm.js.map +1 -1
- package/dist/index.d.ts +150 -32
- package/dist/index.esm.js +5 -4
- package/dist/index.esm.js.map +1 -1
- package/dist/translation.esm.js +65 -11
- package/dist/translation.esm.js.map +1 -1
- package/package.json +2 -2
- package/dist/components/CollectionCard/CollectionCard.esm.js +0 -81
- package/dist/components/CollectionCard/CollectionCard.esm.js.map +0 -1
- package/dist/components/ExtensionContext/ExtensionContext.esm.js +0 -23
- package/dist/components/ExtensionContext/ExtensionContext.esm.js.map +0 -1
- package/dist/components/SummaryStatsGrid/SummaryStatsGrid.esm.js +0 -154
- package/dist/components/SummaryStatsGrid/SummaryStatsGrid.esm.js.map +0 -1
- package/dist/components/TagsAndEntities/CollectionChip.esm.js +0 -92
- package/dist/components/TagsAndEntities/CollectionChip.esm.js.map +0 -1
- package/dist/components/Utility/SmallAvatar.esm.js +0 -18
- package/dist/components/Utility/SmallAvatar.esm.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useQetaApi } from '../../hooks/useQetaApi.esm.js';
|
|
3
|
-
import 'react';
|
|
3
|
+
import { useMemo } from 'react';
|
|
4
4
|
import { useRouteRef } from '@backstage/core-plugin-api';
|
|
5
5
|
import '../../api.esm.js';
|
|
6
6
|
import '@backstage/catalog-model';
|
|
@@ -12,6 +12,7 @@ import 'react-use/lib/useAsync';
|
|
|
12
12
|
import '@backstage/plugin-permission-react';
|
|
13
13
|
import { selectByPostType } from '@drodil/backstage-plugin-qeta-common';
|
|
14
14
|
import '@backstage/plugin-permission-common';
|
|
15
|
+
import { Skeleton } from '@material-ui/lab';
|
|
15
16
|
import AssistantIcon from '@material-ui/icons/Assistant';
|
|
16
17
|
import HelpOutlinedIcon from '@material-ui/icons/HelpOutlined';
|
|
17
18
|
import Check from '@material-ui/icons/Check';
|
|
@@ -20,7 +21,7 @@ import LinkIcon from '@material-ui/icons/Link';
|
|
|
20
21
|
import RefreshIcon from '@material-ui/icons/Refresh';
|
|
21
22
|
import { useNavigate } from 'react-router-dom';
|
|
22
23
|
import { questionRouteRef, articleRouteRef, linkRouteRef } from '../../routes.esm.js';
|
|
23
|
-
import { makeStyles, Card, CardHeader, IconButton, Divider,
|
|
24
|
+
import { makeStyles, Card, CardHeader, IconButton, Divider, List, ListItem, ListItemIcon, ListItemText, Typography } from '@material-ui/core';
|
|
24
25
|
import { RelativeTimeWithTooltip } from '../RelativeTimeWithTooltip/RelativeTimeWithTooltip.esm.js';
|
|
25
26
|
import { getPostDisplayDate } from '../../utils/utils.esm.js';
|
|
26
27
|
|
|
@@ -61,6 +62,9 @@ const useStyles = makeStyles((theme) => ({
|
|
|
61
62
|
padding: theme.spacing(3)
|
|
62
63
|
}
|
|
63
64
|
}));
|
|
65
|
+
const getRandomVariant = (key) => {
|
|
66
|
+
return `${key}${Math.floor(Math.random() * 5) + 1}`;
|
|
67
|
+
};
|
|
64
68
|
const SuggestionListItem = (props) => {
|
|
65
69
|
const navigate = useNavigate();
|
|
66
70
|
const classes = useStyles();
|
|
@@ -88,13 +92,17 @@ const NoCorrectAnswerSuggestionItem = (props) => {
|
|
|
88
92
|
const { suggestion } = props;
|
|
89
93
|
const { t } = useTranslationRef(qetaTranslationRef);
|
|
90
94
|
const questionRoute = useRouteRef(questionRouteRef);
|
|
95
|
+
const variant = useMemo(
|
|
96
|
+
() => getRandomVariant("suggestionsCard.noCorrectAnswer"),
|
|
97
|
+
[]
|
|
98
|
+
);
|
|
91
99
|
return /* @__PURE__ */ jsx(
|
|
92
100
|
SuggestionListItem,
|
|
93
101
|
{
|
|
94
102
|
href: questionRoute({ id: suggestion.question.id.toString(10) }),
|
|
95
103
|
icon: /* @__PURE__ */ jsx(Check, {}),
|
|
96
104
|
timestamp: /* @__PURE__ */ jsx(RelativeTimeWithTooltip, { value: suggestion.question.created }),
|
|
97
|
-
children: t(
|
|
105
|
+
children: t(variant, {
|
|
98
106
|
title: suggestion.question.title
|
|
99
107
|
})
|
|
100
108
|
}
|
|
@@ -104,13 +112,17 @@ const NewQuestionSuggestionItem = (props) => {
|
|
|
104
112
|
const { suggestion } = props;
|
|
105
113
|
const { t } = useTranslationRef(qetaTranslationRef);
|
|
106
114
|
const questionRoute = useRouteRef(questionRouteRef);
|
|
115
|
+
const variant = useMemo(
|
|
116
|
+
() => getRandomVariant("suggestionsCard.newQuestion"),
|
|
117
|
+
[]
|
|
118
|
+
);
|
|
107
119
|
return /* @__PURE__ */ jsx(
|
|
108
120
|
SuggestionListItem,
|
|
109
121
|
{
|
|
110
122
|
href: questionRoute({ id: suggestion.question.id.toString(10) }),
|
|
111
123
|
icon: /* @__PURE__ */ jsx(HelpOutlinedIcon, {}),
|
|
112
124
|
timestamp: /* @__PURE__ */ jsx(RelativeTimeWithTooltip, { value: suggestion.question.created }),
|
|
113
|
-
children: t(
|
|
125
|
+
children: t(variant, {
|
|
114
126
|
title: suggestion.question.title
|
|
115
127
|
})
|
|
116
128
|
}
|
|
@@ -128,13 +140,17 @@ const DraftPostSuggestionItem = (props) => {
|
|
|
128
140
|
articleRoute,
|
|
129
141
|
linkRoute
|
|
130
142
|
);
|
|
143
|
+
const variant = useMemo(
|
|
144
|
+
() => getRandomVariant("suggestionsCard.draftPost"),
|
|
145
|
+
[]
|
|
146
|
+
);
|
|
131
147
|
return /* @__PURE__ */ jsx(
|
|
132
148
|
SuggestionListItem,
|
|
133
149
|
{
|
|
134
150
|
href: route({ id: suggestion.post.id.toString(10) }),
|
|
135
151
|
icon: /* @__PURE__ */ jsx(HelpOutlinedIcon, {}),
|
|
136
152
|
timestamp: /* @__PURE__ */ jsx(RelativeTimeWithTooltip, { value: suggestion.post.created }),
|
|
137
|
-
children: t(
|
|
153
|
+
children: t(variant, {
|
|
138
154
|
title: suggestion.post.title
|
|
139
155
|
})
|
|
140
156
|
}
|
|
@@ -144,6 +160,10 @@ const NewArticleSuggestionItem = (props) => {
|
|
|
144
160
|
const { suggestion } = props;
|
|
145
161
|
const { t } = useTranslationRef(qetaTranslationRef);
|
|
146
162
|
const articleRoute = useRouteRef(articleRouteRef);
|
|
163
|
+
const variant = useMemo(
|
|
164
|
+
() => getRandomVariant("suggestionsCard.newArticle"),
|
|
165
|
+
[]
|
|
166
|
+
);
|
|
147
167
|
return /* @__PURE__ */ jsx(
|
|
148
168
|
SuggestionListItem,
|
|
149
169
|
{
|
|
@@ -155,7 +175,7 @@ const NewArticleSuggestionItem = (props) => {
|
|
|
155
175
|
value: getPostDisplayDate(suggestion.article)
|
|
156
176
|
}
|
|
157
177
|
),
|
|
158
|
-
children: t(
|
|
178
|
+
children: t(variant, {
|
|
159
179
|
title: suggestion.article.title
|
|
160
180
|
})
|
|
161
181
|
}
|
|
@@ -165,13 +185,17 @@ const NewLinkSuggestionItem = (props) => {
|
|
|
165
185
|
const { suggestion } = props;
|
|
166
186
|
const { t } = useTranslationRef(qetaTranslationRef);
|
|
167
187
|
const linkRoute = useRouteRef(linkRouteRef);
|
|
188
|
+
const variant = useMemo(
|
|
189
|
+
() => getRandomVariant("suggestionsCard.newLink"),
|
|
190
|
+
[]
|
|
191
|
+
);
|
|
168
192
|
return /* @__PURE__ */ jsx(
|
|
169
193
|
SuggestionListItem,
|
|
170
194
|
{
|
|
171
195
|
href: linkRoute({ id: suggestion.link.id.toString(10) }),
|
|
172
196
|
icon: /* @__PURE__ */ jsx(LinkIcon, {}),
|
|
173
197
|
timestamp: /* @__PURE__ */ jsx(RelativeTimeWithTooltip, { value: getPostDisplayDate(suggestion.link) }),
|
|
174
|
-
children: t(
|
|
198
|
+
children: t(variant, {
|
|
175
199
|
title: suggestion.link.title
|
|
176
200
|
})
|
|
177
201
|
}
|
|
@@ -189,13 +213,17 @@ const RandomPostSuggestionItem = (props) => {
|
|
|
189
213
|
articleRoute,
|
|
190
214
|
linkRoute
|
|
191
215
|
);
|
|
216
|
+
const variant = useMemo(
|
|
217
|
+
() => getRandomVariant("suggestionsCard.randomPost"),
|
|
218
|
+
[]
|
|
219
|
+
);
|
|
192
220
|
return /* @__PURE__ */ jsx(
|
|
193
221
|
SuggestionListItem,
|
|
194
222
|
{
|
|
195
223
|
href: route({ id: suggestion.post.id.toString(10) }),
|
|
196
224
|
icon: /* @__PURE__ */ jsx(HelpOutlinedIcon, {}),
|
|
197
225
|
timestamp: /* @__PURE__ */ jsx(RelativeTimeWithTooltip, { value: suggestion.post.created }),
|
|
198
|
-
children: t(
|
|
226
|
+
children: t(variant, {
|
|
199
227
|
title: suggestion.post.title
|
|
200
228
|
})
|
|
201
229
|
}
|
|
@@ -223,10 +251,23 @@ const SuggestionsCard = () => {
|
|
|
223
251
|
};
|
|
224
252
|
const renderContent = () => {
|
|
225
253
|
if (loading) {
|
|
226
|
-
return /* @__PURE__ */ jsx(
|
|
254
|
+
return /* @__PURE__ */ jsx(List, { children: Array.from(new Array(5)).map((_, index) => /* @__PURE__ */ jsxs(ListItem, { className: classes.listItem, children: [
|
|
255
|
+
/* @__PURE__ */ jsx(ListItemIcon, { className: classes.listItemIcon, children: /* @__PURE__ */ jsx(Skeleton, { variant: "circle", width: 24, height: 24 }) }),
|
|
256
|
+
/* @__PURE__ */ jsx(
|
|
257
|
+
ListItemText,
|
|
258
|
+
{
|
|
259
|
+
primary: /* @__PURE__ */ jsx(Skeleton, { variant: "text", width: "80%" }),
|
|
260
|
+
secondary: /* @__PURE__ */ jsx(Skeleton, { variant: "text", width: "40%" }),
|
|
261
|
+
className: classes.listItemText
|
|
262
|
+
}
|
|
263
|
+
)
|
|
264
|
+
] }, index)) });
|
|
227
265
|
}
|
|
228
266
|
if (suggestions.length === 0) {
|
|
229
|
-
return /* @__PURE__ */
|
|
267
|
+
return /* @__PURE__ */ jsxs("div", { className: classes.emptyState, children: [
|
|
268
|
+
/* @__PURE__ */ jsx(AssistantIcon, { style: { fontSize: 40 } }),
|
|
269
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body1", children: t("suggestionsCard.noSuggestions") })
|
|
270
|
+
] });
|
|
230
271
|
}
|
|
231
272
|
return /* @__PURE__ */ jsx(List, { children: suggestions.map((suggestion, index) => {
|
|
232
273
|
const SuggestionComponent = suggestionTypeMap[suggestion.type];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SuggestionsCard.esm.js","sources":["../../../src/components/SuggestionsCard/SuggestionsCard.tsx"],"sourcesContent":["import { useQetaApi } from '../../hooks';\nimport { ReactNode } from 'react';\nimport {\n DraftPostSuggestion,\n NewArticleSuggestion,\n NewLinkSuggestion,\n NewQuestionSuggestion,\n NoCorrectAnswerSuggestion,\n selectByPostType,\n SuggestionsResponse,\n SuggestionType,\n} from '@drodil/backstage-plugin-qeta-common';\nimport AssistantIcon from '@material-ui/icons/Assistant';\nimport HelpOutlinedIcon from '@material-ui/icons/HelpOutlined';\nimport CheckIcon from '@material-ui/icons/Check';\nimport CollectionsBookmarkIcon from '@material-ui/icons/CollectionsBookmark';\nimport LinkIcon from '@material-ui/icons/Link';\nimport RefreshIcon from '@material-ui/icons/Refresh';\nimport { useNavigate } from 'react-router-dom';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { articleRouteRef, linkRouteRef, questionRouteRef } from '../../routes';\nimport {\n Card,\n CardHeader,\n CircularProgress,\n Divider,\n IconButton,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n makeStyles,\n Typography,\n} from '@material-ui/core';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { RelativeTimeWithTooltip } from '../RelativeTimeWithTooltip';\nimport { getPostDisplayDate } from '../../utils/utils';\n\nconst useStyles = makeStyles(theme => ({\n card: {\n height: '100%',\n },\n header: {\n paddingBottom: theme.spacing(1),\n },\n listItem: {\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n transition: 'background-color 0.2s ease',\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n },\n listItemText: {\n marginTop: theme.spacing(0.5),\n paddingLeft: theme.spacing(2),\n },\n listItemIcon: {\n minWidth: theme.spacing(5),\n paddingLeft: theme.spacing(1),\n },\n timestamp: {\n color: theme.palette.text.secondary,\n },\n emptyState: {\n padding: theme.spacing(3),\n textAlign: 'center',\n color: theme.palette.text.secondary,\n },\n loadingContainer: {\n display: 'flex',\n justifyContent: 'center',\n padding: theme.spacing(3),\n },\n}));\n\nconst SuggestionListItem = (props: {\n children: ReactNode;\n href: string;\n icon?: ReactNode;\n timestamp?: ReactNode;\n}) => {\n const navigate = useNavigate();\n const classes = useStyles();\n return (\n <ListItem\n button\n onClick={() => navigate(props.href)}\n className={classes.listItem}\n >\n {props.icon && (\n <ListItemIcon className={classes.listItemIcon}>\n {props.icon}\n </ListItemIcon>\n )}\n <ListItemText\n primary={props.children}\n secondary={props.timestamp}\n className={classes.listItemText}\n />\n </ListItem>\n );\n};\n\nconst NoCorrectAnswerSuggestionItem = (props: {\n suggestion: NoCorrectAnswerSuggestion;\n}) => {\n const { suggestion } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const questionRoute = useRouteRef(questionRouteRef);\n return (\n <SuggestionListItem\n href={questionRoute({ id: suggestion.question.id.toString(10) })}\n icon={<CheckIcon />}\n timestamp={\n <RelativeTimeWithTooltip value={suggestion.question.created} />\n }\n >\n {t('suggestionsCard.noCorrectAnswer', {\n title: suggestion.question.title,\n })}\n </SuggestionListItem>\n );\n};\n\nconst NewQuestionSuggestionItem = (props: {\n suggestion: NewQuestionSuggestion;\n}) => {\n const { suggestion } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const questionRoute = useRouteRef(questionRouteRef);\n return (\n <SuggestionListItem\n href={questionRoute({ id: suggestion.question.id.toString(10) })}\n icon={<HelpOutlinedIcon />}\n timestamp={\n <RelativeTimeWithTooltip value={suggestion.question.created} />\n }\n >\n {t('suggestionsCard.newQuestion', {\n title: suggestion.question.title,\n })}\n </SuggestionListItem>\n );\n};\n\nconst DraftPostSuggestionItem = (props: {\n suggestion: DraftPostSuggestion;\n}) => {\n const { suggestion } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const questionRoute = useRouteRef(questionRouteRef);\n const articleRoute = useRouteRef(articleRouteRef);\n const linkRoute = useRouteRef(linkRouteRef);\n const route = selectByPostType(\n suggestion.post.type,\n questionRoute,\n articleRoute,\n linkRoute,\n );\n return (\n <SuggestionListItem\n href={route({ id: suggestion.post.id.toString(10) })}\n icon={<HelpOutlinedIcon />}\n timestamp={<RelativeTimeWithTooltip value={suggestion.post.created} />}\n >\n {t('suggestionsCard.draftPost', {\n title: suggestion.post.title,\n })}\n </SuggestionListItem>\n );\n};\n\nconst NewArticleSuggestionItem = (props: {\n suggestion: NewArticleSuggestion;\n}) => {\n const { suggestion } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const articleRoute = useRouteRef(articleRouteRef);\n return (\n <SuggestionListItem\n href={articleRoute({ id: suggestion.article.id.toString(10) })}\n icon={<CollectionsBookmarkIcon />}\n timestamp={\n <RelativeTimeWithTooltip\n value={getPostDisplayDate(suggestion.article)}\n />\n }\n >\n {t('suggestionsCard.newArticle', {\n title: suggestion.article.title,\n })}\n </SuggestionListItem>\n );\n};\n\nconst NewLinkSuggestionItem = (props: { suggestion: NewLinkSuggestion }) => {\n const { suggestion } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const linkRoute = useRouteRef(linkRouteRef);\n return (\n <SuggestionListItem\n href={linkRoute({ id: suggestion.link.id.toString(10) })}\n icon={<LinkIcon />}\n timestamp={\n <RelativeTimeWithTooltip value={getPostDisplayDate(suggestion.link)} />\n }\n >\n {t('suggestionsCard.newLink', {\n title: suggestion.link.title,\n })}\n </SuggestionListItem>\n );\n};\n\nconst RandomPostSuggestionItem = (props: {\n suggestion: DraftPostSuggestion;\n}) => {\n const { suggestion } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const questionRoute = useRouteRef(questionRouteRef);\n const articleRoute = useRouteRef(articleRouteRef);\n const linkRoute = useRouteRef(linkRouteRef);\n const route = selectByPostType(\n suggestion.post.type,\n questionRoute,\n articleRoute,\n linkRoute,\n );\n return (\n <SuggestionListItem\n href={route({ id: suggestion.post.id.toString(10) })}\n icon={<HelpOutlinedIcon />}\n timestamp={<RelativeTimeWithTooltip value={suggestion.post.created} />}\n >\n {t('suggestionsCard.randomPost', {\n title: suggestion.post.title,\n })}\n </SuggestionListItem>\n );\n};\n\nconst suggestionTypeMap: Record<SuggestionType, any> = {\n noCorrectAnswer: NoCorrectAnswerSuggestionItem,\n newQuestion: NewQuestionSuggestionItem,\n newArticle: NewArticleSuggestionItem,\n newLink: NewLinkSuggestionItem,\n draftPost: DraftPostSuggestionItem,\n randomPost: RandomPostSuggestionItem,\n};\n\nexport const SuggestionsCard = () => {\n const { t } = useTranslationRef(qetaTranslationRef);\n const classes = useStyles();\n const {\n value: response,\n loading,\n retry,\n } = useQetaApi<SuggestionsResponse>(api => api.getSuggestions(), []);\n\n const suggestions = response?.suggestions ?? [];\n\n const handleRefresh = () => {\n retry();\n };\n\n const renderContent = () => {\n if (loading) {\n return (\n <div className={classes.loadingContainer}>\n <CircularProgress size={24} />\n </div>\n );\n }\n\n if (suggestions.length === 0) {\n return (\n <div className={classes.emptyState}>\n <Typography variant=\"body1\">\n {t('suggestionsCard.noSuggestions')}\n </Typography>\n </div>\n );\n }\n\n return (\n <List>\n {suggestions.map((suggestion, index) => {\n const SuggestionComponent = suggestionTypeMap[suggestion.type];\n return (\n <div key={suggestion.id}>\n <SuggestionComponent suggestion={suggestion} />\n {index < suggestions.length - 1 && <Divider />}\n </div>\n );\n })}\n </List>\n );\n };\n\n return (\n <Card className={classes.card}>\n <CardHeader\n className={classes.header}\n title={t('suggestionsCard.title')}\n avatar={<AssistantIcon />}\n titleTypographyProps={{ variant: 'h5' }}\n action={\n <IconButton onClick={handleRefresh} disabled={loading}>\n <RefreshIcon />\n </IconButton>\n }\n />\n <Divider />\n {renderContent()}\n </Card>\n );\n};\n"],"names":["CheckIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SuggestionsCard.esm.js","sources":["../../../src/components/SuggestionsCard/SuggestionsCard.tsx"],"sourcesContent":["import { useQetaApi } from '../../hooks';\nimport { ReactNode, useMemo } from 'react';\nimport { Skeleton } from '@material-ui/lab';\nimport {\n DraftPostSuggestion,\n NewArticleSuggestion,\n NewLinkSuggestion,\n NewQuestionSuggestion,\n NoCorrectAnswerSuggestion,\n selectByPostType,\n SuggestionsResponse,\n SuggestionType,\n} from '@drodil/backstage-plugin-qeta-common';\nimport AssistantIcon from '@material-ui/icons/Assistant';\nimport HelpOutlinedIcon from '@material-ui/icons/HelpOutlined';\nimport CheckIcon from '@material-ui/icons/Check';\nimport CollectionsBookmarkIcon from '@material-ui/icons/CollectionsBookmark';\nimport LinkIcon from '@material-ui/icons/Link';\nimport RefreshIcon from '@material-ui/icons/Refresh';\nimport { useNavigate } from 'react-router-dom';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { articleRouteRef, linkRouteRef, questionRouteRef } from '../../routes';\nimport {\n Card,\n CardHeader,\n Divider,\n IconButton,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n makeStyles,\n Typography,\n} from '@material-ui/core';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { RelativeTimeWithTooltip } from '../RelativeTimeWithTooltip';\nimport { getPostDisplayDate } from '../../utils/utils';\n\nconst useStyles = makeStyles(theme => ({\n card: {\n height: '100%',\n },\n header: {\n paddingBottom: theme.spacing(1),\n },\n listItem: {\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n transition: 'background-color 0.2s ease',\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n },\n listItemText: {\n marginTop: theme.spacing(0.5),\n paddingLeft: theme.spacing(2),\n },\n listItemIcon: {\n minWidth: theme.spacing(5),\n paddingLeft: theme.spacing(1),\n },\n timestamp: {\n color: theme.palette.text.secondary,\n },\n emptyState: {\n padding: theme.spacing(3),\n textAlign: 'center',\n color: theme.palette.text.secondary,\n },\n loadingContainer: {\n display: 'flex',\n justifyContent: 'center',\n padding: theme.spacing(3),\n },\n}));\n\nconst getRandomVariant = (key: string) => {\n return `${key}${Math.floor(Math.random() * 5) + 1}`;\n};\n\nconst SuggestionListItem = (props: {\n children: ReactNode;\n href: string;\n icon?: ReactNode;\n timestamp?: ReactNode;\n}) => {\n const navigate = useNavigate();\n const classes = useStyles();\n return (\n <ListItem\n button\n onClick={() => navigate(props.href)}\n className={classes.listItem}\n >\n {props.icon && (\n <ListItemIcon className={classes.listItemIcon}>\n {props.icon}\n </ListItemIcon>\n )}\n <ListItemText\n primary={props.children}\n secondary={props.timestamp}\n className={classes.listItemText}\n />\n </ListItem>\n );\n};\n\nconst NoCorrectAnswerSuggestionItem = (props: {\n suggestion: NoCorrectAnswerSuggestion;\n}) => {\n const { suggestion } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const questionRoute = useRouteRef(questionRouteRef);\n const variant = useMemo(\n () => getRandomVariant('suggestionsCard.noCorrectAnswer'),\n [],\n );\n return (\n <SuggestionListItem\n href={questionRoute({ id: suggestion.question.id.toString(10) })}\n icon={<CheckIcon />}\n timestamp={\n <RelativeTimeWithTooltip value={suggestion.question.created} />\n }\n >\n {t(variant as any, {\n title: suggestion.question.title,\n })}\n </SuggestionListItem>\n );\n};\n\nconst NewQuestionSuggestionItem = (props: {\n suggestion: NewQuestionSuggestion;\n}) => {\n const { suggestion } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const questionRoute = useRouteRef(questionRouteRef);\n const variant = useMemo(\n () => getRandomVariant('suggestionsCard.newQuestion'),\n [],\n );\n return (\n <SuggestionListItem\n href={questionRoute({ id: suggestion.question.id.toString(10) })}\n icon={<HelpOutlinedIcon />}\n timestamp={\n <RelativeTimeWithTooltip value={suggestion.question.created} />\n }\n >\n {t(variant as any, {\n title: suggestion.question.title,\n })}\n </SuggestionListItem>\n );\n};\n\nconst DraftPostSuggestionItem = (props: {\n suggestion: DraftPostSuggestion;\n}) => {\n const { suggestion } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const questionRoute = useRouteRef(questionRouteRef);\n const articleRoute = useRouteRef(articleRouteRef);\n const linkRoute = useRouteRef(linkRouteRef);\n const route = selectByPostType(\n suggestion.post.type,\n questionRoute,\n articleRoute,\n linkRoute,\n );\n const variant = useMemo(\n () => getRandomVariant('suggestionsCard.draftPost'),\n [],\n );\n return (\n <SuggestionListItem\n href={route({ id: suggestion.post.id.toString(10) })}\n icon={<HelpOutlinedIcon />}\n timestamp={<RelativeTimeWithTooltip value={suggestion.post.created} />}\n >\n {t(variant as any, {\n title: suggestion.post.title,\n })}\n </SuggestionListItem>\n );\n};\n\nconst NewArticleSuggestionItem = (props: {\n suggestion: NewArticleSuggestion;\n}) => {\n const { suggestion } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const articleRoute = useRouteRef(articleRouteRef);\n const variant = useMemo(\n () => getRandomVariant('suggestionsCard.newArticle'),\n [],\n );\n return (\n <SuggestionListItem\n href={articleRoute({ id: suggestion.article.id.toString(10) })}\n icon={<CollectionsBookmarkIcon />}\n timestamp={\n <RelativeTimeWithTooltip\n value={getPostDisplayDate(suggestion.article)}\n />\n }\n >\n {t(variant as any, {\n title: suggestion.article.title,\n })}\n </SuggestionListItem>\n );\n};\n\nconst NewLinkSuggestionItem = (props: { suggestion: NewLinkSuggestion }) => {\n const { suggestion } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const linkRoute = useRouteRef(linkRouteRef);\n const variant = useMemo(\n () => getRandomVariant('suggestionsCard.newLink'),\n [],\n );\n return (\n <SuggestionListItem\n href={linkRoute({ id: suggestion.link.id.toString(10) })}\n icon={<LinkIcon />}\n timestamp={\n <RelativeTimeWithTooltip value={getPostDisplayDate(suggestion.link)} />\n }\n >\n {t(variant as any, {\n title: suggestion.link.title,\n })}\n </SuggestionListItem>\n );\n};\n\nconst RandomPostSuggestionItem = (props: {\n suggestion: DraftPostSuggestion;\n}) => {\n const { suggestion } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const questionRoute = useRouteRef(questionRouteRef);\n const articleRoute = useRouteRef(articleRouteRef);\n const linkRoute = useRouteRef(linkRouteRef);\n const route = selectByPostType(\n suggestion.post.type,\n questionRoute,\n articleRoute,\n linkRoute,\n );\n const variant = useMemo(\n () => getRandomVariant('suggestionsCard.randomPost'),\n [],\n );\n return (\n <SuggestionListItem\n href={route({ id: suggestion.post.id.toString(10) })}\n icon={<HelpOutlinedIcon />}\n timestamp={<RelativeTimeWithTooltip value={suggestion.post.created} />}\n >\n {t(variant as any, {\n title: suggestion.post.title,\n })}\n </SuggestionListItem>\n );\n};\n\nconst suggestionTypeMap: Record<SuggestionType, any> = {\n noCorrectAnswer: NoCorrectAnswerSuggestionItem,\n newQuestion: NewQuestionSuggestionItem,\n newArticle: NewArticleSuggestionItem,\n newLink: NewLinkSuggestionItem,\n draftPost: DraftPostSuggestionItem,\n randomPost: RandomPostSuggestionItem,\n};\n\nexport const SuggestionsCard = () => {\n const { t } = useTranslationRef(qetaTranslationRef);\n const classes = useStyles();\n const {\n value: response,\n loading,\n retry,\n } = useQetaApi<SuggestionsResponse>(api => api.getSuggestions(), []);\n\n const suggestions = response?.suggestions ?? [];\n\n const handleRefresh = () => {\n retry();\n };\n\n const renderContent = () => {\n if (loading) {\n return (\n <List>\n {Array.from(new Array(5)).map((_, index) => (\n <ListItem key={index} className={classes.listItem}>\n <ListItemIcon className={classes.listItemIcon}>\n <Skeleton variant=\"circle\" width={24} height={24} />\n </ListItemIcon>\n <ListItemText\n primary={<Skeleton variant=\"text\" width=\"80%\" />}\n secondary={<Skeleton variant=\"text\" width=\"40%\" />}\n className={classes.listItemText}\n />\n </ListItem>\n ))}\n </List>\n );\n }\n\n if (suggestions.length === 0) {\n return (\n <div className={classes.emptyState}>\n <AssistantIcon style={{ fontSize: 40 }} />\n <Typography variant=\"body1\">\n {t('suggestionsCard.noSuggestions')}\n </Typography>\n </div>\n );\n }\n\n return (\n <List>\n {suggestions.map((suggestion, index) => {\n const SuggestionComponent = suggestionTypeMap[suggestion.type];\n return (\n <div key={suggestion.id}>\n <SuggestionComponent suggestion={suggestion} />\n {index < suggestions.length - 1 && <Divider />}\n </div>\n );\n })}\n </List>\n );\n };\n\n return (\n <Card className={classes.card}>\n <CardHeader\n className={classes.header}\n title={t('suggestionsCard.title')}\n avatar={<AssistantIcon />}\n titleTypographyProps={{ variant: 'h5' }}\n action={\n <IconButton onClick={handleRefresh} disabled={loading}>\n <RefreshIcon />\n </IconButton>\n }\n />\n <Divider />\n {renderContent()}\n </Card>\n );\n};\n"],"names":["CheckIcon"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TagChip.esm.js","sources":["../../../src/components/TagsAndEntities/TagChip.tsx"],"sourcesContent":["import { CSSProperties, useEffect, useState } from 'react';\nimport { useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport { tagRouteRef } from '../../routes';\nimport { qetaApiRef } from '../../api';\nimport { TagResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { useNavigate } from 'react-router-dom';\nimport { MarkdownRenderer } from '../MarkdownRenderer/MarkdownRenderer';\nimport { useTagsFollow } from '../../hooks';\nimport {\n Box,\n Button,\n Chip,\n Grid,\n Tooltip,\n Typography,\n} from '@material-ui/core';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\nimport Visibility from '@material-ui/icons/Visibility';\nimport LoyaltyOutlined from '@material-ui/icons/LoyaltyOutlined';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { useTooltipStyles } from '../../hooks/useTooltipStyles';\n\nconst cache: Map<string, TagResponse> = new Map();\n\nconst TagTooltip = (props: { tag: string }) => {\n const { tag } = props;\n const qetaApi = useApi(qetaApiRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n const tags = useTagsFollow();\n const [resp, setResp] = useState<undefined | TagResponse>();\n\n useEffect(() => {\n if (cache.has(tag)) {\n setResp(cache.get(tag));\n return;\n }\n\n qetaApi.getTag(tag).then(res => {\n if (res) {\n cache.set(tag, res);\n setResp(res);\n } else {\n setResp({\n id: 0,\n tag,\n postsCount: 0,\n followerCount: 0,\n description: t('tagChip.nonExistingTag'),\n });\n }\n });\n }, [qetaApi, tag, t]);\n\n if (!resp) {\n return null;\n }\n\n return (\n <Grid container style={{ padding: '0.5em' }} spacing={1}>\n <Grid item xs={12}>\n <Box style={{ display: 'flex', alignItems: 'center' }}>\n <LoyaltyOutlined fontSize=\"small\" />\n <Typography\n variant=\"subtitle1\"\n style={{\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n }}\n >\n {tag}\n </Typography>\n </Box>\n {resp.id > 0 && (\n <Typography variant=\"subtitle2\">\n {t('common.posts', { count: resp.postsCount, itemType: 'post' })}\n {' · '}\n {t('common.followers', { count: resp.followerCount })}\n </Typography>\n )}\n </Grid>\n {resp.description && (\n <Grid item xs={12}>\n <MarkdownRenderer content={resp.description} />\n </Grid>\n )}\n {!tags.loading && resp.id !== 0 && (\n <Grid item xs={12}>\n <Button\n size=\"small\"\n variant=\"outlined\"\n color={tags.isFollowingTag(tag) ? 'secondary' : 'primary'}\n onClick={() => {\n if (tags.isFollowingTag(tag)) {\n tags.unfollowTag(tag);\n } else {\n tags.followTag(tag);\n }\n }}\n startIcon={\n tags.isFollowingTag(tag) ? <VisibilityOff /> : <Visibility />\n }\n >\n {tags.isFollowingTag(tag)\n ? t('tagButton.unfollow')\n : t('tagButton.follow')}\n </Button>\n </Grid>\n )}\n </Grid>\n );\n};\n\nexport const TagChip = (props: {\n tag: string;\n style?: CSSProperties;\n useHref?: boolean;\n}) => {\n const tagRoute = useRouteRef(tagRouteRef);\n const navigate = useNavigate();\n const { tag } = props;\n const classes = useTooltipStyles();\n return (\n <Tooltip\n arrow\n title={<TagTooltip tag={tag} />}\n enterDelay={400}\n interactive\n classes={{\n tooltip: classes.tooltip,\n arrow: classes.tooltipArrow,\n }}\n >\n <Chip\n label={tag}\n size=\"small\"\n className=\"qetaTagChip\"\n component=\"a\"\n style={props.style}\n href={props.useHref ? tagRoute({ tag }) : undefined}\n target={props.useHref ? '_blank' : undefined}\n onClick={\n !props.useHref\n ? () => {\n navigate(tagRoute({ tag }));\n }\n : undefined\n }\n clickable\n />\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAuBA,MAAM,KAAA,uBAAsC,GAAI,EAAA;AAEhD,MAAM,UAAA,GAAa,CAAC,KAA2B,KAAA;AAC7C,EAAM,MAAA,EAAE,KAAQ,GAAA,KAAA;AAChB,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA;AACjC,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,OAAO,aAAc,EAAA;AAC3B,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,QAAkC,EAAA;AAE1D,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,KAAA,CAAM,GAAI,CAAA,GAAG,CAAG,EAAA;AAClB,MAAQ,OAAA,CAAA,KAAA,CAAM,GAAI,CAAA,GAAG,CAAC,CAAA;AACtB,MAAA;AAAA;AAGF,IAAA,OAAA,CAAQ,MAAO,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,CAAO,GAAA,KAAA;AAC9B,MAAA,IAAI,GAAK,EAAA;AACP,QAAM,KAAA,CAAA,GAAA,CAAI,KAAK,GAAG,CAAA;AAClB,QAAA,OAAA,CAAQ,GAAG,CAAA;AAAA,OACN,MAAA;AACL,QAAQ,OAAA,CAAA;AAAA,UACN,EAAI,EAAA,CAAA;AAAA,UACJ,GAAA;AAAA,UACA,UAAY,EAAA,CAAA;AAAA,UACZ,aAAe,EAAA,CAAA;AAAA,UACf,WAAA,EAAa,EAAE,wBAAwB;AAAA,SACxC,CAAA;AAAA;AACH,KACD,CAAA;AAAA,GACA,EAAA,CAAC,OAAS,EAAA,GAAA,EAAK,CAAC,CAAC,CAAA;AAEpB,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IAAO,OAAA,IAAA;AAAA;AAGT,EACE,uBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAS,IAAC,EAAA,KAAA,EAAO,EAAE,OAAS,EAAA,OAAA,EAAW,EAAA,OAAA,EAAS,CACpD,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,EACb,EAAA,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,OAAI,KAAO,EAAA,EAAE,SAAS,MAAQ,EAAA,UAAA,EAAY,UACzC,EAAA,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,eAAA,EAAA,EAAgB,UAAS,OAAQ,EAAA,CAAA;AAAA,wBAClC,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,OAAQ,EAAA,WAAA;AAAA,YACR,KAAO,EAAA;AAAA,cACL,YAAc,EAAA,UAAA;AAAA,cACd,QAAU,EAAA,QAAA;AAAA,cACV,UAAY,EAAA;AAAA,aACd;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA;AACH,OACF,EAAA,CAAA;AAAA,MACC,KAAK,EAAK,GAAA,CAAA,oBACR,IAAA,CAAA,UAAA,EAAA,EAAW,SAAQ,WACjB,EAAA,QAAA,EAAA;AAAA,QAAA,CAAA,CAAE,gBAAgB,EAAE,KAAA,EAAO,KAAK,UAAY,EAAA,QAAA,EAAU,QAAQ,CAAA;AAAA,QAC9D,QAAA;AAAA,QACA,EAAE,kBAAoB,EAAA,EAAE,KAAO,EAAA,IAAA,CAAK,eAAe;AAAA,OACtD,EAAA;AAAA,KAEJ,EAAA,CAAA;AAAA,IACC,IAAK,CAAA,WAAA,oBACH,GAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,EAAI,EAAA,EAAA,EACb,QAAC,kBAAA,GAAA,CAAA,gBAAA,EAAA,EAAiB,OAAS,EAAA,IAAA,CAAK,aAAa,CAC/C,EAAA,CAAA;AAAA,IAED,CAAC,IAAK,CAAA,OAAA,IAAW,IAAK,CAAA,EAAA,KAAO,CAC5B,oBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,EACb,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,IAAK,EAAA,OAAA;AAAA,QACL,OAAQ,EAAA,UAAA;AAAA,QACR,KAAO,EAAA,IAAA,CAAK,cAAe,CAAA,GAAG,IAAI,WAAc,GAAA,SAAA;AAAA,QAChD,SAAS,MAAM;AACb,UAAI,IAAA,IAAA,CAAK,cAAe,CAAA,GAAG,CAAG,EAAA;AAC5B,YAAA,IAAA,CAAK,YAAY,GAAG,CAAA;AAAA,WACf,MAAA;AACL,YAAA,IAAA,CAAK,UAAU,GAAG,CAAA;AAAA;AACpB,SACF;AAAA,QACA,SAAA,EACE,KAAK,cAAe,CAAA,GAAG,oBAAK,GAAA,CAAA,aAAA,EAAA,EAAc,CAAK,mBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,CAAA;AAAA,QAG5D,QAAA,EAAA,IAAA,CAAK,eAAe,GAAG,CAAA,GACpB,EAAE,oBAAoB,CAAA,GACtB,EAAE,kBAAkB;AAAA;AAAA,KAE5B,EAAA;AAAA,GAEJ,EAAA,CAAA;AAEJ,CAAA;AAEa,MAAA,OAAA,GAAU,CAAC,KAIlB,KAAA;AACJ,EAAM,MAAA,QAAA,GAAW,YAAY,WAAW,CAAA;AACxC,EAAA,MAAM,WAAW,WAAY,EAAA;AAC7B,EAAM,MAAA,EAAE,KAAQ,GAAA,KAAA;AAChB,EAAA,MAAM,UAAU,gBAAiB,EAAA;AACjC,EACE,uBAAA,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,KAAK,EAAA,IAAA;AAAA,MACL,KAAA,kBAAQ,GAAA,CAAA,UAAA,EAAA,EAAW,GAAU,EAAA,CAAA;AAAA,MAC7B,UAAY,EAAA,GAAA;AAAA,MACZ,WAAW,EAAA,IAAA;AAAA,MACX,OAAS,EAAA;AAAA,QACP,SAAS,OAAQ,CAAA,OAAA;AAAA,QACjB,OAAO,OAAQ,CAAA;AAAA,OACjB;AAAA,MAEA,QAAA,kBAAA,GAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,KAAO,EAAA,GAAA;AAAA,UACP,IAAK,EAAA,OAAA;AAAA,UACL,SAAU,EAAA,aAAA;AAAA,UACV,SAAU,EAAA,GAAA;AAAA,UACV,OAAO,KAAM,CAAA,KAAA;AAAA,UACb,MAAM,KAAM,CAAA,OAAA,GAAU,SAAS,EAAE,GAAA,EAAK,CAAI,GAAA,KAAA,CAAA;AAAA,UAC1C,MAAA,EAAQ,KAAM,CAAA,OAAA,GAAU,QAAW,GAAA,KAAA,CAAA;AAAA,UACnC,OACE,EAAA,CAAC,KAAM,CAAA,OAAA,GACH,MAAM;AACJ,YAAA,QAAA,CAAS,QAAS,CAAA,EAAE,GAAI,EAAC,CAAC,CAAA;AAAA,WAE5B,GAAA,KAAA,CAAA;AAAA,UAEN,SAAS,EAAA;AAAA;AAAA;AACX;AAAA,GACF;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"TagChip.esm.js","sources":["../../../src/components/TagsAndEntities/TagChip.tsx"],"sourcesContent":["import { CSSProperties, useEffect, useState } from 'react';\nimport { useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport { tagRouteRef } from '../../routes';\nimport { qetaApiRef } from '../../api';\nimport { TagResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { useNavigate } from 'react-router-dom';\nimport { MarkdownRenderer } from '../MarkdownRenderer/MarkdownRenderer';\nimport { useTagsFollow } from '../../hooks';\nimport {\n Box,\n Button,\n Chip,\n Grid,\n Tooltip,\n Typography,\n} from '@material-ui/core';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\nimport Visibility from '@material-ui/icons/Visibility';\nimport LoyaltyOutlined from '@material-ui/icons/LoyaltyOutlined';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { useTooltipStyles } from '../../hooks/useTooltipStyles';\n\nconst cache: Map<string, TagResponse> = new Map();\n\nconst TagTooltip = (props: { tag: string }) => {\n const { tag } = props;\n const qetaApi = useApi(qetaApiRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n const tags = useTagsFollow();\n const [resp, setResp] = useState<undefined | TagResponse>();\n\n useEffect(() => {\n if (cache.has(tag)) {\n setResp(cache.get(tag));\n return;\n }\n\n qetaApi.getTag(tag).then(res => {\n if (res) {\n cache.set(tag, res);\n setResp(res);\n } else {\n setResp({\n id: 0,\n tag,\n postsCount: 0,\n questionsCount: 0,\n articlesCount: 0,\n linksCount: 0,\n followerCount: 0,\n description: t('tagChip.nonExistingTag'),\n });\n }\n });\n }, [qetaApi, tag, t]);\n\n if (!resp) {\n return null;\n }\n\n return (\n <Grid container style={{ padding: '0.5em' }} spacing={1}>\n <Grid item xs={12}>\n <Box style={{ display: 'flex', alignItems: 'center' }}>\n <LoyaltyOutlined fontSize=\"small\" />\n <Typography\n variant=\"subtitle1\"\n style={{\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n }}\n >\n {tag}\n </Typography>\n </Box>\n {resp.id > 0 && (\n <Typography variant=\"subtitle2\">\n {t('common.posts', { count: resp.postsCount, itemType: 'post' })}\n {' · '}\n {t('common.followers', { count: resp.followerCount })}\n </Typography>\n )}\n </Grid>\n {resp.description && (\n <Grid item xs={12}>\n <MarkdownRenderer content={resp.description} />\n </Grid>\n )}\n {!tags.loading && resp.id !== 0 && (\n <Grid item xs={12}>\n <Button\n size=\"small\"\n variant=\"outlined\"\n color={tags.isFollowingTag(tag) ? 'secondary' : 'primary'}\n onClick={() => {\n if (tags.isFollowingTag(tag)) {\n tags.unfollowTag(tag);\n } else {\n tags.followTag(tag);\n }\n }}\n startIcon={\n tags.isFollowingTag(tag) ? <VisibilityOff /> : <Visibility />\n }\n >\n {tags.isFollowingTag(tag)\n ? t('tagButton.unfollow')\n : t('tagButton.follow')}\n </Button>\n </Grid>\n )}\n </Grid>\n );\n};\n\nexport const TagChip = (props: {\n tag: string;\n style?: CSSProperties;\n useHref?: boolean;\n}) => {\n const tagRoute = useRouteRef(tagRouteRef);\n const navigate = useNavigate();\n const { tag } = props;\n const classes = useTooltipStyles();\n return (\n <Tooltip\n arrow\n title={<TagTooltip tag={tag} />}\n enterDelay={400}\n interactive\n classes={{\n tooltip: classes.tooltip,\n arrow: classes.tooltipArrow,\n }}\n >\n <Chip\n label={tag}\n size=\"small\"\n className=\"qetaTagChip\"\n component=\"a\"\n style={props.style}\n href={props.useHref ? tagRoute({ tag }) : undefined}\n target={props.useHref ? '_blank' : undefined}\n onClick={\n !props.useHref\n ? () => {\n navigate(tagRoute({ tag }));\n }\n : undefined\n }\n clickable\n />\n </Tooltip>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { jsxs, jsx
|
|
2
|
-
import
|
|
3
|
-
import
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import '@backstage/core-plugin-api';
|
|
3
|
+
import '../../routes.esm.js';
|
|
4
4
|
import '../../api.esm.js';
|
|
5
5
|
import 'react-use';
|
|
6
6
|
import 'react';
|
|
@@ -10,9 +10,9 @@ import { useIdentityApi } from '../../hooks/useIdentityApi.esm.js';
|
|
|
10
10
|
import '@backstage/plugin-permission-react';
|
|
11
11
|
import '@drodil/backstage-plugin-qeta-common';
|
|
12
12
|
import '@backstage/plugin-permission-common';
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import { Grid, Box, Avatar, Typography, Button
|
|
13
|
+
import '@backstage/plugin-catalog-react';
|
|
14
|
+
import 'react-router-dom';
|
|
15
|
+
import { Grid, Box, Avatar, Typography, Button } from '@material-ui/core';
|
|
16
16
|
import VisibilityOff from '@material-ui/icons/VisibilityOff';
|
|
17
17
|
import Visibility from '@material-ui/icons/Visibility';
|
|
18
18
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
@@ -77,40 +77,6 @@ const UserTooltip = (props) => {
|
|
|
77
77
|
) })
|
|
78
78
|
] });
|
|
79
79
|
};
|
|
80
|
-
const UserChip = (props) => {
|
|
81
|
-
const navigate = useNavigate();
|
|
82
|
-
const { entityRef } = props;
|
|
83
|
-
const userRoute = useRouteRef(userRouteRef);
|
|
84
|
-
const { t } = useTranslationRef(qetaTranslationRef);
|
|
85
|
-
const { primaryTitle: userName } = useEntityPresentation(
|
|
86
|
-
entityRef.startsWith("user:") ? entityRef : `user:${entityRef}`
|
|
87
|
-
);
|
|
88
|
-
if (entityRef === "anonymous") {
|
|
89
|
-
return /* @__PURE__ */ jsx(Fragment, { children: t("userLink.anonymous") });
|
|
90
|
-
}
|
|
91
|
-
return /* @__PURE__ */ jsx(
|
|
92
|
-
Tooltip,
|
|
93
|
-
{
|
|
94
|
-
arrow: true,
|
|
95
|
-
title: /* @__PURE__ */ jsx(UserTooltip, { entityRef }),
|
|
96
|
-
enterDelay: 400,
|
|
97
|
-
interactive: true,
|
|
98
|
-
children: /* @__PURE__ */ jsx(
|
|
99
|
-
Chip,
|
|
100
|
-
{
|
|
101
|
-
label: userName,
|
|
102
|
-
size: "small",
|
|
103
|
-
className: "qetaTagChip",
|
|
104
|
-
component: "a",
|
|
105
|
-
onClick: () => {
|
|
106
|
-
navigate(`${userRoute()}/${entityRef}`);
|
|
107
|
-
},
|
|
108
|
-
clickable: true
|
|
109
|
-
}
|
|
110
|
-
)
|
|
111
|
-
}
|
|
112
|
-
);
|
|
113
|
-
};
|
|
114
80
|
|
|
115
|
-
export {
|
|
81
|
+
export { UserTooltip };
|
|
116
82
|
//# sourceMappingURL=UserChip.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserChip.esm.js","sources":["../../../src/components/TagsAndEntities/UserChip.tsx"],"sourcesContent":["import { useRouteRef } from '@backstage/core-plugin-api';\nimport { userRouteRef } from '../../routes';\nimport { useIdentityApi, useUserFollow, useUserInfo } from '../../hooks';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n Avatar,\n Box,\n Button,\n Chip,\n Grid,\n Tooltip,\n Typography,\n} from '@material-ui/core';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\nimport Visibility from '@material-ui/icons/Visibility';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nexport const UserTooltip = (props: {\n entityRef: string;\n anonymous?: boolean;\n}) => {\n const { entityRef, anonymous } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const { name, initials, user, secondaryTitle } = useUserInfo(\n entityRef,\n anonymous ?? entityRef === 'anonymous',\n );\n\n const { value: currentUser } = useIdentityApi(\n api => api.getBackstageIdentity(),\n [],\n );\n const users = useUserFollow();\n\n return (\n <Grid container style={{ padding: '0.5em' }} spacing={1}>\n <Grid item xs={12}>\n <Box style={{ display: 'flex', alignItems: 'center' }}>\n <Box style={{ display: 'inline-block', marginRight: '0.5em' }}>\n <Avatar\n src={user?.spec?.profile?.picture}\n alt={name}\n variant=\"rounded\"\n style={{ width: '20px', height: '20px' }}\n >\n {initials}\n </Avatar>\n </Box>\n <Typography\n variant=\"subtitle1\"\n style={{\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n }}\n >\n {name}\n </Typography>\n </Box>\n <Typography variant=\"subtitle2\">{secondaryTitle}</Typography>\n </Grid>\n {!users.loading && currentUser?.userEntityRef !== entityRef && (\n <Grid item xs={12}>\n <Button\n size=\"small\"\n variant=\"outlined\"\n color={users.isFollowingUser(entityRef) ? 'secondary' : 'primary'}\n onClick={() => {\n if (users.isFollowingUser(entityRef)) {\n users.unfollowUser(entityRef);\n } else {\n users.followUser(entityRef);\n }\n }}\n startIcon={\n users.isFollowingUser(entityRef) ? (\n <VisibilityOff />\n ) : (\n <Visibility />\n )\n }\n >\n {users.isFollowingUser(entityRef)\n ? t('userButton.unfollow')\n : t('userButton.follow')}\n </Button>\n </Grid>\n )}\n </Grid>\n );\n};\n\nexport const UserChip = (props: { entityRef: string }) => {\n const navigate = useNavigate();\n const { entityRef } = props;\n const userRoute = useRouteRef(userRouteRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n const { primaryTitle: userName } = useEntityPresentation(\n entityRef.startsWith('user:') ? entityRef : `user:${entityRef}`,\n );\n if (entityRef === 'anonymous') {\n return <>{t('userLink.anonymous')}</>;\n }\n return (\n <Tooltip\n arrow\n title={<UserTooltip entityRef={entityRef} />}\n enterDelay={400}\n interactive\n >\n <Chip\n label={userName}\n size=\"small\"\n className=\"qetaTagChip\"\n component=\"a\"\n onClick={() => {\n navigate(`${userRoute()}/${entityRef}`);\n }}\n clickable\n />\n </Tooltip>\n );\n};\n"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"UserChip.esm.js","sources":["../../../src/components/TagsAndEntities/UserChip.tsx"],"sourcesContent":["import { useRouteRef } from '@backstage/core-plugin-api';\nimport { userRouteRef } from '../../routes';\nimport { useIdentityApi, useUserFollow, useUserInfo } from '../../hooks';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n Avatar,\n Box,\n Button,\n Chip,\n Grid,\n Tooltip,\n Typography,\n} from '@material-ui/core';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\nimport Visibility from '@material-ui/icons/Visibility';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nexport const UserTooltip = (props: {\n entityRef: string;\n anonymous?: boolean;\n}) => {\n const { entityRef, anonymous } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const { name, initials, user, secondaryTitle } = useUserInfo(\n entityRef,\n anonymous ?? entityRef === 'anonymous',\n );\n\n const { value: currentUser } = useIdentityApi(\n api => api.getBackstageIdentity(),\n [],\n );\n const users = useUserFollow();\n\n return (\n <Grid container style={{ padding: '0.5em' }} spacing={1}>\n <Grid item xs={12}>\n <Box style={{ display: 'flex', alignItems: 'center' }}>\n <Box style={{ display: 'inline-block', marginRight: '0.5em' }}>\n <Avatar\n src={user?.spec?.profile?.picture}\n alt={name}\n variant=\"rounded\"\n style={{ width: '20px', height: '20px' }}\n >\n {initials}\n </Avatar>\n </Box>\n <Typography\n variant=\"subtitle1\"\n style={{\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n }}\n >\n {name}\n </Typography>\n </Box>\n <Typography variant=\"subtitle2\">{secondaryTitle}</Typography>\n </Grid>\n {!users.loading && currentUser?.userEntityRef !== entityRef && (\n <Grid item xs={12}>\n <Button\n size=\"small\"\n variant=\"outlined\"\n color={users.isFollowingUser(entityRef) ? 'secondary' : 'primary'}\n onClick={() => {\n if (users.isFollowingUser(entityRef)) {\n users.unfollowUser(entityRef);\n } else {\n users.followUser(entityRef);\n }\n }}\n startIcon={\n users.isFollowingUser(entityRef) ? (\n <VisibilityOff />\n ) : (\n <Visibility />\n )\n }\n >\n {users.isFollowingUser(entityRef)\n ? t('userButton.unfollow')\n : t('userButton.follow')}\n </Button>\n </Grid>\n )}\n </Grid>\n );\n};\n\nexport const UserChip = (props: { entityRef: string }) => {\n const navigate = useNavigate();\n const { entityRef } = props;\n const userRoute = useRouteRef(userRouteRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n const { primaryTitle: userName } = useEntityPresentation(\n entityRef.startsWith('user:') ? entityRef : `user:${entityRef}`,\n );\n if (entityRef === 'anonymous') {\n return <>{t('userLink.anonymous')}</>;\n }\n return (\n <Tooltip\n arrow\n title={<UserTooltip entityRef={entityRef} />}\n enterDelay={400}\n interactive\n >\n <Chip\n label={userName}\n size=\"small\"\n className=\"qetaTagChip\"\n component=\"a\"\n onClick={() => {\n navigate(`${userRoute()}/${entityRef}`);\n }}\n clickable\n />\n </Tooltip>\n );\n};\n"],"names":[],"mappings":"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"}
|