@drodil/backstage-plugin-qeta-react 3.48.1 → 3.49.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 (139) hide show
  1. package/dist/components/AIAnswerCard/AIAnswerCard.esm.js +4 -7
  2. package/dist/components/AIAnswerCard/AIAnswerCard.esm.js.map +1 -1
  3. package/dist/components/AnswerForm/AnswerForm.esm.js +12 -6
  4. package/dist/components/AnswerForm/AnswerForm.esm.js.map +1 -1
  5. package/dist/components/AnswersContainer/AnswerList.esm.js +2 -2
  6. package/dist/components/AnswersContainer/AnswerList.esm.js.map +1 -1
  7. package/dist/components/AnswersContainer/AnswerListItem.esm.js +162 -98
  8. package/dist/components/AnswersContainer/AnswerListItem.esm.js.map +1 -1
  9. package/dist/components/ArticleContent/ArticleContent.esm.js +1 -2
  10. package/dist/components/ArticleContent/ArticleContent.esm.js.map +1 -1
  11. package/dist/components/AuthorBox/AuthorBox.esm.js +3 -3
  12. package/dist/components/AuthorBox/AuthorBox.esm.js.map +1 -1
  13. package/dist/components/Buttons/AddToCollectionButton.esm.js +3 -11
  14. package/dist/components/Buttons/AddToCollectionButton.esm.js.map +1 -1
  15. package/dist/components/Buttons/AskQuestionButton.esm.js +5 -8
  16. package/dist/components/Buttons/AskQuestionButton.esm.js.map +1 -1
  17. package/dist/components/Buttons/ButtonContainer.esm.js +2 -4
  18. package/dist/components/Buttons/ButtonContainer.esm.js.map +1 -1
  19. package/dist/components/Buttons/ContentHeaderButton.esm.js +27 -0
  20. package/dist/components/Buttons/ContentHeaderButton.esm.js.map +1 -0
  21. package/dist/components/Buttons/CreateCollectionButton.esm.js +3 -5
  22. package/dist/components/Buttons/CreateCollectionButton.esm.js.map +1 -1
  23. package/dist/components/Buttons/CreateLinkButton.esm.js +5 -8
  24. package/dist/components/Buttons/CreateLinkButton.esm.js.map +1 -1
  25. package/dist/components/Buttons/OpenLinkButton.esm.js +3 -1
  26. package/dist/components/Buttons/OpenLinkButton.esm.js.map +1 -1
  27. package/dist/components/Buttons/WriteArticleButton.esm.js +5 -8
  28. package/dist/components/Buttons/WriteArticleButton.esm.js.map +1 -1
  29. package/dist/components/CollectionsGrid/CollectionsGrid.esm.js +1 -0
  30. package/dist/components/CollectionsGrid/CollectionsGrid.esm.js.map +1 -1
  31. package/dist/components/CollectionsGrid/CollectionsGridContent.esm.js +3 -13
  32. package/dist/components/CollectionsGrid/CollectionsGridContent.esm.js.map +1 -1
  33. package/dist/components/CollectionsGrid/CollectionsGridItem.esm.js +155 -51
  34. package/dist/components/CollectionsGrid/CollectionsGridItem.esm.js.map +1 -1
  35. package/dist/components/CommentSection/CommentForm.esm.js +49 -20
  36. package/dist/components/CommentSection/CommentForm.esm.js.map +1 -1
  37. package/dist/components/CommentSection/CommentListItem.esm.js +38 -32
  38. package/dist/components/CommentSection/CommentListItem.esm.js.map +1 -1
  39. package/dist/components/CommentSection/CommentSection.esm.js +3 -2
  40. package/dist/components/CommentSection/CommentSection.esm.js.map +1 -1
  41. package/dist/components/ContentHeader/ContentHeader.esm.js +83 -0
  42. package/dist/components/ContentHeader/ContentHeader.esm.js.map +1 -0
  43. package/dist/components/ContentHeaderCard/ContentHeaderCard.esm.js +151 -0
  44. package/dist/components/ContentHeaderCard/ContentHeaderCard.esm.js.map +1 -0
  45. package/dist/components/EntitiesGrid/EntitiesGrid.esm.js +63 -23
  46. package/dist/components/EntitiesGrid/EntitiesGrid.esm.js.map +1 -1
  47. package/dist/components/EntitiesGrid/EntitiesGridContent.esm.js +1 -1
  48. package/dist/components/EntitiesGrid/EntitiesGridContent.esm.js.map +1 -1
  49. package/dist/components/EntitiesGrid/EntitiesGridItem.esm.js +109 -55
  50. package/dist/components/EntitiesGrid/EntitiesGridItem.esm.js.map +1 -1
  51. package/dist/components/FilterPanel/DateRangeFilter.esm.js +5 -5
  52. package/dist/components/FilterPanel/DateRangeFilter.esm.js.map +1 -1
  53. package/dist/components/FilterPanel/FilterPanel.esm.js +171 -96
  54. package/dist/components/FilterPanel/FilterPanel.esm.js.map +1 -1
  55. package/dist/components/FollowedLists/FollowedCollectionsList.esm.js +61 -4
  56. package/dist/components/FollowedLists/FollowedCollectionsList.esm.js.map +1 -1
  57. package/dist/components/FollowedLists/FollowedEntitiesList.esm.js +64 -6
  58. package/dist/components/FollowedLists/FollowedEntitiesList.esm.js.map +1 -1
  59. package/dist/components/FollowedLists/FollowedTagsList.esm.js +61 -5
  60. package/dist/components/FollowedLists/FollowedTagsList.esm.js.map +1 -1
  61. package/dist/components/FollowedLists/FollowedUsersList.esm.js +69 -10
  62. package/dist/components/FollowedLists/FollowedUsersList.esm.js.map +1 -1
  63. package/dist/components/GridItemStyles/useGridItemStyles.esm.js +16 -6
  64. package/dist/components/GridItemStyles/useGridItemStyles.esm.js.map +1 -1
  65. package/dist/components/HeaderImageInput/HeaderImageInput.esm.js +1 -1
  66. package/dist/components/HeaderImageInput/HeaderImageInput.esm.js.map +1 -1
  67. package/dist/components/HomePageCards/ImpactCard.esm.js +96 -31
  68. package/dist/components/HomePageCards/ImpactCard.esm.js.map +1 -1
  69. package/dist/components/LeftMenu/LeftMenu.esm.js +237 -121
  70. package/dist/components/LeftMenu/LeftMenu.esm.js.map +1 -1
  71. package/dist/components/MarkdownEditor/MarkdownEditor.esm.js +7 -1
  72. package/dist/components/MarkdownEditor/MarkdownEditor.esm.js.map +1 -1
  73. package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js +2 -2
  74. package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js.map +1 -1
  75. package/dist/components/PostForm/EntitiesInput.esm.js +6 -1
  76. package/dist/components/PostForm/EntitiesInput.esm.js.map +1 -1
  77. package/dist/components/PostForm/PostForm.esm.js +24 -10
  78. package/dist/components/PostForm/PostForm.esm.js.map +1 -1
  79. package/dist/components/PostForm/TagInput.esm.js +4 -3
  80. package/dist/components/PostForm/TagInput.esm.js.map +1 -1
  81. package/dist/components/PostHighlightList/PostHighlightList.esm.js +45 -28
  82. package/dist/components/PostHighlightList/PostHighlightList.esm.js.map +1 -1
  83. package/dist/components/PostsContainer/PostList.esm.js +1 -1
  84. package/dist/components/PostsContainer/PostList.esm.js.map +1 -1
  85. package/dist/components/PostsContainer/PostListItem.esm.js +130 -133
  86. package/dist/components/PostsContainer/PostListItem.esm.js.map +1 -1
  87. package/dist/components/PostsContainer/PostsContainer.esm.js +1 -1
  88. package/dist/components/PostsGrid/PostsGrid.esm.js +2 -2
  89. package/dist/components/PostsGrid/PostsGrid.esm.js.map +1 -1
  90. package/dist/components/PostsGrid/PostsGridContent.esm.js +1 -2
  91. package/dist/components/PostsGrid/PostsGridContent.esm.js.map +1 -1
  92. package/dist/components/PostsGrid/PostsGridItem.esm.js +117 -51
  93. package/dist/components/PostsGrid/PostsGridItem.esm.js.map +1 -1
  94. package/dist/components/QetaContext/QetaContext.esm.js +26 -0
  95. package/dist/components/QetaContext/QetaContext.esm.js.map +1 -0
  96. package/dist/components/StatsChart/StatsChart.esm.js +143 -103
  97. package/dist/components/StatsChart/StatsChart.esm.js.map +1 -1
  98. package/dist/components/SuggestionsCard/SuggestionsCard.esm.js +51 -10
  99. package/dist/components/SuggestionsCard/SuggestionsCard.esm.js.map +1 -1
  100. package/dist/components/TagsAndEntities/TagChip.esm.js +3 -0
  101. package/dist/components/TagsAndEntities/TagChip.esm.js.map +1 -1
  102. package/dist/components/TagsAndEntities/UserChip.esm.js +7 -41
  103. package/dist/components/TagsAndEntities/UserChip.esm.js.map +1 -1
  104. package/dist/components/TagsGrid/TagGridItem.esm.js +213 -108
  105. package/dist/components/TagsGrid/TagGridItem.esm.js.map +1 -1
  106. package/dist/components/TagsGrid/TagsGrid.esm.js +93 -53
  107. package/dist/components/TagsGrid/TagsGrid.esm.js.map +1 -1
  108. package/dist/components/TagsGrid/TagsGridContent.esm.js +1 -1
  109. package/dist/components/TagsGrid/TagsGridContent.esm.js.map +1 -1
  110. package/dist/components/TemplateList/TemplateList.esm.js +1 -1
  111. package/dist/components/TemplateList/TemplateList.esm.js.map +1 -1
  112. package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js +21 -6
  113. package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js.map +1 -1
  114. package/dist/components/UsersGrid/UsersGrid.esm.js +53 -15
  115. package/dist/components/UsersGrid/UsersGrid.esm.js.map +1 -1
  116. package/dist/components/UsersGrid/UsersGridContent.esm.js +1 -1
  117. package/dist/components/UsersGrid/UsersGridContent.esm.js.map +1 -1
  118. package/dist/components/UsersGrid/UsersGridItem.esm.js +148 -82
  119. package/dist/components/UsersGrid/UsersGridItem.esm.js.map +1 -1
  120. package/dist/components/Utility/QetaGridHeader.esm.js +1 -0
  121. package/dist/components/Utility/QetaGridHeader.esm.js.map +1 -1
  122. package/dist/components/Utility/VoteButtonContainer.esm.js +10 -5
  123. package/dist/components/Utility/VoteButtonContainer.esm.js.map +1 -1
  124. package/dist/index.d.ts +150 -32
  125. package/dist/index.esm.js +5 -4
  126. package/dist/index.esm.js.map +1 -1
  127. package/dist/translation.esm.js +65 -11
  128. package/dist/translation.esm.js.map +1 -1
  129. package/package.json +2 -2
  130. package/dist/components/CollectionCard/CollectionCard.esm.js +0 -81
  131. package/dist/components/CollectionCard/CollectionCard.esm.js.map +0 -1
  132. package/dist/components/ExtensionContext/ExtensionContext.esm.js +0 -23
  133. package/dist/components/ExtensionContext/ExtensionContext.esm.js.map +0 -1
  134. package/dist/components/SummaryStatsGrid/SummaryStatsGrid.esm.js +0 -154
  135. package/dist/components/SummaryStatsGrid/SummaryStatsGrid.esm.js.map +0 -1
  136. package/dist/components/TagsAndEntities/CollectionChip.esm.js +0 -92
  137. package/dist/components/TagsAndEntities/CollectionChip.esm.js.map +0 -1
  138. package/dist/components/Utility/SmallAvatar.esm.js +0 -18
  139. package/dist/components/Utility/SmallAvatar.esm.js.map +0 -1
