@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.
- package/dist/components/AIAnswerCard/AIAnswerCard.esm.js +54 -41
- package/dist/components/AIAnswerCard/AIAnswerCard.esm.js.map +1 -1
- package/dist/components/AnswerCard/AnswerCard.esm.js +96 -73
- package/dist/components/AnswerCard/AnswerCard.esm.js.map +1 -1
- package/dist/components/AnswerForm/AnswerForm.esm.js +54 -51
- package/dist/components/AnswerForm/AnswerForm.esm.js.map +1 -1
- package/dist/components/AnswersContainer/AnswerList.esm.js +31 -21
- package/dist/components/AnswersContainer/AnswerList.esm.js.map +1 -1
- package/dist/components/AnswersContainer/AnswerListItem.esm.js +74 -57
- package/dist/components/AnswersContainer/AnswerListItem.esm.js.map +1 -1
- package/dist/components/AnswersContainer/AnswersContainer.esm.js +70 -56
- package/dist/components/AnswersContainer/AnswersContainer.esm.js.map +1 -1
- package/dist/components/ArticleContent/ArticleButtons.esm.js +73 -52
- package/dist/components/ArticleContent/ArticleButtons.esm.js.map +1 -1
- package/dist/components/ArticleContent/ArticleContent.esm.js +60 -34
- package/dist/components/ArticleContent/ArticleContent.esm.js.map +1 -1
- package/dist/components/AuthorBox/AuthorBox.esm.js +49 -31
- package/dist/components/AuthorBox/AuthorBox.esm.js.map +1 -1
- package/dist/components/Buttons/AddToCollectionButton.esm.js +35 -24
- package/dist/components/Buttons/AddToCollectionButton.esm.js.map +1 -1
- package/dist/components/Buttons/AskQuestionButton.esm.js +18 -15
- package/dist/components/Buttons/AskQuestionButton.esm.js.map +1 -1
- package/dist/components/Buttons/ButtonContainer.esm.js +2 -2
- package/dist/components/Buttons/ButtonContainer.esm.js.map +1 -1
- package/dist/components/Buttons/CollectionFollowButton.esm.js +10 -6
- package/dist/components/Buttons/CollectionFollowButton.esm.js.map +1 -1
- package/dist/components/Buttons/CreateCollectionButton.esm.js +18 -15
- package/dist/components/Buttons/CreateCollectionButton.esm.js.map +1 -1
- package/dist/components/Buttons/EntityFollowButton.esm.js +10 -6
- package/dist/components/Buttons/EntityFollowButton.esm.js.map +1 -1
- package/dist/components/Buttons/FavoriteButton.esm.js +15 -11
- package/dist/components/Buttons/FavoriteButton.esm.js.map +1 -1
- package/dist/components/Buttons/LinkButton.esm.js +10 -6
- package/dist/components/Buttons/LinkButton.esm.js.map +1 -1
- package/dist/components/Buttons/TagFollowButton.esm.js +10 -6
- package/dist/components/Buttons/TagFollowButton.esm.js.map +1 -1
- package/dist/components/Buttons/UserFollowButton.esm.js +10 -6
- package/dist/components/Buttons/UserFollowButton.esm.js.map +1 -1
- package/dist/components/Buttons/VoteButtons.esm.js +41 -35
- package/dist/components/Buttons/VoteButtons.esm.js.map +1 -1
- package/dist/components/Buttons/WriteArticleButton.esm.js +18 -15
- package/dist/components/Buttons/WriteArticleButton.esm.js.map +1 -1
- package/dist/components/CollectionCard/CollectionCard.esm.js +59 -42
- package/dist/components/CollectionCard/CollectionCard.esm.js.map +1 -1
- package/dist/components/CollectionForm/CollectionForm.esm.js +75 -71
- package/dist/components/CollectionForm/CollectionForm.esm.js.map +1 -1
- package/dist/components/CollectionsGrid/CollectionsGrid.esm.js +61 -49
- package/dist/components/CollectionsGrid/CollectionsGrid.esm.js.map +1 -1
- package/dist/components/CollectionsGrid/CollectionsGridContent.esm.js +18 -14
- package/dist/components/CollectionsGrid/CollectionsGridContent.esm.js.map +1 -1
- package/dist/components/CollectionsGrid/CollectionsGridItem.esm.js +52 -32
- package/dist/components/CollectionsGrid/CollectionsGridItem.esm.js.map +1 -1
- package/dist/components/CollectionsGrid/NoCollectionsCard.esm.js +10 -6
- package/dist/components/CollectionsGrid/NoCollectionsCard.esm.js.map +1 -1
- package/dist/components/CommentSection/CommentForm.esm.js +44 -42
- package/dist/components/CommentSection/CommentForm.esm.js.map +1 -1
- package/dist/components/CommentSection/CommentList.esm.js +15 -12
- package/dist/components/CommentSection/CommentList.esm.js.map +1 -1
- package/dist/components/CommentSection/CommentListItem.esm.js +49 -28
- package/dist/components/CommentSection/CommentListItem.esm.js.map +1 -1
- package/dist/components/CommentSection/CommentSection.esm.js +48 -42
- package/dist/components/CommentSection/CommentSection.esm.js.map +1 -1
- package/dist/components/DeleteModal/DeleteModal.esm.js +32 -23
- package/dist/components/DeleteModal/DeleteModal.esm.js.map +1 -1
- package/dist/components/EntitiesGrid/EntitiesGrid.esm.js +39 -30
- package/dist/components/EntitiesGrid/EntitiesGrid.esm.js.map +1 -1
- package/dist/components/EntitiesGrid/EntitiesGridContent.esm.js +9 -5
- package/dist/components/EntitiesGrid/EntitiesGridContent.esm.js.map +1 -1
- package/dist/components/EntitiesGrid/EntitiesGridItem.esm.js +50 -38
- package/dist/components/EntitiesGrid/EntitiesGridItem.esm.js.map +1 -1
- package/dist/components/EntitiesGrid/NoEntitiesCard.esm.js +10 -6
- package/dist/components/EntitiesGrid/NoEntitiesCard.esm.js.map +1 -1
- package/dist/components/FilterPanel/DateRangeFilter.esm.js +71 -58
- package/dist/components/FilterPanel/DateRangeFilter.esm.js.map +1 -1
- package/dist/components/FilterPanel/FilterPanel.esm.js +262 -217
- package/dist/components/FilterPanel/FilterPanel.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedCollectionsList.esm.js +6 -2
- package/dist/components/FollowedLists/FollowedCollectionsList.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedEntitiesList.esm.js +6 -2
- package/dist/components/FollowedLists/FollowedEntitiesList.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedTagsList.esm.js +6 -2
- package/dist/components/FollowedLists/FollowedTagsList.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedUsersList.esm.js +6 -2
- package/dist/components/FollowedLists/FollowedUsersList.esm.js.map +1 -1
- package/dist/components/HeaderImageInput/HeaderImageInput.esm.js +51 -37
- package/dist/components/HeaderImageInput/HeaderImageInput.esm.js.map +1 -1
- package/dist/components/HomePageCards/ImpactCard.esm.js +15 -4
- package/dist/components/HomePageCards/ImpactCard.esm.js.map +1 -1
- package/dist/components/HomePageCards/PostsCard.esm.js +14 -7
- package/dist/components/HomePageCards/PostsCard.esm.js.map +1 -1
- package/dist/components/LeftMenu/LeftMenu.esm.js +73 -27
- package/dist/components/LeftMenu/LeftMenu.esm.js.map +1 -1
- package/dist/components/LeftMenu/LeftMenuButton.esm.js +52 -45
- package/dist/components/LeftMenu/LeftMenuButton.esm.js.map +1 -1
- package/dist/components/Links/Links.esm.js +12 -8
- package/dist/components/Links/Links.esm.js.map +1 -1
- package/dist/components/LoadingGrid/LoadingGrid.esm.js +5 -5
- package/dist/components/LoadingGrid/LoadingGrid.esm.js.map +1 -1
- package/dist/components/MarkdownEditor/MarkdownEditor.esm.js +5 -6
- package/dist/components/MarkdownEditor/MarkdownEditor.esm.js.map +1 -1
- package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js +42 -33
- package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js.map +1 -1
- package/dist/components/PostAnonymouslyCheckbox/PostAnonymouslyCheckbox.esm.js +10 -6
- package/dist/components/PostAnonymouslyCheckbox/PostAnonymouslyCheckbox.esm.js.map +1 -1
- package/dist/components/PostForm/AutocompleteListComponent.esm.js +23 -18
- package/dist/components/PostForm/AutocompleteListComponent.esm.js.map +1 -1
- package/dist/components/PostForm/EntitiesInput.esm.js +19 -9
- package/dist/components/PostForm/EntitiesInput.esm.js.map +1 -1
- package/dist/components/PostForm/PostForm.esm.js +111 -107
- package/dist/components/PostForm/PostForm.esm.js.map +1 -1
- package/dist/components/PostForm/TagInput.esm.js +13 -12
- package/dist/components/PostForm/TagInput.esm.js.map +1 -1
- package/dist/components/PostHighlightList/PostHighlightList.esm.js +26 -14
- package/dist/components/PostHighlightList/PostHighlightList.esm.js.map +1 -1
- package/dist/components/PostsContainer/NoPostsCard.esm.js +24 -18
- package/dist/components/PostsContainer/NoPostsCard.esm.js.map +1 -1
- package/dist/components/PostsContainer/PostList.esm.js +30 -20
- package/dist/components/PostsContainer/PostList.esm.js.map +1 -1
- package/dist/components/PostsContainer/PostListItem.esm.js +108 -86
- package/dist/components/PostsContainer/PostListItem.esm.js.map +1 -1
- package/dist/components/PostsContainer/PostsContainer.esm.js +100 -84
- package/dist/components/PostsContainer/PostsContainer.esm.js.map +1 -1
- package/dist/components/PostsGrid/PostsGrid.esm.js +100 -84
- package/dist/components/PostsGrid/PostsGrid.esm.js.map +1 -1
- package/dist/components/PostsGrid/PostsGridContent.esm.js +46 -39
- package/dist/components/PostsGrid/PostsGridContent.esm.js.map +1 -1
- package/dist/components/PostsGrid/PostsGridItem.esm.js +59 -34
- package/dist/components/PostsGrid/PostsGridItem.esm.js.map +1 -1
- package/dist/components/PostsTable/PostsTable.esm.js +96 -67
- package/dist/components/PostsTable/PostsTable.esm.js.map +1 -1
- package/dist/components/PostsTable/PostsTableRow.esm.js +21 -15
- package/dist/components/PostsTable/PostsTableRow.esm.js.map +1 -1
- package/dist/components/QetaPagination/QetaPagination.esm.js +39 -31
- package/dist/components/QetaPagination/QetaPagination.esm.js.map +1 -1
- package/dist/components/QuestionCard/QuestionCard.esm.js +90 -64
- package/dist/components/QuestionCard/QuestionCard.esm.js.map +1 -1
- package/dist/components/RelativeTimeWithTooltip/RelativeTimeWithTooltip.esm.js +4 -3
- package/dist/components/RelativeTimeWithTooltip/RelativeTimeWithTooltip.esm.js.map +1 -1
- package/dist/components/SearchBar/SearchBar.esm.js +44 -41
- package/dist/components/SearchBar/SearchBar.esm.js.map +1 -1
- package/dist/components/SelectTemplateList/SelectTemplateList.esm.js +46 -30
- package/dist/components/SelectTemplateList/SelectTemplateList.esm.js.map +1 -1
- package/dist/components/StatsChart/StatsChart.esm.js +149 -135
- package/dist/components/StatsChart/StatsChart.esm.js.map +1 -1
- package/dist/components/SuggestionsCard/SuggestionsCard.esm.js +42 -32
- package/dist/components/SuggestionsCard/SuggestionsCard.esm.js.map +1 -1
- package/dist/components/SummaryStatsGrid/SummaryStatsGrid.esm.js +75 -58
- package/dist/components/SummaryStatsGrid/SummaryStatsGrid.esm.js.map +1 -1
- package/dist/components/TagsAndEntities/CollectionChip.esm.js +50 -37
- package/dist/components/TagsAndEntities/CollectionChip.esm.js.map +1 -1
- package/dist/components/TagsAndEntities/EntityChip.esm.js +58 -40
- package/dist/components/TagsAndEntities/EntityChip.esm.js.map +1 -1
- package/dist/components/TagsAndEntities/TagChip.esm.js +52 -39
- package/dist/components/TagsAndEntities/TagChip.esm.js.map +1 -1
- package/dist/components/TagsAndEntities/TagsAndEntities.esm.js +5 -2
- package/dist/components/TagsAndEntities/TagsAndEntities.esm.js.map +1 -1
- package/dist/components/TagsAndEntities/UserChip.esm.js +55 -44
- package/dist/components/TagsAndEntities/UserChip.esm.js.map +1 -1
- package/dist/components/TagsGrid/CreateTagModal.esm.js +59 -46
- package/dist/components/TagsGrid/CreateTagModal.esm.js.map +1 -1
- package/dist/components/TagsGrid/EditTagModal.esm.js +46 -36
- package/dist/components/TagsGrid/EditTagModal.esm.js.map +1 -1
- package/dist/components/TagsGrid/NoTagsCard.esm.js +10 -6
- package/dist/components/TagsGrid/NoTagsCard.esm.js.map +1 -1
- package/dist/components/TagsGrid/TagGridItem.esm.js +87 -59
- package/dist/components/TagsGrid/TagGridItem.esm.js.map +1 -1
- package/dist/components/TagsGrid/TagsGrid.esm.js +68 -54
- package/dist/components/TagsGrid/TagsGrid.esm.js.map +1 -1
- package/dist/components/TagsGrid/TagsGridContent.esm.js +9 -5
- package/dist/components/TagsGrid/TagsGridContent.esm.js.map +1 -1
- package/dist/components/TemplateList/TemplateForm.esm.js +104 -94
- package/dist/components/TemplateList/TemplateForm.esm.js.map +1 -1
- package/dist/components/TemplateList/TemplateList.esm.js +50 -37
- package/dist/components/TemplateList/TemplateList.esm.js.map +1 -1
- package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js +75 -51
- package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js.map +1 -1
- package/dist/components/TopRankingUsersCard/TrophyIcon.esm.js +17 -14
- package/dist/components/TopRankingUsersCard/TrophyIcon.esm.js.map +1 -1
- package/dist/components/UsersGrid/NoUsersCard.esm.js +10 -6
- package/dist/components/UsersGrid/NoUsersCard.esm.js.map +1 -1
- package/dist/components/UsersGrid/UsersGrid.esm.js +34 -23
- package/dist/components/UsersGrid/UsersGrid.esm.js.map +1 -1
- package/dist/components/UsersGrid/UsersGridContent.esm.js +9 -5
- package/dist/components/UsersGrid/UsersGridContent.esm.js.map +1 -1
- package/dist/components/UsersGrid/UsersGridItem.esm.js +78 -58
- package/dist/components/UsersGrid/UsersGridItem.esm.js.map +1 -1
- package/dist/components/Utility/ModalContent.esm.js +4 -3
- package/dist/components/Utility/ModalContent.esm.js.map +1 -1
- package/dist/components/Utility/OptionalRequirePermission.esm.js +4 -4
- package/dist/components/Utility/OptionalRequirePermission.esm.js.map +1 -1
- package/dist/components/Utility/RightList.esm.js +13 -11
- package/dist/components/Utility/RightList.esm.js.map +1 -1
- package/dist/components/Utility/SmallAvatar.esm.js +2 -2
- package/dist/components/Utility/SmallAvatar.esm.js.map +1 -1
- package/dist/components/Utility/VoteButtonContainer.esm.js +2 -2
- package/dist/components/Utility/VoteButtonContainer.esm.js.map +1 -1
- package/dist/hooks/useAI.esm.js +7 -5
- package/dist/hooks/useAI.esm.js.map +1 -1
- package/dist/hooks/useCollectionsFollow.esm.js +3 -5
- package/dist/hooks/useCollectionsFollow.esm.js.map +1 -1
- package/dist/hooks/useEntityAuthor.esm.js +5 -5
- package/dist/hooks/useEntityAuthor.esm.js.map +1 -1
- package/dist/hooks/useEntityFollow.esm.js +3 -5
- package/dist/hooks/useEntityFollow.esm.js.map +1 -1
- package/dist/hooks/useEntityQueryParameter.esm.js +2 -2
- package/dist/hooks/useEntityQueryParameter.esm.js.map +1 -1
- package/dist/hooks/useIsModerator.esm.js +19 -4
- package/dist/hooks/useIsModerator.esm.js.map +1 -1
- package/dist/hooks/usePaginatedPosts.esm.js +7 -7
- package/dist/hooks/usePaginatedPosts.esm.js.map +1 -1
- package/dist/hooks/useTagsFollow.esm.js +3 -3
- package/dist/hooks/useTagsFollow.esm.js.map +1 -1
- package/dist/hooks/useUserFollow.esm.js +3 -3
- package/dist/hooks/useUserFollow.esm.js.map +1 -1
- package/dist/hooks/useVoting.esm.js +4 -3
- package/dist/hooks/useVoting.esm.js.map +1 -1
- package/dist/index.d.ts +65 -63
- package/dist/routes.esm.js +3 -3
- package/dist/routes.esm.js.map +1 -1
- package/dist/translation.esm.js +2 -1
- package/dist/translation.esm.js.map +1 -1
- package/dist/utils/utils.esm.js +40 -14
- package/dist/utils/utils.esm.js.map +1 -1
- package/package.json +16 -9
package/dist/utils/utils.esm.js
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import { stringifyEntityRef } from '@backstage/catalog-model';
|
|
2
2
|
import FileType from 'file-type';
|
|
3
|
+
import { useEffect } from 'react';
|
|
4
|
+
import '@backstage/core-plugin-api';
|
|
5
|
+
import '../api.esm.js';
|
|
6
|
+
import 'react-use';
|
|
7
|
+
import { useTranslation } from '../hooks/useTranslation.esm.js';
|
|
8
|
+
import 'dataloader';
|
|
9
|
+
import '@backstage/plugin-catalog-react';
|
|
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';
|
|
3
14
|
|
|
4
15
|
const imageUpload = (opts) => {
|
|
5
16
|
const { qetaApi, errorApi, onImageUpload, postId, answerId, collectionId } = opts;
|
|
@@ -29,9 +40,10 @@ const formatEntityName = (username) => {
|
|
|
29
40
|
const plainName = username.split(/[/:]+/).pop();
|
|
30
41
|
return plainName?.split(/[_.-]+/).map((a) => a.charAt(0).toUpperCase() + a.slice(1)).join(" ");
|
|
31
42
|
};
|
|
32
|
-
const getEntityTitle = (entity) => {
|
|
43
|
+
const getEntityTitle = (entity, opts) => {
|
|
44
|
+
const { withType } = opts || { withType: true };
|
|
33
45
|
const stringified = stringifyEntityRef(entity);
|
|
34
|
-
return `${entity.metadata.title ?? formatEntityName(stringified) ?? stringified}${entity.spec?.type ? ` (${entity.spec.type})` : ""}`;
|
|
46
|
+
return `${entity.metadata.title ?? formatEntityName(stringified) ?? stringified}${withType && entity.spec?.type ? ` (${entity.spec.type})` : ""}`;
|
|
35
47
|
};
|
|
36
48
|
const formatDate = (localDate) => {
|
|
37
49
|
let date = localDate.getDate();
|
|
@@ -80,18 +92,32 @@ const getFiltersWithDateRange = (filters) => {
|
|
|
80
92
|
}
|
|
81
93
|
return filters;
|
|
82
94
|
};
|
|
83
|
-
const
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
95
|
+
const useConfirmNavigationIfEdited = (edited) => {
|
|
96
|
+
const { t } = useTranslation();
|
|
97
|
+
const msg = t("common.unsaved_changes");
|
|
98
|
+
useEffect(() => {
|
|
99
|
+
const handleBeforeUnload = (event) => {
|
|
100
|
+
if (edited) {
|
|
101
|
+
event.preventDefault();
|
|
102
|
+
event.returnValue = msg;
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
const handleLocationChange = (event) => {
|
|
106
|
+
if (edited) {
|
|
107
|
+
const response = window.confirm(msg);
|
|
108
|
+
if (!response) {
|
|
109
|
+
event.preventDefault();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
window.addEventListener("beforeunload", handleBeforeUnload);
|
|
114
|
+
window.navigation.addEventListener("navigate", handleLocationChange);
|
|
115
|
+
return () => {
|
|
116
|
+
window.removeEventListener("beforeunload", handleBeforeUnload);
|
|
117
|
+
window.navigation.removeEventListener("navigate", handleLocationChange);
|
|
118
|
+
};
|
|
119
|
+
}, [edited, msg]);
|
|
94
120
|
};
|
|
95
121
|
|
|
96
|
-
export {
|
|
122
|
+
export { formatDate, formatEntityName, getEntityTitle, getFiltersWithDateRange, imageUpload, useConfirmNavigationIfEdited };
|
|
97
123
|
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.esm.js","sources":["../../src/utils/utils.ts"],"sourcesContent":["import { Entity, stringifyEntityRef } from '@backstage/catalog-model';\nimport { Filters } from '../components/FilterPanel/FilterPanel';\nimport FileType from 'file-type';\nimport { ErrorApi } from '@backstage/core-plugin-api';\nimport { QetaApi } from '@drodil/backstage-plugin-qeta-common';\n\nexport const imageUpload = (opts: {\n qetaApi: QetaApi;\n errorApi: ErrorApi;\n onImageUpload?: (id: number) => void;\n postId?: number;\n answerId?: number;\n collectionId?: number;\n}) => {\n const { qetaApi, errorApi, onImageUpload, postId, answerId, collectionId } =\n opts;\n // eslint-disable-next-line func-names\n return async function* (data: ArrayBuffer) {\n const fileType = await FileType.fromBuffer(data);\n\n const mimeType = fileType ? fileType.mime : 'text/plain';\n const attachment = await qetaApi.postAttachment(\n new Blob([data], { type: mimeType }),\n { postId, answerId, collectionId },\n );\n if ('errors' in attachment) {\n errorApi.post({\n name: 'Upload failed',\n message: attachment.errors?.map(e => e.message).join(', ') ?? '',\n });\n return false;\n }\n onImageUpload?.(attachment.id);\n yield attachment.locationUri;\n return true;\n };\n};\n\nexport const formatEntityName = (username?: string) => {\n if (!username) {\n return '';\n }\n const plainName = username.split(/[/:]+/).pop();\n return plainName\n ?.split(/[_.-]+/)\n .map(a => a.charAt(0).toUpperCase() + a.slice(1))\n .join(' ');\n};\n\nexport const getEntityTitle = (entity: Entity): string => {\n const stringified = stringifyEntityRef(entity);\n return `${\n entity.metadata.title ?? formatEntityName(stringified) ?? stringified\n }${entity.spec?.type ? ` (${entity.spec.type})` : ''}`;\n};\n\nexport const formatDate = (localDate: Date) => {\n let date: any = localDate.getDate();\n let month: any = localDate.getMonth() + 1;\n if (date < 10) {\n date = `0${date}`;\n }\n\n if (month < 10) {\n month = `0${month}`;\n }\n return `${localDate.getFullYear()}-${month}-${date}`;\n};\n\nexport type FiltersWithDateRange = Filters & {\n fromDate: string;\n toDate: string;\n};\n\nexport const getFiltersWithDateRange = (filters: Filters) => {\n let filtersWithDateRange: FiltersWithDateRange;\n const to = new Date();\n const from = new Date(to);\n if (filters.dateRange) {\n let fromDate = '';\n let toDate = '';\n\n switch (filters.dateRange) {\n case '7-days':\n toDate = formatDate(to);\n from.setDate(to.getDate() - 6);\n fromDate = formatDate(from);\n break;\n\n case '30-days':\n toDate = formatDate(to);\n from.setDate(to.getDate() - 29);\n fromDate = formatDate(from);\n break;\n default:\n if (filters.dateRange.indexOf('--') > 0) {\n fromDate = filters.dateRange.split('--')[0];\n toDate = filters.dateRange.split('--')[1];\n }\n break;\n }\n if (fromDate && toDate) {\n filtersWithDateRange = { ...filters, fromDate, toDate };\n delete filtersWithDateRange.dateRange;\n return filtersWithDateRange;\n }\n }\n\n if ('dateRange' in filters) {\n delete filters.dateRange;\n }\n\n return filters;\n};\n\nexport const
|
|
1
|
+
{"version":3,"file":"utils.esm.js","sources":["../../src/utils/utils.ts"],"sourcesContent":["import { Entity, stringifyEntityRef } from '@backstage/catalog-model';\nimport { Filters } from '../components/FilterPanel/FilterPanel';\nimport FileType from 'file-type';\nimport { ErrorApi } from '@backstage/core-plugin-api';\nimport { QetaApi } from '@drodil/backstage-plugin-qeta-common';\nimport { useEffect } from 'react';\nimport { useTranslation } from '../hooks';\n\nexport const imageUpload = (opts: {\n qetaApi: QetaApi;\n errorApi: ErrorApi;\n onImageUpload?: (id: number) => void;\n postId?: number;\n answerId?: number;\n collectionId?: number;\n}) => {\n const { qetaApi, errorApi, onImageUpload, postId, answerId, collectionId } =\n opts;\n // eslint-disable-next-line func-names\n return async function* (data: ArrayBuffer) {\n const fileType = await FileType.fromBuffer(data);\n\n const mimeType = fileType ? fileType.mime : 'text/plain';\n const attachment = await qetaApi.postAttachment(\n new Blob([data], { type: mimeType }),\n { postId, answerId, collectionId },\n );\n if ('errors' in attachment) {\n errorApi.post({\n name: 'Upload failed',\n message: attachment.errors?.map(e => e.message).join(', ') ?? '',\n });\n return false;\n }\n onImageUpload?.(attachment.id);\n yield attachment.locationUri;\n return true;\n };\n};\n\nexport const formatEntityName = (username?: string) => {\n if (!username) {\n return '';\n }\n const plainName = username.split(/[/:]+/).pop();\n return plainName\n ?.split(/[_.-]+/)\n .map(a => a.charAt(0).toUpperCase() + a.slice(1))\n .join(' ');\n};\n\nexport const getEntityTitle = (\n entity: Entity,\n opts?: { withType: boolean },\n): string => {\n const { withType } = opts || { withType: true };\n const stringified = stringifyEntityRef(entity);\n return `${\n entity.metadata.title ?? formatEntityName(stringified) ?? stringified\n }${withType && entity.spec?.type ? ` (${entity.spec.type})` : ''}`;\n};\n\nexport const formatDate = (localDate: Date) => {\n let date: any = localDate.getDate();\n let month: any = localDate.getMonth() + 1;\n if (date < 10) {\n date = `0${date}`;\n }\n\n if (month < 10) {\n month = `0${month}`;\n }\n return `${localDate.getFullYear()}-${month}-${date}`;\n};\n\nexport type FiltersWithDateRange = Filters & {\n fromDate: string;\n toDate: string;\n};\n\nexport const getFiltersWithDateRange = (filters: Filters) => {\n let filtersWithDateRange: FiltersWithDateRange;\n const to = new Date();\n const from = new Date(to);\n if (filters.dateRange) {\n let fromDate = '';\n let toDate = '';\n\n switch (filters.dateRange) {\n case '7-days':\n toDate = formatDate(to);\n from.setDate(to.getDate() - 6);\n fromDate = formatDate(from);\n break;\n\n case '30-days':\n toDate = formatDate(to);\n from.setDate(to.getDate() - 29);\n fromDate = formatDate(from);\n break;\n default:\n if (filters.dateRange.indexOf('--') > 0) {\n fromDate = filters.dateRange.split('--')[0];\n toDate = filters.dateRange.split('--')[1];\n }\n break;\n }\n if (fromDate && toDate) {\n filtersWithDateRange = { ...filters, fromDate, toDate };\n delete filtersWithDateRange.dateRange;\n return filtersWithDateRange;\n }\n }\n\n if ('dateRange' in filters) {\n delete filters.dateRange;\n }\n\n return filters;\n};\n\nexport const useConfirmNavigationIfEdited = (edited: boolean) => {\n const { t } = useTranslation();\n const msg = t('common.unsaved_changes');\n useEffect(() => {\n const handleBeforeUnload = (event: BeforeUnloadEvent) => {\n if (edited) {\n event.preventDefault();\n event.returnValue = msg; // Included for legacy support, e.g. Chrome/Edge < 119\n }\n };\n\n const handleLocationChange = (event: any) => {\n if (edited) {\n // eslint-disable-next-line no-alert\n const response = window.confirm(msg);\n if (!response) {\n event.preventDefault();\n }\n }\n };\n\n window.addEventListener('beforeunload', handleBeforeUnload);\n // @ts-ignore\n window.navigation.addEventListener('navigate', handleLocationChange);\n\n return () => {\n window.removeEventListener('beforeunload', handleBeforeUnload);\n // @ts-ignore\n window.navigation.removeEventListener('navigate', handleLocationChange);\n };\n }, [edited, msg]);\n};\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"frontend",
|
|
8
8
|
"backstage.io"
|
|
9
9
|
],
|
|
10
|
-
"version": "3.
|
|
10
|
+
"version": "3.25.0",
|
|
11
11
|
"main": "dist/index.esm.js",
|
|
12
12
|
"types": "dist/index.d.ts",
|
|
13
13
|
"prepublishOnly": "yarn tsc && yarn build",
|
|
@@ -51,13 +51,13 @@
|
|
|
51
51
|
"@backstage/catalog-client": "^1.9.1",
|
|
52
52
|
"@backstage/catalog-model": "^1.7.3",
|
|
53
53
|
"@backstage/config": "^1.3.2",
|
|
54
|
-
"@backstage/core-components": "^0.17.
|
|
55
|
-
"@backstage/core-plugin-api": "^1.10.
|
|
56
|
-
"@backstage/plugin-catalog-react": "^1.
|
|
54
|
+
"@backstage/core-components": "^0.17.1",
|
|
55
|
+
"@backstage/core-plugin-api": "^1.10.6",
|
|
56
|
+
"@backstage/plugin-catalog-react": "^1.17.0",
|
|
57
57
|
"@backstage/plugin-permission-common": "^0.8.4",
|
|
58
|
-
"@backstage/plugin-permission-react": "^0.4.
|
|
59
|
-
"@backstage/plugin-signals-react": "^0.0.
|
|
60
|
-
"@drodil/backstage-plugin-qeta-common": "^3.
|
|
58
|
+
"@backstage/plugin-permission-react": "^0.4.33",
|
|
59
|
+
"@backstage/plugin-signals-react": "^0.0.12",
|
|
60
|
+
"@drodil/backstage-plugin-qeta-common": "^3.25.0",
|
|
61
61
|
"@jsdevtools/rehype-toc": "^3.0.2",
|
|
62
62
|
"@material-ui/core": "^4.12.2",
|
|
63
63
|
"@material-ui/icons": "^4.11.3",
|
|
@@ -86,8 +86,8 @@
|
|
|
86
86
|
"react-router-dom": "6.0.0-beta.0 || ^6.3.0"
|
|
87
87
|
},
|
|
88
88
|
"devDependencies": {
|
|
89
|
-
"@backstage/cli": "^0.
|
|
90
|
-
"@backstage/test-utils": "^1.7.
|
|
89
|
+
"@backstage/cli": "^0.32.0",
|
|
90
|
+
"@backstage/test-utils": "^1.7.7",
|
|
91
91
|
"@testing-library/dom": "^10.4.0",
|
|
92
92
|
"@testing-library/jest-dom": "^5.10.1",
|
|
93
93
|
"@testing-library/react": "^16.0.1",
|
|
@@ -100,5 +100,12 @@
|
|
|
100
100
|
"files": [
|
|
101
101
|
"dist"
|
|
102
102
|
],
|
|
103
|
+
"typesVersions": {
|
|
104
|
+
"*": {
|
|
105
|
+
"package.json": [
|
|
106
|
+
"package.json"
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
},
|
|
103
110
|
"module": "./dist/index.esm.js"
|
|
104
111
|
}
|