@drodil/backstage-plugin-qeta-react 3.24.3 → 3.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/dist/components/AIAnswerCard/AIAnswerCard.esm.js +54 -41
  2. package/dist/components/AIAnswerCard/AIAnswerCard.esm.js.map +1 -1
  3. package/dist/components/AnswerCard/AnswerCard.esm.js +96 -73
  4. package/dist/components/AnswerCard/AnswerCard.esm.js.map +1 -1
  5. package/dist/components/AnswerForm/AnswerForm.esm.js +54 -51
  6. package/dist/components/AnswerForm/AnswerForm.esm.js.map +1 -1
  7. package/dist/components/AnswersContainer/AnswerList.esm.js +31 -21
  8. package/dist/components/AnswersContainer/AnswerList.esm.js.map +1 -1
  9. package/dist/components/AnswersContainer/AnswerListItem.esm.js +74 -57
  10. package/dist/components/AnswersContainer/AnswerListItem.esm.js.map +1 -1
  11. package/dist/components/AnswersContainer/AnswersContainer.esm.js +70 -56
  12. package/dist/components/AnswersContainer/AnswersContainer.esm.js.map +1 -1
  13. package/dist/components/ArticleContent/ArticleButtons.esm.js +73 -52
  14. package/dist/components/ArticleContent/ArticleButtons.esm.js.map +1 -1
  15. package/dist/components/ArticleContent/ArticleContent.esm.js +60 -34
  16. package/dist/components/ArticleContent/ArticleContent.esm.js.map +1 -1
  17. package/dist/components/AuthorBox/AuthorBox.esm.js +49 -31
  18. package/dist/components/AuthorBox/AuthorBox.esm.js.map +1 -1
  19. package/dist/components/Buttons/AddToCollectionButton.esm.js +35 -24
  20. package/dist/components/Buttons/AddToCollectionButton.esm.js.map +1 -1
  21. package/dist/components/Buttons/AskQuestionButton.esm.js +18 -15
  22. package/dist/components/Buttons/AskQuestionButton.esm.js.map +1 -1
  23. package/dist/components/Buttons/ButtonContainer.esm.js +2 -2
  24. package/dist/components/Buttons/ButtonContainer.esm.js.map +1 -1
  25. package/dist/components/Buttons/CollectionFollowButton.esm.js +10 -6
  26. package/dist/components/Buttons/CollectionFollowButton.esm.js.map +1 -1
  27. package/dist/components/Buttons/CreateCollectionButton.esm.js +18 -15
  28. package/dist/components/Buttons/CreateCollectionButton.esm.js.map +1 -1
  29. package/dist/components/Buttons/EntityFollowButton.esm.js +10 -6
  30. package/dist/components/Buttons/EntityFollowButton.esm.js.map +1 -1
  31. package/dist/components/Buttons/FavoriteButton.esm.js +15 -11
  32. package/dist/components/Buttons/FavoriteButton.esm.js.map +1 -1
  33. package/dist/components/Buttons/LinkButton.esm.js +10 -6
  34. package/dist/components/Buttons/LinkButton.esm.js.map +1 -1
  35. package/dist/components/Buttons/TagFollowButton.esm.js +10 -6
  36. package/dist/components/Buttons/TagFollowButton.esm.js.map +1 -1
  37. package/dist/components/Buttons/UserFollowButton.esm.js +10 -6
  38. package/dist/components/Buttons/UserFollowButton.esm.js.map +1 -1
  39. package/dist/components/Buttons/VoteButtons.esm.js +41 -35
  40. package/dist/components/Buttons/VoteButtons.esm.js.map +1 -1
  41. package/dist/components/Buttons/WriteArticleButton.esm.js +18 -15
  42. package/dist/components/Buttons/WriteArticleButton.esm.js.map +1 -1
  43. package/dist/components/CollectionCard/CollectionCard.esm.js +59 -42
  44. package/dist/components/CollectionCard/CollectionCard.esm.js.map +1 -1
  45. package/dist/components/CollectionForm/CollectionForm.esm.js +75 -71
  46. package/dist/components/CollectionForm/CollectionForm.esm.js.map +1 -1
  47. package/dist/components/CollectionsGrid/CollectionsGrid.esm.js +61 -49
  48. package/dist/components/CollectionsGrid/CollectionsGrid.esm.js.map +1 -1
  49. package/dist/components/CollectionsGrid/CollectionsGridContent.esm.js +18 -14
  50. package/dist/components/CollectionsGrid/CollectionsGridContent.esm.js.map +1 -1
  51. package/dist/components/CollectionsGrid/CollectionsGridItem.esm.js +52 -32
  52. package/dist/components/CollectionsGrid/CollectionsGridItem.esm.js.map +1 -1
  53. package/dist/components/CollectionsGrid/NoCollectionsCard.esm.js +10 -6
  54. package/dist/components/CollectionsGrid/NoCollectionsCard.esm.js.map +1 -1
  55. package/dist/components/CommentSection/CommentForm.esm.js +44 -42
  56. package/dist/components/CommentSection/CommentForm.esm.js.map +1 -1
  57. package/dist/components/CommentSection/CommentList.esm.js +15 -12
  58. package/dist/components/CommentSection/CommentList.esm.js.map +1 -1
  59. package/dist/components/CommentSection/CommentListItem.esm.js +49 -28
  60. package/dist/components/CommentSection/CommentListItem.esm.js.map +1 -1
  61. package/dist/components/CommentSection/CommentSection.esm.js +48 -42
  62. package/dist/components/CommentSection/CommentSection.esm.js.map +1 -1
  63. package/dist/components/DeleteModal/DeleteModal.esm.js +32 -23
  64. package/dist/components/DeleteModal/DeleteModal.esm.js.map +1 -1
  65. package/dist/components/EntitiesGrid/EntitiesGrid.esm.js +39 -30
  66. package/dist/components/EntitiesGrid/EntitiesGrid.esm.js.map +1 -1
  67. package/dist/components/EntitiesGrid/EntitiesGridContent.esm.js +9 -5
  68. package/dist/components/EntitiesGrid/EntitiesGridContent.esm.js.map +1 -1
  69. package/dist/components/EntitiesGrid/EntitiesGridItem.esm.js +50 -38
  70. package/dist/components/EntitiesGrid/EntitiesGridItem.esm.js.map +1 -1
  71. package/dist/components/EntitiesGrid/NoEntitiesCard.esm.js +10 -6
  72. package/dist/components/EntitiesGrid/NoEntitiesCard.esm.js.map +1 -1
  73. package/dist/components/FilterPanel/DateRangeFilter.esm.js +71 -58
  74. package/dist/components/FilterPanel/DateRangeFilter.esm.js.map +1 -1
  75. package/dist/components/FilterPanel/FilterPanel.esm.js +262 -217
  76. package/dist/components/FilterPanel/FilterPanel.esm.js.map +1 -1
  77. package/dist/components/FollowedLists/FollowedCollectionsList.esm.js +6 -2
  78. package/dist/components/FollowedLists/FollowedCollectionsList.esm.js.map +1 -1
  79. package/dist/components/FollowedLists/FollowedEntitiesList.esm.js +6 -2
  80. package/dist/components/FollowedLists/FollowedEntitiesList.esm.js.map +1 -1
  81. package/dist/components/FollowedLists/FollowedTagsList.esm.js +6 -2
  82. package/dist/components/FollowedLists/FollowedTagsList.esm.js.map +1 -1
  83. package/dist/components/FollowedLists/FollowedUsersList.esm.js +6 -2
  84. package/dist/components/FollowedLists/FollowedUsersList.esm.js.map +1 -1
  85. package/dist/components/HeaderImageInput/HeaderImageInput.esm.js +51 -37
  86. package/dist/components/HeaderImageInput/HeaderImageInput.esm.js.map +1 -1
  87. package/dist/components/HomePageCards/ImpactCard.esm.js +15 -4
  88. package/dist/components/HomePageCards/ImpactCard.esm.js.map +1 -1
  89. package/dist/components/HomePageCards/PostsCard.esm.js +14 -7
  90. package/dist/components/HomePageCards/PostsCard.esm.js.map +1 -1
  91. package/dist/components/LeftMenu/LeftMenu.esm.js +73 -27
  92. package/dist/components/LeftMenu/LeftMenu.esm.js.map +1 -1
  93. package/dist/components/LeftMenu/LeftMenuButton.esm.js +52 -45
  94. package/dist/components/LeftMenu/LeftMenuButton.esm.js.map +1 -1
  95. package/dist/components/Links/Links.esm.js +12 -8
  96. package/dist/components/Links/Links.esm.js.map +1 -1
  97. package/dist/components/LoadingGrid/LoadingGrid.esm.js +5 -5
  98. package/dist/components/LoadingGrid/LoadingGrid.esm.js.map +1 -1
  99. package/dist/components/MarkdownEditor/MarkdownEditor.esm.js +5 -6
  100. package/dist/components/MarkdownEditor/MarkdownEditor.esm.js.map +1 -1
  101. package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js +42 -33
  102. package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js.map +1 -1
  103. package/dist/components/PostAnonymouslyCheckbox/PostAnonymouslyCheckbox.esm.js +10 -6
  104. package/dist/components/PostAnonymouslyCheckbox/PostAnonymouslyCheckbox.esm.js.map +1 -1
  105. package/dist/components/PostForm/AutocompleteListComponent.esm.js +23 -18
  106. package/dist/components/PostForm/AutocompleteListComponent.esm.js.map +1 -1
  107. package/dist/components/PostForm/EntitiesInput.esm.js +19 -9
  108. package/dist/components/PostForm/EntitiesInput.esm.js.map +1 -1
  109. package/dist/components/PostForm/PostForm.esm.js +111 -107
  110. package/dist/components/PostForm/PostForm.esm.js.map +1 -1
  111. package/dist/components/PostForm/TagInput.esm.js +13 -12
  112. package/dist/components/PostForm/TagInput.esm.js.map +1 -1
  113. package/dist/components/PostHighlightList/PostHighlightList.esm.js +26 -14
  114. package/dist/components/PostHighlightList/PostHighlightList.esm.js.map +1 -1
  115. package/dist/components/PostsContainer/NoPostsCard.esm.js +24 -18
  116. package/dist/components/PostsContainer/NoPostsCard.esm.js.map +1 -1
  117. package/dist/components/PostsContainer/PostList.esm.js +30 -20
  118. package/dist/components/PostsContainer/PostList.esm.js.map +1 -1
  119. package/dist/components/PostsContainer/PostListItem.esm.js +108 -86
  120. package/dist/components/PostsContainer/PostListItem.esm.js.map +1 -1
  121. package/dist/components/PostsContainer/PostsContainer.esm.js +100 -84
  122. package/dist/components/PostsContainer/PostsContainer.esm.js.map +1 -1
  123. package/dist/components/PostsGrid/PostsGrid.esm.js +100 -84
  124. package/dist/components/PostsGrid/PostsGrid.esm.js.map +1 -1
  125. package/dist/components/PostsGrid/PostsGridContent.esm.js +46 -39
  126. package/dist/components/PostsGrid/PostsGridContent.esm.js.map +1 -1
  127. package/dist/components/PostsGrid/PostsGridItem.esm.js +59 -34
  128. package/dist/components/PostsGrid/PostsGridItem.esm.js.map +1 -1
  129. package/dist/components/PostsTable/PostsTable.esm.js +96 -67
  130. package/dist/components/PostsTable/PostsTable.esm.js.map +1 -1
  131. package/dist/components/PostsTable/PostsTableRow.esm.js +21 -15
  132. package/dist/components/PostsTable/PostsTableRow.esm.js.map +1 -1
  133. package/dist/components/QetaPagination/QetaPagination.esm.js +39 -31
  134. package/dist/components/QetaPagination/QetaPagination.esm.js.map +1 -1
  135. package/dist/components/QuestionCard/QuestionCard.esm.js +90 -64
  136. package/dist/components/QuestionCard/QuestionCard.esm.js.map +1 -1
  137. package/dist/components/RelativeTimeWithTooltip/RelativeTimeWithTooltip.esm.js +4 -3
  138. package/dist/components/RelativeTimeWithTooltip/RelativeTimeWithTooltip.esm.js.map +1 -1
  139. package/dist/components/SearchBar/SearchBar.esm.js +44 -41
  140. package/dist/components/SearchBar/SearchBar.esm.js.map +1 -1
  141. package/dist/components/SelectTemplateList/SelectTemplateList.esm.js +46 -30
  142. package/dist/components/SelectTemplateList/SelectTemplateList.esm.js.map +1 -1
  143. package/dist/components/StatsChart/StatsChart.esm.js +149 -135
  144. package/dist/components/StatsChart/StatsChart.esm.js.map +1 -1
  145. package/dist/components/SuggestionsCard/SuggestionsCard.esm.js +42 -32
  146. package/dist/components/SuggestionsCard/SuggestionsCard.esm.js.map +1 -1
  147. package/dist/components/SummaryStatsGrid/SummaryStatsGrid.esm.js +75 -58
  148. package/dist/components/SummaryStatsGrid/SummaryStatsGrid.esm.js.map +1 -1
  149. package/dist/components/TagsAndEntities/CollectionChip.esm.js +50 -37
  150. package/dist/components/TagsAndEntities/CollectionChip.esm.js.map +1 -1
  151. package/dist/components/TagsAndEntities/EntityChip.esm.js +58 -40
  152. package/dist/components/TagsAndEntities/EntityChip.esm.js.map +1 -1
  153. package/dist/components/TagsAndEntities/TagChip.esm.js +52 -39
  154. package/dist/components/TagsAndEntities/TagChip.esm.js.map +1 -1
  155. package/dist/components/TagsAndEntities/TagsAndEntities.esm.js +5 -2
  156. package/dist/components/TagsAndEntities/TagsAndEntities.esm.js.map +1 -1
  157. package/dist/components/TagsAndEntities/UserChip.esm.js +55 -44
  158. package/dist/components/TagsAndEntities/UserChip.esm.js.map +1 -1
  159. package/dist/components/TagsGrid/CreateTagModal.esm.js +59 -46
  160. package/dist/components/TagsGrid/CreateTagModal.esm.js.map +1 -1
  161. package/dist/components/TagsGrid/EditTagModal.esm.js +46 -36
  162. package/dist/components/TagsGrid/EditTagModal.esm.js.map +1 -1
  163. package/dist/components/TagsGrid/NoTagsCard.esm.js +10 -6
  164. package/dist/components/TagsGrid/NoTagsCard.esm.js.map +1 -1
  165. package/dist/components/TagsGrid/TagGridItem.esm.js +87 -59
  166. package/dist/components/TagsGrid/TagGridItem.esm.js.map +1 -1
  167. package/dist/components/TagsGrid/TagsGrid.esm.js +68 -54
  168. package/dist/components/TagsGrid/TagsGrid.esm.js.map +1 -1
  169. package/dist/components/TagsGrid/TagsGridContent.esm.js +9 -5
  170. package/dist/components/TagsGrid/TagsGridContent.esm.js.map +1 -1
  171. package/dist/components/TemplateList/TemplateForm.esm.js +104 -94
  172. package/dist/components/TemplateList/TemplateForm.esm.js.map +1 -1
  173. package/dist/components/TemplateList/TemplateList.esm.js +50 -37
  174. package/dist/components/TemplateList/TemplateList.esm.js.map +1 -1
  175. package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js +75 -51
  176. package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js.map +1 -1
  177. package/dist/components/TopRankingUsersCard/TrophyIcon.esm.js +17 -14
  178. package/dist/components/TopRankingUsersCard/TrophyIcon.esm.js.map +1 -1
  179. package/dist/components/UsersGrid/NoUsersCard.esm.js +10 -6
  180. package/dist/components/UsersGrid/NoUsersCard.esm.js.map +1 -1
  181. package/dist/components/UsersGrid/UsersGrid.esm.js +34 -23
  182. package/dist/components/UsersGrid/UsersGrid.esm.js.map +1 -1
  183. package/dist/components/UsersGrid/UsersGridContent.esm.js +9 -5
  184. package/dist/components/UsersGrid/UsersGridContent.esm.js.map +1 -1
  185. package/dist/components/UsersGrid/UsersGridItem.esm.js +78 -58
  186. package/dist/components/UsersGrid/UsersGridItem.esm.js.map +1 -1
  187. package/dist/components/Utility/ModalContent.esm.js +4 -3
  188. package/dist/components/Utility/ModalContent.esm.js.map +1 -1
  189. package/dist/components/Utility/OptionalRequirePermission.esm.js +4 -4
  190. package/dist/components/Utility/OptionalRequirePermission.esm.js.map +1 -1
  191. package/dist/components/Utility/RightList.esm.js +13 -11
  192. package/dist/components/Utility/RightList.esm.js.map +1 -1
  193. package/dist/components/Utility/SmallAvatar.esm.js +2 -2
  194. package/dist/components/Utility/SmallAvatar.esm.js.map +1 -1
  195. package/dist/components/Utility/VoteButtonContainer.esm.js +2 -2
  196. package/dist/components/Utility/VoteButtonContainer.esm.js.map +1 -1
  197. package/dist/hooks/useAI.esm.js +7 -5
  198. package/dist/hooks/useAI.esm.js.map +1 -1
  199. package/dist/hooks/useCollectionsFollow.esm.js +3 -5
  200. package/dist/hooks/useCollectionsFollow.esm.js.map +1 -1
  201. package/dist/hooks/useEntityAuthor.esm.js +5 -5
  202. package/dist/hooks/useEntityAuthor.esm.js.map +1 -1
  203. package/dist/hooks/useEntityFollow.esm.js +3 -5
  204. package/dist/hooks/useEntityFollow.esm.js.map +1 -1
  205. package/dist/hooks/useEntityQueryParameter.esm.js +2 -2
  206. package/dist/hooks/useEntityQueryParameter.esm.js.map +1 -1
  207. package/dist/hooks/useIsModerator.esm.js +19 -4
  208. package/dist/hooks/useIsModerator.esm.js.map +1 -1
  209. package/dist/hooks/usePaginatedPosts.esm.js +7 -7
  210. package/dist/hooks/usePaginatedPosts.esm.js.map +1 -1
  211. package/dist/hooks/useTagsFollow.esm.js +3 -3
  212. package/dist/hooks/useTagsFollow.esm.js.map +1 -1
  213. package/dist/hooks/useUserFollow.esm.js +3 -3
  214. package/dist/hooks/useUserFollow.esm.js.map +1 -1
  215. package/dist/hooks/useVoting.esm.js +4 -3
  216. package/dist/hooks/useVoting.esm.js.map +1 -1
  217. package/dist/index.d.ts +65 -63
  218. package/dist/routes.esm.js +3 -3
  219. package/dist/routes.esm.js.map +1 -1
  220. package/dist/translation.esm.js +2 -1
  221. package/dist/translation.esm.js.map +1 -1
  222. package/dist/utils/utils.esm.js +40 -14
  223. package/dist/utils/utils.esm.js.map +1 -1
  224. package/package.json +16 -9
