@drodil/backstage-plugin-qeta 3.45.0 → 3.45.1

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.
package/dist/alpha.d.ts CHANGED
@@ -61,7 +61,7 @@ declare const QetaMarkdownRemarkPluginBlueprint: _backstage_frontend_plugin_api.
61
61
  declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin<{
62
62
  root: _backstage_frontend_plugin_api.RouteRef<undefined>;
63
63
  }, {}, {
64
- "addon:qeta/ask-question": _backstage_frontend_plugin_api.ExtensionDefinition<{
64
+ "addon:qeta/ask-question": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
65
65
  kind: "addon";
66
66
  name: "ask-question";
67
67
  config: {};
@@ -70,7 +70,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
70
70
  inputs: {};
71
71
  params: _backstage_plugin_techdocs_react.TechDocsAddonOptions;
72
72
  }>;
73
- "api:qeta": _backstage_frontend_plugin_api.ExtensionDefinition<{
73
+ "api:qeta": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
74
74
  kind: "api";
75
75
  name: undefined;
76
76
  config: {};
@@ -79,7 +79,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
79
79
  inputs: {};
80
80
  params: <TApi, TImpl extends TApi, TDeps extends { [name in string]: unknown; }>(params: _backstage_core_plugin_api.ApiFactory<TApi, TImpl, TDeps>) => _backstage_frontend_plugin_api.ExtensionBlueprintParams<_backstage_core_plugin_api.AnyApiFactory>;
81
81
  }>;
82
- "entity-content:qeta/entity-posts-content": _backstage_frontend_plugin_api.ExtensionDefinition<{
82
+ "entity-content:qeta/entity-posts-content": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
83
83
  config: {
84
84
  showFilters: boolean | undefined;
85
85
  showTitle: boolean | undefined;
@@ -145,7 +145,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
145
145
  filter?: string | _backstage_plugin_catalog_react_alpha.EntityPredicate | ((entity: Entity) => boolean);
146
146
  };
147
147
  }>;
148
- "nav-item:qeta": _backstage_frontend_plugin_api.ExtensionDefinition<{
148
+ "nav-item:qeta": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
149
149
  kind: "nav-item";
150
150
  name: undefined;
151
151
  config: {};
@@ -162,7 +162,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
162
162
  routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
163
163
  };
164
164
  }>;
165
- "page:qeta": _backstage_frontend_plugin_api.ExtensionDefinition<{
165
+ "page:qeta": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
166
166
  config: {
167
167
  subtitle: string | undefined;
168
168
  themeId: string | undefined;
@@ -211,7 +211,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
211
211
  routeRef?: _backstage_frontend_plugin_api.RouteRef;
212
212
  };
213
213
  }>;
214
- "search-filter-result-type:qeta/qeta": _backstage_frontend_plugin_api.ExtensionDefinition<{
214
+ "search-filter-result-type:qeta/qeta": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
215
215
  kind: "search-filter-result-type";
216
216
  name: "qeta";
217
217
  config: {};
@@ -219,12 +219,12 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
219
219
  output: _backstage_frontend_plugin_api.ExtensionDataRef<{
220
220
  value: string;
221
221
  name: string;
222
- icon: JSX.Element;
222
+ icon: react.JSX.Element;
223
223
  }, "search.filters.result-types.type", {}>;
224
224
  inputs: {};
225
225
  params: _backstage_plugin_search_react_alpha.SearchFilterResultTypeBlueprintParams;
226
226
  }>;
