@drodil/backstage-plugin-qeta-react 3.52.6 → 3.53.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/dist/components/AIAnswerCard/AIAnswerCard.esm.js +11 -11
  2. package/dist/components/AIAnswerCard/AIAnswerCard.esm.js.map +1 -1
  3. package/dist/components/AnswerForm/AnswerForm.esm.js +5 -0
  4. package/dist/components/AnswerForm/AnswerForm.esm.js.map +1 -1
  5. package/dist/components/AnswersContainer/AnswerListItem.esm.js +4 -2
  6. package/dist/components/AnswersContainer/AnswerListItem.esm.js.map +1 -1
  7. package/dist/components/AnswersContainer/AnswersContainer.esm.js +59 -231
  8. package/dist/components/AnswersContainer/AnswersContainer.esm.js.map +1 -1
  9. package/dist/components/AnswersContainer/AnswersGridItem.esm.js +167 -0
  10. package/dist/components/AnswersContainer/AnswersGridItem.esm.js.map +1 -0
  11. package/dist/components/ArticleContent/ArticleButtons.esm.js +14 -1
  12. package/dist/components/ArticleContent/ArticleButtons.esm.js.map +1 -1
  13. package/dist/components/Badges/UserBadges.esm.js +7 -2
  14. package/dist/components/Badges/UserBadges.esm.js.map +1 -1
  15. package/dist/components/Buttons/AddToCollectionButton.esm.js +7 -2
  16. package/dist/components/Buttons/AddToCollectionButton.esm.js.map +1 -1
  17. package/dist/components/Buttons/EntityFollowButton.esm.js +7 -2
  18. package/dist/components/Buttons/EntityFollowButton.esm.js.map +1 -1
  19. package/dist/components/Buttons/RankingButtons.esm.js +94 -0
  20. package/dist/components/Buttons/RankingButtons.esm.js.map +1 -0
  21. package/dist/components/Buttons/TagFollowButton.esm.js +8 -3
  22. package/dist/components/Buttons/TagFollowButton.esm.js.map +1 -1
  23. package/dist/components/Buttons/UserFollowButton.esm.js +7 -2
  24. package/dist/components/Buttons/UserFollowButton.esm.js.map +1 -1
  25. package/dist/components/Buttons/VoteButtons.esm.js +12 -1
  26. package/dist/components/Buttons/VoteButtons.esm.js.map +1 -1
  27. package/dist/components/CollectionsContainer/CollectionListItem.esm.js +143 -0
  28. package/dist/components/CollectionsContainer/CollectionListItem.esm.js.map +1 -0
  29. package/dist/components/CollectionsContainer/CollectionsContainer.esm.js +45 -0
  30. package/dist/components/CollectionsContainer/CollectionsContainer.esm.js.map +1 -0
  31. package/dist/components/CollectionsContainer/CollectionsGridItem.esm.js.map +1 -0
  32. package/dist/components/ContentHeader/ContentHeader.esm.js +6 -0
  33. package/dist/components/ContentHeader/ContentHeader.esm.js.map +1 -1
  34. package/dist/components/EntitiesContainer/EntitiesContainer.esm.js +44 -0
  35. package/dist/components/EntitiesContainer/EntitiesContainer.esm.js.map +1 -0
  36. package/dist/components/{EntitiesGrid → EntitiesContainer}/EntitiesGridItem.esm.js +18 -26
  37. package/dist/components/EntitiesContainer/EntitiesGridItem.esm.js.map +1 -0
  38. package/dist/components/EntitiesContainer/EntityListItem.esm.js +102 -0
  39. package/dist/components/EntitiesContainer/EntityListItem.esm.js.map +1 -0
  40. package/dist/components/FilterPanel/FilterPanel.esm.js +2 -2
  41. package/dist/components/FilterPanel/FilterPanel.esm.js.map +1 -1
  42. package/dist/components/FollowedLists/FollowedEntitiesList.esm.js +7 -3
  43. package/dist/components/FollowedLists/FollowedEntitiesList.esm.js.map +1 -1
  44. package/dist/components/FollowedLists/FollowedTagsList.esm.js +8 -4
  45. package/dist/components/FollowedLists/FollowedTagsList.esm.js.map +1 -1
  46. package/dist/components/FollowedLists/FollowedUsersList.esm.js +7 -3
  47. package/dist/components/FollowedLists/FollowedUsersList.esm.js.map +1 -1
  48. package/dist/components/HomePageCards/ImpactCard.esm.js +7 -2
  49. package/dist/components/HomePageCards/ImpactCard.esm.js.map +1 -1
  50. package/dist/components/HomePageCards/PostsCard.esm.js +23 -15
  51. package/dist/components/HomePageCards/PostsCard.esm.js.map +1 -1
  52. package/dist/components/LeftMenu/LeftMenu.esm.js +15 -16
  53. package/dist/components/LeftMenu/LeftMenu.esm.js.map +1 -1
  54. package/dist/components/LinkCard/LinkCard.esm.js +4 -0
  55. package/dist/components/LinkCard/LinkCard.esm.js.map +1 -1
  56. package/dist/components/Links/Links.esm.js +11 -1
  57. package/dist/components/Links/Links.esm.js.map +1 -1
  58. package/dist/components/PostForm/EntitiesInput.esm.js +229 -226
  59. package/dist/components/PostForm/EntitiesInput.esm.js.map +1 -1
  60. package/dist/components/PostForm/PostForm.esm.js +13 -10
  61. package/dist/components/PostForm/PostForm.esm.js.map +1 -1
  62. package/dist/components/PostForm/TagInput.esm.js +4 -3
  63. package/dist/components/PostForm/TagInput.esm.js.map +1 -1
  64. package/dist/components/PostHighlightList/PostHighlightList.esm.js +6 -2
  65. package/dist/components/PostHighlightList/PostHighlightList.esm.js.map +1 -1
  66. package/dist/components/PostsContainer/PostListItem.esm.js +58 -19
  67. package/dist/components/PostsContainer/PostListItem.esm.js.map +1 -1
  68. package/dist/components/PostsContainer/PostsContainer.esm.js +137 -128
  69. package/dist/components/PostsContainer/PostsContainer.esm.js.map +1 -1
  70. package/dist/components/{PostsGrid → PostsContainer}/PostsGridItem.esm.js +29 -53
  71. package/dist/components/PostsContainer/PostsGridItem.esm.js.map +1 -0
  72. package/dist/components/PostsTable/PostsTable.esm.js +7 -2
  73. package/dist/components/PostsTable/PostsTable.esm.js.map +1 -1
  74. package/dist/components/QetaEntityContainer/QetaEntityContainer.esm.js +178 -0
  75. package/dist/components/QetaEntityContainer/QetaEntityContainer.esm.js.map +1 -0
  76. package/dist/components/QuestionCard/QuestionCard.esm.js +100 -88
  77. package/dist/components/QuestionCard/QuestionCard.esm.js.map +1 -1
  78. package/dist/components/SuggestionsCard/SuggestionsCard.esm.js +7 -3
  79. package/dist/components/SuggestionsCard/SuggestionsCard.esm.js.map +1 -1
  80. package/dist/components/TagsAndEntities/EntityChip.esm.js +6 -2
  81. package/dist/components/TagsAndEntities/EntityChip.esm.js.map +1 -1
  82. package/dist/components/TagsAndEntities/TagChip.esm.js +6 -2
  83. package/dist/components/TagsAndEntities/TagChip.esm.js.map +1 -1
  84. package/dist/components/TagsAndEntities/UserChip.esm.js +7 -3
  85. package/dist/components/TagsAndEntities/UserChip.esm.js.map +1 -1
  86. package/dist/components/TagsContainer/CreateTagModal.esm.js.map +1 -0
  87. package/dist/components/TagsContainer/EditTagModal.esm.js.map +1 -0
  88. package/dist/components/{TagsGrid → TagsContainer}/TagGridItem.esm.js +3 -3
  89. package/dist/components/TagsContainer/TagGridItem.esm.js.map +1 -0
  90. package/dist/components/TagsContainer/TagListItem.esm.js +243 -0
  91. package/dist/components/TagsContainer/TagListItem.esm.js.map +1 -0
  92. package/dist/components/TagsContainer/TagsContainer.esm.js +86 -0
  93. package/dist/components/TagsContainer/TagsContainer.esm.js.map +1 -0
  94. package/dist/components/TemplateList/TemplateForm.esm.js +7 -2
  95. package/dist/components/TemplateList/TemplateForm.esm.js.map +1 -1
  96. package/dist/components/TemplateList/TemplateList.esm.js +7 -3
  97. package/dist/components/TemplateList/TemplateList.esm.js.map +1 -1
  98. package/dist/components/Timeline/TimelineItem.esm.js +4 -0
  99. package/dist/components/Timeline/TimelineItem.esm.js.map +1 -1
  100. package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js +7 -2
  101. package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js.map +1 -1
  102. package/dist/components/UsersContainer/UserListItem.esm.js +133 -0
  103. package/dist/components/UsersContainer/UserListItem.esm.js.map +1 -0
  104. package/dist/components/UsersContainer/UsersContainer.esm.js +44 -0
  105. package/dist/components/UsersContainer/UsersContainer.esm.js.map +1 -0
  106. package/dist/components/{UsersGrid → UsersContainer}/UsersGridItem.esm.js +35 -38
  107. package/dist/components/UsersContainer/UsersGridItem.esm.js.map +1 -0
  108. package/dist/components/Utility/QetaGridHeader.esm.js +15 -11
  109. package/dist/components/Utility/QetaGridHeader.esm.js.map +1 -1
  110. package/dist/components/Utility/QetaPagination.esm.js +69 -0
  111. package/dist/components/Utility/QetaPagination.esm.js.map +1 -0
  112. package/dist/hooks/useEntityAuthor.esm.js +3 -1
  113. package/dist/hooks/useEntityAuthor.esm.js.map +1 -1
  114. package/dist/hooks/useListItemStyles.esm.js +22 -0
  115. package/dist/hooks/useListItemStyles.esm.js.map +1 -0
  116. package/dist/hooks/{usePaginatedPosts.esm.js → useQetaEntities.esm.js} +59 -86
  117. package/dist/hooks/useQetaEntities.esm.js.map +1 -0
  118. package/dist/hooks/useUserSettings.esm.js +83 -0
  119. package/dist/hooks/useUserSettings.esm.js.map +1 -0
  120. package/dist/index.d.ts +211 -58
  121. package/dist/index.esm.js +21 -8
  122. package/dist/index.esm.js.map +1 -1
  123. package/dist/routes.esm.js +6 -1
  124. package/dist/routes.esm.js.map +1 -1
  125. package/dist/translation.esm.js +49 -0
  126. package/dist/translation.esm.js.map +1 -1
  127. package/package.json +2 -2
  128. package/dist/components/AnswersContainer/AnswerList.esm.js +0 -54
  129. package/dist/components/AnswersContainer/AnswerList.esm.js.map +0 -1
  130. package/dist/components/CollectionsGrid/CollectionsGrid.esm.js +0 -204
  131. package/dist/components/CollectionsGrid/CollectionsGrid.esm.js.map +0 -1
  132. package/dist/components/CollectionsGrid/CollectionsGridContent.esm.js +0 -55
  133. package/dist/components/CollectionsGrid/CollectionsGridContent.esm.js.map +0 -1
  134. package/dist/components/CollectionsGrid/CollectionsGridItem.esm.js.map +0 -1
  135. package/dist/components/CollectionsGrid/NoCollectionsCard.esm.js +0 -21
  136. package/dist/components/CollectionsGrid/NoCollectionsCard.esm.js.map +0 -1
  137. package/dist/components/EntitiesGrid/EntitiesGrid.esm.js +0 -136
  138. package/dist/components/EntitiesGrid/EntitiesGrid.esm.js.map +0 -1
  139. package/dist/components/EntitiesGrid/EntitiesGridContent.esm.js +0 -46
  140. package/dist/components/EntitiesGrid/EntitiesGridContent.esm.js.map +0 -1
  141. package/dist/components/EntitiesGrid/EntitiesGridItem.esm.js.map +0 -1
  142. package/dist/components/EntitiesGrid/NoEntitiesCard.esm.js +0 -21
  143. package/dist/components/EntitiesGrid/NoEntitiesCard.esm.js.map +0 -1
  144. package/dist/components/PostsContainer/PostList.esm.js +0 -83
  145. package/dist/components/PostsContainer/PostList.esm.js.map +0 -1
  146. package/dist/components/PostsGrid/PostsGrid.esm.js +0 -197
  147. package/dist/components/PostsGrid/PostsGrid.esm.js.map +0 -1
  148. package/dist/components/PostsGrid/PostsGridContent.esm.js +0 -90
  149. package/dist/components/PostsGrid/PostsGridContent.esm.js.map +0 -1
  150. package/dist/components/PostsGrid/PostsGridItem.esm.js.map +0 -1
  151. package/dist/components/TagsGrid/CreateTagModal.esm.js.map +0 -1
  152. package/dist/components/TagsGrid/EditTagModal.esm.js.map +0 -1
  153. package/dist/components/TagsGrid/NoTagsCard.esm.js +0 -21
  154. package/dist/components/TagsGrid/NoTagsCard.esm.js.map +0 -1
  155. package/dist/components/TagsGrid/TagGridItem.esm.js.map +0 -1
  156. package/dist/components/TagsGrid/TagsGrid.esm.js +0 -190
  157. package/dist/components/TagsGrid/TagsGrid.esm.js.map +0 -1
  158. package/dist/components/TagsGrid/TagsGridContent.esm.js +0 -62
  159. package/dist/components/TagsGrid/TagsGridContent.esm.js.map +0 -1
  160. package/dist/components/UsersGrid/NoUsersCard.esm.js +0 -21
  161. package/dist/components/UsersGrid/NoUsersCard.esm.js.map +0 -1
  162. package/dist/components/UsersGrid/UsersGrid.esm.js +0 -137
  163. package/dist/components/UsersGrid/UsersGrid.esm.js.map +0 -1
  164. package/dist/components/UsersGrid/UsersGridContent.esm.js +0 -46
  165. package/dist/components/UsersGrid/UsersGridContent.esm.js.map +0 -1
  166. package/dist/components/UsersGrid/UsersGridItem.esm.js.map +0 -1
  167. package/dist/hooks/usePaginatedPosts.esm.js.map +0 -1
  168. /package/dist/components/{CollectionsGrid → CollectionsContainer}/CollectionsGridItem.esm.js +0 -0
  169. /package/dist/components/{TagsGrid → TagsContainer}/CreateTagModal.esm.js +0 -0
  170. /package/dist/components/{TagsGrid → TagsContainer}/EditTagModal.esm.js +0 -0