@@ -1,5 +1,6 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
1
2
  import { useQetaApi } from '../../hooks/useQetaApi.esm.js';
2
- import React__default, { useState, useEffect } from 'react';
3
+ import { useState, useEffect } from 'react';
3
4
  import { useApi } from '@backstage/core-plugin-api';
4
5
  import { qetaApiRef } from '../../api.esm.js';
5
6
  import { useTranslation } from '../../hooks/useTranslation.esm.js';
@@ -48,13 +49,13 @@ const TemplateList = () => {
48
49
  qetaApi.deleteTemplate(templateId).then(() => retry());
49
50
  };
50
51
  if (loading) {
51
- return /* @__PURE__ */ React__default.createElement(Progress, null);
52
+ return /* @__PURE__ */ jsx(Progress, {});
52
53
  }
53
54
  if (error || value === void 0) {
54
- return /* @__PURE__ */ React__default.createElement(WarningPanel, { severity: "error", title: t("templateList.errorLoading") }, error?.message);
55
+ return /* @__PURE__ */ jsx(WarningPanel, { severity: "error", title: t("templateList.errorLoading"), children: error?.message });
55
56
  }
56
57
  if (mode === "create" || mode === "edit") {
57
- return /* @__PURE__ */ React__default.createElement(
58
+ return /* @__PURE__ */ jsx(
58
59
  TemplateForm,
59
60
  {
60
61
  onPost: () => {
@@ -64,43 +65,55 @@ const TemplateList = () => {
64
65
  }
65
66
  );
66
67
  }
67
- return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(
68
- Button,
69
- {
70
- variant: "contained",
71
- color: "primary",
72
- onClick: () => {
73
- navigate("#template:new");
74
- }
75
- },
76
- t("templateList.createButton")
77
- ), /* @__PURE__ */ React__default.createElement(
78
- Box,
79
- {
80
- sx: { width: "100%", bgcolor: "background.paper", marginTop: "1em" }
81
- },
82
- /* @__PURE__ */ React__default.createElement(List, { style: { width: "100%" } }, value.total === 0 && /* @__PURE__ */ React__default.createElement(ListItem, null, /* @__PURE__ */ React__default.createElement(
83
- ListItemText,
68
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
69
+ /* @__PURE__ */ jsx(
70
+ Button,
84
71
  {
85
- primary: t("templateList.noTemplates"),
86
- secondary: t("templateList.noTemplatesDescription")
72
+ variant: "contained",
73
+ color: "primary",
74
+ onClick: () => {
75
+ navigate("#template:new");
76
+ },
77
+ children: t("templateList.createButton")
87
78
  }
88
- )), value.templates.map((template, index) => /* @__PURE__ */ React__default.createElement(ListItem, { key: index }, /* @__PURE__ */ React__default.createElement(
89
- ListItemText,
79
+ ),
80
+ /* @__PURE__ */ jsx(
81
+ Box,
90
82
  {
91
- primary: template.title,
92
- secondary: template.description
83
+ sx: { width: "100%", bgcolor: "background.paper", marginTop: "1em" },
84
+ children: /* @__PURE__ */ jsxs(List, { style: { width: "100%" }, children: [
85
+ value.total === 0 && /* @__PURE__ */ jsx(ListItem, { children: /* @__PURE__ */ jsx(
86
+ ListItemText,
87
+ {
88
+ primary: t("templateList.noTemplates"),
89
+ secondary: t("templateList.noTemplatesDescription")
90
+ }
91
+ ) }),
92
+ value.templates.map((template, index) => /* @__PURE__ */ jsxs(ListItem, { children: [
93
+ /* @__PURE__ */ jsx(
94
+ ListItemText,
95
+ {
96
+ primary: template.title,
97
+ secondary: template.description
98
+ }
99
+ ),
100
+ /* @__PURE__ */ jsxs(ListItemSecondaryAction, { children: [
101
+ /* @__PURE__ */ jsx(
102
+ IconButton,
103
+ {
104
+ onClick: () => {
105
+ navigate(`#template:${template.id}`);
106
+ },
107
+ children: /* @__PURE__ */ jsx(EditIcon, {})
108
+ }
109
+ ),
110
+ /* @__PURE__ */ jsx(IconButton, { onClick: () => onDelete(template.id), children: /* @__PURE__ */ jsx(DeleteIcon, {}) })
111
+ ] })
112
+ ] }, index))
113
+ ] })
93
114
  }
94
- ), /* @__PURE__ */ React__default.createElement(ListItemSecondaryAction, null, /* @__PURE__ */ React__default.createElement(
95
- IconButton,
96
- {
97
- onClick: () => {
98
- navigate(`#template:${template.id}`);
99
- }
100
- },
101
- /* @__PURE__ */ React__default.createElement(EditIcon, null)
102
- ), /* @__PURE__ */ React__default.createElement(IconButton, { onClick: () => onDelete(template.id) }, /* @__PURE__ */ React__default.createElement(DeleteIcon, null))))))
103
- ));
115
+ )
116
+ ] });
104
117
  };