227
- "search-result-list-item:qeta": _backstage_frontend_plugin_api.ExtensionDefinition<{
227
+ "search-result-list-item:qeta": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
228
228
  kind: "search-result-list-item";
229
229
  name: undefined;
230
230
  config: {
@@ -236,6 +236,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
236
236
  output: _backstage_frontend_plugin_api.ExtensionDataRef<{
237
237
  predicate?: _backstage_plugin_search_react_alpha.SearchResultItemExtensionPredicate;
238
238
  component: _backstage_plugin_search_react_alpha.SearchResultItemExtensionComponent;
239
+ icon?: react.JSX.Element;
239
240
  }, "search.search-result-list-item.item", {}>;
240
241
  inputs: {};
241
242
  params: _backstage_plugin_search_react_alpha.SearchResultListItemBlueprintParams;
@@ -1,6 +1,5 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
- import * as React from 'react';
3
- import { useState, useEffect, useCallback, useMemo } from 'react';
2
+ import { useState, useEffect, useCallback, useMemo, Fragment as Fragment$1 } from 'react';
4
3
  import { WarningPanel, ContentHeader } from '@backstage/core-components';
5
4
  import { useParams } from 'react-router-dom';
6
5
  import { qetaTranslationRef, useQetaApi, ButtonContainer, AskQuestionButton, AddToCollectionButton, DraftBanner, DeletedBanner, QuestionCard, AIAnswerCard, AnswerCard, AnswerForm, RelativeTimeWithTooltip, UpdatedByLink } from '@drodil/backstage-plugin-qeta-react';
@@ -22,8 +21,8 @@ const QuestionPage = () => {
22
21
  const { id } = useParams();
23
22
  const { t } = useTranslationRef(qetaTranslationRef);
24
23
  const [answers, setAnswers] = useState([]);
25
- const [newAnswers, setNewAnswers] = React.useState([]);
26
- const [answerSort, setAnswerSort] = React.useState("default");
24
+ const [newAnswers, setNewAnswers] = useState([]);
25
+ const [answerSort, setAnswerSort] = useState("default");
27
26
  const dStyles = useDescriptionStyles();
28
27
  const [answersCount, setAnswersCount] = useState(0);
29
28
  const [views, setViews] = useState(0);
@@ -102,7 +101,7 @@ const QuestionPage = () => {
102
101
  /* @__PURE__ */ jsx(RelativeTimeWithTooltip, { value: q.created }),
103
102
  " \xB7 "
104
103
  ] }),
105
- q.updated && /* @__PURE__ */ jsx(React.Fragment, { children: /* @__PURE__ */ jsxs(Box, { fontWeight: "fontWeightMedium", className: dStyles.box, children: [
104
+ q.updated && /* @__PURE__ */ jsx(Fragment$1, { children: /* @__PURE__ */ jsxs(Box, { fontWeight: "fontWeightMedium", className: dStyles.box, children: [
106
105
  t("authorBox.updatedAtTime"),
107
106
  " ",
108
107
  /* @__PURE__ */ jsx(RelativeTimeWithTooltip, { value: q.updated }),
@@ -198,7 +197,7 @@ const QuestionPage = () => {
198
197
  ] }) }),
199
198
  /* @__PURE__ */ jsx(Divider, {}),
200
199
  sortedAnswers.map((a) => {
201
- return /* @__PURE__ */ jsx(React.Fragment, { children: /* @__PURE__ */ jsx(Box, { sx: { mb: 1 }, children: /* @__PURE__ */ jsx(
200
+ return /* @__PURE__ */ jsx(Fragment$1, { children: /* @__PURE__ */ jsx(Box, { sx: { mb: 1 }, children: /* @__PURE__ */ jsx(
202
201
  AnswerCard,
203
202
  {
204
203
  answer: a,
@@ -1 +1 @@
1
- {"version":3,"file":"QuestionPage.esm.js","sources":["../../../src/components/QuestionPage/QuestionPage.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { ContentHeader, WarningPanel } from '@backstage/core-components';\nimport { useParams } from 'react-router-dom';\nimport {\n AddToCollectionButton,\n AIAnswerCard,\n AnswerCard,\n AnswerForm,\n AskQuestionButton,\n ButtonContainer,\n DeletedBanner,\n DraftBanner,\n qetaTranslationRef,\n QuestionCard,\n RelativeTimeWithTooltip,\n UpdatedByLink,\n useQetaApi,\n} from '@drodil/backstage-plugin-qeta-react';\nimport {\n Answer,\n AnswerResponse,\n PostResponse,\n QetaSignal,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { useSignal } from '@backstage/plugin-signals-react';\nimport {\n Box,\n Divider,\n FormControl,\n Grid,\n makeStyles,\n MenuItem,\n TextField,\n Typography,\n} from '@material-ui/core';\nimport { Skeleton } from '@material-ui/lab';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nconst useDescriptionStyles = makeStyles(\n () => ({\n root: {},\n box: {\n display: 'inline',\n },\n }),\n { name: 'QetaDescription' },\n);\n\nexport const QuestionPage = () => {\n const { id } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n const [answers, setAnswers] = useState<AnswerResponse[]>([]);\n const [newAnswers, setNewAnswers] = React.useState<AnswerResponse[]>([]);\n const [answerSort, setAnswerSort] = React.useState<string>('default');\n const dStyles = useDescriptionStyles();\n\n const [answersCount, setAnswersCount] = useState(0);\n const [views, setViews] = useState(0);\n\n const { lastSignal } = useSignal<QetaSignal>(`qeta:post_${id}`);\n\n const {\n value: question,\n loading,\n error,\n } = useQetaApi(api => api.getPost(id), [id]);\n\n useEffect(() => {\n if (question) {\n setAnswersCount(question.answersCount);\n setViews(question.views);\n setAnswers(question.answers ?? []);\n }\n }, [question]);\n\n useEffect(() => {\n if (lastSignal?.type === 'post_stats') {\n setAnswersCount(lastSignal.answersCount);\n setViews(lastSignal.views);\n }\n }, [lastSignal]);\n\n const sortAnswers = useCallback(\n (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 [answerSort],\n );\n\n const sortedAnswers = useMemo(() => {\n const allAnswers = [...answers, ...newAnswers];\n return allAnswers.sort(sortAnswers);\n }, [answers, newAnswers, sortAnswers]);\n\n const onAnswerPost = (answer: AnswerResponse) => {\n setNewAnswers(newAnswers.concat([answer]));\n setAnswersCount(prev => prev + 1);\n };\n\n const onAnswerDelete = (answer: AnswerResponse) => {\n setNewAnswers(newAnswers.filter(a => a.id !== answer.id));\n setAnswers(answers.filter(a => a.id !== answer.id));\n setAnswersCount(prev => prev - 1);\n };\n\n const getDescription = (q: PostResponse) => {\n return (\n <span className={dStyles.root}>\n <Box fontWeight=\"fontWeightMedium\" className={dStyles.box}>\n {t('authorBox.postedAtTime')}{' '}\n <RelativeTimeWithTooltip value={q.created} />\n {' · '}\n </Box>\n {q.updated && (\n <React.Fragment>\n <Box fontWeight=\"fontWeightMedium\" className={dStyles.box}>\n {t('authorBox.updatedAtTime')}{' '}\n <RelativeTimeWithTooltip value={q.updated} />{' '}\n {t('authorBox.updatedBy')} <UpdatedByLink entity={q} />\n {' · '}\n </Box>\n </React.Fragment>\n )}\n <Box fontWeight=\"fontWeightMedium\" className={dStyles.box}>\n {t('common.viewsCount', { count: views })}\n </Box>\n </span>\n );\n };\n\n if (loading) {\n return (\n <Box role=\"status\" aria-label={t('common.loading')}>\n <Skeleton variant=\"rect\" height={200} animation=\"wave\" />\n <Box mt={2}>\n <Skeleton variant=\"text\" height={40} width=\"60%\" animation=\"wave\" />\n <Skeleton variant=\"text\" height={20} width=\"40%\" animation=\"wave\" />\n <Skeleton variant=\"text\" height={20} width=\"80%\" animation=\"wave\" />\n </Box>\n </Box>\n );\n }\n\n if (error || question === undefined) {\n return (\n <WarningPanel\n severity=\"error\"\n title={t('questionPage.errorLoading')}\n aria-live=\"assertive\"\n >\n {error?.message}\n </WarningPanel>\n );\n }\n\n if (question.type !== 'question') {\n return (\n <WarningPanel title=\"Not found\" message={t('questionPage.notFound')} />\n );\n }\n\n return (\n <>\n <ContentHeader\n title={question.title}\n // @ts-ignore\n description={getDescription(question)}\n >\n <ButtonContainer>\n <AskQuestionButton />\n <AddToCollectionButton post={question} />\n </ButtonContainer>\n </ContentHeader>\n {question.status === 'draft' && <DraftBanner />}\n {question.status === 'deleted' && <DeletedBanner />}\n <QuestionCard question={question} />\n <AIAnswerCard question={question} debounceMs={0} />\n {question.status === 'active' && (\n <>\n <Box sx={{ mt: 3, mb: 2 }}>\n <Grid container justifyContent=\"space-between\" alignItems=\"center\">\n <Grid item>\n <Typography variant=\"h6\">\n {t('common.answersCount', {\n count: answersCount,\n })}\n </Typography>\n </Grid>\n {sortedAnswers.length > 1 && (\n <Grid item>\n <FormControl>\n <TextField\n select\n size=\"small\"\n label={t('questionPage.sortAnswers.label')}\n value={answerSort}\n onChange={val =>\n setAnswerSort(val.target.value as string)\n }\n inputProps={{\n name: 'sortAnswers',\n id: 'sort-answers',\n 'aria-label': t('questionPage.sortAnswers.label'),\n 'aria-describedby': 'sort-answers-helper',\n }}\n variant=\"outlined\"\n SelectProps={{\n MenuProps: {\n 'aria-label': t('questionPage.sortAnswers.menuLabel'),\n },\n }}\n >\n <MenuItem value=\"default\">\n {t('questionPage.sortAnswers.default')}\n </MenuItem>\n <MenuItem value=\"created_desc\">\n {t('questionPage.sortAnswers.createdDesc')}\n </MenuItem>\n <MenuItem value=\"created_asc\">\n {t('questionPage.sortAnswers.createdAsc')}\n </MenuItem>\n <MenuItem value=\"score_desc\">\n {t('questionPage.sortAnswers.scoreDesc')}\n </MenuItem>\n <MenuItem value=\"score_asc\">\n {t('questionPage.sortAnswers.scoreAsc')}\n </MenuItem>\n <MenuItem value=\"comments_desc\">\n {t('questionPage.sortAnswers.commentsDesc')}\n </MenuItem>\n <MenuItem value=\"comments_asc\">\n {t('questionPage.sortAnswers.commentsAsc')}\n </MenuItem>\n <MenuItem value=\"author_desc\">\n {t('questionPage.sortAnswers.authorDesc')}\n </MenuItem>\n <MenuItem value=\"author_asc\">\n {t('questionPage.sortAnswers.authorAsc')}\n </MenuItem>\n <MenuItem value=\"updated_desc\">\n {t('questionPage.sortAnswers.updatedDesc')}\n </MenuItem>\n <MenuItem value=\"updated_asc\">\n {t('questionPage.sortAnswers.updatedAsc')}\n </MenuItem>\n </TextField>\n </FormControl>\n </Grid>\n )}\n </Grid>\n </Box>\n <Divider />\n {sortedAnswers.map(a => {\n return (\n <React.Fragment key={a.id}>\n <Box key={a.id} sx={{ mb: 1 }}>\n <AnswerCard\n answer={a}\n question={question}\n onAnswerDelete={onAnswerDelete}\n />\n </Box>\n </React.Fragment>\n );\n })}\n <Divider />\n <AnswerForm post={question} onPost={onAnswerPost} />\n </>\n )}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QuestionPage.esm.js","sources":["../../../src/components/QuestionPage/QuestionPage.tsx"],"sourcesContent":["import { Fragment, useCallback, useEffect, useMemo, useState } from 'react';\nimport { ContentHeader, WarningPanel } from '@backstage/core-components';\nimport { useParams } from 'react-router-dom';\nimport {\n AddToCollectionButton,\n AIAnswerCard,\n AnswerCard,\n AnswerForm,\n AskQuestionButton,\n ButtonContainer,\n DeletedBanner,\n DraftBanner,\n qetaTranslationRef,\n QuestionCard,\n RelativeTimeWithTooltip,\n UpdatedByLink,\n useQetaApi,\n} from '@drodil/backstage-plugin-qeta-react';\nimport {\n Answer,\n AnswerResponse,\n PostResponse,\n QetaSignal,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { useSignal } from '@backstage/plugin-signals-react';\nimport {\n Box,\n Divider,\n FormControl,\n Grid,\n makeStyles,\n MenuItem,\n TextField,\n Typography,\n} from '@material-ui/core';\nimport { Skeleton } from '@material-ui/lab';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nconst useDescriptionStyles = makeStyles(\n () => ({\n root: {},\n box: {\n display: 'inline',\n },\n }),\n { name: 'QetaDescription' },\n);\n\nexport const QuestionPage = () => {\n const { id } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n const [answers, setAnswers] = useState<AnswerResponse[]>([]);\n const [newAnswers, setNewAnswers] = useState<AnswerResponse[]>([]);\n const [answerSort, setAnswerSort] = useState<string>('default');\n const dStyles = useDescriptionStyles();\n\n const [answersCount, setAnswersCount] = useState(0);\n const [views, setViews] = useState(0);\n\n const { lastSignal } = useSignal<QetaSignal>(`qeta:post_${id}`);\n\n const {\n value: question,\n loading,\n error,\n } = useQetaApi(api => api.getPost(id), [id]);\n\n useEffect(() => {\n if (question) {\n setAnswersCount(question.answersCount);\n setViews(question.views);\n setAnswers(question.answers ?? []);\n }\n }, [question]);\n\n useEffect(() => {\n if (lastSignal?.type === 'post_stats') {\n setAnswersCount(lastSignal.answersCount);\n setViews(lastSignal.views);\n }\n }, [lastSignal]);\n\n const sortAnswers = useCallback(\n (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 [answerSort],\n );\n\n const sortedAnswers = useMemo(() => {\n const allAnswers = [...answers, ...newAnswers];\n return allAnswers.sort(sortAnswers);\n }, [answers, newAnswers, sortAnswers]);\n\n const onAnswerPost = (answer: AnswerResponse) => {\n setNewAnswers(newAnswers.concat([answer]));\n setAnswersCount(prev => prev + 1);\n };\n\n const onAnswerDelete = (answer: AnswerResponse) => {\n setNewAnswers(newAnswers.filter(a => a.id !== answer.id));\n setAnswers(answers.filter(a => a.id !== answer.id));\n setAnswersCount(prev => prev - 1);\n };\n\n const getDescription = (q: PostResponse) => {\n return (\n <span className={dStyles.root}>\n <Box fontWeight=\"fontWeightMedium\" className={dStyles.box}>\n {t('authorBox.postedAtTime')}{' '}\n <RelativeTimeWithTooltip value={q.created} />\n {' · '}\n </Box>\n {q.updated && (\n <Fragment>\n <Box fontWeight=\"fontWeightMedium\" className={dStyles.box}>\n {t('authorBox.updatedAtTime')}{' '}\n <RelativeTimeWithTooltip value={q.updated} />{' '}\n {t('authorBox.updatedBy')} <UpdatedByLink entity={q} />\n {' · '}\n </Box>\n </Fragment>\n )}\n <Box fontWeight=\"fontWeightMedium\" className={dStyles.box}>\n {t('common.viewsCount', { count: views })}\n </Box>\n </span>\n );\n };\n\n if (loading) {\n return (\n <Box role=\"status\" aria-label={t('common.loading')}>\n <Skeleton variant=\"rect\" height={200} animation=\"wave\" />\n <Box mt={2}>\n <Skeleton variant=\"text\" height={40} width=\"60%\" animation=\"wave\" />\n <Skeleton variant=\"text\" height={20} width=\"40%\" animation=\"wave\" />\n <Skeleton variant=\"text\" height={20} width=\"80%\" animation=\"wave\" />\n </Box>\n </Box>\n );\n }\n\n if (error || question === undefined) {\n return (\n <WarningPanel\n severity=\"error\"\n title={t('questionPage.errorLoading')}\n aria-live=\"assertive\"\n >\n {error?.message}\n </WarningPanel>\n );\n }\n\n if (question.type !== 'question') {\n return (\n <WarningPanel title=\"Not found\" message={t('questionPage.notFound')} />\n );\n }\n\n return (\n <>\n <ContentHeader\n title={question.title}\n // @ts-ignore\n description={getDescription(question)}\n >\n <ButtonContainer>\n <AskQuestionButton />\n <AddToCollectionButton post={question} />\n </ButtonContainer>\n </ContentHeader>\n {question.status === 'draft' && <DraftBanner />}\n {question.status === 'deleted' && <DeletedBanner />}\n <QuestionCard question={question} />\n <AIAnswerCard question={question} debounceMs={0} />\n {question.status === 'active' && (\n <>\n <Box sx={{ mt: 3, mb: 2 }}>\n <Grid container justifyContent=\"space-between\" alignItems=\"center\">\n <Grid item>\n <Typography variant=\"h6\">\n {t('common.answersCount', {\n count: answersCount,\n })}\n </Typography>\n </Grid>\n {sortedAnswers.length > 1 && (\n <Grid item>\n <FormControl>\n <TextField\n select\n size=\"small\"\n label={t('questionPage.sortAnswers.label')}\n value={answerSort}\n onChange={val =>\n setAnswerSort(val.target.value as string)\n }\n inputProps={{\n name: 'sortAnswers',\n id: 'sort-answers',\n 'aria-label': t('questionPage.sortAnswers.label'),\n 'aria-describedby': 'sort-answers-helper',\n }}\n variant=\"outlined\"\n SelectProps={{\n MenuProps: {\n 'aria-label': t('questionPage.sortAnswers.menuLabel'),\n },\n }}\n >\n <MenuItem value=\"default\">\n {t('questionPage.sortAnswers.default')}\n </MenuItem>\n <MenuItem value=\"created_desc\">\n {t('questionPage.sortAnswers.createdDesc')}\n </MenuItem>\n <MenuItem value=\"created_asc\">\n {t('questionPage.sortAnswers.createdAsc')}\n </MenuItem>\n <MenuItem value=\"score_desc\">\n {t('questionPage.sortAnswers.scoreDesc')}\n </MenuItem>\n <MenuItem value=\"score_asc\">\n {t('questionPage.sortAnswers.scoreAsc')}\n </MenuItem>\n <MenuItem value=\"comments_desc\">\n {t('questionPage.sortAnswers.commentsDesc')}\n </MenuItem>\n <MenuItem value=\"comments_asc\">\n {t('questionPage.sortAnswers.commentsAsc')}\n </MenuItem>\n <MenuItem value=\"author_desc\">\n {t('questionPage.sortAnswers.authorDesc')}\n </MenuItem>\n <MenuItem value=\"author_asc\">\n {t('questionPage.sortAnswers.authorAsc')}\n </MenuItem>\n <MenuItem value=\"updated_desc\">\n {t('questionPage.sortAnswers.updatedDesc')}\n </MenuItem>\n <MenuItem value=\"updated_asc\">\n {t('questionPage.sortAnswers.updatedAsc')}\n </MenuItem>\n </TextField>\n </FormControl>\n </Grid>\n )}\n </Grid>\n </Box>\n <Divider />\n {sortedAnswers.map(a => {\n return (\n <Fragment key={a.id}>\n <Box key={a.id} sx={{ mb: 1 }}>\n <AnswerCard\n answer={a}\n question={question}\n onAnswerDelete={onAnswerDelete}\n />\n </Box>\n </Fragment>\n );\n })}\n <Divider />\n <AnswerForm post={question} onPost={onAnswerPost} />\n </>\n )}\n </>\n );\n};\n"],"names":["Fragment"],"mappings":"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"}
@@ -6,7 +6,7 @@ var keywords = [
6
6
  "frontend",
7
7
  "backstage.io"
8
8
  ];
9
- var version = "3.45.0";
9
+ var version = "3.45.1";
10
10
  var main = "src/index.ts";
11
11
  var types = "src/index.ts";
12
12
  var prepublishOnly = "yarn tsc && yarn build";
@@ -83,7 +83,7 @@ var dependencies = {
83
83
  unified: "^11.0.5"
84
84
  };
85
85
  var peerDependencies = {
86
- "@backstage/catalog-client": "^1.12.0",
86
+ "@backstage/catalog-client": "^1.12.1",
87
87
  react: " ^18.0.0 || ^19.0.0",
88
88
  "react-dom": "^18.0.0 || ^19.0.0",
89
89
  "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "frontend",
8
8
  "backstage.io"
9
9
  ],
10
- "version": "3.45.0",
10
+ "version": "3.45.1",
11
11
  "main": "./dist/index.esm.js",
12
12
  "types": "./dist/index.d.ts",
13
13
  "prepublishOnly": "yarn tsc && yarn build",
@@ -73,19 +73,19 @@
73
73
  "tsc": "tsc"
74
74
  },
75
75
  "dependencies": {
76
- "@backstage/catalog-model": "^1.7.5",
77
- "@backstage/core-compat-api": "^0.5.3",
78
- "@backstage/core-components": "^0.18.2",
79
- "@backstage/core-plugin-api": "^1.11.1",
80
- "@backstage/frontend-plugin-api": "^0.12.1",
81
- "@backstage/plugin-catalog-react": "^1.21.2",
82
- "@backstage/plugin-home-react": "^0.1.31",
83
- "@backstage/plugin-search-common": "^1.2.20",
84
- "@backstage/plugin-search-react": "^1.9.5",
85
- "@backstage/plugin-signals-react": "^0.0.16",
86
- "@backstage/plugin-techdocs-react": "^1.3.4",
87
- "@drodil/backstage-plugin-qeta-common": "^3.45.0",
88
- "@drodil/backstage-plugin-qeta-react": "^3.45.0",
76
+ "@backstage/catalog-model": "^1.7.6",
77
+ "@backstage/core-compat-api": "^0.5.4",
78
+ "@backstage/core-components": "^0.18.3",
79
+ "@backstage/core-plugin-api": "^1.12.0",
80
+ "@backstage/frontend-plugin-api": "^0.13.1",
81
+ "@backstage/plugin-catalog-react": "^1.21.3",
82
+ "@backstage/plugin-home-react": "^0.1.32",
83
+ "@backstage/plugin-search-common": "^1.2.21",
84
+ "@backstage/plugin-search-react": "^1.10.0",
85
+ "@backstage/plugin-signals-react": "^0.0.17",
86
+ "@backstage/plugin-techdocs-react": "^1.3.5",
87
+ "@drodil/backstage-plugin-qeta-common": "^3.45.1",
88
+ "@drodil/backstage-plugin-qeta-react": "^3.45.1",
89
89
  "@material-ui/core": "^4.12.2",
90
90
  "@material-ui/icons": "^4.11.3",
91
91
  "@material-ui/lab": "4.0.0-alpha.61",
@@ -96,7 +96,7 @@
96
96
  "unified": "^11.0.5"
97
97
  },
98
98
  "peerDependencies": {
99
- "@backstage/catalog-client": "^1.12.0",
99
+ "@backstage/catalog-client": "^1.12.1",
100
100
  "react": " ^18.0.0 || ^19.0.0",
101
101
  "react-dom": "^18.0.0 || ^19.0.0",
102
102
  "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
@@ -105,17 +105,17 @@
105
105
  "react-markdown": "8.0.7"
106
106
  },
107
107
  "devDependencies": {
108
- "@backstage/cli": "^0.34.4",
109
- "@backstage/dev-utils": "^1.1.16",
110
- "@backstage/frontend-defaults": "^0.3.2",
111
- "@backstage/plugin-catalog": "^1.31.4",
112
- "@backstage/plugin-home": "^0.8.13",
113
- "@backstage/plugin-notifications": "^0.5.10",
114
- "@backstage/plugin-search": "^1.4.31",
115
- "@backstage/plugin-search-react": "^1.9.5",
116
- "@backstage/plugin-signals": "^0.0.24",
117
- "@backstage/plugin-techdocs": "^1.15.2",
118
- "@backstage/ui": "^0.8.2",
108
+ "@backstage/cli": "^0.34.5",
109
+ "@backstage/dev-utils": "^1.1.17",
110
+ "@backstage/frontend-defaults": "^0.3.3",
111
+ "@backstage/plugin-catalog": "^1.32.0",
112
+ "@backstage/plugin-home": "^0.8.14",
113
+ "@backstage/plugin-notifications": "^0.5.11",
114
+ "@backstage/plugin-search": "^1.5.0",
115
+ "@backstage/plugin-search-react": "^1.10.0",
116
+ "@backstage/plugin-signals": "^0.0.25",
117
+ "@backstage/plugin-techdocs": "^1.16.0",
118
+ "@backstage/ui": "^0.9.0",
119
119
  "@testing-library/jest-dom": "^6.1.3",
120
120
  "@types/lodash": "^4.14.199",
121
121
  "@types/luxon": "^3",