@@ -1,79 +1,133 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { Grid, Card, CardActionArea, CardHeader, Tooltip, Avatar, CardContent, Typography, CardActions, Button } from '@material-ui/core';
2
+ import { EntityFollowButton } from '../Buttons/EntityFollowButton.esm.js';
3
+ import { makeStyles, Grid, Card, Box, Avatar, Tooltip, Typography, CardContent } from '@material-ui/core';
3
4
  import { useRouteRef } from '@backstage/core-plugin-api';
4
5
  import { useNavigate } from 'react-router-dom';
5
6
  import { useEntityPresentation } from '@backstage/plugin-catalog-react';
6
7
  import { entityRouteRef } from '../../routes.esm.js';
7
8
  import { parseEntityRef } from '@backstage/catalog-model';
8
- import '../../api.esm.js';
9
- import 'react-use';
10
- import 'react';
11
- import { useEntityFollow } from '../../hooks/useEntityFollow.esm.js';
12
- import 'dataloader';
9
+ import LinkIcon from '@material-ui/icons/Link';
10
+ import DescriptionIcon from '@material-ui/icons/Description';
11
+ import QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';
12
+ import PeopleIcon from '@material-ui/icons/People';
13
13
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
14
14
  import { qetaTranslationRef } from '../../translation.esm.js';