@@ -7,15 +7,20 @@ import { useQetaApi } from '../../hooks/useQetaApi.esm.js';
7
7
  import 'react';
8
8
  import '@backstage/core-plugin-api';
9
9
  import '../../api.esm.js';
10
+ import '@backstage/plugin-signals-react';
11
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
12
+ import { qetaTranslationRef } from '../../translation.esm.js';
13
+ import '../../hooks/useListItemStyles.esm.js';
10
14
  import '@backstage/catalog-model';
11
15
  import 'dataloader';
12
16
  import '@backstage/plugin-catalog-react';
13
- import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
14
- import { qetaTranslationRef } from '../../translation.esm.js';
15
17
  import 'react-use/lib/useAsync';
16
18
  import '@backstage/plugin-permission-react';
17
19
  import '@drodil/backstage-plugin-qeta-common';
18
20
  import '@backstage/plugin-permission-common';
21
+ import 'react-router-dom';
22
+ import 'react-use/lib/useDebounce';
23
+ import '../FilterPanel/FilterPanel.esm.js';
19
24
 
20
25
  const useStyles = makeStyles((theme) => {
21
26
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"TopRankingUsersCard.esm.js","sources":["../../../src/components/TopRankingUsersCard/TopRankingUsersCard.tsx"],"sourcesContent":["import { ReactElement, ReactNode } from 'react';\nimport {\n CardTab,\n Progress,\n TabbedCard,\n WarningPanel,\n} from '@backstage/core-components';\nimport {\n Avatar,\n Box,\n List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n makeStyles,\n Paper,\n Typography,\n} from '@material-ui/core';\nimport { StatisticResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { TrophyIcon } from './TrophyIcon';\nimport { UserLink } from '../Links';\nimport { useQetaApi } from '../../hooks';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nconst useStyles = makeStyles(theme => {\n return {\n root: {\n '& .MuiTabbedCard-root': {\n borderRadius: '12px',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.1)',\n },\n '& .MuiCardHeader-root': {\n padding: theme.spacing(2, 3),\n borderBottom: `1px solid ${theme.palette.divider}`,\n },\n '& .MuiTabs-root': {\n backgroundColor: theme.palette.background.paper,\n borderBottom: `1px solid ${theme.palette.divider}`,\n },\n },\n trophyIcon: {\n backgroundColor: theme.palette.background.paper,\n color: theme.palette.text.primary,\n borderRadius: '50%',\n boxSizing: 'border-box',\n padding: '0.5rem',\n height: 48,\n width: 48,\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',\n transition: 'transform 0.2s ease-in-out',\n '&:hover': {\n transform: 'scale(1.05)',\n },\n },\n votesText: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginLeft: '16px',\n backgroundColor: theme.palette.background.paper,\n padding: theme.spacing(0.5, 2),\n borderRadius: '20px',\n boxShadow: '0 2px 4px rgba(0, 0, 0, 0.05)',\n },\n rankingCard: {\n padding: theme.spacing(2),\n },\n rankingCardDescription: {\n color: theme.palette.text.secondary,\n marginBottom: theme.spacing(2),\n },\n rankingCardList: {\n '& .MuiListItem-root': {\n marginBottom: theme.spacing(1),\n borderRadius: '8px',\n transition: 'background-color 0.2s ease-in-out',\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n },\n },\n rankingRow: {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(1.5, 2),\n },\n userInfo: {\n display: 'flex',\n alignItems: 'center',\n flex: 1,\n },\n position: {\n fontWeight: 800,\n marginRight: theme.spacing(2),\n color: theme.palette.text.secondary,\n minWidth: '30px',\n textAlign: 'right',\n },\n topPosition: {\n color: theme.palette.primary.main,\n fontSize: '1.1rem',\n },\n divider: {\n margin: theme.spacing(2, 0),\n opacity: 0.5,\n border: 0,\n borderBottom: `1px solid ${theme.palette.divider}`,\n },\n };\n});\n\ntype RankingIcon = {\n iconsByRanking: Map<number, ReactNode>;\n userRankingIcon: ReactNode;\n};\n\nconst DefaultRankingIcons = new Map<number, ReactNode>([\n [\n 1,\n <TrophyIcon\n style={{ color: '#DAA520', height: '2.2rem', width: '2.2rem' }}\n />,\n ],\n [\n 2,\n <TrophyIcon\n style={{ color: '#C0C0C0', height: '2.1rem', width: '2.1rem' }}\n />,\n ],\n [\n 3,\n <TrophyIcon style={{ color: '#B87333', height: '2rem', width: '2rem' }} />,\n ],\n]);\n\nconst DefaultUserIcon = (\n <TrophyIcon style={{ height: '2rem', width: '2rem' }} />\n);\n\nconst getOrdinal = (n: number) => {\n if (n % 10 === 1 && n % 100 !== 11) {\n return `${n}st`;\n } else if (n % 10 === 2 && n % 100 !== 12) {\n return `${n}nd`;\n } else if (n % 10 === 3 && n % 100 !== 13) {\n return `${n}rd`;\n }\n\n return `${n}th`;\n};\n\nexport const RankingRow = (props: {\n userRef?: string;\n total: number;\n position: number;\n rankingIcon?: RankingIcon;\n unit: string;\n}) => {\n const classes = useStyles();\n const userRef = props.userRef;\n\n const ordinalPosition = props?.position ? getOrdinal(props?.position) : '';\n\n const userIcon = props.rankingIcon?.userRankingIcon\n ? props.rankingIcon?.userRankingIcon\n : DefaultUserIcon;\n\n const topRankingIcon = props.rankingIcon\n ? props.rankingIcon.iconsByRanking.get(Number(props?.position))\n : DefaultRankingIcons.get(Number(props?.position)) || DefaultUserIcon;\n\n const rankingIcon = props?.position > 3 ? userIcon : topRankingIcon;\n\n return (\n <ListItem className={classes.rankingRow}>\n <ListItemAvatar>\n <Avatar className={classes.trophyIcon}>{rankingIcon}</Avatar>\n </ListItemAvatar>\n\n <ListItemText\n disableTypography\n className={classes.userInfo}\n primary={\n <Box display=\"flex\" alignItems=\"center\">\n <Typography\n className={`${classes.position} ${\n props.position <= 3 ? classes.topPosition : ''\n }`}\n variant=\"subtitle1\"\n >\n {ordinalPosition}\n </Typography>\n <UserLink entityRef={userRef ?? ''} />\n </Box>\n }\n />\n\n <div className={classes.votesText}>\n <Typography variant=\"subtitle1\" style={{ fontWeight: 500 }}>\n {props?.total} {props.unit}\n </Typography>\n </div>\n </ListItem>\n );\n};\n\nexport const RankingCard = (props: {\n limit?: number;\n description: string;\n statistic?: StatisticResponse;\n unit: string;\n}) => {\n const classes = useStyles();\n const rankingStats = props.limit\n ? props.statistic?.ranking.slice(0, props.limit)\n : props.statistic?.ranking;\n\n return (\n <Paper elevation={0} className={classes.rankingCard}>\n <Typography className={classes.rankingCardDescription}>\n {props.description}\n </Typography>\n <List className={classes.rankingCardList}>\n {rankingStats?.map(authorStats => (\n <RankingRow\n total={authorStats.total || 0}\n position={authorStats.position || 0}\n userRef={authorStats.author}\n unit={props.unit}\n key={authorStats.author}\n />\n ))}\n {!rankingStats?.some(\n authorStats =>\n authorStats.author === props.statistic?.loggedUser?.author,\n ) && (\n <>\n <hr className={classes.divider} />\n <RankingRow\n total={props.statistic?.loggedUser?.total || 0}\n position={props.statistic?.loggedUser?.position || 0}\n userRef={props.statistic?.loggedUser?.author}\n unit={props.unit}\n />\n </>\n )}\n </List>\n </Paper>\n );\n};\n\nexport const TopRankingUsers = (props: {\n title?: string;\n hideTitle?: boolean;\n limit?: number;\n}) => {\n const classes = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n const {\n value: topStatistics,\n loading,\n error,\n } = useQetaApi(api =>\n api.getTopStatisticsHomepage({\n options: { limit: 50 },\n }),\n );\n\n const tabData = [\n {\n title: t('statistics.mostQuestions.title'),\n description: t('statistics.mostQuestions.description'),\n unit: 'questions',\n },\n {\n title: t('statistics.mostAnswers.title'),\n description: t('statistics.mostAnswers.description'),\n unit: 'answers',\n },\n {\n title: t('statistics.topVotedQuestions.title'),\n description: t('statistics.topVotedQuestions.description'),\n unit: 'votes',\n },\n {\n title: t('statistics.topVotedAnswers.title'),\n description: t('statistics.topVotedAnswers.description'),\n unit: 'votes',\n },\n {\n title: t('statistics.topVotedCorrectAnswers.title'),\n description: t('statistics.topVotedCorrectAnswers.description'),\n unit: 'votes',\n },\n ];\n\n if ((error || topStatistics === undefined) && !loading) {\n return (\n <WarningPanel severity=\"error\" title={t('statistics.errorLoading')}>\n {error?.message}\n </WarningPanel>\n );\n }\n\n let content: ReactElement[];\n\n if (loading) {\n content = [\n <CardTab>\n <Box display=\"flex\" justifyContent=\"center\" p={3}>\n <Progress />\n </Box>\n </CardTab>,\n ];\n } else if (topStatistics && topStatistics.length > 0) {\n content = topStatistics?.map((stats, index) => {\n return (\n <CardTab label={tabData[index].title} key={tabData[index].title}>\n <RankingCard\n description={tabData[index].description}\n limit={props.limit}\n statistic={stats}\n unit={tabData[index].unit}\n />\n </CardTab>\n );\n });\n } else {\n content = [\n <CardTab>\n <Box display=\"flex\" justifyContent=\"center\" p={3}>\n {t('statistics.notAvailable')}\n </Box>\n </CardTab>,\n ];\n }\n\n return (\n <div className={classes.root}>\n <TabbedCard title={props.title || t('statistics.ranking')}>\n {content}\n </TabbedCard>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TopRankingUsersCard.esm.js","sources":["../../../src/components/TopRankingUsersCard/TopRankingUsersCard.tsx"],"sourcesContent":["import { ReactElement, ReactNode } from 'react';\nimport {\n CardTab,\n Progress,\n TabbedCard,\n WarningPanel,\n} from '@backstage/core-components';\nimport {\n Avatar,\n Box,\n List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n makeStyles,\n Paper,\n Typography,\n} from '@material-ui/core';\nimport { StatisticResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { TrophyIcon } from './TrophyIcon';\nimport { UserLink } from '../Links';\nimport { useQetaApi } from '../../hooks';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nconst useStyles = makeStyles(theme => {\n return {\n root: {\n '& .MuiTabbedCard-root': {\n borderRadius: '12px',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.1)',\n },\n '& .MuiCardHeader-root': {\n padding: theme.spacing(2, 3),\n borderBottom: `1px solid ${theme.palette.divider}`,\n },\n '& .MuiTabs-root': {\n backgroundColor: theme.palette.background.paper,\n borderBottom: `1px solid ${theme.palette.divider}`,\n },\n },\n trophyIcon: {\n backgroundColor: theme.palette.background.paper,\n color: theme.palette.text.primary,\n borderRadius: '50%',\n boxSizing: 'border-box',\n padding: '0.5rem',\n height: 48,\n width: 48,\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',\n transition: 'transform 0.2s ease-in-out',\n '&:hover': {\n transform: 'scale(1.05)',\n },\n },\n votesText: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginLeft: '16px',\n backgroundColor: theme.palette.background.paper,\n padding: theme.spacing(0.5, 2),\n borderRadius: '20px',\n boxShadow: '0 2px 4px rgba(0, 0, 0, 0.05)',\n },\n rankingCard: {\n padding: theme.spacing(2),\n },\n rankingCardDescription: {\n color: theme.palette.text.secondary,\n marginBottom: theme.spacing(2),\n },\n rankingCardList: {\n '& .MuiListItem-root': {\n marginBottom: theme.spacing(1),\n borderRadius: '8px',\n transition: 'background-color 0.2s ease-in-out',\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n },\n },\n rankingRow: {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(1.5, 2),\n },\n userInfo: {\n display: 'flex',\n alignItems: 'center',\n flex: 1,\n },\n position: {\n fontWeight: 800,\n marginRight: theme.spacing(2),\n color: theme.palette.text.secondary,\n minWidth: '30px',\n textAlign: 'right',\n },\n topPosition: {\n color: theme.palette.primary.main,\n fontSize: '1.1rem',\n },\n divider: {\n margin: theme.spacing(2, 0),\n opacity: 0.5,\n border: 0,\n borderBottom: `1px solid ${theme.palette.divider}`,\n },\n };\n});\n\ntype RankingIcon = {\n iconsByRanking: Map<number, ReactNode>;\n userRankingIcon: ReactNode;\n};\n\nconst DefaultRankingIcons = new Map<number, ReactNode>([\n [\n 1,\n <TrophyIcon\n style={{ color: '#DAA520', height: '2.2rem', width: '2.2rem' }}\n />,\n ],\n [\n 2,\n <TrophyIcon\n style={{ color: '#C0C0C0', height: '2.1rem', width: '2.1rem' }}\n />,\n ],\n [\n 3,\n <TrophyIcon style={{ color: '#B87333', height: '2rem', width: '2rem' }} />,\n ],\n]);\n\nconst DefaultUserIcon = (\n <TrophyIcon style={{ height: '2rem', width: '2rem' }} />\n);\n\nconst getOrdinal = (n: number) => {\n if (n % 10 === 1 && n % 100 !== 11) {\n return `${n}st`;\n } else if (n % 10 === 2 && n % 100 !== 12) {\n return `${n}nd`;\n } else if (n % 10 === 3 && n % 100 !== 13) {\n return `${n}rd`;\n }\n\n return `${n}th`;\n};\n\nexport const RankingRow = (props: {\n userRef?: string;\n total: number;\n position: number;\n rankingIcon?: RankingIcon;\n unit: string;\n}) => {\n const classes = useStyles();\n const userRef = props.userRef;\n\n const ordinalPosition = props?.position ? getOrdinal(props?.position) : '';\n\n const userIcon = props.rankingIcon?.userRankingIcon\n ? props.rankingIcon?.userRankingIcon\n : DefaultUserIcon;\n\n const topRankingIcon = props.rankingIcon\n ? props.rankingIcon.iconsByRanking.get(Number(props?.position))\n : DefaultRankingIcons.get(Number(props?.position)) || DefaultUserIcon;\n\n const rankingIcon = props?.position > 3 ? userIcon : topRankingIcon;\n\n return (\n <ListItem className={classes.rankingRow}>\n <ListItemAvatar>\n <Avatar className={classes.trophyIcon}>{rankingIcon}</Avatar>\n </ListItemAvatar>\n\n <ListItemText\n disableTypography\n className={classes.userInfo}\n primary={\n <Box display=\"flex\" alignItems=\"center\">\n <Typography\n className={`${classes.position} ${\n props.position <= 3 ? classes.topPosition : ''\n }`}\n variant=\"subtitle1\"\n >\n {ordinalPosition}\n </Typography>\n <UserLink entityRef={userRef ?? ''} />\n </Box>\n }\n />\n\n <div className={classes.votesText}>\n <Typography variant=\"subtitle1\" style={{ fontWeight: 500 }}>\n {props?.total} {props.unit}\n </Typography>\n </div>\n </ListItem>\n );\n};\n\nexport const RankingCard = (props: {\n limit?: number;\n description: string;\n statistic?: StatisticResponse;\n unit: string;\n}) => {\n const classes = useStyles();\n const rankingStats = props.limit\n ? props.statistic?.ranking.slice(0, props.limit)\n : props.statistic?.ranking;\n\n return (\n <Paper elevation={0} className={classes.rankingCard}>\n <Typography className={classes.rankingCardDescription}>\n {props.description}\n </Typography>\n <List className={classes.rankingCardList}>\n {rankingStats?.map(authorStats => (\n <RankingRow\n total={authorStats.total || 0}\n position={authorStats.position || 0}\n userRef={authorStats.author}\n unit={props.unit}\n key={authorStats.author}\n />\n ))}\n {!rankingStats?.some(\n authorStats =>\n authorStats.author === props.statistic?.loggedUser?.author,\n ) && (\n <>\n <hr className={classes.divider} />\n <RankingRow\n total={props.statistic?.loggedUser?.total || 0}\n position={props.statistic?.loggedUser?.position || 0}\n userRef={props.statistic?.loggedUser?.author}\n unit={props.unit}\n />\n </>\n )}\n </List>\n </Paper>\n );\n};\n\nexport const TopRankingUsers = (props: {\n title?: string;\n hideTitle?: boolean;\n limit?: number;\n}) => {\n const classes = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n const {\n value: topStatistics,\n loading,\n error,\n } = useQetaApi(api =>\n api.getTopStatisticsHomepage({\n options: { limit: 50 },\n }),\n );\n\n const tabData = [\n {\n title: t('statistics.mostQuestions.title'),\n description: t('statistics.mostQuestions.description'),\n unit: 'questions',\n },\n {\n title: t('statistics.mostAnswers.title'),\n description: t('statistics.mostAnswers.description'),\n unit: 'answers',\n },\n {\n title: t('statistics.topVotedQuestions.title'),\n description: t('statistics.topVotedQuestions.description'),\n unit: 'votes',\n },\n {\n title: t('statistics.topVotedAnswers.title'),\n description: t('statistics.topVotedAnswers.description'),\n unit: 'votes',\n },\n {\n title: t('statistics.topVotedCorrectAnswers.title'),\n description: t('statistics.topVotedCorrectAnswers.description'),\n unit: 'votes',\n },\n ];\n\n if ((error || topStatistics === undefined) && !loading) {\n return (\n <WarningPanel severity=\"error\" title={t('statistics.errorLoading')}>\n {error?.message}\n </WarningPanel>\n );\n }\n\n let content: ReactElement[];\n\n if (loading) {\n content = [\n <CardTab>\n <Box display=\"flex\" justifyContent=\"center\" p={3}>\n <Progress />\n </Box>\n </CardTab>,\n ];\n } else if (topStatistics && topStatistics.length > 0) {\n content = topStatistics?.map((stats, index) => {\n return (\n <CardTab label={tabData[index].title} key={tabData[index].title}>\n <RankingCard\n description={tabData[index].description}\n limit={props.limit}\n statistic={stats}\n unit={tabData[index].unit}\n />\n </CardTab>\n );\n });\n } else {\n content = [\n <CardTab>\n <Box display=\"flex\" justifyContent=\"center\" p={3}>\n {t('statistics.notAvailable')}\n </Box>\n </CardTab>,\n ];\n }\n\n return (\n <div className={classes.root}>\n <TabbedCard title={props.title || t('statistics.ranking')}>\n {content}\n </TabbedCard>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useRouteRef } from '@backstage/core-plugin-api';
3
+ import { userRouteRef } from '../../routes.esm.js';
4
+ import '../../api.esm.js';
5
+ import 'react-use';
6
+ import 'react';
7
+ import '@backstage/plugin-signals-react';
8
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
9
+ import { qetaTranslationRef } from '../../translation.esm.js';
10
+ import { useListItemStyles } from '../../hooks/useListItemStyles.esm.js';
11
+ import { useEntityAuthor } from '../../hooks/useEntityAuthor.esm.js';
12
+ import { useIdentityApi } from '../../hooks/useIdentityApi.esm.js';
13
+ import '@backstage/plugin-permission-react';
14
+ import '@drodil/backstage-plugin-qeta-common';
15
+ import '@backstage/plugin-permission-common';
16
+ import { makeStyles, Avatar, Box, Tooltip, Typography } from '@material-ui/core';
17
+ import { Link } from 'react-router-dom';
18
+ import 'react-use/lib/useDebounce';
19
+ import '../FilterPanel/FilterPanel.esm.js';
20
+ import { UserFollowButton } from '../Buttons/UserFollowButton.esm.js';
21
+ import Visibility from '@material-ui/icons/Visibility';
22
+ import QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';
23
+ import ThumbUp from '@material-ui/icons/ThumbUp';
24
+ import CheckCircle from '@material-ui/icons/CheckCircle';
25
+ import DescriptionIcon from '@material-ui/icons/Description';
26
+ import LinkIcon from '@material-ui/icons/Link';
27
+ import EmojiEvents from '@material-ui/icons/EmojiEvents';
28
+
29
+ const useStyles = makeStyles((theme) => ({
30
+ content: {
31
+ flex: 1,
32
+ minWidth: 0,
33
+ display: "flex",
34
+ flexDirection: "column",
35
+ marginLeft: theme.spacing(2)
36
+ },
37
+ title: {
38
+ fontWeight: 600
39
+ },
40
+ statsWrapper: {
41
+ display: "flex",
42
+ gap: theme.spacing(3),
43
+ marginLeft: theme.spacing(2),
44
+ alignItems: "center",
45
+ [theme.breakpoints.down("sm")]: {
46
+ display: "none"
47
+ }
48
+ },
49
+ statItem: {
50
+ display: "flex",
51
+ alignItems: "center",
52
+ gap: theme.spacing(0.5),
53
+ color: theme.palette.text.secondary
54
+ },
55
+ actions: {
56
+ marginLeft: theme.spacing(2)
57
+ }
58
+ }));
59
+ const UserListItem = (props) => {
60
+ const { user } = props;
61
+ const classes = useStyles();
62
+ const listItemClasses = useListItemStyles();
63
+ const userRoute = useRouteRef(userRouteRef);
64
+ const { t } = useTranslationRef(qetaTranslationRef);
65
+ const {
66
+ name,
67
+ initials,
68
+ user: userEntity,
69
+ secondaryTitle
70
+ } = useEntityAuthor(user);
71
+ const {
72
+ value: currentUser,
73
+ loading: loadingUser,
74
+ error: userError
75
+ } = useIdentityApi((api) => api.getBackstageIdentity(), []);
76
+ const href = `${userRoute()}/${user.userRef}`;
77
+ return /* @__PURE__ */ jsxs(Link, { to: href, className: listItemClasses.root, children: [
78
+ /* @__PURE__ */ jsx(
79
+ Avatar,
80
+ {
81
+ src: userEntity?.spec?.profile?.picture,
82
+ alt: name,
83
+ variant: "rounded",
84
+ children: initials
85
+ }
86
+ ),
87
+ /* @__PURE__ */ jsx(Box, { className: classes.content, children: /* @__PURE__ */ jsx(Tooltip, { title: secondaryTitle ?? "", arrow: true, placement: "top-start", children: /* @__PURE__ */ jsx(Typography, { className: classes.title, noWrap: true, children: name }) }) }),
88
+ /* @__PURE__ */ jsxs(Box, { className: classes.statsWrapper, children: [
89
+ /* @__PURE__ */ jsx(Tooltip, { title: t("impactCard.reputation"), arrow: true, children: /* @__PURE__ */ jsxs("div", { className: classes.statItem, children: [
90
+ /* @__PURE__ */ jsx(EmojiEvents, { fontSize: "small" }),
91
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: user.reputation })
92
+ ] }) }),
93
+ /* @__PURE__ */ jsx(Tooltip, { title: t("common.questions"), arrow: true, children: /* @__PURE__ */ jsxs("div", { className: classes.statItem, children: [
94
+ /* @__PURE__ */ jsx(QuestionAnswerIcon, { fontSize: "small" }),
95
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: user.totalQuestions })
96
+ ] }) }),
97
+ /* @__PURE__ */ jsx(Tooltip, { title: t("common.answers"), arrow: true, children: /* @__PURE__ */ jsxs("div", { className: classes.statItem, children: [
98
+ /* @__PURE__ */ jsx(CheckCircle, { fontSize: "small" }),
99
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: user.totalAnswers })
100
+ ] }) }),
101
+ /* @__PURE__ */ jsx(Tooltip, { title: t("common.articles"), arrow: true, children: /* @__PURE__ */ jsxs("div", { className: classes.statItem, children: [
102
+ /* @__PURE__ */ jsx(DescriptionIcon, { fontSize: "small" }),
103
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: user.totalArticles })
104
+ ] }) }),
105
+ /* @__PURE__ */ jsx(Tooltip, { title: t("common.links"), arrow: true, children: /* @__PURE__ */ jsxs("div", { className: classes.statItem, children: [
106
+ /* @__PURE__ */ jsx(LinkIcon, { fontSize: "small" }),
107
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: user.totalLinks })
108
+ ] }) }),
109
+ /* @__PURE__ */ jsx(Tooltip, { title: t("common.votes"), arrow: true, children: /* @__PURE__ */ jsxs("div", { className: classes.statItem, children: [
110
+ /* @__PURE__ */ jsx(ThumbUp, { fontSize: "small" }),
111
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: user.totalVotes })
112
+ ] }) }),
113
+ /* @__PURE__ */ jsx(Tooltip, { title: t("common.views"), arrow: true, children: /* @__PURE__ */ jsxs("div", { className: classes.statItem, children: [
114
+ /* @__PURE__ */ jsx(Visibility, { fontSize: "small" }),
115
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: user.totalViews })
116
+ ] }) })
117
+ ] }),
118
+ !loadingUser && !userError && currentUser?.userEntityRef !== user.userRef ? /* @__PURE__ */ jsx(
119
+ Box,
120
+ {
121
+ className: classes.actions,
122
+ onClick: (e) => {
123
+ e.preventDefault();
124
+ e.stopPropagation();
125
+ },
126
+ children: /* @__PURE__ */ jsx(UserFollowButton, { userRef: user.userRef })
127
+ }
128
+ ) : null
129
+ ] });
130
+ };
131
+
132
+ export { UserListItem };
133
+ //# sourceMappingURL=UserListItem.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserListItem.esm.js","sources":["../../../src/components/UsersContainer/UserListItem.tsx"],"sourcesContent":["import { UserResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { userRouteRef } from '../../routes';\nimport { useIdentityApi } from '../../hooks';\nimport { useEntityAuthor } from '../../hooks/useEntityAuthor';\nimport {\n Avatar,\n Box,\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';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { Link } from 'react-router-dom';\n\nimport { useListItemStyles } from '../../hooks';\n\nconst useStyles = makeStyles(theme => ({\n content: {\n flex: 1,\n minWidth: 0,\n display: 'flex',\n flexDirection: 'column',\n marginLeft: theme.spacing(2),\n },\n title: {\n fontWeight: 600,\n },\n statsWrapper: {\n display: 'flex',\n gap: theme.spacing(3),\n marginLeft: theme.spacing(2),\n alignItems: 'center',\n [theme.breakpoints.down('sm')]: {\n display: 'none',\n },\n },\n statItem: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n color: theme.palette.text.secondary,\n },\n actions: {\n marginLeft: theme.spacing(2),\n },\n}));\n\nexport const UserListItem = (props: { user: UserResponse }) => {\n const { user } = props;\n const classes = useStyles();\n const listItemClasses = useListItemStyles();\n const userRoute = useRouteRef(userRouteRef);\n const { t } = useTranslationRef(qetaTranslationRef);\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 <Link to={href} className={listItemClasses.root}>\n <Avatar\n src={userEntity?.spec?.profile?.picture}\n alt={name}\n variant=\"rounded\"\n >\n {initials}\n </Avatar>\n <Box className={classes.content}>\n <Tooltip title={secondaryTitle ?? ''} arrow placement=\"top-start\">\n <Typography className={classes.title} noWrap>\n {name}\n </Typography>\n </Tooltip>\n </Box>\n\n <Box className={classes.statsWrapper}>\n <Tooltip title={t('impactCard.reputation')} arrow>\n <div className={classes.statItem}>\n <EmojiEvents fontSize=\"small\" />\n <Typography variant=\"body2\">{user.reputation}</Typography>\n </div>\n </Tooltip>\n <Tooltip title={t('common.questions')} arrow>\n <div className={classes.statItem}>\n <QuestionAnswerIcon fontSize=\"small\" />\n <Typography variant=\"body2\">{user.totalQuestions}</Typography>\n </div>\n </Tooltip>\n <Tooltip title={t('common.answers')} arrow>\n <div className={classes.statItem}>\n <CheckCircleIcon fontSize=\"small\" />\n <Typography variant=\"body2\">{user.totalAnswers}</Typography>\n </div>\n </Tooltip>\n <Tooltip title={t('common.articles')} arrow>\n <div className={classes.statItem}>\n <DescriptionIcon fontSize=\"small\" />\n <Typography variant=\"body2\">{user.totalArticles}</Typography>\n </div>\n </Tooltip>\n <Tooltip title={t('common.links')} arrow>\n <div className={classes.statItem}>\n <LinkIcon fontSize=\"small\" />\n <Typography variant=\"body2\">{user.totalLinks}</Typography>\n </div>\n </Tooltip>\n <Tooltip title={t('common.votes')} arrow>\n <div className={classes.statItem}>\n <ThumbUpIcon fontSize=\"small\" />\n <Typography variant=\"body2\">{user.totalVotes}</Typography>\n </div>\n </Tooltip>\n <Tooltip title={t('common.views')} arrow>\n <div className={classes.statItem}>\n <Visibility fontSize=\"small\" />\n <Typography variant=\"body2\">{user.totalViews}</Typography>\n </div>\n </Tooltip>\n </Box>\n\n {!loadingUser &&\n !userError &&\n currentUser?.userEntityRef !== user.userRef ? (\n <Box\n className={classes.actions}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <UserFollowButton userRef={user.userRef} />\n </Box>\n ) : null}\n </Link>\n );\n};\n"],"names":["CheckCircleIcon","ThumbUpIcon"],"mappings":"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"}
@@ -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, Grid, Card, Box, Avatar, Tooltip, Typography, CardContent } from '@material-ui/core';
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(Grid, { item: true, xs: 12, md: 6, xl: 4, children: /* @__PURE__ */ jsx(Card, { className: classes.card, children: /* @__PURE__ */ jsxs(ClickableLink, { href, ariaLabel: primaryTitle, children: [
67
- /* @__PURE__ */ jsxs(
68
- Box,
69
- {
70
- className: classes.cardHeader,
71
- display: "flex",
72
- alignItems: "center",
73
- children: [
74
- Icon && /* @__PURE__ */ jsx(
75
- Avatar,
76
- {
77
- src: userEntity?.spec?.profile?.picture,
78
- className: "avatar",
79
- alt: name,
80
- variant: "rounded",
81
- style: { marginRight: 16 },
82
- children: initials
83
- }
84
- ),
85
- /* @__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 }) }) }),
86
- !loadingUser && !userError && currentUser?.userEntityRef !== user.userRef ? /* @__PURE__ */ jsx(
87
- Box,
88
- {
89
- flexShrink: 0,
90
- onClick: (e) => {
91
- e.preventDefault();
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,MAAM,SAAA,GAAY,WAAW,CAAU,KAAA,MAAA;AAAA,EACrC,SAAW,EAAA;AAAA,IACT,SAAW,EAAA;AAAA,GACb;AAAA,EACA,QAAU,EAAA;AAAA,IACR,OAAA,EAAS,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IACxB,YAAA,EAAc,MAAM,KAAM,CAAA,YAAA;AAAA,IAC1B,KAAO,EAAA,MAAA;AAAA,IACP,MAAQ,EAAA,MAAA;AAAA,IACR,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA,UAAY,EAAA;AAAA,IACV,OAAS,EAAA,MAAA;AAAA,IACT,aAAe,EAAA;AAAA;AAEnB,CAAE,CAAA,CAAA;AAEW,MAAA,aAAA,GAAgB,CAAC,KAAkC,KAAA;AAC9D,EAAM,MAAA,EAAE,MAAS,GAAA,KAAA;AACjB,EAAA,MAAM,UAAU,iBAAkB,EAAA;AAClC,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAM,MAAA,SAAA,GAAY,YAAY,YAAY,CAAA;AAC1C,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,SAAY,GAAA,kBAAA;AAAA,IAChB,eAAe,IAAK,CAAA,OAAA,EAAS,EAAE,WAAA,EAAa,QAAQ;AAAA,GACtD;AACA,EAAA,MAAM,EAAE,YAAA,EAAc,IAAK,EAAA,GAAI,sBAAsB,SAAS,CAAA;AAC9D,EAAM,MAAA;AAAA,IACJ,IAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAM,EAAA,UAAA;AAAA,IACN;AAAA,GACF,GAAI,gBAAgB,IAAI,CAAA;AACxB,EAAM,MAAA;AAAA,IACJ,KAAO,EAAA,WAAA;AAAA,IACP,OAAS,EAAA,WAAA;AAAA,IACT,KAAO,EAAA;AAAA,MACL,cAAe,CAAA,CAAA,GAAA,KAAO,IAAI,oBAAqB,EAAA,EAAG,EAAE,CAAA;AAExD,EAAA,MAAM,OAAO,CAAG,EAAA,SAAA,EAAW,CAAA,CAAA,EAAI,KAAK,OAAO,CAAA,CAAA;AAE3C,EACE,uBAAA,GAAA,CAAC,QAAK,SAAW,EAAA,OAAA,CAAQ,MACvB,QAAC,kBAAA,IAAA,CAAA,aAAA,EAAA,EAAc,IAAY,EAAA,SAAA,EAAW,YACpC,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,OAAI,SAAW,EAAA,OAAA,CAAQ,YAAY,OAAQ,EAAA,MAAA,EAAO,YAAW,QAC3D,EAAA,QAAA,EAAA;AAAA,MACC,IAAA,oBAAA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,UAAY,EAAA,IAAA,EAAM,OAAS,EAAA,OAAA;AAAA,UAChC,SAAU,EAAA,QAAA;AAAA,UACV,GAAK,EAAA,IAAA;AAAA,UACL,OAAQ,EAAA,SAAA;AAAA,UACR,KAAA,EAAO,EAAE,WAAA,EAAa,EAAG,EAAA;AAAA,UAExB,QAAA,EAAA;AAAA;AAAA,OACH;AAAA,sBAEF,GAAA,CAAC,OAAI,IAAM,EAAA,CAAA,EAAG,UAAU,CACtB,EAAA,QAAA,kBAAA,GAAA,CAAC,WAAQ,KAAO,EAAA,cAAA,IAAkB,IAAI,KAAK,EAAA,IAAA,EACzC,8BAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,MAAK,MAAM,EAAA,IAAA,EAC5B,QACH,EAAA,YAAA,EAAA,CAAA,EACF,CACF,EAAA,CAAA;AAAA,MACC,CAAC,WACF,IAAA,CAAC,aACD,WAAa,EAAA,aAAA,KAAkB,KAAK,OAClC,mBAAA,GAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,UAAY,EAAA,CAAA;AAAA,UACZ,SAAS,CAAK,CAAA,KAAA;AACZ,YAAA,CAAA,CAAE,cAAe,EAAA;AACjB,YAAA,CAAA,CAAE,eAAgB,EAAA;AAAA,WACpB;AAAA,UAEA,QAAC,kBAAA,GAAA,CAAA,gBAAA,EAAA,EAAiB,OAAS,EAAA,IAAA,CAAK,OAAS,EAAA;AAAA;AAAA,OAEzC,GAAA;AAAA,KACN,EAAA,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,WAAW,CAAG,EAAA,OAAA,CAAQ,WAAW,CAAA,CAAA,EAAI,aAAa,UAAU,CAAA,CAAA;AAAA,QAE5D,QAAA,kBAAA,IAAA,CAAC,QAAK,SAAS,EAAA,IAAA,EAAC,SAAS,CAAG,EAAA,SAAA,EAAW,aAAa,SAClD,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,CACb,EAAA,QAAA,kBAAA,IAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACC,OAAQ,EAAA,MAAA;AAAA,cACR,aAAc,EAAA,QAAA;AAAA,cACd,UAAW,EAAA,QAAA;AAAA,cACX,WAAW,YAAa,CAAA,QAAA;AAAA,cAExB,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,WAAY,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,KAAA,EAAM,UAAW,EAAA,CAAA;AAAA,gCAC/C,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,KAAA,EAAO,EAAE,UAAY,EAAA,GAAA,EAC9C,EAAA,QAAA,EAAA,IAAA,CAAK,UACR,EAAA,CAAA;AAAA,gCACA,GAAA,CAAC,cAAW,OAAQ,EAAA,SAAA,EAAU,OAAM,eACjC,EAAA,QAAA,EAAA,CAAA,CAAE,uBAAuB,CAC5B,EAAA;AAAA;AAAA;AAAA,WAEJ,EAAA,CAAA;AAAA,0BACC,GAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,IAAI,CACb,EAAA,QAAA,kBAAA,IAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACC,OAAQ,EAAA,MAAA;AAAA,cACR,aAAc,EAAA,QAAA;AAAA,cACd,UAAW,EAAA,QAAA;AAAA,cACX,WAAW,YAAa,CAAA,QAAA;AAAA,cAExB,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,kBAAmB,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,KAAA,EAAM,UAAW,EAAA,CAAA;AAAA,gCACtD,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,KAAA,EAAO,EAAE,UAAY,EAAA,GAAA,EAC9C,EAAA,QAAA,EAAA,IAAA,CAAK,cACR,EAAA,CAAA;AAAA,gCACA,GAAA,CAAC,cAAW,OAAQ,EAAA,SAAA,EAAU,OAAM,eACjC,EAAA,QAAA,EAAA,CAAA,CAAE,kBAAkB,CACvB,EAAA;AAAA;AAAA;AAAA,WAEJ,EAAA,CAAA;AAAA,0BACC,GAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,IAAI,CACb,EAAA,QAAA,kBAAA,IAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACC,OAAQ,EAAA,MAAA;AAAA,cACR,aAAc,EAAA,QAAA;AAAA,cACd,UAAW,EAAA,QAAA;AAAA,cACX,WAAW,YAAa,CAAA,QAAA;AAAA,cAExB,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,eAAgB,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,KAAA,EAAM,UAAW,EAAA,CAAA;AAAA,gCACnD,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,KAAA,EAAO,EAAE,UAAY,EAAA,GAAA,EAC9C,EAAA,QAAA,EAAA,IAAA,CAAK,aACR,EAAA,CAAA;AAAA,gCACA,GAAA,CAAC,cAAW,OAAQ,EAAA,SAAA,EAAU,OAAM,eACjC,EAAA,QAAA,EAAA,CAAA,CAAE,iBAAiB,CACtB,EAAA;AAAA;AAAA;AAAA,WAEJ,EAAA,CAAA;AAAA,0BACC,GAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,IAAI,CACb,EAAA,QAAA,kBAAA,IAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACC,OAAQ,EAAA,MAAA;AAAA,cACR,aAAc,EAAA,QAAA;AAAA,cACd,UAAW,EAAA,QAAA;AAAA,cACX,WAAW,YAAa,CAAA,QAAA;AAAA,cAExB,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,QAAS,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,KAAA,EAAM,UAAW,EAAA,CAAA;AAAA,gCAC5C,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,KAAA,EAAO,EAAE,UAAY,EAAA,GAAA,EAC9C,EAAA,QAAA,EAAA,IAAA,CAAK,UACR,EAAA,CAAA;AAAA,gCACA,GAAA,CAAC,cAAW,OAAQ,EAAA,SAAA,EAAU,OAAM,eACjC,EAAA,QAAA,EAAA,CAAA,CAAE,cAAc,CACnB,EAAA;AAAA;AAAA;AAAA,WAEJ,EAAA,CAAA;AAAA,0BACC,GAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,IAAI,CACb,EAAA,QAAA,kBAAA,IAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACC,OAAQ,EAAA,MAAA;AAAA,cACR,aAAc,EAAA,QAAA;AAAA,cACd,UAAW,EAAA,QAAA;AAAA,cACX,WAAW,YAAa,CAAA,QAAA;AAAA,cAExB,QAAA,EAAA;AAAA,gCAAA,GAAA,CAACA,WAAgB,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,KAAA,EAAM,UAAW,EAAA,CAAA;AAAA,gCACnD,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,KAAA,EAAO,EAAE,UAAY,EAAA,GAAA,EAC9C,EAAA,QAAA,EAAA,IAAA,CAAK,YACR,EAAA,CAAA;AAAA,gCACA,GAAA,CAAC,cAAW,OAAQ,EAAA,SAAA,EAAU,OAAM,eACjC,EAAA,QAAA,EAAA,CAAA,CAAE,gBAAgB,CACrB,EAAA;AAAA;AAAA;AAAA,WAEJ,EAAA,CAAA;AAAA,0BACC,GAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,IAAI,CACb,EAAA,QAAA,kBAAA,IAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACC,OAAQ,EAAA,MAAA;AAAA,cACR,aAAc,EAAA,QAAA;AAAA,cACd,UAAW,EAAA,QAAA;AAAA,cACX,WAAW,YAAa,CAAA,QAAA;AAAA,cAExB,QAAA,EAAA;AAAA,gCAAA,GAAA,CAACC,OAAY,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,KAAA,EAAM,UAAW,EAAA,CAAA;AAAA,gCAC/C,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,KAAA,EAAO,EAAE,UAAY,EAAA,GAAA,EAC9C,EAAA,QAAA,EAAA,IAAA,CAAK,UACR,EAAA,CAAA;AAAA,gCACA,GAAA,CAAC,cAAW,OAAQ,EAAA,SAAA,EAAU,OAAM,eACjC,EAAA,QAAA,EAAA,CAAA,CAAE,cAAc,CACnB,EAAA;AAAA;AAAA;AAAA,WAEJ,EAAA,CAAA;AAAA,0BACC,GAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,IAAI,CACb,EAAA,QAAA,kBAAA,IAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACC,OAAQ,EAAA,MAAA;AAAA,cACR,aAAc,EAAA,QAAA;AAAA,cACd,UAAW,EAAA,QAAA;AAAA,cACX,WAAW,YAAa,CAAA,QAAA;AAAA,cAExB,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,UAAW,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,KAAA,EAAM,UAAW,EAAA,CAAA;AAAA,gCAC9C,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,KAAA,EAAO,EAAE,UAAY,EAAA,GAAA,EAC9C,EAAA,QAAA,EAAA,IAAA,CAAK,UACR,EAAA,CAAA;AAAA,gCACA,GAAA,CAAC,cAAW,OAAQ,EAAA,SAAA,EAAU,OAAM,eACjC,EAAA,QAAA,EAAA,CAAA,CAAE,cAAc,CACnB,EAAA;AAAA;AAAA;AAAA,WAEJ,EAAA;AAAA,SACF,EAAA;AAAA;AAAA;AACF,GAAA,EACF,CACF,EAAA,CAAA;AAEJ;;;;"}
@@ -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__ */ jsx(Grid, { container: true, alignItems: "flex-end", justifyContent: "space-between", children: /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, md: 4, children: /* @__PURE__ */ jsx(
14
- SearchBar,
15
- {
16
- onSearch,
17
- label: searchBarLabel,
18
- loading
19
- }
20
- ) }) }),
21
- /* @__PURE__ */ jsx(Box, { mt: 2, mb: 2, children: /* @__PURE__ */ jsxs(Grid, { container: true, alignItems: "center", justifyContent: "space-between", children: [
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, paddingBottom: 2 },
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 <Grid container alignItems=\"flex-end\" justifyContent=\"space-between\">\n <Grid item xs={12} md={4}>\n <SearchBar\n onSearch={onSearch}\n label={searchBarLabel}\n loading={loading}\n />\n </Grid>\n </Grid>\n <Box mt={2} 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, paddingBottom: 2 }}\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":";;;;AAWO,MAAM,iBAAiB,CAAC;AAAA,EAC7B,KAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAA2B,KAAA;AACzB,EACE,uBAAA,IAAA,CAAC,GAAI,EAAA,EAAA,EAAA,EAAI,CACP,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAS,IAAC,EAAA,UAAA,EAAW,YAAW,cAAe,EAAA,eAAA,EACnD,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,EAAI,EAAA,EAAA,EAAI,IAAI,CACrB,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,QAAA;AAAA,QACA,KAAO,EAAA,cAAA;AAAA,QACP;AAAA;AAAA,OAEJ,CACF,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,KAAO,EAAA,EAAE,UAAY,EAAA,GAAA,EAAK,eAAe,CAAE,EAAA;AAAA,UAE1C,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;;;;"}
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;;;;"}