@drodil/backstage-plugin-qeta 3.59.1 → 3.59.5

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 (78) hide show
  1. package/dist/alpha.d.ts +235 -2
  2. package/dist/alpha.esm.js +2 -2
  3. package/dist/alpha.esm.js.map +1 -1
  4. package/dist/components/ArticlePage/ArticlePage.esm.js.map +1 -1
  5. package/dist/components/ArticlesPage/ArticlesPage.esm.js.map +1 -1
  6. package/dist/components/AskPage/AskPage.esm.js.map +1 -1
  7. package/dist/components/CollectionCreatePage/CollectionCreatePage.esm.js.map +1 -1
  8. package/dist/components/CollectionPage/CollectionPage.esm.js.map +1 -1
  9. package/dist/components/CollectionsPage/CollectionsPage.esm.js.map +1 -1
  10. package/dist/components/ContentHealthCard/ContentHealthCard.esm.js.map +1 -1
  11. package/dist/components/ContentHealthCard/ReviewList.esm.js.map +1 -1
  12. package/dist/components/CreateLinkPage/CreateLinkPage.esm.js.map +1 -1
  13. package/dist/components/EntityCards/EntityPostsContainerCard.esm.js.map +1 -1
  14. package/dist/components/EntityCards/EntityPostsGridCard.esm.js.map +1 -1
  15. package/dist/components/EntityPage/EntityPage.esm.js.map +1 -1
  16. package/dist/components/EntityPostsContent/EntityPostsContent.esm.js.map +1 -1
  17. package/dist/components/FavoritePage/FavoritePage.esm.js.map +1 -1
  18. package/dist/components/HomePage/HomePage.esm.js +1 -1
  19. package/dist/components/HomePage/HomePage.esm.js.map +1 -1
  20. package/dist/components/HomeTimeline/HomeTimeline.esm.js.map +1 -1
  21. package/dist/components/HomeTimeline/index.esm.js +5 -1
  22. package/dist/components/HomeTimeline/index.esm.js.map +1 -1
  23. package/dist/components/LinkPage/LinkPage.esm.js +1 -1
  24. package/dist/components/LinkPage/LinkPage.esm.js.map +1 -1
  25. package/dist/components/LinksPage/LinksPage.esm.js.map +1 -1
  26. package/dist/components/ModeratorPage/ModeratorPage.esm.js.map +1 -1
  27. package/dist/components/PostsTableCard/Content.esm.js.map +1 -1
  28. package/dist/components/PostsTableCard/index.esm.js +5 -1
  29. package/dist/components/PostsTableCard/index.esm.js.map +1 -1
  30. package/dist/components/QetaPage/QetaPage.esm.js +1 -1
  31. package/dist/components/QetaPage/QetaPage.esm.js.map +1 -1
  32. package/dist/components/QetaPage/index.esm.js +5 -1
  33. package/dist/components/QetaPage/index.esm.js.map +1 -1
  34. package/dist/components/QetaSearchResultListItem/QetaSearchResultListItem.esm.js +2 -2
  35. package/dist/components/QetaSearchResultListItem/QetaSearchResultListItem.esm.js.map +1 -1
  36. package/dist/components/QetaSearchResultListItem/index.esm.js +5 -1
  37. package/dist/components/QetaSearchResultListItem/index.esm.js.map +1 -1
  38. package/dist/components/QuestionPage/QuestionPage.esm.js +1 -1
  39. package/dist/components/QuestionPage/QuestionPage.esm.js.map +1 -1
  40. package/dist/components/QuestionsPage/QuestionsPage.esm.js.map +1 -1
  41. package/dist/components/ReviewPage/ReviewPage.esm.js.map +1 -1
  42. package/dist/components/ReviewPage/index.esm.js +5 -1
  43. package/dist/components/ReviewPage/index.esm.js.map +1 -1
  44. package/dist/components/RightContent/ArticlesRightContent.esm.js.map +1 -1
  45. package/dist/components/RightContent/AskRightContent.esm.js.map +1 -1
  46. package/dist/components/RightContent/CollectionsRightContent.esm.js.map +1 -1
  47. package/dist/components/RightContent/DefaultRightContent.esm.js.map +1 -1
  48. package/dist/components/RightContent/EntitiesRightContent.esm.js.map +1 -1
  49. package/dist/components/RightContent/EntityRightContent.esm.js.map +1 -1
  50. package/dist/components/RightContent/FavoriteRightContent.esm.js.map +1 -1
  51. package/dist/components/RightContent/HomeRightContent.esm.js.map +1 -1
  52. package/dist/components/RightContent/LinkedPosts.esm.js.map +1 -1
  53. package/dist/components/RightContent/LinksRightContent.esm.js.map +1 -1
  54. package/dist/components/RightContent/PostRightContent.esm.js.map +1 -1
  55. package/dist/components/RightContent/QuestionsRightContent.esm.js.map +1 -1
  56. package/dist/components/RightContent/RightContent.esm.js +1 -1
  57. package/dist/components/RightContent/RightContent.esm.js.map +1 -1
  58. package/dist/components/RightContent/SimilarPosts.esm.js.map +1 -1
  59. package/dist/components/RightContent/SimilarQuestions.esm.js.map +1 -1
  60. package/dist/components/RightContent/TagRightContent.esm.js.map +1 -1
  61. package/dist/components/RightContent/TagsRightContent.esm.js.map +1 -1
  62. package/dist/components/RightContent/UsersRightContent.esm.js.map +1 -1
  63. package/dist/components/SettingsPage/SettingsPage.esm.js +1 -1
  64. package/dist/components/SettingsPage/SettingsPage.esm.js.map +1 -1
  65. package/dist/components/Statistics/GlobalStatsContent.esm.js.map +1 -1
  66. package/dist/components/Statistics/StatisticsPage.esm.js.map +1 -1
  67. package/dist/components/TagPage/TagPage.esm.js.map +1 -1
  68. package/dist/components/TechDocsAskQuestionAddon/TechDocsAskQuestionAddon.esm.js.map +1 -1
  69. package/dist/components/UserPage/UserPage.esm.js +1 -1
  70. package/dist/components/UserPage/UserPage.esm.js.map +1 -1
  71. package/dist/components/UserPage/UserStatsContent.esm.js.map +1 -1
  72. package/dist/components/UsersPage/UsersPage.esm.js.map +1 -1
  73. package/dist/components/WritePage/WritePage.esm.js.map +1 -1
  74. package/dist/hooks/useSidebarSettings.esm.js.map +1 -1
  75. package/dist/package.json.esm.js +5 -5
  76. package/dist/plugin.esm.js +1 -1
  77. package/dist/plugin.esm.js.map +1 -1
  78. package/package.json +26 -26
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { makeStyles, useTheme, CardContent, Typography, FormControlLabel, Switch, Box, ButtonGroup, Button } from '@material-ui/core';
2
+ import { useTheme, CardContent, Typography, FormControlLabel, Switch, Box, ButtonGroup, Button, makeStyles } from '@material-ui/core';
3
3
  import { InfoCard } from '@backstage/core-components';
4
4
  import { useUserSettings, qetaTranslationRef, useAI } from '@drodil/backstage-plugin-qeta-react';