15
- import 'react-use/lib/useAsync';
16
- import '@backstage/plugin-permission-react';
17
- import '@drodil/backstage-plugin-qeta-common';
18
- import '@backstage/plugin-permission-common';
19
- import VisibilityOff from '@material-ui/icons/VisibilityOff';
20
- import Visibility from '@material-ui/icons/Visibility';
21
15
  import useGridItemStyles from '../GridItemStyles/useGridItemStyles.esm.js';
22
16
 
17
+ const useStyles = makeStyles((theme) => ({
18
+ statsGrid: {
19
+ marginTop: "auto"
20
+ },
21
+ statItem: {
22
+ padding: theme.spacing(1),
23
+ borderRadius: theme.shape.borderRadius,
24
+ width: "100%",
25
+ height: "100%",
26
+ justifyContent: "center"
27
+ },
28
+ flexColumn: {
29
+ display: "flex",
30
+ flexDirection: "column"
31
+ }
32
+ }));
23
33
  const EntitiesGridItem = (props) => {
24
34
  const { entity } = props;
25
35
  const classes = useGridItemStyles();
36
+ const localClasses = useStyles();
26
37
  const entityRoute = useRouteRef(entityRouteRef);
27
38
  const navigate = useNavigate();
28
39
  const { t } = useTranslationRef(qetaTranslationRef);
29
- const entityFollow = useEntityFollow();
30
40
  const compound = parseEntityRef(entity.entityRef);
31
41
  const { primaryTitle, Icon, secondaryTitle } = useEntityPresentation(compound);
32
- return /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, sm: 6, md: 4, xl: 3, children: /* @__PURE__ */ jsxs(Card, { className: classes.card, variant: "outlined", children: [
33
- /* @__PURE__ */ jsxs(
34
- CardActionArea,
35
- {
36
- onClick: () => navigate(entityRoute({ entityRef: entity.entityRef })),
37
- children: [
38
- /* @__PURE__ */ jsx(
39
- CardHeader,
42
+ return /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, sm: 6, md: 6, xl: 4, children: /* @__PURE__ */ jsxs(
43
+ Card,
44
+ {
45
+ className: classes.card,
46
+ style: { cursor: "pointer" },
47
+ onClick: () => navigate(entityRoute({ entityRef: entity.entityRef })),
48
+ children: [
49
+ /* @__PURE__ */ jsxs(Box, { className: classes.cardHeader, display: "flex", alignItems: "center", children: [
50
+ Icon && /* @__PURE__ */ jsx(Avatar, { style: { marginRight: 16 }, children: /* @__PURE__ */ jsx(Icon, {}) }),
51
+ /* @__PURE__ */ jsx(Box, { flex: 1, minWidth: 0, children: /* @__PURE__ */ jsx(Tooltip, { title: secondaryTitle ?? "", arrow: true, children: /* @__PURE__ */ jsx(Typography, { variant: "h6", noWrap: true, children: primaryTitle }) }) }),
52
+ /* @__PURE__ */ jsx(Box, { flexShrink: 0, children: /* @__PURE__ */ jsx(
53
+ "div",
40
54
  {
41
- className: classes.cardHeader,
42
- title: /* @__PURE__ */ jsx(Tooltip, { title: secondaryTitle ?? "", arrow: true, children: /* @__PURE__ */ jsx("span", { className: classes.ellipsis, children: primaryTitle }) }),
43
- titleTypographyProps: { variant: "h6" },
44
- avatar: Icon ? /* @__PURE__ */ jsx(Avatar, { children: /* @__PURE__ */ jsx(Icon, {}) }) : null
55
+ onClick: (e) => e.stopPropagation(),
56
+ onKeyPress: () => {
57
+ },
58
+ role: "button",
59
+ tabIndex: 0,
60
+ children: /* @__PURE__ */ jsx(EntityFollowButton, { entityRef: entity.entityRef })
45
61
  }
46
- ),
47
- /* @__PURE__ */ jsx(CardContent, { className: classes.cardContent, children: /* @__PURE__ */ jsxs(Typography, { className: classes.stats, variant: "caption", children: [
48
- t("common.posts", {
49
- count: entity.postsCount,
50
- itemType: "post"
51
- }),
52
- " \xB7 ",
53
- t("common.followers", { count: entity.followerCount })
54
- ] }) })
55
- ]
56
- }
57
- ),
58
- /* @__PURE__ */ jsx(CardActions, { className: classes.cardActions, children: /* @__PURE__ */ jsx(Grid, { container: true, justifyContent: "center", children: /* @__PURE__ */ jsx(Grid, { item: true, children: /* @__PURE__ */ jsx(Tooltip, { title: t("entityButton.tooltip"), children: /* @__PURE__ */ jsx(
59
- Button,
60
- {
61
- className: classes.actionButton,
62
- size: "small",
63
- variant: "outlined",
64
- color: entityFollow.isFollowingEntity(entity.entityRef) ? "secondary" : "primary",
65
- onClick: () => {
66
- if (entityFollow.isFollowingEntity(entity.entityRef)) {
67
- entityFollow.unfollowEntity(entity.entityRef);
68
- } else {
69
- entityFollow.followEntity(entity.entityRef);
62
+ ) })
63
+ ] }),
64
+ /* @__PURE__ */ jsx(
65
+ CardContent,
66
+ {
67
+ className: `${classes.cardContent} ${localClasses.flexColumn}`,
68
+ children: /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 1, className: localClasses.statsGrid, children: [
69
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 3, children: /* @__PURE__ */ jsxs(
70
+ Box,
71
+ {
72
+ display: "flex",
73
+ flexDirection: "column",
74
+ alignItems: "center",
75
+ className: localClasses.statItem,
76
+ children: [
77
+ /* @__PURE__ */ jsx(QuestionAnswerIcon, { fontSize: "small", color: "disabled" }),
78
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", style: { fontWeight: 600 }, children: entity.questionsCount }),
79
+ /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "textSecondary", children: t("stats.questions", {}) })
80
+ ]
81
+ }
82
+ ) }),
83
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 3, children: /* @__PURE__ */ jsxs(
84
+ Box,
85
+ {
86
+ display: "flex",
87
+ flexDirection: "column",
88
+ alignItems: "center",
89
+ className: localClasses.statItem,
90
+ children: [
91
+ /* @__PURE__ */ jsx(DescriptionIcon, { fontSize: "small", color: "disabled" }),
92
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", style: { fontWeight: 600 }, children: entity.articlesCount }),
93
+ /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "textSecondary", children: t("stats.articles", {}) })
94
+ ]
95
+ }
96
+ ) }),
97
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 3, children: /* @__PURE__ */ jsxs(
98
+ Box,
99
+ {
100
+ display: "flex",
101
+ flexDirection: "column",
102
+ alignItems: "center",
103
+ className: localClasses.statItem,
104
+ children: [
105
+ /* @__PURE__ */ jsx(LinkIcon, { fontSize: "small", color: "disabled" }),
106
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", style: { fontWeight: 600 }, children: entity.linksCount }),
107
+ /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "textSecondary", children: t("stats.links", {}) })
108
+ ]
109
+ }
110
+ ) }),
111
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 3, children: /* @__PURE__ */ jsxs(
112
+ Box,
113
+ {
114
+ display: "flex",
115
+ flexDirection: "column",
116
+ alignItems: "center",
117
+ className: localClasses.statItem,
118
+ children: [
119
+ /* @__PURE__ */ jsx(PeopleIcon, { fontSize: "small", color: "disabled" }),
120
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", style: { fontWeight: 600 }, children: entity.followerCount }),
121
+ /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "textSecondary", children: t("stats.followers", {}) })
122
+ ]
123
+ }
124
+ ) })
125
+ ] })
70
126
  }
71
- },
72
- startIcon: entityFollow.isFollowingEntity(entity.entityRef) ? /* @__PURE__ */ jsx(VisibilityOff, {}) : /* @__PURE__ */ jsx(Visibility, {}),
73
- children: entityFollow.isFollowingEntity(entity.entityRef) ? t("entityButton.unfollow") : t("entityButton.follow")
74
- }
75
- ) }) }) }) })
76
- ] }) });
127
+ )
128
+ ]
129
+ }
130
+ ) });
77
131
  };
