@drodil/backstage-plugin-qeta 2.4.0 → 2.4.2

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 (51) hide show
  1. package/dist/api/QetaClient.esm.js +3 -9
  2. package/dist/api/QetaClient.esm.js.map +1 -1
  3. package/dist/components/AskForm/AskForm.esm.js +3 -6
  4. package/dist/components/AskForm/AskForm.esm.js.map +1 -1
  5. package/dist/components/AskForm/EntitiesInput.esm.js +1 -4
  6. package/dist/components/AskForm/EntitiesInput.esm.js.map +1 -1
  7. package/dist/components/AskForm/TagInput.esm.js +4 -13
  8. package/dist/components/AskForm/TagInput.esm.js.map +1 -1
  9. package/dist/components/AskPage/AskPage.esm.js +1 -2
  10. package/dist/components/AskPage/AskPage.esm.js.map +1 -1
  11. package/dist/components/CommentSection/CommentList.esm.js +2 -3
  12. package/dist/components/CommentSection/CommentList.esm.js.map +1 -1
  13. package/dist/components/HomePage/HomePage.esm.js +2 -3
  14. package/dist/components/HomePage/HomePage.esm.js.map +1 -1
  15. package/dist/components/MarkdownEditor/MarkdownEditor.esm.js +2 -3
  16. package/dist/components/MarkdownEditor/MarkdownEditor.esm.js.map +1 -1
  17. package/dist/components/QuestionHighlightList/QuestionHighlightList.esm.js +1 -2
  18. package/dist/components/QuestionHighlightList/QuestionHighlightList.esm.js.map +1 -1
  19. package/dist/components/QuestionPage/AuthorBox.esm.js +1 -2
  20. package/dist/components/QuestionPage/AuthorBox.esm.js.map +1 -1
  21. package/dist/components/QuestionPage/EntityChip.esm.js +1 -1
  22. package/dist/components/QuestionPage/EntityChip.esm.js.map +1 -1
  23. package/dist/components/QuestionPage/QuestionCard.esm.js +1 -2
  24. package/dist/components/QuestionPage/QuestionCard.esm.js.map +1 -1
  25. package/dist/components/QuestionPage/QuestionPage.esm.js +5 -7
  26. package/dist/components/QuestionPage/QuestionPage.esm.js.map +1 -1
  27. package/dist/components/QuestionPage/VoteButtons.esm.js +6 -7
  28. package/dist/components/QuestionPage/VoteButtons.esm.js.map +1 -1
  29. package/dist/components/QuestionTableCard/QuestionsTable.esm.js +3 -4
  30. package/dist/components/QuestionTableCard/QuestionsTable.esm.js.map +1 -1
  31. package/dist/components/QuestionsContainer/FilterPanel.esm.js +4 -4
  32. package/dist/components/QuestionsContainer/FilterPanel.esm.js.map +1 -1
  33. package/dist/components/QuestionsContainer/QuestionList.esm.js +1 -1
  34. package/dist/components/QuestionsContainer/QuestionList.esm.js.map +1 -1
  35. package/dist/components/QuestionsContainer/QuestionListItem.esm.js +2 -3
  36. package/dist/components/QuestionsContainer/QuestionListItem.esm.js.map +1 -1
  37. package/dist/components/QuestionsContainer/QuestionsContainer.esm.js +7 -9
  38. package/dist/components/QuestionsContainer/QuestionsContainer.esm.js.map +1 -1
  39. package/dist/components/Statistics/TopRankingUsersCard.esm.js +16 -21
  40. package/dist/components/Statistics/TopRankingUsersCard.esm.js.map +1 -1
  41. package/dist/components/TagPage/TagPage.esm.js +1 -1
  42. package/dist/components/TagPage/TagPage.esm.js.map +1 -1
  43. package/dist/components/TagPage/TagsContainer.esm.js +1 -1
  44. package/dist/components/TagPage/TagsContainer.esm.js.map +1 -1
  45. package/dist/components/UserPage/UserPage.esm.js +2 -3
  46. package/dist/components/UserPage/UserPage.esm.js.map +1 -1
  47. package/dist/utils/hooks.esm.js +5 -9
  48. package/dist/utils/hooks.esm.js.map +1 -1
  49. package/dist/utils/utils.esm.js +2 -3
  50. package/dist/utils/utils.esm.js.map +1 -1
  51. package/package.json +24 -16
