@drodil/backstage-plugin-qeta 2.15.0 → 3.0.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 (154) hide show
  1. package/dist/components/ArticlePage/ArticlePage.esm.js +45 -0
  2. package/dist/components/ArticlePage/ArticlePage.esm.js.map +1 -0
  3. package/dist/components/ArticlesPage/ArticlesPage.esm.js +34 -0
  4. package/dist/components/ArticlesPage/ArticlesPage.esm.js.map +1 -0
  5. package/dist/components/AskPage/AskPage.esm.js +4 -4
  6. package/dist/components/AskPage/AskPage.esm.js.map +1 -1
  7. package/dist/components/CollectionCreatePage/CollectionCreatePage.esm.js +20 -0
  8. package/dist/components/CollectionCreatePage/CollectionCreatePage.esm.js.map +1 -0
  9. package/dist/components/CollectionPage/CollectionPage.esm.js +34 -0
  10. package/dist/components/CollectionPage/CollectionPage.esm.js.map +1 -0
  11. package/dist/components/CollectionsPage/CollectionsPage.esm.js +11 -0
  12. package/dist/components/CollectionsPage/CollectionsPage.esm.js.map +1 -0
  13. package/dist/components/EntityPage/EntityPage.esm.js +75 -0
  14. package/dist/components/EntityPage/EntityPage.esm.js.map +1 -0
  15. package/dist/components/FavoritePage/FavoritePage.esm.js +14 -22
  16. package/dist/components/FavoritePage/FavoritePage.esm.js.map +1 -1
  17. package/dist/components/HomePage/HomePage.esm.js +7 -10
  18. package/dist/components/HomePage/HomePage.esm.js.map +1 -1
  19. package/dist/components/LeftMenu/LeftMenu.esm.js +47 -16
  20. package/dist/components/LeftMenu/LeftMenu.esm.js.map +1 -1
  21. package/dist/components/LeftMenu/LeftMenuButton.esm.js +75 -0
  22. package/dist/components/LeftMenu/LeftMenuButton.esm.js.map +1 -0
  23. package/dist/components/QetaPage/QetaPage.esm.js +51 -9
  24. package/dist/components/QetaPage/QetaPage.esm.js.map +1 -1
  25. package/dist/components/QuestionPage/QuestionPage.esm.js +7 -13
  26. package/dist/components/QuestionPage/QuestionPage.esm.js.map +1 -1
  27. package/dist/components/QuestionTableCard/Content.esm.js +1 -1
  28. package/dist/components/QuestionTableCard/Content.esm.js.map +1 -1
  29. package/dist/components/QuestionTableCard/index.esm.js +0 -1
  30. package/dist/components/QuestionTableCard/index.esm.js.map +1 -1
  31. package/dist/components/QuestionsPage/QuestionsPage.esm.js +13 -15
  32. package/dist/components/QuestionsPage/QuestionsPage.esm.js.map +1 -1
  33. package/dist/components/Statistics/GlobalStatsContent.esm.js +1 -3
  34. package/dist/components/Statistics/GlobalStatsContent.esm.js.map +1 -1
  35. package/dist/components/Statistics/StatisticsPage.esm.js +2 -3
  36. package/dist/components/Statistics/StatisticsPage.esm.js.map +1 -1
  37. package/dist/components/TagPage/TagPage.esm.js +32 -25
  38. package/dist/components/TagPage/TagPage.esm.js.map +1 -1
  39. package/dist/components/UserPage/UserPage.esm.js +7 -16
  40. package/dist/components/UserPage/UserPage.esm.js.map +1 -1
  41. package/dist/components/UserPage/UserStatsContent.esm.js +1 -3
  42. package/dist/components/UserPage/UserStatsContent.esm.js.map +1 -1
  43. package/dist/components/UsersPage/UsersPage.esm.js +11 -0
  44. package/dist/components/UsersPage/UsersPage.esm.js.map +1 -0
  45. package/dist/components/WritePage/WritePage.esm.js +40 -0
  46. package/dist/components/WritePage/WritePage.esm.js.map +1 -0
  47. package/dist/index.d.ts +8 -422
  48. package/dist/index.esm.js +0 -10
  49. package/dist/index.esm.js.map +1 -1
  50. package/dist/plugin.esm.js +2 -2
  51. package/dist/plugin.esm.js.map +1 -1
  52. package/package.json +4 -24
  53. package/dist/api/QetaClient.esm.js +0 -513
  54. package/dist/api/QetaClient.esm.js.map +0 -1
  55. package/dist/components/AnswersContainer/AnswerList.esm.js +0 -100
  56. package/dist/components/AnswersContainer/AnswerList.esm.js.map +0 -1
  57. package/dist/components/AnswersContainer/AnswerListItem.esm.js +0 -90
  58. package/dist/components/AnswersContainer/AnswerListItem.esm.js.map +0 -1
  59. package/dist/components/AnswersContainer/AnswersContainer.esm.js +0 -210
  60. package/dist/components/AnswersContainer/AnswersContainer.esm.js.map +0 -1
  61. package/dist/components/AskAnonymouslyCheckbox/AskAnonymouslyCheckbox.esm.js +0 -34
  62. package/dist/components/AskAnonymouslyCheckbox/AskAnonymouslyCheckbox.esm.js.map +0 -1
  63. package/dist/components/AskForm/AskForm.esm.js +0 -245
  64. package/dist/components/AskForm/AskForm.esm.js.map +0 -1
  65. package/dist/components/AskForm/EntitiesInput.esm.js +0 -100
  66. package/dist/components/AskForm/EntitiesInput.esm.js.map +0 -1
  67. package/dist/components/AskForm/TagInput.esm.js +0 -81
  68. package/dist/components/AskForm/TagInput.esm.js.map +0 -1
  69. package/dist/components/Buttons/AskQuestionButton.esm.js +0 -45
  70. package/dist/components/Buttons/AskQuestionButton.esm.js.map +0 -1
  71. package/dist/components/Buttons/BackToQuestionsButton.esm.js +0 -39
  72. package/dist/components/Buttons/BackToQuestionsButton.esm.js.map +0 -1
  73. package/dist/components/Buttons/EntityFollowButton.esm.js +0 -34
  74. package/dist/components/Buttons/EntityFollowButton.esm.js.map +0 -1
  75. package/dist/components/Buttons/TagFollowButton.esm.js +0 -33
  76. package/dist/components/Buttons/TagFollowButton.esm.js.map +0 -1
  77. package/dist/components/CommentSection/CommentList.esm.js +0 -47
  78. package/dist/components/CommentSection/CommentList.esm.js.map +0 -1
  79. package/dist/components/CommentSection/CommentSection.esm.js +0 -126
  80. package/dist/components/CommentSection/CommentSection.esm.js.map +0 -1
  81. package/dist/components/DeleteModal/DeleteModal.esm.js +0 -78
  82. package/dist/components/DeleteModal/DeleteModal.esm.js.map +0 -1
  83. package/dist/components/HomePageCards/ImpactCard.esm.js +0 -22
  84. package/dist/components/HomePageCards/ImpactCard.esm.js.map +0 -1
  85. package/dist/components/HomePageCards/QuestionsCard.esm.js +0 -21
  86. package/dist/components/HomePageCards/QuestionsCard.esm.js.map +0 -1
  87. package/dist/components/Links/Links.esm.js +0 -33
  88. package/dist/components/Links/Links.esm.js.map +0 -1
  89. package/dist/components/MarkdownEditor/MarkdownEditor.esm.js +0 -78
  90. package/dist/components/MarkdownEditor/MarkdownEditor.esm.js.map +0 -1
  91. package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js +0 -37
  92. package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js.map +0 -1
  93. package/dist/components/QetaPage/FollowedEntitiesList.esm.js +0 -43
  94. package/dist/components/QetaPage/FollowedEntitiesList.esm.js.map +0 -1
  95. package/dist/components/QetaPage/FollowedTagsList.esm.js +0 -56
  96. package/dist/components/QetaPage/FollowedTagsList.esm.js.map +0 -1
  97. package/dist/components/QuestionHighlightList/QuestionHighlightList.esm.js +0 -64
  98. package/dist/components/QuestionHighlightList/QuestionHighlightList.esm.js.map +0 -1
  99. package/dist/components/QuestionPage/AnswerCard.esm.js +0 -113
  100. package/dist/components/QuestionPage/AnswerCard.esm.js.map +0 -1
  101. package/dist/components/QuestionPage/AnswerForm.esm.js +0 -153
  102. package/dist/components/QuestionPage/AnswerForm.esm.js.map +0 -1
  103. package/dist/components/QuestionPage/AuthorBox.esm.js +0 -25
  104. package/dist/components/QuestionPage/AuthorBox.esm.js.map +0 -1
  105. package/dist/components/QuestionPage/EntityChip.esm.js +0 -27
  106. package/dist/components/QuestionPage/EntityChip.esm.js.map +0 -1
  107. package/dist/components/QuestionPage/FavoriteButton.esm.js +0 -45
  108. package/dist/components/QuestionPage/FavoriteButton.esm.js.map +0 -1
  109. package/dist/components/QuestionPage/LinkButton.esm.js +0 -28
  110. package/dist/components/QuestionPage/LinkButton.esm.js.map +0 -1
  111. package/dist/components/QuestionPage/QuestionCard.esm.js +0 -107
  112. package/dist/components/QuestionPage/QuestionCard.esm.js.map +0 -1
  113. package/dist/components/QuestionPage/TagsAndEntities.esm.js +0 -44
  114. package/dist/components/QuestionPage/TagsAndEntities.esm.js.map +0 -1
  115. package/dist/components/QuestionPage/VoteButtons.esm.js +0 -153
  116. package/dist/components/QuestionPage/VoteButtons.esm.js.map +0 -1
  117. package/dist/components/QuestionTableCard/QuestionTableRow.esm.js +0 -21
  118. package/dist/components/QuestionTableCard/QuestionTableRow.esm.js.map +0 -1
  119. package/dist/components/QuestionTableCard/QuestionsTable.esm.js +0 -130
  120. package/dist/components/QuestionTableCard/QuestionsTable.esm.js.map +0 -1
  121. package/dist/components/QuestionsContainer/DateRangeFilter.esm.js +0 -110
  122. package/dist/components/QuestionsContainer/DateRangeFilter.esm.js.map +0 -1
  123. package/dist/components/QuestionsContainer/FilterPanel.esm.js +0 -237
  124. package/dist/components/QuestionsContainer/FilterPanel.esm.js.map +0 -1
  125. package/dist/components/QuestionsContainer/NoQuestionsCard.esm.js +0 -47
  126. package/dist/components/QuestionsContainer/NoQuestionsCard.esm.js.map +0 -1
  127. package/dist/components/QuestionsContainer/QuestionList.esm.js +0 -103
  128. package/dist/components/QuestionsContainer/QuestionList.esm.js.map +0 -1
  129. package/dist/components/QuestionsContainer/QuestionListItem.esm.js +0 -123
  130. package/dist/components/QuestionsContainer/QuestionListItem.esm.js.map +0 -1
  131. package/dist/components/QuestionsContainer/QuestionsContainer.esm.js +0 -243
  132. package/dist/components/QuestionsContainer/QuestionsContainer.esm.js.map +0 -1
  133. package/dist/components/RelativeTimeWithTooltip/RelativeTimeWithTooltip.esm.js +0 -22
  134. package/dist/components/RelativeTimeWithTooltip/RelativeTimeWithTooltip.esm.js.map +0 -1
  135. package/dist/components/Statistics/StatsChart.esm.js +0 -238
  136. package/dist/components/Statistics/StatsChart.esm.js.map +0 -1
  137. package/dist/components/Statistics/SummaryStatsGrid.esm.js +0 -47
  138. package/dist/components/Statistics/SummaryStatsGrid.esm.js.map +0 -1
  139. package/dist/components/Statistics/TopRankingUsersCard.esm.js +0 -161
  140. package/dist/components/Statistics/TopRankingUsersCard.esm.js.map +0 -1
  141. package/dist/components/Statistics/TrophyIcon.esm.js +0 -19
  142. package/dist/components/Statistics/TrophyIcon.esm.js.map +0 -1
  143. package/dist/components/Statistics/styles.esm.js +0 -23
  144. package/dist/components/Statistics/styles.esm.js.map +0 -1
  145. package/dist/components/TagPage/TagsContainer.esm.js +0 -57
  146. package/dist/components/TagPage/TagsContainer.esm.js.map +0 -1
  147. package/dist/locale/fi.esm.js +0 -195
  148. package/dist/locale/fi.esm.js.map +0 -1
  149. package/dist/translation.esm.js +0 -359
  150. package/dist/translation.esm.js.map +0 -1
  151. package/dist/utils/hooks.esm.js +0 -430
  152. package/dist/utils/hooks.esm.js.map +0 -1
  153. package/dist/utils/utils.esm.js +0 -72
  154. package/dist/utils/utils.esm.js.map +0 -1