78
132
 
79
133
  export { EntitiesGridItem };
@@ -1 +1 @@
1
- {"version":3,"file":"EntitiesGridItem.esm.js","sources":["../../../src/components/EntitiesGrid/EntitiesGridItem.tsx"],"sourcesContent":["import { EntityResponse } from '@drodil/backstage-plugin-qeta-common';\nimport {\n Avatar,\n Button,\n Card,\n CardActionArea,\n CardActions,\n CardContent,\n CardHeader,\n Grid,\n Tooltip,\n Typography,\n} from '@material-ui/core';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { useNavigate } from 'react-router-dom';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { entityRouteRef } from '../../routes';\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { useEntityFollow } from '../../hooks';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\nimport Visibility from '@material-ui/icons/Visibility';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport useGridItemStyles from '../GridItemStyles/useGridItemStyles';\n\nexport const EntitiesGridItem = (props: { entity: EntityResponse }) => {\n const { entity } = props;\n const classes = useGridItemStyles();\n const entityRoute = useRouteRef(entityRouteRef);\n const navigate = useNavigate();\n const { t } = useTranslationRef(qetaTranslationRef);\n const entityFollow = useEntityFollow();\n const compound = parseEntityRef(entity.entityRef);\n const { primaryTitle, Icon, secondaryTitle } =\n useEntityPresentation(compound);\n\n return (\n <Grid item xs={12} sm={6} md={4} xl={3}>\n <Card className={classes.card} variant=\"outlined\">\n <CardActionArea\n onClick={() => navigate(entityRoute({ entityRef: entity.entityRef }))}\n >\n <CardHeader\n className={classes.cardHeader}\n title={\n <Tooltip title={secondaryTitle ?? ''} arrow>\n <span className={classes.ellipsis}>{primaryTitle}</span>\n </Tooltip>\n }\n titleTypographyProps={{ variant: 'h6' }}\n avatar={\n Icon ? (\n <Avatar>\n <Icon />\n </Avatar>\n ) : null\n }\n />\n <CardContent className={classes.cardContent}>\n <Typography className={classes.stats} variant=\"caption\">\n {t('common.posts', {\n count: entity.postsCount,\n itemType: 'post',\n })}\n {' · '}\n {t('common.followers', { count: entity.followerCount })}\n </Typography>\n </CardContent>\n </CardActionArea>\n <CardActions className={classes.cardActions}>\n <Grid container justifyContent=\"center\">\n <Grid item>\n <Tooltip title={t('entityButton.tooltip')}>\n <Button\n className={classes.actionButton}\n size=\"small\"\n variant=\"outlined\"\n color={\n entityFollow.isFollowingEntity(entity.entityRef)\n ? 'secondary'\n : 'primary'\n }\n onClick={() => {\n if (entityFollow.isFollowingEntity(entity.entityRef)) {\n entityFollow.unfollowEntity(entity.entityRef);\n } else {\n entityFollow.followEntity(entity.entityRef);\n }\n }}\n startIcon={\n entityFollow.isFollowingEntity(entity.entityRef) ? (\n <VisibilityOff />\n ) : (\n <Visibility />\n )\n }\n >\n {entityFollow.isFollowingEntity(entity.entityRef)\n ? t('entityButton.unfollow')\n : t('entityButton.follow')}\n </Button>\n </Tooltip>\n </Grid>\n </Grid>\n </CardActions>\n </Card>\n </Grid>\n );\n};\n"],"names":[],"mappings":"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"}
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 Card,\n CardContent,\n Grid,\n Tooltip,\n Typography,\n Box,\n makeStyles,\n} from '@material-ui/core';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { useNavigate } from 'react-router-dom';\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';\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 navigate = useNavigate();\n const { t } = useTranslationRef(qetaTranslationRef);\n const compound = parseEntityRef(entity.entityRef);\n const { primaryTitle, Icon, secondaryTitle } =\n useEntityPresentation(compound);\n\n return (\n <Grid item xs={12} sm={6} md={6} xl={4}>\n <Card\n className={classes.card}\n style={{ cursor: 'pointer' }}\n onClick={() => navigate(entityRoute({ entityRef: entity.entityRef }))}\n >\n <Box className={classes.cardHeader} display=\"flex\" alignItems=\"center\">\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 flexShrink={0}>\n <div\n onClick={e => e.stopPropagation()}\n onKeyPress={() => {}}\n role=\"button\"\n tabIndex={0}\n >\n <EntityFollowButton entityRef={entity.entityRef} />\n </div>\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 </Card>\n </Grid>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ const useStyles = makeStyles(
9
9
  (theme) => ({
10
10
  root: {},
11
11
  textInput: {
12
- minWidth: "230px",
12
+ width: "100%",
13
13
  marginTop: theme.spacing(2),
14
14
  marginBottom: theme.spacing(2),
15
15
  '& input[type="date"]': {
@@ -56,9 +56,9 @@ const DateRangeFilter = (props) => {
56
56
  },
57
57
  [onChange, fromDate, toDate, t]
58
58
  );
59
- return /* @__PURE__ */ jsxs(Grid, { container: true, className: styles.root, children: [
59
+ return /* @__PURE__ */ jsxs(Grid, { container: true, className: styles.root, spacing: 1, children: [
60
60
  validation.message && /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(Typography, { color: "error", variant: "body2", children: validation.message }) }),
61
- /* @__PURE__ */ jsx(Grid, { item: true, children: /* @__PURE__ */ jsxs(
61
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsxs(
62
62
  TextField,
63
63
  {
64
64
  select: true,
@@ -84,7 +84,7 @@ const DateRangeFilter = (props) => {
84
84
  }
85
85
  ) }),
86
86
  dateRangeOption === "custom" && /* @__PURE__ */ jsxs(Fragment, { children: [
87
- /* @__PURE__ */ jsx(Grid, { item: true, children: /* @__PURE__ */ jsx(
87
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 6, children: /* @__PURE__ */ jsx(
88
88
  TextField,
89
89
  {
90
90
  className: styles.textInput,
@@ -103,7 +103,7 @@ const DateRangeFilter = (props) => {
103
103
  }
104
104
  }
105
105
  ) }),
106
- /* @__PURE__ */ jsx(Grid, { item: true, children: /* @__PURE__ */ jsx(
106
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 6, children: /* @__PURE__ */ jsx(
107
107
  TextField,
108
108
  {
109
109
  className: styles.textInput,
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangeFilter.esm.js","sources":["../../../src/components/FilterPanel/DateRangeFilter.tsx"],"sourcesContent":["import { useEffect, useState, useCallback } from 'react';\nimport { formatDate } from '../../utils/utils';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport {\n Grid,\n makeStyles,\n MenuItem,\n TextField,\n Typography,\n} from '@material-ui/core';\n\nexport interface DateRangeFilterProps {\n value?: string;\n onChange: (value: string | string[]) => void;\n}\n\ntype DateRangeValidation = {\n isValid: boolean;\n message?: string;\n};\n\nconst useStyles = makeStyles(\n theme => ({\n root: {},\n textInput: {\n minWidth: '230px',\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n '& input[type=\"date\"]': {\n colorScheme: theme.palette.type === 'dark' ? 'dark' : 'light',\n },\n },\n }),\n { name: 'QetaDateRangeFilter' },\n);\n\nexport const DateRangeFilter = (props: DateRangeFilterProps) => {\n const { value, onChange } = props;\n const styles = useStyles();\n const [dateRangeOption, setDateRangeOption] = useState<string | undefined>(\n value,\n );\n const { t } = useTranslationRef(qetaTranslationRef);\n const localDate = formatDate(new Date());\n const [fromDate, setFromDate] = useState(localDate);\n const [toDate, setToDate] = useState(localDate);\n const [validation, setValidation] = useState<DateRangeValidation>({\n isValid: true,\n });\n\n useEffect(() => {\n setDateRangeOption(value || '');\n if (value && value.indexOf('--') >= 0) {\n setDateRangeOption('custom');\n setFromDate(value.split('--')[0] || '');\n setToDate(value.split('--')[1] || '');\n }\n }, [value]);\n\n const handleCustom = useCallback(\n (from?: string, to?: string) => {\n const startDate = new Date(from ?? fromDate);\n const endDate = new Date(to ?? toDate);\n if (startDate <= endDate) {\n setValidation({ isValid: true });\n onChange(`${formatDate(startDate)}--${formatDate(endDate)}`);\n } else {\n setValidation({\n isValid: false,\n message: t('datePicker.invalidRange'),\n });\n }\n },\n [onChange, fromDate, toDate, t],\n );\n\n return (\n <Grid container className={styles.root}>\n {validation.message && (\n <Grid item xs={12}>\n <Typography color=\"error\" variant=\"body2\">\n {validation.message}\n </Typography>\n </Grid>\n )}\n <Grid item>\n <TextField\n select\n className={styles.textInput}\n value={dateRangeOption || 'date-range'}\n onChange={e => {\n if (e.target.value !== 'custom') {\n onChange(e.target.value === 'date-range' ? '' : e.target.value);\n } else {\n handleCustom();\n }\n setDateRangeOption(e.target.value);\n }}\n variant=\"outlined\"\n defaultValue=\"date-range\"\n fullWidth\n >\n <MenuItem value=\"date-range\">{t('datePicker.range.label')}</MenuItem>\n <MenuItem value=\"7-days\">{t('datePicker.range.last7days')}</MenuItem>\n <MenuItem value=\"30-days\">\n {t('datePicker.range.last30days')}\n </MenuItem>\n <MenuItem value=\"custom\">{t('datePicker.range.custom')}</MenuItem>\n </TextField>\n </Grid>\n {dateRangeOption === 'custom' && (\n <>\n <Grid item>\n <TextField\n className={styles.textInput}\n variant=\"outlined\"\n label={t('datePicker.from')}\n id=\"from-date\"\n type=\"date\"\n value={fromDate}\n InputLabelProps={{ shrink: true }}\n error={!validation.isValid}\n onChange={e => {\n handleCustom(e.target.value);\n }}\n inputProps={{\n max: toDate || localDate,\n }}\n />\n </Grid>\n <Grid item>\n <TextField\n className={styles.textInput}\n variant=\"outlined\"\n label={t('datePicker.to')}\n id=\"to-date\"\n type=\"date\"\n value={toDate}\n InputLabelProps={{ shrink: true }}\n error={!validation.isValid}\n onChange={e => {\n handleCustom(undefined, e.target.value);\n }}\n inputProps={{\n min: fromDate,\n max: localDate,\n }}\n />\n </Grid>\n </>\n )}\n </Grid>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DateRangeFilter.esm.js","sources":["../../../src/components/FilterPanel/DateRangeFilter.tsx"],"sourcesContent":["import { useEffect, useState, useCallback } from 'react';\nimport { formatDate } from '../../utils/utils';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport {\n Grid,\n makeStyles,\n MenuItem,\n TextField,\n Typography,\n} from '@material-ui/core';\n\nexport interface DateRangeFilterProps {\n value?: string;\n onChange: (value: string | string[]) => void;\n}\n\ntype DateRangeValidation = {\n isValid: boolean;\n message?: string;\n};\n\nconst useStyles = makeStyles(\n theme => ({\n root: {},\n textInput: {\n width: '100%',\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n '& input[type=\"date\"]': {\n colorScheme: theme.palette.type === 'dark' ? 'dark' : 'light',\n },\n },\n }),\n { name: 'QetaDateRangeFilter' },\n);\n\nexport const DateRangeFilter = (props: DateRangeFilterProps) => {\n const { value, onChange } = props;\n const styles = useStyles();\n const [dateRangeOption, setDateRangeOption] = useState<string | undefined>(\n value,\n );\n const { t } = useTranslationRef(qetaTranslationRef);\n const localDate = formatDate(new Date());\n const [fromDate, setFromDate] = useState(localDate);\n const [toDate, setToDate] = useState(localDate);\n const [validation, setValidation] = useState<DateRangeValidation>({\n isValid: true,\n });\n\n useEffect(() => {\n setDateRangeOption(value || '');\n if (value && value.indexOf('--') >= 0) {\n setDateRangeOption('custom');\n setFromDate(value.split('--')[0] || '');\n setToDate(value.split('--')[1] || '');\n }\n }, [value]);\n\n const handleCustom = useCallback(\n (from?: string, to?: string) => {\n const startDate = new Date(from ?? fromDate);\n const endDate = new Date(to ?? toDate);\n if (startDate <= endDate) {\n setValidation({ isValid: true });\n onChange(`${formatDate(startDate)}--${formatDate(endDate)}`);\n } else {\n setValidation({\n isValid: false,\n message: t('datePicker.invalidRange'),\n });\n }\n },\n [onChange, fromDate, toDate, t],\n );\n\n return (\n <Grid container className={styles.root} spacing={1}>\n {validation.message && (\n <Grid item xs={12}>\n <Typography color=\"error\" variant=\"body2\">\n {validation.message}\n </Typography>\n </Grid>\n )}\n <Grid item xs={12}>\n <TextField\n select\n className={styles.textInput}\n value={dateRangeOption || 'date-range'}\n onChange={e => {\n if (e.target.value !== 'custom') {\n onChange(e.target.value === 'date-range' ? '' : e.target.value);\n } else {\n handleCustom();\n }\n setDateRangeOption(e.target.value);\n }}\n variant=\"outlined\"\n defaultValue=\"date-range\"\n fullWidth\n >\n <MenuItem value=\"date-range\">{t('datePicker.range.label')}</MenuItem>\n <MenuItem value=\"7-days\">{t('datePicker.range.last7days')}</MenuItem>\n <MenuItem value=\"30-days\">\n {t('datePicker.range.last30days')}\n </MenuItem>\n <MenuItem value=\"custom\">{t('datePicker.range.custom')}</MenuItem>\n </TextField>\n </Grid>\n {dateRangeOption === 'custom' && (\n <>\n <Grid item xs={6}>\n <TextField\n className={styles.textInput}\n variant=\"outlined\"\n label={t('datePicker.from')}\n id=\"from-date\"\n type=\"date\"\n value={fromDate}\n InputLabelProps={{ shrink: true }}\n error={!validation.isValid}\n onChange={e => {\n handleCustom(e.target.value);\n }}\n inputProps={{\n max: toDate || localDate,\n }}\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n className={styles.textInput}\n variant=\"outlined\"\n label={t('datePicker.to')}\n id=\"to-date\"\n type=\"date\"\n value={toDate}\n InputLabelProps={{ shrink: true }}\n error={!validation.isValid}\n onChange={e => {\n handleCustom(undefined, e.target.value);\n }}\n inputProps={{\n min: fromDate,\n max: localDate,\n }}\n />\n </Grid>\n </>\n )}\n </Grid>\n );\n};\n"],"names":[],"mappings":"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"}