@drodil/backstage-plugin-qeta-react 3.52.6 → 3.53.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 +11 -11
- package/dist/components/AIAnswerCard/AIAnswerCard.esm.js.map +1 -1
- package/dist/components/AnswerForm/AnswerForm.esm.js +5 -0
- package/dist/components/AnswerForm/AnswerForm.esm.js.map +1 -1
- package/dist/components/AnswersContainer/AnswerListItem.esm.js +4 -2
- package/dist/components/AnswersContainer/AnswerListItem.esm.js.map +1 -1
- package/dist/components/AnswersContainer/AnswersContainer.esm.js +59 -231
- package/dist/components/AnswersContainer/AnswersContainer.esm.js.map +1 -1
- package/dist/components/AnswersContainer/AnswersGridItem.esm.js +167 -0
- package/dist/components/AnswersContainer/AnswersGridItem.esm.js.map +1 -0
- package/dist/components/ArticleContent/ArticleButtons.esm.js +3 -0
- package/dist/components/ArticleContent/ArticleButtons.esm.js.map +1 -1
- package/dist/components/Badges/UserBadges.esm.js +7 -2
- package/dist/components/Badges/UserBadges.esm.js.map +1 -1
- package/dist/components/Buttons/AddToCollectionButton.esm.js +7 -2
- package/dist/components/Buttons/AddToCollectionButton.esm.js.map +1 -1
- package/dist/components/Buttons/EntityFollowButton.esm.js +7 -2
- package/dist/components/Buttons/EntityFollowButton.esm.js.map +1 -1
- package/dist/components/Buttons/RankingButtons.esm.js +94 -0
- package/dist/components/Buttons/RankingButtons.esm.js.map +1 -0
- package/dist/components/Buttons/TagFollowButton.esm.js +8 -3
- package/dist/components/Buttons/TagFollowButton.esm.js.map +1 -1
- package/dist/components/Buttons/UserFollowButton.esm.js +7 -2
- package/dist/components/Buttons/UserFollowButton.esm.js.map +1 -1
- package/dist/components/CollectionsContainer/CollectionListItem.esm.js +143 -0
- package/dist/components/CollectionsContainer/CollectionListItem.esm.js.map +1 -0
- package/dist/components/CollectionsContainer/CollectionsContainer.esm.js +45 -0
- package/dist/components/CollectionsContainer/CollectionsContainer.esm.js.map +1 -0
- package/dist/components/CollectionsContainer/CollectionsGridItem.esm.js.map +1 -0
- package/dist/components/ContentHeader/ContentHeader.esm.js +6 -0
- package/dist/components/ContentHeader/ContentHeader.esm.js.map +1 -1
- package/dist/components/EntitiesContainer/EntitiesContainer.esm.js +44 -0
- package/dist/components/EntitiesContainer/EntitiesContainer.esm.js.map +1 -0
- package/dist/components/{EntitiesGrid → EntitiesContainer}/EntitiesGridItem.esm.js +18 -26
- package/dist/components/EntitiesContainer/EntitiesGridItem.esm.js.map +1 -0
- package/dist/components/EntitiesContainer/EntityListItem.esm.js +102 -0
- package/dist/components/EntitiesContainer/EntityListItem.esm.js.map +1 -0
- package/dist/components/FilterPanel/FilterPanel.esm.js +2 -2
- package/dist/components/FilterPanel/FilterPanel.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedEntitiesList.esm.js +7 -3
- package/dist/components/FollowedLists/FollowedEntitiesList.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedTagsList.esm.js +8 -4
- package/dist/components/FollowedLists/FollowedTagsList.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedUsersList.esm.js +7 -3
- package/dist/components/FollowedLists/FollowedUsersList.esm.js.map +1 -1
- package/dist/components/HomePageCards/ImpactCard.esm.js +7 -2
- package/dist/components/HomePageCards/ImpactCard.esm.js.map +1 -1
- package/dist/components/HomePageCards/PostsCard.esm.js +23 -15
- package/dist/components/HomePageCards/PostsCard.esm.js.map +1 -1
- package/dist/components/LeftMenu/LeftMenu.esm.js +15 -16
- package/dist/components/LeftMenu/LeftMenu.esm.js.map +1 -1
- package/dist/components/LinkCard/LinkCard.esm.js +4 -0
- package/dist/components/LinkCard/LinkCard.esm.js.map +1 -1
- package/dist/components/Links/Links.esm.js +7 -0
- package/dist/components/Links/Links.esm.js.map +1 -1
- package/dist/components/PostForm/EntitiesInput.esm.js +229 -226
- package/dist/components/PostForm/EntitiesInput.esm.js.map +1 -1
- package/dist/components/PostForm/PostForm.esm.js +13 -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 +6 -2
- package/dist/components/PostHighlightList/PostHighlightList.esm.js.map +1 -1
- package/dist/components/PostsContainer/PostListItem.esm.js +57 -18
- package/dist/components/PostsContainer/PostListItem.esm.js.map +1 -1
- package/dist/components/PostsContainer/PostsContainer.esm.js +137 -128
- package/dist/components/PostsContainer/PostsContainer.esm.js.map +1 -1
- package/dist/components/{PostsGrid → PostsContainer}/PostsGridItem.esm.js +29 -53
- package/dist/components/PostsContainer/PostsGridItem.esm.js.map +1 -0
- package/dist/components/PostsTable/PostsTable.esm.js +7 -2
- package/dist/components/PostsTable/PostsTable.esm.js.map +1 -1
- package/dist/components/QetaEntityContainer/QetaEntityContainer.esm.js +178 -0
- package/dist/components/QetaEntityContainer/QetaEntityContainer.esm.js.map +1 -0
- package/dist/components/QuestionCard/QuestionCard.esm.js +4 -0
- package/dist/components/QuestionCard/QuestionCard.esm.js.map +1 -1
- package/dist/components/SuggestionsCard/SuggestionsCard.esm.js +7 -3
- package/dist/components/SuggestionsCard/SuggestionsCard.esm.js.map +1 -1
- package/dist/components/TagsAndEntities/EntityChip.esm.js +6 -2
- package/dist/components/TagsAndEntities/EntityChip.esm.js.map +1 -1
- package/dist/components/TagsAndEntities/TagChip.esm.js +6 -2
- package/dist/components/TagsAndEntities/TagChip.esm.js.map +1 -1
- package/dist/components/TagsAndEntities/UserChip.esm.js +7 -3
- package/dist/components/TagsAndEntities/UserChip.esm.js.map +1 -1
- package/dist/components/TagsContainer/CreateTagModal.esm.js.map +1 -0
- package/dist/components/TagsContainer/EditTagModal.esm.js.map +1 -0
- package/dist/components/{TagsGrid → TagsContainer}/TagGridItem.esm.js +3 -3
- package/dist/components/TagsContainer/TagGridItem.esm.js.map +1 -0
- package/dist/components/TagsContainer/TagListItem.esm.js +243 -0
- package/dist/components/TagsContainer/TagListItem.esm.js.map +1 -0
- package/dist/components/TagsContainer/TagsContainer.esm.js +86 -0
- package/dist/components/TagsContainer/TagsContainer.esm.js.map +1 -0
- package/dist/components/TemplateList/TemplateForm.esm.js +7 -2
- package/dist/components/TemplateList/TemplateForm.esm.js.map +1 -1
- package/dist/components/TemplateList/TemplateList.esm.js +7 -3
- package/dist/components/TemplateList/TemplateList.esm.js.map +1 -1
- package/dist/components/Timeline/TimelineItem.esm.js +4 -0
- package/dist/components/Timeline/TimelineItem.esm.js.map +1 -1
- package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js +7 -2
- package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js.map +1 -1
- package/dist/components/UsersContainer/UserListItem.esm.js +133 -0
- package/dist/components/UsersContainer/UserListItem.esm.js.map +1 -0
- package/dist/components/UsersContainer/UsersContainer.esm.js +44 -0
- package/dist/components/UsersContainer/UsersContainer.esm.js.map +1 -0
- package/dist/components/{UsersGrid → UsersContainer}/UsersGridItem.esm.js +35 -38
- package/dist/components/UsersContainer/UsersGridItem.esm.js.map +1 -0
- package/dist/components/Utility/QetaGridHeader.esm.js +15 -11
- package/dist/components/Utility/QetaGridHeader.esm.js.map +1 -1
- package/dist/components/Utility/QetaPagination.esm.js +69 -0
- package/dist/components/Utility/QetaPagination.esm.js.map +1 -0
- package/dist/hooks/useListItemStyles.esm.js +22 -0
- package/dist/hooks/useListItemStyles.esm.js.map +1 -0
- package/dist/hooks/{usePaginatedPosts.esm.js → useQetaEntities.esm.js} +59 -86
- package/dist/hooks/useQetaEntities.esm.js.map +1 -0
- package/dist/hooks/useUserSettings.esm.js +83 -0
- package/dist/hooks/useUserSettings.esm.js.map +1 -0
- package/dist/index.d.ts +209 -58
- package/dist/index.esm.js +21 -8
- package/dist/index.esm.js.map +1 -1
- package/dist/routes.esm.js +6 -1
- package/dist/routes.esm.js.map +1 -1
- package/dist/translation.esm.js +49 -0
- package/dist/translation.esm.js.map +1 -1
- package/package.json +2 -2
- package/dist/components/AnswersContainer/AnswerList.esm.js +0 -54
- package/dist/components/AnswersContainer/AnswerList.esm.js.map +0 -1
- package/dist/components/CollectionsGrid/CollectionsGrid.esm.js +0 -204
- package/dist/components/CollectionsGrid/CollectionsGrid.esm.js.map +0 -1
- package/dist/components/CollectionsGrid/CollectionsGridContent.esm.js +0 -55
- package/dist/components/CollectionsGrid/CollectionsGridContent.esm.js.map +0 -1
- package/dist/components/CollectionsGrid/CollectionsGridItem.esm.js.map +0 -1
- package/dist/components/CollectionsGrid/NoCollectionsCard.esm.js +0 -21
- package/dist/components/CollectionsGrid/NoCollectionsCard.esm.js.map +0 -1
- package/dist/components/EntitiesGrid/EntitiesGrid.esm.js +0 -136
- package/dist/components/EntitiesGrid/EntitiesGrid.esm.js.map +0 -1
- package/dist/components/EntitiesGrid/EntitiesGridContent.esm.js +0 -46
- package/dist/components/EntitiesGrid/EntitiesGridContent.esm.js.map +0 -1
- package/dist/components/EntitiesGrid/EntitiesGridItem.esm.js.map +0 -1
- package/dist/components/EntitiesGrid/NoEntitiesCard.esm.js +0 -21
- package/dist/components/EntitiesGrid/NoEntitiesCard.esm.js.map +0 -1
- package/dist/components/PostsContainer/PostList.esm.js +0 -83
- package/dist/components/PostsContainer/PostList.esm.js.map +0 -1
- package/dist/components/PostsGrid/PostsGrid.esm.js +0 -197
- package/dist/components/PostsGrid/PostsGrid.esm.js.map +0 -1
- package/dist/components/PostsGrid/PostsGridContent.esm.js +0 -90
- package/dist/components/PostsGrid/PostsGridContent.esm.js.map +0 -1
- package/dist/components/PostsGrid/PostsGridItem.esm.js.map +0 -1
- package/dist/components/TagsGrid/CreateTagModal.esm.js.map +0 -1
- package/dist/components/TagsGrid/EditTagModal.esm.js.map +0 -1
- package/dist/components/TagsGrid/NoTagsCard.esm.js +0 -21
- package/dist/components/TagsGrid/NoTagsCard.esm.js.map +0 -1
- package/dist/components/TagsGrid/TagGridItem.esm.js.map +0 -1
- package/dist/components/TagsGrid/TagsGrid.esm.js +0 -190
- package/dist/components/TagsGrid/TagsGrid.esm.js.map +0 -1
- package/dist/components/TagsGrid/TagsGridContent.esm.js +0 -62
- package/dist/components/TagsGrid/TagsGridContent.esm.js.map +0 -1
- package/dist/components/UsersGrid/NoUsersCard.esm.js +0 -21
- package/dist/components/UsersGrid/NoUsersCard.esm.js.map +0 -1
- package/dist/components/UsersGrid/UsersGrid.esm.js +0 -137
- package/dist/components/UsersGrid/UsersGrid.esm.js.map +0 -1
- package/dist/components/UsersGrid/UsersGridContent.esm.js +0 -46
- package/dist/components/UsersGrid/UsersGridContent.esm.js.map +0 -1
- package/dist/components/UsersGrid/UsersGridItem.esm.js.map +0 -1
- package/dist/hooks/usePaginatedPosts.esm.js.map +0 -1
- /package/dist/components/{CollectionsGrid → CollectionsContainer}/CollectionsGridItem.esm.js +0 -0
- /package/dist/components/{TagsGrid → TagsContainer}/CreateTagModal.esm.js +0 -0
- /package/dist/components/{TagsGrid → TagsContainer}/EditTagModal.esm.js +0 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
3
|
+
import { QetaEntityContainer } from '../QetaEntityContainer/QetaEntityContainer.esm.js';
|
|
4
|
+
import { UserListItem } from './UserListItem.esm.js';
|
|
5
|
+
import { UsersGridItem } from './UsersGridItem.esm.js';
|
|
6
|
+
import { qetaTranslationRef } from '../../translation.esm.js';
|
|
7
|
+
|
|
8
|
+
const UsersContainer = (props) => {
|
|
9
|
+
const { filterPanelProps, defaultView } = props;
|
|
10
|
+
const { t } = useTranslationRef(qetaTranslationRef);
|
|
11
|
+
return /* @__PURE__ */ jsx(
|
|
12
|
+
QetaEntityContainer,
|
|
13
|
+
{
|
|
14
|
+
prefix: "users",
|
|
15
|
+
defaultPageSize: 24,
|
|
16
|
+
defaultView,
|
|
17
|
+
initialFilters: {
|
|
18
|
+
order: "desc",
|
|
19
|
+
orderBy: "totalPosts",
|
|
20
|
+
searchQuery: ""
|
|
21
|
+
},
|
|
22
|
+
fetch: (api, limit, offset, filters) => {
|
|
23
|
+
return api.getUsers({
|
|
24
|
+
limit,
|
|
25
|
+
offset,
|
|
26
|
+
searchQuery: filters.searchQuery
|
|
27
|
+
}).then((res) => ({ items: res.users, total: res.total }));
|
|
28
|
+
},
|
|
29
|
+
filterPanelProps: {
|
|
30
|
+
...filterPanelProps,
|
|
31
|
+
mode: "users"
|
|
32
|
+
},
|
|
33
|
+
renderListItem: (user) => /* @__PURE__ */ jsx(UserListItem, { user }),
|
|
34
|
+
renderGridItem: (user) => /* @__PURE__ */ jsx(UsersGridItem, { user }),
|
|
35
|
+
title: (total) => t("usersPage.users", { count: total }),
|
|
36
|
+
searchPlaceholder: t("usersPage.search.label"),
|
|
37
|
+
emptyMessage: t("usersPage.users", { count: 0 }),
|
|
38
|
+
getKey: (user) => user.userRef
|
|
39
|
+
}
|
|
40
|
+
);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export { UsersContainer };
|
|
44
|
+
//# sourceMappingURL=UsersContainer.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UsersContainer.esm.js","sources":["../../../src/components/UsersContainer/UsersContainer.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { QetaEntityContainer } from '../QetaEntityContainer/QetaEntityContainer';\nimport { UserListItem } from './UserListItem';\nimport { UsersGridItem } from './UsersGridItem';\nimport { UserResponse } from '@drodil/backstage-plugin-qeta-common';\nimport {\n CommonFilterPanelProps,\n UserFilters,\n} from '../FilterPanel/FilterPanel';\nimport { qetaTranslationRef } from '../../translation';\nimport { ViewType } from '../ViewToggle/ViewToggle';\n\nexport const UsersContainer = (props: {\n filterPanelProps?: CommonFilterPanelProps;\n defaultView?: ViewType;\n}) => {\n const { filterPanelProps, defaultView } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n\n return (\n <QetaEntityContainer<UserResponse, UserFilters>\n prefix=\"users\"\n defaultPageSize={24}\n defaultView={defaultView}\n initialFilters={{\n order: 'desc',\n orderBy: 'totalPosts',\n searchQuery: '',\n }}\n fetch={(api, limit, offset, filters) => {\n return api\n .getUsers({\n limit,\n offset,\n searchQuery: filters.searchQuery,\n })\n .then(res => ({ items: res.users, total: res.total }));\n }}\n filterPanelProps={{\n ...filterPanelProps,\n mode: 'users',\n }}\n renderListItem={user => <UserListItem user={user} />}\n renderGridItem={user => <UsersGridItem user={user} />}\n title={total => t('usersPage.users', { count: total })}\n searchPlaceholder={t('usersPage.search.label')}\n emptyMessage={t('usersPage.users', { count: 0 })}\n getKey={user => user.userRef}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;AAYa,MAAA,cAAA,GAAiB,CAAC,KAGzB,KAAA;AACJ,EAAM,MAAA,EAAE,gBAAkB,EAAA,WAAA,EAAgB,GAAA,KAAA;AAC1C,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EACE,uBAAA,GAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,MAAO,EAAA,OAAA;AAAA,MACP,eAAiB,EAAA,EAAA;AAAA,MACjB,WAAA;AAAA,MACA,cAAgB,EAAA;AAAA,QACd,KAAO,EAAA,MAAA;AAAA,QACP,OAAS,EAAA,YAAA;AAAA,QACT,WAAa,EAAA;AAAA,OACf;AAAA,MACA,KAAO,EAAA,CAAC,GAAK,EAAA,KAAA,EAAO,QAAQ,OAAY,KAAA;AACtC,QAAA,OAAO,IACJ,QAAS,CAAA;AAAA,UACR,KAAA;AAAA,UACA,MAAA;AAAA,UACA,aAAa,OAAQ,CAAA;AAAA,SACtB,CACA,CAAA,IAAA,CAAK,CAAQ,GAAA,MAAA,EAAE,KAAO,EAAA,GAAA,CAAI,KAAO,EAAA,KAAA,EAAO,GAAI,CAAA,KAAA,EAAQ,CAAA,CAAA;AAAA,OACzD;AAAA,MACA,gBAAkB,EAAA;AAAA,QAChB,GAAG,gBAAA;AAAA,QACH,IAAM,EAAA;AAAA,OACR;AAAA,MACA,cAAgB,EAAA,CAAA,IAAA,qBAAS,GAAA,CAAA,YAAA,EAAA,EAAa,IAAY,EAAA,CAAA;AAAA,MAClD,cAAgB,EAAA,CAAA,IAAA,qBAAS,GAAA,CAAA,aAAA,EAAA,EAAc,IAAY,EAAA,CAAA;AAAA,MACnD,OAAO,CAAS,KAAA,KAAA,CAAA,CAAE,mBAAmB,EAAE,KAAA,EAAO,OAAO,CAAA;AAAA,MACrD,iBAAA,EAAmB,EAAE,wBAAwB,CAAA;AAAA,MAC7C,cAAc,CAAE,CAAA,iBAAA,EAAmB,EAAE,KAAA,EAAO,GAAG,CAAA;AAAA,MAC/C,MAAA,EAAQ,UAAQ,IAAK,CAAA;AAAA;AAAA,GACvB;AAEJ;;;;"}
|
|
@@ -5,12 +5,19 @@ import { userRouteRef } from '../../routes.esm.js';
|
|
|
5
5
|
import '../../api.esm.js';
|
|
6
6
|
import 'react-use';
|
|
7
7
|
import 'react';
|
|
8
|
+
import '@backstage/plugin-signals-react';
|
|
9
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
10
|
+
import { qetaTranslationRef } from '../../translation.esm.js';
|
|
11
|
+
import '../../hooks/useListItemStyles.esm.js';
|
|
8
12
|
import { useEntityAuthor } from '../../hooks/useEntityAuthor.esm.js';
|
|
9
13
|
import { useIdentityApi } from '../../hooks/useIdentityApi.esm.js';
|
|
10
14
|
import '@backstage/plugin-permission-react';
|
|
11
15
|
import '@drodil/backstage-plugin-qeta-common';
|
|
12
16
|
import '@backstage/plugin-permission-common';
|
|
13
|
-
import { makeStyles,
|
|
17
|
+
import { makeStyles, Card, Box, Avatar, Tooltip, Typography, CardContent, Grid } from '@material-ui/core';
|
|
18
|
+
import 'react-router-dom';
|
|
19
|
+
import 'react-use/lib/useDebounce';
|
|
20
|
+
import '../FilterPanel/FilterPanel.esm.js';
|
|
14
21
|
import { UserFollowButton } from '../Buttons/UserFollowButton.esm.js';
|
|
15
22
|
import Visibility from '@material-ui/icons/Visibility';
|
|
16
23
|
import QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';
|
|
@@ -19,8 +26,6 @@ import CheckCircle from '@material-ui/icons/CheckCircle';
|
|
|
19
26
|
import DescriptionIcon from '@material-ui/icons/Description';
|
|
20
27
|
import LinkIcon from '@material-ui/icons/Link';
|
|
21
28
|
import EmojiEvents from '@material-ui/icons/EmojiEvents';
|
|
22
|
-
import { qetaTranslationRef } from '../../translation.esm.js';
|
|
23
|
-
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
24
29
|
import useGridItemStyles from '../GridItemStyles/useGridItemStyles.esm.js';
|
|
25
30
|
import { ClickableLink } from '../Utility/ClickableLink.esm.js';
|
|
26
31
|
import { stringifyEntityRef, parseEntityRef } from '@backstage/catalog-model';
|
|
@@ -63,40 +68,32 @@ const UsersGridItem = (props) => {
|
|
|
63
68
|
error: userError
|
|
64
69
|
} = useIdentityApi((api) => api.getBackstageIdentity(), []);
|
|
65
70
|
const href = `${userRoute()}/${user.userRef}`;
|
|
66
|
-
return /* @__PURE__ */ jsx(
|
|
67
|
-
/* @__PURE__ */ jsxs(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
)
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
e.stopPropagation();
|
|
93
|
-
},
|
|
94
|
-
children: /* @__PURE__ */ jsx(UserFollowButton, { userRef: user.userRef })
|
|
95
|
-
}
|
|
96
|
-
) : null
|
|
97
|
-
]
|
|
98
|
-
}
|
|
99
|
-
),
|
|
71
|
+
return /* @__PURE__ */ jsx(Card, { className: classes.card, children: /* @__PURE__ */ jsxs(ClickableLink, { href, ariaLabel: primaryTitle, children: [
|
|
72
|
+
/* @__PURE__ */ jsxs(Box, { className: classes.cardHeader, display: "flex", alignItems: "center", children: [
|
|
73
|
+
Icon && /* @__PURE__ */ jsx(
|
|
74
|
+
Avatar,
|
|
75
|
+
{
|
|
76
|
+
src: userEntity?.spec?.profile?.picture,
|
|
77
|
+
className: "avatar",
|
|
78
|
+
alt: name,
|
|
79
|
+
variant: "rounded",
|
|
80
|
+
style: { marginRight: 16 },
|
|
81
|
+
children: initials
|
|
82
|
+
}
|
|
83
|
+
),
|
|
84
|
+
/* @__PURE__ */ jsx(Box, { flex: 1, minWidth: 0, children: /* @__PURE__ */ jsx(Tooltip, { title: secondaryTitle ?? "", arrow: true, children: /* @__PURE__ */ jsx(Typography, { variant: "h6", noWrap: true, children: primaryTitle }) }) }),
|
|
85
|
+
!loadingUser && !userError && currentUser?.userEntityRef !== user.userRef ? /* @__PURE__ */ jsx(
|
|
86
|
+
Box,
|
|
87
|
+
{
|
|
88
|
+
flexShrink: 0,
|
|
89
|
+
onClick: (e) => {
|
|
90
|
+
e.preventDefault();
|
|
91
|
+
e.stopPropagation();
|
|
92
|
+
},
|
|
93
|
+
children: /* @__PURE__ */ jsx(UserFollowButton, { userRef: user.userRef })
|
|
94
|
+
}
|
|
95
|
+
) : null
|
|
96
|
+
] }),
|
|
100
97
|
/* @__PURE__ */ jsx(
|
|
101
98
|
CardContent,
|
|
102
99
|
{
|
|
@@ -203,7 +200,7 @@ const UsersGridItem = (props) => {
|
|
|
203
200
|
] })
|
|
204
201
|
}
|
|
205
202
|
)
|
|
206
|
-
] }) })
|
|
203
|
+
] }) });
|
|
207
204
|
};
|
|
208
205
|
|
|
209
206
|
export { UsersGridItem };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UsersGridItem.esm.js","sources":["../../../src/components/UsersContainer/UsersGridItem.tsx"],"sourcesContent":["import { UserResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { userRouteRef } from '../../routes';\nimport { useIdentityApi } from '../../hooks';\nimport { useEntityAuthor } from '../../hooks/useEntityAuthor';\nimport {\n Avatar,\n Box,\n Card,\n CardContent,\n Grid,\n makeStyles,\n Tooltip,\n Typography,\n} from '@material-ui/core';\nimport { UserFollowButton } from '../Buttons/UserFollowButton';\nimport Visibility from '@material-ui/icons/Visibility';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport LinkIcon from '@material-ui/icons/Link';\nimport EmojiEvents from '@material-ui/icons/EmojiEvents';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport useGridItemStyles from '../GridItemStyles/useGridItemStyles';\nimport { ClickableLink } from '../Utility/ClickableLink';\nimport { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model';\n\nconst useStyles = makeStyles(theme => ({\n statsGrid: {\n marginTop: 'auto',\n },\n statItem: {\n padding: theme.spacing(1),\n borderRadius: theme.shape.borderRadius,\n width: '100%',\n height: '100%',\n justifyContent: 'center',\n },\n flexColumn: {\n display: 'flex',\n flexDirection: 'column',\n },\n}));\n\nexport const UsersGridItem = (props: { user: UserResponse }) => {\n const { user } = props;\n const classes = useGridItemStyles();\n const localClasses = useStyles();\n const userRoute = useRouteRef(userRouteRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n const entityRef = stringifyEntityRef(\n parseEntityRef(user.userRef, { defaultKind: 'user' }),\n );\n const { primaryTitle, Icon } = useEntityPresentation(entityRef);\n const {\n name,\n initials,\n user: userEntity,\n secondaryTitle,\n } = useEntityAuthor(user);\n const {\n value: currentUser,\n loading: loadingUser,\n error: userError,\n } = useIdentityApi(api => api.getBackstageIdentity(), []);\n\n const href = `${userRoute()}/${user.userRef}`;\n\n return (\n <Card className={classes.card}>\n <ClickableLink href={href} ariaLabel={primaryTitle}>\n <Box className={classes.cardHeader} display=\"flex\" alignItems=\"center\">\n {Icon && (\n <Avatar\n src={userEntity?.spec?.profile?.picture}\n className=\"avatar\"\n alt={name}\n variant=\"rounded\"\n style={{ marginRight: 16 }}\n >\n {initials}\n </Avatar>\n )}\n <Box flex={1} minWidth={0}>\n <Tooltip title={secondaryTitle ?? ''} arrow>\n <Typography variant=\"h6\" noWrap>\n {primaryTitle}\n </Typography>\n </Tooltip>\n </Box>\n {!loadingUser &&\n !userError &&\n currentUser?.userEntityRef !== user.userRef ? (\n <Box\n flexShrink={0}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <UserFollowButton userRef={user.userRef} />\n </Box>\n ) : null}\n </Box>\n <CardContent\n className={`${classes.cardContent} ${localClasses.flexColumn}`}\n >\n <Grid container spacing={1} className={localClasses.statsGrid}>\n <Grid item xs={3}>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n className={localClasses.statItem}\n >\n <EmojiEvents fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {user.reputation}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('impactCard.reputation')}\n </Typography>\n </Box>\n </Grid>\n <Grid item xs={3}>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n className={localClasses.statItem}\n >\n <QuestionAnswerIcon fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {user.totalQuestions}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('common.questions')}\n </Typography>\n </Box>\n </Grid>\n <Grid item xs={3}>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n className={localClasses.statItem}\n >\n <DescriptionIcon fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {user.totalArticles}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('common.articles')}\n </Typography>\n </Box>\n </Grid>\n <Grid item xs={3}>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n className={localClasses.statItem}\n >\n <LinkIcon fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {user.totalLinks}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('common.links')}\n </Typography>\n </Box>\n </Grid>\n <Grid item xs={4}>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n className={localClasses.statItem}\n >\n <CheckCircleIcon fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {user.totalAnswers}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('common.answers')}\n </Typography>\n </Box>\n </Grid>\n <Grid item xs={4}>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n className={localClasses.statItem}\n >\n <ThumbUpIcon fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {user.totalVotes}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('common.votes')}\n </Typography>\n </Box>\n </Grid>\n <Grid item xs={4}>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n className={localClasses.statItem}\n >\n <Visibility fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {user.totalViews}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('common.views')}\n </Typography>\n </Box>\n </Grid>\n </Grid>\n </CardContent>\n </ClickableLink>\n </Card>\n );\n};\n"],"names":["CheckCircleIcon","ThumbUpIcon"],"mappings":"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"}
|
|
@@ -7,24 +7,28 @@ const QetaGridHeader = ({
|
|
|
7
7
|
searchBarLabel,
|
|
8
8
|
loading,
|
|
9
9
|
onSearch,
|
|
10
|
-
buttons
|
|
10
|
+
buttons,
|
|
11
|
+
rightElement
|
|
11
12
|
}) => {
|
|
12
13
|
return /* @__PURE__ */ jsxs(Box, { mb: 3, children: [
|
|
13
|
-
/* @__PURE__ */
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
/* @__PURE__ */ jsxs(Box, { display: "flex", alignItems: "center", justifyContent: "space-between", children: [
|
|
15
|
+
/* @__PURE__ */ jsx(Box, { width: "100%", maxWidth: 400, children: /* @__PURE__ */ jsx(
|
|
16
|
+
SearchBar,
|
|
17
|
+
{
|
|
18
|
+
onSearch,
|
|
19
|
+
label: searchBarLabel,
|
|
20
|
+
loading
|
|
21
|
+
}
|
|
22
|
+
) }),
|
|
23
|
+
rightElement && /* @__PURE__ */ jsx(Box, { display: "flex", justifyContent: "flex-end", children: rightElement })
|
|
24
|
+
] }),
|
|
25
|
+
/* @__PURE__ */ jsx(Box, { mt: 3, mb: 2, children: /* @__PURE__ */ jsxs(Grid, { container: true, alignItems: "center", justifyContent: "space-between", children: [
|
|
22
26
|
/* @__PURE__ */ jsx(Grid, { item: true, children: !loading && /* @__PURE__ */ jsx(
|
|
23
27
|
Typography,
|
|
24
28
|
{
|
|
25
29
|
variant: "h6",
|
|
26
30
|
component: "h2",
|
|
27
|
-
style: { fontWeight: 500
|
|
31
|
+
style: { fontWeight: 500 },
|
|
28
32
|
children: title
|
|
29
33
|
}
|
|
30
34
|
) }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QetaGridHeader.esm.js","sources":["../../../src/components/Utility/QetaGridHeader.tsx"],"sourcesContent":["import { Box, Grid, Typography } from '@material-ui/core';\nimport { SearchBar } from '../SearchBar/SearchBar';\n\nexport type QetaGridHeaderProps = {\n title: React.ReactNode;\n searchBarLabel: string;\n loading: boolean;\n onSearch: (val: string) => void;\n buttons?: React.ReactNode;\n};\n\nexport const QetaGridHeader = ({\n title,\n searchBarLabel,\n loading,\n onSearch,\n buttons,\n}: QetaGridHeaderProps) => {\n return (\n <Box mb={3}>\n <
|
|
1
|
+
{"version":3,"file":"QetaGridHeader.esm.js","sources":["../../../src/components/Utility/QetaGridHeader.tsx"],"sourcesContent":["import { Box, Grid, Typography } from '@material-ui/core';\nimport { SearchBar } from '../SearchBar/SearchBar';\n\nexport type QetaGridHeaderProps = {\n title: React.ReactNode;\n searchBarLabel: string;\n loading: boolean;\n onSearch: (val: string) => void;\n buttons?: React.ReactNode;\n rightElement?: React.ReactNode;\n};\n\nexport const QetaGridHeader = ({\n title,\n searchBarLabel,\n loading,\n onSearch,\n buttons,\n rightElement,\n}: QetaGridHeaderProps) => {\n return (\n <Box mb={3}>\n <Box display=\"flex\" alignItems=\"center\" justifyContent=\"space-between\">\n <Box width=\"100%\" maxWidth={400}>\n <SearchBar\n onSearch={onSearch}\n label={searchBarLabel}\n loading={loading}\n />\n </Box>\n {rightElement && (\n <Box display=\"flex\" justifyContent=\"flex-end\">\n {rightElement}\n </Box>\n )}\n </Box>\n <Box mt={3} mb={2}>\n <Grid container alignItems=\"center\" justifyContent=\"space-between\">\n <Grid item>\n {!loading && (\n <Typography\n variant=\"h6\"\n component=\"h2\"\n style={{ fontWeight: 500 }}\n >\n {title}\n </Typography>\n )}\n </Grid>\n {buttons && <Grid item>{buttons}</Grid>}\n </Grid>\n </Box>\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;AAYO,MAAM,iBAAiB,CAAC;AAAA,EAC7B,KAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAA2B,KAAA;AACzB,EACE,uBAAA,IAAA,CAAC,GAAI,EAAA,EAAA,EAAA,EAAI,CACP,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,OAAI,OAAQ,EAAA,MAAA,EAAO,UAAW,EAAA,QAAA,EAAS,gBAAe,eACrD,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,GAAI,EAAA,EAAA,KAAA,EAAM,MAAO,EAAA,QAAA,EAAU,GAC1B,EAAA,QAAA,kBAAA,GAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,QAAA;AAAA,UACA,KAAO,EAAA,cAAA;AAAA,UACP;AAAA;AAAA,OAEJ,EAAA,CAAA;AAAA,MACC,gCACE,GAAA,CAAA,GAAA,EAAA,EAAI,SAAQ,MAAO,EAAA,cAAA,EAAe,YAChC,QACH,EAAA,YAAA,EAAA;AAAA,KAEJ,EAAA,CAAA;AAAA,oBACC,GAAA,CAAA,GAAA,EAAA,EAAI,EAAI,EAAA,CAAA,EAAG,EAAI,EAAA,CAAA,EACd,QAAC,kBAAA,IAAA,CAAA,IAAA,EAAA,EAAK,SAAS,EAAA,IAAA,EAAC,UAAW,EAAA,QAAA,EAAS,gBAAe,eACjD,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IACP,EAAA,QAAA,EAAA,CAAC,OACA,oBAAA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,OAAQ,EAAA,IAAA;AAAA,UACR,SAAU,EAAA,IAAA;AAAA,UACV,KAAA,EAAO,EAAE,UAAA,EAAY,GAAI,EAAA;AAAA,UAExB,QAAA,EAAA;AAAA;AAAA,OAGP,EAAA,CAAA;AAAA,MACC,OAAW,oBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,MAAE,QAAQ,EAAA,OAAA,EAAA;AAAA,KAAA,EAClC,CACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
3
|
+
import { qetaTranslationRef } from '../../translation.esm.js';
|
|
4
|
+
import { makeStyles, Grid, Tooltip, FormControl, Select, MenuItem } from '@material-ui/core';
|
|
5
|
+
import { Pagination } from '@material-ui/lab';
|
|
6
|
+
|
|
7
|
+
const useStyles = makeStyles(
|
|
8
|
+
() => ({
|
|
9
|
+
root: {
|
|
10
|
+
marginTop: "2em",
|
|
11
|
+
marginBottom: "2em"
|
|
12
|
+
},
|
|
13
|
+
pageSizeSelect: {
|
|
14
|
+
marginRight: "1em",
|
|
15
|
+
maxHeight: "42px"
|
|
16
|
+
},
|
|
17
|
+
pagination: {}
|
|
18
|
+
}),
|
|
19
|
+
{ name: "QetaPagination" }
|
|
20
|
+
);
|
|
21
|
+
const QetaPagination = (props) => {
|
|
22
|
+
const { handlePageChange, handlePageSizeChange, page, pageCount, tooltip } = props;
|
|
23
|
+
const { t } = useTranslationRef(qetaTranslationRef);
|
|
24
|
+
const styles = useStyles();
|
|
25
|
+
return /* @__PURE__ */ jsxs(
|
|
26
|
+
Grid,
|
|
27
|
+
{
|
|
28
|
+
container: true,
|
|
29
|
+
className: styles.root,
|
|
30
|
+
spacing: 0,
|
|
31
|
+
alignItems: "center",
|
|
32
|
+
justifyContent: "center",
|
|
33
|
+
children: [
|
|
34
|
+
/* @__PURE__ */ jsx(Tooltip, { title: tooltip ?? t("pagination.defaultTooltip", {}), arrow: true, children: /* @__PURE__ */ jsx(FormControl, { variant: "outlined", children: /* @__PURE__ */ jsxs(
|
|
35
|
+
Select,
|
|
36
|
+
{
|
|
37
|
+
value: props.pageSize,
|
|
38
|
+
onChange: handlePageSizeChange,
|
|
39
|
+
variant: "outlined",
|
|
40
|
+
className: styles.pageSizeSelect,
|
|
41
|
+
children: [
|
|
42
|
+
/* @__PURE__ */ jsx(MenuItem, { value: 5, children: "5" }),
|
|
43
|
+
/* @__PURE__ */ jsx(MenuItem, { value: 10, children: "10" }),
|
|
44
|
+
/* @__PURE__ */ jsx(MenuItem, { value: 25, children: "25" }),
|
|
45
|
+
/* @__PURE__ */ jsx(MenuItem, { value: 50, children: "50" }),
|
|
46
|
+
/* @__PURE__ */ jsx(MenuItem, { value: 100, children: "100" })
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
) }) }),
|
|
50
|
+
/* @__PURE__ */ jsx(
|
|
51
|
+
Pagination,
|
|
52
|
+
{
|
|
53
|
+
page,
|
|
54
|
+
onChange: handlePageChange,
|
|
55
|
+
count: pageCount,
|
|
56
|
+
size: "large",
|
|
57
|
+
variant: "outlined",
|
|
58
|
+
className: styles.pagination,
|
|
59
|
+
showFirstButton: true,
|
|
60
|
+
showLastButton: true
|
|
61
|
+
}
|
|
62
|
+
)
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export { QetaPagination };
|
|
69
|
+
//# sourceMappingURL=QetaPagination.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QetaPagination.esm.js","sources":["../../../src/components/Utility/QetaPagination.tsx"],"sourcesContent":["import { ChangeEvent } from 'react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport {\n FormControl,\n Grid,\n makeStyles,\n MenuItem,\n Select,\n Tooltip,\n} from '@material-ui/core';\nimport { Pagination } from '@material-ui/lab';\n\nexport type QetaPaginationClassKeys = 'root' | 'pageSizeSelect' | 'pagination';\n\nconst useStyles = makeStyles(\n () => ({\n root: {\n marginTop: '2em',\n marginBottom: '2em',\n },\n pageSizeSelect: {\n marginRight: '1em',\n maxHeight: '42px',\n },\n pagination: {},\n }),\n { name: 'QetaPagination' },\n);\n\nexport const QetaPagination = (props: {\n pageSize: number;\n handlePageChange: (_event: ChangeEvent<unknown>, value: number) => void;\n handlePageSizeChange: (event: ChangeEvent<{ value: unknown }>) => void;\n page: number;\n tooltip?: string;\n pageCount: number;\n}) => {\n const { handlePageChange, handlePageSizeChange, page, pageCount, tooltip } =\n props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const styles = useStyles();\n return (\n <Grid\n container\n className={styles.root}\n spacing={0}\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n <Tooltip title={tooltip ?? t('pagination.defaultTooltip', {})} arrow>\n <FormControl variant=\"outlined\">\n <Select\n value={props.pageSize}\n onChange={handlePageSizeChange}\n variant=\"outlined\"\n className={styles.pageSizeSelect}\n >\n <MenuItem value={5}>5</MenuItem>\n <MenuItem value={10}>10</MenuItem>\n <MenuItem value={25}>25</MenuItem>\n <MenuItem value={50}>50</MenuItem>\n <MenuItem value={100}>100</MenuItem>\n </Select>\n </FormControl>\n </Tooltip>\n <Pagination\n page={page}\n onChange={handlePageChange}\n count={pageCount}\n size=\"large\"\n variant=\"outlined\"\n className={styles.pagination}\n showFirstButton\n showLastButton\n />\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;;;AAeA,MAAM,SAAY,GAAA,UAAA;AAAA,EAChB,OAAO;AAAA,IACL,IAAM,EAAA;AAAA,MACJ,SAAW,EAAA,KAAA;AAAA,MACX,YAAc,EAAA;AAAA,KAChB;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,WAAa,EAAA,KAAA;AAAA,MACb,SAAW,EAAA;AAAA,KACb;AAAA,IACA,YAAY;AAAC,GACf,CAAA;AAAA,EACA,EAAE,MAAM,gBAAiB;AAC3B,CAAA;AAEa,MAAA,cAAA,GAAiB,CAAC,KAOzB,KAAA;AACJ,EAAA,MAAM,EAAE,gBAAkB,EAAA,oBAAA,EAAsB,IAAM,EAAA,SAAA,EAAW,SAC/D,GAAA,KAAA;AACF,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,SAAS,SAAU,EAAA;AACzB,EACE,uBAAA,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAS,EAAA,IAAA;AAAA,MACT,WAAW,MAAO,CAAA,IAAA;AAAA,MAClB,OAAS,EAAA,CAAA;AAAA,MACT,UAAW,EAAA,QAAA;AAAA,MACX,cAAe,EAAA,QAAA;AAAA,MAEf,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,OAAQ,EAAA,EAAA,KAAA,EAAO,OAAW,IAAA,CAAA,CAAE,2BAA6B,EAAA,EAAE,CAAA,EAAG,KAAK,EAAA,IAAA,EAClE,QAAC,kBAAA,GAAA,CAAA,WAAA,EAAA,EAAY,SAAQ,UACnB,EAAA,QAAA,kBAAA,IAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAO,KAAM,CAAA,QAAA;AAAA,YACb,QAAU,EAAA,oBAAA;AAAA,YACV,OAAQ,EAAA,UAAA;AAAA,YACR,WAAW,MAAO,CAAA,cAAA;AAAA,YAElB,QAAA,EAAA;AAAA,8BAAC,GAAA,CAAA,QAAA,EAAA,EAAS,KAAO,EAAA,CAAA,EAAG,QAAC,EAAA,GAAA,EAAA,CAAA;AAAA,8BACpB,GAAA,CAAA,QAAA,EAAA,EAAS,KAAO,EAAA,EAAA,EAAI,QAAE,EAAA,IAAA,EAAA,CAAA;AAAA,8BACtB,GAAA,CAAA,QAAA,EAAA,EAAS,KAAO,EAAA,EAAA,EAAI,QAAE,EAAA,IAAA,EAAA,CAAA;AAAA,8BACtB,GAAA,CAAA,QAAA,EAAA,EAAS,KAAO,EAAA,EAAA,EAAI,QAAE,EAAA,IAAA,EAAA,CAAA;AAAA,8BACtB,GAAA,CAAA,QAAA,EAAA,EAAS,KAAO,EAAA,GAAA,EAAK,QAAG,EAAA,KAAA,EAAA;AAAA;AAAA;AAAA,WAE7B,CACF,EAAA,CAAA;AAAA,wBACA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,IAAA;AAAA,YACA,QAAU,EAAA,gBAAA;AAAA,YACV,KAAO,EAAA,SAAA;AAAA,YACP,IAAK,EAAA,OAAA;AAAA,YACL,OAAQ,EAAA,UAAA;AAAA,YACR,WAAW,MAAO,CAAA,UAAA;AAAA,YAClB,eAAe,EAAA,IAAA;AAAA,YACf,cAAc,EAAA;AAAA;AAAA;AAChB;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { makeStyles } from '@material-ui/core';
|
|
2
|
+
|
|
3
|
+
const useListItemStyles = makeStyles((theme) => ({
|
|
4
|
+
root: {
|
|
5
|
+
display: "flex",
|
|
6
|
+
flexDirection: "row",
|
|
7
|
+
alignItems: "center",
|
|
8
|
+
padding: theme.spacing(1, 2),
|
|
9
|
+
"&:hover": {
|
|
10
|
+
backgroundColor: theme.palette.action.hover
|
|
11
|
+
},
|
|
12
|
+
textDecoration: "none",
|
|
13
|
+
color: "inherit",
|
|
14
|
+
width: "100%",
|
|
15
|
+
"&:first-child": {
|
|
16
|
+
paddingTop: theme.spacing(2)
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}));
|
|
20
|
+
|
|
21
|
+
export { useListItemStyles };
|
|
22
|
+
//# sourceMappingURL=useListItemStyles.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useListItemStyles.esm.js","sources":["../../src/hooks/useListItemStyles.ts"],"sourcesContent":["import { makeStyles } from '@material-ui/core';\n\nexport const useListItemStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n padding: theme.spacing(1, 2),\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n textDecoration: 'none',\n color: 'inherit',\n width: '100%',\n '&:first-child': {\n paddingTop: theme.spacing(2),\n },\n },\n}));\n"],"names":[],"mappings":";;AAEa,MAAA,iBAAA,GAAoB,WAAW,CAAU,KAAA,MAAA;AAAA,EACpD,IAAM,EAAA;AAAA,IACJ,OAAS,EAAA,MAAA;AAAA,IACT,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,OAAS,EAAA,KAAA,CAAM,OAAQ,CAAA,CAAA,EAAG,CAAC,CAAA;AAAA,IAC3B,SAAW,EAAA;AAAA,MACT,eAAA,EAAiB,KAAM,CAAA,OAAA,CAAQ,MAAO,CAAA;AAAA,KACxC;AAAA,IACA,cAAgB,EAAA,MAAA;AAAA,IAChB,KAAO,EAAA,SAAA;AAAA,IACP,KAAO,EAAA,MAAA;AAAA,IACP,eAAiB,EAAA;AAAA,MACf,UAAA,EAAY,KAAM,CAAA,OAAA,CAAQ,CAAC;AAAA;AAC7B;AAEJ,CAAE,CAAA;;;;"}
|
|
@@ -1,68 +1,48 @@
|
|
|
1
1
|
import { useAnalytics } from '@backstage/core-plugin-api';
|
|
2
2
|
import { useState, useEffect } from 'react';
|
|
3
3
|
import { useSearchParams } from 'react-router-dom';
|
|
4
|
-
import { filterKeys } from '../components/FilterPanel/FilterPanel.esm.js';
|
|
5
4
|
import useDebounce from 'react-use/lib/useDebounce';
|
|
6
|
-
import { getFiltersWithDateRange } from '../utils/utils.esm.js';
|
|
7
|
-
import { filterTags } from '@drodil/backstage-plugin-qeta-common';
|
|
8
5
|
import { useQetaApi } from './useQetaApi.esm.js';
|
|
6
|
+
import { filterKeys } from '../components/FilterPanel/FilterPanel.esm.js';
|
|
7
|
+
import { filterTags } from '@drodil/backstage-plugin-qeta-common';
|
|
8
|
+
import { useUserSettings } from './useUserSettings.esm.js';
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
function usePaginatedPosts(props) {
|
|
10
|
+
function useQetaEntities(props) {
|
|
12
11
|
const {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
12
|
+
fetch,
|
|
13
|
+
initialFilters,
|
|
14
|
+
prefix,
|
|
15
|
+
defaultPageSize,
|
|
16
|
+
filterKeys: filterKeys$1,
|
|
17
|
+
fetchDeps,
|
|
18
|
+
getKey,
|
|
19
|
+
usePagination
|
|
21
20
|
} = props;
|
|
22
21
|
const analytics = useAnalytics();
|
|
23
22
|
const [page, setPage] = useState(1);
|
|
24
|
-
const
|
|
25
|
-
const
|
|
23
|
+
const [pageSize, setPageSize] = useState(defaultPageSize ?? 24);
|
|
24
|
+
const { getSetting, setSetting } = useUserSettings();
|
|
26
25
|
const [showFilterPanel, setShowFilterPanel] = useState(
|
|
27
|
-
|
|
26
|
+
getSetting("filterPanelExpanded")[prefix] ?? false
|
|
28
27
|
);
|
|
29
28
|
const [searchParams, setSearchParams] = useSearchParams();
|
|
30
29
|
const [searchQuery, setSearchQuery] = useState("");
|
|
31
|
-
const [filters, setFilters] = useState(
|
|
32
|
-
|
|
33
|
-
orderBy: props.orderBy ?? "created",
|
|
34
|
-
noAnswers: props.noAnswers ?? "false",
|
|
35
|
-
noCorrectAnswer: props.noCorrectAnswer ?? "false",
|
|
36
|
-
noVotes: props.noVotes ?? "false",
|
|
37
|
-
searchQuery: props.searchQuery ?? "",
|
|
38
|
-
entities: entities ?? (entity ? [entity] : void 0),
|
|
39
|
-
tags,
|
|
40
|
-
dateRange: "",
|
|
41
|
-
collectionId: props.collectionId,
|
|
42
|
-
status,
|
|
43
|
-
type
|
|
44
|
-
});
|
|
45
|
-
const [posts, setPosts] = useState([]);
|
|
30
|
+
const [filters, setFilters] = useState(initialFilters);
|
|
31
|
+
const [items, setItems] = useState([]);
|
|
46
32
|
const [hasMore, setHasMore] = useState(true);
|
|
47
33
|
const [total, setTotal] = useState(0);
|
|
48
34
|
useEffect(() => {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}, [showFilterPanel]);
|
|
35
|
+
if (defaultPageSize) {
|
|
36
|
+
setPageSize(defaultPageSize);
|
|
37
|
+
}
|
|
38
|
+
}, [defaultPageSize]);
|
|
54
39
|
useEffect(() => {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
collectionId: props.collectionId
|
|
62
|
-
}));
|
|
63
|
-
setPage(1);
|
|
64
|
-
setPosts([]);
|
|
65
|
-
}, [tags, entities, entity, type, status, props.collectionId]);
|
|
40
|
+
const currentExpanded = getSetting("filterPanelExpanded");
|
|
41
|
+
setSetting("filterPanelExpanded", {
|
|
42
|
+
...currentExpanded,
|
|
43
|
+
[prefix]: showFilterPanel
|
|
44
|
+
});
|
|
45
|
+
}, [showFilterPanel, prefix, getSetting, setSetting]);
|
|
66
46
|
const onPageChange = (value) => {
|
|
67
47
|
setPage(value);
|
|
68
48
|
setSearchParams((prev) => {
|
|
@@ -77,7 +57,6 @@ function usePaginatedPosts(props) {
|
|
|
77
57
|
const onFilterChange = (changes) => {
|
|
78
58
|
const changesArray = Array.isArray(changes) ? changes : [changes];
|
|
79
59
|
setPage(1);
|
|
80
|
-
setPosts([]);
|
|
81
60
|
setFilters((prev) => {
|
|
82
61
|
const newValue = { ...prev };
|
|
83
62
|
for (const { key, value } of changesArray) {
|
|
@@ -88,7 +67,8 @@ function usePaginatedPosts(props) {
|
|
|
88
67
|
setSearchParams((prev) => {
|
|
89
68
|
const newValue = prev;
|
|
90
69
|
for (const { key, value } of changesArray) {
|
|
91
|
-
|
|
70
|
+
const allowedKeys = filterKeys$1 ?? filterKeys;
|
|
71
|
+
if (!allowedKeys.includes(key)) {
|
|
92
72
|
continue;
|
|
93
73
|
}
|
|
94
74
|
if (!value || value === "false") {
|
|
@@ -112,17 +92,14 @@ function usePaginatedPosts(props) {
|
|
|
112
92
|
};
|
|
113
93
|
const onSearchQueryChange = (query) => {
|
|
114
94
|
onPageChange(1);
|
|
115
|
-
setPosts([]);
|
|
116
95
|
if (query) {
|
|
117
|
-
analytics.captureEvent(
|
|
96
|
+
analytics.captureEvent(`qeta_search_${prefix}`, query);
|
|
118
97
|
}
|
|
119
98
|
setSearchQuery(query);
|
|
120
99
|
};
|
|
121
100
|
useDebounce(
|
|
122
101
|
() => {
|
|
123
102
|
if (filters.searchQuery !== searchQuery) {
|
|
124
|
-
setPage(1);
|
|
125
|
-
setPosts([]);
|
|
126
103
|
setFilters({ ...filters, searchQuery });
|
|
127
104
|
}
|
|
128
105
|
},
|
|
@@ -139,12 +116,12 @@ function usePaginatedPosts(props) {
|
|
|
139
116
|
setPage(pv);
|
|
140
117
|
} else {
|
|
141
118
|
setPage(1);
|
|
142
|
-
|
|
119
|
+
setItems([]);
|
|
143
120
|
}
|
|
144
|
-
} else if (key ===
|
|
121
|
+
} else if (key === `${prefix}PerPage`) {
|
|
145
122
|
const qpp = Number.parseInt(value, 10);
|
|
146
|
-
if (qpp > 0)
|
|
147
|
-
} else if (filterKeys.includes(key)) {
|
|
123
|
+
if (qpp > 0) setPageSize(qpp);
|
|
124
|
+
} else if ((filterKeys$1 ?? filterKeys).includes(key)) {
|
|
148
125
|
filtersApplied = true;
|
|
149
126
|
if (key === "tags") {
|
|
150
127
|
filters.tags = filterTags(value.split(",")) ?? [];
|
|
@@ -161,7 +138,7 @@ function usePaginatedPosts(props) {
|
|
|
161
138
|
if (filtersApplied) {
|
|
162
139
|
setShowFilterPanel(true);
|
|
163
140
|
}
|
|
164
|
-
}, [searchParams,
|
|
141
|
+
}, [searchParams, filterKeys$1, prefix]);
|
|
165
142
|
const {
|
|
166
143
|
value: response,
|
|
167
144
|
loading,
|
|
@@ -169,34 +146,31 @@ function usePaginatedPosts(props) {
|
|
|
169
146
|
retry
|
|
170
147
|
} = useQetaApi(
|
|
171
148
|
(api) => {
|
|
172
|
-
return api
|
|
173
|
-
type,
|
|
174
|
-
limit: postsPerPage,
|
|
175
|
-
offset: (page - 1) * postsPerPage,
|
|
176
|
-
includeEntities: true,
|
|
177
|
-
includeAnswers: false,
|
|
178
|
-
includeComments: false,
|
|
179
|
-
includeAttachments: false,
|
|
180
|
-
includeExperts: false,
|
|
181
|
-
author,
|
|
182
|
-
favorite,
|
|
183
|
-
status,
|
|
184
|
-
...getFiltersWithDateRange(filters)
|
|
185
|
-
});
|
|
149
|
+
return fetch(api, pageSize, (page - 1) * pageSize, filters);
|
|
186
150
|
},
|
|
187
|
-
[
|
|
151
|
+
[page, filters, pageSize, ...fetchDeps ?? []]
|
|
188
152
|
);
|
|
189
153
|
useEffect(() => {
|
|
190
154
|
if (response) {
|
|
191
|
-
if (page === 1) {
|
|
192
|
-
|
|
155
|
+
if (page === 1 || usePagination) {
|
|
156
|
+
setItems(response.items);
|
|
193
157
|
} else {
|
|
194
|
-
|
|
158
|
+
setItems((prev) => {
|
|
159
|
+
const newItems = response.items.filter(
|
|
160
|
+
(newItem) => !prev.some((prevItem) => {
|
|
161
|
+
if (getKey) {
|
|
162
|
+
return getKey(prevItem) === getKey(newItem);
|
|
163
|
+
}
|
|
164
|
+
return prevItem.id === newItem.id;
|
|
165
|
+
})
|
|
166
|
+
);
|
|
167
|
+
return [...prev, ...newItems];
|
|
168
|
+
});
|
|
195
169
|
}
|
|
196
|
-
setHasMore((response.
|
|
170
|
+
setHasMore((response.items ?? []).length >= pageSize);
|
|
197
171
|
setTotal(response.total);
|
|
198
172
|
}
|
|
199
|
-
}, [response, page,
|
|
173
|
+
}, [response, page, pageSize, getKey, usePagination]);
|
|
200
174
|
const onPageSizeChange = (value) => {
|
|
201
175
|
if (response) {
|
|
202
176
|
let newPage = page;
|
|
@@ -205,18 +179,18 @@ function usePaginatedPosts(props) {
|
|
|
205
179
|
}
|
|
206
180
|
onPageChange(Math.max(1, newPage));
|
|
207
181
|
}
|
|
208
|
-
|
|
182
|
+
setPageSize(value);
|
|
209
183
|
setSearchParams((prev) => {
|
|
210
184
|
const newValue = prev;
|
|
211
|
-
newValue.set(
|
|
185
|
+
newValue.set(`${prefix}PerPage`, String(value));
|
|
212
186
|
return newValue;
|
|
213
187
|
});
|
|
214
188
|
};
|
|
215
189
|
return {
|
|
216
190
|
page,
|
|
217
191
|
setPage,
|
|
218
|
-
|
|
219
|
-
|
|
192
|
+
pageSize,
|
|
193
|
+
setPageSize,
|
|
220
194
|
showFilterPanel,
|
|
221
195
|
setShowFilterPanel,
|
|
222
196
|
searchParams,
|
|
@@ -230,17 +204,16 @@ function usePaginatedPosts(props) {
|
|
|
230
204
|
onFilterChange,
|
|
231
205
|
onSearchQueryChange,
|
|
232
206
|
response,
|
|
233
|
-
|
|
207
|
+
items: (page === 1 || usePagination) && !loading && response ? response.items : items,
|
|
234
208
|
hasMore,
|
|
235
209
|
total,
|
|
236
210
|
loading,
|
|
237
211
|
error,
|
|
238
212
|
loadNextPage,
|
|
239
|
-
pageCount,
|
|
240
213
|
retry,
|
|
241
214
|
fetchNextPage: loadNextPage
|
|
242
215
|
};
|
|
243
216
|
}
|
|
244
217
|
|
|
245
|
-
export {
|
|
246
|
-
//# sourceMappingURL=
|
|
218
|
+
export { useQetaEntities };
|
|
219
|
+
//# sourceMappingURL=useQetaEntities.esm.js.map
|