105
118
 
106
119
  export { TemplateList };
@@ -1 +1 @@
1
- {"version":3,"file":"TemplateList.esm.js","sources":["../../../src/components/TemplateList/TemplateList.tsx"],"sourcesContent":["import { useIsModerator, useQetaApi, useTranslation } from '../../hooks';\nimport { Progress, WarningPanel } from '@backstage/core-components';\nimport React, { useEffect, useState } from 'react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport EditIcon from '@material-ui/icons/Edit';\nimport { qetaApiRef } from '../../api';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { TemplateForm } from './TemplateForm';\nimport { useNavigate } from 'react-router-dom';\nimport { useLocation } from 'react-use';\nimport {\n Box,\n Button,\n IconButton,\n List,\n ListItem,\n ListItemSecondaryAction,\n ListItemText,\n} from '@material-ui/core';\n\nexport const TemplateList = () => {\n const { isModerator } = useIsModerator();\n\n const [mode, setMode] = useState<'list' | 'create' | 'edit'>('list');\n const [id, setId] = useState<number | undefined>(undefined);\n const qetaApi = useApi(qetaApiRef);\n const navigate = useNavigate();\n const { hash } = useLocation();\n const { value, loading, error, retry } = useQetaApi(api =>\n api.getTemplates(),\n );\n const { t } = useTranslation();\n\n useEffect(() => {\n const [, hashMode] = (hash ?? '').split(':');\n if (hashMode === 'new') {\n setMode('create');\n } else {\n const hashId = parseInt(hashMode, 10);\n if (!isNaN(hashId)) {\n setId(hashId);\n setMode('edit');\n } else {\n setMode('list');\n }\n }\n }, [hash]);\n\n if (!isModerator) {\n return null;\n }\n\n const onDelete = (templateId: number) => {\n qetaApi.deleteTemplate(templateId).then(() => retry());\n };\n\n if (loading) {\n return <Progress />;\n }\n\n if (error || value === undefined) {\n return (\n <WarningPanel severity=\"error\" title={t('templateList.errorLoading')}>\n {error?.message}\n </WarningPanel>\n );\n }\n\n if (mode === 'create' || mode === 'edit') {\n return (\n <TemplateForm\n onPost={() => {\n navigate('#template:list');\n }}\n id={id}\n />\n );\n }\n\n return (\n <>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n navigate('#template:new');\n }}\n >\n {t('templateList.createButton')}\n </Button>\n <Box\n sx={{ width: '100%', bgcolor: 'background.paper', marginTop: '1em' }}\n >\n <List style={{ width: '100%' }}>\n {value.total === 0 && (\n <ListItem>\n <ListItemText\n primary={t('templateList.noTemplates')}\n secondary={t('templateList.noTemplatesDescription')}\n />\n </ListItem>\n )}\n {value.templates.map((template, index) => (\n <ListItem key={index}>\n <ListItemText\n primary={template.title}\n secondary={template.description}\n />\n <ListItemSecondaryAction>\n <IconButton\n onClick={() => {\n navigate(`#template:${template.id}`);\n }}\n >\n <EditIcon />\n </IconButton>\n <IconButton onClick={() => onDelete(template.id)}>\n <DeleteIcon />\n </IconButton>\n </ListItemSecondaryAction>\n </ListItem>\n ))}\n </List>\n </Box>\n </>\n );\n};\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"TemplateList.esm.js","sources":["../../../src/components/TemplateList/TemplateList.tsx"],"sourcesContent":["import { useIsModerator, useQetaApi, useTranslation } from '../../hooks';\nimport { Progress, WarningPanel } from '@backstage/core-components';\nimport { useEffect, useState } from 'react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport EditIcon from '@material-ui/icons/Edit';\nimport { qetaApiRef } from '../../api';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { TemplateForm } from './TemplateForm';\nimport { useNavigate } from 'react-router-dom';\nimport { useLocation } from 'react-use';\nimport {\n Box,\n Button,\n IconButton,\n List,\n ListItem,\n ListItemSecondaryAction,\n ListItemText,\n} from '@material-ui/core';\n\nexport const TemplateList = () => {\n const { isModerator } = useIsModerator();\n\n const [mode, setMode] = useState<'list' | 'create' | 'edit'>('list');\n const [id, setId] = useState<number | undefined>(undefined);\n const qetaApi = useApi(qetaApiRef);\n const navigate = useNavigate();\n const { hash } = useLocation();\n const { value, loading, error, retry } = useQetaApi(api =>\n api.getTemplates(),\n );\n const { t } = useTranslation();\n\n useEffect(() => {\n const [, hashMode] = (hash ?? '').split(':');\n if (hashMode === 'new') {\n setMode('create');\n } else {\n const hashId = parseInt(hashMode, 10);\n if (!isNaN(hashId)) {\n setId(hashId);\n setMode('edit');\n } else {\n setMode('list');\n }\n }\n }, [hash]);\n\n if (!isModerator) {\n return null;\n }\n\n const onDelete = (templateId: number) => {\n qetaApi.deleteTemplate(templateId).then(() => retry());\n };\n\n if (loading) {\n return <Progress />;\n }\n\n if (error || value === undefined) {\n return (\n <WarningPanel severity=\"error\" title={t('templateList.errorLoading')}>\n {error?.message}\n </WarningPanel>\n );\n }\n\n if (mode === 'create' || mode === 'edit') {\n return (\n <TemplateForm\n onPost={() => {\n navigate('#template:list');\n }}\n id={id}\n />\n );\n }\n\n return (\n <>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n navigate('#template:new');\n }}\n >\n {t('templateList.createButton')}\n </Button>\n <Box\n sx={{ width: '100%', bgcolor: 'background.paper', marginTop: '1em' }}\n >\n <List style={{ width: '100%' }}>\n {value.total === 0 && (\n <ListItem>\n <ListItemText\n primary={t('templateList.noTemplates')}\n secondary={t('templateList.noTemplatesDescription')}\n />\n </ListItem>\n )}\n {value.templates.map((template, index) => (\n <ListItem key={index}>\n <ListItemText\n primary={template.title}\n secondary={template.description}\n />\n <ListItemSecondaryAction>\n <IconButton\n onClick={() => {\n navigate(`#template:${template.id}`);\n }}\n >\n <EditIcon />\n </IconButton>\n <IconButton onClick={() => onDelete(template.id)}>\n <DeleteIcon />\n </IconButton>\n </ListItemSecondaryAction>\n </ListItem>\n ))}\n </List>\n </Box>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
- import React__default from 'react';
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { WarningPanel, CardTab, TabbedCard, Progress } from '@backstage/core-components';
3
3
  import { makeStyles, List, ListItem, ListItemAvatar, Avatar, ListItemText, Typography } from '@material-ui/core';
4
4
  import { TrophyIcon } from './TrophyIcon.esm.js';
5
5
  import { UserLink } from '../Links/Links.esm.js';
6
6
  import { useQetaApi } from '../../hooks/useQetaApi.esm.js';
7
+ import 'react';
7
8
  import '@backstage/core-plugin-api';
8
9
  import '../../api.esm.js';
9
10
  import { useTranslation } from '../../hooks/useTranslation.esm.js';
@@ -11,6 +12,9 @@ import '@backstage/catalog-model';
11
12
  import 'dataloader';
12
13
  import '@backstage/plugin-catalog-react';
13
14
  import 'react-use/lib/useAsync';
15
+ import '@backstage/plugin-permission-react';
16
+ import '@drodil/backstage-plugin-qeta-common';
17
+ import '@backstage/plugin-permission-common';
14
18
 
15
19
  const useStyles = makeStyles((theme) => {
16
20
  return {
@@ -33,7 +37,7 @@ const useStyles = makeStyles((theme) => {
33
37
  const DefaultRankingIcons = /* @__PURE__ */ new Map([
34
38
  [
35
39
  1,
36
- /* @__PURE__ */ React__default.createElement(
40
+ /* @__PURE__ */ jsx(
37
41
  TrophyIcon,
38
42
  {
39
43
  style: { color: "#DAA520", height: "2.2rem", width: "2.2rem" }
@@ -42,7 +46,7 @@ const DefaultRankingIcons = /* @__PURE__ */ new Map([
42
46
  ],
43
47
  [
44
48
  2,
45
- /* @__PURE__ */ React__default.createElement(
49
+ /* @__PURE__ */ jsx(
46
50
  TrophyIcon,
47
51
  {
48
52
  style: { color: "#C0C0C0", height: "2.1rem", width: "2.1rem" }
@@ -51,10 +55,10 @@ const DefaultRankingIcons = /* @__PURE__ */ new Map([
51
55
  ],
52
56
  [
53
57
  3,
54
- /* @__PURE__ */ React__default.createElement(TrophyIcon, { style: { color: "#B87333", height: "2rem", width: "2rem" } })
58
+ /* @__PURE__ */ jsx(TrophyIcon, { style: { color: "#B87333", height: "2rem", width: "2rem" } })
55
59
  ]
56
60
  ]);
57
- const DefaultUserIcon = /* @__PURE__ */ React__default.createElement(TrophyIcon, { style: { height: "2rem", width: "2rem" } });
61
+ const DefaultUserIcon = /* @__PURE__ */ jsx(TrophyIcon, { style: { height: "2rem", width: "2rem" } });
58
62
  const getOrdinal = (n) => {
59
63
  if (n % 10 === 1 && n % 100 !== 11) {
60
64
  return `${n}st`;
@@ -72,50 +76,70 @@ const RankingRow = (props) => {
72
76
  const userIcon = props.rankingIcon?.userRankingIcon ? props.rankingIcon?.userRankingIcon : DefaultUserIcon;
73
77
  const topRankingIcon = props.rankingIcon ? props.rankingIcon.iconsByRanking.get(Number(props?.position)) : DefaultRankingIcons.get(Number(props?.position)) || DefaultUserIcon;
74
78
  const rankingIcon = props?.position > 3 ? userIcon : topRankingIcon;
75
- return /* @__PURE__ */ React__default.createElement(ListItem, { className: "qetaRankingCardRow" }, /* @__PURE__ */ React__default.createElement(ListItemAvatar, null, /* @__PURE__ */ React__default.createElement(Avatar, { className: classes.trophyIcon }, rankingIcon)), /* @__PURE__ */ React__default.createElement(
76
- ListItemText,
77
- {
78
- disableTypography: true,
79
- style: {
80
- display: "flex",
81
- justifyContent: "center"
82
- },
83
- primary: /* @__PURE__ */ React__default.createElement("div", { style: { display: "flex" } }, /* @__PURE__ */ React__default.createElement(
84
- Typography,
85
- {
86
- style: { marginRight: "10px", fontWeight: 400 },
87
- variant: "subtitle1"
79
+ return /* @__PURE__ */ jsxs(ListItem, { className: "qetaRankingCardRow", children: [
80
+ /* @__PURE__ */ jsx(ListItemAvatar, { children: /* @__PURE__ */ jsx(Avatar, { className: classes.trophyIcon, children: rankingIcon }) }),
81
+ /* @__PURE__ */ jsx(
82
+ ListItemText,
83
+ {
84
+ disableTypography: true,
85
+ style: {
86
+ display: "flex",
87
+ justifyContent: "center"
88
88
  },
89
- `${ordinalPosition}`,
90
- " ",
91
- /* @__PURE__ */ React__default.createElement(UserLink, { entityRef: userRef ?? "" })
92
- ))
93
- }
94
- ), /* @__PURE__ */ React__default.createElement("div", { className: classes.votesText }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "subtitle1" }, props?.total, " ", props.unit)));
89
+ primary: /* @__PURE__ */ jsx("div", { style: { display: "flex" }, children: /* @__PURE__ */ jsxs(
90
+ Typography,
91
+ {
92
+ style: { marginRight: "10px", fontWeight: 400 },
93
+ variant: "subtitle1",
94
+ children: [
95
+ `${ordinalPosition}`,
96
+ " ",
97
+ /* @__PURE__ */ jsx(UserLink, { entityRef: userRef ?? "" })
98
+ ]
99
+ }
100
+ ) })
101
+ }
102
+ ),
103
+ /* @__PURE__ */ jsx("div", { className: classes.votesText, children: /* @__PURE__ */ jsxs(Typography, { variant: "subtitle1", children: [
104
+ props?.total,
105
+ " ",
106
+ props.unit
107
+ ] }) })
108
+ ] });
95
109
  };
96
110
  const RankingCard = (props) => {
97
111
  const rankingStats = props.limit ? props.statistic?.ranking.slice(0, props.limit) : props.statistic?.ranking;
98
- return /* @__PURE__ */ React__default.createElement("div", { style: { display: "block" }, className: "qetaRankingCard" }, /* @__PURE__ */ React__default.createElement("span", { className: "qetaRankingCardDescription" }, props.description), /* @__PURE__ */ React__default.createElement(List, { className: "qetaRankingCardList" }, rankingStats?.map((authorStats) => {
99
- return /* @__PURE__ */ React__default.createElement(
100
- RankingRow,
101
- {
102
- total: authorStats.total || 0,
103
- position: authorStats.position || 0,
104
- userRef: authorStats.author,
105
- unit: props.unit
106
- }
107
- );
108
- }), !rankingStats?.some(
109
- (authorStats) => authorStats.author === props.statistic?.loggedUser?.author
110
- ) && /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement("hr", null), /* @__PURE__ */ React__default.createElement(
111
- RankingRow,
112
- {
113
- total: props.statistic?.loggedUser?.total || 0,
114
- position: props.statistic?.loggedUser?.position || 0,
115
- userRef: props.statistic?.loggedUser?.author,
116
- unit: props.unit
117
- }
118
- ))));
112
+ return /* @__PURE__ */ jsxs("div", { style: { display: "block" }, className: "qetaRankingCard", children: [
113
+ /* @__PURE__ */ jsx("span", { className: "qetaRankingCardDescription", children: props.description }),
114
+ /* @__PURE__ */ jsxs(List, { className: "qetaRankingCardList", children: [
115
+ rankingStats?.map((authorStats) => {
116
+ return /* @__PURE__ */ jsx(
117
+ RankingRow,
118
+ {
119
+ total: authorStats.total || 0,
120
+ position: authorStats.position || 0,
121
+ userRef: authorStats.author,
122
+ unit: props.unit
123
+ },
124
+ authorStats.author
125
+ );
126
+ }),
127
+ !rankingStats?.some(
128
+ (authorStats) => authorStats.author === props.statistic?.loggedUser?.author
129
+ ) && /* @__PURE__ */ jsxs(Fragment, { children: [
130
+ /* @__PURE__ */ jsx("hr", {}),
131
+ /* @__PURE__ */ jsx(
132
+ RankingRow,
133
+ {
134
+ total: props.statistic?.loggedUser?.total || 0,
135
+ position: props.statistic?.loggedUser?.position || 0,
136
+ userRef: props.statistic?.loggedUser?.author,
137
+ unit: props.unit
138
+ }
139
+ )
140
+ ] })
141
+ ] })
142
+ ] });
119
143
  };
120
144
  const TopRankingUsers = (props) => {
121
145
  const { t } = useTranslation();
@@ -156,16 +180,16 @@ const TopRankingUsers = (props) => {
156
180
  }
157
181
  ];
158
182
  if ((error || topStatistics === void 0) && !loading) {
159
- return /* @__PURE__ */ React__default.createElement(WarningPanel, { severity: "error", title: t("statistics.errorLoading") }, error?.message);
183
+ return /* @__PURE__ */ jsx(WarningPanel, { severity: "error", title: t("statistics.errorLoading"), children: error?.message });
160
184
  }
161
185
  let content;
162
186
  if (loading) {
163
187
  content = [
164
- /* @__PURE__ */ React__default.createElement(CardTab, null, /* @__PURE__ */ React__default.createElement(Progress, null))
188
+ /* @__PURE__ */ jsx(CardTab, { children: /* @__PURE__ */ jsx(Progress, {}) })
165
189
  ];
166
190
  } else if (topStatistics && topStatistics.length > 0) {
167
191
  content = topStatistics?.map((stats, index) => {
168
- return /* @__PURE__ */ React__default.createElement(CardTab, { label: tabData[index].title }, /* @__PURE__ */ React__default.createElement(
192
+ return /* @__PURE__ */ jsx(CardTab, { label: tabData[index].title, children: /* @__PURE__ */ jsx(
169
193
  RankingCard,
170
194
  {
171
195
  description: tabData[index].description,
@@ -173,12 +197,12 @@ const TopRankingUsers = (props) => {
173
197
  statistic: stats,
174
198
  unit: tabData[index].unit
175
199
  }
176
- ));
200
+ ) }, tabData[index].title);
177
201
  });
178
202
  } else {
179
- content = [/* @__PURE__ */ React__default.createElement(CardTab, null, t("statistics.notAvailable"))];
203
+ content = [/* @__PURE__ */ jsx(CardTab, { children: t("statistics.notAvailable") })];
180
204
  }
181
- return /* @__PURE__ */ React__default.createElement(TabbedCard, { title: props.title || t("statistics.ranking") }, content);
205
+ return /* @__PURE__ */ jsx(TabbedCard, { title: props.title || t("statistics.ranking"), children: content });
182
206
  };
183
207
 
184
208
  export { RankingCard, RankingRow, TopRankingUsers };
@@ -1 +1 @@
1
- {"version":3,"file":"TopRankingUsersCard.esm.js","sources":["../../../src/components/TopRankingUsersCard/TopRankingUsersCard.tsx"],"sourcesContent":["import React, { ReactElement, ReactNode } from 'react';\nimport {\n CardTab,\n Progress,\n TabbedCard,\n WarningPanel,\n} from '@backstage/core-components';\nimport {\n Avatar,\n List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n makeStyles,\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, useTranslation } from '../../hooks';\n\nconst useStyles = makeStyles(theme => {\n return {\n trophyIcon: {\n backgroundColor: 'initial',\n color: theme.palette.text.primary,\n borderRadius: '50%',\n boxSizing: 'border-box',\n padding: '0.5rem',\n height: 50,\n width: 50,\n },\n votesText: {\n display: 'grid',\n placeItems: 'center',\n marginLeft: '16px',\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=\"qetaRankingCardRow\">\n <ListItemAvatar>\n <Avatar className={classes.trophyIcon}>{rankingIcon}</Avatar>\n </ListItemAvatar>\n\n <ListItemText\n disableTypography\n style={{\n display: 'flex',\n justifyContent: 'center',\n }}\n primary={\n <div style={{ display: 'flex' }}>\n <Typography\n style={{ marginRight: '10px', fontWeight: 400 }}\n variant=\"subtitle1\"\n >\n {`${ordinalPosition}`} <UserLink entityRef={userRef ?? ''} />\n </Typography>\n </div>\n }\n />\n\n <div className={classes.votesText}>\n <Typography variant=\"subtitle1\">\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 rankingStats = props.limit\n ? props.statistic?.ranking.slice(0, props.limit)\n : props.statistic?.ranking;\n\n return (\n <div style={{ display: 'block' }} className=\"qetaRankingCard\">\n <span className=\"qetaRankingCardDescription\">{props.description}</span>\n <List className=\"qetaRankingCardList\">\n {rankingStats?.map(authorStats => {\n return (\n <RankingRow\n total={authorStats.total || 0}\n position={authorStats.position || 0}\n userRef={authorStats.author}\n unit={props.unit}\n />\n );\n })}\n {!rankingStats?.some(\n authorStats =>\n authorStats.author === props.statistic?.loggedUser?.author,\n ) && (\n <>\n <hr />\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 </div>\n );\n};\n\nexport const TopRankingUsers = (props: {\n title?: string;\n hideTitle?: boolean;\n limit?: number;\n}) => {\n const { t } = useTranslation();\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 <Progress />\n </CardTab>,\n ];\n } else if (topStatistics && topStatistics.length > 0) {\n content = topStatistics?.map((stats, index) => {\n return (\n <CardTab label={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 = [<CardTab>{t('statistics.notAvailable')}</CardTab>];\n }\n\n return (\n <TabbedCard title={props.title || t('statistics.ranking')}>\n {content}\n </TabbedCard>\n );\n};\n"],"names":["React"],"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 List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n makeStyles,\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, useTranslation } from '../../hooks';\n\nconst useStyles = makeStyles(theme => {\n return {\n trophyIcon: {\n backgroundColor: 'initial',\n color: theme.palette.text.primary,\n borderRadius: '50%',\n boxSizing: 'border-box',\n padding: '0.5rem',\n height: 50,\n width: 50,\n },\n votesText: {\n display: 'grid',\n placeItems: 'center',\n marginLeft: '16px',\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=\"qetaRankingCardRow\">\n <ListItemAvatar>\n <Avatar className={classes.trophyIcon}>{rankingIcon}</Avatar>\n </ListItemAvatar>\n\n <ListItemText\n disableTypography\n style={{\n display: 'flex',\n justifyContent: 'center',\n }}\n primary={\n <div style={{ display: 'flex' }}>\n <Typography\n style={{ marginRight: '10px', fontWeight: 400 }}\n variant=\"subtitle1\"\n >\n {`${ordinalPosition}`} <UserLink entityRef={userRef ?? ''} />\n </Typography>\n </div>\n }\n />\n\n <div className={classes.votesText}>\n <Typography variant=\"subtitle1\">\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 rankingStats = props.limit\n ? props.statistic?.ranking.slice(0, props.limit)\n : props.statistic?.ranking;\n\n return (\n <div style={{ display: 'block' }} className=\"qetaRankingCard\">\n <span className=\"qetaRankingCardDescription\">{props.description}</span>\n <List className=\"qetaRankingCardList\">\n {rankingStats?.map(authorStats => {\n return (\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 })}\n {!rankingStats?.some(\n authorStats =>\n authorStats.author === props.statistic?.loggedUser?.author,\n ) && (\n <>\n <hr />\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 </div>\n );\n};\n\nexport const TopRankingUsers = (props: {\n title?: string;\n hideTitle?: boolean;\n limit?: number;\n}) => {\n const { t } = useTranslation();\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 <Progress />\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 = [<CardTab>{t('statistics.notAvailable')}</CardTab>];\n }\n\n return (\n <TabbedCard title={props.title || t('statistics.ranking')}>\n {content}\n </TabbedCard>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,19 +1,22 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
1
2
  import { SvgIcon } from '@material-ui/core';
2
- import React__default from 'react';
3
3
 
4
- const TrophyIcon = (props) => /* @__PURE__ */ React__default.createElement(SvgIcon, { ...props, viewBox: "0 0 24 24" }, /* @__PURE__ */ React__default.createElement(
5
- "path",
6
- {
7
- id: "secondary",
8
- d: "M17,12a1,1,0,0,1,0-2,3,3,0,0,0,3-3V6H17.17a1,1,0,0,1,0-2H20a2,2,0,0,1,2,2V7A5,5,0,0,1,17,12ZM8,11a1,1,0,0,0-1-1A3,3,0,0,1,4,7V6H6.74a1,1,0,0,0,0-2H4A2,2,0,0,0,2,6V7a5,5,0,0,0,5,5A1,1,0,0,0,8,11Zm5,10V16.18a1,1,0,0,0-2,0V21a1,1,0,0,0,2,0Z"
9
- }
10
- ), /* @__PURE__ */ React__default.createElement(
11
- "path",
12
- {
13
- id: "primary",
14
- d: "M16,22H8a1,1,0,0,1,0-2h8a1,1,0,0,1,0,2ZM17,2H7A1,1,0,0,0,6,3V9.57a7.75,7.75,0,0,0,4.89,7.22A3,3,0,0,0,12,17a3.13,3.13,0,0,0,1.12-.21A7.76,7.76,0,0,0,18,9.57V3A1,1,0,0,0,17,2Z"
15
- }
16
- ));
4
+ const TrophyIcon = (props) => /* @__PURE__ */ jsxs(SvgIcon, { ...props, viewBox: "0 0 24 24", children: [
5
+ /* @__PURE__ */ jsx(
6
+ "path",
7
+ {
8
+ id: "secondary",
9
+ d: "M17,12a1,1,0,0,1,0-2,3,3,0,0,0,3-3V6H17.17a1,1,0,0,1,0-2H20a2,2,0,0,1,2,2V7A5,5,0,0,1,17,12ZM8,11a1,1,0,0,0-1-1A3,3,0,0,1,4,7V6H6.74a1,1,0,0,0,0-2H4A2,2,0,0,0,2,6V7a5,5,0,0,0,5,5A1,1,0,0,0,8,11Zm5,10V16.18a1,1,0,0,0-2,0V21a1,1,0,0,0,2,0Z"
10
+ }
11
+ ),
12
+ /* @__PURE__ */ jsx(
13
+ "path",
14
+ {
15
+ id: "primary",
16
+ d: "M16,22H8a1,1,0,0,1,0-2h8a1,1,0,0,1,0,2ZM17,2H7A1,1,0,0,0,6,3V9.57a7.75,7.75,0,0,0,4.89,7.22A3,3,0,0,0,12,17a3.13,3.13,0,0,0,1.12-.21A7.76,7.76,0,0,0,18,9.57V3A1,1,0,0,0,17,2Z"
17
+ }
18
+ )
19
+ ] });
17
20
 
18
21
  export { TrophyIcon };
19
22
  //# sourceMappingURL=TrophyIcon.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TrophyIcon.esm.js","sources":["../../../src/components/TopRankingUsersCard/TrophyIcon.tsx"],"sourcesContent":["import { SvgIcon, SvgIconProps } from '@material-ui/core';\n\nimport React from 'react';\n\nexport const TrophyIcon = (props: SvgIconProps) => (\n <SvgIcon {...props} viewBox=\"0 0 24 24\">\n <path\n id=\"secondary\"\n d=\"M17,12a1,1,0,0,1,0-2,3,3,0,0,0,3-3V6H17.17a1,1,0,0,1,0-2H20a2,2,0,0,1,2,2V7A5,5,0,0,1,17,12ZM8,11a1,1,0,0,0-1-1A3,3,0,0,1,4,7V6H6.74a1,1,0,0,0,0-2H4A2,2,0,0,0,2,6V7a5,5,0,0,0,5,5A1,1,0,0,0,8,11Zm5,10V16.18a1,1,0,0,0-2,0V21a1,1,0,0,0,2,0Z\"\n />\n <path\n id=\"primary\"\n d=\"M16,22H8a1,1,0,0,1,0-2h8a1,1,0,0,1,0,2ZM17,2H7A1,1,0,0,0,6,3V9.57a7.75,7.75,0,0,0,4.89,7.22A3,3,0,0,0,12,17a3.13,3.13,0,0,0,1.12-.21A7.76,7.76,0,0,0,18,9.57V3A1,1,0,0,0,17,2Z\"\n />\n </SvgIcon>\n);\n"],"names":["React"],"mappings":";;;AAIa,MAAA,UAAA,GAAa,CAAC,KACzB,qBAAAA,cAAA,CAAA,aAAA,CAAC,WAAS,GAAG,KAAA,EAAO,SAAQ,WAC1B,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,EAAC,MAAA;AAAA,EAAA;AAAA,IACC,EAAG,EAAA,WAAA;AAAA,IACH,CAAE,EAAA;AAAA;AACJ,CACA,kBAAAA,cAAA,CAAA,aAAA;AAAA,EAAC,MAAA;AAAA,EAAA;AAAA,IACC,EAAG,EAAA,SAAA;AAAA,IACH,CAAE,EAAA;AAAA;AACJ,CACF;;;;"}
1
+ {"version":3,"file":"TrophyIcon.esm.js","sources":["../../../src/components/TopRankingUsersCard/TrophyIcon.tsx"],"sourcesContent":["import { SvgIcon, SvgIconProps } from '@material-ui/core';\n\nexport const TrophyIcon = (props: SvgIconProps) => (\n <SvgIcon {...props} viewBox=\"0 0 24 24\">\n <path\n id=\"secondary\"\n d=\"M17,12a1,1,0,0,1,0-2,3,3,0,0,0,3-3V6H17.17a1,1,0,0,1,0-2H20a2,2,0,0,1,2,2V7A5,5,0,0,1,17,12ZM8,11a1,1,0,0,0-1-1A3,3,0,0,1,4,7V6H6.74a1,1,0,0,0,0-2H4A2,2,0,0,0,2,6V7a5,5,0,0,0,5,5A1,1,0,0,0,8,11Zm5,10V16.18a1,1,0,0,0-2,0V21a1,1,0,0,0,2,0Z\"\n />\n <path\n id=\"primary\"\n d=\"M16,22H8a1,1,0,0,1,0-2h8a1,1,0,0,1,0,2ZM17,2H7A1,1,0,0,0,6,3V9.57a7.75,7.75,0,0,0,4.89,7.22A3,3,0,0,0,12,17a3.13,3.13,0,0,0,1.12-.21A7.76,7.76,0,0,0,18,9.57V3A1,1,0,0,0,17,2Z\"\n />\n </SvgIcon>\n);\n"],"names":[],"mappings":";;;AAEa,MAAA,UAAA,GAAa,CAAC,KACzB,qBAAA,IAAA,CAAC,WAAS,GAAG,KAAA,EAAO,SAAQ,WAC1B,EAAA,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,EAAG,EAAA,WAAA;AAAA,MACH,CAAE,EAAA;AAAA;AAAA,GACJ;AAAA,kBACA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,EAAG,EAAA,SAAA;AAAA,MACH,CAAE,EAAA;AAAA;AAAA;AACJ,CACF,EAAA;;;;"}
@@ -1,26 +1,30 @@
1
- import React__default from 'react';
1
+ import { jsx } from 'react/jsx-runtime';
2
2
  import '@backstage/core-plugin-api';
3
3
  import '../../api.esm.js';
4
4
  import 'react-use';
5
+ import 'react';
5
6
  import { useTranslation } from '../../hooks/useTranslation.esm.js';
6
7
  import '@backstage/catalog-model';
7
8
  import 'dataloader';
8
9
  import '@backstage/plugin-catalog-react';
9
10
  import 'react-use/lib/useAsync';
11
+ import '@backstage/plugin-permission-react';
12
+ import '@drodil/backstage-plugin-qeta-common';
13
+ import '@backstage/plugin-permission-common';
10
14
  import { Card, CardContent, Grid, Typography } from '@material-ui/core';
11
15
 
12
16
  const NoUsersCard = () => {
13
17
  const { t } = useTranslation();
14
- return /* @__PURE__ */ React__default.createElement(Card, { style: { marginTop: "2em" } }, /* @__PURE__ */ React__default.createElement(CardContent, null, /* @__PURE__ */ React__default.createElement(
18
+ return /* @__PURE__ */ jsx(Card, { style: { marginTop: "2em" }, children: /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(
15
19
  Grid,
16
20
  {
17
21
  container: true,
18
22
  justifyContent: "center",
19
23
  alignItems: "center",
20
- direction: "column"
21
- },
22
- /* @__PURE__ */ React__default.createElement(Grid, { item: true }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "h6" }, t(`usersPage.users`, { count: 0 })))
23
- )));
24
+ direction: "column",
25
+ children: /* @__PURE__ */ jsx(Grid, { item: true, children: /* @__PURE__ */ jsx(Typography, { variant: "h6", children: t(`usersPage.users`, { count: 0 }) }) })
26
+ }
27
+ ) }) });
24
28
  };
25
29
 
26
30
  export { NoUsersCard };
@@ -1 +1 @@
1
- {"version":3,"file":"NoUsersCard.esm.js","sources":["../../../src/components/UsersGrid/NoUsersCard.tsx"],"sourcesContent":["import React from 'react';\nimport { useTranslation } from '../../hooks';\nimport { Card, CardContent, Grid, Typography } from '@material-ui/core';\n\nexport const NoUsersCard = () => {\n const { t } = useTranslation();\n\n return (\n <Card style={{ marginTop: '2em' }}>\n <CardContent>\n <Grid\n container\n justifyContent=\"center\"\n alignItems=\"center\"\n direction=\"column\"\n >\n <Grid item>\n <Typography variant=\"h6\">\n {t(`usersPage.users`, { count: 0 })}\n </Typography>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;;;;;AAIO,MAAM,cAAc,MAAM;AAC/B,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAE7B,EACE,uBAAAA,cAAA,CAAA,aAAA,CAAC,QAAK,KAAO,EAAA,EAAE,WAAW,KAAM,EAAA,EAAA,+CAC7B,WACC,EAAA,IAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAS,EAAA,IAAA;AAAA,MACT,cAAe,EAAA,QAAA;AAAA,MACf,UAAW,EAAA,QAAA;AAAA,MACX,SAAU,EAAA;AAAA,KAAA;AAAA,oBAETA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAA,+CACP,UAAW,EAAA,EAAA,OAAA,EAAQ,IACjB,EAAA,EAAA,CAAA,CAAE,mBAAmB,EAAE,KAAA,EAAO,CAAE,EAAC,CACpC,CACF;AAAA,GAEJ,CACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"NoUsersCard.esm.js","sources":["../../../src/components/UsersGrid/NoUsersCard.tsx"],"sourcesContent":["import { useTranslation } from '../../hooks';\nimport { Card, CardContent, Grid, Typography } from '@material-ui/core';\n\nexport const NoUsersCard = () => {\n const { t } = useTranslation();\n\n return (\n <Card style={{ marginTop: '2em' }}>\n <CardContent>\n <Grid\n container\n justifyContent=\"center\"\n alignItems=\"center\"\n direction=\"column\"\n >\n <Grid item>\n <Typography variant=\"h6\">\n {t(`usersPage.users`, { count: 0 })}\n </Typography>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGO,MAAM,cAAc,MAAM;AAC/B,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAE7B,EACE,uBAAA,GAAA,CAAC,QAAK,KAAO,EAAA,EAAE,WAAW,KAAM,EAAA,EAC9B,8BAAC,WACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAS,EAAA,IAAA;AAAA,MACT,cAAe,EAAA,QAAA;AAAA,MACf,UAAW,EAAA,QAAA;AAAA,MACX,SAAU,EAAA,QAAA;AAAA,MAEV,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EACR,8BAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,IACjB,EAAA,QAAA,EAAA,CAAA,CAAE,mBAAmB,EAAE,KAAA,EAAO,CAAE,EAAC,GACpC,CACF,EAAA;AAAA;AAAA,KAEJ,CACF,EAAA,CAAA;AAEJ;;;;"}
@@ -1,4 +1,5 @@
1
- import React__default, { useEffect } from 'react';
1
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
+ import { useState, useEffect } from 'react';
2
3
  import { useQetaApi } from '../../hooks/useQetaApi.esm.js';
3
4
  import '@backstage/core-plugin-api';
4
5
  import '../../api.esm.js';
@@ -7,6 +8,9 @@ import '@backstage/catalog-model';
7
8
  import 'dataloader';
8
9
  import '@backstage/plugin-catalog-react';
9
10
  import 'react-use/lib/useAsync';
11
+ import '@backstage/plugin-permission-react';
12
+ import '@drodil/backstage-plugin-qeta-common';
13
+ import '@backstage/plugin-permission-common';
10
14
  import { QetaPagination } from '../QetaPagination/QetaPagination.esm.js';
11
15
  import { UsersGridContent } from './UsersGridContent.esm.js';
12
16
  import useDebounce from 'react-use/lib/useDebounce';
@@ -14,11 +18,11 @@ import { SearchBar } from '../SearchBar/SearchBar.esm.js';
14
18
  import { Grid, Typography } from '@material-ui/core';
15
19
 
16
20
  const UsersGrid = () => {
17
- const [page, setPage] = React__default.useState(1);
18
- const [pageCount, setPageCount] = React__default.useState(1);
19
- const [entitiesPerPage, setEntitiesPerPage] = React__default.useState(25);
20
- const [searchQuery, setSearchQuery] = React__default.useState("");
21
- const [filters, setFilters] = React__default.useState({
21
+ const [page, setPage] = useState(1);
22
+ const [pageCount, setPageCount] = useState(1);
23
+ const [entitiesPerPage, setEntitiesPerPage] = useState(25);
24
+ const [searchQuery, setSearchQuery] = useState("");
25
+ const [filters, setFilters] = useState({
22
26
  order: "desc",
23
27
  searchQuery: ""
24
28
  });
@@ -49,23 +53,30 @@ const UsersGrid = () => {
49
53
  setPageCount(Math.ceil(response.total / entitiesPerPage));
50
54
  }
51
55
  }, [response, entitiesPerPage]);
52
- return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(Grid, { container: true, className: "qetaUsersContainer" }, /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12, md: 4 }, /* @__PURE__ */ React__default.createElement(
53
- SearchBar,
54
- {
55
- onSearch: setSearchQuery,
56
- label: t("usersPage.search.label"),
57
- loading
58
- }
59
- ))), /* @__PURE__ */ React__default.createElement(Grid, { container: true }, response && /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(Typography, { variant: "h6", className: "qetaUsersContainerTitle" }, t("usersPage.users", { count: response.total }))), /* @__PURE__ */ React__default.createElement(UsersGridContent, { response, loading, error }), response && response?.total > 0 && /* @__PURE__ */ React__default.createElement(
60
- QetaPagination,
61
- {
62
- pageSize: entitiesPerPage,
63
- handlePageChange: (_e, p) => setPage(p),
64
- handlePageSizeChange: (e) => setEntitiesPerPage(Number(e.target.value)),
65
- page,
66
- pageCount
67
- }
68
- )));
56
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
57
+ /* @__PURE__ */ jsx(Grid, { container: true, className: "qetaUsersContainer", children: /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, md: 4, children: /* @__PURE__ */ jsx(
58
+ SearchBar,
59
+ {
60
+ onSearch: setSearchQuery,
61
+ label: t("usersPage.search.label"),
62
+ loading
63
+ }
64
+ ) }) }),
65
+ /* @__PURE__ */ jsxs(Grid, { container: true, children: [
66
+ response && /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(Typography, { variant: "h6", className: "qetaUsersContainerTitle", children: t("usersPage.users", { count: response.total }) }) }),
67
+ /* @__PURE__ */ jsx(UsersGridContent, { response, loading, error }),
68
+ response && response?.total > 0 && /* @__PURE__ */ jsx(
69
+ QetaPagination,
70
+ {
71
+ pageSize: entitiesPerPage,
72
+ handlePageChange: (_e, p) => setPage(p),
73
+ handlePageSizeChange: (e) => setEntitiesPerPage(Number(e.target.value)),
74
+ page,
75
+ pageCount
76
+ }
77
+ )
78
+ ] })
79
+ ] });
69
80
  };
70
81
 
71
82
  export { UsersGrid };