@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
@@ -1,204 +0,0 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { useState, useEffect } from 'react';
3
- import { Box, Button, Collapse } from '@material-ui/core';
4
- import { CollectionsGridContent } from './CollectionsGridContent.esm.js';
5
- import { useQetaApi } from '../../hooks/useQetaApi.esm.js';
6
- import '@backstage/core-plugin-api';
7
- import '../../api.esm.js';
8
- import '@backstage/catalog-model';
9
- import 'dataloader';
10
- import '@backstage/plugin-catalog-react';
11
- import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
12
- import { qetaTranslationRef } from '../../translation.esm.js';
13
- import 'react-use/lib/useAsync';
14
- import '@backstage/plugin-permission-react';
15
- import { filterTags } from '@drodil/backstage-plugin-qeta-common';
16
- import '@backstage/plugin-permission-common';
17
- import { useGridPageSize } from '../../hooks/useGridPageSize.esm.js';
18
- import useDebounce from 'react-use/lib/useDebounce';
19
- import { filterKeys, FilterPanel } from '../FilterPanel/FilterPanel.esm.js';
20
- import FilterList from '@material-ui/icons/FilterList';
21
- import { getFiltersWithDateRange } from '../../utils/utils.esm.js';
22
- import { useSearchParams } from 'react-router-dom';
23
- import { QetaGridHeader } from '../Utility/QetaGridHeader.esm.js';
24
-
25
- const EXPANDED_LOCAL_STORAGE_KEY = "qeta-collection-filters-expanded";
26
- const CollectionsGrid = (props) => {
27
- const { showFilters, owner } = props;
28
- const { t } = useTranslationRef(qetaTranslationRef);
29
- const [page, setPage] = useState(1);
30
- const [searchParams, setSearchParams] = useSearchParams();
31
- const [searchQuery, setSearchQuery] = useState("");
32
- const collectionsPerPage = useGridPageSize("collections", 24);
33
- const [showFilterPanel, setShowFilterPanel] = useState(
34
- localStorage.getItem(EXPANDED_LOCAL_STORAGE_KEY) === "true"
35
- );
36
- const [filters, setFilters] = useState({
37
- order: "desc",
38
- searchQuery: "",
39
- orderBy: "created"
40
- });
41
- const [collections, setCollections] = useState([]);
42
- const [hasMore, setHasMore] = useState(true);
43
- const [total, setTotal] = useState(0);
44
- useEffect(() => {
45
- localStorage.setItem(
46
- EXPANDED_LOCAL_STORAGE_KEY,
47
- showFilterPanel ? "true" : "false"
48
- );
49
- }, [showFilterPanel]);
50
- const {
51
- value: response,
52
- loading,
53
- error
54
- } = useQetaApi(
55
- (api) => {
56
- return api.getCollections({
57
- limit: collectionsPerPage,
58
- offset: (page - 1) * collectionsPerPage,
59
- includePosts: false,
60
- includeExperts: false,
61
- owner,
62
- ...getFiltersWithDateRange(filters)
63
- });
64
- },
65
- [collectionsPerPage, page, filters]
66
- );
67
- useDebounce(
68
- () => {
69
- if (filters.searchQuery !== searchQuery) {
70
- setPage(1);
71
- setCollections([]);
72
- setFilters({ ...filters, searchQuery });
73
- }
74
- },
75
- 400,
76
- [searchQuery]
77
- );
78
- useEffect(() => {
79
- if (response) {
80
- if (page === 1) {
81
- setCollections(response.collections);
82
- } else {
83
- setCollections((prev) => [...prev, ...response.collections]);
84
- }
85
- setHasMore(response.collections.length >= collectionsPerPage);
86
- setTotal(response.total);
87
- }
88
- }, [response, collectionsPerPage, page]);
89
- const combinedResponse = response ? {
90
- ...response,
91
- collections: page === 1 && !loading ? response.collections : collections,
92
- total
93
- } : void 0;
94
- const onFilterChange = (changes) => {
95
- const changesArray = Array.isArray(changes) ? changes : [changes];
96
- setPage(1);
97
- setCollections([]);
98
- setFilters((prev) => {
99
- const newValue = { ...prev };
100
- for (const { key, value } of changesArray) {
101
- newValue[key] = value;
102
- }
103
- return newValue;
104
- });
105
- setSearchParams((prev) => {
106
- const newValue = prev;
107
- for (const { key, value } of changesArray) {
108
- if (!filterKeys.includes(key)) {
109
- continue;
110
- }
111
- if (!value || value === "false") {
112
- newValue.delete(key);
113
- } else if (Array.isArray(value)) {
114
- if (value.length === 0) {
115
- newValue.delete(key);
116
- } else {
117
- newValue.set(key, value.join(","));
118
- }
119
- } else if (typeof value === "number") {
120
- newValue.set(key, String(value));
121
- } else if (value.length > 0) {
122
- newValue.set(key, value);
123
- } else {
124
- newValue.delete(key);
125
- }
126
- }
127
- return newValue;
128
- });
129
- };
130
- useEffect(() => {
131
- let filtersApplied = false;
132
- searchParams.forEach((value, key) => {
133
- try {
134
- if (key === "page") {
135
- const pv = Number.parseInt(value, 10);
136
- if (pv > 0) {
137
- setPage(pv);
138
- } else {
139
- setPage(1);
140
- setCollections([]);
141
- }
142
- } else if (filterKeys.includes(key)) {
143
- filtersApplied = true;
144
- if (key === "tags") {
145
- filters.tags = filterTags(value.split(",")) ?? [];
146
- } else if (key === "entities") {
147
- filters.entities = value.split(",");
148
- } else {
149
- filters[key] = value;
150
- }
151
- }
152
- } catch (_e) {
153
- }
154
- });
155
- setFilters(filters);
156
- if (filtersApplied) {
157
- setShowFilterPanel(true);
158
- }
159
- }, [searchParams, filters]);
160
- return /* @__PURE__ */ jsxs(Box, { children: [
161
- /* @__PURE__ */ jsx(
162
- QetaGridHeader,
163
- {
164
- title: t("common.collections", { count: response?.total ?? 0 }),
165
- searchBarLabel: t("collectionsPage.search.label"),
166
- loading,
167
- onSearch: setSearchQuery,
168
- buttons: response && (showFilters ?? true) && /* @__PURE__ */ jsx(
169
- Button,
170
- {
171
- onClick: () => {
172
- setShowFilterPanel(!showFilterPanel);
173
- },
174
- className: "qetaCollectionsContainerFilterPanelBtn",
175
- startIcon: /* @__PURE__ */ jsx(FilterList, {}),
176
- children: t("filterPanel.filterButton")
177
- }
178
- )
179
- }
180
- ),
181
- (showFilters ?? true) && /* @__PURE__ */ jsx(Collapse, { in: showFilterPanel, children: /* @__PURE__ */ jsx(
182
- FilterPanel,
183
- {
184
- onChange: onFilterChange,
185
- filters,
186
- mode: "collections",
187
- ...props.filterPanelProps
188
- }
189
- ) }),
190
- /* @__PURE__ */ jsx(
191
- CollectionsGridContent,
192
- {
193
- loading,
194
- error,
195
- response: combinedResponse,
196
- hasMore,
197
- loadNextPage: () => setPage((prev) => prev + 1)
198
- }
199
- )
200
- ] });
201
- };
202
-
203
- export { CollectionsGrid };
204
- //# sourceMappingURL=CollectionsGrid.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CollectionsGrid.esm.js","sources":["../../../src/components/CollectionsGrid/CollectionsGrid.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { Box, Button, Collapse } from '@material-ui/core';\nimport { CollectionsGridContent } from './CollectionsGridContent';\nimport { useGridPageSize, useQetaApi } from '../../hooks';\nimport useDebounce from 'react-use/lib/useDebounce';\n\nimport {\n CollectionFilters,\n CommonFilterPanelProps,\n FilterKey,\n filterKeys,\n FilterPanel,\n} from '../FilterPanel/FilterPanel';\nimport FilterList from '@material-ui/icons/FilterList';\nimport { getFiltersWithDateRange } from '../../utils';\nimport { useSearchParams } from 'react-router-dom';\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { QetaGridHeader } from '../Utility/QetaGridHeader';\n\nexport type CollectionsGridProps = {\n owner?: string;\n showFilters?: boolean;\n filterPanelProps?: CommonFilterPanelProps;\n};\n\nexport type CollectionFilterChange = {\n key: keyof CollectionFilters;\n value?: CollectionFilters[keyof CollectionFilters];\n};\n\nconst EXPANDED_LOCAL_STORAGE_KEY = 'qeta-collection-filters-expanded';\n\nexport const CollectionsGrid = (props: CollectionsGridProps) => {\n const { showFilters, owner } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const [page, setPage] = useState(1);\n\n const [searchParams, setSearchParams] = useSearchParams();\n const [searchQuery, setSearchQuery] = useState('');\n const collectionsPerPage = useGridPageSize('collections', 24);\n const [showFilterPanel, setShowFilterPanel] = useState(\n localStorage.getItem(EXPANDED_LOCAL_STORAGE_KEY) === 'true',\n );\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\n const [filters, setFilters] = useState<CollectionFilters>({\n order: 'desc',\n searchQuery: '',\n orderBy: 'created',\n });\n const [collections, setCollections] = useState<any[]>([]);\n const [hasMore, setHasMore] = useState(true);\n const [total, setTotal] = useState(0);\n\n useEffect(() => {\n localStorage.setItem(\n EXPANDED_LOCAL_STORAGE_KEY,\n showFilterPanel ? 'true' : 'false',\n );\n }, [showFilterPanel]);\n\n const {\n value: response,\n loading,\n error,\n } = useQetaApi(\n api => {\n return api.getCollections({\n limit: collectionsPerPage,\n offset: (page - 1) * collectionsPerPage,\n includePosts: false,\n includeExperts: false,\n owner,\n ...(getFiltersWithDateRange(filters) as any),\n });\n },\n [collectionsPerPage, page, filters],\n );\n\n useDebounce(\n () => {\n if (filters.searchQuery !== searchQuery) {\n setPage(1);\n setCollections([]);\n setFilters({ ...filters, searchQuery: searchQuery });\n }\n },\n 400,\n [searchQuery],\n );\n\n useEffect(() => {\n if (response) {\n if (page === 1) {\n setCollections(response.collections);\n } else {\n setCollections(prev => [...prev, ...response.collections]);\n }\n setHasMore(response.collections.length >= collectionsPerPage);\n setTotal(response.total);\n }\n }, [response, collectionsPerPage, page]);\n\n const combinedResponse = response\n ? {\n ...response,\n collections:\n page === 1 && !loading ? response.collections : collections,\n total,\n }\n : undefined;\n\n const onFilterChange = (\n changes: CollectionFilterChange | CollectionFilterChange[],\n ) => {\n const changesArray = Array.isArray(changes) ? changes : [changes];\n setPage(1);\n setCollections([]);\n setFilters(prev => {\n const newValue = { ...prev };\n for (const { key, value } of changesArray) {\n (newValue as any)[key] = value;\n }\n return newValue;\n });\n setSearchParams(prev => {\n const newValue = prev;\n for (const { key, value } of changesArray) {\n if (!filterKeys.includes(key as FilterKey)) {\n continue;\n }\n if (!value || value === 'false') {\n newValue.delete(key);\n } else if (Array.isArray(value)) {\n if (value.length === 0) {\n newValue.delete(key);\n } else {\n newValue.set(key, value.join(','));\n }\n } else if (typeof value === 'number') {\n newValue.set(key, String(value));\n } else if (value.length > 0) {\n newValue.set(key, value);\n } else {\n newValue.delete(key);\n }\n }\n return newValue;\n });\n };\n\n useEffect(() => {\n let filtersApplied = false;\n searchParams.forEach((value, key) => {\n try {\n if (key === 'page') {\n const pv = Number.parseInt(value, 10);\n if (pv > 0) {\n setPage(pv);\n } else {\n setPage(1);\n setCollections([]);\n }\n } else if (filterKeys.includes(key as FilterKey)) {\n filtersApplied = true;\n if (key === 'tags') {\n filters.tags = filterTags(value.split(',')) ?? [];\n } else if (key === 'entities') {\n filters.entities = value.split(',');\n } else {\n (filters as any)[key] = value;\n }\n }\n } catch (_e) {\n // NOOP\n }\n });\n setFilters(filters);\n if (filtersApplied) {\n setShowFilterPanel(true);\n }\n }, [searchParams, filters]);\n\n return (\n <Box>\n <QetaGridHeader\n title={t('common.collections', { count: response?.total ?? 0 })}\n searchBarLabel={t('collectionsPage.search.label')}\n loading={loading}\n onSearch={setSearchQuery}\n buttons={\n response &&\n (showFilters ?? true) && (\n <Button\n onClick={() => {\n setShowFilterPanel(!showFilterPanel);\n }}\n className=\"qetaCollectionsContainerFilterPanelBtn\"\n startIcon={<FilterList />}\n >\n {t('filterPanel.filterButton')}\n </Button>\n )\n }\n />\n {(showFilters ?? true) && (\n <Collapse in={showFilterPanel}>\n <FilterPanel<CollectionFilters>\n onChange={onFilterChange}\n filters={filters}\n mode=\"collections\"\n {...props.filterPanelProps}\n />\n </Collapse>\n )}\n <CollectionsGridContent\n loading={loading}\n error={error}\n response={combinedResponse}\n hasMore={hasMore}\n loadNextPage={() => setPage(prev => prev + 1)}\n />\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,55 +0,0 @@
1
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import { WarningPanel } from '@backstage/core-components';
3
- import { Grid } from '@material-ui/core';
4
- import { useInfiniteScroll } from 'infinite-scroll-hook';
5
- import { CollectionsGridItem } from './CollectionsGridItem.esm.js';
6
- import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
7
- import { qetaTranslationRef } from '../../translation.esm.js';
8
- import { LoadingGrid } from '../LoadingGrid/LoadingGrid.esm.js';
9
- import { NoCollectionsCard } from './NoCollectionsCard.esm.js';
10
-
11
- const CollectionsGridContent = (props) => {
12
- const { loading, error, response, hasMore, loadNextPage } = props;
13
- const { t } = useTranslationRef(qetaTranslationRef);
14
- const { containerRef: sentryRef } = useInfiniteScroll({
15
- shouldStop: !hasMore || !!error || loading,
16
- onLoadMore: async () => {
17
- if (loadNextPage) {
18
- await loadNextPage();
19
- }
20
- },
21
- offset: "800px"
22
- });
23
- if (loading && (!response || response.collections.length === 0)) {
24
- return /* @__PURE__ */ jsx(LoadingGrid, {});
25
- }
26
- if (error || response === void 0) {
27
- return /* @__PURE__ */ jsx(
28
- WarningPanel,
29
- {
30
- severity: "error",
31
- title: t("postsList.errorLoading", { itemType: "collections" }),
32
- children: error?.message
33
- }
34
- );
35
- }
36
- if (!response.collections || response.collections.length === 0) {
37
- return /* @__PURE__ */ jsx(NoCollectionsCard, {});
38
- }
39
- return /* @__PURE__ */ jsxs(Fragment, { children: [
40
- /* @__PURE__ */ jsx(Grid, { container: true, spacing: 3, direction: "row", alignItems: "stretch", children: response.collections.map((p) => {
41
- return /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, md: 12, lg: 6, children: /* @__PURE__ */ jsx(CollectionsGridItem, { collection: p }) }, p.id);
42
- }) }),
43
- /* @__PURE__ */ jsx(
44
- "div",
45
- {
46
- ref: sentryRef,
47
- style: { width: "100%", marginTop: "10px", textAlign: "center" },
48
- children: loading && /* @__PURE__ */ jsx(LoadingGrid, {})
49
- }
50
- )
51
- ] });
52
- };
53
-
54
- export { CollectionsGridContent };
55
- //# sourceMappingURL=CollectionsGridContent.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CollectionsGridContent.esm.js","sources":["../../../src/components/CollectionsGrid/CollectionsGridContent.tsx"],"sourcesContent":["import { CollectionsResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { WarningPanel } from '@backstage/core-components';\nimport { Grid } from '@material-ui/core';\nimport { useInfiniteScroll } from 'infinite-scroll-hook';\nimport { CollectionsGridItem } from './CollectionsGridItem';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { LoadingGrid } from '../LoadingGrid/LoadingGrid';\nimport { NoCollectionsCard } from './NoCollectionsCard';\n\nexport const CollectionsGridContent = (props: {\n loading: boolean;\n error: any;\n response?: CollectionsResponse;\n hasMore?: boolean;\n loadNextPage?: () => void;\n}) => {\n const { loading, error, response, hasMore, loadNextPage } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const { containerRef: sentryRef } = useInfiniteScroll({\n shouldStop: !hasMore || !!error || loading,\n onLoadMore: async () => {\n if (loadNextPage) {\n await loadNextPage();\n }\n },\n offset: '800px',\n }) as any;\n\n if (loading && (!response || response.collections.length === 0)) {\n return <LoadingGrid />;\n }\n\n if (error || response === undefined) {\n return (\n <WarningPanel\n severity=\"error\"\n title={t('postsList.errorLoading', { itemType: 'collections' })}\n >\n {error?.message}\n </WarningPanel>\n );\n }\n\n if (!response.collections || response.collections.length === 0) {\n return <NoCollectionsCard />;\n }\n\n return (\n <>\n <Grid container spacing={3} direction=\"row\" alignItems=\"stretch\">\n {response.collections.map(p => {\n return (\n <Grid item xs={12} md={12} lg={6} key={p.id}>\n <CollectionsGridItem collection={p} />\n </Grid>\n );\n })}\n </Grid>\n <div\n ref={sentryRef}\n style={{ width: '100%', marginTop: '10px', textAlign: 'center' }}\n >\n {loading && <LoadingGrid />}\n </div>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAUa,MAAA,sBAAA,GAAyB,CAAC,KAMjC,KAAA;AACJ,EAAA,MAAM,EAAE,OAAS,EAAA,KAAA,EAAO,QAAU,EAAA,OAAA,EAAS,cAAiB,GAAA,KAAA;AAC5D,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAA,MAAM,EAAE,YAAA,EAAc,SAAU,EAAA,GAAI,iBAAkB,CAAA;AAAA,IACpD,UAAY,EAAA,CAAC,OAAW,IAAA,CAAC,CAAC,KAAS,IAAA,OAAA;AAAA,IACnC,YAAY,YAAY;AACtB,MAAA,IAAI,YAAc,EAAA;AAChB,QAAA,MAAM,YAAa,EAAA;AAAA;AACrB,KACF;AAAA,IACA,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,IAAI,YAAY,CAAC,QAAA,IAAY,QAAS,CAAA,WAAA,CAAY,WAAW,CAAI,CAAA,EAAA;AAC/D,IAAA,2BAAQ,WAAY,EAAA,EAAA,CAAA;AAAA;AAGtB,EAAI,IAAA,KAAA,IAAS,aAAa,KAAW,CAAA,EAAA;AACnC,IACE,uBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,QAAS,EAAA,OAAA;AAAA,QACT,OAAO,CAAE,CAAA,wBAAA,EAA0B,EAAE,QAAA,EAAU,eAAe,CAAA;AAAA,QAE7D,QAAO,EAAA,KAAA,EAAA;AAAA;AAAA,KACV;AAAA;AAIJ,EAAA,IAAI,CAAC,QAAS,CAAA,WAAA,IAAe,QAAS,CAAA,WAAA,CAAY,WAAW,CAAG,EAAA;AAC9D,IAAA,2BAAQ,iBAAkB,EAAA,EAAA,CAAA;AAAA;AAG5B,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAS,IAAC,EAAA,OAAA,EAAS,CAAG,EAAA,SAAA,EAAU,KAAM,EAAA,UAAA,EAAW,SACpD,EAAA,QAAA,EAAA,QAAA,CAAS,WAAY,CAAA,GAAA,CAAI,CAAK,CAAA,KAAA;AAC7B,MAAA,2BACG,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,IAAI,EAAI,EAAA,EAAA,EAAI,EAAI,EAAA,CAAA,EAC7B,8BAAC,mBAAoB,EAAA,EAAA,UAAA,EAAY,CAAG,EAAA,CAAA,EAAA,EADC,EAAE,EAEzC,CAAA;AAAA,KAEH,CACH,EAAA,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAK,EAAA,SAAA;AAAA,QACL,OAAO,EAAE,KAAA,EAAO,QAAQ,SAAW,EAAA,MAAA,EAAQ,WAAW,QAAS,EAAA;AAAA,QAE9D,QAAA,EAAA,OAAA,wBAAY,WAAY,EAAA,EAAA;AAAA;AAAA;AAC3B,GACF,EAAA,CAAA;AAEJ;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CollectionsGridItem.esm.js","sources":["../../../src/components/CollectionsGrid/CollectionsGridItem.tsx"],"sourcesContent":["import {\n Collection,\n removeMarkdownFormatting,\n truncate,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { collectionRouteRef } from '../../routes';\nimport {\n Box,\n Card,\n CardContent,\n CardMedia,\n Grid,\n makeStyles,\n Typography,\n} from '@material-ui/core';\nimport DOMPurify from 'dompurify';\nimport { TagsAndEntities } from '../TagsAndEntities/TagsAndEntities';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { CollectionFollowButton } from '../Buttons/CollectionFollowButton';\nimport { ClickableLink } from '../Utility/ClickableLink';\nimport PlaylistPlayIcon from '@material-ui/icons/PlaylistPlay';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport PeopleIcon from '@material-ui/icons/People';\nimport LinkIcon from '@material-ui/icons/Link';\nimport DescriptionIcon from '@material-ui/icons/Description';\n\nexport interface PostsGridItemProps {\n collection: Collection;\n}\n\nconst useStyles = makeStyles(theme => ({\n placeholderImage: {\n height: 140,\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background:\n theme.palette.type === 'dark'\n ? `linear-gradient(135deg, ${theme.palette.grey[800]} 0%, ${theme.palette.grey[900]} 100%)`\n : `linear-gradient(135deg, ${theme.palette.grey[200]} 0%, ${theme.palette.grey[300]} 100%)`,\n color: theme.palette.text.secondary,\n opacity: 0.8,\n },\n card: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n cursor: 'pointer',\n position: 'relative',\n '&:hover::after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'currentColor',\n opacity: theme.palette.action.hoverOpacity || 0.04,\n borderRadius: theme.shape.borderRadius,\n pointerEvents: 'none',\n },\n },\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}));\n\nexport const CollectionsGridItem = (props: PostsGridItemProps) => {\n const { collection } = props;\n const classes = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const collectionRoute = useRouteRef(collectionRouteRef);\n const href = collectionRoute({ id: collection.id.toString(10) });\n\n return (\n <Card className={classes.card}>\n <ClickableLink href={href} ariaLabel={collection.title}>\n {collection.headerImage ? (\n <CardMedia\n component=\"img\"\n height=\"140\"\n onError={e => (e.currentTarget.style.display = 'none')}\n image={collection.headerImage}\n alt={collection.title}\n style={{ objectFit: 'cover' }}\n />\n ) : (\n <Box className={classes.placeholderImage}>\n <PlaylistPlayIcon style={{ fontSize: 60 }} />\n </Box>\n )}\n <CardContent\n style={{\n paddingBottom: '0.5rem',\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n <Box\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"flex-start\"\n >\n <Typography gutterBottom variant=\"h6\" component=\"div\">\n {collection.title}\n </Typography>\n <Box\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <CollectionFollowButton collection={collection} />\n </Box>\n </Box>\n {collection.description && (\n <Typography variant=\"body2\" color=\"textSecondary\" gutterBottom>\n {DOMPurify.sanitize(\n truncate(removeMarkdownFormatting(collection.description), 200),\n )}\n </Typography>\n )}\n <Box mt={2}>\n <TagsAndEntities entity={collection} />\n </Box>\n <Grid container spacing={1} className={classes.statsGrid}>\n <Grid item xs={3}>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n className={classes.statItem}\n >\n <QuestionAnswerIcon fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {collection.questionsCount}\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={classes.statItem}\n >\n <DescriptionIcon fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {collection.articlesCount}\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={classes.statItem}\n >\n <LinkIcon fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {collection.linksCount}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('common.links')}\n </Typography>\n </Box>\n </Grid>\n <Grid item xs={3}>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n className={classes.statItem}\n >\n <PeopleIcon fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {collection.followers}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('common.followersPlain')}\n </Typography>\n </Box>\n </Grid>\n </Grid>\n </CardContent>\n </ClickableLink>\n </Card>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
3
- import { qetaTranslationRef } from '../../translation.esm.js';
4
- import { Card, CardContent, Grid, Typography } from '@material-ui/core';
5
-
6
- const NoCollectionsCard = () => {
7
- const { t } = useTranslationRef(qetaTranslationRef);
8
- return /* @__PURE__ */ jsx(Card, { style: { marginTop: "2em" }, children: /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(
9
- Grid,
10
- {
11
- container: true,
12
- justifyContent: "center",
13
- alignItems: "center",
14
- direction: "column",
15
- children: /* @__PURE__ */ jsx(Grid, { item: true, children: /* @__PURE__ */ jsx(Typography, { variant: "h6", children: t(`common.collections`, { count: 0 }) }) })
16
- }
17
- ) }) });
18
- };
19
-
20
- export { NoCollectionsCard };
21
- //# sourceMappingURL=NoCollectionsCard.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NoCollectionsCard.esm.js","sources":["../../../src/components/CollectionsGrid/NoCollectionsCard.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { Card, CardContent, Grid, Typography } from '@material-ui/core';\n\nexport const NoCollectionsCard = () => {\n const { t } = useTranslationRef(qetaTranslationRef);\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(`common.collections`, { count: 0 })}\n </Typography>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n );\n};\n"],"names":[],"mappings":";;;;;AAIO,MAAM,oBAAoB,MAAM;AACrC,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,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,sBAAsB,EAAE,KAAA,EAAO,CAAE,EAAC,GACvC,CACF,EAAA;AAAA;AAAA,KAEJ,CACF,EAAA,CAAA;AAEJ;;;;"}
@@ -1,136 +0,0 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { Box, Button, Collapse } from '@material-ui/core';
3
- import { useState, useEffect } from 'react';
4
- import { useQetaApi } from '../../hooks/useQetaApi.esm.js';
5
- import '@backstage/core-plugin-api';
6
- import '../../api.esm.js';
7
- import '@backstage/catalog-model';
8
- import 'dataloader';
9
- import '@backstage/plugin-catalog-react';
10
- import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
11
- import { qetaTranslationRef } from '../../translation.esm.js';
12
- import 'react-use/lib/useAsync';
13
- import '@backstage/plugin-permission-react';
14
- import '@drodil/backstage-plugin-qeta-common';
15
- import '@backstage/plugin-permission-common';
16
- import { useGridPageSize } from '../../hooks/useGridPageSize.esm.js';
17
- import useDebounce from 'react-use/lib/useDebounce';
18
- import { EntitiesGridContent } from './EntitiesGridContent.esm.js';
19
- import { QetaGridHeader } from '../Utility/QetaGridHeader.esm.js';
20
- import { FilterPanel } from '../FilterPanel/FilterPanel.esm.js';
21
- import FilterList from '@material-ui/icons/FilterList';
22
-
23
- const EXPANDED_LOCAL_STORAGE_KEY = "qeta-entities-filters-expanded";
24
- const EntitiesGrid = () => {
25
- const [page, setPage] = useState(1);
26
- const entitiesPerPage = useGridPageSize("entities", 24);
27
- const [searchQuery, setSearchQuery] = useState("");
28
- const [showFilterPanel, setShowFilterPanel] = useState(
29
- localStorage.getItem(EXPANDED_LOCAL_STORAGE_KEY) === "true"
30
- );
31
- const [filters, setFilters] = useState({
32
- order: "desc",
33
- orderBy: "postsCount",
34
- searchQuery: ""
35
- });
36
- const [entities, setEntities] = useState([]);
37
- const [hasMore, setHasMore] = useState(true);
38
- const [total, setTotal] = useState(0);
39
- useEffect(() => {
40
- localStorage.setItem(
41
- EXPANDED_LOCAL_STORAGE_KEY,
42
- showFilterPanel ? "true" : "false"
43
- );
44
- }, [showFilterPanel]);
45
- const onFilterChange = (changes) => {
46
- const changesArray = Array.isArray(changes) ? changes : [changes];
47
- setPage(1);
48
- setEntities([]);
49
- setFilters((prev) => {
50
- const newValue = { ...prev };
51
- for (const { key, value } of changesArray) {
52
- newValue[key] = value;
53
- }
54
- return newValue;
55
- });
56
- };
57
- const { t } = useTranslationRef(qetaTranslationRef);
58
- const {
59
- value: response,
60
- loading,
61
- error
62
- } = useQetaApi(
63
- (api) => api.getEntities({
64
- limit: entitiesPerPage,
65
- offset: (page - 1) * entitiesPerPage,
66
- ...filters
67
- }),
68
- [entitiesPerPage, page, filters]
69
- );
70
- const onSearchQueryChange = (val) => {
71
- setPage(1);
72
- setEntities([]);
73
- setSearchQuery(val);
74
- };
75
- useDebounce(
76
- () => {
77
- if (filters.searchQuery !== searchQuery) {
78
- setFilters({ ...filters, searchQuery });
79
- }
80
- },
81
- 300,
82
- [searchQuery]
83
- );
84
- useEffect(() => {
85
- if (response) {
86
- if (page === 1) {
87
- setEntities(response.entities);
88
- } else {
89
- setEntities((prev) => [...prev, ...response.entities]);
90
- }
91
- setHasMore(response.entities.length >= entitiesPerPage);
92
- setTotal(response.total);
93
- }
94
- }, [response, entitiesPerPage, page]);
95
- const combinedResponse = response ? { ...response, entities, total } : void 0;
96
- return /* @__PURE__ */ jsxs(Box, { children: [
97
- /* @__PURE__ */ jsx(
98
- QetaGridHeader,
99
- {
100
- title: response ? t("common.entities", { count: response?.total ?? 0 }) : "",
101
- searchBarLabel: t("entitiesPage.search.label"),
102
- loading,
103
- onSearch: onSearchQueryChange,
104
- buttons: /* @__PURE__ */ jsx(
105
- Button,
106
- {
107
- onClick: () => setShowFilterPanel(!showFilterPanel),
108
- startIcon: /* @__PURE__ */ jsx(FilterList, {}),
109
- children: t("filterPanel.filterButton")
110
- }
111
- )
112
- }
113
- ),
114
- /* @__PURE__ */ jsx(Collapse, { in: showFilterPanel, children: /* @__PURE__ */ jsx(
115
- FilterPanel,
116
- {
117
- onChange: onFilterChange,
118
- filters,
119
- mode: "entities"
120
- }
121
- ) }),
122
- /* @__PURE__ */ jsx(
123
- EntitiesGridContent,
124
- {
125
- response: combinedResponse,
126
- loading,
127
- error,
128
- hasMore,
129
- loadNextPage: () => setPage((prev) => prev + 1)
130
- }
131
- )
132
- ] });
133
- };
134
-
135
- export { EntitiesGrid };
136
- //# sourceMappingURL=EntitiesGrid.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EntitiesGrid.esm.js","sources":["../../../src/components/EntitiesGrid/EntitiesGrid.tsx"],"sourcesContent":["import { Box } from '@material-ui/core';\nimport { useEffect, useState } from 'react';\nimport { useGridPageSize, useQetaApi } from '../../hooks';\nimport useDebounce from 'react-use/lib/useDebounce';\n\nimport { EntitiesGridContent } from './EntitiesGridContent';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { QetaGridHeader } from '../Utility/QetaGridHeader';\n\nimport { Change, EntityFilters, FilterPanel } from '../FilterPanel/FilterPanel';\nimport { Collapse, Button } from '@material-ui/core';\nimport FilterList from '@material-ui/icons/FilterList';\n\nconst EXPANDED_LOCAL_STORAGE_KEY = 'qeta-entities-filters-expanded';\n\nexport const EntitiesGrid = () => {\n const [page, setPage] = useState(1);\n const entitiesPerPage = useGridPageSize('entities', 24);\n const [searchQuery, setSearchQuery] = useState('');\n const [showFilterPanel, setShowFilterPanel] = useState(\n localStorage.getItem(EXPANDED_LOCAL_STORAGE_KEY) === 'true',\n );\n const [filters, setFilters] = useState<EntityFilters>({\n order: 'desc',\n orderBy: 'postsCount',\n searchQuery: '',\n });\n const [entities, setEntities] = useState<any[]>([]);\n const [hasMore, setHasMore] = useState(true);\n const [total, setTotal] = useState(0);\n\n useEffect(() => {\n localStorage.setItem(\n EXPANDED_LOCAL_STORAGE_KEY,\n showFilterPanel ? 'true' : 'false',\n );\n }, [showFilterPanel]);\n\n const onFilterChange = (\n changes: Change<EntityFilters> | Change<EntityFilters>[],\n ) => {\n const changesArray = Array.isArray(changes) ? changes : [changes];\n setPage(1);\n setEntities([]);\n setFilters(prev => {\n const newValue = { ...prev };\n for (const { key, value } of changesArray) {\n (newValue as any)[key] = value;\n }\n return newValue;\n });\n };\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const {\n value: response,\n loading,\n error,\n } = useQetaApi(\n api =>\n api.getEntities({\n limit: entitiesPerPage,\n offset: (page - 1) * entitiesPerPage,\n ...filters,\n }),\n [entitiesPerPage, page, filters],\n );\n\n const onSearchQueryChange = (val: string) => {\n setPage(1);\n setEntities([]);\n setSearchQuery(val);\n };\n\n useDebounce(\n () => {\n if (filters.searchQuery !== searchQuery) {\n setFilters({ ...filters, searchQuery: searchQuery });\n }\n },\n 300,\n [searchQuery],\n );\n\n useEffect(() => {\n if (response) {\n if (page === 1) {\n setEntities(response.entities);\n } else {\n setEntities(prev => [...prev, ...response.entities]);\n }\n setHasMore(response.entities.length >= entitiesPerPage);\n setTotal(response.total);\n }\n }, [response, entitiesPerPage, page]);\n\n const combinedResponse = response\n ? { ...response, entities, total }\n : undefined;\n\n return (\n <Box>\n <QetaGridHeader\n title={\n response ? t('common.entities', { count: response?.total ?? 0 }) : ''\n }\n searchBarLabel={t('entitiesPage.search.label')}\n loading={loading}\n onSearch={onSearchQueryChange}\n buttons={\n <Button\n onClick={() => setShowFilterPanel(!showFilterPanel)}\n startIcon={<FilterList />}\n >\n {t('filterPanel.filterButton')}\n </Button>\n }\n />\n <Collapse in={showFilterPanel}>\n <FilterPanel<EntityFilters>\n onChange={onFilterChange}\n filters={filters}\n mode=\"entities\"\n />\n </Collapse>\n <EntitiesGridContent\n response={combinedResponse}\n loading={loading}\n error={error}\n hasMore={hasMore}\n loadNextPage={() => setPage(prev => prev + 1)}\n />\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { WarningPanel } from '@backstage/core-components';
3
- import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
4
- import { qetaTranslationRef } from '../../translation.esm.js';
5
- import { EntitiesGridItem } from './EntitiesGridItem.esm.js';
6
- import { NoEntitiesCard } from './NoEntitiesCard.esm.js';
7
- import { LoadingGrid } from '../LoadingGrid/LoadingGrid.esm.js';
8
- import { Grid } from '@material-ui/core';
9
- import { useInfiniteScroll } from 'infinite-scroll-hook';
10
-
11
- const EntitiesGridContent = (props) => {
12
- const { response, loading, error, hasMore, loadNextPage } = props;
13
- const { t } = useTranslationRef(qetaTranslationRef);
14
- const { containerRef: sentryRef } = useInfiniteScroll({
15
- shouldStop: !hasMore || !!error || loading,
16
- onLoadMore: async () => {
17
- if (loadNextPage) {
18
- await loadNextPage();
19
- }
20
- },
21
- offset: "800px"
22
- });
23
- if (loading && (!response || response.entities.length === 0)) {
24
- return /* @__PURE__ */ jsx(LoadingGrid, {});
25
- }
26
- if (error || response === void 0) {
27
- return /* @__PURE__ */ jsx(WarningPanel, { severity: "error", title: t("entitiesPage.errorLoading"), children: error?.message });
28
- }
29
- if (!response?.entities || response.entities.length === 0) {
30
- return /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(NoEntitiesCard, {}) });
31
- }
32
- return /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 3, alignItems: "stretch", children: [
33
- response?.entities.map((entity) => /* @__PURE__ */ jsx(EntitiesGridItem, { entity }, entity.entityRef)),
34
- /* @__PURE__ */ jsx(
35
- "div",
36
- {
37
- ref: sentryRef,
38
- style: { width: "100%", marginTop: "10px", textAlign: "center" },
39
- children: loading && /* @__PURE__ */ jsx(LoadingGrid, {})
40
- }
41
- )
42
- ] });
43
- };
44
-
45
- export { EntitiesGridContent };
46
- //# sourceMappingURL=EntitiesGridContent.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EntitiesGridContent.esm.js","sources":["../../../src/components/EntitiesGrid/EntitiesGridContent.tsx"],"sourcesContent":["import { EntitiesResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { WarningPanel } from '@backstage/core-components';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { EntitiesGridItem } from './EntitiesGridItem';\nimport { NoEntitiesCard } from './NoEntitiesCard';\nimport { LoadingGrid } from '../LoadingGrid/LoadingGrid';\nimport { Grid } from '@material-ui/core';\nimport { useInfiniteScroll } from 'infinite-scroll-hook';\n\nexport const EntitiesGridContent = (props: {\n loading: boolean;\n error: any;\n response?: EntitiesResponse;\n hasMore?: boolean;\n loadNextPage?: () => void;\n}) => {\n const { response, loading, error, hasMore, loadNextPage } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const { containerRef: sentryRef } = useInfiniteScroll({\n shouldStop: !hasMore || !!error || loading,\n onLoadMore: async () => {\n if (loadNextPage) {\n await loadNextPage();\n }\n },\n offset: '800px',\n }) as any;\n\n if (loading && (!response || response.entities.length === 0)) {\n return <LoadingGrid />;\n }\n\n if (error || response === undefined) {\n return (\n <WarningPanel severity=\"error\" title={t('entitiesPage.errorLoading')}>\n {error?.message}\n </WarningPanel>\n );\n }\n\n if (!response?.entities || response.entities.length === 0) {\n return (\n <Grid item xs={12}>\n <NoEntitiesCard />\n </Grid>\n );\n }\n\n return (\n <Grid container spacing={3} alignItems=\"stretch\">\n {response?.entities.map(entity => (\n <EntitiesGridItem entity={entity} key={entity.entityRef} />\n ))}\n <div\n ref={sentryRef}\n style={{ width: '100%', marginTop: '10px', textAlign: 'center' }}\n >\n {loading && <LoadingGrid />}\n </div>\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAUa,MAAA,mBAAA,GAAsB,CAAC,KAM9B,KAAA;AACJ,EAAA,MAAM,EAAE,QAAU,EAAA,OAAA,EAAS,KAAO,EAAA,OAAA,EAAS,cAAiB,GAAA,KAAA;AAC5D,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAA,MAAM,EAAE,YAAA,EAAc,SAAU,EAAA,GAAI,iBAAkB,CAAA;AAAA,IACpD,UAAY,EAAA,CAAC,OAAW,IAAA,CAAC,CAAC,KAAS,IAAA,OAAA;AAAA,IACnC,YAAY,YAAY;AACtB,MAAA,IAAI,YAAc,EAAA;AAChB,QAAA,MAAM,YAAa,EAAA;AAAA;AACrB,KACF;AAAA,IACA,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,IAAI,YAAY,CAAC,QAAA,IAAY,QAAS,CAAA,QAAA,CAAS,WAAW,CAAI,CAAA,EAAA;AAC5D,IAAA,2BAAQ,WAAY,EAAA,EAAA,CAAA;AAAA;AAGtB,EAAI,IAAA,KAAA,IAAS,aAAa,KAAW,CAAA,EAAA;AACnC,IACE,uBAAA,GAAA,CAAC,gBAAa,QAAS,EAAA,OAAA,EAAQ,OAAO,CAAE,CAAA,2BAA2B,CAChE,EAAA,QAAA,EAAA,KAAA,EAAO,OACV,EAAA,CAAA;AAAA;AAIJ,EAAA,IAAI,CAAC,QAAU,EAAA,QAAA,IAAY,QAAS,CAAA,QAAA,CAAS,WAAW,CAAG,EAAA;AACzD,IACE,uBAAA,GAAA,CAAC,QAAK,IAAI,EAAA,IAAA,EAAC,IAAI,EACb,EAAA,QAAA,kBAAA,GAAA,CAAC,kBAAe,CAClB,EAAA,CAAA;AAAA;AAIJ,EAAA,4BACG,IAAK,EAAA,EAAA,SAAA,EAAS,MAAC,OAAS,EAAA,CAAA,EAAG,YAAW,SACpC,EAAA,QAAA,EAAA;AAAA,IAAU,QAAA,EAAA,QAAA,CAAS,IAAI,CACtB,MAAA,qBAAA,GAAA,CAAC,oBAAiB,MAAqB,EAAA,EAAA,MAAA,CAAO,SAAW,CAC1D,CAAA;AAAA,oBACD,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAK,EAAA,SAAA;AAAA,QACL,OAAO,EAAE,KAAA,EAAO,QAAQ,SAAW,EAAA,MAAA,EAAQ,WAAW,QAAS,EAAA;AAAA,QAE9D,QAAA,EAAA,OAAA,wBAAY,WAAY,EAAA,EAAA;AAAA;AAAA;AAC3B,GACF,EAAA,CAAA;AAEJ;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"EntitiesGridItem.esm.js","sources":["../../../src/components/EntitiesGrid/EntitiesGridItem.tsx"],"sourcesContent":["import { EntityResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { EntityFollowButton } from '../Buttons/EntityFollowButton';\nimport {\n Avatar,\n Box,\n Card,\n CardContent,\n Grid,\n makeStyles,\n Tooltip,\n Typography,\n} from '@material-ui/core';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { entityRouteRef } from '../../routes';\nimport { parseEntityRef } from '@backstage/catalog-model';\n\nimport LinkIcon from '@material-ui/icons/Link';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport PeopleIcon from '@material-ui/icons/People';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport useGridItemStyles from '../GridItemStyles/useGridItemStyles';\nimport { ClickableLink } from '../Utility/ClickableLink';\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 EntitiesGridItem = (props: { entity: EntityResponse }) => {\n const { entity } = props;\n const classes = useGridItemStyles();\n const localClasses = useStyles();\n const entityRoute = useRouteRef(entityRouteRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n const compound = parseEntityRef(entity.entityRef);\n const { primaryTitle, Icon, secondaryTitle } =\n useEntityPresentation(compound);\n\n const href = entityRoute({ entityRef: entity.entityRef });\n\n return (\n <Grid item xs={12} sm={6} md={6} xl={4}>\n <Card className={classes.card}>\n <ClickableLink href={href} ariaLabel={primaryTitle}>\n <Box\n className={classes.cardHeader}\n display=\"flex\"\n alignItems=\"center\"\n >\n {Icon && (\n <Avatar style={{ marginRight: 16 }}>\n <Icon />\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 <Box\n flexShrink={0}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <EntityFollowButton entityRef={entity.entityRef} />\n </Box>\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 <QuestionAnswerIcon fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {entity.questionsCount}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('stats.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 {entity.articlesCount}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('stats.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 {entity.linksCount}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('stats.links', {})}\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 <PeopleIcon fontSize=\"small\" color=\"disabled\" />\n <Typography variant=\"body2\" style={{ fontWeight: 600 }}>\n {entity.followerCount}\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {t('stats.followers', {})}\n </Typography>\n </Box>\n </Grid>\n </Grid>\n </CardContent>\n </ClickableLink>\n </Card>\n </Grid>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
3
- import { qetaTranslationRef } from '../../translation.esm.js';
4
- import { Card, CardContent, Grid, Typography } from '@material-ui/core';
5
-
6
- const NoEntitiesCard = () => {
7
- const { t } = useTranslationRef(qetaTranslationRef);
8
- return /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(
9
- Grid,
10
- {
11
- container: true,
12
- justifyContent: "center",
13
- alignItems: "center",
14
- direction: "column",
15
- children: /* @__PURE__ */ jsx(Grid, { item: true, children: /* @__PURE__ */ jsx(Typography, { variant: "h6", children: t(`entitiesPage.entities`, { count: 0 }) }) })
16
- }
17
- ) }) });
18
- };
19
-
20
- export { NoEntitiesCard };
21
- //# sourceMappingURL=NoEntitiesCard.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NoEntitiesCard.esm.js","sources":["../../../src/components/EntitiesGrid/NoEntitiesCard.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { Card, CardContent, Grid, Typography } from '@material-ui/core';\n\nexport const NoEntitiesCard = () => {\n const { t } = useTranslationRef(qetaTranslationRef);\n\n return (\n <Card>\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(`entitiesPage.entities`, { count: 0 })}\n </Typography>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n );\n};\n"],"names":[],"mappings":";;;;;AAIO,MAAM,iBAAiB,MAAM;AAClC,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EACE,uBAAA,GAAA,CAAC,IACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,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,yBAAyB,EAAE,KAAA,EAAO,CAAE,EAAC,GAC1C,CACF,EAAA;AAAA;AAAA,KAEJ,CACF,EAAA,CAAA;AAEJ;;;;"}