@drodil/backstage-plugin-qeta-react 3.10.2 → 3.10.4

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.
@@ -9,17 +9,10 @@ import { MarkdownRenderer } from '../MarkdownRenderer/MarkdownRenderer.esm.js';
9
9
  import { imageUpload } from '../../utils/utils.esm.js';
10
10
  import { catalogApiRef } from '@backstage/plugin-catalog-react';
11
11
  import { stringifyEntityRef } from '@backstage/catalog-model';
12
- import { useTheme, css as css$1 } from '@mui/material/styles';
13
- import { css } from '@emotion/css';
12
+ import { useTheme } from '@mui/material/styles';
13
+ import { ClassNames } from '@emotion/react';
14
14
 
15
15
  const styles = {
16
- tooltipLabel: (theme) => ({
17
- color: theme.palette.text.primary
18
- }),
19
- tooltipWrapper: (theme) => ({
20
- backgroundColor: `${theme.palette.background.default} !important`,
21
- border: "none !important"
22
- }),
23
16
  markdownEditor: (theme) => ({
24
17
  backgroundColor: "initial",
25
18
  color: theme.palette.text.primary,
@@ -53,8 +46,8 @@ const styles = {
53
46
  outline: "none"
54
47
  },
55
48
  "& .image-tip": {
56
- color: theme.palette.text.primary,
57
- backgroundColor: "initial"
49
+ color: `${theme.palette.text.primary} !important`,
50
+ backgroundColor: "initial !important"
58
51
  }
59
52
  }),
60
53
  markdownEditorError: (theme) => ({
@@ -149,22 +142,19 @@ const MarkdownEditor = (props) => {
149
142
  };
150
143
  const isUploadDisabled = config?.getOptionalBoolean("qeta.storage.disabled") || disableAttachments || false;
151
144
  const theme = useTheme();
152
- const markdownEditorClass = css(css$1(styles.markdownEditor(theme)));
153
- const markdownEditorErrorClass = css(
154
- css$1(styles.markdownEditorError(theme))
155
- );
156
- const hideClass = css(css$1(styles.hide));
157
- const suggestionsDropdownClass = css(
158
- css$1({ position: "absolute", ...styles.suggestionsDropdown(theme) })
159
- );
160
- return /* @__PURE__ */ React__default.createElement(
145
+ return /* @__PURE__ */ React__default.createElement(ClassNames, null, ({ cx, css }) => /* @__PURE__ */ React__default.createElement(
161
146
  ReactMde,
162
147
  {
163
148
  classes: {
164
- reactMde: markdownEditorClass,
165
- textArea: error ? markdownEditorErrorClass : void 0,
166
- toolbar: disableToolbar ? hideClass : void 0,
167
- suggestionsDropdown: suggestionsDropdownClass
149
+ reactMde: cx(css(styles.markdownEditor(theme))),
150
+ textArea: error ? cx(css(styles.markdownEditorError(theme))) : void 0,
151
+ toolbar: disableToolbar ? cx(css(styles.hide)) : void 0,
152
+ suggestionsDropdown: cx(
153
+ css({
154
+ position: "absolute",
155
+ ...styles.suggestionsDropdown(theme)
156
+ })
157
+ )
168
158
  },
169
159
  disablePreview,
170
160
  value,
@@ -184,7 +174,13 @@ const MarkdownEditor = (props) => {
184
174
  loadSuggestions,
185
175
  suggestionsAutoplace: true,
186
176
  generateMarkdownPreview: (content) => Promise.resolve(
187
- /* @__PURE__ */ React__default.createElement(MarkdownRenderer, { content, sx: styles.markdownPreview })
177
+ /* @__PURE__ */ React__default.createElement(
178
+ MarkdownRenderer,
179
+ {
180
+ content,
181
+ sx: styles.markdownPreview
182
+ }
183
+ )
188
184
  ),
189
185
  paste: isUploadDisabled ? void 0 : {
190
186
  saveImage: imageUpload({
@@ -197,7 +193,7 @@ const MarkdownEditor = (props) => {
197
193
  })
198
194
  }
199
195
  }
200
- );
196
+ ));
201
197
  };
202
198
 
203
199
  export { MarkdownEditor };
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownEditor.esm.js","sources":["../../../src/components/MarkdownEditor/MarkdownEditor.tsx"],"sourcesContent":["/* eslint-disable no-console */\nimport React from 'react';\nimport ReactMde from 'react-mde';\n\nimport { Config } from '@backstage/config';\nimport 'react-mde/lib/styles/css/react-mde.css';\nimport 'react-mde/lib/styles/css/react-mde-editor.css';\nimport 'react-mde/lib/styles/css/react-mde-toolbar.css';\nimport { errorApiRef, useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../../api';\nimport { MarkdownRenderer } from '../MarkdownRenderer';\nimport { imageUpload } from '../../utils/utils';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport { stringifyEntityRef, UserEntity } from '@backstage/catalog-model';\n\nimport { css, Theme, useTheme } from '@mui/material/styles';\nimport { css as emotionCss } from '@emotion/css';\n\nconst styles = {\n tooltipLabel: (theme: Theme) => ({\n color: theme.palette.text.primary,\n }),\n tooltipWrapper: (theme: Theme) => ({\n backgroundColor: `${theme.palette.background.default} !important`,\n border: 'none !important',\n }),\n markdownEditor: (theme: Theme) => ({\n backgroundColor: 'initial',\n color: theme.palette.text.primary,\n border: `1px solid ${theme.palette.action.disabled}`,\n borderRadius: theme.shape.borderRadius,\n '&:hover': {\n borderColor: theme.palette.action.active,\n },\n '&:focus-within': {\n borderColor: theme.palette.primary.main,\n },\n '& .mde-header': {\n backgroundColor: 'initial',\n color: theme.palette.text.primary,\n borderBottom: `1px solid ${theme.palette.action.selected}`,\n '& .mde-tabs button, .mde-header-item > button': {\n color: `${theme.palette.text.primary} !important`,\n },\n },\n '& .mde-preview-content': {\n padding: '10px',\n },\n '& .mde-text, .mde-preview': {\n fontSize: theme.typography.body1.fontSize,\n fontFamily: theme.typography.body1.fontFamily,\n lineHeight: theme.typography.body1.lineHeight,\n },\n '& .mde-text': {\n backgroundColor: 'initial',\n color: theme.palette.text.primary,\n outline: 'none',\n },\n '& .image-tip': {\n color: theme.palette.text.primary,\n backgroundColor: 'initial',\n },\n }),\n markdownEditorError: (theme: Theme) => ({\n border: `1px solid ${theme.palette.error.main} !important`,\n }),\n markdownPreview: {\n '& *': {\n wordBreak: 'break-word',\n },\n '&.inline': {\n display: 'inline-block',\n },\n '& > :first-child': {\n marginTop: '0px !important',\n },\n '& > :last-child': {\n marginBottom: '0px !important',\n },\n },\n suggestionsDropdown: (theme: Theme) => ({\n minWidth: '180px',\n margin: '20px 0 0',\n listStyle: 'none',\n padding: '0',\n cursor: 'pointer',\n background: theme.palette.background.paper,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n '& li': {\n width: '100%',\n padding: '0.5rem',\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n },\n }),\n hide: {\n display: 'none',\n },\n};\n\nexport type MarkdownEditorProps = {\n config?: Config;\n value: string;\n onChange: (value: string) => void;\n height: number;\n error?: boolean;\n placeholder?: string;\n onImageUpload?: (imageId: number) => void;\n disableToolbar?: boolean;\n disableAttachments?: boolean;\n disablePreview?: boolean;\n postId?: number;\n answerId?: number;\n collectionId?: number;\n autoFocus?: boolean;\n required?: boolean;\n};\n\nexport const MarkdownEditor = (props: MarkdownEditorProps) => {\n const {\n config,\n value,\n onChange,\n height,\n error,\n placeholder,\n disableAttachments,\n disableToolbar,\n disablePreview,\n postId,\n answerId,\n collectionId,\n autoFocus,\n required = true,\n } = props;\n const [selectedTab, setSelectedTab] = React.useState<'write' | 'preview'>(\n 'write',\n );\n const errorApi = useApi(errorApiRef);\n const qetaApi = useApi(qetaApiRef);\n const catalogApi = useApi(catalogApiRef);\n\n const loadSuggestions = async (text: string) => {\n if (!text) {\n return [{ preview: 'No suggestions', value: '' }];\n }\n const users = await catalogApi.queryEntities({\n filter: { kind: 'User' },\n limit: 5,\n fullTextFilter: {\n term: text,\n fields: [\n 'metadata.name',\n 'metadata.title',\n 'spec.profile.displayName',\n 'spec.profile.email',\n ],\n },\n });\n\n if (users.items.length === 0) {\n return [{ preview: 'No suggestions', value: '' }];\n }\n\n return users.items.map(entity => {\n const user = entity as UserEntity;\n const preview =\n user.metadata.title ??\n user.spec?.profile?.displayName ??\n user.metadata.name;\n return {\n preview,\n value: `@${stringifyEntityRef(user)}`,\n };\n });\n };\n\n const isUploadDisabled =\n config?.getOptionalBoolean('qeta.storage.disabled') ||\n disableAttachments ||\n false;\n\n const theme = useTheme();\n const markdownEditorClass = emotionCss(css(styles.markdownEditor(theme)));\n const markdownEditorErrorClass = emotionCss(\n css(styles.markdownEditorError(theme)),\n );\n const hideClass = emotionCss(css(styles.hide));\n const suggestionsDropdownClass = emotionCss(\n css({ position: 'absolute', ...styles.suggestionsDropdown(theme) }),\n );\n\n return (\n <ReactMde\n classes={{\n reactMde: markdownEditorClass,\n textArea: error ? markdownEditorErrorClass : undefined,\n toolbar: disableToolbar ? hideClass : undefined,\n suggestionsDropdown: suggestionsDropdownClass,\n }}\n disablePreview={disablePreview}\n value={value}\n onChange={onChange}\n selectedTab={selectedTab}\n onTabChange={setSelectedTab}\n minEditorHeight={height}\n minPreviewHeight={height - 10}\n childProps={{\n textArea: {\n required,\n placeholder,\n autoFocus,\n },\n }}\n suggestionTriggerCharacters={['@']}\n loadSuggestions={loadSuggestions}\n suggestionsAutoplace\n generateMarkdownPreview={content =>\n Promise.resolve(\n <MarkdownRenderer content={content} sx={styles.markdownPreview} />,\n )\n }\n paste={\n isUploadDisabled\n ? undefined\n : {\n saveImage: imageUpload({\n qetaApi,\n errorApi,\n onImageUpload: props.onImageUpload,\n postId,\n answerId,\n collectionId,\n }),\n }\n }\n />\n );\n};\n"],"names":["React","emotionCss","css"],"mappings":"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"}
1
+ {"version":3,"file":"MarkdownEditor.esm.js","sources":["../../../src/components/MarkdownEditor/MarkdownEditor.tsx"],"sourcesContent":["/* eslint-disable no-console */\nimport React from 'react';\nimport ReactMde from 'react-mde';\n\nimport { Config } from '@backstage/config';\nimport 'react-mde/lib/styles/css/react-mde.css';\nimport 'react-mde/lib/styles/css/react-mde-editor.css';\nimport 'react-mde/lib/styles/css/react-mde-toolbar.css';\nimport { errorApiRef, useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../../api';\nimport { MarkdownRenderer } from '../MarkdownRenderer';\nimport { imageUpload } from '../../utils/utils';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport { stringifyEntityRef, UserEntity } from '@backstage/catalog-model';\nimport { Theme, useTheme } from '@mui/material/styles';\nimport { ClassNames } from '@emotion/react';\n\nconst styles = {\n markdownEditor: (theme: Theme) => ({\n backgroundColor: 'initial',\n color: theme.palette.text.primary,\n border: `1px solid ${theme.palette.action.disabled}`,\n borderRadius: theme.shape.borderRadius,\n '&:hover': {\n borderColor: theme.palette.action.active,\n },\n '&:focus-within': {\n borderColor: theme.palette.primary.main,\n },\n '& .mde-header': {\n backgroundColor: 'initial',\n color: theme.palette.text.primary,\n borderBottom: `1px solid ${theme.palette.action.selected}`,\n '& .mde-tabs button, .mde-header-item > button': {\n color: `${theme.palette.text.primary} !important`,\n },\n },\n '& .mde-preview-content': {\n padding: '10px',\n },\n '& .mde-text, .mde-preview': {\n fontSize: theme.typography.body1.fontSize,\n fontFamily: theme.typography.body1.fontFamily,\n lineHeight: theme.typography.body1.lineHeight,\n },\n '& .mde-text': {\n backgroundColor: 'initial',\n color: theme.palette.text.primary,\n outline: 'none',\n },\n '& .image-tip': {\n color: `${theme.palette.text.primary} !important`,\n backgroundColor: 'initial !important',\n },\n }),\n markdownEditorError: (theme: Theme) => ({\n border: `1px solid ${theme.palette.error.main} !important`,\n }),\n markdownPreview: {\n '& *': {\n wordBreak: 'break-word',\n },\n '&.inline': {\n display: 'inline-block',\n },\n '& > :first-child': {\n marginTop: '0px !important',\n },\n '& > :last-child': {\n marginBottom: '0px !important',\n },\n },\n suggestionsDropdown: (theme: Theme) => ({\n minWidth: '180px',\n margin: '20px 0 0',\n listStyle: 'none',\n padding: '0',\n cursor: 'pointer',\n background: theme.palette.background.paper,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n '& li': {\n width: '100%',\n padding: '0.5rem',\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n },\n }),\n hide: {\n display: 'none',\n },\n};\n\nexport type MarkdownEditorProps = {\n config?: Config;\n value: string;\n onChange: (value: string) => void;\n height: number;\n error?: boolean;\n placeholder?: string;\n onImageUpload?: (imageId: number) => void;\n disableToolbar?: boolean;\n disableAttachments?: boolean;\n disablePreview?: boolean;\n postId?: number;\n answerId?: number;\n collectionId?: number;\n autoFocus?: boolean;\n required?: boolean;\n};\n\nexport const MarkdownEditor = (props: MarkdownEditorProps) => {\n const {\n config,\n value,\n onChange,\n height,\n error,\n placeholder,\n disableAttachments,\n disableToolbar,\n disablePreview,\n postId,\n answerId,\n collectionId,\n autoFocus,\n required = true,\n } = props;\n const [selectedTab, setSelectedTab] = React.useState<'write' | 'preview'>(\n 'write',\n );\n const errorApi = useApi(errorApiRef);\n const qetaApi = useApi(qetaApiRef);\n const catalogApi = useApi(catalogApiRef);\n\n const loadSuggestions = async (text: string) => {\n if (!text) {\n return [{ preview: 'No suggestions', value: '' }];\n }\n const users = await catalogApi.queryEntities({\n filter: { kind: 'User' },\n limit: 5,\n fullTextFilter: {\n term: text,\n fields: [\n 'metadata.name',\n 'metadata.title',\n 'spec.profile.displayName',\n 'spec.profile.email',\n ],\n },\n });\n\n if (users.items.length === 0) {\n return [{ preview: 'No suggestions', value: '' }];\n }\n\n return users.items.map(entity => {\n const user = entity as UserEntity;\n const preview =\n user.metadata.title ??\n user.spec?.profile?.displayName ??\n user.metadata.name;\n return {\n preview,\n value: `@${stringifyEntityRef(user)}`,\n };\n });\n };\n\n const isUploadDisabled =\n config?.getOptionalBoolean('qeta.storage.disabled') ||\n disableAttachments ||\n false;\n\n const theme = useTheme();\n\n return (\n <ClassNames>\n {({ cx, css }) => (\n <ReactMde\n classes={{\n reactMde: cx(css(styles.markdownEditor(theme))),\n textArea: error\n ? cx(css(styles.markdownEditorError(theme)))\n : undefined,\n toolbar: disableToolbar ? cx(css(styles.hide)) : undefined,\n suggestionsDropdown: cx(\n css({\n position: 'absolute',\n ...styles.suggestionsDropdown(theme),\n }),\n ),\n }}\n disablePreview={disablePreview}\n value={value}\n onChange={onChange}\n selectedTab={selectedTab}\n onTabChange={setSelectedTab}\n minEditorHeight={height}\n minPreviewHeight={height - 10}\n childProps={{\n textArea: {\n required,\n placeholder,\n autoFocus,\n },\n }}\n suggestionTriggerCharacters={['@']}\n loadSuggestions={loadSuggestions}\n suggestionsAutoplace\n generateMarkdownPreview={content =>\n Promise.resolve(\n <MarkdownRenderer\n content={content}\n sx={styles.markdownPreview}\n />,\n )\n }\n paste={\n isUploadDisabled\n ? undefined\n : {\n saveImage: imageUpload({\n qetaApi,\n errorApi,\n onImageUpload: props.onImageUpload,\n postId,\n answerId,\n collectionId,\n }),\n }\n }\n />\n )}\n </ClassNames>\n );\n};\n"],"names":["React"],"mappings":"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"}
@@ -12,18 +12,8 @@ import 'react-use';
12
12
  import { useTranslation } from '../../hooks/useTranslation.esm.js';
13
13
  import 'react-use/lib/useAsync';
14
14
  import { isGlobalStat, isUserStat } from './util.esm.js';
15
- import { useTheme, css as css$1 } from '@mui/material/styles';
16
- import { css } from '@emotion/css';
15
+ import { useTheme } from '@mui/material/styles';
17
16
 
18
- const styles = {
19
- tooltipLabel: (theme) => ({
20
- color: theme.palette.text.primary
21
- }),
22
- tooltipWrapper: (theme) => ({
23
- backgroundColor: `${theme.palette.background.default} !important`,
24
- border: "none !important"
25
- })
26
- };
27
17
  const DEFAULT_STATS = [
28
18
  {
29
19
  dataKey: "totalViews",
@@ -126,18 +116,19 @@ const useChartState = (data) => {
126
116
  },
127
117
  [stats]
128
118
  );
129
- return { styles, isDark, toggleStat, stats, isDisabled };
119
+ return { isDark, toggleStat, stats, isDisabled };
130
120
  };
131
121
  const StatsBarChart = (props) => {
132
122
  const { isDark, stats, toggleStat, isDisabled } = useChartState(props.data);
133
123
  const theme = useTheme();
134
- const labelClass = css(css$1(styles.tooltipLabel(theme)));
135
- const wrapperClass = css(css$1(styles.tooltipWrapper(theme)));
136
124
  return /* @__PURE__ */ React__default.createElement(ResponsiveContainer, { height: 400, width: "100%" }, /* @__PURE__ */ React__default.createElement(BarChart, { data: props.data, width: 900, height: 300 }, /* @__PURE__ */ React__default.createElement(
137
125
  Tooltip,
138
126
  {
139
- labelClassName: labelClass,
140
- wrapperClassName: wrapperClass,
127
+ labelStyle: { color: theme.palette.text.primary },
128
+ contentStyle: {
129
+ backgroundColor: `${theme.palette.background.paper} !important`,
130
+ border: "none !important"
131
+ },
141
132
  cursor: { fill: isDark ? "#4f4f4f" : "#f5f5f5" }
142
133
  }
143
134
  ), stats.map((stat) => /* @__PURE__ */ React__default.createElement(
@@ -185,13 +176,14 @@ const StatsBarChart = (props) => {
185
176
  const StatsLineChart = (props) => {
186
177
  const { isDark, stats, toggleStat, isDisabled } = useChartState(props.data);
187
178
  const theme = useTheme();
188
- const labelClass = css(css$1(styles.tooltipLabel(theme)));
189
- const wrapperClass = css(css$1(styles.tooltipWrapper(theme)));
190
179
  return /* @__PURE__ */ React__default.createElement(ResponsiveContainer, { height: 400, width: "100%" }, /* @__PURE__ */ React__default.createElement(LineChart, { data: props.data, width: 900, height: 300 }, /* @__PURE__ */ React__default.createElement(
191
180
  Tooltip,
192
181
  {
193
- labelClassName: labelClass,
194
- wrapperClassName: wrapperClass,
182
+ labelStyle: { color: theme.palette.text.primary },
183
+ contentStyle: {
184
+ backgroundColor: `${theme.palette.background.paper} !important`,
185
+ border: "none !important"
186
+ },
195
187
  cursor: { fill: isDark ? "#4f4f4f" : "#f5f5f5" }
196
188
  }
197
189
  ), stats.map((stat) => /* @__PURE__ */ React__default.createElement(
@@ -1 +1 @@
1
- {"version":3,"file":"StatsChart.esm.js","sources":["../../../src/components/StatsChart/StatsChart.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport { Stat } from '@drodil/backstage-plugin-qeta-common';\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n Legend,\n Line,\n LineChart,\n ResponsiveContainer,\n Tooltip as ChartTooltip,\n XAxis,\n YAxis,\n} from 'recharts';\nimport IconButton from '@mui/material/IconButton';\nimport ButtonGroup from '@mui/material/ButtonGroup';\nimport Typography from '@mui/material/Typography';\nimport ShowChartIcon from '@mui/icons-material/ShowChart';\nimport BarChartIcon from '@mui/icons-material/BarChart';\nimport { useIsDarkTheme } from '../../hooks/useIsDarkTheme';\nimport { useTranslation } from '../../hooks';\nimport { isGlobalStat, isUserStat } from './util';\nimport { css, Theme, useTheme } from '@mui/material/styles';\nimport { css as emotionCss } from '@emotion/css';\n\nconst styles = {\n tooltipLabel: (theme: Theme) => ({\n color: theme.palette.text.primary,\n }),\n tooltipWrapper: (theme: Theme) => ({\n backgroundColor: `${theme.palette.background.default} !important`,\n border: 'none !important',\n }),\n};\n\ntype StatType = {\n dataKey:\n | 'totalViews'\n | 'totalQuestions'\n | 'totalAnswers'\n | 'totalComments'\n | 'totalVotes'\n | 'totalUsers'\n | 'totalTags'\n | 'totalArticles'\n | 'totalFollowers';\n name: string;\n color: string;\n enabled: boolean;\n globalStat: boolean;\n userStat: boolean;\n};\n\nconst DEFAULT_STATS: StatType[] = [\n {\n dataKey: 'totalViews',\n name: 'Total views',\n color: '#8884d8',\n enabled: false,\n globalStat: true,\n userStat: true,\n },\n {\n dataKey: 'totalQuestions',\n name: 'Total questions',\n color: '#82ca9d',\n enabled: true,\n globalStat: true,\n userStat: true,\n },\n {\n dataKey: 'totalAnswers',\n name: 'Total answers',\n color: '#ff7300',\n enabled: true,\n globalStat: true,\n userStat: true,\n },\n {\n dataKey: 'totalComments',\n name: 'Total comments',\n color: '#739973',\n enabled: true,\n globalStat: true,\n userStat: true,\n },\n {\n dataKey: 'totalVotes',\n name: 'Total votes',\n color: '#d88884',\n enabled: true,\n globalStat: true,\n userStat: true,\n },\n {\n dataKey: 'totalUsers',\n name: 'Total users',\n color: '#ff0000',\n enabled: true,\n globalStat: true,\n userStat: false,\n },\n {\n dataKey: 'totalTags',\n name: 'Total tags',\n color: '#ff00ff',\n enabled: true,\n globalStat: true,\n userStat: false,\n },\n {\n dataKey: 'totalArticles',\n name: 'Total articles',\n color: '#00ff00',\n enabled: true,\n globalStat: true,\n userStat: true,\n },\n {\n dataKey: 'totalFollowers',\n name: 'Total followers',\n color: '#ff0000',\n enabled: true,\n globalStat: false,\n userStat: true,\n },\n];\n\nconst useChartState = (data: Stat[]) => {\n const isDark = useIsDarkTheme();\n const globalStats = isGlobalStat(data[0]);\n const isUserStats = isUserStat(data[0]);\n const [stats, setStats] = React.useState<StatType[]>(\n DEFAULT_STATS.filter(stat => {\n if (globalStats && !stat.globalStat) {\n return false;\n }\n return !(isUserStats && !stat.userStat);\n }),\n );\n\n const toggleStat = useCallback(\n (name: string) => {\n setStats(prev =>\n prev.map(stat =>\n stat.name === name ? { ...stat, enabled: !stat.enabled } : stat,\n ),\n );\n },\n [setStats],\n );\n const isDisabled = useCallback(\n (name: string) => {\n return stats.find(stat => stat.name === name)?.enabled === false;\n },\n [stats],\n );\n\n return { styles, isDark, toggleStat, stats, isDisabled };\n};\n\nconst StatsBarChart = (props: { data: Stat[] }) => {\n const { isDark, stats, toggleStat, isDisabled } = useChartState(props.data);\n const theme = useTheme();\n const labelClass = emotionCss(css(styles.tooltipLabel(theme)));\n const wrapperClass = emotionCss(css(styles.tooltipWrapper(theme)));\n return (\n <ResponsiveContainer height={400} width=\"100%\">\n <BarChart data={props.data} width={900} height={300}>\n <ChartTooltip\n labelClassName={labelClass}\n wrapperClassName={wrapperClass}\n cursor={{ fill: isDark ? '#4f4f4f' : '#f5f5f5' }}\n />\n {stats.map(stat => (\n <Bar\n key={stat.dataKey}\n dataKey={stat.enabled ? stat.dataKey : 'hidden'}\n name={stat.name}\n fill={stat.color}\n />\n ))}\n <CartesianGrid stroke=\"#ccc\" />\n <XAxis\n dataKey=\"date\"\n tickFormatter={(tick: string) => new Date(tick).toDateString()}\n axisLine={{ stroke: isDark ? 'white' : 'black' }}\n tickLine={{ stroke: isDark ? 'white' : 'black' }}\n tick={{ fill: isDark ? 'white' : 'black' }}\n />\n <YAxis\n allowDecimals={false}\n axisLine={{ stroke: isDark ? 'white' : 'black' }}\n tickLine={{ stroke: isDark ? 'white' : 'black' }}\n tick={{ fill: isDark ? 'white' : 'black' }}\n />\n <Legend\n verticalAlign=\"top\"\n height={36}\n wrapperStyle={{ cursor: 'pointer' }}\n formatter={data => {\n return isDisabled(data) ? `[ ] ${data}` : `[x] ${data}`;\n }}\n onClick={data => {\n if (data.value) {\n toggleStat(data.value as string);\n }\n }}\n />\n </BarChart>\n </ResponsiveContainer>\n );\n};\n\nconst StatsLineChart = (props: { data: Stat[] }) => {\n const { isDark, stats, toggleStat, isDisabled } = useChartState(props.data);\n const theme = useTheme();\n const labelClass = emotionCss(css(styles.tooltipLabel(theme)));\n const wrapperClass = emotionCss(css(styles.tooltipWrapper(theme)));\n return (\n <ResponsiveContainer height={400} width=\"100%\">\n <LineChart data={props.data} width={900} height={300}>\n <ChartTooltip\n labelClassName={labelClass}\n wrapperClassName={wrapperClass}\n cursor={{ fill: isDark ? '#4f4f4f' : '#f5f5f5' }}\n />\n {stats.map(stat => (\n <Line\n key={stat.dataKey}\n dataKey={stat.enabled ? stat.dataKey : 'hidden'}\n name={stat.name}\n stroke={stat.color}\n />\n ))}\n <CartesianGrid stroke=\"#ccc\" />\n <XAxis\n dataKey=\"date\"\n tickFormatter={(tick: string) => new Date(tick).toDateString()}\n axisLine={{ stroke: isDark ? 'white' : 'black' }}\n tickLine={{ stroke: isDark ? 'white' : 'black' }}\n tick={{ fill: isDark ? 'white' : 'black' }}\n />\n <YAxis\n allowDecimals={false}\n axisLine={{ stroke: isDark ? 'white' : 'black' }}\n tickLine={{ stroke: isDark ? 'white' : 'black' }}\n tick={{ fill: isDark ? 'white' : 'black' }}\n />\n <Legend\n verticalAlign=\"top\"\n height={36}\n wrapperStyle={{ cursor: 'pointer' }}\n formatter={data => {\n return isDisabled(data) ? `[ ] ${data}` : `[x] ${data}`;\n }}\n onClick={data => {\n if (data.value) {\n toggleStat(data.value as string);\n }\n }}\n />\n </LineChart>\n </ResponsiveContainer>\n );\n};\n\nexport const StatsChart = (props: { data: Stat[] }) => {\n const { t } = useTranslation();\n const [chart, setChart] = React.useState<'line' | 'bar'>('line');\n\n if (!props.data || props.data.length === 0) {\n return <Typography variant=\"subtitle1\">{t('stats.noStats')}</Typography>;\n }\n const data = props.data\n .sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime())\n .map(d => ({ ...d, hidden: 0 }));\n\n return (\n <>\n {chart === 'line' ? (\n <StatsLineChart data={data} />\n ) : (\n <StatsBarChart data={data} />\n )}\n <ButtonGroup aria-label=\"Chart type\" style={{ float: 'right' }}>\n <IconButton\n aria-label=\"Line chart\"\n onClick={() => {\n setChart('line');\n }}\n size=\"large\"\n >\n <ShowChartIcon />\n </IconButton>\n <IconButton\n aria-label=\"Bar chart\"\n onClick={() => {\n setChart('bar');\n }}\n size=\"large\"\n >\n <BarChartIcon />\n </IconButton>\n </ButtonGroup>\n </>\n );\n};\n"],"names":["React","emotionCss","css","ChartTooltip"],"mappings":"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"}
1
+ {"version":3,"file":"StatsChart.esm.js","sources":["../../../src/components/StatsChart/StatsChart.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport { Stat } from '@drodil/backstage-plugin-qeta-common';\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n Legend,\n Line,\n LineChart,\n ResponsiveContainer,\n Tooltip as ChartTooltip,\n XAxis,\n YAxis,\n} from 'recharts';\nimport IconButton from '@mui/material/IconButton';\nimport ButtonGroup from '@mui/material/ButtonGroup';\nimport Typography from '@mui/material/Typography';\nimport ShowChartIcon from '@mui/icons-material/ShowChart';\nimport BarChartIcon from '@mui/icons-material/BarChart';\nimport { useIsDarkTheme } from '../../hooks/useIsDarkTheme';\nimport { useTranslation } from '../../hooks';\nimport { isGlobalStat, isUserStat } from './util';\nimport { useTheme } from '@mui/material/styles';\n\ntype StatType = {\n dataKey:\n | 'totalViews'\n | 'totalQuestions'\n | 'totalAnswers'\n | 'totalComments'\n | 'totalVotes'\n | 'totalUsers'\n | 'totalTags'\n | 'totalArticles'\n | 'totalFollowers';\n name: string;\n color: string;\n enabled: boolean;\n globalStat: boolean;\n userStat: boolean;\n};\n\nconst DEFAULT_STATS: StatType[] = [\n {\n dataKey: 'totalViews',\n name: 'Total views',\n color: '#8884d8',\n enabled: false,\n globalStat: true,\n userStat: true,\n },\n {\n dataKey: 'totalQuestions',\n name: 'Total questions',\n color: '#82ca9d',\n enabled: true,\n globalStat: true,\n userStat: true,\n },\n {\n dataKey: 'totalAnswers',\n name: 'Total answers',\n color: '#ff7300',\n enabled: true,\n globalStat: true,\n userStat: true,\n },\n {\n dataKey: 'totalComments',\n name: 'Total comments',\n color: '#739973',\n enabled: true,\n globalStat: true,\n userStat: true,\n },\n {\n dataKey: 'totalVotes',\n name: 'Total votes',\n color: '#d88884',\n enabled: true,\n globalStat: true,\n userStat: true,\n },\n {\n dataKey: 'totalUsers',\n name: 'Total users',\n color: '#ff0000',\n enabled: true,\n globalStat: true,\n userStat: false,\n },\n {\n dataKey: 'totalTags',\n name: 'Total tags',\n color: '#ff00ff',\n enabled: true,\n globalStat: true,\n userStat: false,\n },\n {\n dataKey: 'totalArticles',\n name: 'Total articles',\n color: '#00ff00',\n enabled: true,\n globalStat: true,\n userStat: true,\n },\n {\n dataKey: 'totalFollowers',\n name: 'Total followers',\n color: '#ff0000',\n enabled: true,\n globalStat: false,\n userStat: true,\n },\n];\n\nconst useChartState = (data: Stat[]) => {\n const isDark = useIsDarkTheme();\n const globalStats = isGlobalStat(data[0]);\n const isUserStats = isUserStat(data[0]);\n const [stats, setStats] = React.useState<StatType[]>(\n DEFAULT_STATS.filter(stat => {\n if (globalStats && !stat.globalStat) {\n return false;\n }\n return !(isUserStats && !stat.userStat);\n }),\n );\n\n const toggleStat = useCallback(\n (name: string) => {\n setStats(prev =>\n prev.map(stat =>\n stat.name === name ? { ...stat, enabled: !stat.enabled } : stat,\n ),\n );\n },\n [setStats],\n );\n const isDisabled = useCallback(\n (name: string) => {\n return stats.find(stat => stat.name === name)?.enabled === false;\n },\n [stats],\n );\n\n return { isDark, toggleStat, stats, isDisabled };\n};\n\nconst StatsBarChart = (props: { data: Stat[] }) => {\n const { isDark, stats, toggleStat, isDisabled } = useChartState(props.data);\n const theme = useTheme();\n return (\n <ResponsiveContainer height={400} width=\"100%\">\n <BarChart data={props.data} width={900} height={300}>\n <ChartTooltip\n labelStyle={{ color: theme.palette.text.primary }}\n contentStyle={{\n backgroundColor: `${theme.palette.background.paper} !important`,\n border: 'none !important',\n }}\n cursor={{ fill: isDark ? '#4f4f4f' : '#f5f5f5' }}\n />\n {stats.map(stat => (\n <Bar\n key={stat.dataKey}\n dataKey={stat.enabled ? stat.dataKey : 'hidden'}\n name={stat.name}\n fill={stat.color}\n />\n ))}\n <CartesianGrid stroke=\"#ccc\" />\n <XAxis\n dataKey=\"date\"\n tickFormatter={(tick: string) => new Date(tick).toDateString()}\n axisLine={{ stroke: isDark ? 'white' : 'black' }}\n tickLine={{ stroke: isDark ? 'white' : 'black' }}\n tick={{ fill: isDark ? 'white' : 'black' }}\n />\n <YAxis\n allowDecimals={false}\n axisLine={{ stroke: isDark ? 'white' : 'black' }}\n tickLine={{ stroke: isDark ? 'white' : 'black' }}\n tick={{ fill: isDark ? 'white' : 'black' }}\n />\n <Legend\n verticalAlign=\"top\"\n height={36}\n wrapperStyle={{ cursor: 'pointer' }}\n formatter={data => {\n return isDisabled(data) ? `[ ] ${data}` : `[x] ${data}`;\n }}\n onClick={data => {\n if (data.value) {\n toggleStat(data.value as string);\n }\n }}\n />\n </BarChart>\n </ResponsiveContainer>\n );\n};\n\nconst StatsLineChart = (props: { data: Stat[] }) => {\n const { isDark, stats, toggleStat, isDisabled } = useChartState(props.data);\n const theme = useTheme();\n return (\n <ResponsiveContainer height={400} width=\"100%\">\n <LineChart data={props.data} width={900} height={300}>\n <ChartTooltip\n labelStyle={{ color: theme.palette.text.primary }}\n contentStyle={{\n backgroundColor: `${theme.palette.background.paper} !important`,\n border: 'none !important',\n }}\n cursor={{ fill: isDark ? '#4f4f4f' : '#f5f5f5' }}\n />\n {stats.map(stat => (\n <Line\n key={stat.dataKey}\n dataKey={stat.enabled ? stat.dataKey : 'hidden'}\n name={stat.name}\n stroke={stat.color}\n />\n ))}\n <CartesianGrid stroke=\"#ccc\" />\n <XAxis\n dataKey=\"date\"\n tickFormatter={(tick: string) => new Date(tick).toDateString()}\n axisLine={{ stroke: isDark ? 'white' : 'black' }}\n tickLine={{ stroke: isDark ? 'white' : 'black' }}\n tick={{ fill: isDark ? 'white' : 'black' }}\n />\n <YAxis\n allowDecimals={false}\n axisLine={{ stroke: isDark ? 'white' : 'black' }}\n tickLine={{ stroke: isDark ? 'white' : 'black' }}\n tick={{ fill: isDark ? 'white' : 'black' }}\n />\n <Legend\n verticalAlign=\"top\"\n height={36}\n wrapperStyle={{ cursor: 'pointer' }}\n formatter={data => {\n return isDisabled(data) ? `[ ] ${data}` : `[x] ${data}`;\n }}\n onClick={data => {\n if (data.value) {\n toggleStat(data.value as string);\n }\n }}\n />\n </LineChart>\n </ResponsiveContainer>\n );\n};\n\nexport const StatsChart = (props: { data: Stat[] }) => {\n const { t } = useTranslation();\n const [chart, setChart] = React.useState<'line' | 'bar'>('line');\n\n if (!props.data || props.data.length === 0) {\n return <Typography variant=\"subtitle1\">{t('stats.noStats')}</Typography>;\n }\n const data = props.data\n .sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime())\n .map(d => ({ ...d, hidden: 0 }));\n\n return (\n <>\n {chart === 'line' ? (\n <StatsLineChart data={data} />\n ) : (\n <StatsBarChart data={data} />\n )}\n <ButtonGroup aria-label=\"Chart type\" style={{ float: 'right' }}>\n <IconButton\n aria-label=\"Line chart\"\n onClick={() => {\n setChart('line');\n }}\n size=\"large\"\n >\n <ShowChartIcon />\n </IconButton>\n <IconButton\n aria-label=\"Bar chart\"\n onClick={() => {\n setChart('bar');\n }}\n size=\"large\"\n >\n <BarChartIcon />\n </IconButton>\n </ButtonGroup>\n </>\n );\n};\n"],"names":["React","ChartTooltip"],"mappings":"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"}
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "frontend",
8
8
  "backstage.io"
9
9
  ],
10
- "version": "3.10.2",
10
+ "version": "3.10.4",
11
11
  "main": "dist/index.esm.js",
12
12
  "types": "dist/index.d.ts",
13
13
  "prepublishOnly": "yarn tsc && yarn build",
@@ -56,8 +56,7 @@
56
56
  "@backstage/plugin-catalog-react": "^1.14.0",
57
57
  "@backstage/plugin-permission-react": "^0.4.27",
58
58
  "@backstage/plugin-signals-react": "^0.0.6",
59
- "@drodil/backstage-plugin-qeta-common": "^3.10.2",
60
- "@emotion/css": "^11.13.4",
59
+ "@drodil/backstage-plugin-qeta-common": "^3.10.4",
61
60
  "@emotion/react": "^11.13.3",
62
61
  "@emotion/styled": "^11.13.0",
63
62
  "@mui/icons-material": "^5.16.7",
@@ -81,7 +80,7 @@
81
80
  "remark-gfm": "^4.0.0"
82
81
  },
83
82
  "peerDependencies": {
84
- "react": "^16.13.1 || ^17.0.0",
83
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
85
84
  "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
86
85
  },
87
86
  "devDependencies": {