@@ -1,123 +0,0 @@
1
- import { useTheme, Grid, Chip, Typography, Avatar } from '@material-ui/core';
2
- import { Link } from '@backstage/core-components';
3
- import React, { useState, useEffect } from 'react';
4
- import DOMPurify from 'dompurify';
5
- import { truncate, removeMarkdownFormatting } from '@drodil/backstage-plugin-qeta-common';
6
- import { TagsAndEntities } from '../QuestionPage/TagsAndEntities.esm.js';
7
- import { useRouteRef } from '@backstage/core-plugin-api';
8
- import { questionRouteRef, userRouteRef } from '@drodil/backstage-plugin-qeta-react';
9
- import { RelativeTimeWithTooltip } from '../RelativeTimeWithTooltip/RelativeTimeWithTooltip.esm.js';
10
- import { useTranslation, useStyles, useEntityAuthor } from '../../utils/hooks.esm.js';
11
- import { useSignal } from '@backstage/plugin-signals-react';
12
- import { VoteButtons } from '../QuestionPage/VoteButtons.esm.js';
13
- import { FavoriteButton } from '../QuestionPage/FavoriteButton.esm.js';
14
-
15
- const QuestionListItem = (props) => {
16
- const { question, entity } = props;
17
- const [correctAnswer, setCorrectAnswer] = useState(question.correctAnswer);
18
- const [answersCount, setAnswersCount] = useState(question.answersCount);
19
- const [views, setViews] = useState(question.views);
20
- const { t } = useTranslation();
21
- const { lastSignal } = useSignal(`qeta:question_${question.id}`);
22
- useEffect(() => {
23
- if (lastSignal?.type === "question_stats") {
24
- setCorrectAnswer(lastSignal.correctAnswer);
25
- setAnswersCount(lastSignal.answersCount);
26
- setViews(lastSignal.views);
27
- }
28
- }, [lastSignal]);
29
- const questionRoute = useRouteRef(questionRouteRef);
30
- const userRoute = useRouteRef(userRouteRef);
31
- const theme = useTheme();
32
- const styles = useStyles();
33
- const { name, initials, user } = useEntityAuthor(question);
34
- return /* @__PURE__ */ React.createElement(
35
- Grid,
36
- {
37
- container: true,
38
- spacing: 0,
39
- className: styles.questionListItem,
40
- justifyContent: "flex-start"
41
- },
42
- /* @__PURE__ */ React.createElement(Grid, { container: true, item: true, xs: 1, justifyContent: "center" }, /* @__PURE__ */ React.createElement("div", { className: styles.questionCardVote }, /* @__PURE__ */ React.createElement(VoteButtons, { entity: question }), /* @__PURE__ */ React.createElement(FavoriteButton, { entity: question }))),
43
- /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 11, className: styles.questionListItemContent }, /* @__PURE__ */ React.createElement(Grid, { container: true, spacing: 1 }, /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(
44
- Chip,
45
- {
46
- variant: "outlined",
47
- size: "small",
48
- label: t("common.answers", {
49
- count: answersCount
50
- }),
51
- style: {
52
- borderColor: correctAnswer ? theme.palette.success.main : void 0,
53
- marginBottom: "0"
54
- }
55
- }
56
- ), /* @__PURE__ */ React.createElement(
57
- Chip,
58
- {
59
- variant: "outlined",
60
- size: "small",
61
- style: { border: "none", marginBottom: "0" },
62
- label: t("common.viewsShort", {
63
- count: views
64
- })
65
- }
66
- )), /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(Typography, { variant: "h5", component: "div" }, /* @__PURE__ */ React.createElement(
67
- Link,
68
- {
69
- to: entity ? `${questionRoute({
70
- id: question.id.toString(10)
71
- })}?entity=${entity}` : questionRoute({ id: question.id.toString(10) }),
72
- className: "qetaQuestionListItemQuestionBtn"
73
- },
74
- question.title
75
- )), /* @__PURE__ */ React.createElement(
76
- Typography,
77
- {
78
- variant: "caption",
79
- noWrap: true,
80
- component: "div",
81
- className: "qetaQuestionListItemContent",
82
- style: { marginBottom: "5px" }
83
- },
84
- DOMPurify.sanitize(
85
- truncate(removeMarkdownFormatting(question.content), 150)
86
- )
87
- )), /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(TagsAndEntities, { question }), /* @__PURE__ */ React.createElement(
88
- Typography,
89
- {
90
- variant: "caption",
91
- display: "inline",
92
- className: `${styles.questionListItemAuthor} qetaQuestionListItemAuthor`
93
- },
94
- /* @__PURE__ */ React.createElement(
95
- Avatar,
96
- {
97
- src: user?.spec?.profile?.picture,
98
- className: styles.questionListItemAvatar,
99
- alt: name,
100
- variant: "rounded"
101
- },
102
- initials
103
- ),
104
- question.author === "anonymous" ? t("common.anonymousAuthor") : /* @__PURE__ */ React.createElement(Link, { to: `${userRoute()}/${question.author}` }, name),
105
- " ",
106
- /* @__PURE__ */ React.createElement(
107
- Link,
108
- {
109
- to: entity ? `${questionRoute({
110
- id: question.id.toString(10)
111
- })}?entity=${entity}` : questionRoute({ id: question.id.toString(10) }),
112
- className: "qetaQuestionListItemQuestionBtn"
113
- },
114
- t("authorBox.askedAtTime"),
115
- " ",
116
- /* @__PURE__ */ React.createElement(RelativeTimeWithTooltip, { value: question.created })
117
- )
118
- ))))
119
- );
120
- };
121
-
122
- export { QuestionListItem };
123
- //# sourceMappingURL=QuestionListItem.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"QuestionListItem.esm.js","sources":["../../../src/components/QuestionsContainer/QuestionListItem.tsx"],"sourcesContent":["import { Avatar, Chip, Grid, Typography, useTheme } from '@material-ui/core';\nimport { Link } from '@backstage/core-components';\nimport React, { useEffect, useState } from 'react';\nimport DOMPurify from 'dompurify';\nimport {\n QetaSignal,\n QuestionResponse,\n removeMarkdownFormatting,\n truncate,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { TagsAndEntities } from '../QuestionPage/TagsAndEntities';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport {\n questionRouteRef,\n userRouteRef,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { RelativeTimeWithTooltip } from '../RelativeTimeWithTooltip/RelativeTimeWithTooltip';\nimport { useEntityAuthor, useStyles, useTranslation } from '../../utils/hooks';\nimport { useSignal } from '@backstage/plugin-signals-react';\nimport { VoteButtons } from '../QuestionPage/VoteButtons';\nimport { FavoriteButton } from '../QuestionPage/FavoriteButton';\n\nexport interface QuestionListItemProps {\n question: QuestionResponse;\n entity?: string;\n}\n\nexport const QuestionListItem = (props: QuestionListItemProps) => {\n const { question, entity } = props;\n\n const [correctAnswer, setCorrectAnswer] = useState(question.correctAnswer);\n const [answersCount, setAnswersCount] = useState(question.answersCount);\n const [views, setViews] = useState(question.views);\n const { t } = useTranslation();\n\n const { lastSignal } = useSignal<QetaSignal>(`qeta:question_${question.id}`);\n\n useEffect(() => {\n if (lastSignal?.type === 'question_stats') {\n setCorrectAnswer(lastSignal.correctAnswer);\n setAnswersCount(lastSignal.answersCount);\n setViews(lastSignal.views);\n }\n }, [lastSignal]);\n\n const questionRoute = useRouteRef(questionRouteRef);\n const userRoute = useRouteRef(userRouteRef);\n const theme = useTheme();\n const styles = useStyles();\n const { name, initials, user } = useEntityAuthor(question);\n\n return (\n <Grid\n container\n spacing={0}\n className={styles.questionListItem}\n justifyContent=\"flex-start\"\n >\n <Grid container item xs={1} justifyContent=\"center\">\n <div className={styles.questionCardVote}>\n <VoteButtons entity={question} />\n <FavoriteButton entity={question} />\n </div>\n </Grid>\n <Grid item xs={11} className={styles.questionListItemContent}>\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <Chip\n variant=\"outlined\"\n size=\"small\"\n label={t('common.answers', {\n count: answersCount,\n })}\n style={{\n borderColor: correctAnswer\n ? theme.palette.success.main\n : undefined,\n marginBottom: '0',\n }}\n />\n <Chip\n variant=\"outlined\"\n size=\"small\"\n style={{ border: 'none', marginBottom: '0' }}\n label={t('common.viewsShort', {\n count: views,\n })}\n />\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"h5\" component=\"div\">\n <Link\n to={\n entity\n ? `${questionRoute({\n id: question.id.toString(10),\n })}?entity=${entity}`\n : questionRoute({ id: question.id.toString(10) })\n }\n className=\"qetaQuestionListItemQuestionBtn\"\n >\n {question.title}\n </Link>\n </Typography>\n <Typography\n variant=\"caption\"\n noWrap\n component=\"div\"\n className=\"qetaQuestionListItemContent\"\n style={{ marginBottom: '5px' }}\n >\n {DOMPurify.sanitize(\n truncate(removeMarkdownFormatting(question.content), 150),\n )}\n </Typography>\n </Grid>\n <Grid item xs={12}>\n <TagsAndEntities question={question} />\n <Typography\n variant=\"caption\"\n display=\"inline\"\n className={`${styles.questionListItemAuthor} qetaQuestionListItemAuthor`}\n >\n <Avatar\n src={user?.spec?.profile?.picture}\n className={styles.questionListItemAvatar}\n alt={name}\n variant=\"rounded\"\n >\n {initials}\n </Avatar>\n {question.author === 'anonymous' ? (\n t('common.anonymousAuthor')\n ) : (\n <Link to={`${userRoute()}/${question.author}`}>{name}</Link>\n )}{' '}\n <Link\n to={\n entity\n ? `${questionRoute({\n id: question.id.toString(10),\n })}?entity=${entity}`\n : questionRoute({ id: question.id.toString(10) })\n }\n className=\"qetaQuestionListItemQuestionBtn\"\n >\n {t('authorBox.askedAtTime')}{' '}\n <RelativeTimeWithTooltip value={question.created} />\n </Link>\n </Typography>\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;AA2Ba,MAAA,gBAAA,GAAmB,CAAC,KAAiC,KAAA;AAChE,EAAM,MAAA,EAAE,QAAU,EAAA,MAAA,EAAW,GAAA,KAAA,CAAA;AAE7B,EAAA,MAAM,CAAC,aAAe,EAAA,gBAAgB,CAAI,GAAA,QAAA,CAAS,SAAS,aAAa,CAAA,CAAA;AACzE,EAAA,MAAM,CAAC,YAAc,EAAA,eAAe,CAAI,GAAA,QAAA,CAAS,SAAS,YAAY,CAAA,CAAA;AACtE,EAAA,MAAM,CAAC,KAAO,EAAA,QAAQ,CAAI,GAAA,QAAA,CAAS,SAAS,KAAK,CAAA,CAAA;AACjD,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAE7B,EAAA,MAAM,EAAE,UAAW,EAAA,GAAI,UAAsB,CAAiB,cAAA,EAAA,QAAA,CAAS,EAAE,CAAE,CAAA,CAAA,CAAA;AAE3E,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,UAAA,EAAY,SAAS,gBAAkB,EAAA;AACzC,MAAA,gBAAA,CAAiB,WAAW,aAAa,CAAA,CAAA;AACzC,MAAA,eAAA,CAAgB,WAAW,YAAY,CAAA,CAAA;AACvC,MAAA,QAAA,CAAS,WAAW,KAAK,CAAA,CAAA;AAAA,KAC3B;AAAA,GACF,EAAG,CAAC,UAAU,CAAC,CAAA,CAAA;AAEf,EAAM,MAAA,aAAA,GAAgB,YAAY,gBAAgB,CAAA,CAAA;AAClD,EAAM,MAAA,SAAA,GAAY,YAAY,YAAY,CAAA,CAAA;AAC1C,EAAA,MAAM,QAAQ,QAAS,EAAA,CAAA;AACvB,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAA,MAAM,EAAE,IAAM,EAAA,QAAA,EAAU,IAAK,EAAA,GAAI,gBAAgB,QAAQ,CAAA,CAAA;AAEzD,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAS,EAAA,IAAA;AAAA,MACT,OAAS,EAAA,CAAA;AAAA,MACT,WAAW,MAAO,CAAA,gBAAA;AAAA,MAClB,cAAe,EAAA,YAAA;AAAA,KAAA;AAAA,oBAEf,KAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAS,IAAC,EAAA,IAAA,EAAI,MAAC,EAAI,EAAA,CAAA,EAAG,cAAe,EAAA,QAAA,EAAA,kBACxC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,WAAW,MAAO,CAAA,gBAAA,EAAA,kBACpB,KAAA,CAAA,aAAA,CAAA,WAAA,EAAA,EAAY,MAAQ,EAAA,QAAA,EAAU,CAC/B,kBAAA,KAAA,CAAA,aAAA,CAAC,cAAe,EAAA,EAAA,MAAA,EAAQ,QAAU,EAAA,CACpC,CACF,CAAA;AAAA,oBACA,KAAA,CAAA,aAAA,CAAC,QAAK,IAAI,EAAA,IAAA,EAAC,IAAI,EAAI,EAAA,SAAA,EAAW,OAAO,uBACnC,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,QAAK,SAAS,EAAA,IAAA,EAAC,SAAS,CACvB,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,QAAK,IAAI,EAAA,IAAA,EAAC,IAAI,EACb,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,OAAQ,EAAA,UAAA;AAAA,QACR,IAAK,EAAA,OAAA;AAAA,QACL,KAAA,EAAO,EAAE,gBAAkB,EAAA;AAAA,UACzB,KAAO,EAAA,YAAA;AAAA,SACR,CAAA;AAAA,QACD,KAAO,EAAA;AAAA,UACL,WAAa,EAAA,aAAA,GACT,KAAM,CAAA,OAAA,CAAQ,QAAQ,IACtB,GAAA,KAAA,CAAA;AAAA,UACJ,YAAc,EAAA,GAAA;AAAA,SAChB;AAAA,OAAA;AAAA,KAEF,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,OAAQ,EAAA,UAAA;AAAA,QACR,IAAK,EAAA,OAAA;AAAA,QACL,KAAO,EAAA,EAAE,MAAQ,EAAA,MAAA,EAAQ,cAAc,GAAI,EAAA;AAAA,QAC3C,KAAA,EAAO,EAAE,mBAAqB,EAAA;AAAA,UAC5B,KAAO,EAAA,KAAA;AAAA,SACR,CAAA;AAAA,OAAA;AAAA,KAEL,CAAA,kBACC,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,EAAI,EAAA,EAAA,EAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,OAAQ,EAAA,IAAA,EAAK,WAAU,KACjC,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,EAAA,EACE,MACI,GAAA,CAAA,EAAG,aAAc,CAAA;AAAA,UACf,EAAI,EAAA,QAAA,CAAS,EAAG,CAAA,QAAA,CAAS,EAAE,CAAA;AAAA,SAC5B,CAAC,CAAW,QAAA,EAAA,MAAM,CACnB,CAAA,GAAA,aAAA,CAAc,EAAE,EAAA,EAAI,QAAS,CAAA,EAAA,CAAG,QAAS,CAAA,EAAE,GAAG,CAAA;AAAA,QAEpD,SAAU,EAAA,iCAAA;AAAA,OAAA;AAAA,MAET,QAAS,CAAA,KAAA;AAAA,KAEd,CACA,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,OAAQ,EAAA,SAAA;AAAA,QACR,MAAM,EAAA,IAAA;AAAA,QACN,SAAU,EAAA,KAAA;AAAA,QACV,SAAU,EAAA,6BAAA;AAAA,QACV,KAAA,EAAO,EAAE,YAAA,EAAc,KAAM,EAAA;AAAA,OAAA;AAAA,MAE5B,SAAU,CAAA,QAAA;AAAA,QACT,QAAS,CAAA,wBAAA,CAAyB,QAAS,CAAA,OAAO,GAAG,GAAG,CAAA;AAAA,OAC1D;AAAA,KAEJ,CACA,kBAAA,KAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,EACb,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,eAAgB,EAAA,EAAA,QAAA,EAAoB,CACrC,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,OAAQ,EAAA,SAAA;AAAA,QACR,OAAQ,EAAA,QAAA;AAAA,QACR,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,sBAAsB,CAAA,2BAAA,CAAA;AAAA,OAAA;AAAA,sBAE3C,KAAA,CAAA,aAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,IAAM,EAAA,IAAA,EAAM,OAAS,EAAA,OAAA;AAAA,UAC1B,WAAW,MAAO,CAAA,sBAAA;AAAA,UAClB,GAAK,EAAA,IAAA;AAAA,UACL,OAAQ,EAAA,SAAA;AAAA,SAAA;AAAA,QAEP,QAAA;AAAA,OACH;AAAA,MACC,SAAS,MAAW,KAAA,WAAA,GACnB,CAAE,CAAA,wBAAwB,oBAEzB,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,EAAI,EAAA,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,QAAS,CAAA,MAAM,MAAK,IAAK,CAAA;AAAA,MACpD,GAAA;AAAA,sBACH,KAAA,CAAA,aAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,EAAA,EACE,MACI,GAAA,CAAA,EAAG,aAAc,CAAA;AAAA,YACf,EAAI,EAAA,QAAA,CAAS,EAAG,CAAA,QAAA,CAAS,EAAE,CAAA;AAAA,WAC5B,CAAC,CAAW,QAAA,EAAA,MAAM,CACnB,CAAA,GAAA,aAAA,CAAc,EAAE,EAAA,EAAI,QAAS,CAAA,EAAA,CAAG,QAAS,CAAA,EAAE,GAAG,CAAA;AAAA,UAEpD,SAAU,EAAA,iCAAA;AAAA,SAAA;AAAA,QAET,EAAE,uBAAuB,CAAA;AAAA,QAAG,GAAA;AAAA,wBAC5B,KAAA,CAAA,aAAA,CAAA,uBAAA,EAAA,EAAwB,KAAO,EAAA,QAAA,CAAS,OAAS,EAAA,CAAA;AAAA,OACpD;AAAA,KAEJ,CACF,CACF,CAAA;AAAA,GACF,CAAA;AAEJ;;;;"}
@@ -1,243 +0,0 @@
1
- import { useTranslation, useQetaApi } from '../../utils/hooks.esm.js';
2
- import { Box, Typography, Grid, TextField, Button, Collapse } from '@material-ui/core';
3
- import React, { useEffect } from 'react';
4
- import useDebounce from 'react-use/lib/useDebounce';
5
- import { filterKeys, FilterPanel } from './FilterPanel.esm.js';
6
- import { QuestionList } from './QuestionList.esm.js';
7
- import FilterList from '@material-ui/icons/FilterList';
8
- import { useSearchParams } from 'react-router-dom';
9
- import { AskQuestionButton } from '../Buttons/AskQuestionButton.esm.js';
10
- import { EntityRefLink } from '@backstage/plugin-catalog-react';
11
- import { useAnalytics } from '@backstage/core-plugin-api';
12
- import { filterTags } from '@drodil/backstage-plugin-qeta-common';
13
- import { getFiltersWithDateRange } from '../../utils/utils.esm.js';
14
- import { TagFollowButton } from '../Buttons/TagFollowButton.esm.js';
15
- import { EntityFollowButton } from '../Buttons/EntityFollowButton.esm.js';
16
-
17
- const QuestionsContainer = (props) => {
18
- const {
19
- tags,
20
- author,
21
- entity,
22
- showFilters,
23
- showTitle,
24
- title,
25
- favorite,
26
- showAskButton,
27
- showNoQuestionsBtn
28
- } = props;
29
- const analytics = useAnalytics();
30
- const [page, setPage] = React.useState(1);
31
- const [questionsPerPage, setQuestionsPerPage] = React.useState(10);
32
- const [showFilterPanel, setShowFilterPanel] = React.useState(false);
33
- const [searchParams, setSearchParams] = useSearchParams();
34
- const [searchQuery, setSearchQuery] = React.useState("");
35
- const { t } = useTranslation();
36
- const [filters, setFilters] = React.useState({
37
- order: "desc",
38
- orderBy: "created",
39
- noAnswers: "false",
40
- noCorrectAnswer: "false",
41
- noVotes: "false",
42
- searchQuery: "",
43
- entity: entity ?? "",
44
- tags: tags ?? [],
45
- dateRange: ""
46
- });
47
- const onPageChange = (value) => {
48
- setPage(value);
49
- setSearchParams((prev) => {
50
- const newValue = prev;
51
- newValue.set("page", String(value));
52
- return newValue;
53
- });
54
- };
55
- const onFilterChange = (key, value) => {
56
- if (filters[key] === value) {
57
- return;
58
- }
59
- setPage(1);
60
- setFilters({ ...filters, ...{ [key]: value } });
61
- setSearchParams((prev) => {
62
- const newValue = prev;
63
- if (!value || value === "false") {
64
- newValue.delete(key);
65
- } else if (Array.isArray(value)) {
66
- if (value.length === 0) {
67
- newValue.delete(key);
68
- } else {
69
- newValue.set(key, value.join(","));
70
- }
71
- } else if (value.length > 0) {
72
- newValue.set(key, value);
73
- } else {
74
- newValue.delete(key);
75
- }
76
- return newValue;
77
- });
78
- };
79
- const onSearchQueryChange = (event) => {
80
- onPageChange(1);
81
- if (event.target.value) {
82
- analytics.captureEvent("qeta_search", event.target.value);
83
- }
84
- setSearchQuery(event.target.value);
85
- };
86
- useDebounce(
87
- () => {
88
- if (filters.searchQuery !== searchQuery) {
89
- setFilters({ ...filters, searchQuery });
90
- }
91
- },
92
- 400,
93
- [searchQuery]
94
- );
95
- useEffect(() => {
96
- let filtersApplied = false;
97
- searchParams.forEach((value, key) => {
98
- try {
99
- if (key === "page") {
100
- const pv = Number.parseInt(value, 10);
101
- if (pv > 0) {
102
- setPage(pv);
103
- } else {
104
- setPage(1);
105
- }
106
- } else if (key === "questionsPerPage") {
107
- const qpp = Number.parseInt(value, 10);
108
- if (qpp > 0) setQuestionsPerPage(qpp);
109
- } else if (filterKeys.includes(key)) {
110
- filtersApplied = true;
111
- if (key === "tags") {
112
- filters.tags = filterTags(value) ?? [];
113
- } else {
114
- filters[key] = value;
115
- }
116
- }
117
- } catch (_e) {
118
- }
119
- });
120
- setFilters(filters);
121
- if (filtersApplied) {
122
- setShowFilterPanel(true);
123
- }
124
- }, [searchParams, filters]);
125
- const {
126
- value: response,
127
- loading,
128
- error
129
- } = useQetaApi(
130
- (api) => {
131
- return api.getQuestions({
132
- limit: questionsPerPage,
133
- offset: (page - 1) * questionsPerPage,
134
- includeEntities: true,
135
- author,
136
- favorite,
137
- ...getFiltersWithDateRange(filters)
138
- });
139
- },
140
- [page, filters, questionsPerPage]
141
- );
142
- const onPageSizeChange = (value) => {
143
- if (response) {
144
- let newPage = page;
145
- while (newPage * value > response.total) {
146
- newPage -= 1;
147
- }
148
- onPageChange(Math.max(1, newPage));
149
- }
150
- setQuestionsPerPage(value);
151
- setSearchParams((prev) => {
152
- const newValue = prev;
153
- newValue.set("questionsPerPage", String(value));
154
- return newValue;
155
- });
156
- };
157
- let shownTitle = title;
158
- let link = void 0;
159
- let btn = void 0;
160
- if (author) {
161
- shownTitle = t("questionsContainer.title.questionsBy");
162
- link = /* @__PURE__ */ React.createElement(EntityRefLink, { entityRef: author, hideIcon: true, defaultKind: "user" });
163
- } else if (entity) {
164
- shownTitle = t("questionsContainer.title.questionsAbout");
165
- link = /* @__PURE__ */ React.createElement(EntityRefLink, { entityRef: entity });
166
- btn = /* @__PURE__ */ React.createElement(EntityFollowButton, { entityRef: entity });
167
- } else if (tags) {
168
- shownTitle = t("questionsContainer.title.questionsTagged", {
169
- tags: tags.join(", ")
170
- });
171
- if (tags.length === 1) {
172
- btn = /* @__PURE__ */ React.createElement(TagFollowButton, { tag: tags[0] });
173
- }
174
- } else if (favorite) {
175
- shownTitle = t("questionsContainer.title.favorite");
176
- }
177
- return /* @__PURE__ */ React.createElement(Box, { className: "qetaQuestionsContainer" }, showTitle && /* @__PURE__ */ React.createElement(
178
- Typography,
179
- {
180
- variant: "h5",
181
- className: "qetaQuestionsContainerTitle",
182
- style: { marginBottom: "1.5rem" }
183
- },
184
- shownTitle,
185
- " ",
186
- link,
187
- " ",
188
- btn
189
- ), /* @__PURE__ */ React.createElement(Grid, { container: true, justifyContent: "space-between" }, /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12, md: 4 }, /* @__PURE__ */ React.createElement(
190
- TextField,
191
- {
192
- id: "search-bar",
193
- fullWidth: true,
194
- onChange: onSearchQueryChange,
195
- label: t("questionsContainer.search.label"),
196
- className: "qetaQuestionsContainerSearchInput",
197
- variant: "outlined",
198
- placeholder: t("questionsContainer.search.placeholder"),
199
- size: "small",
200
- style: { marginBottom: "5px" }
201
- }
202
- )), showAskButton && /* @__PURE__ */ React.createElement(Grid, { item: true }, /* @__PURE__ */ React.createElement(
203
- AskQuestionButton,
204
- {
205
- entity: entity ?? filters.entity,
206
- entityPage: entity !== void 0,
207
- tags
208
- }
209
- ))), /* @__PURE__ */ React.createElement(Grid, { container: true, justifyContent: "space-between" }, /* @__PURE__ */ React.createElement(Grid, { item: true }, /* @__PURE__ */ React.createElement(
210
- Typography,
211
- {
212
- variant: "h6",
213
- className: "qetaQuestionsContainerQuestionCount"
214
- },
215
- t("common.questions", { count: response?.total ?? 0 })
216
- )), (showFilters ?? true) && /* @__PURE__ */ React.createElement(Grid, { item: true }, /* @__PURE__ */ React.createElement(
217
- Button,
218
- {
219
- onClick: () => setShowFilterPanel(!showFilterPanel),
220
- className: "qetaQuestionsContainerFilterPanelBtn",
221
- startIcon: /* @__PURE__ */ React.createElement(FilterList, null)
222
- },
223
- t("filterPanel.filterButton")
224
- ))), (showFilters ?? true) && /* @__PURE__ */ React.createElement(Collapse, { in: showFilterPanel }, /* @__PURE__ */ React.createElement(FilterPanel, { onChange: onFilterChange, filters })), /* @__PURE__ */ React.createElement(
225
- QuestionList,
226
- {
227
- loading,
228
- error,
229
- response,
230
- onPageChange,
231
- onPageSizeChange,
232
- entity,
233
- page,
234
- pageSize: questionsPerPage,
235
- showNoQuestionsBtn,
236
- entityPage: entity !== void 0,
237
- tags
238
- }
239
- ));
240
- };
241
-
242
- export { QuestionsContainer };
243
- //# sourceMappingURL=QuestionsContainer.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"QuestionsContainer.esm.js","sources":["../../../src/components/QuestionsContainer/QuestionsContainer.tsx"],"sourcesContent":["import { useQetaApi, useTranslation } from '../../utils/hooks';\nimport {\n Box,\n Button,\n Collapse,\n Grid,\n TextField,\n Typography,\n} from '@material-ui/core';\n\nimport React, { useEffect } from 'react';\nimport useDebounce from 'react-use/lib/useDebounce';\nimport { FilterKey, filterKeys, FilterPanel, Filters } from './FilterPanel';\nimport { QuestionList } from './QuestionList';\nimport FilterList from '@material-ui/icons/FilterList';\nimport { useSearchParams } from 'react-router-dom';\nimport { AskQuestionButton } from '../Buttons/AskQuestionButton';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport { useAnalytics } from '@backstage/core-plugin-api';\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport { getFiltersWithDateRange } from '../../utils/utils';\nimport { TagFollowButton } from '../Buttons/TagFollowButton';\nimport { EntityFollowButton } from '../Buttons/EntityFollowButton';\n\nexport interface QuestionsContainerProps {\n tags?: string[];\n author?: string;\n entity?: string;\n showFilters?: boolean;\n showTitle?: boolean;\n title?: string;\n favorite?: boolean;\n showAskButton?: boolean;\n showNoQuestionsBtn?: boolean;\n}\n\nexport const QuestionsContainer = (props: QuestionsContainerProps) => {\n const {\n tags,\n author,\n entity,\n showFilters,\n showTitle,\n title,\n favorite,\n showAskButton,\n showNoQuestionsBtn,\n } = props;\n const analytics = useAnalytics();\n const [page, setPage] = React.useState(1);\n const [questionsPerPage, setQuestionsPerPage] = React.useState(10);\n const [showFilterPanel, setShowFilterPanel] = React.useState(false);\n const [searchParams, setSearchParams] = useSearchParams();\n const [searchQuery, setSearchQuery] = React.useState('');\n const { t } = useTranslation();\n const [filters, setFilters] = React.useState<Filters>({\n order: 'desc',\n orderBy: 'created',\n noAnswers: 'false',\n noCorrectAnswer: 'false',\n noVotes: 'false',\n searchQuery: '',\n entity: entity ?? '',\n tags: tags ?? [],\n dateRange: '',\n });\n\n const onPageChange = (value: number) => {\n setPage(value);\n setSearchParams(prev => {\n const newValue = prev;\n newValue.set('page', String(value));\n return newValue;\n });\n };\n\n const onFilterChange = (key: FilterKey, value: string | string[]) => {\n if (filters[key] === value) {\n return;\n }\n\n setPage(1);\n setFilters({ ...filters, ...{ [key]: value } });\n setSearchParams(prev => {\n const newValue = prev;\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 (value.length > 0) {\n newValue.set(key, value);\n } else {\n newValue.delete(key);\n }\n return newValue;\n });\n };\n\n const onSearchQueryChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onPageChange(1);\n if (event.target.value) {\n analytics.captureEvent('qeta_search', event.target.value);\n }\n setSearchQuery(event.target.value);\n };\n\n useDebounce(\n () => {\n if (filters.searchQuery !== searchQuery) {\n setFilters({ ...filters, searchQuery: searchQuery });\n }\n },\n 400,\n [searchQuery],\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 }\n } else if (key === 'questionsPerPage') {\n const qpp = Number.parseInt(value, 10);\n if (qpp > 0) setQuestionsPerPage(qpp);\n } else if (filterKeys.includes(key as FilterKey)) {\n filtersApplied = true;\n if (key === 'tags') {\n filters.tags = filterTags(value) ?? [];\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 const {\n value: response,\n loading,\n error,\n } = useQetaApi(\n api => {\n return api.getQuestions({\n limit: questionsPerPage,\n offset: (page - 1) * questionsPerPage,\n includeEntities: true,\n author,\n favorite,\n ...getFiltersWithDateRange(filters),\n });\n },\n [page, filters, questionsPerPage],\n );\n\n const onPageSizeChange = (value: number) => {\n if (response) {\n let newPage = page;\n while (newPage * value > response.total) {\n newPage -= 1;\n }\n onPageChange(Math.max(1, newPage));\n }\n setQuestionsPerPage(value);\n setSearchParams(prev => {\n const newValue = prev;\n newValue.set('questionsPerPage', String(value));\n return newValue;\n });\n };\n\n let shownTitle = title;\n let link = undefined;\n let btn = undefined;\n if (author) {\n shownTitle = t('questionsContainer.title.questionsBy');\n link = <EntityRefLink entityRef={author} hideIcon defaultKind=\"user\" />;\n } else if (entity) {\n shownTitle = t('questionsContainer.title.questionsAbout');\n link = <EntityRefLink entityRef={entity} />;\n btn = <EntityFollowButton entityRef={entity} />;\n } else if (tags) {\n shownTitle = t('questionsContainer.title.questionsTagged', {\n tags: tags.join(', '),\n });\n if (tags.length === 1) {\n btn = <TagFollowButton tag={tags[0]} />;\n }\n } else if (favorite) {\n shownTitle = t('questionsContainer.title.favorite');\n }\n\n return (\n <Box className=\"qetaQuestionsContainer\">\n {showTitle && (\n <Typography\n variant=\"h5\"\n className=\"qetaQuestionsContainerTitle\"\n style={{ marginBottom: '1.5rem' }}\n >\n {shownTitle} {link} {btn}\n </Typography>\n )}\n <Grid container justifyContent=\"space-between\">\n <Grid item xs={12} md={4}>\n <TextField\n id=\"search-bar\"\n fullWidth\n onChange={onSearchQueryChange}\n label={t('questionsContainer.search.label')}\n className=\"qetaQuestionsContainerSearchInput\"\n variant=\"outlined\"\n placeholder={t('questionsContainer.search.placeholder')}\n size=\"small\"\n style={{ marginBottom: '5px' }}\n />\n </Grid>\n {showAskButton && (\n <Grid item>\n <AskQuestionButton\n entity={entity ?? filters.entity}\n entityPage={entity !== undefined}\n tags={tags}\n />\n </Grid>\n )}\n </Grid>\n <Grid container justifyContent=\"space-between\">\n <Grid item>\n <Typography\n variant=\"h6\"\n className=\"qetaQuestionsContainerQuestionCount\"\n >\n {t('common.questions', { count: response?.total ?? 0 })}\n </Typography>\n </Grid>\n {(showFilters ?? true) && (\n <Grid item>\n <Button\n onClick={() => setShowFilterPanel(!showFilterPanel)}\n className=\"qetaQuestionsContainerFilterPanelBtn\"\n startIcon={<FilterList />}\n >\n {t('filterPanel.filterButton')}\n </Button>\n </Grid>\n )}\n </Grid>\n {(showFilters ?? true) && (\n <Collapse in={showFilterPanel}>\n <FilterPanel onChange={onFilterChange} filters={filters} />\n </Collapse>\n )}\n <QuestionList\n loading={loading}\n error={error}\n response={response}\n onPageChange={onPageChange}\n onPageSizeChange={onPageSizeChange}\n entity={entity}\n page={page}\n pageSize={questionsPerPage}\n showNoQuestionsBtn={showNoQuestionsBtn}\n entityPage={entity !== undefined}\n tags={tags}\n />\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import { Tooltip } from '@material-ui/core';
2
- import React, { useEffect } from 'react';
3
- import RelativeTime from 'react-relative-time';
4
-
5
- const RelativeTimeWithTooltip = (props) => {
6
- const { value } = props;
7
- let date = value;
8
- const [updates, setUpdates] = React.useState(1);
9
- useEffect(() => {
10
- const interval = setInterval(() => {
11
- setUpdates(updates === 1 ? 0 : 1);
12
- }, 3e4);
13
- return () => clearInterval(interval);
14
- }, [updates, setUpdates]);
15
- if (typeof date === "string" || date instanceof String) {
16
- date = new Date(date);
17
- }
18
- return /* @__PURE__ */ React.createElement(Tooltip, { title: date.toLocaleString(navigator.languages) }, /* @__PURE__ */ React.createElement(RelativeTime, { value: date }));
19
- };
20
-
21
- export { RelativeTimeWithTooltip };
22
- //# sourceMappingURL=RelativeTimeWithTooltip.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RelativeTimeWithTooltip.esm.js","sources":["../../../src/components/RelativeTimeWithTooltip/RelativeTimeWithTooltip.tsx"],"sourcesContent":["import { Tooltip } from '@material-ui/core';\nimport React, { useEffect } from 'react';\n// @ts-ignore\nimport RelativeTime from 'react-relative-time';\n\nexport const RelativeTimeWithTooltip = (props: { value: Date | string }) => {\n const { value } = props;\n let date = value;\n const [updates, setUpdates] = React.useState(1);\n\n useEffect(() => {\n const interval = setInterval(() => {\n setUpdates(updates === 1 ? 0 : 1);\n }, 30000);\n return () => clearInterval(interval);\n }, [updates, setUpdates]);\n\n if (typeof date === 'string' || date instanceof String) {\n date = new Date(date);\n }\n\n return (\n <Tooltip title={date.toLocaleString(navigator.languages)}>\n <RelativeTime value={date} />\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;AAKa,MAAA,uBAAA,GAA0B,CAAC,KAAoC,KAAA;AAC1E,EAAM,MAAA,EAAE,OAAU,GAAA,KAAA,CAAA;AAClB,EAAA,IAAI,IAAO,GAAA,KAAA,CAAA;AACX,EAAA,MAAM,CAAC,OAAS,EAAA,UAAU,CAAI,GAAA,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA;AAE9C,EAAA,SAAA,CAAU,MAAM;AACd,IAAM,MAAA,QAAA,GAAW,YAAY,MAAM;AACjC,MAAW,UAAA,CAAA,OAAA,KAAY,CAAI,GAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAAA,OAC/B,GAAK,CAAA,CAAA;AACR,IAAO,OAAA,MAAM,cAAc,QAAQ,CAAA,CAAA;AAAA,GAClC,EAAA,CAAC,OAAS,EAAA,UAAU,CAAC,CAAA,CAAA;AAExB,EAAA,IAAI,OAAO,IAAA,KAAS,QAAY,IAAA,IAAA,YAAgB,MAAQ,EAAA;AACtD,IAAO,IAAA,GAAA,IAAI,KAAK,IAAI,CAAA,CAAA;AAAA,GACtB;AAEA,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,IAAA,CAAK,cAAe,CAAA,SAAA,CAAU,SAAS,CAAA,EAAA,kBACpD,KAAA,CAAA,aAAA,CAAA,YAAA,EAAA,EAAa,KAAO,EAAA,IAAA,EAAM,CAC7B,CAAA,CAAA;AAEJ;;;;"}