5
5
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsPage.esm.js","sources":["../../../src/components/SettingsPage/SettingsPage.tsx"],"sourcesContent":["import {\n Box,\n Button,\n ButtonGroup,\n CardContent,\n FormControlLabel,\n makeStyles,\n Switch,\n Typography,\n useTheme,\n} from '@material-ui/core';\nimport { InfoCard } from '@backstage/core-components';\nimport {\n qetaTranslationRef,\n useAI,\n useUserSettings,\n ViewType,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\n\nconst useStyles = makeStyles(theme => ({\n content: {\n maxWidth: '800px',\n margin: '0 auto',\n },\n section: {\n marginBottom: theme.spacing(3),\n },\n sectionTitle: {\n marginBottom: theme.spacing(2),\n fontWeight: 600,\n },\n settingItem: {\n marginBottom: theme.spacing(2),\n },\n description: {\n color: theme.palette.text.secondary,\n fontSize: '0.875rem',\n marginTop: theme.spacing(0.5),\n },\n viewTypeItem: {\n marginBottom: theme.spacing(2),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n viewTypeLabel: {\n minWidth: '200px',\n },\n}));\n\nexport const SettingsPage = () => {\n const classes = useStyles();\n const theme = useTheme();\n const {\n settings,\n setSetting,\n getSetting,\n resetSettings,\n isLoaded,\n updateSettings,\n } = useUserSettings();\n const { t } = useTranslationRef(qetaTranslationRef);\n const { isAIEnabled } = useAI();\n const configApi = useApi(configApiRef);\n const allowAnonymous = configApi.getOptionalBoolean('qeta.allowAnonymous');\n\n const viewTypes = [\n {\n key: 'posts-question',\n label: t('settingsPage.viewTypePreferences.labels.questions', {}),\n },\n {\n key: 'posts-article',\n label: t('settingsPage.viewTypePreferences.labels.articles', {}),\n },\n {\n key: 'posts-link',\n label: t('settingsPage.viewTypePreferences.labels.links', {}),\n },\n {\n key: 'favorites',\n label: t('settingsPage.viewTypePreferences.labels.favorites', {}),\n },\n {\n key: 'collections',\n label: t('settingsPage.viewTypePreferences.labels.collections', {}),\n },\n {\n key: 'tags',\n label: t('settingsPage.viewTypePreferences.labels.tags', {}),\n },\n {\n key: 'users',\n label: t('settingsPage.viewTypePreferences.labels.users', {}),\n },\n {\n key: 'entities',\n label: t('settingsPage.viewTypePreferences.labels.entities', {}),\n },\n {\n key: 'tag-posts',\n label: t('settingsPage.viewTypePreferences.labels.tagPosts', {}),\n },\n {\n key: 'collection-posts',\n label: t('settingsPage.viewTypePreferences.labels.collectionPosts', {}),\n },\n {\n key: 'user-questions',\n label: t('settingsPage.viewTypePreferences.labels.userQuestions', {}),\n },\n {\n key: 'user-articles',\n label: t('settingsPage.viewTypePreferences.labels.userArticles', {}),\n },\n {\n key: 'user-links',\n label: t('settingsPage.viewTypePreferences.labels.userLinks', {}),\n },\n {\n key: 'user-collections',\n label: t('settingsPage.viewTypePreferences.labels.userCollections', {}),\n },\n {\n key: 'user-answers',\n label: t('settingsPage.viewTypePreferences.labels.userAnswers', {}),\n },\n ];\n\n const handleViewTypeChange = (key: string, value: ViewType | null) => {\n if (value === null) {\n updateSettings({\n viewType: { ...getSetting('viewType'), [key]: undefined as any },\n });\n } else {\n updateSettings({\n viewType: { ...getSetting('viewType'), [key]: value },\n });\n }\n };\n\n const getViewType = (key: string): ViewType | null => {\n return settings.viewType[key] || null;\n };\n\n if (!isLoaded) {\n return null;\n }\n\n return (\n <InfoCard title={t('settingsPage.title', {})} data-testid=\"settings-page\">\n <CardContent>\n <div className={classes.section}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n {t('settingsPage.editorPreferences', {})}\n </Typography>\n\n <div className={classes.settingItem} data-testid=\"auto-save-setting\">\n <FormControlLabel\n control={\n <Switch\n checked={settings.autoSaveEnabled}\n onChange={e =>\n setSetting('autoSaveEnabled', e.target.checked)\n }\n color=\"primary\"\n data-testid=\"auto-save-switch\"\n />\n }\n label={t('settingsPage.autoSave.label', {})}\n />\n <Typography className={classes.description}>\n {t('settingsPage.autoSave.description', {})}\n </Typography>\n </div>\n\n {allowAnonymous && (\n <div\n className={classes.settingItem}\n data-testid=\"anonymous-posting-setting\"\n >\n <FormControlLabel\n control={\n <Switch\n checked={settings.anonymousPosting}\n onChange={e =>\n setSetting('anonymousPosting', e.target.checked)\n }\n color=\"primary\"\n data-testid=\"anonymous-posting-switch\"\n />\n }\n label={t('settingsPage.anonymousPosting.label', {})}\n />\n <Typography className={classes.description}>\n {t('settingsPage.anonymousPosting.description', {})}\n </Typography>\n </div>\n )}\n </div>\n\n <div className={classes.section}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n {t('settingsPage.displayPreferences', {})}\n </Typography>\n\n {isAIEnabled && (\n <div\n className={classes.settingItem}\n data-testid=\"ai-answer-setting\"\n >\n <FormControlLabel\n control={\n <Switch\n checked={settings.aiAnswerExpanded}\n onChange={e =>\n setSetting('aiAnswerExpanded', e.target.checked)\n }\n color=\"primary\"\n data-testid=\"ai-answer-switch\"\n />\n }\n label={t('settingsPage.aiAnswerExpanded.label', {})}\n />\n <Typography className={classes.description}>\n {t('settingsPage.aiAnswerExpanded.description', {})}\n </Typography>\n </div>\n )}\n\n <div className={classes.settingItem} data-testid=\"pagination-setting\">\n <FormControlLabel\n control={\n <Switch\n checked={settings.usePagination}\n onChange={e => setSetting('usePagination', e.target.checked)}\n color=\"primary\"\n data-testid=\"pagination-switch\"\n />\n }\n label={t('settingsPage.usePagination.label', {})}\n />\n <Typography className={classes.description}>\n {t('settingsPage.usePagination.description', {})}\n </Typography>\n </div>\n\n <Box mt={3}>\n <Typography\n variant=\"subtitle1\"\n style={{ fontWeight: 500, marginBottom: 16 }}\n >\n {t('settingsPage.viewTypePreferences.title', {})}\n </Typography>\n <Typography\n className={classes.description}\n style={{ marginBottom: 16 }}\n >\n {t('settingsPage.viewTypePreferences.description', {})}\n </Typography>\n\n {viewTypes.map(({ key, label }) => {\n const currentView = getViewType(key);\n return (\n <div\n key={key}\n className={classes.viewTypeItem}\n data-testid={`view-type-${key}`}\n >\n <Typography className={classes.viewTypeLabel}>\n {label}\n </Typography>\n <ButtonGroup size=\"small\" color=\"primary\">\n <Button\n variant={\n currentView === 'grid' ? 'contained' : 'outlined'\n }\n onClick={() => handleViewTypeChange(key, 'grid')}\n data-testid={`view-type-${key}-grid`}\n data-selected={currentView === 'grid'}\n >\n {t('settingsPage.viewTypePreferences.grid', {})}\n </Button>\n <Button\n variant={\n currentView === 'list' ? 'contained' : 'outlined'\n }\n onClick={() => handleViewTypeChange(key, 'list')}\n data-testid={`view-type-${key}-list`}\n data-selected={currentView === 'list'}\n >\n {t('settingsPage.viewTypePreferences.list', {})}\n </Button>\n <Button\n variant={currentView === null ? 'contained' : 'outlined'}\n onClick={() => handleViewTypeChange(key, null)}\n data-testid={`view-type-${key}-default`}\n data-selected={currentView === null}\n >\n {t('settingsPage.viewTypePreferences.default', {})}\n </Button>\n </ButtonGroup>\n </div>\n );\n })}\n </Box>\n </div>\n\n <Box mt={4} pt={3} borderTop={`1px solid ${theme.palette.divider}`}>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n onClick={() => {\n resetSettings();\n }}\n data-testid=\"reset-all-settings-button\"\n >\n {t('settingsPage.resetAllSettings', {})}\n </Button>\n <Typography\n className={classes.description}\n style={{ marginTop: theme.spacing(1) }}\n >\n {t('settingsPage.resetAllSettingsDescription', {})}\n </Typography>\n </Box>\n </CardContent>\n </InfoCard>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SettingsPage.esm.js","sources":["../../../src/components/SettingsPage/SettingsPage.tsx"],"sourcesContent":["import {\n Box,\n Button,\n ButtonGroup,\n CardContent,\n FormControlLabel,\n makeStyles,\n Switch,\n Typography,\n useTheme,\n} from '@material-ui/core';\nimport { InfoCard } from '@backstage/core-components';\nimport {\n qetaTranslationRef,\n useAI,\n useUserSettings,\n ViewType,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\n\nconst useStyles = makeStyles(theme => ({\n content: {\n maxWidth: '800px',\n margin: '0 auto',\n },\n section: {\n marginBottom: theme.spacing(3),\n },\n sectionTitle: {\n marginBottom: theme.spacing(2),\n fontWeight: 600,\n },\n settingItem: {\n marginBottom: theme.spacing(2),\n },\n description: {\n color: theme.palette.text.secondary,\n fontSize: '0.875rem',\n marginTop: theme.spacing(0.5),\n },\n viewTypeItem: {\n marginBottom: theme.spacing(2),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n viewTypeLabel: {\n minWidth: '200px',\n },\n}));\n\nexport const SettingsPage = () => {\n const classes = useStyles();\n const theme = useTheme();\n const {\n settings,\n setSetting,\n getSetting,\n resetSettings,\n isLoaded,\n updateSettings,\n } = useUserSettings();\n const { t } = useTranslationRef(qetaTranslationRef);\n const { isAIEnabled } = useAI();\n const configApi = useApi(configApiRef);\n const allowAnonymous = configApi.getOptionalBoolean('qeta.allowAnonymous');\n\n const viewTypes = [\n {\n key: 'posts-question',\n label: t('settingsPage.viewTypePreferences.labels.questions', {}),\n },\n {\n key: 'posts-article',\n label: t('settingsPage.viewTypePreferences.labels.articles', {}),\n },\n {\n key: 'posts-link',\n label: t('settingsPage.viewTypePreferences.labels.links', {}),\n },\n {\n key: 'favorites',\n label: t('settingsPage.viewTypePreferences.labels.favorites', {}),\n },\n {\n key: 'collections',\n label: t('settingsPage.viewTypePreferences.labels.collections', {}),\n },\n {\n key: 'tags',\n label: t('settingsPage.viewTypePreferences.labels.tags', {}),\n },\n {\n key: 'users',\n label: t('settingsPage.viewTypePreferences.labels.users', {}),\n },\n {\n key: 'entities',\n label: t('settingsPage.viewTypePreferences.labels.entities', {}),\n },\n {\n key: 'tag-posts',\n label: t('settingsPage.viewTypePreferences.labels.tagPosts', {}),\n },\n {\n key: 'collection-posts',\n label: t('settingsPage.viewTypePreferences.labels.collectionPosts', {}),\n },\n {\n key: 'user-questions',\n label: t('settingsPage.viewTypePreferences.labels.userQuestions', {}),\n },\n {\n key: 'user-articles',\n label: t('settingsPage.viewTypePreferences.labels.userArticles', {}),\n },\n {\n key: 'user-links',\n label: t('settingsPage.viewTypePreferences.labels.userLinks', {}),\n },\n {\n key: 'user-collections',\n label: t('settingsPage.viewTypePreferences.labels.userCollections', {}),\n },\n {\n key: 'user-answers',\n label: t('settingsPage.viewTypePreferences.labels.userAnswers', {}),\n },\n ];\n\n const handleViewTypeChange = (key: string, value: ViewType | null) => {\n if (value === null) {\n updateSettings({\n viewType: { ...getSetting('viewType'), [key]: undefined as any },\n });\n } else {\n updateSettings({\n viewType: { ...getSetting('viewType'), [key]: value },\n });\n }\n };\n\n const getViewType = (key: string): ViewType | null => {\n return settings.viewType[key] || null;\n };\n\n if (!isLoaded) {\n return null;\n }\n\n return (\n <InfoCard title={t('settingsPage.title', {})} data-testid=\"settings-page\">\n <CardContent>\n <div className={classes.section}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n {t('settingsPage.editorPreferences', {})}\n </Typography>\n\n <div className={classes.settingItem} data-testid=\"auto-save-setting\">\n <FormControlLabel\n control={\n <Switch\n checked={settings.autoSaveEnabled}\n onChange={e =>\n setSetting('autoSaveEnabled', e.target.checked)\n }\n color=\"primary\"\n data-testid=\"auto-save-switch\"\n />\n }\n label={t('settingsPage.autoSave.label', {})}\n />\n <Typography className={classes.description}>\n {t('settingsPage.autoSave.description', {})}\n </Typography>\n </div>\n\n {allowAnonymous && (\n <div\n className={classes.settingItem}\n data-testid=\"anonymous-posting-setting\"\n >\n <FormControlLabel\n control={\n <Switch\n checked={settings.anonymousPosting}\n onChange={e =>\n setSetting('anonymousPosting', e.target.checked)\n }\n color=\"primary\"\n data-testid=\"anonymous-posting-switch\"\n />\n }\n label={t('settingsPage.anonymousPosting.label', {})}\n />\n <Typography className={classes.description}>\n {t('settingsPage.anonymousPosting.description', {})}\n </Typography>\n </div>\n )}\n </div>\n\n <div className={classes.section}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n {t('settingsPage.displayPreferences', {})}\n </Typography>\n\n {isAIEnabled && (\n <div\n className={classes.settingItem}\n data-testid=\"ai-answer-setting\"\n >\n <FormControlLabel\n control={\n <Switch\n checked={settings.aiAnswerExpanded}\n onChange={e =>\n setSetting('aiAnswerExpanded', e.target.checked)\n }\n color=\"primary\"\n data-testid=\"ai-answer-switch\"\n />\n }\n label={t('settingsPage.aiAnswerExpanded.label', {})}\n />\n <Typography className={classes.description}>\n {t('settingsPage.aiAnswerExpanded.description', {})}\n </Typography>\n </div>\n )}\n\n <div className={classes.settingItem} data-testid=\"pagination-setting\">\n <FormControlLabel\n control={\n <Switch\n checked={settings.usePagination}\n onChange={e => setSetting('usePagination', e.target.checked)}\n color=\"primary\"\n data-testid=\"pagination-switch\"\n />\n }\n label={t('settingsPage.usePagination.label', {})}\n />\n <Typography className={classes.description}>\n {t('settingsPage.usePagination.description', {})}\n </Typography>\n </div>\n\n <Box mt={3}>\n <Typography\n variant=\"subtitle1\"\n style={{ fontWeight: 500, marginBottom: 16 }}\n >\n {t('settingsPage.viewTypePreferences.title', {})}\n </Typography>\n <Typography\n className={classes.description}\n style={{ marginBottom: 16 }}\n >\n {t('settingsPage.viewTypePreferences.description', {})}\n </Typography>\n\n {viewTypes.map(({ key, label }) => {\n const currentView = getViewType(key);\n return (\n <div\n key={key}\n className={classes.viewTypeItem}\n data-testid={`view-type-${key}`}\n >\n <Typography className={classes.viewTypeLabel}>\n {label}\n </Typography>\n <ButtonGroup size=\"small\" color=\"primary\">\n <Button\n variant={\n currentView === 'grid' ? 'contained' : 'outlined'\n }\n onClick={() => handleViewTypeChange(key, 'grid')}\n data-testid={`view-type-${key}-grid`}\n data-selected={currentView === 'grid'}\n >\n {t('settingsPage.viewTypePreferences.grid', {})}\n </Button>\n <Button\n variant={\n currentView === 'list' ? 'contained' : 'outlined'\n }\n onClick={() => handleViewTypeChange(key, 'list')}\n data-testid={`view-type-${key}-list`}\n data-selected={currentView === 'list'}\n >\n {t('settingsPage.viewTypePreferences.list', {})}\n </Button>\n <Button\n variant={currentView === null ? 'contained' : 'outlined'}\n onClick={() => handleViewTypeChange(key, null)}\n data-testid={`view-type-${key}-default`}\n data-selected={currentView === null}\n >\n {t('settingsPage.viewTypePreferences.default', {})}\n </Button>\n </ButtonGroup>\n </div>\n );\n })}\n </Box>\n </div>\n\n <Box mt={4} pt={3} borderTop={`1px solid ${theme.palette.divider}`}>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n onClick={() => {\n resetSettings();\n }}\n data-testid=\"reset-all-settings-button\"\n >\n {t('settingsPage.resetAllSettings', {})}\n </Button>\n <Typography\n className={classes.description}\n style={{ marginTop: theme.spacing(1) }}\n >\n {t('settingsPage.resetAllSettingsDescription', {})}\n </Typography>\n </Box>\n </CardContent>\n </InfoCard>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAqBA,MAAM,SAAA,GAAY,WAAW,CAAA,KAAA,MAAU;AAAA,EACrC,OAAA,EAAS;AAAA,IACP,QAAA,EAAU,OAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,OAAA,EAAS;AAAA,IACP,YAAA,EAAc,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA,GAC/B;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,YAAA,EAAc,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC7B,UAAA,EAAY;AAAA,GACd;AAAA,EACA,WAAA,EAAa;AAAA,IACX,YAAA,EAAc,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA,GAC/B;AAAA,EACA,WAAA,EAAa;AAAA,IACX,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAA;AAAA,IAC1B,QAAA,EAAU,UAAA;AAAA,IACV,SAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,GAAG;AAAA,GAC9B;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,YAAA,EAAc,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC7B,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,aAAA,EAAe;AAAA,IACb,QAAA,EAAU;AAAA;AAEd,CAAA,CAAE,CAAA;AAEK,MAAM,eAAe,MAAM;AAChC,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,MAAM,QAAQ,QAAA,EAAS;AACvB,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,MACE,eAAA,EAAgB;AACpB,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,KAAA,EAAM;AAC9B,EAAA,MAAM,SAAA,GAAY,OAAO,YAAY,CAAA;AACrC,EAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,kBAAA,CAAmB,qBAAqB,CAAA;AAEzE,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB;AAAA,MACE,GAAA,EAAK,gBAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,mDAAA,EAAqD,EAAE;AAAA,KAClE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,eAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,kDAAA,EAAoD,EAAE;AAAA,KACjE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,YAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,+CAAA,EAAiD,EAAE;AAAA,KAC9D;AAAA,IACA;AAAA,MACE,GAAA,EAAK,WAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,mDAAA,EAAqD,EAAE;AAAA,KAClE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,aAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,qDAAA,EAAuD,EAAE;AAAA,KACpE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,MAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,8CAAA,EAAgD,EAAE;AAAA,KAC7D;AAAA,IACA;AAAA,MACE,GAAA,EAAK,OAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,+CAAA,EAAiD,EAAE;AAAA,KAC9D;AAAA,IACA;AAAA,MACE,GAAA,EAAK,UAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,kDAAA,EAAoD,EAAE;AAAA,KACjE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,WAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,kDAAA,EAAoD,EAAE;AAAA,KACjE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,kBAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,yDAAA,EAA2D,EAAE;AAAA,KACxE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,gBAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,uDAAA,EAAyD,EAAE;AAAA,KACtE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,eAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,sDAAA,EAAwD,EAAE;AAAA,KACrE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,YAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,mDAAA,EAAqD,EAAE;AAAA,KAClE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,kBAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,yDAAA,EAA2D,EAAE;AAAA,KACxE;AAAA,IACA;AAAA,MACE,GAAA,EAAK,cAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,qDAAA,EAAuD,EAAE;AAAA;AACpE,GACF;AAEA,EAAA,MAAM,oBAAA,GAAuB,CAAC,GAAA,EAAa,KAAA,KAA2B;AACpE,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,cAAA,CAAe;AAAA,QACb,QAAA,EAAU,EAAE,GAAG,UAAA,CAAW,UAAU,CAAA,EAAG,CAAC,GAAG,GAAG,MAAA;AAAiB,OAChE,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,cAAA,CAAe;AAAA,QACb,QAAA,EAAU,EAAE,GAAG,UAAA,CAAW,UAAU,CAAA,EAAG,CAAC,GAAG,GAAG,KAAA;AAAM,OACrD,CAAA;AAAA,IACH;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,GAAA,KAAiC;AACpD,IAAA,OAAO,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,IAAK,IAAA;AAAA,EACnC,CAAA;AAEA,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,GAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAO,CAAA,CAAE,oBAAA,EAAsB,EAAE,CAAA,EAAG,aAAA,EAAY,eAAA,EACxD,QAAA,kBAAA,IAAA,CAAC,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,OAAA,EACtB,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,IAAA,EAAK,SAAA,EAAW,OAAA,CAAQ,cACzC,QAAA,EAAA,CAAA,CAAE,gCAAA,EAAkC,EAAE,CAAA,EACzC,CAAA;AAAA,2BAEC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,WAAA,EAAa,eAAY,mBAAA,EAC/C,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YACC,OAAA,kBACE,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAS,QAAA,CAAS,eAAA;AAAA,gBAClB,UAAU,CAAA,CAAA,KACR,UAAA,CAAW,iBAAA,EAAmB,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,gBAEhD,KAAA,EAAM,SAAA;AAAA,gBACN,aAAA,EAAY;AAAA;AAAA,aACd;AAAA,YAEF,KAAA,EAAO,CAAA,CAAE,6BAAA,EAA+B,EAAE;AAAA;AAAA,SAC5C;AAAA,wBACA,GAAA,CAAC,cAAW,SAAA,EAAW,OAAA,CAAQ,aAC5B,QAAA,EAAA,CAAA,CAAE,mCAAA,EAAqC,EAAE,CAAA,EAC5C;AAAA,OAAA,EACF,CAAA;AAAA,MAEC,cAAA,oBACC,IAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,WAAW,OAAA,CAAQ,WAAA;AAAA,UACnB,aAAA,EAAY,2BAAA;AAAA,UAEZ,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,gBAAA;AAAA,cAAA;AAAA,gBACC,OAAA,kBACE,GAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,SAAS,QAAA,CAAS,gBAAA;AAAA,oBAClB,UAAU,CAAA,CAAA,KACR,UAAA,CAAW,kBAAA,EAAoB,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,oBAEjD,KAAA,EAAM,SAAA;AAAA,oBACN,aAAA,EAAY;AAAA;AAAA,iBACd;AAAA,gBAEF,KAAA,EAAO,CAAA,CAAE,qCAAA,EAAuC,EAAE;AAAA;AAAA,aACpD;AAAA,4BACA,GAAA,CAAC,cAAW,SAAA,EAAW,OAAA,CAAQ,aAC5B,QAAA,EAAA,CAAA,CAAE,2CAAA,EAA6C,EAAE,CAAA,EACpD;AAAA;AAAA;AAAA;AACF,KAAA,EAEJ,CAAA;AAAA,oBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,OAAA,EACtB,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,IAAA,EAAK,SAAA,EAAW,OAAA,CAAQ,cACzC,QAAA,EAAA,CAAA,CAAE,iCAAA,EAAmC,EAAE,CAAA,EAC1C,CAAA;AAAA,MAEC,WAAA,oBACC,IAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,WAAW,OAAA,CAAQ,WAAA;AAAA,UACnB,aAAA,EAAY,mBAAA;AAAA,UAEZ,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,gBAAA;AAAA,cAAA;AAAA,gBACC,OAAA,kBACE,GAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,SAAS,QAAA,CAAS,gBAAA;AAAA,oBAClB,UAAU,CAAA,CAAA,KACR,UAAA,CAAW,kBAAA,EAAoB,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,oBAEjD,KAAA,EAAM,SAAA;AAAA,oBACN,aAAA,EAAY;AAAA;AAAA,iBACd;AAAA,gBAEF,KAAA,EAAO,CAAA,CAAE,qCAAA,EAAuC,EAAE;AAAA;AAAA,aACpD;AAAA,4BACA,GAAA,CAAC,cAAW,SAAA,EAAW,OAAA,CAAQ,aAC5B,QAAA,EAAA,CAAA,CAAE,2CAAA,EAA6C,EAAE,CAAA,EACpD;AAAA;AAAA;AAAA,OACF;AAAA,2BAGD,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,WAAA,EAAa,eAAY,oBAAA,EAC/C,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YACC,OAAA,kBACE,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAS,QAAA,CAAS,aAAA;AAAA,gBAClB,UAAU,CAAA,CAAA,KAAK,UAAA,CAAW,eAAA,EAAiB,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,gBAC3D,KAAA,EAAM,SAAA;AAAA,gBACN,aAAA,EAAY;AAAA;AAAA,aACd;AAAA,YAEF,KAAA,EAAO,CAAA,CAAE,kCAAA,EAAoC,EAAE;AAAA;AAAA,SACjD;AAAA,wBACA,GAAA,CAAC,cAAW,SAAA,EAAW,OAAA,CAAQ,aAC5B,QAAA,EAAA,CAAA,CAAE,wCAAA,EAA0C,EAAE,CAAA,EACjD;AAAA,OAAA,EACF,CAAA;AAAA,sBAEA,IAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAI,CAAA,EACP,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,WAAA;AAAA,YACR,KAAA,EAAO,EAAE,UAAA,EAAY,GAAA,EAAK,cAAc,EAAA,EAAG;AAAA,YAE1C,QAAA,EAAA,CAAA,CAAE,wCAAA,EAA0C,EAAE;AAAA;AAAA,SACjD;AAAA,wBACA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,WAAW,OAAA,CAAQ,WAAA;AAAA,YACnB,KAAA,EAAO,EAAE,YAAA,EAAc,EAAA,EAAG;AAAA,YAEzB,QAAA,EAAA,CAAA,CAAE,8CAAA,EAAgD,EAAE;AAAA;AAAA,SACvD;AAAA,QAEC,UAAU,GAAA,CAAI,CAAC,EAAE,GAAA,EAAK,OAAM,KAAM;AACjC,UAAA,MAAM,WAAA,GAAc,YAAY,GAAG,CAAA;AACnC,UAAA,uBACE,IAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cAEC,WAAW,OAAA,CAAQ,YAAA;AAAA,cACnB,aAAA,EAAa,aAAa,GAAG,CAAA,CAAA;AAAA,cAE7B,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAW,OAAA,CAAQ,aAAA,EAC5B,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,gCACA,IAAA,CAAC,WAAA,EAAA,EAAY,IAAA,EAAK,OAAA,EAAQ,OAAM,SAAA,EAC9B,QAAA,EAAA;AAAA,kCAAA,GAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,OAAA,EACE,WAAA,KAAgB,MAAA,GAAS,WAAA,GAAc,UAAA;AAAA,sBAEzC,OAAA,EAAS,MAAM,oBAAA,CAAqB,GAAA,EAAK,MAAM,CAAA;AAAA,sBAC/C,aAAA,EAAa,aAAa,GAAG,CAAA,KAAA,CAAA;AAAA,sBAC7B,iBAAe,WAAA,KAAgB,MAAA;AAAA,sBAE9B,QAAA,EAAA,CAAA,CAAE,uCAAA,EAAyC,EAAE;AAAA;AAAA,mBAChD;AAAA,kCACA,GAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,OAAA,EACE,WAAA,KAAgB,MAAA,GAAS,WAAA,GAAc,UAAA;AAAA,sBAEzC,OAAA,EAAS,MAAM,oBAAA,CAAqB,GAAA,EAAK,MAAM,CAAA;AAAA,sBAC/C,aAAA,EAAa,aAAa,GAAG,CAAA,KAAA,CAAA;AAAA,sBAC7B,iBAAe,WAAA,KAAgB,MAAA;AAAA,sBAE9B,QAAA,EAAA,CAAA,CAAE,uCAAA,EAAyC,EAAE;AAAA;AAAA,mBAChD;AAAA,kCACA,GAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,OAAA,EAAS,WAAA,KAAgB,IAAA,GAAO,WAAA,GAAc,UAAA;AAAA,sBAC9C,OAAA,EAAS,MAAM,oBAAA,CAAqB,GAAA,EAAK,IAAI,CAAA;AAAA,sBAC7C,aAAA,EAAa,aAAa,GAAG,CAAA,QAAA,CAAA;AAAA,sBAC7B,iBAAe,WAAA,KAAgB,IAAA;AAAA,sBAE9B,QAAA,EAAA,CAAA,CAAE,0CAAA,EAA4C,EAAE;AAAA;AAAA;AACnD,iBAAA,EACF;AAAA;AAAA,aAAA;AAAA,YApCK;AAAA,WAqCP;AAAA,QAEJ,CAAC;AAAA,OAAA,EACH;AAAA,KAAA,EACF,CAAA;AAAA,oBAEA,IAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,SAAA,EAAW,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,CAAA,EAC9D,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,UAAA;AAAA,UACR,KAAA,EAAM,WAAA;AAAA,UACN,SAAS,MAAM;AACb,YAAA,aAAA,EAAc;AAAA,UAChB,CAAA;AAAA,UACA,aAAA,EAAY,2BAAA;AAAA,UAEX,QAAA,EAAA,CAAA,CAAE,+BAAA,EAAiC,EAAE;AAAA;AAAA,OACxC;AAAA,sBACA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,WAAW,OAAA,CAAQ,WAAA;AAAA,UACnB,OAAO,EAAE,SAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAE;AAAA,UAEpC,QAAA,EAAA,CAAA,CAAE,0CAAA,EAA4C,EAAE;AAAA;AAAA;AACnD,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"GlobalStatsContent.esm.js","sources":["../../../src/components/Statistics/GlobalStatsContent.tsx"],"sourcesContent":["import { StatsChart, useQetaApi } from '@drodil/backstage-plugin-qeta-react';\nimport {\n Card,\n CardContent,\n CardHeader,\n CircularProgress,\n Grid,\n} from '@material-ui/core';\n\nexport const GlobalStatsContent = () => {\n const {\n value: response,\n loading,\n error,\n } = useQetaApi(api => api.getGlobalStats(), []);\n if (error) {\n return null;\n }\n return (\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <Card>\n <CardHeader title=\"Activity Trends\" />\n <CardContent>\n {!loading && response && (\n <StatsChart\n data={response.statistics}\n summary={response.summary as unknown as Record<string, number>}\n />\n )}\n {loading && <CircularProgress />}\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;AASO,MAAM,qBAAqB,MAAM;AACtC,EAAM,MAAA;AAAA,IACJ,KAAO,EAAA,QAAA;AAAA,IACP,OAAA;AAAA,IACA;AAAA,MACE,UAAW,CAAA,CAAA,GAAA,KAAO,IAAI,cAAe,EAAA,EAAG,EAAE,CAAA;AAC9C,EAAA,IAAI,KAAO,EAAA;AACT,IAAO,OAAA,IAAA;AAAA;AAET,EAAA,uBACG,GAAA,CAAA,IAAA,EAAA,EAAK,SAAS,EAAA,IAAA,EAAC,OAAS,EAAA,CAAA,EACvB,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,EAAI,EAAA,EAAA,EACb,+BAAC,IACC,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,UAAA,EAAA,EAAW,OAAM,iBAAkB,EAAA,CAAA;AAAA,yBACnC,WACE,EAAA,EAAA,QAAA,EAAA;AAAA,MAAA,CAAC,WAAW,QACX,oBAAA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,MAAM,QAAS,CAAA,UAAA;AAAA,UACf,SAAS,QAAS,CAAA;AAAA;AAAA,OACpB;AAAA,MAED,OAAA,wBAAY,gBAAiB,EAAA,EAAA;AAAA,KAChC,EAAA;AAAA,GAAA,EACF,GACF,CACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"GlobalStatsContent.esm.js","sources":["../../../src/components/Statistics/GlobalStatsContent.tsx"],"sourcesContent":["import { StatsChart, useQetaApi } from '@drodil/backstage-plugin-qeta-react';\nimport {\n Card,\n CardContent,\n CardHeader,\n CircularProgress,\n Grid,\n} from '@material-ui/core';\n\nexport const GlobalStatsContent = () => {\n const {\n value: response,\n loading,\n error,\n } = useQetaApi(api => api.getGlobalStats(), []);\n if (error) {\n return null;\n }\n return (\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <Card>\n <CardHeader title=\"Activity Trends\" />\n <CardContent>\n {!loading && response && (\n <StatsChart\n data={response.statistics}\n summary={response.summary as unknown as Record<string, number>}\n />\n )}\n {loading && <CircularProgress />}\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;AASO,MAAM,qBAAqB,MAAM;AACtC,EAAA,MAAM;AAAA,IACJ,KAAA,EAAO,QAAA;AAAA,IACP,OAAA;AAAA,IACA;AAAA,MACE,UAAA,CAAW,CAAA,GAAA,KAAO,IAAI,cAAA,EAAe,EAAG,EAAE,CAAA;AAC9C,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAS,IAAA,EAAC,OAAA,EAAS,CAAA,EACvB,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAI,EAAA,EACb,+BAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAM,iBAAA,EAAkB,CAAA;AAAA,yBACnC,WAAA,EAAA,EACE,QAAA,EAAA;AAAA,MAAA,CAAC,WAAW,QAAA,oBACX,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,MAAM,QAAA,CAAS,UAAA;AAAA,UACf,SAAS,QAAA,CAAS;AAAA;AAAA,OACpB;AAAA,MAED,OAAA,wBAAY,gBAAA,EAAA,EAAiB;AAAA,KAAA,EAChC;AAAA,GAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"StatisticsPage.esm.js","sources":["../../../src/components/Statistics/StatisticsPage.tsx"],"sourcesContent":["import {\n AskQuestionButton,\n ContentHeader,\n CreateLinkButton,\n TopRankingUsers,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { GlobalStatsContent } from './GlobalStatsContent';\nimport { Box, Tab } from '@material-ui/core';\nimport EmojiEventsOutlined from '@material-ui/icons/EmojiEventsOutlined';\nimport { TabContext, TabList, TabPanel } from '@material-ui/lab';\nimport { useState } from 'react';\n\nexport const StatisticsPage = () => {\n const [tab, setTab] = useState('global');\n\n const handleChange = (_event: React.ChangeEvent<{}>, newValue: string) => {\n setTab(newValue);\n };\n\n return (\n <>\n <ContentHeader\n title=\"Statistics\"\n titleIcon={<EmojiEventsOutlined fontSize=\"large\" />}\n >\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n <TabContext value={tab}>\n <Box sx={{ borderBottom: 1, borderColor: 'divider' }}>\n <TabList onChange={handleChange} style={{ padding: 0 }}>\n <Tab label=\"Global Stats\" value=\"global\" />\n <Tab label=\"Leaderboard\" value=\"leaderboard\" />\n </TabList>\n </Box>\n <TabPanel value=\"global\" style={{ padding: '24px 0' }}>\n <GlobalStatsContent />\n </TabPanel>\n <TabPanel value=\"leaderboard\" style={{ padding: '24px 0' }}>\n <TopRankingUsers limit={10} />\n </TabPanel>\n </TabContext>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAaO,MAAM,iBAAiB,MAAM;AAClC,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAI,SAAS,QAAQ,CAAA;AAEvC,EAAM,MAAA,YAAA,GAAe,CAAC,MAAA,EAA+B,QAAqB,KAAA;AACxE,IAAA,MAAA,CAAO,QAAQ,CAAA;AAAA,GACjB;AAEA,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,KAAM,EAAA,YAAA;AAAA,QACN,SAAW,kBAAA,GAAA,CAAC,mBAAoB,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,CAAA;AAAA,QAEjD,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,iBAAkB,EAAA,EAAA,CAAA;AAAA,8BAClB,kBAAmB,EAAA,EAAA,CAAA;AAAA,8BACnB,gBAAiB,EAAA,EAAA;AAAA;AAAA;AAAA,KACpB;AAAA,oBACA,IAAA,CAAC,UAAW,EAAA,EAAA,KAAA,EAAO,GACjB,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,OAAI,EAAI,EAAA,EAAE,YAAc,EAAA,CAAA,EAAG,aAAa,SAAU,EAAA,EACjD,QAAC,kBAAA,IAAA,CAAA,OAAA,EAAA,EAAQ,UAAU,YAAc,EAAA,KAAA,EAAO,EAAE,OAAA,EAAS,GACjD,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,GAAI,EAAA,EAAA,KAAA,EAAM,cAAe,EAAA,KAAA,EAAM,QAAS,EAAA,CAAA;AAAA,wBACxC,GAAA,CAAA,GAAA,EAAA,EAAI,KAAM,EAAA,aAAA,EAAc,OAAM,aAAc,EAAA;AAAA,OAAA,EAC/C,CACF,EAAA,CAAA;AAAA,sBACA,GAAA,CAAC,QAAS,EAAA,EAAA,KAAA,EAAM,QAAS,EAAA,KAAA,EAAO,EAAE,OAAA,EAAS,QAAS,EAAA,EAClD,QAAC,kBAAA,GAAA,CAAA,kBAAA,EAAA,EAAmB,CACtB,EAAA,CAAA;AAAA,sBACC,GAAA,CAAA,QAAA,EAAA,EAAS,KAAM,EAAA,aAAA,EAAc,KAAO,EAAA,EAAE,OAAS,EAAA,QAAA,EAC9C,EAAA,QAAA,kBAAA,GAAA,CAAC,eAAgB,EAAA,EAAA,KAAA,EAAO,IAAI,CAC9B,EAAA;AAAA,KACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"StatisticsPage.esm.js","sources":["../../../src/components/Statistics/StatisticsPage.tsx"],"sourcesContent":["import {\n AskQuestionButton,\n ContentHeader,\n CreateLinkButton,\n TopRankingUsers,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { GlobalStatsContent } from './GlobalStatsContent';\nimport { Box, Tab } from '@material-ui/core';\nimport EmojiEventsOutlined from '@material-ui/icons/EmojiEventsOutlined';\nimport { TabContext, TabList, TabPanel } from '@material-ui/lab';\nimport { useState } from 'react';\n\nexport const StatisticsPage = () => {\n const [tab, setTab] = useState('global');\n\n const handleChange = (_event: React.ChangeEvent<{}>, newValue: string) => {\n setTab(newValue);\n };\n\n return (\n <>\n <ContentHeader\n title=\"Statistics\"\n titleIcon={<EmojiEventsOutlined fontSize=\"large\" />}\n >\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n <TabContext value={tab}>\n <Box sx={{ borderBottom: 1, borderColor: 'divider' }}>\n <TabList onChange={handleChange} style={{ padding: 0 }}>\n <Tab label=\"Global Stats\" value=\"global\" />\n <Tab label=\"Leaderboard\" value=\"leaderboard\" />\n </TabList>\n </Box>\n <TabPanel value=\"global\" style={{ padding: '24px 0' }}>\n <GlobalStatsContent />\n </TabPanel>\n <TabPanel value=\"leaderboard\" style={{ padding: '24px 0' }}>\n <TopRankingUsers limit={10} />\n </TabPanel>\n </TabContext>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAaO,MAAM,iBAAiB,MAAM;AAClC,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAI,SAAS,QAAQ,CAAA;AAEvC,EAAA,MAAM,YAAA,GAAe,CAAC,MAAA,EAA+B,QAAA,KAAqB;AACxE,IAAA,MAAA,CAAO,QAAQ,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAM,YAAA;AAAA,QACN,SAAA,kBAAW,GAAA,CAAC,mBAAA,EAAA,EAAoB,QAAA,EAAS,OAAA,EAAQ,CAAA;AAAA,QAEjD,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,iBAAA,EAAA,EAAkB,CAAA;AAAA,8BAClB,kBAAA,EAAA,EAAmB,CAAA;AAAA,8BACnB,gBAAA,EAAA,EAAiB;AAAA;AAAA;AAAA,KACpB;AAAA,oBACA,IAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAO,GAAA,EACjB,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,OAAI,EAAA,EAAI,EAAE,YAAA,EAAc,CAAA,EAAG,aAAa,SAAA,EAAU,EACjD,QAAA,kBAAA,IAAA,CAAC,OAAA,EAAA,EAAQ,UAAU,YAAA,EAAc,KAAA,EAAO,EAAE,OAAA,EAAS,GAAE,EACnD,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,GAAA,EAAA,EAAI,KAAA,EAAM,cAAA,EAAe,KAAA,EAAM,QAAA,EAAS,CAAA;AAAA,wBACzC,GAAA,CAAC,GAAA,EAAA,EAAI,KAAA,EAAM,aAAA,EAAc,OAAM,aAAA,EAAc;AAAA,OAAA,EAC/C,CAAA,EACF,CAAA;AAAA,sBACA,GAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAM,QAAA,EAAS,KAAA,EAAO,EAAE,OAAA,EAAS,QAAA,EAAS,EAClD,QAAA,kBAAA,GAAA,CAAC,kBAAA,EAAA,EAAmB,CAAA,EACtB,CAAA;AAAA,sBACA,GAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAM,aAAA,EAAc,KAAA,EAAO,EAAE,OAAA,EAAS,QAAA,EAAS,EACvD,QAAA,kBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAO,IAAI,CAAA,EAC9B;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"TagPage.esm.js","sources":["../../../src/components/TagPage/TagPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useParams } from 'react-router-dom';\nimport {\n AskQuestionButton,\n ContentHeader,\n CreateLinkButton,\n DeleteModal,\n EditTagModal,\n PostsContainer,\n qetaApiRef,\n qetaTranslationRef,\n TagFollowButton,\n TagsContainer,\n useIsModerator,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport LocalOfferOutlined from '@material-ui/icons/LocalOfferOutlined';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport PeopleIcon from '@material-ui/icons/People';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport { TagResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { ContentHeaderCard } from '@drodil/backstage-plugin-qeta-react';\nimport { Button, Typography } from '@material-ui/core';\n\nexport const TagPage = () => {\n const { tag } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n const [resp, setResp] = useState<undefined | TagResponse>();\n const { isModerator } = useIsModerator();\n\n const [editModalOpen, setEditModalOpen] = useState(false);\n const [deleteModalOpen, setDeleteModalOpen] = useState(false);\n\n const qetaApi = useApi(qetaApiRef);\n const alertApi = useApi(alertApiRef);\n\n const fetchTag = () => {\n if (!tag) {\n setResp(undefined);\n return;\n }\n\n qetaApi\n .getTag(tag)\n .then(res => {\n if (res) {\n setResp(res);\n }\n })\n .catch(e => {\n alertApi.post({\n message: e.message,\n severity: 'error',\n display: 'transient',\n });\n });\n };\n\n useEffect(() => {\n fetchTag();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [qetaApi, tag, alertApi]);\n\n const handleEditModalClose = () => {\n setEditModalOpen(false);\n fetchTag();\n };\n\n const handleDeleteModalClose = () => {\n setDeleteModalOpen(false);\n };\n\n return (\n <>\n {tag ? (\n <ContentHeader\n title={tag}\n titleIcon={<LocalOfferOutlined fontSize=\"large\" />}\n >\n <TagFollowButton tag={tag} />\n <AskQuestionButton tags={[tag]} />\n <WriteArticleButton tags={[tag]} />\n <CreateLinkButton tags={[tag]} />\n </ContentHeader>\n ) : (\n <ContentHeader\n title={t('tagPage.defaultTitle', {})}\n titleIcon={<LocalOfferOutlined fontSize=\"large\" />}\n >\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n )}\n {resp && (\n <ContentHeaderCard\n description={resp.description}\n imageIcon={<LocalOfferOutlined style={{ fontSize: 80 }} />}\n stats={[\n {\n label: t('common.postsLabel', {\n count: resp.postsCount,\n itemType: 'post',\n }),\n value: resp.postsCount,\n icon: <QuestionAnswerIcon fontSize=\"small\" />,\n },\n {\n label: t('common.followersLabel', { count: resp.followerCount }),\n value: resp.followerCount,\n icon: <PeopleIcon fontSize=\"small\" />,\n },\n ]}\n >\n {resp.experts && resp.experts.length > 0 && (\n <Typography variant=\"caption\">\n {t('common.experts')}\n {': '}\n {resp.experts.map((e, i) => (\n <>\n <EntityRefLink key={e} entityRef={e} />\n {i === resp.experts!.length - 1 ? '' : ','}\n </>\n ))}\n </Typography>\n )}\n {(resp.canEdit || resp.canDelete) && (\n <div style={{ marginTop: '1em' }}>\n {resp.canEdit && (\n <Button\n variant=\"outlined\"\n size=\"small\"\n startIcon={<EditIcon />}\n onClick={() => setEditModalOpen(true)}\n style={{ marginRight: '0.5em' }}\n >\n {t('tagButton.edit')}\n </Button>\n )}\n {resp.canDelete && (\n <Button\n variant=\"outlined\"\n size=\"small\"\n color=\"secondary\"\n startIcon={<DeleteIcon />}\n onClick={() => setDeleteModalOpen(true)}\n >\n {t('tagButton.delete')}\n </Button>\n )}\n </div>\n )}\n </ContentHeaderCard>\n )}\n {tag && (\n <PostsContainer\n tags={[tag ?? '']}\n filterPanelProps={{ showTagFilter: false }}\n showTypeLabel\n defaultView=\"list\"\n prefix=\"tag-posts\"\n />\n )}\n {!tag && <TagsContainer />}\n {resp && (\n <>\n <EditTagModal\n tag={resp}\n open={editModalOpen}\n onClose={handleEditModalClose}\n isModerator={isModerator}\n />\n <DeleteModal\n open={deleteModalOpen}\n onClose={handleDeleteModalClose}\n entity={resp}\n />\n </>\n )}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TagPage.esm.js","sources":["../../../src/components/TagPage/TagPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useParams } from 'react-router-dom';\nimport {\n AskQuestionButton,\n ContentHeader,\n CreateLinkButton,\n DeleteModal,\n EditTagModal,\n PostsContainer,\n qetaApiRef,\n qetaTranslationRef,\n TagFollowButton,\n TagsContainer,\n useIsModerator,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport LocalOfferOutlined from '@material-ui/icons/LocalOfferOutlined';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport PeopleIcon from '@material-ui/icons/People';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport { TagResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { ContentHeaderCard } from '@drodil/backstage-plugin-qeta-react';\nimport { Button, Typography } from '@material-ui/core';\n\nexport const TagPage = () => {\n const { tag } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n const [resp, setResp] = useState<undefined | TagResponse>();\n const { isModerator } = useIsModerator();\n\n const [editModalOpen, setEditModalOpen] = useState(false);\n const [deleteModalOpen, setDeleteModalOpen] = useState(false);\n\n const qetaApi = useApi(qetaApiRef);\n const alertApi = useApi(alertApiRef);\n\n const fetchTag = () => {\n if (!tag) {\n setResp(undefined);\n return;\n }\n\n qetaApi\n .getTag(tag)\n .then(res => {\n if (res) {\n setResp(res);\n }\n })\n .catch(e => {\n alertApi.post({\n message: e.message,\n severity: 'error',\n display: 'transient',\n });\n });\n };\n\n useEffect(() => {\n fetchTag();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [qetaApi, tag, alertApi]);\n\n const handleEditModalClose = () => {\n setEditModalOpen(false);\n fetchTag();\n };\n\n const handleDeleteModalClose = () => {\n setDeleteModalOpen(false);\n };\n\n return (\n <>\n {tag ? (\n <ContentHeader\n title={tag}\n titleIcon={<LocalOfferOutlined fontSize=\"large\" />}\n >\n <TagFollowButton tag={tag} />\n <AskQuestionButton tags={[tag]} />\n <WriteArticleButton tags={[tag]} />\n <CreateLinkButton tags={[tag]} />\n </ContentHeader>\n ) : (\n <ContentHeader\n title={t('tagPage.defaultTitle', {})}\n titleIcon={<LocalOfferOutlined fontSize=\"large\" />}\n >\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n )}\n {resp && (\n <ContentHeaderCard\n description={resp.description}\n imageIcon={<LocalOfferOutlined style={{ fontSize: 80 }} />}\n stats={[\n {\n label: t('common.postsLabel', {\n count: resp.postsCount,\n itemType: 'post',\n }),\n value: resp.postsCount,\n icon: <QuestionAnswerIcon fontSize=\"small\" />,\n },\n {\n label: t('common.followersLabel', { count: resp.followerCount }),\n value: resp.followerCount,\n icon: <PeopleIcon fontSize=\"small\" />,\n },\n ]}\n >\n {resp.experts && resp.experts.length > 0 && (\n <Typography variant=\"caption\">\n {t('common.experts')}\n {': '}\n {resp.experts.map((e, i) => (\n <>\n <EntityRefLink key={e} entityRef={e} />\n {i === resp.experts!.length - 1 ? '' : ','}\n </>\n ))}\n </Typography>\n )}\n {(resp.canEdit || resp.canDelete) && (\n <div style={{ marginTop: '1em' }}>\n {resp.canEdit && (\n <Button\n variant=\"outlined\"\n size=\"small\"\n startIcon={<EditIcon />}\n onClick={() => setEditModalOpen(true)}\n style={{ marginRight: '0.5em' }}\n >\n {t('tagButton.edit')}\n </Button>\n )}\n {resp.canDelete && (\n <Button\n variant=\"outlined\"\n size=\"small\"\n color=\"secondary\"\n startIcon={<DeleteIcon />}\n onClick={() => setDeleteModalOpen(true)}\n >\n {t('tagButton.delete')}\n </Button>\n )}\n </div>\n )}\n </ContentHeaderCard>\n )}\n {tag && (\n <PostsContainer\n tags={[tag ?? '']}\n filterPanelProps={{ showTagFilter: false }}\n showTypeLabel\n defaultView=\"list\"\n prefix=\"tag-posts\"\n />\n )}\n {!tag && <TagsContainer />}\n {resp && (\n <>\n <EditTagModal\n tag={resp}\n open={editModalOpen}\n onClose={handleEditModalClose}\n isModerator={isModerator}\n />\n <DeleteModal\n open={deleteModalOpen}\n onClose={handleDeleteModalClose}\n entity={resp}\n />\n </>\n )}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TechDocsAskQuestionAddon.esm.js","sources":["../../../src/components/TechDocsAskQuestionAddon/TechDocsAskQuestionAddon.tsx"],"sourcesContent":["import { makeStyles, Portal, Typography } from '@material-ui/core';\nimport {\n useShadowRootElements,\n useTechDocsReaderPage,\n} from '@backstage/plugin-techdocs-react';\nimport { Link } from '@backstage/core-components';\nimport { askRouteRef } from '@drodil/backstage-plugin-qeta-react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport ContactSupportIcon from '@material-ui/icons/ContactSupport';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n padding: theme.spacing(1),\n },\n link: {\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'flex-end',\n alignItems: 'center',\n },\n}));\n\nexport const TechDocsAskQuestionAddon = () => {\n const styles = useStyles();\n const { title, subtitle, entityRef } = useTechDocsReaderPage();\n const [mainContent] = useShadowRootElements([\n '[data-md-component=\"main\"] .md-content',\n ]);\n\n const askRoute = useRouteRef(askRouteRef);\n\n const params = new URLSearchParams();\n if (entityRef) {\n params.append('entity', stringifyEntityRef(entityRef));\n }\n if (title) {\n params.append(\n 'title',\n `Question about \"${title}${subtitle ? ` - ${subtitle}` : ''}\"`,\n );\n }\n params.append(\n 'content',\n `\\n\\nThis question relates to ${window.location.href}`,\n );\n\n return (\n <Portal container={mainContent}>\n <div className={styles.root}>\n <Link\n target=\"_blank\"\n className={styles.link}\n to={`${askRoute()}?${params.toString()}`}\n >\n <ContactSupportIcon />\n <Typography>Ask a question about the content</Typography>\n </Link>\n </div>\n </Portal>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAWA,MAAM,SAAA,GAAY,WAAW,CAAU,KAAA,MAAA;AAAA,EACrC,IAAM,EAAA;AAAA,IACJ,OAAA,EAAS,KAAM,CAAA,OAAA,CAAQ,CAAC;AAAA,GAC1B;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,OAAS,EAAA,MAAA;AAAA,IACT,YAAc,EAAA,QAAA;AAAA,IACd,cAAgB,EAAA,UAAA;AAAA,IAChB,UAAY,EAAA;AAAA;AAEhB,CAAE,CAAA,CAAA;AAEK,MAAM,2BAA2B,MAAM;AAC5C,EAAA,MAAM,SAAS,SAAU,EAAA;AACzB,EAAA,MAAM,EAAE,KAAA,EAAO,QAAU,EAAA,SAAA,KAAc,qBAAsB,EAAA;AAC7D,EAAM,MAAA,CAAC,WAAW,CAAA,GAAI,qBAAsB,CAAA;AAAA,IAC1C;AAAA,GACD,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,YAAY,WAAW,CAAA;AAExC,EAAM,MAAA,MAAA,GAAS,IAAI,eAAgB,EAAA;AACnC,EAAA,IAAI,SAAW,EAAA;AACb,IAAA,MAAA,CAAO,MAAO,CAAA,QAAA,EAAU,kBAAmB,CAAA,SAAS,CAAC,CAAA;AAAA;AAEvD,EAAA,IAAI,KAAO,EAAA;AACT,IAAO,MAAA,CAAA,MAAA;AAAA,MACL,OAAA;AAAA,MACA,mBAAmB,KAAK,CAAA,EAAG,WAAW,CAAM,GAAA,EAAA,QAAQ,KAAK,EAAE,CAAA,CAAA;AAAA,KAC7D;AAAA;AAEF,EAAO,MAAA,CAAA,MAAA;AAAA,IACL,SAAA;AAAA,IACA;;AAAA,yBAAgC,EAAA,MAAA,CAAO,SAAS,IAAI,CAAA;AAAA,GACtD;AAEA,EACE,uBAAA,GAAA,CAAC,UAAO,SAAW,EAAA,WAAA,EACjB,8BAAC,KAAI,EAAA,EAAA,SAAA,EAAW,OAAO,IACrB,EAAA,QAAA,kBAAA,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,MAAO,EAAA,QAAA;AAAA,MACP,WAAW,MAAO,CAAA,IAAA;AAAA,MAClB,IAAI,CAAG,EAAA,QAAA,EAAU,CAAI,CAAA,EAAA,MAAA,CAAO,UAAU,CAAA,CAAA;AAAA,MAEtC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,kBAAmB,EAAA,EAAA,CAAA;AAAA,wBACpB,GAAA,CAAC,cAAW,QAAgC,EAAA,kCAAA,EAAA;AAAA;AAAA;AAAA,KAEhD,CACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"TechDocsAskQuestionAddon.esm.js","sources":["../../../src/components/TechDocsAskQuestionAddon/TechDocsAskQuestionAddon.tsx"],"sourcesContent":["import { makeStyles, Portal, Typography } from '@material-ui/core';\nimport {\n useShadowRootElements,\n useTechDocsReaderPage,\n} from '@backstage/plugin-techdocs-react';\nimport { Link } from '@backstage/core-components';\nimport { askRouteRef } from '@drodil/backstage-plugin-qeta-react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport ContactSupportIcon from '@material-ui/icons/ContactSupport';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n padding: theme.spacing(1),\n },\n link: {\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'flex-end',\n alignItems: 'center',\n },\n}));\n\nexport const TechDocsAskQuestionAddon = () => {\n const styles = useStyles();\n const { title, subtitle, entityRef } = useTechDocsReaderPage();\n const [mainContent] = useShadowRootElements([\n '[data-md-component=\"main\"] .md-content',\n ]);\n\n const askRoute = useRouteRef(askRouteRef);\n\n const params = new URLSearchParams();\n if (entityRef) {\n params.append('entity', stringifyEntityRef(entityRef));\n }\n if (title) {\n params.append(\n 'title',\n `Question about \"${title}${subtitle ? ` - ${subtitle}` : ''}\"`,\n );\n }\n params.append(\n 'content',\n `\\n\\nThis question relates to ${window.location.href}`,\n );\n\n return (\n <Portal container={mainContent}>\n <div className={styles.root}>\n <Link\n target=\"_blank\"\n className={styles.link}\n to={`${askRoute()}?${params.toString()}`}\n >\n <ContactSupportIcon />\n <Typography>Ask a question about the content</Typography>\n </Link>\n </div>\n </Portal>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAWA,MAAM,SAAA,GAAY,WAAW,CAAA,KAAA,MAAU;AAAA,EACrC,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA,GAC1B;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,MAAA;AAAA,IACT,YAAA,EAAc,QAAA;AAAA,IACd,cAAA,EAAgB,UAAA;AAAA,IAChB,UAAA,EAAY;AAAA;AAEhB,CAAA,CAAE,CAAA;AAEK,MAAM,2BAA2B,MAAM;AAC5C,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,SAAA,KAAc,qBAAA,EAAsB;AAC7D,EAAA,MAAM,CAAC,WAAW,CAAA,GAAI,qBAAA,CAAsB;AAAA,IAC1C;AAAA,GACD,CAAA;AAED,EAAA,MAAM,QAAA,GAAW,YAAY,WAAW,CAAA;AAExC,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,MAAA,CAAO,MAAA,CAAO,QAAA,EAAU,kBAAA,CAAmB,SAAS,CAAC,CAAA;AAAA,EACvD;AACA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAA,CAAO,MAAA;AAAA,MACL,OAAA;AAAA,MACA,mBAAmB,KAAK,CAAA,EAAG,WAAW,CAAA,GAAA,EAAM,QAAQ,KAAK,EAAE,CAAA,CAAA;AAAA,KAC7D;AAAA,EACF;AACA,EAAA,MAAA,CAAO,MAAA;AAAA,IACL,SAAA;AAAA,IACA;;AAAA,yBAAA,EAAgC,MAAA,CAAO,SAAS,IAAI,CAAA;AAAA,GACtD;AAEA,EAAA,uBACE,GAAA,CAAC,UAAO,SAAA,EAAW,WAAA,EACjB,8BAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,IAAA,EACrB,QAAA,kBAAA,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAO,QAAA;AAAA,MACP,WAAW,MAAA,CAAO,IAAA;AAAA,MAClB,IAAI,CAAA,EAAG,QAAA,EAAU,CAAA,CAAA,EAAI,MAAA,CAAO,UAAU,CAAA,CAAA;AAAA,MAEtC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,kBAAA,EAAA,EAAmB,CAAA;AAAA,wBACpB,GAAA,CAAC,cAAW,QAAA,EAAA,kCAAA,EAAgC;AAAA;AAAA;AAAA,KAEhD,CAAA,EACF,CAAA;AAEJ;;;;"}
@@ -4,7 +4,7 @@ import { useParams, useSearchParams } from 'react-router-dom';
4
4
  import { useUserInfo, qetaTranslationRef, useIdentityApi, useQetaApi, RelativeTimeWithTooltip, ContentHeader, UserFollowButton, AskQuestionButton, WriteArticleButton, CreateLinkButton, PostsContainer, CollectionsContainer, AnswersContainer } from '@drodil/backstage-plugin-qeta-react';
5
5
  import { UserStatsContent } from './UserStatsContent.esm.js';
6
6
  import { TabContext, TabList, TabPanel } from '@material-ui/lab';
7
- import { makeStyles, Box, Avatar, Typography, Tab } from '@material-ui/core';
7
+ import { Box, Avatar, Typography, Tab, makeStyles } from '@material-ui/core';
8
8
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
9
9
  import AssessmentIcon from '@material-ui/icons/Assessment';
10
10
  import HelpOutline from '@material-ui/icons/HelpOutline';
@@ -1 +1 @@
1
- {"version":3,"file":"UserPage.esm.js","sources":["../../../src/components/UserPage/UserPage.tsx"],"sourcesContent":["import { ChangeEvent, useState } from 'react';\nimport { useParams, useSearchParams } from 'react-router-dom';\nimport {\n AnswersContainer,\n AskQuestionButton,\n CollectionsContainer,\n ContentHeader,\n CreateLinkButton,\n PostsContainer,\n qetaTranslationRef,\n useIdentityApi,\n UserFollowButton,\n useUserInfo,\n WriteArticleButton,\n useQetaApi,\n RelativeTimeWithTooltip,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { UserStatsContent } from './UserStatsContent';\nimport { TabContext, TabList, TabPanel } from '@material-ui/lab';\nimport { Avatar, Box, makeStyles, Tab, Typography } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport AssessmentIcon from '@material-ui/icons/Assessment';\nimport HelpOutlineIcon from '@material-ui/icons/HelpOutline';\nimport CollectionsBookmarkIcon from '@material-ui/icons/CollectionsBookmark';\nimport CollectionsIcon from '@material-ui/icons/Collections';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport LinkIcon from '@material-ui/icons/Link';\n\nconst useStyles = makeStyles(theme => ({\n tabIcon: {\n marginRight: theme.spacing(1),\n },\n tabPanel: {\n padding: theme.spacing(3, 0),\n },\n avatar: {\n width: theme.spacing(12),\n height: theme.spacing(12),\n marginRight: theme.spacing(3),\n boxShadow: theme.shadows[2],\n },\n headerContent: {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(3, 0),\n },\n tabList: {},\n tabLabel: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n minWidth: 0,\n },\n}));\n\nexport const UserPage = () => {\n const identity = useParams()['*'] ?? 'unknown';\n const { name, initials, user, secondaryTitle } = useUserInfo(identity);\n const [tab, setTab] = useState('statistics');\n const { t } = useTranslationRef(qetaTranslationRef);\n const [_searchParams, setSearchParams] = useSearchParams();\n const classes = useStyles();\n const {\n value: currentUser,\n loading: loadingUser,\n error: userError,\n } = useIdentityApi(api => api.getBackstageIdentity(), []);\n const { value: userStats, loading: loadingUserStats } = useQetaApi(\n api => api.getUserStats(identity),\n [identity],\n );\n\n const handleChange = (_event: ChangeEvent<{}>, newValue: string) => {\n setSearchParams({});\n setTab(newValue);\n };\n\n const TabLabel = ({\n icon,\n label,\n }: {\n icon: React.ReactNode;\n label: string;\n }) => (\n <div className={classes.tabLabel}>\n {icon}\n <span>{label}</span>\n </div>\n );\n\n const title = (\n <Box\n className={classes.headerContent}\n role=\"banner\"\n aria-label={t('userPage.profileHeader', {})}\n >\n <Avatar\n src={user?.spec?.profile?.picture}\n alt={name}\n variant=\"rounded\"\n className={classes.avatar}\n aria-label={t('userPage.profilePicture', { name })}\n >\n {initials}\n </Avatar>\n <Box display=\"flex\" flexDirection=\"column\" justifyContent=\"center\">\n <Box display=\"flex\" alignItems=\"center\">\n <Typography\n variant=\"h4\"\n component=\"h2\"\n id=\"user-name\"\n style={{ fontWeight: 700 }}\n >\n {name}\n </Typography>\n </Box>\n {(secondaryTitle || user?.spec?.profile?.email) && (\n <Typography variant=\"h6\" color=\"textSecondary\">\n {secondaryTitle || user?.spec?.profile?.email}\n </Typography>\n )}\n {userStats?.summary?.lastSeen && (\n <Typography variant=\"body2\" color=\"textSecondary\">\n {t('stats.lastSeen')}:{' '}\n <RelativeTimeWithTooltip value={userStats.summary.lastSeen} />\n </Typography>\n )}\n </Box>\n </Box>\n );\n\n return (\n <>\n <ContentHeader titleComponent={title}>\n {!loadingUser &&\n !userError &&\n currentUser?.userEntityRef !== identity && (\n <UserFollowButton\n userRef={identity}\n aria-label={t('userPage.followUser', { name })}\n />\n )}\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n <TabContext value={tab}>\n <Box className={classes.tabList}>\n <TabList\n onChange={handleChange}\n aria-label={t('userPage.profileTab', {})}\n aria-labelledby=\"user-name\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n <Tab\n value=\"statistics\"\n label={\n <TabLabel\n icon={<AssessmentIcon className={classes.tabIcon} />}\n label={t('userPage.statistics', {})}\n />\n }\n />\n <Tab\n value=\"questions\"\n label={\n <TabLabel\n icon={<HelpOutlineIcon className={classes.tabIcon} />}\n label={t('userPage.questions', {})}\n />\n }\n />\n <Tab\n value=\"articles\"\n label={\n <TabLabel\n icon={<CollectionsBookmarkIcon className={classes.tabIcon} />}\n label={t('userPage.articles', {})}\n />\n }\n />\n <Tab\n value=\"links\"\n label={\n <TabLabel\n icon={<LinkIcon className={classes.tabIcon} />}\n label={t('userPage.links', {})}\n />\n }\n />\n <Tab\n value=\"collections\"\n label={\n <TabLabel\n icon={<CollectionsIcon className={classes.tabIcon} />}\n label={t('userPage.collections', {})}\n />\n }\n />\n <Tab\n value=\"answers\"\n label={\n <TabLabel\n icon={<QuestionAnswerIcon className={classes.tabIcon} />}\n label={t('userPage.answers', {})}\n />\n }\n />\n </TabList>\n </Box>\n <TabPanel value=\"statistics\" className={classes.tabPanel}>\n <UserStatsContent\n userRef={identity ?? ''}\n stats={userStats}\n loading={loadingUserStats}\n />\n </TabPanel>\n <TabPanel value=\"questions\" className={classes.tabPanel}>\n <PostsContainer\n author={identity ?? ''}\n showNoQuestionsBtn={false}\n type=\"question\"\n prefix=\"user-questions\"\n />\n </TabPanel>\n <TabPanel value=\"articles\" className={classes.tabPanel}>\n <PostsContainer\n author={identity ?? ''}\n type=\"article\"\n showNoQuestionsBtn={false}\n prefix=\"user-articles\"\n />\n </TabPanel>\n <TabPanel value=\"links\" className={classes.tabPanel}>\n <PostsContainer\n author={identity ?? ''}\n type=\"link\"\n showNoQuestionsBtn={false}\n prefix=\"user-links\"\n />\n </TabPanel>\n <TabPanel value=\"collections\" className={classes.tabPanel}>\n <CollectionsContainer\n owner={identity ?? ''}\n prefix=\"user-collections\"\n />\n </TabPanel>\n <TabPanel value=\"answers\" className={classes.tabPanel}>\n <AnswersContainer\n author={identity ?? ''}\n title={t('userPage.answers', {})}\n prefix=\"user-answers\"\n />\n </TabPanel>\n </TabContext>\n </>\n );\n};\n"],"names":["HelpOutlineIcon"],"mappings":";;;;;;;;;;;;;;;AA4BA,MAAM,SAAA,GAAY,WAAW,CAAU,KAAA,MAAA;AAAA,EACrC,OAAS,EAAA;AAAA,IACP,WAAA,EAAa,KAAM,CAAA,OAAA,CAAQ,CAAC;AAAA,GAC9B;AAAA,EACA,QAAU,EAAA;AAAA,IACR,OAAS,EAAA,KAAA,CAAM,OAAQ,CAAA,CAAA,EAAG,CAAC;AAAA,GAC7B;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,EAAE,CAAA;AAAA,IACvB,MAAA,EAAQ,KAAM,CAAA,OAAA,CAAQ,EAAE,CAAA;AAAA,IACxB,WAAA,EAAa,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC5B,SAAA,EAAW,KAAM,CAAA,OAAA,CAAQ,CAAC;AAAA,GAC5B;AAAA,EACA,aAAe,EAAA;AAAA,IACb,OAAS,EAAA,MAAA;AAAA,IACT,UAAY,EAAA,QAAA;AAAA,IACZ,OAAS,EAAA,KAAA,CAAM,OAAQ,CAAA,CAAA,EAAG,CAAC;AAAA,GAC7B;AAAA,EACA,SAAS,EAAC;AAAA,EACV,QAAU,EAAA;AAAA,IACR,OAAS,EAAA,MAAA;AAAA,IACT,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA,YAAA;AAAA,IAChB,QAAU,EAAA;AAAA;AAEd,CAAE,CAAA,CAAA;AAEK,MAAM,WAAW,MAAM;AAC5B,EAAA,MAAM,QAAW,GAAA,SAAA,EAAY,CAAA,GAAG,CAAK,IAAA,SAAA;AACrC,EAAA,MAAM,EAAE,IAAM,EAAA,QAAA,EAAU,MAAM,cAAe,EAAA,GAAI,YAAY,QAAQ,CAAA;AACrE,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAI,SAAS,YAAY,CAAA;AAC3C,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,CAAC,aAAA,EAAe,eAAe,CAAA,GAAI,eAAgB,EAAA;AACzD,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAM,MAAA;AAAA,IACJ,KAAO,EAAA,WAAA;AAAA,IACP,OAAS,EAAA,WAAA;AAAA,IACT,KAAO,EAAA;AAAA,MACL,cAAe,CAAA,CAAA,GAAA,KAAO,IAAI,oBAAqB,EAAA,EAAG,EAAE,CAAA;AACxD,EAAA,MAAM,EAAE,KAAA,EAAO,SAAW,EAAA,OAAA,EAAS,kBAAqB,GAAA,UAAA;AAAA,IACtD,CAAA,GAAA,KAAO,GAAI,CAAA,YAAA,CAAa,QAAQ,CAAA;AAAA,IAChC,CAAC,QAAQ;AAAA,GACX;AAEA,EAAM,MAAA,YAAA,GAAe,CAAC,MAAA,EAAyB,QAAqB,KAAA;AAClE,IAAA,eAAA,CAAgB,EAAE,CAAA;AAClB,IAAA,MAAA,CAAO,QAAQ,CAAA;AAAA,GACjB;AAEA,EAAA,MAAM,WAAW,CAAC;AAAA,IAChB,IAAA;AAAA,IACA;AAAA,GAKA,qBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,QAAQ,QACrB,EAAA,QAAA,EAAA;AAAA,IAAA,IAAA;AAAA,oBACD,GAAA,CAAC,UAAM,QAAM,EAAA,KAAA,EAAA;AAAA,GACf,EAAA,CAAA;AAGF,EAAA,MAAM,KACJ,mBAAA,IAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,WAAW,OAAQ,CAAA,aAAA;AAAA,MACnB,IAAK,EAAA,QAAA;AAAA,MACL,YAAY,EAAA,CAAA,CAAE,wBAA0B,EAAA,EAAE,CAAA;AAAA,MAE1C,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,IAAM,EAAA,IAAA,EAAM,OAAS,EAAA,OAAA;AAAA,YAC1B,GAAK,EAAA,IAAA;AAAA,YACL,OAAQ,EAAA,SAAA;AAAA,YACR,WAAW,OAAQ,CAAA,MAAA;AAAA,YACnB,YAAY,EAAA,CAAA,CAAE,yBAA2B,EAAA,EAAE,MAAM,CAAA;AAAA,YAEhD,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,6BACC,GAAI,EAAA,EAAA,OAAA,EAAQ,QAAO,aAAc,EAAA,QAAA,EAAS,gBAAe,QACxD,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,GAAI,EAAA,EAAA,OAAA,EAAQ,MAAO,EAAA,UAAA,EAAW,QAC7B,EAAA,QAAA,kBAAA,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,OAAQ,EAAA,IAAA;AAAA,cACR,SAAU,EAAA,IAAA;AAAA,cACV,EAAG,EAAA,WAAA;AAAA,cACH,KAAA,EAAO,EAAE,UAAA,EAAY,GAAI,EAAA;AAAA,cAExB,QAAA,EAAA;AAAA;AAAA,WAEL,EAAA,CAAA;AAAA,UAAA,CACE,cAAkB,IAAA,IAAA,EAAM,IAAM,EAAA,OAAA,EAAS,0BACtC,GAAA,CAAA,UAAA,EAAA,EAAW,OAAQ,EAAA,IAAA,EAAK,OAAM,eAC5B,EAAA,QAAA,EAAA,cAAA,IAAkB,IAAM,EAAA,IAAA,EAAM,SAAS,KAC1C,EAAA,CAAA;AAAA,UAED,SAAA,EAAW,SAAS,QACnB,oBAAA,IAAA,CAAC,cAAW,OAAQ,EAAA,OAAA,EAAQ,OAAM,eAC/B,EAAA,QAAA,EAAA;AAAA,YAAA,CAAA,CAAE,gBAAgB,CAAA;AAAA,YAAE,GAAA;AAAA,YAAE,GAAA;AAAA,4BACtB,GAAA,CAAA,uBAAA,EAAA,EAAwB,KAAO,EAAA,SAAA,CAAU,QAAQ,QAAU,EAAA;AAAA,WAC9D,EAAA;AAAA,SAEJ,EAAA;AAAA;AAAA;AAAA,GACF;AAGF,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAC,IAAA,CAAA,aAAA,EAAA,EAAc,gBAAgB,KAC5B,EAAA,QAAA,EAAA;AAAA,MAAA,CAAC,WACA,IAAA,CAAC,SACD,IAAA,WAAA,EAAa,kBAAkB,QAC7B,oBAAA,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,OAAS,EAAA,QAAA;AAAA,UACT,YAAY,EAAA,CAAA,CAAE,qBAAuB,EAAA,EAAE,MAAM;AAAA;AAAA,OAC/C;AAAA,0BAEH,iBAAkB,EAAA,EAAA,CAAA;AAAA,0BAClB,kBAAmB,EAAA,EAAA,CAAA;AAAA,0BACnB,gBAAiB,EAAA,EAAA;AAAA,KACpB,EAAA,CAAA;AAAA,oBACA,IAAA,CAAC,UAAW,EAAA,EAAA,KAAA,EAAO,GACjB,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,GAAA,EAAA,EAAI,SAAW,EAAA,OAAA,CAAQ,OACtB,EAAA,QAAA,kBAAA,IAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,QAAU,EAAA,YAAA;AAAA,UACV,YAAY,EAAA,CAAA,CAAE,qBAAuB,EAAA,EAAE,CAAA;AAAA,UACvC,iBAAgB,EAAA,WAAA;AAAA,UAChB,OAAQ,EAAA,YAAA;AAAA,UACR,aAAc,EAAA,MAAA;AAAA,UAEd,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,KAAM,EAAA,YAAA;AAAA,gBACN,KACE,kBAAA,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAM,kBAAA,GAAA,CAAC,cAAe,EAAA,EAAA,SAAA,EAAW,QAAQ,OAAS,EAAA,CAAA;AAAA,oBAClD,KAAO,EAAA,CAAA,CAAE,qBAAuB,EAAA,EAAE;AAAA;AAAA;AACpC;AAAA,aAEJ;AAAA,4BACA,GAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,KAAM,EAAA,WAAA;AAAA,gBACN,KACE,kBAAA,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAM,kBAAA,GAAA,CAACA,WAAgB,EAAA,EAAA,SAAA,EAAW,QAAQ,OAAS,EAAA,CAAA;AAAA,oBACnD,KAAO,EAAA,CAAA,CAAE,oBAAsB,EAAA,EAAE;AAAA;AAAA;AACnC;AAAA,aAEJ;AAAA,4BACA,GAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,KAAM,EAAA,UAAA;AAAA,gBACN,KACE,kBAAA,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAM,kBAAA,GAAA,CAAC,uBAAwB,EAAA,EAAA,SAAA,EAAW,QAAQ,OAAS,EAAA,CAAA;AAAA,oBAC3D,KAAO,EAAA,CAAA,CAAE,mBAAqB,EAAA,EAAE;AAAA;AAAA;AAClC;AAAA,aAEJ;AAAA,4BACA,GAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,KAAM,EAAA,OAAA;AAAA,gBACN,KACE,kBAAA,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAM,kBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,SAAA,EAAW,QAAQ,OAAS,EAAA,CAAA;AAAA,oBAC5C,KAAO,EAAA,CAAA,CAAE,gBAAkB,EAAA,EAAE;AAAA;AAAA;AAC/B;AAAA,aAEJ;AAAA,4BACA,GAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,KAAM,EAAA,aAAA;AAAA,gBACN,KACE,kBAAA,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAM,kBAAA,GAAA,CAAC,eAAgB,EAAA,EAAA,SAAA,EAAW,QAAQ,OAAS,EAAA,CAAA;AAAA,oBACnD,KAAO,EAAA,CAAA,CAAE,sBAAwB,EAAA,EAAE;AAAA;AAAA;AACrC;AAAA,aAEJ;AAAA,4BACA,GAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,KAAM,EAAA,SAAA;AAAA,gBACN,KACE,kBAAA,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAM,kBAAA,GAAA,CAAC,kBAAmB,EAAA,EAAA,SAAA,EAAW,QAAQ,OAAS,EAAA,CAAA;AAAA,oBACtD,KAAO,EAAA,CAAA,CAAE,kBAAoB,EAAA,EAAE;AAAA;AAAA;AACjC;AAAA;AAEJ;AAAA;AAAA,OAEJ,EAAA,CAAA;AAAA,0BACC,QAAS,EAAA,EAAA,KAAA,EAAM,YAAa,EAAA,SAAA,EAAW,QAAQ,QAC9C,EAAA,QAAA,kBAAA,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,SAAS,QAAY,IAAA,EAAA;AAAA,UACrB,KAAO,EAAA,SAAA;AAAA,UACP,OAAS,EAAA;AAAA;AAAA,OAEb,EAAA,CAAA;AAAA,0BACC,QAAS,EAAA,EAAA,KAAA,EAAM,WAAY,EAAA,SAAA,EAAW,QAAQ,QAC7C,EAAA,QAAA,kBAAA,GAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,QAAQ,QAAY,IAAA,EAAA;AAAA,UACpB,kBAAoB,EAAA,KAAA;AAAA,UACpB,IAAK,EAAA,UAAA;AAAA,UACL,MAAO,EAAA;AAAA;AAAA,OAEX,EAAA,CAAA;AAAA,0BACC,QAAS,EAAA,EAAA,KAAA,EAAM,UAAW,EAAA,SAAA,EAAW,QAAQ,QAC5C,EAAA,QAAA,kBAAA,GAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,QAAQ,QAAY,IAAA,EAAA;AAAA,UACpB,IAAK,EAAA,SAAA;AAAA,UACL,kBAAoB,EAAA,KAAA;AAAA,UACpB,MAAO,EAAA;AAAA;AAAA,OAEX,EAAA,CAAA;AAAA,0BACC,QAAS,EAAA,EAAA,KAAA,EAAM,OAAQ,EAAA,SAAA,EAAW,QAAQ,QACzC,EAAA,QAAA,kBAAA,GAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,QAAQ,QAAY,IAAA,EAAA;AAAA,UACpB,IAAK,EAAA,MAAA;AAAA,UACL,kBAAoB,EAAA,KAAA;AAAA,UACpB,MAAO,EAAA;AAAA;AAAA,OAEX,EAAA,CAAA;AAAA,0BACC,QAAS,EAAA,EAAA,KAAA,EAAM,aAAc,EAAA,SAAA,EAAW,QAAQ,QAC/C,EAAA,QAAA,kBAAA,GAAA;AAAA,QAAC,oBAAA;AAAA,QAAA;AAAA,UACC,OAAO,QAAY,IAAA,EAAA;AAAA,UACnB,MAAO,EAAA;AAAA;AAAA,OAEX,EAAA,CAAA;AAAA,0BACC,QAAS,EAAA,EAAA,KAAA,EAAM,SAAU,EAAA,SAAA,EAAW,QAAQ,QAC3C,EAAA,QAAA,kBAAA,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,QAAQ,QAAY,IAAA,EAAA;AAAA,UACpB,KAAO,EAAA,CAAA,CAAE,kBAAoB,EAAA,EAAE,CAAA;AAAA,UAC/B,MAAO,EAAA;AAAA;AAAA,OAEX,EAAA;AAAA,KACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"UserPage.esm.js","sources":["../../../src/components/UserPage/UserPage.tsx"],"sourcesContent":["import { ChangeEvent, useState } from 'react';\nimport { useParams, useSearchParams } from 'react-router-dom';\nimport {\n AnswersContainer,\n AskQuestionButton,\n CollectionsContainer,\n ContentHeader,\n CreateLinkButton,\n PostsContainer,\n qetaTranslationRef,\n useIdentityApi,\n UserFollowButton,\n useUserInfo,\n WriteArticleButton,\n useQetaApi,\n RelativeTimeWithTooltip,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { UserStatsContent } from './UserStatsContent';\nimport { TabContext, TabList, TabPanel } from '@material-ui/lab';\nimport { Avatar, Box, makeStyles, Tab, Typography } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport AssessmentIcon from '@material-ui/icons/Assessment';\nimport HelpOutlineIcon from '@material-ui/icons/HelpOutline';\nimport CollectionsBookmarkIcon from '@material-ui/icons/CollectionsBookmark';\nimport CollectionsIcon from '@material-ui/icons/Collections';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport LinkIcon from '@material-ui/icons/Link';\n\nconst useStyles = makeStyles(theme => ({\n tabIcon: {\n marginRight: theme.spacing(1),\n },\n tabPanel: {\n padding: theme.spacing(3, 0),\n },\n avatar: {\n width: theme.spacing(12),\n height: theme.spacing(12),\n marginRight: theme.spacing(3),\n boxShadow: theme.shadows[2],\n },\n headerContent: {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(3, 0),\n },\n tabList: {},\n tabLabel: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n minWidth: 0,\n },\n}));\n\nexport const UserPage = () => {\n const identity = useParams()['*'] ?? 'unknown';\n const { name, initials, user, secondaryTitle } = useUserInfo(identity);\n const [tab, setTab] = useState('statistics');\n const { t } = useTranslationRef(qetaTranslationRef);\n const [_searchParams, setSearchParams] = useSearchParams();\n const classes = useStyles();\n const {\n value: currentUser,\n loading: loadingUser,\n error: userError,\n } = useIdentityApi(api => api.getBackstageIdentity(), []);\n const { value: userStats, loading: loadingUserStats } = useQetaApi(\n api => api.getUserStats(identity),\n [identity],\n );\n\n const handleChange = (_event: ChangeEvent<{}>, newValue: string) => {\n setSearchParams({});\n setTab(newValue);\n };\n\n const TabLabel = ({\n icon,\n label,\n }: {\n icon: React.ReactNode;\n label: string;\n }) => (\n <div className={classes.tabLabel}>\n {icon}\n <span>{label}</span>\n </div>\n );\n\n const title = (\n <Box\n className={classes.headerContent}\n role=\"banner\"\n aria-label={t('userPage.profileHeader', {})}\n >\n <Avatar\n src={user?.spec?.profile?.picture}\n alt={name}\n variant=\"rounded\"\n className={classes.avatar}\n aria-label={t('userPage.profilePicture', { name })}\n >\n {initials}\n </Avatar>\n <Box display=\"flex\" flexDirection=\"column\" justifyContent=\"center\">\n <Box display=\"flex\" alignItems=\"center\">\n <Typography\n variant=\"h4\"\n component=\"h2\"\n id=\"user-name\"\n style={{ fontWeight: 700 }}\n >\n {name}\n </Typography>\n </Box>\n {(secondaryTitle || user?.spec?.profile?.email) && (\n <Typography variant=\"h6\" color=\"textSecondary\">\n {secondaryTitle || user?.spec?.profile?.email}\n </Typography>\n )}\n {userStats?.summary?.lastSeen && (\n <Typography variant=\"body2\" color=\"textSecondary\">\n {t('stats.lastSeen')}:{' '}\n <RelativeTimeWithTooltip value={userStats.summary.lastSeen} />\n </Typography>\n )}\n </Box>\n </Box>\n );\n\n return (\n <>\n <ContentHeader titleComponent={title}>\n {!loadingUser &&\n !userError &&\n currentUser?.userEntityRef !== identity && (\n <UserFollowButton\n userRef={identity}\n aria-label={t('userPage.followUser', { name })}\n />\n )}\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ContentHeader>\n <TabContext value={tab}>\n <Box className={classes.tabList}>\n <TabList\n onChange={handleChange}\n aria-label={t('userPage.profileTab', {})}\n aria-labelledby=\"user-name\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n <Tab\n value=\"statistics\"\n label={\n <TabLabel\n icon={<AssessmentIcon className={classes.tabIcon} />}\n label={t('userPage.statistics', {})}\n />\n }\n />\n <Tab\n value=\"questions\"\n label={\n <TabLabel\n icon={<HelpOutlineIcon className={classes.tabIcon} />}\n label={t('userPage.questions', {})}\n />\n }\n />\n <Tab\n value=\"articles\"\n label={\n <TabLabel\n icon={<CollectionsBookmarkIcon className={classes.tabIcon} />}\n label={t('userPage.articles', {})}\n />\n }\n />\n <Tab\n value=\"links\"\n label={\n <TabLabel\n icon={<LinkIcon className={classes.tabIcon} />}\n label={t('userPage.links', {})}\n />\n }\n />\n <Tab\n value=\"collections\"\n label={\n <TabLabel\n icon={<CollectionsIcon className={classes.tabIcon} />}\n label={t('userPage.collections', {})}\n />\n }\n />\n <Tab\n value=\"answers\"\n label={\n <TabLabel\n icon={<QuestionAnswerIcon className={classes.tabIcon} />}\n label={t('userPage.answers', {})}\n />\n }\n />\n </TabList>\n </Box>\n <TabPanel value=\"statistics\" className={classes.tabPanel}>\n <UserStatsContent\n userRef={identity ?? ''}\n stats={userStats}\n loading={loadingUserStats}\n />\n </TabPanel>\n <TabPanel value=\"questions\" className={classes.tabPanel}>\n <PostsContainer\n author={identity ?? ''}\n showNoQuestionsBtn={false}\n type=\"question\"\n prefix=\"user-questions\"\n />\n </TabPanel>\n <TabPanel value=\"articles\" className={classes.tabPanel}>\n <PostsContainer\n author={identity ?? ''}\n type=\"article\"\n showNoQuestionsBtn={false}\n prefix=\"user-articles\"\n />\n </TabPanel>\n <TabPanel value=\"links\" className={classes.tabPanel}>\n <PostsContainer\n author={identity ?? ''}\n type=\"link\"\n showNoQuestionsBtn={false}\n prefix=\"user-links\"\n />\n </TabPanel>\n <TabPanel value=\"collections\" className={classes.tabPanel}>\n <CollectionsContainer\n owner={identity ?? ''}\n prefix=\"user-collections\"\n />\n </TabPanel>\n <TabPanel value=\"answers\" className={classes.tabPanel}>\n <AnswersContainer\n author={identity ?? ''}\n title={t('userPage.answers', {})}\n prefix=\"user-answers\"\n />\n </TabPanel>\n </TabContext>\n </>\n );\n};\n"],"names":["HelpOutlineIcon"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserStatsContent.esm.js","sources":["../../../src/components/UserPage/UserStatsContent.tsx"],"sourcesContent":["import {\n StatsChart,\n useQetaApi,\n UserBadges,\n} from '@drodil/backstage-plugin-qeta-react';\nimport {\n StatisticsResponse,\n UserStat,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { Card, CardContent, CircularProgress, Grid } from '@material-ui/core';\n\nexport const UserStatsContent = (props: {\n userRef: string;\n stats?: StatisticsResponse<UserStat>;\n loading?: boolean;\n}) => {\n const {\n value: response,\n loading,\n error,\n } = useQetaApi(\n api => {\n if (props.stats) {\n return Promise.resolve(props.stats);\n }\n return api.getUserStats(props.userRef);\n },\n [props.userRef, props.stats],\n );\n\n const stats = props.stats || response;\n const isLoading = props.loading || loading;\n\n if (error) {\n return null;\n }\n return (\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <Card>\n <CardContent>\n <UserBadges entityRef={props.userRef} />\n </CardContent>\n </Card>\n </Grid>\n <Grid item xs={12}>\n <Card>\n <CardContent>\n {!isLoading && stats && (\n <StatsChart\n data={stats.statistics}\n summary={stats.summary as unknown as Record<string, number>}\n />\n )}\n {isLoading && !props.stats && <CircularProgress />}\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;AAWa,MAAA,gBAAA,GAAmB,CAAC,KAI3B,KAAA;AACJ,EAAM,MAAA;AAAA,IACJ,KAAO,EAAA,QAAA;AAAA,IACP,OAAA;AAAA,IACA;AAAA,GACE,GAAA,UAAA;AAAA,IACF,CAAO,GAAA,KAAA;AACL,MAAA,IAAI,MAAM,KAAO,EAAA;AACf,QAAO,OAAA,OAAA,CAAQ,OAAQ,CAAA,KAAA,CAAM,KAAK,CAAA;AAAA;AAEpC,MAAO,OAAA,GAAA,CAAI,YAAa,CAAA,KAAA,CAAM,OAAO,CAAA;AAAA,KACvC;AAAA,IACA,CAAC,KAAA,CAAM,OAAS,EAAA,KAAA,CAAM,KAAK;AAAA,GAC7B;AAEA,EAAM,MAAA,KAAA,GAAQ,MAAM,KAAS,IAAA,QAAA;AAC7B,EAAM,MAAA,SAAA,GAAY,MAAM,OAAW,IAAA,OAAA;AAEnC,EAAA,IAAI,KAAO,EAAA;AACT,IAAO,OAAA,IAAA;AAAA;AAET,EAAA,uBACG,IAAA,CAAA,IAAA,EAAA,EAAK,SAAS,EAAA,IAAA,EAAC,SAAS,CACvB,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAK,IAAI,EAAA,IAAA,EAAC,EAAI,EAAA,EAAA,EACb,8BAAC,IACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,WACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,cAAW,SAAW,EAAA,KAAA,CAAM,OAAS,EAAA,CAAA,EACxC,GACF,CACF,EAAA,CAAA;AAAA,oBACA,GAAA,CAAC,QAAK,IAAI,EAAA,IAAA,EAAC,IAAI,EACb,EAAA,QAAA,kBAAA,GAAA,CAAC,IACC,EAAA,EAAA,QAAA,kBAAA,IAAA,CAAC,WACE,EAAA,EAAA,QAAA,EAAA;AAAA,MAAA,CAAC,aAAa,KACb,oBAAA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,MAAM,KAAM,CAAA,UAAA;AAAA,UACZ,SAAS,KAAM,CAAA;AAAA;AAAA,OACjB;AAAA,MAED,SAAa,IAAA,CAAC,KAAM,CAAA,KAAA,wBAAU,gBAAiB,EAAA,EAAA;AAAA,KAAA,EAClD,GACF,CACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"UserStatsContent.esm.js","sources":["../../../src/components/UserPage/UserStatsContent.tsx"],"sourcesContent":["import {\n StatsChart,\n useQetaApi,\n UserBadges,\n} from '@drodil/backstage-plugin-qeta-react';\nimport {\n StatisticsResponse,\n UserStat,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { Card, CardContent, CircularProgress, Grid } from '@material-ui/core';\n\nexport const UserStatsContent = (props: {\n userRef: string;\n stats?: StatisticsResponse<UserStat>;\n loading?: boolean;\n}) => {\n const {\n value: response,\n loading,\n error,\n } = useQetaApi(\n api => {\n if (props.stats) {\n return Promise.resolve(props.stats);\n }\n return api.getUserStats(props.userRef);\n },\n [props.userRef, props.stats],\n );\n\n const stats = props.stats || response;\n const isLoading = props.loading || loading;\n\n if (error) {\n return null;\n }\n return (\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <Card>\n <CardContent>\n <UserBadges entityRef={props.userRef} />\n </CardContent>\n </Card>\n </Grid>\n <Grid item xs={12}>\n <Card>\n <CardContent>\n {!isLoading && stats && (\n <StatsChart\n data={stats.statistics}\n summary={stats.summary as unknown as Record<string, number>}\n />\n )}\n {isLoading && !props.stats && <CircularProgress />}\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;AAWO,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAI3B;AACJ,EAAA,MAAM;AAAA,IACJ,KAAA,EAAO,QAAA;AAAA,IACP,OAAA;AAAA,IACA;AAAA,GACF,GAAI,UAAA;AAAA,IACF,CAAA,GAAA,KAAO;AACL,MAAA,IAAI,MAAM,KAAA,EAAO;AACf,QAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA;AAAA,MACpC;AACA,MAAA,OAAO,GAAA,CAAI,YAAA,CAAa,KAAA,CAAM,OAAO,CAAA;AAAA,IACvC,CAAA;AAAA,IACA,CAAC,KAAA,CAAM,OAAA,EAAS,KAAA,CAAM,KAAK;AAAA,GAC7B;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,IAAS,QAAA;AAC7B,EAAA,MAAM,SAAA,GAAY,MAAM,OAAA,IAAW,OAAA;AAEnC,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAS,IAAA,EAAC,SAAS,CAAA,EACvB,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAI,EAAA,EACb,8BAAC,IAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,WAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,cAAW,SAAA,EAAW,KAAA,CAAM,OAAA,EAAS,CAAA,EACxC,GACF,CAAA,EACF,CAAA;AAAA,oBACA,GAAA,CAAC,QAAK,IAAA,EAAI,IAAA,EAAC,IAAI,EAAA,EACb,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,WAAA,EAAA,EACE,QAAA,EAAA;AAAA,MAAA,CAAC,aAAa,KAAA,oBACb,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,MAAM,KAAA,CAAM,UAAA;AAAA,UACZ,SAAS,KAAA,CAAM;AAAA;AAAA,OACjB;AAAA,MAED,SAAA,IAAa,CAAC,KAAA,CAAM,KAAA,wBAAU,gBAAA,EAAA,EAAiB;AAAA,KAAA,EAClD,GACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"UsersPage.esm.js","sources":["../../../src/components/UsersPage/UsersPage.tsx"],"sourcesContent":["import {\n ContentHeader,\n qetaTranslationRef,\n UsersContainer,\n} from '@drodil/backstage-plugin-qeta-react';\nimport PeopleOutline from '@material-ui/icons/PeopleOutline';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const UsersPage = () => {\n const { t } = useTranslationRef(qetaTranslationRef);\n\n return (\n <>\n <ContentHeader\n title={t('usersPage.title')}\n titleIcon={<PeopleOutline fontSize=\"large\" />}\n />\n <UsersContainer />\n </>\n );\n};\n"],"names":[],"mappings":";;;;;AAQO,MAAM,YAAY,MAAM;AAC7B,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,iBAAiB,CAAA;AAAA,QAC1B,SAAW,kBAAA,GAAA,CAAC,aAAc,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA;AAAA;AAAA,KAC7C;AAAA,wBACC,cAAe,EAAA,EAAA;AAAA,GAClB,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"UsersPage.esm.js","sources":["../../../src/components/UsersPage/UsersPage.tsx"],"sourcesContent":["import {\n ContentHeader,\n qetaTranslationRef,\n UsersContainer,\n} from '@drodil/backstage-plugin-qeta-react';\nimport PeopleOutline from '@material-ui/icons/PeopleOutline';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const UsersPage = () => {\n const { t } = useTranslationRef(qetaTranslationRef);\n\n return (\n <>\n <ContentHeader\n title={t('usersPage.title')}\n titleIcon={<PeopleOutline fontSize=\"large\" />}\n />\n <UsersContainer />\n </>\n );\n};\n"],"names":[],"mappings":";;;;;AAQO,MAAM,YAAY,MAAM;AAC7B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,iBAAiB,CAAA;AAAA,QAC1B,SAAA,kBAAW,GAAA,CAAC,aAAA,EAAA,EAAc,QAAA,EAAS,OAAA,EAAQ;AAAA;AAAA,KAC7C;AAAA,wBACC,cAAA,EAAA,EAAe;AAAA,GAAA,EAClB,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"WritePage.esm.js","sources":["../../../src/components/WritePage/WritePage.tsx"],"sourcesContent":["import { useParams, useSearchParams } from 'react-router-dom';\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport {\n ContentHeader,\n PostForm,\n qetaTranslationRef,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { InfoCard } from '@backstage/core-components';\nimport { Grid } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const WritePage = () => {\n const { id } = useParams();\n const [searchParams] = useSearchParams();\n const entity = searchParams.get('entity') ?? undefined;\n const entityPage = searchParams.get('entityPage') === 'true';\n const tags = filterTags(searchParams.get('tags'));\n const { t } = useTranslationRef(qetaTranslationRef);\n let title;\n if (id) {\n title = t('writePage.title.existingArticle');\n } else if (entity) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const representation = useEntityPresentation(entity);\n title = t('writePage.title.entityArticle', {\n entity: representation.primaryTitle,\n });\n } else {\n title = t('writePage.title.newArticle');\n }\n\n return (\n <>\n <ContentHeader title={title} />\n <Grid container spacing={3} direction=\"column\">\n <Grid item>\n <InfoCard>\n <PostForm\n id={id}\n entity={entity}\n entityPage={entityPage}\n tags={tags}\n type=\"article\"\n />\n </InfoCard>\n </Grid>\n </Grid>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAYO,MAAM,YAAY,MAAM;AAC7B,EAAM,MAAA,EAAE,EAAG,EAAA,GAAI,SAAU,EAAA;AACzB,EAAM,MAAA,CAAC,YAAY,CAAA,GAAI,eAAgB,EAAA;AACvC,EAAA,MAAM,MAAS,GAAA,YAAA,CAAa,GAAI,CAAA,QAAQ,CAAK,IAAA,KAAA,CAAA;AAC7C,EAAA,MAAM,UAAa,GAAA,YAAA,CAAa,GAAI,CAAA,YAAY,CAAM,KAAA,MAAA;AACtD,EAAA,MAAM,IAAO,GAAA,UAAA,CAAW,YAAa,CAAA,GAAA,CAAI,MAAM,CAAC,CAAA;AAChD,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAI,IAAA,KAAA;AACJ,EAAA,IAAI,EAAI,EAAA;AACN,IAAA,KAAA,GAAQ,EAAE,iCAAiC,CAAA;AAAA,aAClC,MAAQ,EAAA;AAEjB,IAAM,MAAA,cAAA,GAAiB,sBAAsB,MAAM,CAAA;AACnD,IAAA,KAAA,GAAQ,EAAE,+BAAiC,EAAA;AAAA,MACzC,QAAQ,cAAe,CAAA;AAAA,KACxB,CAAA;AAAA,GACI,MAAA;AACL,IAAA,KAAA,GAAQ,EAAE,4BAA4B,CAAA;AAAA;AAGxC,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,iBAAc,KAAc,EAAA,CAAA;AAAA,oBAC5B,GAAA,CAAA,IAAA,EAAA,EAAK,SAAS,EAAA,IAAA,EAAC,OAAS,EAAA,CAAA,EAAG,SAAU,EAAA,QAAA,EACpC,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EACR,8BAAC,QACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,MAAA;AAAA,QACA,UAAA;AAAA,QACA,IAAA;AAAA,QACA,IAAK,EAAA;AAAA;AAAA,KACP,EACF,GACF,CACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"WritePage.esm.js","sources":["../../../src/components/WritePage/WritePage.tsx"],"sourcesContent":["import { useParams, useSearchParams } from 'react-router-dom';\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport {\n ContentHeader,\n PostForm,\n qetaTranslationRef,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { InfoCard } from '@backstage/core-components';\nimport { Grid } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const WritePage = () => {\n const { id } = useParams();\n const [searchParams] = useSearchParams();\n const entity = searchParams.get('entity') ?? undefined;\n const entityPage = searchParams.get('entityPage') === 'true';\n const tags = filterTags(searchParams.get('tags'));\n const { t } = useTranslationRef(qetaTranslationRef);\n let title;\n if (id) {\n title = t('writePage.title.existingArticle');\n } else if (entity) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const representation = useEntityPresentation(entity);\n title = t('writePage.title.entityArticle', {\n entity: representation.primaryTitle,\n });\n } else {\n title = t('writePage.title.newArticle');\n }\n\n return (\n <>\n <ContentHeader title={title} />\n <Grid container spacing={3} direction=\"column\">\n <Grid item>\n <InfoCard>\n <PostForm\n id={id}\n entity={entity}\n entityPage={entityPage}\n tags={tags}\n type=\"article\"\n />\n </InfoCard>\n </Grid>\n </Grid>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAYO,MAAM,YAAY,MAAM;AAC7B,EAAA,MAAM,EAAE,EAAA,EAAG,GAAI,SAAA,EAAU;AACzB,EAAA,MAAM,CAAC,YAAY,CAAA,GAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,GAAA,CAAI,QAAQ,CAAA,IAAK,MAAA;AAC7C,EAAA,MAAM,UAAA,GAAa,YAAA,CAAa,GAAA,CAAI,YAAY,CAAA,KAAM,MAAA;AACtD,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,YAAA,CAAa,GAAA,CAAI,MAAM,CAAC,CAAA;AAChD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,EAAA,EAAI;AACN,IAAA,KAAA,GAAQ,EAAE,iCAAiC,CAAA;AAAA,EAC7C,WAAW,MAAA,EAAQ;AAEjB,IAAA,MAAM,cAAA,GAAiB,sBAAsB,MAAM,CAAA;AACnD,IAAA,KAAA,GAAQ,EAAE,+BAAA,EAAiC;AAAA,MACzC,QAAQ,cAAA,CAAe;AAAA,KACxB,CAAA;AAAA,EACH,CAAA,MAAO;AACL,IAAA,KAAA,GAAQ,EAAE,4BAA4B,CAAA;AAAA,EACxC;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,iBAAc,KAAA,EAAc,CAAA;AAAA,oBAC7B,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAS,IAAA,EAAC,OAAA,EAAS,CAAA,EAAG,SAAA,EAAU,QAAA,EACpC,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EACR,8BAAC,QAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,MAAA;AAAA,QACA,UAAA;AAAA,QACA,IAAA;AAAA,QACA,IAAA,EAAK;AAAA;AAAA,KACP,EACF,GACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useSidebarSettings.esm.js","sources":["../../src/hooks/useSidebarSettings.ts"],"sourcesContent":["import { useLocalStorage } from 'react-use';\n\nexport const useSidebarSettings = () => {\n const [leftCompact, setLeftCompact] = useLocalStorage(\n 'qeta-left-menu-compact',\n false,\n );\n const [rightCompact, setRightCompact] = useLocalStorage(\n 'qeta-right-sidebar-compact',\n false,\n );\n\n const toggleLeft = () => setLeftCompact(!leftCompact);\n const toggleRight = () => setRightCompact(!rightCompact);\n\n return {\n leftCompact: !!leftCompact,\n rightCompact: !!rightCompact,\n toggleLeft,\n toggleRight,\n };\n};\n"],"names":[],"mappings":";;AAEO,MAAM,qBAAqB,MAAM;AACtC,EAAM,MAAA,CAAC,WAAa,EAAA,cAAc,CAAI,GAAA,eAAA;AAAA,IACpC,wBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAM,MAAA,CAAC,YAAc,EAAA,eAAe,CAAI,GAAA,eAAA;AAAA,IACtC,4BAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,UAAa,GAAA,MAAM,cAAe,CAAA,CAAC,WAAW,CAAA;AACpD,EAAA,MAAM,WAAc,GAAA,MAAM,eAAgB,CAAA,CAAC,YAAY,CAAA;AAEvD,EAAO,OAAA;AAAA,IACL,WAAA,EAAa,CAAC,CAAC,WAAA;AAAA,IACf,YAAA,EAAc,CAAC,CAAC,YAAA;AAAA,IAChB,UAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
1
+ {"version":3,"file":"useSidebarSettings.esm.js","sources":["../../src/hooks/useSidebarSettings.ts"],"sourcesContent":["import { useLocalStorage } from 'react-use';\n\nexport const useSidebarSettings = () => {\n const [leftCompact, setLeftCompact] = useLocalStorage(\n 'qeta-left-menu-compact',\n false,\n );\n const [rightCompact, setRightCompact] = useLocalStorage(\n 'qeta-right-sidebar-compact',\n false,\n );\n\n const toggleLeft = () => setLeftCompact(!leftCompact);\n const toggleRight = () => setRightCompact(!rightCompact);\n\n return {\n leftCompact: !!leftCompact,\n rightCompact: !!rightCompact,\n toggleLeft,\n toggleRight,\n };\n};\n"],"names":[],"mappings":";;AAEO,MAAM,qBAAqB,MAAM;AACtC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,eAAA;AAAA,IACpC,wBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,eAAA;AAAA,IACtC,4BAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,UAAA,GAAa,MAAM,cAAA,CAAe,CAAC,WAAW,CAAA;AACpD,EAAA,MAAM,WAAA,GAAc,MAAM,eAAA,CAAgB,CAAC,YAAY,CAAA;AAEvD,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,CAAC,CAAC,WAAA;AAAA,IACf,YAAA,EAAc,CAAC,CAAC,YAAA;AAAA,IAChB,UAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
@@ -6,7 +6,7 @@ var keywords = [
6
6
  "frontend",
7
7
  "backstage.io"
8
8
  ];
9
- var version = "3.59.1";
9
+ var version = "3.59.5";
10
10
  var main = "src/index.ts";
11
11
  var types = "src/index.ts";
12
12
  var prepublishOnly = "yarn tsc && yarn build";
@@ -15,7 +15,7 @@ var homepage = "https://github.com/drodil/backstage-plugin-qeta";
15
15
  var bugs = {
16
16
  url: "https://github.com/drodil/backstage-plugin-qeta/issues"
17
17
  };
18
- var exports = {
18
+ var exports$1 = {
19
19
  ".": "./src/index.ts",
20
20
  "./alpha": "./src/alpha.tsx",
21
21
  "./package.json": "./package.json"
@@ -83,7 +83,7 @@ var dependencies = {
83
83
  unified: "^11.0.5"
84
84
  };
85
85
  var peerDependencies = {
86
- "@backstage/catalog-client": "^1.13.0",
86
+ "@backstage/catalog-client": "^1.15.0",
87
87
  react: " ^18.0.0 || ^19.0.0",
88
88
  "react-dom": "^18.0.0 || ^19.0.0",
89
89
  "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
@@ -125,7 +125,7 @@ var _package = {
125
125
  license: license,
126
126
  homepage: homepage,
127
127
  bugs: bugs,
128
- exports: exports,
128
+ exports: exports$1,
129
129
  typesVersions: typesVersions,
130
130
  repository: repository,
131
131
  publishConfig: publishConfig,
@@ -140,5 +140,5 @@ var _package = {
140
140
  configSchema: configSchema
141
141
  };
142
142
 
143
- export { backstage, bugs, configSchema, _package as default, dependencies, description, devDependencies, exports, files, homepage, keywords, license, main, name, peerDependencies, prepublishOnly, publishConfig, repository, resolutions, scripts, sideEffects, types, typesVersions, version };
143
+ export { backstage, bugs, configSchema, _package as default, dependencies, description, devDependencies, exports$1 as exports, files, homepage, keywords, license, main, name, peerDependencies, prepublishOnly, publishConfig, repository, resolutions, scripts, sideEffects, types, typesVersions, version };
144
144
  //# sourceMappingURL=package.json.esm.js.map
@@ -1,4 +1,4 @@
1
- import { createPlugin, createApiFactory, fetchApiRef, discoveryApiRef, createRoutableExtension } from '@backstage/core-plugin-api';
1
+ import { createPlugin, createApiFactory, discoveryApiRef, fetchApiRef, createRoutableExtension } from '@backstage/core-plugin-api';
2
2
  import { createCardExtension } from '@backstage/plugin-home-react';
3
3
  import { createSearchResultListItemExtension } from '@backstage/plugin-search-react';
4
4
  import { qetaRouteRef, qetaApiRef } from '@drodil/backstage-plugin-qeta-react';
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.esm.js","sources":["../src/plugin.ts"],"sourcesContent":["import {\n createApiFactory,\n createPlugin,\n createRoutableExtension,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\nimport { createCardExtension } from '@backstage/plugin-home-react';\nimport { createSearchResultListItemExtension } from '@backstage/plugin-search-react';\nimport { qetaApiRef, qetaRouteRef } from '@drodil/backstage-plugin-qeta-react';\nimport { PostType, QetaClient } from '@drodil/backstage-plugin-qeta-common';\nimport type { QetaSearchResultListItemProps } from './components/QetaSearchResultListItem';\n\nexport const qetaPlugin = createPlugin({\n id: 'qeta',\n routes: {\n root: qetaRouteRef,\n },\n apis: [\n createApiFactory({\n api: qetaApiRef,\n deps: { fetchApi: fetchApiRef, discoveryApi: discoveryApiRef },\n factory: ({ fetchApi, discoveryApi }) =>\n new QetaClient({ fetchApi, discoveryApi }),\n }),\n ],\n});\n\nexport const QetaPage = qetaPlugin.provide(\n createRoutableExtension({\n name: 'QetaPage',\n component: () => import('./components/QetaPage').then(m => m.QetaPage),\n mountPoint: qetaRouteRef,\n }),\n);\n\nexport const QetaReviewPage = qetaPlugin.provide(\n createRoutableExtension({\n name: 'QetaReviewPage',\n component: () => import('./components/ReviewPage').then(m => m.ReviewPage),\n mountPoint: qetaRouteRef,\n }),\n);\n\nexport const PostsTableCard = qetaPlugin.provide(\n createCardExtension<{\n postType?: PostType;\n rowsPerPage?: number;\n quickFilter?: string;\n }>({\n name: 'PostsTableCard',\n title: 'Q&A',\n description: 'Shows Q&A posts',\n components: () => import('./components/PostsTableCard'),\n layout: {\n height: { minRows: 6 },\n width: { minColumns: 6 },\n },\n settings: {\n schema: {\n title: 'Q&A',\n type: 'object',\n properties: {\n postType: {\n title: 'Post type',\n type: 'string',\n enum: ['question', 'article', 'link'],\n default: undefined,\n },\n rowsPerPage: {\n title: 'Rows per page',\n type: 'number',\n enum: [5, 10, 20, 30, 40, 50],\n default: 10,\n },\n quickFilter: {\n title: 'Default filter',\n type: 'string',\n enum: ['latest', 'favorites', 'most_viewed'],\n default: 'latest',\n },\n },\n },\n },\n }),\n);\n\n/**\n * @deprecated Use PostsTableCard instead\n */\nexport const QuestionsTableCard = PostsTableCard;\n\n/**\n * React extension used to render results on Search page or modal\n *\n * @public\n */\nexport const QetaSearchResultListItem: (\n props: QetaSearchResultListItemProps,\n) => JSX.Element | null = qetaPlugin.provide(\n createSearchResultListItemExtension({\n name: 'QetaSearchResultListItem',\n component: () =>\n import('./components/QetaSearchResultListItem').then(\n m => m.QetaSearchResultListItem,\n ),\n predicate: result => result.type === 'qeta',\n }),\n);\n"],"names":[],"mappings":";;;;;;AAaO,MAAM,aAAa,YAAa,CAAA;AAAA,EACrC,EAAI,EAAA,MAAA;AAAA,EACJ,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA;AAAA,GACR;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,gBAAiB,CAAA;AAAA,MACf,GAAK,EAAA,UAAA;AAAA,MACL,IAAM,EAAA,EAAE,QAAU,EAAA,WAAA,EAAa,cAAc,eAAgB,EAAA;AAAA,MAC7D,OAAA,EAAS,CAAC,EAAE,QAAU,EAAA,YAAA,EACpB,KAAA,IAAI,UAAW,CAAA,EAAE,QAAU,EAAA,YAAA,EAAc;AAAA,KAC5C;AAAA;AAEL,CAAC;AAEM,MAAM,WAAW,UAAW,CAAA,OAAA;AAAA,EACjC,uBAAwB,CAAA;AAAA,IACtB,IAAM,EAAA,UAAA;AAAA,IACN,SAAA,EAAW,MAAM,OAAO,oCAAuB,EAAE,IAAK,CAAA,CAAA,CAAA,KAAK,EAAE,QAAQ,CAAA;AAAA,IACrE,UAAY,EAAA;AAAA,GACb;AACH;AAEO,MAAM,iBAAiB,UAAW,CAAA,OAAA;AAAA,EACvC,uBAAwB,CAAA;AAAA,IACtB,IAAM,EAAA,gBAAA;AAAA,IACN,SAAA,EAAW,MAAM,OAAO,sCAAyB,EAAE,IAAK,CAAA,CAAA,CAAA,KAAK,EAAE,UAAU,CAAA;AAAA,IACzE,UAAY,EAAA;AAAA,GACb;AACH;AAEO,MAAM,iBAAiB,UAAW,CAAA,OAAA;AAAA,EACvC,mBAIG,CAAA;AAAA,IACD,IAAM,EAAA,gBAAA;AAAA,IACN,KAAO,EAAA,KAAA;AAAA,IACP,WAAa,EAAA,iBAAA;AAAA,IACb,UAAA,EAAY,MAAM,OAAO,0CAA6B,CAAA;AAAA,IACtD,MAAQ,EAAA;AAAA,MACN,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAE,EAAA;AAAA,MACrB,KAAA,EAAO,EAAE,UAAA,EAAY,CAAE;AAAA,KACzB;AAAA,IACA,QAAU,EAAA;AAAA,MACR,MAAQ,EAAA;AAAA,QACN,KAAO,EAAA,KAAA;AAAA,QACP,IAAM,EAAA,QAAA;AAAA,QACN,UAAY,EAAA;AAAA,UACV,QAAU,EAAA;AAAA,YACR,KAAO,EAAA,WAAA;AAAA,YACP,IAAM,EAAA,QAAA;AAAA,YACN,IAAM,EAAA,CAAC,UAAY,EAAA,SAAA,EAAW,MAAM,CAAA;AAAA,YACpC,OAAS,EAAA,KAAA;AAAA,WACX;AAAA,UACA,WAAa,EAAA;AAAA,YACX,KAAO,EAAA,eAAA;AAAA,YACP,IAAM,EAAA,QAAA;AAAA,YACN,MAAM,CAAC,CAAA,EAAG,IAAI,EAAI,EAAA,EAAA,EAAI,IAAI,EAAE,CAAA;AAAA,YAC5B,OAAS,EAAA;AAAA,WACX;AAAA,UACA,WAAa,EAAA;AAAA,YACX,KAAO,EAAA,gBAAA;AAAA,YACP,IAAM,EAAA,QAAA;AAAA,YACN,IAAM,EAAA,CAAC,QAAU,EAAA,WAAA,EAAa,aAAa,CAAA;AAAA,YAC3C,OAAS,EAAA;AAAA;AACX;AACF;AACF;AACF,GACD;AACH;AAKO,MAAM,kBAAqB,GAAA;AAO3B,MAAM,2BAEa,UAAW,CAAA,OAAA;AAAA,EACnC,mCAAoC,CAAA;AAAA,IAClC,IAAM,EAAA,0BAAA;AAAA,IACN,SAAW,EAAA,MACT,OAAO,oDAAuC,CAAE,CAAA,IAAA;AAAA,MAC9C,OAAK,CAAE,CAAA;AAAA,KACT;AAAA,IACF,SAAA,EAAW,CAAU,MAAA,KAAA,MAAA,CAAO,IAAS,KAAA;AAAA,GACtC;AACH;;;;"}
1
+ {"version":3,"file":"plugin.esm.js","sources":["../src/plugin.ts"],"sourcesContent":["import {\n createApiFactory,\n createPlugin,\n createRoutableExtension,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\nimport { createCardExtension } from '@backstage/plugin-home-react';\nimport { createSearchResultListItemExtension } from '@backstage/plugin-search-react';\nimport { qetaApiRef, qetaRouteRef } from '@drodil/backstage-plugin-qeta-react';\nimport { PostType, QetaClient } from '@drodil/backstage-plugin-qeta-common';\nimport type { QetaSearchResultListItemProps } from './components/QetaSearchResultListItem';\n\nexport const qetaPlugin = createPlugin({\n id: 'qeta',\n routes: {\n root: qetaRouteRef,\n },\n apis: [\n createApiFactory({\n api: qetaApiRef,\n deps: { fetchApi: fetchApiRef, discoveryApi: discoveryApiRef },\n factory: ({ fetchApi, discoveryApi }) =>\n new QetaClient({ fetchApi, discoveryApi }),\n }),\n ],\n});\n\nexport const QetaPage = qetaPlugin.provide(\n createRoutableExtension({\n name: 'QetaPage',\n component: () => import('./components/QetaPage').then(m => m.QetaPage),\n mountPoint: qetaRouteRef,\n }),\n);\n\nexport const QetaReviewPage = qetaPlugin.provide(\n createRoutableExtension({\n name: 'QetaReviewPage',\n component: () => import('./components/ReviewPage').then(m => m.ReviewPage),\n mountPoint: qetaRouteRef,\n }),\n);\n\nexport const PostsTableCard = qetaPlugin.provide(\n createCardExtension<{\n postType?: PostType;\n rowsPerPage?: number;\n quickFilter?: string;\n }>({\n name: 'PostsTableCard',\n title: 'Q&A',\n description: 'Shows Q&A posts',\n components: () => import('./components/PostsTableCard'),\n layout: {\n height: { minRows: 6 },\n width: { minColumns: 6 },\n },\n settings: {\n schema: {\n title: 'Q&A',\n type: 'object',\n properties: {\n postType: {\n title: 'Post type',\n type: 'string',\n enum: ['question', 'article', 'link'],\n default: undefined,\n },\n rowsPerPage: {\n title: 'Rows per page',\n type: 'number',\n enum: [5, 10, 20, 30, 40, 50],\n default: 10,\n },\n quickFilter: {\n title: 'Default filter',\n type: 'string',\n enum: ['latest', 'favorites', 'most_viewed'],\n default: 'latest',\n },\n },\n },\n },\n }),\n);\n\n/**\n * @deprecated Use PostsTableCard instead\n */\nexport const QuestionsTableCard = PostsTableCard;\n\n/**\n * React extension used to render results on Search page or modal\n *\n * @public\n */\nexport const QetaSearchResultListItem: (\n props: QetaSearchResultListItemProps,\n) => JSX.Element | null = qetaPlugin.provide(\n createSearchResultListItemExtension({\n name: 'QetaSearchResultListItem',\n component: () =>\n import('./components/QetaSearchResultListItem').then(\n m => m.QetaSearchResultListItem,\n ),\n predicate: result => result.type === 'qeta',\n }),\n);\n"],"names":[],"mappings":";;;;;;AAaO,MAAM,aAAa,YAAA,CAAa;AAAA,EACrC,EAAA,EAAI,MAAA;AAAA,EACJ,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,gBAAA,CAAiB;AAAA,MACf,GAAA,EAAK,UAAA;AAAA,MACL,IAAA,EAAM,EAAE,QAAA,EAAU,WAAA,EAAa,cAAc,eAAA,EAAgB;AAAA,MAC7D,OAAA,EAAS,CAAC,EAAE,QAAA,EAAU,YAAA,EAAa,KACjC,IAAI,UAAA,CAAW,EAAE,QAAA,EAAU,YAAA,EAAc;AAAA,KAC5C;AAAA;AAEL,CAAC;AAEM,MAAM,WAAW,UAAA,CAAW,OAAA;AAAA,EACjC,uBAAA,CAAwB;AAAA,IACtB,IAAA,EAAM,UAAA;AAAA,IACN,SAAA,EAAW,MAAM,OAAO,oCAAuB,EAAE,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,QAAQ,CAAA;AAAA,IACrE,UAAA,EAAY;AAAA,GACb;AACH;AAEO,MAAM,iBAAiB,UAAA,CAAW,OAAA;AAAA,EACvC,uBAAA,CAAwB;AAAA,IACtB,IAAA,EAAM,gBAAA;AAAA,IACN,SAAA,EAAW,MAAM,OAAO,sCAAyB,EAAE,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,UAAU,CAAA;AAAA,IACzE,UAAA,EAAY;AAAA,GACb;AACH;AAEO,MAAM,iBAAiB,UAAA,CAAW,OAAA;AAAA,EACvC,mBAAA,CAIG;AAAA,IACD,IAAA,EAAM,gBAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,WAAA,EAAa,iBAAA;AAAA,IACb,UAAA,EAAY,MAAM,OAAO,0CAA6B,CAAA;AAAA,IACtD,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACrB,KAAA,EAAO,EAAE,UAAA,EAAY,CAAA;AAAE,KACzB;AAAA,IACA,QAAA,EAAU;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,KAAA,EAAO,KAAA;AAAA,QACP,IAAA,EAAM,QAAA;AAAA,QACN,UAAA,EAAY;AAAA,UACV,QAAA,EAAU;AAAA,YACR,KAAA,EAAO,WAAA;AAAA,YACP,IAAA,EAAM,QAAA;AAAA,YACN,IAAA,EAAM,CAAC,UAAA,EAAY,SAAA,EAAW,MAAM,CAAA;AAAA,YACpC,OAAA,EAAS;AAAA,WACX;AAAA,UACA,WAAA,EAAa;AAAA,YACX,KAAA,EAAO,eAAA;AAAA,YACP,IAAA,EAAM,QAAA;AAAA,YACN,MAAM,CAAC,CAAA,EAAG,IAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAE,CAAA;AAAA,YAC5B,OAAA,EAAS;AAAA,WACX;AAAA,UACA,WAAA,EAAa;AAAA,YACX,KAAA,EAAO,gBAAA;AAAA,YACP,IAAA,EAAM,QAAA;AAAA,YACN,IAAA,EAAM,CAAC,QAAA,EAAU,WAAA,EAAa,aAAa,CAAA;AAAA,YAC3C,OAAA,EAAS;AAAA;AACX;AACF;AACF;AACF,GACD;AACH;AAKO,MAAM,kBAAA,GAAqB;AAO3B,MAAM,2BAEa,UAAA,CAAW,OAAA;AAAA,EACnC,mCAAA,CAAoC;AAAA,IAClC,IAAA,EAAM,0BAAA;AAAA,IACN,SAAA,EAAW,MACT,OAAO,oDAAuC,CAAA,CAAE,IAAA;AAAA,MAC9C,OAAK,CAAA,CAAE;AAAA,KACT;AAAA,IACF,SAAA,EAAW,CAAA,MAAA,KAAU,MAAA,CAAO,IAAA,KAAS;AAAA,GACtC;AACH;;;;"}
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "frontend",
8
8
  "backstage.io"
9
9
  ],
10
- "version": "3.59.1",
10
+ "version": "3.59.5",
11
11
  "main": "./dist/index.esm.js",
12
12
  "types": "./dist/index.d.ts",
13
13
  "prepublishOnly": "yarn tsc && yarn build",
@@ -73,19 +73,19 @@
73
73
  "tsc": "tsc"
74
74
  },
75
75
  "dependencies": {
76
- "@backstage/catalog-model": "^1.7.6",
77
- "@backstage/core-compat-api": "^0.5.8",
78
- "@backstage/core-components": "^0.18.7",
79
- "@backstage/core-plugin-api": "^1.12.3",
80
- "@backstage/frontend-plugin-api": "^0.14.1",
81
- "@backstage/plugin-catalog-react": "^2.0.0",
82
- "@backstage/plugin-home-react": "^0.1.35",
83
- "@backstage/plugin-search-common": "^1.2.22",
84
- "@backstage/plugin-search-react": "^1.10.4",
85
- "@backstage/plugin-signals-react": "^0.0.19",
86
- "@backstage/plugin-techdocs-react": "^1.3.8",
87
- "@drodil/backstage-plugin-qeta-common": "^3.59.1",
88
- "@drodil/backstage-plugin-qeta-react": "^3.59.1",
76
+ "@backstage/catalog-model": "^1.8.0",
77
+ "@backstage/core-compat-api": "^0.5.10",
78
+ "@backstage/core-components": "^0.18.9",
79
+ "@backstage/core-plugin-api": "^1.12.5",
80
+ "@backstage/frontend-plugin-api": "^0.16.0",
81
+ "@backstage/plugin-catalog-react": "^2.1.2",
82
+ "@backstage/plugin-home-react": "^0.1.37",
83
+ "@backstage/plugin-search-common": "^1.2.23",
84
+ "@backstage/plugin-search-react": "^1.11.1",
85
+ "@backstage/plugin-signals-react": "^0.0.21",
86
+ "@backstage/plugin-techdocs-react": "^1.3.10",
87
+ "@drodil/backstage-plugin-qeta-common": "^3.59.5",
88
+ "@drodil/backstage-plugin-qeta-react": "^3.59.5",
89
89
  "@material-ui/core": "^4.12.2",
90
90
  "@material-ui/icons": "^4.11.3",
91
91
  "@material-ui/lab": "4.0.0-alpha.61",
@@ -96,7 +96,7 @@
96
96
  "unified": "^11.0.5"
97
97
  },
98
98
  "peerDependencies": {
99
- "@backstage/catalog-client": "^1.13.0",
99
+ "@backstage/catalog-client": "^1.15.0",
100
100
  "react": " ^18.0.0 || ^19.0.0",
101
101
  "react-dom": "^18.0.0 || ^19.0.0",
102
102
  "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
@@ -105,17 +105,17 @@
105
105
  "react-markdown": "8.0.7"
106
106
  },
107
107
  "devDependencies": {
108
- "@backstage/cli": "^0.35.4",
109
- "@backstage/frontend-defaults": "^0.4.0",
110
- "@backstage/plugin-catalog": "^1.33.1",
111
- "@backstage/plugin-home": "^0.9.2",
112
- "@backstage/plugin-notifications": "^0.5.14",
113
- "@backstage/plugin-search": "^1.6.1",
114
- "@backstage/plugin-search-react": "^1.10.4",
115
- "@backstage/plugin-signals": "^0.0.28",
116
- "@backstage/plugin-techdocs": "^1.17.0",
117
- "@backstage/plugin-user-settings": "^0.9.0",
118
- "@backstage/ui": "^0.12.0",
108
+ "@backstage/cli": "^0.36.1",
109
+ "@backstage/frontend-defaults": "^0.5.1",
110
+ "@backstage/plugin-catalog": "^2.0.2",
111
+ "@backstage/plugin-home": "^0.9.4",
112
+ "@backstage/plugin-notifications": "^0.5.16",
113
+ "@backstage/plugin-search": "^1.7.1",
114
+ "@backstage/plugin-search-react": "^1.11.1",
115
+ "@backstage/plugin-signals": "^0.0.30",
116
+ "@backstage/plugin-techdocs": "^1.17.3",
117
+ "@backstage/plugin-user-settings": "^0.9.2",
118
+ "@backstage/ui": "^0.14.0",
119
119
  "@testing-library/jest-dom": "^6.1.3",
120
120
  "@types/lodash": "^4.14.199",
121
121
  "@types/luxon": "^3",