@@ -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 { MarkdownContent } from '@backstage/core-components';\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 { useStyles } from '../../utils/hooks';\nimport FileType from 'file-type';\nimport { errorApiRef, useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../../api';\n\nexport const MarkdownEditor = (props: {\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}) => {\n const { config, value, onChange, height, error, placeholder } = props;\n const [selectedTab, setSelectedTab] = React.useState<'write' | 'preview'>(\n 'write',\n );\n const styles = useStyles();\n const errorApi = useApi(errorApiRef);\n const qetaApi = useApi(qetaApiRef);\n\n const imageUpload = () => {\n // eslint-disable-next-line func-names\n return async function* (data: ArrayBuffer) {\n const fileType = await FileType.fromBuffer(data);\n\n const mimeType = fileType ? fileType.mime : 'text/plain';\n const attachment = await qetaApi.postAttachment(\n new Blob([data], { type: mimeType }),\n );\n if ('errors' in attachment) {\n errorApi.post({\n name: 'Upload failed',\n message: attachment.errors?.map(e => e.message).join(', ') ?? '',\n });\n return false;\n }\n props.onImageUpload(attachment.id);\n yield attachment.locationUri;\n return true;\n };\n };\n\n const isUploadDisabled =\n config?.getOptionalBoolean('qeta.storage.disabled') || false;\n\n return (\n <ReactMde\n classes={{\n reactMde: `qetaMarkdownEditorEdit ${styles.markdownEditor}`,\n textArea: error\n ? `qetaMarkdownEditorError ${styles.markdownEditorError}`\n : undefined,\n preview: 'qetaMarkdownEditorPreview',\n toolbar: 'qetaMarkdownEditorToolbar',\n }}\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: true,\n placeholder,\n },\n }}\n generateMarkdownPreview={content =>\n Promise.resolve(\n <MarkdownContent\n content={content}\n dialect=\"gfm\"\n className={`qetaMarkdownEditorPreview ${styles.markdownContent}`}\n />,\n )\n }\n paste={\n isUploadDisabled\n ? undefined\n : {\n saveImage: imageUpload(),\n }\n }\n />\n );\n};\n"],"names":[],"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 { MarkdownContent } from '@backstage/core-components';\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 { useStyles } from '../../utils/hooks';\nimport FileType from 'file-type';\nimport { errorApiRef, useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../../api';\n\nexport const MarkdownEditor = (props: {\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}) => {\n const { config, value, onChange, height, error, placeholder } = props;\n const [selectedTab, setSelectedTab] = React.useState<'write' | 'preview'>(\n 'write',\n );\n const styles = useStyles();\n const errorApi = useApi(errorApiRef);\n const qetaApi = useApi(qetaApiRef);\n\n const imageUpload = () => {\n // eslint-disable-next-line func-names\n return async function* (data: ArrayBuffer) {\n const fileType = await FileType.fromBuffer(data);\n\n const mimeType = fileType ? fileType.mime : 'text/plain';\n const attachment = await qetaApi.postAttachment(\n new Blob([data], { type: mimeType }),\n );\n if ('errors' in attachment) {\n errorApi.post({\n name: 'Upload failed',\n message: attachment.errors?.map(e => e.message).join(', ') ?? '',\n });\n return false;\n }\n props.onImageUpload(attachment.id);\n yield attachment.locationUri;\n return true;\n };\n };\n\n const isUploadDisabled =\n config?.getOptionalBoolean('qeta.storage.disabled') || false;\n\n return (\n <ReactMde\n classes={{\n reactMde: `qetaMarkdownEditorEdit ${styles.markdownEditor}`,\n textArea: error\n ? `qetaMarkdownEditorError ${styles.markdownEditorError}`\n : undefined,\n preview: 'qetaMarkdownEditorPreview',\n toolbar: 'qetaMarkdownEditorToolbar',\n }}\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: true,\n placeholder,\n },\n }}\n generateMarkdownPreview={content =>\n Promise.resolve(\n <MarkdownContent\n content={content}\n dialect=\"gfm\"\n className={`qetaMarkdownEditorPreview ${styles.markdownContent}`}\n />,\n )\n }\n paste={\n isUploadDisabled\n ? undefined\n : {\n saveImage: imageUpload(),\n }\n }\n />\n );\n};\n"],"names":[],"mappings":"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"}
@@ -6,7 +6,6 @@ import { useRouteRef } from '@backstage/core-plugin-api';
6
6
  import { questionRouteRef } from '@drodil/backstage-plugin-qeta-react';
7
7
 
8
8
  const QuestionHighlightList = (props) => {
9
- var _a;
10
9
  const {
11
10
  value: response,
12
11
  loading,
@@ -14,7 +13,7 @@ const QuestionHighlightList = (props) => {
14
13
  } = useQetaApi((api) => api.getQuestionsList(props.type), []);
15
14
  const classes = useStyles();
16
15
  const questionRoute = useRouteRef(questionRouteRef);
17
- const questions = (_a = response == null ? void 0 : response.questions) != null ? _a : [];
16
+ const questions = response?.questions ?? [];
18
17
  return /* @__PURE__ */ React.createElement(
19
18
  Box,
20
19
  {
@@ -1 +1 @@
1
- {"version":3,"file":"QuestionHighlightList.esm.js","sources":["../../../src/components/QuestionHighlightList/QuestionHighlightList.tsx"],"sourcesContent":["import {\n Box,\n Divider,\n List,\n ListItem,\n ListItemText,\n ListSubheader,\n} from '@material-ui/core';\nimport React from 'react';\nimport { useQetaApi, useStyles } from '../../utils/hooks';\nimport { Skeleton } from '@material-ui/lab';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { questionRouteRef } from '@drodil/backstage-plugin-qeta-react';\n\nexport const QuestionHighlightList = (props: {\n type: string;\n title: string;\n noQuestionsLabel: string;\n icon?: JSX.Element;\n}) => {\n const {\n value: response,\n loading,\n error,\n } = useQetaApi(api => api.getQuestionsList(props.type), []);\n const classes = useStyles();\n const questionRoute = useRouteRef(questionRouteRef);\n\n const questions = response?.questions ?? [];\n\n return (\n <Box\n className={`qetaQuestionHighlightList ${classes.questionHighlightList}`}\n display={{ md: 'none', lg: 'block' }}\n >\n <List\n component=\"nav\"\n aria-labelledby=\"nested-list-subheader\"\n className=\"qetaQuestionHighlightListList\"\n subheader={\n <ListSubheader\n disableSticky\n component=\"div\"\n id=\"nested-list-subheader\"\n color=\"primary\"\n >\n {props.title}\n {props.icon}\n </ListSubheader>\n }\n >\n {loading && (\n <ListItem>\n <Skeleton variant=\"rect\" />\n </ListItem>\n )}\n {error && (\n <ListItem>\n <ListItemText>Failed to load questions</ListItemText>\n </ListItem>\n )}\n {!error && questions.length === 0 && (\n <ListItem>\n <ListItemText>{props.noQuestionsLabel}</ListItemText>\n </ListItem>\n )}\n {!error &&\n questions.map(q => (\n <React.Fragment key={q.id}>\n <Divider />\n <ListItem\n className=\"qetaQuestionHighlightListListItem\"\n button\n dense\n component=\"a\"\n href={questionRoute({ id: q.id.toString(10) })}\n >\n <ListItemText>{q.title}</ListItemText>\n </ListItem>\n </React.Fragment>\n ))}\n </List>\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAca,MAAA,qBAAA,GAAwB,CAAC,KAKhC,KAAA;AAnBN,EAAA,IAAA,EAAA,CAAA;AAoBE,EAAM,MAAA;AAAA,IACJ,KAAO,EAAA,QAAA;AAAA,IACP,OAAA;AAAA,IACA,KAAA;AAAA,GACF,GAAI,WAAW,CAAO,GAAA,KAAA,GAAA,CAAI,iBAAiB,KAAM,CAAA,IAAI,CAAG,EAAA,EAAE,CAAA,CAAA;AAC1D,EAAA,MAAM,UAAU,SAAU,EAAA,CAAA;AAC1B,EAAM,MAAA,aAAA,GAAgB,YAAY,gBAAgB,CAAA,CAAA;AAElD,EAAA,MAAM,SAAY,GAAA,CAAA,EAAA,GAAA,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAU,SAAV,KAAA,IAAA,GAAA,EAAA,GAAuB,EAAC,CAAA;AAE1C,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAA6B,0BAAA,EAAA,OAAA,CAAQ,qBAAqB,CAAA,CAAA;AAAA,MACrE,OAAS,EAAA,EAAE,EAAI,EAAA,MAAA,EAAQ,IAAI,OAAQ,EAAA;AAAA,KAAA;AAAA,oBAEnC,KAAA,CAAA,aAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,SAAU,EAAA,KAAA;AAAA,QACV,iBAAgB,EAAA,uBAAA;AAAA,QAChB,SAAU,EAAA,+BAAA;AAAA,QACV,SACE,kBAAA,KAAA,CAAA,aAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,aAAa,EAAA,IAAA;AAAA,YACb,SAAU,EAAA,KAAA;AAAA,YACV,EAAG,EAAA,uBAAA;AAAA,YACH,KAAM,EAAA,SAAA;AAAA,WAAA;AAAA,UAEL,KAAM,CAAA,KAAA;AAAA,UACN,KAAM,CAAA,IAAA;AAAA,SACT;AAAA,OAAA;AAAA,MAGD,2BACE,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA,sCACE,QAAS,EAAA,EAAA,OAAA,EAAQ,QAAO,CAC3B,CAAA;AAAA,MAED,yBACE,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,YAAA,EAAA,IAAA,EAAa,0BAAwB,CACxC,CAAA;AAAA,MAED,CAAC,KAAS,IAAA,SAAA,CAAU,MAAW,KAAA,CAAA,oBAC7B,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,YAAA,EAAA,IAAA,EAAc,KAAM,CAAA,gBAAiB,CACxC,CAAA;AAAA,MAED,CAAC,KAAA,IACA,SAAU,CAAA,GAAA,CAAI,uBACX,KAAA,CAAA,aAAA,CAAA,KAAA,CAAM,QAAN,EAAA,EAAe,GAAK,EAAA,CAAA,CAAE,EACrB,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,aAAQ,CACT,kBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,SAAU,EAAA,mCAAA;AAAA,UACV,MAAM,EAAA,IAAA;AAAA,UACN,KAAK,EAAA,IAAA;AAAA,UACL,SAAU,EAAA,GAAA;AAAA,UACV,IAAA,EAAM,cAAc,EAAE,EAAA,EAAI,EAAE,EAAG,CAAA,QAAA,CAAS,EAAE,CAAA,EAAG,CAAA;AAAA,SAAA;AAAA,wBAE7C,KAAA,CAAA,aAAA,CAAC,YAAc,EAAA,IAAA,EAAA,CAAA,CAAE,KAAM,CAAA;AAAA,OAE3B,CACD,CAAA;AAAA,KACL;AAAA,GACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"QuestionHighlightList.esm.js","sources":["../../../src/components/QuestionHighlightList/QuestionHighlightList.tsx"],"sourcesContent":["import {\n Box,\n Divider,\n List,\n ListItem,\n ListItemText,\n ListSubheader,\n} from '@material-ui/core';\nimport React from 'react';\nimport { useQetaApi, useStyles } from '../../utils/hooks';\nimport { Skeleton } from '@material-ui/lab';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { questionRouteRef } from '@drodil/backstage-plugin-qeta-react';\n\nexport const QuestionHighlightList = (props: {\n type: string;\n title: string;\n noQuestionsLabel: string;\n icon?: JSX.Element;\n}) => {\n const {\n value: response,\n loading,\n error,\n } = useQetaApi(api => api.getQuestionsList(props.type), []);\n const classes = useStyles();\n const questionRoute = useRouteRef(questionRouteRef);\n\n const questions = response?.questions ?? [];\n\n return (\n <Box\n className={`qetaQuestionHighlightList ${classes.questionHighlightList}`}\n display={{ md: 'none', lg: 'block' }}\n >\n <List\n component=\"nav\"\n aria-labelledby=\"nested-list-subheader\"\n className=\"qetaQuestionHighlightListList\"\n subheader={\n <ListSubheader\n disableSticky\n component=\"div\"\n id=\"nested-list-subheader\"\n color=\"primary\"\n >\n {props.title}\n {props.icon}\n </ListSubheader>\n }\n >\n {loading && (\n <ListItem>\n <Skeleton variant=\"rect\" />\n </ListItem>\n )}\n {error && (\n <ListItem>\n <ListItemText>Failed to load questions</ListItemText>\n </ListItem>\n )}\n {!error && questions.length === 0 && (\n <ListItem>\n <ListItemText>{props.noQuestionsLabel}</ListItemText>\n </ListItem>\n )}\n {!error &&\n questions.map(q => (\n <React.Fragment key={q.id}>\n <Divider />\n <ListItem\n className=\"qetaQuestionHighlightListListItem\"\n button\n dense\n component=\"a\"\n href={questionRoute({ id: q.id.toString(10) })}\n >\n <ListItemText>{q.title}</ListItemText>\n </ListItem>\n </React.Fragment>\n ))}\n </List>\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAca,MAAA,qBAAA,GAAwB,CAAC,KAKhC,KAAA;AACJ,EAAM,MAAA;AAAA,IACJ,KAAO,EAAA,QAAA;AAAA,IACP,OAAA;AAAA,IACA,KAAA;AAAA,GACF,GAAI,WAAW,CAAO,GAAA,KAAA,GAAA,CAAI,iBAAiB,KAAM,CAAA,IAAI,CAAG,EAAA,EAAE,CAAA,CAAA;AAC1D,EAAA,MAAM,UAAU,SAAU,EAAA,CAAA;AAC1B,EAAM,MAAA,aAAA,GAAgB,YAAY,gBAAgB,CAAA,CAAA;AAElD,EAAM,MAAA,SAAA,GAAY,QAAU,EAAA,SAAA,IAAa,EAAC,CAAA;AAE1C,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAA6B,0BAAA,EAAA,OAAA,CAAQ,qBAAqB,CAAA,CAAA;AAAA,MACrE,OAAS,EAAA,EAAE,EAAI,EAAA,MAAA,EAAQ,IAAI,OAAQ,EAAA;AAAA,KAAA;AAAA,oBAEnC,KAAA,CAAA,aAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,SAAU,EAAA,KAAA;AAAA,QACV,iBAAgB,EAAA,uBAAA;AAAA,QAChB,SAAU,EAAA,+BAAA;AAAA,QACV,SACE,kBAAA,KAAA,CAAA,aAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,aAAa,EAAA,IAAA;AAAA,YACb,SAAU,EAAA,KAAA;AAAA,YACV,EAAG,EAAA,uBAAA;AAAA,YACH,KAAM,EAAA,SAAA;AAAA,WAAA;AAAA,UAEL,KAAM,CAAA,KAAA;AAAA,UACN,KAAM,CAAA,IAAA;AAAA,SACT;AAAA,OAAA;AAAA,MAGD,2BACE,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA,sCACE,QAAS,EAAA,EAAA,OAAA,EAAQ,QAAO,CAC3B,CAAA;AAAA,MAED,yBACE,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,YAAA,EAAA,IAAA,EAAa,0BAAwB,CACxC,CAAA;AAAA,MAED,CAAC,KAAS,IAAA,SAAA,CAAU,MAAW,KAAA,CAAA,oBAC7B,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,YAAA,EAAA,IAAA,EAAc,KAAM,CAAA,gBAAiB,CACxC,CAAA;AAAA,MAED,CAAC,KAAA,IACA,SAAU,CAAA,GAAA,CAAI,uBACX,KAAA,CAAA,aAAA,CAAA,KAAA,CAAM,QAAN,EAAA,EAAe,GAAK,EAAA,CAAA,CAAE,EACrB,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,aAAQ,CACT,kBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,SAAU,EAAA,mCAAA;AAAA,UACV,MAAM,EAAA,IAAA;AAAA,UACN,KAAK,EAAA,IAAA;AAAA,UACL,SAAU,EAAA,GAAA;AAAA,UACV,IAAA,EAAM,cAAc,EAAE,EAAA,EAAI,EAAE,EAAG,CAAA,QAAA,CAAS,EAAE,CAAA,EAAG,CAAA;AAAA,SAAA;AAAA,wBAE7C,KAAA,CAAA,aAAA,CAAC,YAAc,EAAA,IAAA,EAAA,CAAA,CAAE,KAAM,CAAA;AAAA,OAE3B,CACD,CAAA;AAAA,KACL;AAAA,GACF,CAAA;AAEJ;;;;"}
@@ -5,14 +5,13 @@ import { RelativeTimeWithTooltip } from '../RelativeTimeWithTooltip/RelativeTime
5
5
  import { UpdatedByLink, AuthorLink } from '../Links/Links.esm.js';
6
6
 
7
7
  const AuthorBox = (props) => {
8
- var _a, _b;
9
8
  const { entity } = props;
10
9
  const styles = useStyles();
11
10
  const { name, initials, user } = useEntityAuthor(entity);
12
11
  return /* @__PURE__ */ React.createElement(Box, { className: `qetaAuthorBox ${styles.questionCardAuthor}` }, /* @__PURE__ */ React.createElement(Grid, { container: true, alignItems: "center" }, /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12, style: { paddingBottom: 0 } }, /* @__PURE__ */ React.createElement(Typography, { className: "qetaAuthorBoxCreated", variant: "caption" }, "Posted ", /* @__PURE__ */ React.createElement(RelativeTimeWithTooltip, { value: entity.created }))), entity.updated && entity.updatedBy && /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12, style: { paddingBottom: 0, paddingTop: 0 } }, /* @__PURE__ */ React.createElement(Typography, { className: "qetaAuthorBoxUpdated", variant: "caption" }, "Updated ", /* @__PURE__ */ React.createElement(RelativeTimeWithTooltip, { value: entity.updated }), " by", " ", /* @__PURE__ */ React.createElement(UpdatedByLink, { entity }))), /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 2 }, /* @__PURE__ */ React.createElement(
13
12
  Avatar,
14
13
  {
15
- src: (_b = (_a = user == null ? void 0 : user.spec) == null ? void 0 : _a.profile) == null ? void 0 : _b.picture,
14
+ src: user?.spec?.profile?.picture,
16
15
  className: "qetaAuthorBoxAvatar avatar",
17
16
  alt: name,
18
17
  variant: "rounded"
@@ -1 +1 @@
1
- {"version":3,"file":"AuthorBox.esm.js","sources":["../../../src/components/QuestionPage/AuthorBox.tsx"],"sourcesContent":["import { Avatar, Box, Grid, Typography } from '@material-ui/core';\nimport React from 'react';\nimport { useEntityAuthor, useStyles } from '../../utils/hooks';\nimport {\n AnswerResponse,\n QuestionResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { RelativeTimeWithTooltip } from '../RelativeTimeWithTooltip/RelativeTimeWithTooltip';\nimport { AuthorLink, UpdatedByLink } from '../Links/Links';\n\nexport const AuthorBox = (props: {\n entity: QuestionResponse | AnswerResponse;\n}) => {\n const { entity } = props;\n const styles = useStyles();\n const { name, initials, user } = useEntityAuthor(entity);\n\n return (\n <Box className={`qetaAuthorBox ${styles.questionCardAuthor}`}>\n <Grid container alignItems=\"center\">\n <Grid item xs={12} style={{ paddingBottom: 0 }}>\n <Typography className=\"qetaAuthorBoxCreated\" variant=\"caption\">\n Posted <RelativeTimeWithTooltip value={entity.created} />\n </Typography>\n </Grid>\n {entity.updated && entity.updatedBy && (\n <Grid item xs={12} style={{ paddingBottom: 0, paddingTop: 0 }}>\n <Typography className=\"qetaAuthorBoxUpdated\" variant=\"caption\">\n Updated <RelativeTimeWithTooltip value={entity.updated} /> by{' '}\n <UpdatedByLink entity={entity} />\n </Typography>\n </Grid>\n )}\n <Grid item xs={2}>\n <Avatar\n src={user?.spec?.profile?.picture}\n className=\"qetaAuthorBoxAvatar avatar\"\n alt={name}\n variant=\"rounded\"\n >\n {initials}\n </Avatar>\n </Grid>\n <Grid item xs={10} className={styles.authorLink}>\n <Box style={{ paddingLeft: '5px' }}>\n <AuthorLink entity={entity} />\n </Box>\n </Grid>\n </Grid>\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;AAUa,MAAA,SAAA,GAAY,CAAC,KAEpB,KAAA;AAZN,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAaE,EAAM,MAAA,EAAE,QAAW,GAAA,KAAA,CAAA;AACnB,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAA,MAAM,EAAE,IAAM,EAAA,QAAA,EAAU,IAAK,EAAA,GAAI,gBAAgB,MAAM,CAAA,CAAA;AAEvD,EAAA,2CACG,GAAI,EAAA,EAAA,SAAA,EAAW,CAAiB,cAAA,EAAA,MAAA,CAAO,kBAAkB,CACxD,CAAA,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAS,MAAC,UAAW,EAAA,QAAA,EAAA,sCACxB,IAAK,EAAA,EAAA,IAAA,EAAI,MAAC,EAAI,EAAA,EAAA,EAAI,KAAO,EAAA,EAAE,eAAe,CAAE,EAAA,EAAA,sCAC1C,UAAW,EAAA,EAAA,SAAA,EAAU,wBAAuB,OAAQ,EAAA,SAAA,EAAA,EAAU,SACtD,kBAAA,KAAA,CAAA,aAAA,CAAC,2BAAwB,KAAO,EAAA,MAAA,CAAO,SAAS,CACzD,CACF,GACC,MAAO,CAAA,OAAA,IAAW,MAAO,CAAA,SAAA,wCACvB,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,IAAI,KAAO,EAAA,EAAE,aAAe,EAAA,CAAA,EAAG,YAAY,CAAE,EAAA,EAAA,sCACzD,UAAW,EAAA,EAAA,SAAA,EAAU,wBAAuB,OAAQ,EAAA,SAAA,EAAA,EAAU,UACrD,kBAAA,KAAA,CAAA,aAAA,CAAC,2BAAwB,KAAO,EAAA,MAAA,CAAO,SAAS,CAAE,EAAA,KAAA,EAAI,qBAC7D,KAAA,CAAA,aAAA,CAAA,aAAA,EAAA,EAAc,MAAgB,EAAA,CACjC,CACF,CAEF,kBAAA,KAAA,CAAA,aAAA,CAAC,QAAK,IAAI,EAAA,IAAA,EAAC,IAAI,CACb,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,GAAK,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,IAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAY,YAAZ,IAAqB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA;AAAA,MAC1B,SAAU,EAAA,4BAAA;AAAA,MACV,GAAK,EAAA,IAAA;AAAA,MACL,OAAQ,EAAA,SAAA;AAAA,KAAA;AAAA,IAEP,QAAA;AAAA,GAEL,CACA,kBAAA,KAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,MAAC,EAAI,EAAA,EAAA,EAAI,SAAW,EAAA,MAAA,CAAO,UACnC,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,OAAI,KAAO,EAAA,EAAE,WAAa,EAAA,KAAA,EACzB,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,cAAW,MAAgB,EAAA,CAC9B,CACF,CACF,CACF,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"AuthorBox.esm.js","sources":["../../../src/components/QuestionPage/AuthorBox.tsx"],"sourcesContent":["import { Avatar, Box, Grid, Typography } from '@material-ui/core';\nimport React from 'react';\nimport { useEntityAuthor, useStyles } from '../../utils/hooks';\nimport {\n AnswerResponse,\n QuestionResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { RelativeTimeWithTooltip } from '../RelativeTimeWithTooltip/RelativeTimeWithTooltip';\nimport { AuthorLink, UpdatedByLink } from '../Links/Links';\n\nexport const AuthorBox = (props: {\n entity: QuestionResponse | AnswerResponse;\n}) => {\n const { entity } = props;\n const styles = useStyles();\n const { name, initials, user } = useEntityAuthor(entity);\n\n return (\n <Box className={`qetaAuthorBox ${styles.questionCardAuthor}`}>\n <Grid container alignItems=\"center\">\n <Grid item xs={12} style={{ paddingBottom: 0 }}>\n <Typography className=\"qetaAuthorBoxCreated\" variant=\"caption\">\n Posted <RelativeTimeWithTooltip value={entity.created} />\n </Typography>\n </Grid>\n {entity.updated && entity.updatedBy && (\n <Grid item xs={12} style={{ paddingBottom: 0, paddingTop: 0 }}>\n <Typography className=\"qetaAuthorBoxUpdated\" variant=\"caption\">\n Updated <RelativeTimeWithTooltip value={entity.updated} /> by{' '}\n <UpdatedByLink entity={entity} />\n </Typography>\n </Grid>\n )}\n <Grid item xs={2}>\n <Avatar\n src={user?.spec?.profile?.picture}\n className=\"qetaAuthorBoxAvatar avatar\"\n alt={name}\n variant=\"rounded\"\n >\n {initials}\n </Avatar>\n </Grid>\n <Grid item xs={10} className={styles.authorLink}>\n <Box style={{ paddingLeft: '5px' }}>\n <AuthorLink entity={entity} />\n </Box>\n </Grid>\n </Grid>\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;AAUa,MAAA,SAAA,GAAY,CAAC,KAEpB,KAAA;AACJ,EAAM,MAAA,EAAE,QAAW,GAAA,KAAA,CAAA;AACnB,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAA,MAAM,EAAE,IAAM,EAAA,QAAA,EAAU,IAAK,EAAA,GAAI,gBAAgB,MAAM,CAAA,CAAA;AAEvD,EAAA,2CACG,GAAI,EAAA,EAAA,SAAA,EAAW,CAAiB,cAAA,EAAA,MAAA,CAAO,kBAAkB,CACxD,CAAA,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAS,MAAC,UAAW,EAAA,QAAA,EAAA,sCACxB,IAAK,EAAA,EAAA,IAAA,EAAI,MAAC,EAAI,EAAA,EAAA,EAAI,KAAO,EAAA,EAAE,eAAe,CAAE,EAAA,EAAA,sCAC1C,UAAW,EAAA,EAAA,SAAA,EAAU,wBAAuB,OAAQ,EAAA,SAAA,EAAA,EAAU,SACtD,kBAAA,KAAA,CAAA,aAAA,CAAC,2BAAwB,KAAO,EAAA,MAAA,CAAO,SAAS,CACzD,CACF,GACC,MAAO,CAAA,OAAA,IAAW,MAAO,CAAA,SAAA,wCACvB,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,IAAI,KAAO,EAAA,EAAE,aAAe,EAAA,CAAA,EAAG,YAAY,CAAE,EAAA,EAAA,sCACzD,UAAW,EAAA,EAAA,SAAA,EAAU,wBAAuB,OAAQ,EAAA,SAAA,EAAA,EAAU,UACrD,kBAAA,KAAA,CAAA,aAAA,CAAC,2BAAwB,KAAO,EAAA,MAAA,CAAO,SAAS,CAAE,EAAA,KAAA,EAAI,qBAC7D,KAAA,CAAA,aAAA,CAAA,aAAA,EAAA,EAAc,MAAgB,EAAA,CACjC,CACF,CAEF,kBAAA,KAAA,CAAA,aAAA,CAAC,QAAK,IAAI,EAAA,IAAA,EAAC,IAAI,CACb,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,IAAM,EAAA,IAAA,EAAM,OAAS,EAAA,OAAA;AAAA,MAC1B,SAAU,EAAA,4BAAA;AAAA,MACV,GAAK,EAAA,IAAA;AAAA,MACL,OAAQ,EAAA,SAAA;AAAA,KAAA;AAAA,IAEP,QAAA;AAAA,GAEL,CACA,kBAAA,KAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,MAAC,EAAI,EAAA,EAAA,EAAI,SAAW,EAAA,MAAA,CAAO,UACnC,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,OAAI,KAAO,EAAA,EAAE,WAAa,EAAA,KAAA,EACzB,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,cAAW,MAAgB,EAAA,CAC9B,CACF,CACF,CACF,CAAA,CAAA;AAEJ;;;;"}
@@ -8,7 +8,7 @@ const EntityChip = (props) => {
8
8
  const { entity } = props;
9
9
  const entityRoute = useRouteRef(entityRouteRef);
10
10
  const { primaryTitle, secondaryTitle } = useEntityPresentation(entity);
11
- return /* @__PURE__ */ React.createElement(Tooltip, { title: secondaryTitle != null ? secondaryTitle : primaryTitle, arrow: true }, /* @__PURE__ */ React.createElement(
11
+ return /* @__PURE__ */ React.createElement(Tooltip, { title: secondaryTitle ?? primaryTitle, arrow: true }, /* @__PURE__ */ React.createElement(
12
12
  Chip,
13
13
  {
14
14
  label: primaryTitle,
@@ -1 +1 @@
1
- {"version":3,"file":"EntityChip.esm.js","sources":["../../../src/components/QuestionPage/EntityChip.tsx"],"sourcesContent":["import { Entity, getCompoundEntityRef } from '@backstage/catalog-model';\nimport { Chip, Tooltip } from '@material-ui/core';\nimport React from 'react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport {\n entityRouteRef,\n useEntityPresentation,\n} from '@backstage/plugin-catalog-react';\n\nexport const EntityChip = (props: { entity: Entity }) => {\n const { entity } = props;\n const entityRoute = useRouteRef(entityRouteRef);\n const { primaryTitle, secondaryTitle } = useEntityPresentation(entity);\n return (\n <Tooltip title={secondaryTitle ?? primaryTitle} arrow>\n <Chip\n label={primaryTitle}\n size=\"small\"\n variant=\"outlined\"\n className=\"qetaEntityChip\"\n component=\"a\"\n href={entityRoute(getCompoundEntityRef(entity))}\n clickable\n />\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;AASa,MAAA,UAAA,GAAa,CAAC,KAA8B,KAAA;AACvD,EAAM,MAAA,EAAE,QAAW,GAAA,KAAA,CAAA;AACnB,EAAM,MAAA,WAAA,GAAc,YAAY,cAAc,CAAA,CAAA;AAC9C,EAAA,MAAM,EAAE,YAAA,EAAc,cAAe,EAAA,GAAI,sBAAsB,MAAM,CAAA,CAAA;AACrE,EAAA,2CACG,OAAQ,EAAA,EAAA,KAAA,EAAO,cAAkB,IAAA,IAAA,GAAA,cAAA,GAAA,YAAA,EAAc,OAAK,IACnD,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA,YAAA;AAAA,MACP,IAAK,EAAA,OAAA;AAAA,MACL,OAAQ,EAAA,UAAA;AAAA,MACR,SAAU,EAAA,gBAAA;AAAA,MACV,SAAU,EAAA,GAAA;AAAA,MACV,IAAM,EAAA,WAAA,CAAY,oBAAqB,CAAA,MAAM,CAAC,CAAA;AAAA,MAC9C,SAAS,EAAA,IAAA;AAAA,KAAA;AAAA,GAEb,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"EntityChip.esm.js","sources":["../../../src/components/QuestionPage/EntityChip.tsx"],"sourcesContent":["import { Entity, getCompoundEntityRef } from '@backstage/catalog-model';\nimport { Chip, Tooltip } from '@material-ui/core';\nimport React from 'react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport {\n entityRouteRef,\n useEntityPresentation,\n} from '@backstage/plugin-catalog-react';\n\nexport const EntityChip = (props: { entity: Entity }) => {\n const { entity } = props;\n const entityRoute = useRouteRef(entityRouteRef);\n const { primaryTitle, secondaryTitle } = useEntityPresentation(entity);\n return (\n <Tooltip title={secondaryTitle ?? primaryTitle} arrow>\n <Chip\n label={primaryTitle}\n size=\"small\"\n variant=\"outlined\"\n className=\"qetaEntityChip\"\n component=\"a\"\n href={entityRoute(getCompoundEntityRef(entity))}\n clickable\n />\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;AASa,MAAA,UAAA,GAAa,CAAC,KAA8B,KAAA;AACvD,EAAM,MAAA,EAAE,QAAW,GAAA,KAAA,CAAA;AACnB,EAAM,MAAA,WAAA,GAAc,YAAY,cAAc,CAAA,CAAA;AAC9C,EAAA,MAAM,EAAE,YAAA,EAAc,cAAe,EAAA,GAAI,sBAAsB,MAAM,CAAA,CAAA;AACrE,EAAA,2CACG,OAAQ,EAAA,EAAA,KAAA,EAAO,cAAkB,IAAA,YAAA,EAAc,OAAK,IACnD,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA,YAAA;AAAA,MACP,IAAK,EAAA,OAAA;AAAA,MACL,OAAQ,EAAA,UAAA;AAAA,MACR,SAAU,EAAA,gBAAA;AAAA,MACV,SAAU,EAAA,GAAA;AAAA,MACV,IAAM,EAAA,WAAA,CAAY,oBAAqB,CAAA,MAAM,CAAC,CAAA;AAAA,MAC9C,SAAS,EAAA,IAAA;AAAA,KAAA;AAAA,GAEb,CAAA,CAAA;AAEJ;;;;"}
@@ -15,7 +15,6 @@ import { editQuestionRouteRef } from '@drodil/backstage-plugin-qeta-react';
15
15
  import { LinkButton } from './LinkButton.esm.js';
16
16
 
17
17
  const QuestionCard = (props) => {
18
- var _a;
19
18
  const { question } = props;
20
19
  const styles = useStyles();
21
20
  const editQuestionRoute = useRouteRef(editQuestionRouteRef);
@@ -26,7 +25,7 @@ const QuestionCard = (props) => {
26
25
  const onCommentAction = (q, _) => {
27
26
  setQuestionEntity(q);
28
27
  };
29
- const highlightedAnswer = (_a = window.location.hash.slice(1)) != null ? _a : void 0;
28
+ const highlightedAnswer = window.location.hash.slice(1) ?? void 0;
30
29
  useEffect(() => {
31
30
  if (highlightedAnswer) {
32
31
  const element = document.querySelector(`#${highlightedAnswer}`);
@@ -1 +1 @@
1
- {"version":3,"file":"QuestionCard.esm.js","sources":["../../../src/components/QuestionPage/QuestionCard.tsx"],"sourcesContent":["import {\n AnswerResponse,\n QuestionResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport {\n Box,\n Button,\n Card,\n CardContent,\n Grid,\n Typography,\n} from '@material-ui/core';\nimport { MarkdownContent } from '@backstage/core-components';\nimport React, { useEffect } from 'react';\nimport { VoteButtons } from './VoteButtons';\nimport { useStyles } from '../../utils/hooks';\nimport { DeleteModal } from '../DeleteModal/DeleteModal';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport EditIcon from '@material-ui/icons/Edit';\nimport { FavoriteButton } from './FavoriteButton';\nimport { AuthorBox } from './AuthorBox';\nimport { TagsAndEntities } from './TagsAndEntities';\nimport { CommentSection } from '../CommentSection/CommentSection';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { editQuestionRouteRef } from '@drodil/backstage-plugin-qeta-react';\nimport { LinkButton } from './LinkButton';\n\nexport const QuestionCard = (props: { question: QuestionResponse }) => {\n const { question } = props;\n const styles = useStyles();\n const editQuestionRoute = useRouteRef(editQuestionRouteRef);\n const [deleteModalOpen, setDeleteModalOpen] = React.useState(false);\n const [questionEntity, setQuestionEntity] = React.useState(question);\n const handleDeleteModalOpen = () => setDeleteModalOpen(true);\n const handleDeleteModalClose = () => setDeleteModalOpen(false);\n const onCommentAction = (q: QuestionResponse, _?: AnswerResponse) => {\n setQuestionEntity(q);\n };\n\n const highlightedAnswer = window.location.hash.slice(1) ?? undefined;\n useEffect(() => {\n if (highlightedAnswer) {\n const element = document.querySelector(`#${highlightedAnswer}`);\n if (element) {\n element.scrollIntoView();\n }\n }\n }, [highlightedAnswer]);\n\n return (\n <>\n <Card\n variant=\"outlined\"\n className={`qetaQuestionCard ${styles.questionCard}`}\n >\n <CardContent>\n <div className={styles.questionCardVote}>\n <VoteButtons entity={questionEntity} />\n <FavoriteButton entity={questionEntity} />\n <LinkButton entity={questionEntity} />\n </div>\n <div className={styles.questionCardContent}>\n <Typography variant=\"body1\" gutterBottom>\n <MarkdownContent\n content={questionEntity.content}\n dialect=\"gfm\"\n className={styles.markdownContent}\n />\n </Typography>\n <Grid\n container\n item\n justifyContent=\"space-around\"\n className={styles.questionCardMetadata}\n >\n <Grid item xs={9} style={{ alignSelf: 'flex-end' }}>\n <TagsAndEntities question={questionEntity} />\n {(question.own || question.canEdit || question.canDelete) && (\n <Box className={styles.questionCardActions}>\n {(question.own || question.canDelete) && (\n <>\n <Button\n variant=\"outlined\"\n size=\"small\"\n color=\"secondary\"\n onClick={handleDeleteModalOpen}\n className={`${styles.marginRight} qetaQuestionCardDeleteBtn`}\n startIcon={<DeleteIcon />}\n >\n Delete\n </Button>\n <DeleteModal\n open={deleteModalOpen}\n onClose={handleDeleteModalClose}\n entity={questionEntity}\n />\n </>\n )}\n {(question.own || question.canEdit) && (\n <Button\n variant=\"outlined\"\n size=\"small\"\n startIcon={<EditIcon />}\n href={editQuestionRoute({\n id: question.id.toString(10),\n })}\n className=\"qetaQuestionCardEditBtn\"\n >\n Edit\n </Button>\n )}\n </Box>\n )}\n </Grid>\n <Grid item xs={3} className={styles.noPadding}>\n <AuthorBox entity={questionEntity} />\n </Grid>\n </Grid>\n </div>\n </CardContent>\n </Card>\n <CommentSection\n question={questionEntity}\n onCommentDelete={onCommentAction}\n onCommentPost={onCommentAction}\n />\n </>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QuestionCard.esm.js","sources":["../../../src/components/QuestionPage/QuestionCard.tsx"],"sourcesContent":["import {\n AnswerResponse,\n QuestionResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport {\n Box,\n Button,\n Card,\n CardContent,\n Grid,\n Typography,\n} from '@material-ui/core';\nimport { MarkdownContent } from '@backstage/core-components';\nimport React, { useEffect } from 'react';\nimport { VoteButtons } from './VoteButtons';\nimport { useStyles } from '../../utils/hooks';\nimport { DeleteModal } from '../DeleteModal/DeleteModal';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport EditIcon from '@material-ui/icons/Edit';\nimport { FavoriteButton } from './FavoriteButton';\nimport { AuthorBox } from './AuthorBox';\nimport { TagsAndEntities } from './TagsAndEntities';\nimport { CommentSection } from '../CommentSection/CommentSection';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { editQuestionRouteRef } from '@drodil/backstage-plugin-qeta-react';\nimport { LinkButton } from './LinkButton';\n\nexport const QuestionCard = (props: { question: QuestionResponse }) => {\n const { question } = props;\n const styles = useStyles();\n const editQuestionRoute = useRouteRef(editQuestionRouteRef);\n const [deleteModalOpen, setDeleteModalOpen] = React.useState(false);\n const [questionEntity, setQuestionEntity] = React.useState(question);\n const handleDeleteModalOpen = () => setDeleteModalOpen(true);\n const handleDeleteModalClose = () => setDeleteModalOpen(false);\n const onCommentAction = (q: QuestionResponse, _?: AnswerResponse) => {\n setQuestionEntity(q);\n };\n\n const highlightedAnswer = window.location.hash.slice(1) ?? undefined;\n useEffect(() => {\n if (highlightedAnswer) {\n const element = document.querySelector(`#${highlightedAnswer}`);\n if (element) {\n element.scrollIntoView();\n }\n }\n }, [highlightedAnswer]);\n\n return (\n <>\n <Card\n variant=\"outlined\"\n className={`qetaQuestionCard ${styles.questionCard}`}\n >\n <CardContent>\n <div className={styles.questionCardVote}>\n <VoteButtons entity={questionEntity} />\n <FavoriteButton entity={questionEntity} />\n <LinkButton entity={questionEntity} />\n </div>\n <div className={styles.questionCardContent}>\n <Typography variant=\"body1\" gutterBottom>\n <MarkdownContent\n content={questionEntity.content}\n dialect=\"gfm\"\n className={styles.markdownContent}\n />\n </Typography>\n <Grid\n container\n item\n justifyContent=\"space-around\"\n className={styles.questionCardMetadata}\n >\n <Grid item xs={9} style={{ alignSelf: 'flex-end' }}>\n <TagsAndEntities question={questionEntity} />\n {(question.own || question.canEdit || question.canDelete) && (\n <Box className={styles.questionCardActions}>\n {(question.own || question.canDelete) && (\n <>\n <Button\n variant=\"outlined\"\n size=\"small\"\n color=\"secondary\"\n onClick={handleDeleteModalOpen}\n className={`${styles.marginRight} qetaQuestionCardDeleteBtn`}\n startIcon={<DeleteIcon />}\n >\n Delete\n </Button>\n <DeleteModal\n open={deleteModalOpen}\n onClose={handleDeleteModalClose}\n entity={questionEntity}\n />\n </>\n )}\n {(question.own || question.canEdit) && (\n <Button\n variant=\"outlined\"\n size=\"small\"\n startIcon={<EditIcon />}\n href={editQuestionRoute({\n id: question.id.toString(10),\n })}\n className=\"qetaQuestionCardEditBtn\"\n >\n Edit\n </Button>\n )}\n </Box>\n )}\n </Grid>\n <Grid item xs={3} className={styles.noPadding}>\n <AuthorBox entity={questionEntity} />\n </Grid>\n </Grid>\n </div>\n </CardContent>\n </Card>\n <CommentSection\n question={questionEntity}\n onCommentDelete={onCommentAction}\n onCommentPost={onCommentAction}\n />\n </>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -14,7 +14,6 @@ import { UpdatedByLink } from '../Links/Links.esm.js';
14
14
  import { useSignal } from '@backstage/plugin-signals-react';
15
15
 
16
16
  const QuestionPage = () => {
17
- var _a;
18
17
  const { id } = useParams();
19
18
  const styles = useStyles();
20
19
  const [newAnswers, setNewAnswers] = React.useState([]);
@@ -35,7 +34,7 @@ const QuestionPage = () => {
35
34
  }
36
35
  }, [question]);
37
36
  useEffect(() => {
38
- if ((lastSignal == null ? void 0 : lastSignal.type) === "question_stats") {
37
+ if (lastSignal?.type === "question_stats") {
39
38
  setAnswersCount(lastSignal.answersCount);
40
39
  setViews(lastSignal.views);
41
40
  }
@@ -50,10 +49,9 @@ const QuestionPage = () => {
50
49
  return /* @__PURE__ */ React.createElement(Skeleton, { variant: "rect", height: 200 });
51
50
  }
52
51
  if (error || question === void 0) {
53
- return /* @__PURE__ */ React.createElement(WarningPanel, { severity: "error", title: "Could not load question." }, error == null ? void 0 : error.message);
52
+ return /* @__PURE__ */ React.createElement(WarningPanel, { severity: "error", title: "Could not load question." }, error?.message);
54
53
  }
55
54
  const sortAnswers = (a, b) => {
56
- var _a2, _b, _c, _d, _e, _f;
57
55
  if (answerSort === "default") {
58
56
  return 1;
59
57
  }
@@ -72,10 +70,10 @@ const QuestionPage = () => {
72
70
  ret = a.author > b.author ? -1 : 1;
73
71
  break;
74
72
  case "comments":
75
- ret = ((_b = (_a2 = a.comments) == null ? void 0 : _a2.length) != null ? _b : 0) > ((_d = (_c = b.comments) == null ? void 0 : _c.length) != null ? _d : 0) ? -1 : 1;
73
+ ret = (a.comments?.length ?? 0) > (b.comments?.length ?? 0) ? -1 : 1;
76
74
  break;
77
75
  case "updated":
78
- ret = ((_e = a.updated) != null ? _e : a.created) > ((_f = b.updated) != null ? _f : b.created) ? -1 : 1;
76
+ ret = (a.updated ?? a.created) > (b.updated ?? b.created) ? -1 : 1;
79
77
  break;
80
78
  default:
81
79
  return 1;
@@ -85,7 +83,7 @@ const QuestionPage = () => {
85
83
  }
86
84
  return ret;
87
85
  };
88
- const allAnswers = ((_a = question.answers) != null ? _a : []).concat(newAnswers);
86
+ const allAnswers = (question.answers ?? []).concat(newAnswers);
89
87
  return /* @__PURE__ */ React.createElement(Content, null, /* @__PURE__ */ React.createElement(Container, { maxWidth: "lg" }, /* @__PURE__ */ React.createElement(
90
88
  ContentHeader,
91
89
  {
@@ -1 +1 @@
1
- {"version":3,"file":"QuestionPage.esm.js","sources":["../../../src/components/QuestionPage/QuestionPage.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport {\n Box,\n Container,\n Divider,\n FormControl,\n Grid,\n Select,\n Typography,\n} from '@material-ui/core';\nimport {\n Content,\n ContentHeader,\n WarningPanel,\n} from '@backstage/core-components';\nimport { useParams, useSearchParams } from 'react-router-dom';\nimport { useQetaApi, useStyles } from '../../utils/hooks';\nimport { QuestionCard } from './QuestionCard';\nimport {\n Answer,\n AnswerResponse,\n QetaSignal,\n QuestionResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { AnswerForm } from './AnswerForm';\nimport { AnswerCard } from './AnswerCard';\nimport { Skeleton } from '@material-ui/lab';\nimport { AskQuestionButton } from '../Buttons/AskQuestionButton';\nimport { BackToQuestionsButton } from '../Buttons/BackToQuestionsButton';\nimport { RelativeTimeWithTooltip } from '../RelativeTimeWithTooltip/RelativeTimeWithTooltip';\nimport { UpdatedByLink } from '../Links/Links';\nimport { useSignal } from '@backstage/plugin-signals-react';\n\nexport const QuestionPage = () => {\n const { id } = useParams();\n const styles = useStyles();\n const [newAnswers, setNewAnswers] = React.useState<AnswerResponse[]>([]);\n const [answerSort, setAnswerSort] = React.useState<string>('default');\n const [searchParams] = useSearchParams();\n\n const [answersCount, setAnswersCount] = useState(0);\n const [views, setViews] = useState(0);\n\n const { lastSignal } = useSignal<QetaSignal>(`qeta:question_${id}`);\n\n const {\n value: question,\n loading,\n error,\n } = useQetaApi(api => api.getQuestion(id), [id]);\n\n useEffect(() => {\n if (question) {\n setAnswersCount(question.answersCount);\n setViews(question.views);\n }\n }, [question]);\n\n useEffect(() => {\n if (lastSignal?.type === 'question_stats') {\n setAnswersCount(lastSignal.answersCount);\n setViews(lastSignal.views);\n }\n }, [lastSignal]);\n\n const onAnswerPost = (answer: AnswerResponse) => {\n setNewAnswers(newAnswers.concat([answer]));\n };\n\n const getDescription = (q: QuestionResponse) => {\n return (\n <span>\n Asked{' '}\n <Box fontWeight=\"fontWeightMedium\" display=\"inline\" sx={{ mr: 2 }}>\n <RelativeTimeWithTooltip value={q.created} />\n </Box>\n {q.updated && (\n <React.Fragment>\n Updated{' '}\n <Box fontWeight=\"fontWeightMedium\" display=\"inline\" sx={{ mr: 2 }}>\n <RelativeTimeWithTooltip value={q.updated} /> by{' '}\n <UpdatedByLink entity={q} />\n </Box>\n </React.Fragment>\n )}\n Viewed{' '}\n <Box fontWeight=\"fontWeightMedium\" display=\"inline\">\n {views} times\n </Box>\n </span>\n );\n };\n\n if (loading) {\n return <Skeleton variant=\"rect\" height={200} />;\n }\n\n if (error || question === undefined) {\n return (\n <WarningPanel severity=\"error\" title=\"Could not load question.\">\n {error?.message}\n </WarningPanel>\n );\n }\n\n const sortAnswers = (a: Answer, b: Answer) => {\n if (answerSort === 'default') {\n return 1;\n }\n\n const parts = answerSort.split('_');\n const field = parts[0];\n const order = parts[1];\n\n let ret = -1;\n switch (field) {\n case 'created':\n ret = a.created > b.created ? -1 : 1;\n break;\n case 'score':\n ret = a.score > b.score ? -1 : 1;\n break;\n case 'author':\n ret = a.author > b.author ? -1 : 1;\n break;\n case 'comments':\n ret = (a.comments?.length ?? 0) > (b.comments?.length ?? 0) ? -1 : 1;\n break;\n case 'updated':\n ret = (a.updated ?? a.created) > (b.updated ?? b.created) ? -1 : 1;\n break;\n default:\n return 1;\n }\n\n if (order === 'desc') {\n ret *= -1;\n }\n return ret;\n };\n\n const allAnswers = (question.answers ?? []).concat(newAnswers);\n return (\n <Content>\n <Container maxWidth=\"lg\">\n <ContentHeader\n title={question.title}\n // @ts-ignore\n description={getDescription(question)}\n >\n <BackToQuestionsButton\n entityPage={searchParams.get('entityPage') === 'true'}\n />\n <AskQuestionButton />\n </ContentHeader>\n <QuestionCard question={question} />\n <Box sx={{ mt: 3, mb: 2 }}>\n <Grid container justifyContent=\"space-between\" alignItems=\"center\">\n <Grid item>\n <Typography variant=\"h6\">\n {answersCount + newAnswers.length} answers\n </Typography>\n </Grid>\n {allAnswers.length > 1 && (\n <Grid item>\n <FormControl>\n <Select\n native\n label=\"Sort answers\"\n value={answerSort}\n onChange={val => setAnswerSort(val.target.value as string)}\n inputProps={{\n name: 'sortAnswers',\n id: 'sort-answers',\n }}\n >\n <option value=\"default\">Default</option>\n <option value=\"created_desc\">Created (desc)</option>\n <option value=\"created_asc\">Created (asc)</option>\n <option value=\"score_desc\">Score (desc)</option>\n <option value=\"score_asc\">Score (asc)</option>\n <option value=\"comments_desc\">Comments (desc)</option>\n <option value=\"comments_asc\">Comments (asc)</option>\n <option value=\"author_desc\">Author (desc)</option>\n <option value=\"author_asc\">Author (asc)</option>\n <option value=\"updated_desc\">Updated (desc)</option>\n <option value=\"updated_asc\">Updated (asc)</option>\n </Select>\n </FormControl>\n </Grid>\n )}\n </Grid>\n </Box>\n {allAnswers.sort(sortAnswers).map(a => {\n return (\n <React.Fragment key={a.id}>\n <Divider className={styles.questionDivider} />\n <Box key={a.id} sx={{ mb: 1 }}>\n <AnswerCard answer={a} question={question} />\n </Box>\n </React.Fragment>\n );\n })}\n <Divider className={styles.questionDivider} />\n <AnswerForm question={question} onPost={onAnswerPost} />\n </Container>\n </Content>\n );\n};\n"],"names":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"QuestionPage.esm.js","sources":["../../../src/components/QuestionPage/QuestionPage.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport {\n Box,\n Container,\n Divider,\n FormControl,\n Grid,\n Select,\n Typography,\n} from '@material-ui/core';\nimport {\n Content,\n ContentHeader,\n WarningPanel,\n} from '@backstage/core-components';\nimport { useParams, useSearchParams } from 'react-router-dom';\nimport { useQetaApi, useStyles } from '../../utils/hooks';\nimport { QuestionCard } from './QuestionCard';\nimport {\n Answer,\n AnswerResponse,\n QetaSignal,\n QuestionResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { AnswerForm } from './AnswerForm';\nimport { AnswerCard } from './AnswerCard';\nimport { Skeleton } from '@material-ui/lab';\nimport { AskQuestionButton } from '../Buttons/AskQuestionButton';\nimport { BackToQuestionsButton } from '../Buttons/BackToQuestionsButton';\nimport { RelativeTimeWithTooltip } from '../RelativeTimeWithTooltip/RelativeTimeWithTooltip';\nimport { UpdatedByLink } from '../Links/Links';\nimport { useSignal } from '@backstage/plugin-signals-react';\n\nexport const QuestionPage = () => {\n const { id } = useParams();\n const styles = useStyles();\n const [newAnswers, setNewAnswers] = React.useState<AnswerResponse[]>([]);\n const [answerSort, setAnswerSort] = React.useState<string>('default');\n const [searchParams] = useSearchParams();\n\n const [answersCount, setAnswersCount] = useState(0);\n const [views, setViews] = useState(0);\n\n const { lastSignal } = useSignal<QetaSignal>(`qeta:question_${id}`);\n\n const {\n value: question,\n loading,\n error,\n } = useQetaApi(api => api.getQuestion(id), [id]);\n\n useEffect(() => {\n if (question) {\n setAnswersCount(question.answersCount);\n setViews(question.views);\n }\n }, [question]);\n\n useEffect(() => {\n if (lastSignal?.type === 'question_stats') {\n setAnswersCount(lastSignal.answersCount);\n setViews(lastSignal.views);\n }\n }, [lastSignal]);\n\n const onAnswerPost = (answer: AnswerResponse) => {\n setNewAnswers(newAnswers.concat([answer]));\n };\n\n const getDescription = (q: QuestionResponse) => {\n return (\n <span>\n Asked{' '}\n <Box fontWeight=\"fontWeightMedium\" display=\"inline\" sx={{ mr: 2 }}>\n <RelativeTimeWithTooltip value={q.created} />\n </Box>\n {q.updated && (\n <React.Fragment>\n Updated{' '}\n <Box fontWeight=\"fontWeightMedium\" display=\"inline\" sx={{ mr: 2 }}>\n <RelativeTimeWithTooltip value={q.updated} /> by{' '}\n <UpdatedByLink entity={q} />\n </Box>\n </React.Fragment>\n )}\n Viewed{' '}\n <Box fontWeight=\"fontWeightMedium\" display=\"inline\">\n {views} times\n </Box>\n </span>\n );\n };\n\n if (loading) {\n return <Skeleton variant=\"rect\" height={200} />;\n }\n\n if (error || question === undefined) {\n return (\n <WarningPanel severity=\"error\" title=\"Could not load question.\">\n {error?.message}\n </WarningPanel>\n );\n }\n\n const sortAnswers = (a: Answer, b: Answer) => {\n if (answerSort === 'default') {\n return 1;\n }\n\n const parts = answerSort.split('_');\n const field = parts[0];\n const order = parts[1];\n\n let ret = -1;\n switch (field) {\n case 'created':\n ret = a.created > b.created ? -1 : 1;\n break;\n case 'score':\n ret = a.score > b.score ? -1 : 1;\n break;\n case 'author':\n ret = a.author > b.author ? -1 : 1;\n break;\n case 'comments':\n ret = (a.comments?.length ?? 0) > (b.comments?.length ?? 0) ? -1 : 1;\n break;\n case 'updated':\n ret = (a.updated ?? a.created) > (b.updated ?? b.created) ? -1 : 1;\n break;\n default:\n return 1;\n }\n\n if (order === 'desc') {\n ret *= -1;\n }\n return ret;\n };\n\n const allAnswers = (question.answers ?? []).concat(newAnswers);\n return (\n <Content>\n <Container maxWidth=\"lg\">\n <ContentHeader\n title={question.title}\n // @ts-ignore\n description={getDescription(question)}\n >\n <BackToQuestionsButton\n entityPage={searchParams.get('entityPage') === 'true'}\n />\n <AskQuestionButton />\n </ContentHeader>\n <QuestionCard question={question} />\n <Box sx={{ mt: 3, mb: 2 }}>\n <Grid container justifyContent=\"space-between\" alignItems=\"center\">\n <Grid item>\n <Typography variant=\"h6\">\n {answersCount + newAnswers.length} answers\n </Typography>\n </Grid>\n {allAnswers.length > 1 && (\n <Grid item>\n <FormControl>\n <Select\n native\n label=\"Sort answers\"\n value={answerSort}\n onChange={val => setAnswerSort(val.target.value as string)}\n inputProps={{\n name: 'sortAnswers',\n id: 'sort-answers',\n }}\n >\n <option value=\"default\">Default</option>\n <option value=\"created_desc\">Created (desc)</option>\n <option value=\"created_asc\">Created (asc)</option>\n <option value=\"score_desc\">Score (desc)</option>\n <option value=\"score_asc\">Score (asc)</option>\n <option value=\"comments_desc\">Comments (desc)</option>\n <option value=\"comments_asc\">Comments (asc)</option>\n <option value=\"author_desc\">Author (desc)</option>\n <option value=\"author_asc\">Author (asc)</option>\n <option value=\"updated_desc\">Updated (desc)</option>\n <option value=\"updated_asc\">Updated (asc)</option>\n </Select>\n </FormControl>\n </Grid>\n )}\n </Grid>\n </Box>\n {allAnswers.sort(sortAnswers).map(a => {\n return (\n <React.Fragment key={a.id}>\n <Divider className={styles.questionDivider} />\n <Box key={a.id} sx={{ mb: 1 }}>\n <AnswerCard answer={a} question={question} />\n </Box>\n </React.Fragment>\n );\n })}\n <Divider className={styles.questionDivider} />\n <AnswerForm question={question} onPost={onAnswerPost} />\n </Container>\n </Content>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -18,11 +18,10 @@ const useStyles = makeStyles(
18
18
  })
19
19
  );
20
20
  const VoteButtons = (props) => {
21
- var _a, _b, _c, _d, _e, _f, _g;
22
21
  const [entity, setEntity] = React.useState(
23
22
  props.entity
24
23
  );
25
- const [ownVote, setOwnVote] = React.useState((_a = props.entity.ownVote) != null ? _a : 0);
24
+ const [ownVote, setOwnVote] = React.useState(props.entity.ownVote ?? 0);
26
25
  const [correctAnswer, setCorrectAnswer] = useState(
27
26
  "questionId" in props.entity ? props.entity.correct : false
28
27
  );
@@ -30,7 +29,7 @@ const VoteButtons = (props) => {
30
29
  const analytics = useAnalytics();
31
30
  const qetaApi = useApi(qetaApiRef);
32
31
  const isQuestion = "title" in entity;
33
- const own = (_b = props.entity.own) != null ? _b : false;
32
+ const own = props.entity.own ?? false;
34
33
  const classes = useStyles();
35
34
  const { lastSignal } = useSignal(
36
35
  isQuestion ? `qeta:question_${entity.id}` : `qeta:answer_${entity.id}`
@@ -41,7 +40,7 @@ const VoteButtons = (props) => {
41
40
  }
42
41
  }, [entity]);
43
42
  useEffect(() => {
44
- if ((lastSignal == null ? void 0 : lastSignal.type) === "question_stats" || (lastSignal == null ? void 0 : lastSignal.type) === "answer_stats") {
43
+ if (lastSignal?.type === "question_stats" || lastSignal?.type === "answer_stats") {
45
44
  setCorrectAnswer(lastSignal.correctAnswer);
46
45
  setScore(lastSignal.score);
47
46
  }
@@ -77,7 +76,7 @@ const VoteButtons = (props) => {
77
76
  }
78
77
  };
79
78
  let correctTooltip = correctAnswer ? "Mark answer as incorrect" : "Mark answer as correct";
80
- if (!((_c = props.question) == null ? void 0 : _c.own)) {
79
+ if (!props.question?.own) {
81
80
  correctTooltip = correctAnswer ? "This answer has been marked as correct" : "";
82
81
  }
83
82
  let voteUpTooltip = isQuestion ? "This question is good" : "This answer is good";
@@ -126,12 +125,12 @@ const VoteButtons = (props) => {
126
125
  onClick: voteDown
127
126
  },
128
127
  /* @__PURE__ */ React.createElement(ArrowDownward, null)
129
- ))), "correct" in props.entity && (((_d = props.question) == null ? void 0 : _d.own) || ((_e = props.question) == null ? void 0 : _e.canEdit) || correctAnswer) && /* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(Tooltip, { title: correctTooltip }, /* @__PURE__ */ React.createElement("span", null, /* @__PURE__ */ React.createElement(
128
+ ))), "correct" in props.entity && (props.question?.own || props.question?.canEdit || correctAnswer) && /* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(Tooltip, { title: correctTooltip }, /* @__PURE__ */ React.createElement("span", null, /* @__PURE__ */ React.createElement(
130
129
  IconButton,
131
130
  {
132
131
  "aria-label": "mark correct",
133
132
  size: "small",
134
- onClick: ((_f = props.question) == null ? void 0 : _f.own) || ((_g = props.question) == null ? void 0 : _g.canEdit) ? toggleCorrectAnswer : void 0
133
+ onClick: props.question?.own || props.question?.canEdit ? toggleCorrectAnswer : void 0
135
134
  },
136
135
  /* @__PURE__ */ React.createElement(
137
136
  Check,
@@ -1 +1 @@
1
- {"version":3,"file":"VoteButtons.esm.js","sources":["../../../src/components/QuestionPage/VoteButtons.tsx"],"sourcesContent":["import {\n AnswerResponse,\n QetaSignal,\n QuestionResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport {\n Box,\n createStyles,\n IconButton,\n makeStyles,\n Theme,\n Tooltip,\n Typography,\n} from '@material-ui/core';\nimport ArrowDownward from '@material-ui/icons/ArrowDownward';\nimport ArrowUpward from '@material-ui/icons/ArrowUpward';\nimport Check from '@material-ui/icons/Check';\nimport React, { useEffect, useState } from 'react';\nimport { useAnalytics, useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../../api';\nimport { useSignal } from '@backstage/plugin-signals-react';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n qetaCorrectAnswerSelected: {\n color: theme.palette.success.main,\n },\n qetaCorrectAnswer: {\n color: theme.palette.grey[500],\n },\n }),\n);\n\nexport const VoteButtons = (props: {\n entity: QuestionResponse | AnswerResponse;\n question?: QuestionResponse;\n}) => {\n const [entity, setEntity] = React.useState<QuestionResponse | AnswerResponse>(\n props.entity,\n );\n const [ownVote, setOwnVote] = React.useState(props.entity.ownVote ?? 0);\n const [correctAnswer, setCorrectAnswer] = useState(\n 'questionId' in props.entity ? props.entity.correct : false,\n );\n const [score, setScore] = useState(entity.score);\n const analytics = useAnalytics();\n const qetaApi = useApi(qetaApiRef);\n\n const isQuestion = 'title' in entity;\n const own = props.entity.own ?? false;\n const classes = useStyles();\n\n const { lastSignal } = useSignal<QetaSignal>(\n isQuestion ? `qeta:question_${entity.id}` : `qeta:answer_${entity.id}`,\n );\n\n useEffect(() => {\n if (entity) {\n setScore(entity.score);\n }\n }, [entity]);\n\n useEffect(() => {\n if (\n lastSignal?.type === 'question_stats' ||\n lastSignal?.type === 'answer_stats'\n ) {\n setCorrectAnswer(lastSignal.correctAnswer);\n setScore(lastSignal.score);\n }\n }, [lastSignal]);\n\n const voteUp = () => {\n if (isQuestion) {\n qetaApi.voteQuestionUp(entity.id).then(response => {\n setOwnVote(1);\n analytics.captureEvent('vote', 'question', { value: 1 });\n setEntity(response);\n });\n } else if ('questionId' in entity) {\n qetaApi.voteAnswerUp(entity.questionId, entity.id).then(response => {\n setOwnVote(1);\n analytics.captureEvent('vote', 'answer', { value: 1 });\n setEntity(response);\n });\n }\n };\n\n const voteDown = () => {\n if (isQuestion) {\n qetaApi.voteQuestionDown(entity.id).then(response => {\n setOwnVote(-1);\n analytics.captureEvent('vote', 'question', { value: -1 });\n setEntity(response);\n });\n } else if ('questionId' in entity) {\n qetaApi.voteAnswerDown(entity.questionId, entity.id).then(response => {\n setOwnVote(-1);\n analytics.captureEvent('vote', 'answer', { value: -1 });\n setEntity(response);\n });\n }\n };\n\n let correctTooltip = correctAnswer\n ? 'Mark answer as incorrect'\n : 'Mark answer as correct';\n if (!props.question?.own) {\n correctTooltip = correctAnswer\n ? 'This answer has been marked as correct'\n : '';\n }\n\n let voteUpTooltip = isQuestion\n ? 'This question is good'\n : 'This answer is good';\n if (own) {\n voteUpTooltip = isQuestion\n ? 'You cannot vote your own question'\n : 'You cannot vote your own answer';\n }\n\n let voteDownTooltip = isQuestion\n ? 'This question is not good'\n : 'This answer is not good';\n if (own) {\n voteDownTooltip = voteUpTooltip;\n }\n\n const toggleCorrectAnswer = () => {\n if (!('questionId' in entity)) {\n return;\n }\n if (correctAnswer) {\n qetaApi\n .markAnswerIncorrect(entity.questionId, entity.id)\n .then(response => {\n if (response) {\n setCorrectAnswer(false);\n }\n });\n } else {\n qetaApi.markAnswerCorrect(entity.questionId, entity.id).then(response => {\n setCorrectAnswer(response);\n });\n }\n };\n\n return (\n <React.Fragment>\n <Tooltip title={voteUpTooltip}>\n <span>\n <IconButton\n aria-label=\"vote up\"\n color={ownVote > 0 ? 'primary' : 'default'}\n className={ownVote > 0 ? 'qetaVoteUpSelected' : 'qetaVoteUp'}\n disabled={own}\n size=\"small\"\n onClick={voteUp}\n >\n <ArrowUpward />\n </IconButton>\n </span>\n </Tooltip>\n <Typography variant=\"h6\">{score}</Typography>\n <Tooltip title={voteDownTooltip}>\n <span>\n <IconButton\n aria-label=\"vote down\"\n color={ownVote < 0 ? 'primary' : 'default'}\n className={ownVote < 0 ? 'qetaVoteDownSelected' : 'qetaVoteDown'}\n disabled={own}\n size=\"small\"\n onClick={voteDown}\n >\n <ArrowDownward />\n </IconButton>\n </span>\n </Tooltip>\n {'correct' in props.entity &&\n (props.question?.own || props.question?.canEdit || correctAnswer) && (\n <Box>\n <Tooltip title={correctTooltip}>\n <span>\n <IconButton\n aria-label=\"mark correct\"\n size=\"small\"\n onClick={\n props.question?.own || props.question?.canEdit\n ? toggleCorrectAnswer\n : undefined\n }\n >\n <Check\n className={\n correctAnswer\n ? classes.qetaCorrectAnswerSelected\n : classes.qetaCorrectAnswer\n }\n />\n </IconButton>\n </span>\n </Tooltip>\n </Box>\n )}\n </React.Fragment>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VoteButtons.esm.js","sources":["../../../src/components/QuestionPage/VoteButtons.tsx"],"sourcesContent":["import {\n AnswerResponse,\n QetaSignal,\n QuestionResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport {\n Box,\n createStyles,\n IconButton,\n makeStyles,\n Theme,\n Tooltip,\n Typography,\n} from '@material-ui/core';\nimport ArrowDownward from '@material-ui/icons/ArrowDownward';\nimport ArrowUpward from '@material-ui/icons/ArrowUpward';\nimport Check from '@material-ui/icons/Check';\nimport React, { useEffect, useState } from 'react';\nimport { useAnalytics, useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../../api';\nimport { useSignal } from '@backstage/plugin-signals-react';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n qetaCorrectAnswerSelected: {\n color: theme.palette.success.main,\n },\n qetaCorrectAnswer: {\n color: theme.palette.grey[500],\n },\n }),\n);\n\nexport const VoteButtons = (props: {\n entity: QuestionResponse | AnswerResponse;\n question?: QuestionResponse;\n}) => {\n const [entity, setEntity] = React.useState<QuestionResponse | AnswerResponse>(\n props.entity,\n );\n const [ownVote, setOwnVote] = React.useState(props.entity.ownVote ?? 0);\n const [correctAnswer, setCorrectAnswer] = useState(\n 'questionId' in props.entity ? props.entity.correct : false,\n );\n const [score, setScore] = useState(entity.score);\n const analytics = useAnalytics();\n const qetaApi = useApi(qetaApiRef);\n\n const isQuestion = 'title' in entity;\n const own = props.entity.own ?? false;\n const classes = useStyles();\n\n const { lastSignal } = useSignal<QetaSignal>(\n isQuestion ? `qeta:question_${entity.id}` : `qeta:answer_${entity.id}`,\n );\n\n useEffect(() => {\n if (entity) {\n setScore(entity.score);\n }\n }, [entity]);\n\n useEffect(() => {\n if (\n lastSignal?.type === 'question_stats' ||\n lastSignal?.type === 'answer_stats'\n ) {\n setCorrectAnswer(lastSignal.correctAnswer);\n setScore(lastSignal.score);\n }\n }, [lastSignal]);\n\n const voteUp = () => {\n if (isQuestion) {\n qetaApi.voteQuestionUp(entity.id).then(response => {\n setOwnVote(1);\n analytics.captureEvent('vote', 'question', { value: 1 });\n setEntity(response);\n });\n } else if ('questionId' in entity) {\n qetaApi.voteAnswerUp(entity.questionId, entity.id).then(response => {\n setOwnVote(1);\n analytics.captureEvent('vote', 'answer', { value: 1 });\n setEntity(response);\n });\n }\n };\n\n const voteDown = () => {\n if (isQuestion) {\n qetaApi.voteQuestionDown(entity.id).then(response => {\n setOwnVote(-1);\n analytics.captureEvent('vote', 'question', { value: -1 });\n setEntity(response);\n });\n } else if ('questionId' in entity) {\n qetaApi.voteAnswerDown(entity.questionId, entity.id).then(response => {\n setOwnVote(-1);\n analytics.captureEvent('vote', 'answer', { value: -1 });\n setEntity(response);\n });\n }\n };\n\n let correctTooltip = correctAnswer\n ? 'Mark answer as incorrect'\n : 'Mark answer as correct';\n if (!props.question?.own) {\n correctTooltip = correctAnswer\n ? 'This answer has been marked as correct'\n : '';\n }\n\n let voteUpTooltip = isQuestion\n ? 'This question is good'\n : 'This answer is good';\n if (own) {\n voteUpTooltip = isQuestion\n ? 'You cannot vote your own question'\n : 'You cannot vote your own answer';\n }\n\n let voteDownTooltip = isQuestion\n ? 'This question is not good'\n : 'This answer is not good';\n if (own) {\n voteDownTooltip = voteUpTooltip;\n }\n\n const toggleCorrectAnswer = () => {\n if (!('questionId' in entity)) {\n return;\n }\n if (correctAnswer) {\n qetaApi\n .markAnswerIncorrect(entity.questionId, entity.id)\n .then(response => {\n if (response) {\n setCorrectAnswer(false);\n }\n });\n } else {\n qetaApi.markAnswerCorrect(entity.questionId, entity.id).then(response => {\n setCorrectAnswer(response);\n });\n }\n };\n\n return (\n <React.Fragment>\n <Tooltip title={voteUpTooltip}>\n <span>\n <IconButton\n aria-label=\"vote up\"\n color={ownVote > 0 ? 'primary' : 'default'}\n className={ownVote > 0 ? 'qetaVoteUpSelected' : 'qetaVoteUp'}\n disabled={own}\n size=\"small\"\n onClick={voteUp}\n >\n <ArrowUpward />\n </IconButton>\n </span>\n </Tooltip>\n <Typography variant=\"h6\">{score}</Typography>\n <Tooltip title={voteDownTooltip}>\n <span>\n <IconButton\n aria-label=\"vote down\"\n color={ownVote < 0 ? 'primary' : 'default'}\n className={ownVote < 0 ? 'qetaVoteDownSelected' : 'qetaVoteDown'}\n disabled={own}\n size=\"small\"\n onClick={voteDown}\n >\n <ArrowDownward />\n </IconButton>\n </span>\n </Tooltip>\n {'correct' in props.entity &&\n (props.question?.own || props.question?.canEdit || correctAnswer) && (\n <Box>\n <Tooltip title={correctTooltip}>\n <span>\n <IconButton\n aria-label=\"mark correct\"\n size=\"small\"\n onClick={\n props.question?.own || props.question?.canEdit\n ? toggleCorrectAnswer\n : undefined\n }\n >\n <Check\n className={\n correctAnswer\n ? classes.qetaCorrectAnswerSelected\n : classes.qetaCorrectAnswer\n }\n />\n </IconButton>\n </span>\n </Tooltip>\n </Box>\n )}\n </React.Fragment>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAsBA,MAAM,SAAY,GAAA,UAAA;AAAA,EAAW,CAAC,UAC5B,YAAa,CAAA;AAAA,IACX,yBAA2B,EAAA;AAAA,MACzB,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA;AAAA,KAC/B;AAAA,IACA,iBAAmB,EAAA;AAAA,MACjB,KAAO,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,GAAG,CAAA;AAAA,KAC/B;AAAA,GACD,CAAA;AACH,CAAA,CAAA;AAEa,MAAA,WAAA,GAAc,CAAC,KAGtB,KAAA;AACJ,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,KAAM,CAAA,QAAA;AAAA,IAChC,KAAM,CAAA,MAAA;AAAA,GACR,CAAA;AACA,EAAM,MAAA,CAAC,SAAS,UAAU,CAAA,GAAI,MAAM,QAAS,CAAA,KAAA,CAAM,MAAO,CAAA,OAAA,IAAW,CAAC,CAAA,CAAA;AACtE,EAAM,MAAA,CAAC,aAAe,EAAA,gBAAgB,CAAI,GAAA,QAAA;AAAA,IACxC,YAAgB,IAAA,KAAA,CAAM,MAAS,GAAA,KAAA,CAAM,OAAO,OAAU,GAAA,KAAA;AAAA,GACxD,CAAA;AACA,EAAA,MAAM,CAAC,KAAO,EAAA,QAAQ,CAAI,GAAA,QAAA,CAAS,OAAO,KAAK,CAAA,CAAA;AAC/C,EAAA,MAAM,YAAY,YAAa,EAAA,CAAA;AAC/B,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA,CAAA;AAEjC,EAAA,MAAM,aAAa,OAAW,IAAA,MAAA,CAAA;AAC9B,EAAM,MAAA,GAAA,GAAM,KAAM,CAAA,MAAA,CAAO,GAAO,IAAA,KAAA,CAAA;AAChC,EAAA,MAAM,UAAU,SAAU,EAAA,CAAA;AAE1B,EAAM,MAAA,EAAE,YAAe,GAAA,SAAA;AAAA,IACrB,aAAa,CAAiB,cAAA,EAAA,MAAA,CAAO,EAAE,CAAK,CAAA,GAAA,CAAA,YAAA,EAAe,OAAO,EAAE,CAAA,CAAA;AAAA,GACtE,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,QAAA,CAAS,OAAO,KAAK,CAAA,CAAA;AAAA,KACvB;AAAA,GACF,EAAG,CAAC,MAAM,CAAC,CAAA,CAAA;AAEX,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IACE,UAAY,EAAA,IAAA,KAAS,gBACrB,IAAA,UAAA,EAAY,SAAS,cACrB,EAAA;AACA,MAAA,gBAAA,CAAiB,WAAW,aAAa,CAAA,CAAA;AACzC,MAAA,QAAA,CAAS,WAAW,KAAK,CAAA,CAAA;AAAA,KAC3B;AAAA,GACF,EAAG,CAAC,UAAU,CAAC,CAAA,CAAA;AAEf,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,IAAI,UAAY,EAAA;AACd,MAAA,OAAA,CAAQ,cAAe,CAAA,MAAA,CAAO,EAAE,CAAA,CAAE,KAAK,CAAY,QAAA,KAAA;AACjD,QAAA,UAAA,CAAW,CAAC,CAAA,CAAA;AACZ,QAAA,SAAA,CAAU,aAAa,MAAQ,EAAA,UAAA,EAAY,EAAE,KAAA,EAAO,GAAG,CAAA,CAAA;AACvD,QAAA,SAAA,CAAU,QAAQ,CAAA,CAAA;AAAA,OACnB,CAAA,CAAA;AAAA,KACH,MAAA,IAAW,gBAAgB,MAAQ,EAAA;AACjC,MAAA,OAAA,CAAQ,aAAa,MAAO,CAAA,UAAA,EAAY,OAAO,EAAE,CAAA,CAAE,KAAK,CAAY,QAAA,KAAA;AAClE,QAAA,UAAA,CAAW,CAAC,CAAA,CAAA;AACZ,QAAA,SAAA,CAAU,aAAa,MAAQ,EAAA,QAAA,EAAU,EAAE,KAAA,EAAO,GAAG,CAAA,CAAA;AACrD,QAAA,SAAA,CAAU,QAAQ,CAAA,CAAA;AAAA,OACnB,CAAA,CAAA;AAAA,KACH;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,IAAI,UAAY,EAAA;AACd,MAAA,OAAA,CAAQ,gBAAiB,CAAA,MAAA,CAAO,EAAE,CAAA,CAAE,KAAK,CAAY,QAAA,KAAA;AACnD,QAAA,UAAA,CAAW,CAAE,CAAA,CAAA,CAAA;AACb,QAAA,SAAA,CAAU,aAAa,MAAQ,EAAA,UAAA,EAAY,EAAE,KAAA,EAAO,IAAI,CAAA,CAAA;AACxD,QAAA,SAAA,CAAU,QAAQ,CAAA,CAAA;AAAA,OACnB,CAAA,CAAA;AAAA,KACH,MAAA,IAAW,gBAAgB,MAAQ,EAAA;AACjC,MAAA,OAAA,CAAQ,eAAe,MAAO,CAAA,UAAA,EAAY,OAAO,EAAE,CAAA,CAAE,KAAK,CAAY,QAAA,KAAA;AACpE,QAAA,UAAA,CAAW,CAAE,CAAA,CAAA,CAAA;AACb,QAAA,SAAA,CAAU,aAAa,MAAQ,EAAA,QAAA,EAAU,EAAE,KAAA,EAAO,IAAI,CAAA,CAAA;AACtD,QAAA,SAAA,CAAU,QAAQ,CAAA,CAAA;AAAA,OACnB,CAAA,CAAA;AAAA,KACH;AAAA,GACF,CAAA;AAEA,EAAI,IAAA,cAAA,GAAiB,gBACjB,0BACA,GAAA,wBAAA,CAAA;AACJ,EAAI,IAAA,CAAC,KAAM,CAAA,QAAA,EAAU,GAAK,EAAA;AACxB,IAAA,cAAA,GAAiB,gBACb,wCACA,GAAA,EAAA,CAAA;AAAA,GACN;AAEA,EAAI,IAAA,aAAA,GAAgB,aAChB,uBACA,GAAA,qBAAA,CAAA;AACJ,EAAA,IAAI,GAAK,EAAA;AACP,IAAA,aAAA,GAAgB,aACZ,mCACA,GAAA,iCAAA,CAAA;AAAA,GACN;AAEA,EAAI,IAAA,eAAA,GAAkB,aAClB,2BACA,GAAA,yBAAA,CAAA;AACJ,EAAA,IAAI,GAAK,EAAA;AACP,IAAkB,eAAA,GAAA,aAAA,CAAA;AAAA,GACpB;AAEA,EAAA,MAAM,sBAAsB,MAAM;AAChC,IAAI,IAAA,EAAE,gBAAgB,MAAS,CAAA,EAAA;AAC7B,MAAA,OAAA;AAAA,KACF;AACA,IAAA,IAAI,aAAe,EAAA;AACjB,MAAA,OAAA,CACG,oBAAoB,MAAO,CAAA,UAAA,EAAY,OAAO,EAAE,CAAA,CAChD,KAAK,CAAY,QAAA,KAAA;AAChB,QAAA,IAAI,QAAU,EAAA;AACZ,UAAA,gBAAA,CAAiB,KAAK,CAAA,CAAA;AAAA,SACxB;AAAA,OACD,CAAA,CAAA;AAAA,KACE,MAAA;AACL,MAAA,OAAA,CAAQ,kBAAkB,MAAO,CAAA,UAAA,EAAY,OAAO,EAAE,CAAA,CAAE,KAAK,CAAY,QAAA,KAAA;AACvE,QAAA,gBAAA,CAAiB,QAAQ,CAAA,CAAA;AAAA,OAC1B,CAAA,CAAA;AAAA,KACH;AAAA,GACF,CAAA;AAEA,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,MAAM,QAAN,EAAA,IAAA,sCACE,OAAQ,EAAA,EAAA,KAAA,EAAO,aACd,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,MACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,YAAW,EAAA,SAAA;AAAA,MACX,KAAA,EAAO,OAAU,GAAA,CAAA,GAAI,SAAY,GAAA,SAAA;AAAA,MACjC,SAAA,EAAW,OAAU,GAAA,CAAA,GAAI,oBAAuB,GAAA,YAAA;AAAA,MAChD,QAAU,EAAA,GAAA;AAAA,MACV,IAAK,EAAA,OAAA;AAAA,MACL,OAAS,EAAA,MAAA;AAAA,KAAA;AAAA,wCAER,WAAY,EAAA,IAAA,CAAA;AAAA,GAEjB,CACF,CACA,kBAAA,KAAA,CAAA,aAAA,CAAC,cAAW,OAAQ,EAAA,IAAA,EAAA,EAAM,KAAM,CAAA,kBAC/B,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,eAAA,EAAA,sCACb,MACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,YAAW,EAAA,WAAA;AAAA,MACX,KAAA,EAAO,OAAU,GAAA,CAAA,GAAI,SAAY,GAAA,SAAA;AAAA,MACjC,SAAA,EAAW,OAAU,GAAA,CAAA,GAAI,sBAAyB,GAAA,cAAA;AAAA,MAClD,QAAU,EAAA,GAAA;AAAA,MACV,IAAK,EAAA,OAAA;AAAA,MACL,OAAS,EAAA,QAAA;AAAA,KAAA;AAAA,wCAER,aAAc,EAAA,IAAA,CAAA;AAAA,GAEnB,CACF,CACC,EAAA,SAAA,IAAa,MAAM,MACjB,KAAA,KAAA,CAAM,UAAU,GAAO,IAAA,KAAA,CAAM,UAAU,OAAW,IAAA,aAAA,CAAA,wCAChD,GACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,WAAQ,KAAO,EAAA,cAAA,EAAA,sCACb,MACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,YAAW,EAAA,cAAA;AAAA,MACX,IAAK,EAAA,OAAA;AAAA,MACL,SACE,KAAM,CAAA,QAAA,EAAU,OAAO,KAAM,CAAA,QAAA,EAAU,UACnC,mBACA,GAAA,KAAA,CAAA;AAAA,KAAA;AAAA,oBAGN,KAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SACE,EAAA,aAAA,GACI,OAAQ,CAAA,yBAAA,GACR,OAAQ,CAAA,iBAAA;AAAA,OAAA;AAAA,KAEhB;AAAA,GAEJ,CACF,CACF,CAEN,CAAA,CAAA;AAEJ;;;;"}
@@ -6,13 +6,12 @@ import RefreshIcon from '@material-ui/icons/Refresh';
6
6
  import { QuestionTableRow } from './QuestionTableRow.esm.js';
7
7
 
8
8
  const QuestionsTable = (props) => {
9
- var _a, _b;
10
9
  const [page, setPage] = React.useState(1);
11
10
  const [questionsPerPage, setQuestionsPerPage] = React.useState(
12
- (_a = props.rowsPerPage) != null ? _a : 10
11
+ props.rowsPerPage ?? 10
13
12
  );
14
13
  const [quickFilter, setQuickFilter] = React.useState(
15
- (_b = props.quickFilter) != null ? _b : "latest"
14
+ props.quickFilter ?? "latest"
16
15
  );
17
16
  const [refresh, setRefresh] = React.useState(0);
18
17
  const [filters, setFilters] = React.useState({
@@ -70,7 +69,7 @@ const QuestionsTable = (props) => {
70
69
  setPage(1);
71
70
  };
72
71
  if (error || response === void 0) {
73
- return /* @__PURE__ */ React.createElement(WarningPanel, { severity: "error", title: "Could not load questions." }, error == null ? void 0 : error.message);
72
+ return /* @__PURE__ */ React.createElement(WarningPanel, { severity: "error", title: "Could not load questions." }, error?.message);
74
73
  }
75
74
  return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
76
75
  Grid,
@@ -1 +1 @@
1
- {"version":3,"file":"QuestionsTable.esm.js","sources":["../../../src/components/QuestionTableCard/QuestionsTable.tsx"],"sourcesContent":["import React from 'react';\nimport { useQetaApi } from '../../utils/hooks';\nimport { LinkButton, Progress, WarningPanel } from '@backstage/core-components';\nimport {\n Button,\n ButtonGroup,\n Grid,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TablePagination,\n TableRow,\n Typography,\n} from '@material-ui/core';\nimport RefreshIcon from '@material-ui/icons/Refresh';\nimport { QuestionTableRow } from './QuestionTableRow';\n\ntype QuickFilterType = 'latest' | 'favorites' | 'most_viewed';\n\nexport const QuestionsTable = (props: {\n hideTitle?: boolean;\n rowsPerPage?: number;\n quickFilter?: QuickFilterType;\n}) => {\n const [page, setPage] = React.useState(1);\n const [questionsPerPage, setQuestionsPerPage] = React.useState(\n props.rowsPerPage ?? 10,\n );\n const [quickFilter, setQuickFilter] = React.useState(\n props.quickFilter ?? 'latest',\n );\n const [refresh, setRefresh] = React.useState(0);\n const [filters, setFilters] = React.useState({\n order: 'desc',\n orderBy: 'created',\n noAnswers: 'false',\n noCorrectAnswer: 'false',\n noVotes: 'false',\n searchQuery: '',\n favorite: false,\n });\n const {\n value: response,\n loading,\n error,\n } = useQetaApi(\n api =>\n api.getQuestions({\n limit: questionsPerPage,\n offset: (page - 1) * questionsPerPage,\n includeEntities: true,\n ...filters,\n }),\n [page, filters, questionsPerPage, refresh],\n );\n\n const handleQuickFilterChange = (filter: QuickFilterType) => {\n setQuickFilter(filter);\n if (filter === 'latest') {\n setFilters({\n ...filters,\n order: 'desc',\n orderBy: 'created',\n favorite: false,\n });\n } else if (filter === 'favorites') {\n setFilters({\n ...filters,\n order: 'desc',\n orderBy: 'created',\n favorite: true,\n });\n } else if (filter === 'most_viewed') {\n setFilters({\n ...filters,\n order: 'desc',\n orderBy: 'views',\n favorite: false,\n });\n }\n };\n\n const handleChangePage = (_: unknown, newPage: number) => {\n setPage(newPage + 1);\n };\n\n const handleChangeRowsPerPage = (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n setQuestionsPerPage(parseInt(event.target.value, 10));\n setPage(1);\n };\n\n if (error || response === undefined) {\n return (\n <WarningPanel severity=\"error\" title=\"Could not load questions.\">\n {error?.message}\n </WarningPanel>\n );\n }\n\n return (\n <>\n <Grid\n container\n justifyContent=\"space-between\"\n alignItems=\"center\"\n style={{ marginBottom: '1em' }}\n className=\"qetaQuestionsTableGrid\"\n >\n <Grid item>\n {props.hideTitle === true ? null : (\n <Typography variant=\"h5\">Q&A</Typography>\n )}\n </Grid>\n <Grid item>\n <ButtonGroup>\n <Button\n color={quickFilter === 'latest' ? 'primary' : undefined}\n onClick={() => handleQuickFilterChange('latest')}\n >\n Latest\n </Button>\n <Button\n color={quickFilter === 'favorites' ? 'primary' : undefined}\n onClick={() => handleQuickFilterChange('favorites')}\n >\n Favorites\n </Button>\n <Button\n color={quickFilter === 'most_viewed' ? 'primary' : undefined}\n onClick={() => handleQuickFilterChange('most_viewed')}\n >\n Most viewed\n </Button>\n </ButtonGroup>\n <LinkButton\n to=\"#\"\n variant=\"text\"\n onClick={() => setRefresh(refresh + 1)}\n >\n <RefreshIcon />\n </LinkButton>\n </Grid>\n </Grid>\n <TableContainer>\n <Table className=\"qetaQuestionsTable\">\n <TableHead>\n <TableRow>\n <TableCell>Title</TableCell>\n <TableCell>Author</TableCell>\n <TableCell>Asked</TableCell>\n <TableCell>Last updated</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {loading ? <Progress /> : null}\n {response.questions.map(q => (\n <QuestionTableRow question={q} />\n ))}\n </TableBody>\n </Table>\n <TablePagination\n rowsPerPageOptions={[5, 10, 20, 30, 40, 50]}\n component=\"div\"\n count={response.total}\n rowsPerPage={questionsPerPage}\n page={page - 1}\n onPageChange={handleChangePage}\n onRowsPerPageChange={handleChangeRowsPerPage}\n />\n </TableContainer>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QuestionsTable.esm.js","sources":["../../../src/components/QuestionTableCard/QuestionsTable.tsx"],"sourcesContent":["import React from 'react';\nimport { useQetaApi } from '../../utils/hooks';\nimport { LinkButton, Progress, WarningPanel } from '@backstage/core-components';\nimport {\n Button,\n ButtonGroup,\n Grid,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TablePagination,\n TableRow,\n Typography,\n} from '@material-ui/core';\nimport RefreshIcon from '@material-ui/icons/Refresh';\nimport { QuestionTableRow } from './QuestionTableRow';\n\ntype QuickFilterType = 'latest' | 'favorites' | 'most_viewed';\n\nexport const QuestionsTable = (props: {\n hideTitle?: boolean;\n rowsPerPage?: number;\n quickFilter?: QuickFilterType;\n}) => {\n const [page, setPage] = React.useState(1);\n const [questionsPerPage, setQuestionsPerPage] = React.useState(\n props.rowsPerPage ?? 10,\n );\n const [quickFilter, setQuickFilter] = React.useState(\n props.quickFilter ?? 'latest',\n );\n const [refresh, setRefresh] = React.useState(0);\n const [filters, setFilters] = React.useState({\n order: 'desc',\n orderBy: 'created',\n noAnswers: 'false',\n noCorrectAnswer: 'false',\n noVotes: 'false',\n searchQuery: '',\n favorite: false,\n });\n const {\n value: response,\n loading,\n error,\n } = useQetaApi(\n api =>\n api.getQuestions({\n limit: questionsPerPage,\n offset: (page - 1) * questionsPerPage,\n includeEntities: true,\n ...filters,\n }),\n [page, filters, questionsPerPage, refresh],\n );\n\n const handleQuickFilterChange = (filter: QuickFilterType) => {\n setQuickFilter(filter);\n if (filter === 'latest') {\n setFilters({\n ...filters,\n order: 'desc',\n orderBy: 'created',\n favorite: false,\n });\n } else if (filter === 'favorites') {\n setFilters({\n ...filters,\n order: 'desc',\n orderBy: 'created',\n favorite: true,\n });\n } else if (filter === 'most_viewed') {\n setFilters({\n ...filters,\n order: 'desc',\n orderBy: 'views',\n favorite: false,\n });\n }\n };\n\n const handleChangePage = (_: unknown, newPage: number) => {\n setPage(newPage + 1);\n };\n\n const handleChangeRowsPerPage = (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n setQuestionsPerPage(parseInt(event.target.value, 10));\n setPage(1);\n };\n\n if (error || response === undefined) {\n return (\n <WarningPanel severity=\"error\" title=\"Could not load questions.\">\n {error?.message}\n </WarningPanel>\n );\n }\n\n return (\n <>\n <Grid\n container\n justifyContent=\"space-between\"\n alignItems=\"center\"\n style={{ marginBottom: '1em' }}\n className=\"qetaQuestionsTableGrid\"\n >\n <Grid item>\n {props.hideTitle === true ? null : (\n <Typography variant=\"h5\">Q&A</Typography>\n )}\n </Grid>\n <Grid item>\n <ButtonGroup>\n <Button\n color={quickFilter === 'latest' ? 'primary' : undefined}\n onClick={() => handleQuickFilterChange('latest')}\n >\n Latest\n </Button>\n <Button\n color={quickFilter === 'favorites' ? 'primary' : undefined}\n onClick={() => handleQuickFilterChange('favorites')}\n >\n Favorites\n </Button>\n <Button\n color={quickFilter === 'most_viewed' ? 'primary' : undefined}\n onClick={() => handleQuickFilterChange('most_viewed')}\n >\n Most viewed\n </Button>\n </ButtonGroup>\n <LinkButton\n to=\"#\"\n variant=\"text\"\n onClick={() => setRefresh(refresh + 1)}\n >\n <RefreshIcon />\n </LinkButton>\n </Grid>\n </Grid>\n <TableContainer>\n <Table className=\"qetaQuestionsTable\">\n <TableHead>\n <TableRow>\n <TableCell>Title</TableCell>\n <TableCell>Author</TableCell>\n <TableCell>Asked</TableCell>\n <TableCell>Last updated</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {loading ? <Progress /> : null}\n {response.questions.map(q => (\n <QuestionTableRow question={q} />\n ))}\n </TableBody>\n </Table>\n <TablePagination\n rowsPerPageOptions={[5, 10, 20, 30, 40, 50]}\n component=\"div\"\n count={response.total}\n rowsPerPage={questionsPerPage}\n page={page - 1}\n onPageChange={handleChangePage}\n onRowsPerPageChange={handleChangeRowsPerPage}\n />\n </TableContainer>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -46,7 +46,7 @@ const FilterPanel = (props) => {
46
46
  );
47
47
  useEffect(() => {
48
48
  if (tags && tags.length > 0 || filters.tags) {
49
- const ts = (tags != null ? tags : []).map((t) => t.tag);
49
+ const ts = (tags ?? []).map((t) => t.tag);
50
50
  if (filters.tags) {
51
51
  ts.push(...filters.tags);
52
52
  }
@@ -58,8 +58,8 @@ const FilterPanel = (props) => {
58
58
  if (filters.entity && !Array.isArray(filters.entity)) {
59
59
  entityRefs.push(filters.entity);
60
60
  }
61
- if (refs && (refs == null ? void 0 : refs.length) > 0) {
62
- refs == null ? void 0 : refs.forEach((ref) => {
61
+ if (refs && refs?.length > 0) {
62
+ refs?.forEach((ref) => {
63
63
  if (ref.entityRef !== filters.entity) {
64
64
  entityRefs.push(ref.entityRef);
65
65
  }
@@ -169,7 +169,7 @@ const FilterPanel = (props) => {
169
169
  {
170
170
  multiple: false,
171
171
  className: "qetaEntityFilter",
172
- value: selectedEntity != null ? selectedEntity : null,
172
+ value: selectedEntity ?? null,
173
173
  id: "entities-select",
174
174
  options: availableEntities,
175
175
  getOptionLabel: getEntityTitle,