@drodil/backstage-plugin-qeta 3.41.7 → 3.42.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
@@ -1,6 +1,7 @@
1
1
  import * as _backstage_plugin_search_react_alpha from '@backstage/plugin-search-react/alpha';
2
2
  import * as _backstage_plugin_catalog_react_alpha from '@backstage/plugin-catalog-react/alpha';
3
3
  import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
4
+ import * as _backstage_plugin_techdocs_react from '@backstage/plugin-techdocs-react';
4
5
  import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
5
6
  import * as react from 'react';
6
7
  import { Entity } from '@backstage/catalog-model';
@@ -60,6 +61,15 @@ declare const QetaMarkdownRemarkPluginBlueprint: _backstage_frontend_plugin_api.
60
61
  declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin<{
61
62
  root: _backstage_frontend_plugin_api.RouteRef<undefined>;
62
63
  }, {}, {
64
+ "addon:qeta/ask-question": _backstage_frontend_plugin_api.ExtensionDefinition<{
65
+ kind: "addon";
66
+ name: "ask-question";
67
+ config: {};
68
+ configInput: {};
69
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_plugin_techdocs_react.TechDocsAddonOptions, "techdocs.addon", {}>;
70
+ inputs: {};
71
+ params: _backstage_plugin_techdocs_react.TechDocsAddonOptions;
72
+ }>;
63
73
  "api:qeta": _backstage_frontend_plugin_api.ExtensionDefinition<{
64
74
  kind: "api";
65
75
  name: undefined;
package/dist/alpha.esm.js CHANGED
@@ -8,6 +8,9 @@ import { QetaClient, getSupportedEntityKinds } from '@drodil/backstage-plugin-qe
8
8
  import ContactSupportIcon from '@material-ui/icons/ContactSupport';
9
9
  import { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';
10
10
  import { SearchResultListItemBlueprint, SearchFilterResultTypeBlueprint } from '@backstage/plugin-search-react/alpha';
11
+ import { TechDocsAddonLocations } from '@backstage/plugin-techdocs-react';
12
+ import { AddonBlueprint } from '@backstage/plugin-techdocs-react/alpha';
13
+ import { TechDocsAskQuestionAddon } from './components/TechDocsAskQuestionAddon/TechDocsAskQuestionAddon.esm.js';
11
14
 
12
15
  const qetaApi = ApiBlueprint.make({
13
16
  params: (defineParams) => defineParams({
@@ -200,6 +203,14 @@ const qetaPostSearchFilterType = SearchFilterResultTypeBlueprint.make({
200
203
  icon: /* @__PURE__ */ jsx(ContactSupportIcon, {})
201
204
  }
202
205
  });
206
+ const techDocsAskQuestionAddon = AddonBlueprint.make({
207
+ name: "ask-question",
208
+ params: {
209
+ name: "AskQuestion",
210
+ location: TechDocsAddonLocations.Content,
211
+ component: TechDocsAskQuestionAddon
212
+ }
213
+ });
203
214
  var alpha = createFrontendPlugin({
204
215
  pluginId: "qeta",
205
216
  info: { packageJson: () => import('./package.json.esm.js') },
@@ -212,7 +223,8 @@ var alpha = createFrontendPlugin({
212
223
  EntityPostsContent,
213
224
  qetaNavItem,
214
225
  qetaSearchResultItem,
215
- qetaPostSearchFilterType
226
+ qetaPostSearchFilterType,
227
+ techDocsAskQuestionAddon
216
228
  ]
217
229
  });
218
230
 
@@ -1 +1 @@
1
- {"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["import {\n ApiBlueprint,\n coreExtensionData,\n createExtensionBlueprint,\n createExtensionDataRef,\n createExtensionInput,\n createFrontendPlugin,\n NavItemBlueprint,\n PageBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport {\n compatWrapper,\n convertLegacyRouteRef,\n convertLegacyRouteRefs,\n} from '@backstage/core-compat-api';\nimport { qetaApiRef, qetaRouteRef } from '@drodil/backstage-plugin-qeta-react';\nimport {\n configApiRef,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\nimport {\n getSupportedEntityKinds,\n QetaClient,\n} from '@drodil/backstage-plugin-qeta-common';\nimport ContactSupportIcon from '@material-ui/icons/ContactSupport';\nimport { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';\nimport { Entity } from '@backstage/catalog-model';\nimport {\n SearchFilterResultTypeBlueprint,\n SearchResultListItemBlueprint,\n} from '@backstage/plugin-search-react/alpha';\nimport { Pluggable } from 'unified/lib';\n\nconst qetaApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\n api: qetaApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory({ discoveryApi, fetchApi }) {\n return new QetaClient({ discoveryApi, fetchApi });\n },\n }),\n});\n\nexport const QetaPageIntroElementBlueprint = createExtensionBlueprint({\n kind: 'intro-element',\n attachTo: { id: 'page:qeta', input: 'introElement' },\n output: [coreExtensionData.reactElement],\n factory(params: { element: JSX.Element }) {\n return [coreExtensionData.reactElement(params.element)];\n },\n});\n\nexport const QetaPageHeaderElementBlueprint = createExtensionBlueprint({\n kind: 'header-element',\n attachTo: { id: 'page:qeta', input: 'headerElements' },\n output: [coreExtensionData.reactElement],\n factory(params: { element: JSX.Element }) {\n return [coreExtensionData.reactElement(params.element)];\n },\n});\n\nexport const markdownPlugin = createExtensionDataRef<Pluggable>().with({\n id: 'qeta.markdown-plugin',\n});\n\nexport const QetaMarkdownRehypePluginBlueprint = createExtensionBlueprint({\n kind: 'markdown-plugin',\n attachTo: [\n { id: 'page:qeta', input: 'rehypePlugins' },\n { id: 'entity-posts-content', input: 'rehypePlugins' },\n ],\n output: [markdownPlugin],\n factory(params: { plugin: Pluggable }) {\n return [markdownPlugin(params.plugin)];\n },\n});\n\nexport const QetaMarkdownRemarkPluginBlueprint = createExtensionBlueprint({\n kind: 'markdown-plugin',\n attachTo: [\n { id: 'page:qeta', input: 'remarkPlugins' },\n { id: 'entity-posts-content', input: 'remarkPlugins' },\n ],\n output: [markdownPlugin],\n factory(params: { plugin: Pluggable }) {\n return [markdownPlugin(params.plugin)];\n },\n});\n\nconst qetaPage = PageBlueprint.makeWithOverrides({\n config: {\n schema: {\n subtitle: z => z.string().optional(),\n themeId: z => z.string().optional(),\n headerTooltip: z => z.string().optional(),\n headerType: z => z.string().optional(),\n headerTypeLink: z => z.string().optional(),\n },\n },\n inputs: {\n introElement: createExtensionInput([coreExtensionData.reactElement], {\n singleton: true,\n optional: true,\n }),\n headerElements: createExtensionInput([coreExtensionData.reactElement], {\n singleton: false,\n optional: true,\n }),\n rehypePlugins: createExtensionInput([markdownPlugin], {\n singleton: false,\n optional: true,\n }),\n remarkPlugins: createExtensionInput([markdownPlugin], {\n singleton: false,\n optional: true,\n }),\n },\n factory: (originalFactory, { config, inputs }) => {\n const introElement = inputs.introElement?.get(\n coreExtensionData.reactElement,\n );\n const headerElements = inputs.headerElements.map(e =>\n e.get(coreExtensionData.reactElement),\n );\n const remarkPlugins = inputs.remarkPlugins.map(e => e.get(markdownPlugin));\n const rehypePlugins = inputs.rehypePlugins.map(e => e.get(markdownPlugin));\n return originalFactory({\n path: config.path ?? '/qeta',\n routeRef: convertLegacyRouteRef(qetaRouteRef),\n loader: () =>\n import('./components/QetaPage').then(m =>\n compatWrapper(\n <m.QetaPage\n {...config}\n introElement={introElement}\n headerElements={headerElements}\n remarkPlugins={remarkPlugins}\n rehypePlugins={rehypePlugins}\n />,\n ),\n ),\n });\n },\n});\n\nconst EntityPostsContent = EntityContentBlueprint.makeWithOverrides({\n name: 'entity-posts-content',\n config: {\n schema: {\n showFilters: z => z.boolean().optional(),\n showTitle: z => z.boolean().optional(),\n showAskButton: z => z.boolean().optional(),\n showWriteButton: z => z.boolean().optional(),\n showLinkButton: z => z.boolean().optional(),\n showNoQuestionsBtn: z => z.boolean().optional(),\n initialPageSize: z => z.number().optional(),\n type: z => z.enum(['question', 'article', 'link']).optional(),\n view: z => z.enum(['list', 'grid']).optional(),\n },\n },\n inputs: {\n rehypePlugins: createExtensionInput([markdownPlugin], {\n singleton: false,\n optional: true,\n }),\n remarkPlugins: createExtensionInput([markdownPlugin], {\n singleton: false,\n optional: true,\n }),\n },\n factory: (originalFactory, { config, apis, inputs }) => {\n return originalFactory({\n path: config.path ?? '/qeta',\n title: config.title ?? 'Q&A',\n filter: (entity: Entity) => {\n const configApi = apis.get(configApiRef);\n const supportedKinds = getSupportedEntityKinds(configApi);\n const entityKind = entity.kind.toLowerCase();\n return supportedKinds?.includes(entityKind);\n },\n loader: async () => {\n const remarkPlugins = inputs.remarkPlugins.map(e =>\n e.get(markdownPlugin),\n );\n const rehypePlugins = inputs.rehypePlugins.map(e =>\n e.get(markdownPlugin),\n );\n return import(\n './components/EntityPostsContent/EntityPostsContent.tsx'\n ).then(m =>\n compatWrapper(\n <m.EntityPostsContent\n {...config}\n remarkPlugins={remarkPlugins}\n rehypePlugins={rehypePlugins}\n />,\n ),\n );\n },\n });\n },\n});\n\nconst qetaNavItem = NavItemBlueprint.make({\n params: {\n title: 'Q&A',\n routeRef: convertLegacyRouteRef(qetaRouteRef),\n icon: ContactSupportIcon,\n },\n});\n\nconst qetaSearchResultItem = SearchResultListItemBlueprint.make({\n params: {\n predicate: result => result.type === 'qeta',\n component: () =>\n import('./components/QetaSearchResultListItem').then(\n m => m.QetaSearchResultListItem,\n ),\n },\n});\n\nconst qetaPostSearchFilterType = SearchFilterResultTypeBlueprint.make({\n name: 'qeta',\n params: {\n value: 'qeta',\n name: 'Q&A',\n icon: <ContactSupportIcon />,\n },\n});\n\n/**\n * Backstage frontend plugin.\n *\n * @alpha\n */\nexport default createFrontendPlugin({\n pluginId: 'qeta',\n info: { packageJson: () => import('../package.json') },\n routes: convertLegacyRouteRefs({\n root: qetaRouteRef,\n }),\n extensions: [\n qetaApi,\n qetaPage,\n EntityPostsContent,\n qetaNavItem,\n qetaSearchResultItem,\n qetaPostSearchFilterType,\n ],\n});\n\nexport { qetaTranslationRef } from '@drodil/backstage-plugin-qeta-react';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["import {\n ApiBlueprint,\n coreExtensionData,\n createExtensionBlueprint,\n createExtensionDataRef,\n createExtensionInput,\n createFrontendPlugin,\n NavItemBlueprint,\n PageBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport {\n compatWrapper,\n convertLegacyRouteRef,\n convertLegacyRouteRefs,\n} from '@backstage/core-compat-api';\nimport { qetaApiRef, qetaRouteRef } from '@drodil/backstage-plugin-qeta-react';\nimport {\n configApiRef,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\nimport {\n getSupportedEntityKinds,\n QetaClient,\n} from '@drodil/backstage-plugin-qeta-common';\nimport ContactSupportIcon from '@material-ui/icons/ContactSupport';\nimport { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';\nimport { Entity } from '@backstage/catalog-model';\nimport {\n SearchFilterResultTypeBlueprint,\n SearchResultListItemBlueprint,\n} from '@backstage/plugin-search-react/alpha';\nimport { Pluggable } from 'unified/lib';\nimport { TechDocsAddonLocations } from '@backstage/plugin-techdocs-react';\nimport { AddonBlueprint } from '@backstage/plugin-techdocs-react/alpha';\nimport { TechDocsAskQuestionAddon } from './components/TechDocsAskQuestionAddon';\n\nconst qetaApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\n api: qetaApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory({ discoveryApi, fetchApi }) {\n return new QetaClient({ discoveryApi, fetchApi });\n },\n }),\n});\n\nexport const QetaPageIntroElementBlueprint = createExtensionBlueprint({\n kind: 'intro-element',\n attachTo: { id: 'page:qeta', input: 'introElement' },\n output: [coreExtensionData.reactElement],\n factory(params: { element: JSX.Element }) {\n return [coreExtensionData.reactElement(params.element)];\n },\n});\n\nexport const QetaPageHeaderElementBlueprint = createExtensionBlueprint({\n kind: 'header-element',\n attachTo: { id: 'page:qeta', input: 'headerElements' },\n output: [coreExtensionData.reactElement],\n factory(params: { element: JSX.Element }) {\n return [coreExtensionData.reactElement(params.element)];\n },\n});\n\nexport const markdownPlugin = createExtensionDataRef<Pluggable>().with({\n id: 'qeta.markdown-plugin',\n});\n\nexport const QetaMarkdownRehypePluginBlueprint = createExtensionBlueprint({\n kind: 'markdown-plugin',\n attachTo: [\n { id: 'page:qeta', input: 'rehypePlugins' },\n { id: 'entity-posts-content', input: 'rehypePlugins' },\n ],\n output: [markdownPlugin],\n factory(params: { plugin: Pluggable }) {\n return [markdownPlugin(params.plugin)];\n },\n});\n\nexport const QetaMarkdownRemarkPluginBlueprint = createExtensionBlueprint({\n kind: 'markdown-plugin',\n attachTo: [\n { id: 'page:qeta', input: 'remarkPlugins' },\n { id: 'entity-posts-content', input: 'remarkPlugins' },\n ],\n output: [markdownPlugin],\n factory(params: { plugin: Pluggable }) {\n return [markdownPlugin(params.plugin)];\n },\n});\n\nconst qetaPage = PageBlueprint.makeWithOverrides({\n config: {\n schema: {\n subtitle: z => z.string().optional(),\n themeId: z => z.string().optional(),\n headerTooltip: z => z.string().optional(),\n headerType: z => z.string().optional(),\n headerTypeLink: z => z.string().optional(),\n },\n },\n inputs: {\n introElement: createExtensionInput([coreExtensionData.reactElement], {\n singleton: true,\n optional: true,\n }),\n headerElements: createExtensionInput([coreExtensionData.reactElement], {\n singleton: false,\n optional: true,\n }),\n rehypePlugins: createExtensionInput([markdownPlugin], {\n singleton: false,\n optional: true,\n }),\n remarkPlugins: createExtensionInput([markdownPlugin], {\n singleton: false,\n optional: true,\n }),\n },\n factory: (originalFactory, { config, inputs }) => {\n const introElement = inputs.introElement?.get(\n coreExtensionData.reactElement,\n );\n const headerElements = inputs.headerElements.map(e =>\n e.get(coreExtensionData.reactElement),\n );\n const remarkPlugins = inputs.remarkPlugins.map(e => e.get(markdownPlugin));\n const rehypePlugins = inputs.rehypePlugins.map(e => e.get(markdownPlugin));\n return originalFactory({\n path: config.path ?? '/qeta',\n routeRef: convertLegacyRouteRef(qetaRouteRef),\n loader: () =>\n import('./components/QetaPage').then(m =>\n compatWrapper(\n <m.QetaPage\n {...config}\n introElement={introElement}\n headerElements={headerElements}\n remarkPlugins={remarkPlugins}\n rehypePlugins={rehypePlugins}\n />,\n ),\n ),\n });\n },\n});\n\nconst EntityPostsContent = EntityContentBlueprint.makeWithOverrides({\n name: 'entity-posts-content',\n config: {\n schema: {\n showFilters: z => z.boolean().optional(),\n showTitle: z => z.boolean().optional(),\n showAskButton: z => z.boolean().optional(),\n showWriteButton: z => z.boolean().optional(),\n showLinkButton: z => z.boolean().optional(),\n showNoQuestionsBtn: z => z.boolean().optional(),\n initialPageSize: z => z.number().optional(),\n type: z => z.enum(['question', 'article', 'link']).optional(),\n view: z => z.enum(['list', 'grid']).optional(),\n },\n },\n inputs: {\n rehypePlugins: createExtensionInput([markdownPlugin], {\n singleton: false,\n optional: true,\n }),\n remarkPlugins: createExtensionInput([markdownPlugin], {\n singleton: false,\n optional: true,\n }),\n },\n factory: (originalFactory, { config, apis, inputs }) => {\n return originalFactory({\n path: config.path ?? '/qeta',\n title: config.title ?? 'Q&A',\n filter: (entity: Entity) => {\n const configApi = apis.get(configApiRef);\n const supportedKinds = getSupportedEntityKinds(configApi);\n const entityKind = entity.kind.toLowerCase();\n return supportedKinds?.includes(entityKind);\n },\n loader: async () => {\n const remarkPlugins = inputs.remarkPlugins.map(e =>\n e.get(markdownPlugin),\n );\n const rehypePlugins = inputs.rehypePlugins.map(e =>\n e.get(markdownPlugin),\n );\n return import(\n './components/EntityPostsContent/EntityPostsContent.tsx'\n ).then(m =>\n compatWrapper(\n <m.EntityPostsContent\n {...config}\n remarkPlugins={remarkPlugins}\n rehypePlugins={rehypePlugins}\n />,\n ),\n );\n },\n });\n },\n});\n\nconst qetaNavItem = NavItemBlueprint.make({\n params: {\n title: 'Q&A',\n routeRef: convertLegacyRouteRef(qetaRouteRef),\n icon: ContactSupportIcon,\n },\n});\n\nconst qetaSearchResultItem = SearchResultListItemBlueprint.make({\n params: {\n predicate: result => result.type === 'qeta',\n component: () =>\n import('./components/QetaSearchResultListItem').then(\n m => m.QetaSearchResultListItem,\n ),\n },\n});\n\nconst qetaPostSearchFilterType = SearchFilterResultTypeBlueprint.make({\n name: 'qeta',\n params: {\n value: 'qeta',\n name: 'Q&A',\n icon: <ContactSupportIcon />,\n },\n});\n\nconst techDocsAskQuestionAddon = AddonBlueprint.make({\n name: 'ask-question',\n params: {\n name: 'AskQuestion',\n location: TechDocsAddonLocations.Content,\n component: TechDocsAskQuestionAddon,\n },\n});\n\n/**\n * Backstage frontend plugin.\n *\n * @alpha\n */\nexport default createFrontendPlugin({\n pluginId: 'qeta',\n info: { packageJson: () => import('../package.json') },\n routes: convertLegacyRouteRefs({\n root: qetaRouteRef,\n }),\n extensions: [\n qetaApi,\n qetaPage,\n EntityPostsContent,\n qetaNavItem,\n qetaSearchResultItem,\n qetaPostSearchFilterType,\n techDocsAskQuestionAddon,\n ],\n});\n\nexport { qetaTranslationRef } from '@drodil/backstage-plugin-qeta-react';\n"],"names":[],"mappings":"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"}
@@ -19,6 +19,8 @@ const AskPage = () => {
19
19
  );
20
20
  const entity = searchParams.get("entity") ?? void 0;
21
21
  const entityPage = searchParams.get("entityPage") === "true";
22
+ const questionTitle = searchParams.get("title") ?? void 0;
23
+ const content = searchParams.get("content") ?? void 0;
22
24
  const tags = filterTags(searchParams.get("tags"));
23
25
  const { t } = useTranslationRef(qetaTranslationRef);
24
26
  let title;
@@ -67,7 +69,9 @@ const AskPage = () => {
67
69
  type: "question",
68
70
  template,
69
71
  onFormChange: handleFormChange,
70
- "aria-label": t("askPage.questionForm")
72
+ "aria-label": t("askPage.questionForm"),
73
+ title: questionTitle,
74
+ content
71
75
  }
72
76
  ),
73
77
  /* @__PURE__ */ jsx(AIAnswerCard, { draft })
@@ -1 +1 @@
1
- {"version":3,"file":"AskPage.esm.js","sources":["../../../src/components/AskPage/AskPage.tsx"],"sourcesContent":["import { ContentHeader, InfoCard, Progress } from '@backstage/core-components';\nimport { useState } from 'react';\nimport {\n AIAnswerCard,\n PostForm,\n qetaTranslationRef,\n SelectTemplateList,\n useAI,\n useQetaApi,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { useParams, useSearchParams } from 'react-router-dom';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { filterTags, Template } from '@drodil/backstage-plugin-qeta-common';\nimport { Grid, Box } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const AskPage = () => {\n const { id } = useParams();\n const [searchParams] = useSearchParams();\n const { isNewQuestionsEnabled } = useAI();\n const { value, loading } = useQetaApi(api => api.getTemplates());\n const [draft, setDraft] = useState<\n { title: string; content: string } | undefined\n >(undefined);\n const [template, setTemplate] = useState<Template | null | undefined>(\n undefined,\n );\n\n const entity = searchParams.get('entity') ?? undefined;\n const entityPage = searchParams.get('entityPage') === 'true';\n const tags = filterTags(searchParams.get('tags'));\n const { t } = useTranslationRef(qetaTranslationRef);\n let title;\n if (id) {\n title = t('askPage.title.existingQuestion');\n } else if (entity) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const representation = useEntityPresentation(entity);\n title = t('askPage.title.entityQuestion', {\n entity: representation.primaryTitle,\n });\n } else {\n title = t('askPage.title.newQuestion');\n }\n\n if (loading) {\n return (\n <Box role=\"status\" aria-label={t('common.loading')}>\n <Progress />\n </Box>\n );\n }\n\n if (\n !id &&\n value &&\n value.templates &&\n value.total > 0 &&\n template === undefined\n ) {\n return (\n <Box role=\"region\" aria-label={t('askPage.templateSelection')}>\n <SelectTemplateList\n templates={value}\n onTemplateSelect={temp => setTemplate(temp)}\n aria-label={t('askPage.selectTemplate')}\n />\n </Box>\n );\n }\n\n const handleFormChange = (data: { title: string; content: string }) => {\n if (!isNewQuestionsEnabled) {\n return;\n }\n setDraft({\n title: data.title,\n content: data.content,\n });\n };\n\n return (\n <>\n <ContentHeader title={title} />\n <Grid container spacing={3} direction=\"column\">\n <Grid item style={{ width: '100%' }}>\n <InfoCard>\n <PostForm\n id={id}\n entity={entity}\n entityPage={entityPage}\n tags={tags}\n type=\"question\"\n template={template}\n onFormChange={handleFormChange}\n aria-label={t('askPage.questionForm')}\n />\n <AIAnswerCard draft={draft} />\n </InfoCard>\n </Grid>\n </Grid>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AskPage.esm.js","sources":["../../../src/components/AskPage/AskPage.tsx"],"sourcesContent":["import { ContentHeader, InfoCard, Progress } from '@backstage/core-components';\nimport { useState } from 'react';\nimport {\n AIAnswerCard,\n PostForm,\n qetaTranslationRef,\n SelectTemplateList,\n useAI,\n useQetaApi,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { useParams, useSearchParams } from 'react-router-dom';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { filterTags, Template } from '@drodil/backstage-plugin-qeta-common';\nimport { Box, Grid } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const AskPage = () => {\n const { id } = useParams();\n const [searchParams] = useSearchParams();\n const { isNewQuestionsEnabled } = useAI();\n const { value, loading } = useQetaApi(api => api.getTemplates());\n const [draft, setDraft] = useState<\n { title: string; content: string } | undefined\n >(undefined);\n const [template, setTemplate] = useState<Template | null | undefined>(\n undefined,\n );\n\n const entity = searchParams.get('entity') ?? undefined;\n const entityPage = searchParams.get('entityPage') === 'true';\n const questionTitle = searchParams.get('title') ?? undefined;\n const content = searchParams.get('content') ?? undefined;\n const tags = filterTags(searchParams.get('tags'));\n const { t } = useTranslationRef(qetaTranslationRef);\n let title;\n if (id) {\n title = t('askPage.title.existingQuestion');\n } else if (entity) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const representation = useEntityPresentation(entity);\n title = t('askPage.title.entityQuestion', {\n entity: representation.primaryTitle,\n });\n } else {\n title = t('askPage.title.newQuestion');\n }\n\n if (loading) {\n return (\n <Box role=\"status\" aria-label={t('common.loading')}>\n <Progress />\n </Box>\n );\n }\n\n if (\n !id &&\n value &&\n value.templates &&\n value.total > 0 &&\n template === undefined\n ) {\n return (\n <Box role=\"region\" aria-label={t('askPage.templateSelection')}>\n <SelectTemplateList\n templates={value}\n onTemplateSelect={temp => setTemplate(temp)}\n aria-label={t('askPage.selectTemplate')}\n />\n </Box>\n );\n }\n\n const handleFormChange = (data: { title: string; content: string }) => {\n if (!isNewQuestionsEnabled) {\n return;\n }\n setDraft({\n title: data.title,\n content: data.content,\n });\n };\n\n return (\n <>\n <ContentHeader title={title} />\n <Grid container spacing={3} direction=\"column\">\n <Grid item style={{ width: '100%' }}>\n <InfoCard>\n <PostForm\n id={id}\n entity={entity}\n entityPage={entityPage}\n tags={tags}\n type=\"question\"\n template={template}\n onFormChange={handleFormChange}\n aria-label={t('askPage.questionForm')}\n title={questionTitle}\n content={content}\n />\n <AIAnswerCard draft={draft} />\n </InfoCard>\n </Grid>\n </Grid>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { ContentHeader } from '@backstage/core-components';
4
4
  import { useParams } from 'react-router-dom';
5
5
  import { qetaTranslationRef, qetaApiRef, EntityFollowButton, ButtonContainer, AskQuestionButton, WriteArticleButton, CreateLinkButton, PostsGrid, PostsContainer, EntitiesGrid, FollowedEntitiesList, PostHighlightList, PostHighlightListContainer } from '@drodil/backstage-plugin-qeta-react';
6
6
  import Whatshot from '@material-ui/icons/Whatshot';
7
- import { useApi } from '@backstage/core-plugin-api';
7
+ import { useApi, alertApiRef } from '@backstage/core-plugin-api';
8
8
  import { EntityRefLink } from '@backstage/plugin-catalog-react';
9
9
  import { Grid, Typography, Card, CardContent } from '@material-ui/core';
10
10
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
@@ -15,6 +15,7 @@ const EntityPage = () => {
15
15
  const [resp, setResp] = useState();
16
16
  const [view, setView] = useState("list");
17
17
  const qetaApi = useApi(qetaApiRef);
18
+ const alertApi = useApi(alertApiRef);
18
19
  useEffect(() => {
19
20
  if (!entityRef) {
20
21
  setResp(void 0);
@@ -24,8 +25,14 @@ const EntityPage = () => {
24
25
  if (res) {
25
26
  setResp(res);
26
27
  }
28
+ }).catch((e) => {
29
+ alertApi.post({
30
+ message: e.message,
31
+ severity: "error",
32
+ display: "transient"
33
+ });
27
34
  });
28
- }, [qetaApi, entityRef]);
35
+ }, [qetaApi, entityRef, alertApi]);
29
36
  let shownTitle = t("entitiesPage.defaultTitle");
30
37
  let link = void 0;
31
38
  if (entityRef) {
@@ -1 +1 @@
1
- {"version":3,"file":"EntityPage.esm.js","sources":["../../../src/components/EntityPage/EntityPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { ContentHeader } from '@backstage/core-components';\nimport { useParams } from 'react-router-dom';\nimport {\n AskQuestionButton,\n ButtonContainer,\n CreateLinkButton,\n EntitiesGrid,\n EntityFollowButton,\n FollowedEntitiesList,\n PostHighlightList,\n PostHighlightListContainer,\n PostsContainer,\n PostsGrid,\n qetaApiRef,\n qetaTranslationRef,\n ViewType,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport Whatshot from '@material-ui/icons/Whatshot';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { EntityResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport { Card, CardContent, Grid, Typography } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const EntityPage = () => {\n const { entityRef } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n const [resp, setResp] = useState<undefined | EntityResponse>();\n const [view, setView] = useState<ViewType>('list');\n\n const qetaApi = useApi(qetaApiRef);\n\n useEffect(() => {\n if (!entityRef) {\n setResp(undefined);\n return;\n }\n\n qetaApi.getEntity(entityRef).then(res => {\n if (res) {\n setResp(res);\n }\n });\n }, [qetaApi, entityRef]);\n\n let shownTitle: string = t('entitiesPage.defaultTitle');\n let link = undefined;\n if (entityRef) {\n shownTitle = '';\n link = <EntityRefLink entityRef={entityRef} />;\n }\n\n return (\n <Grid container spacing={4}>\n <Grid item md={12} lg={9} xl={10}>\n <ContentHeader\n titleComponent={\n <span style={{ display: 'flex', alignItems: 'center' }}>\n <Typography\n variant=\"h5\"\n component=\"h2\"\n style={{ marginRight: '0.5em' }}\n >\n {shownTitle} {link}\n </Typography>\n {entityRef && <EntityFollowButton entityRef={entityRef} />}\n </span>\n }\n >\n <ButtonContainer>\n <AskQuestionButton entity={entityRef} />\n <WriteArticleButton entity={entityRef} />\n <CreateLinkButton entity={entityRef} />\n </ButtonContainer>\n </ContentHeader>\n {resp && (\n <Card variant=\"outlined\" style={{ marginBottom: '1em' }}>\n <CardContent>\n <Typography variant=\"caption\">\n {t('common.posts', {\n count: resp.postsCount,\n itemType: 'post',\n })}\n {' · '}\n {t('common.followers', { count: resp.followerCount })}\n </Typography>\n </CardContent>\n </Card>\n )}\n {entityRef &&\n (view === 'grid' ? (\n <PostsGrid\n entity={entityRef}\n filterPanelProps={{ showEntityFilter: false }}\n view={view}\n onViewChange={setView}\n />\n ) : (\n <PostsContainer\n entity={entityRef}\n filterPanelProps={{ showEntityFilter: false }}\n view={view}\n showTypeLabel\n onViewChange={setView}\n />\n ))}\n {!entityRef && <EntitiesGrid />}\n </Grid>\n <Grid item lg={3} xl={2}>\n <FollowedEntitiesList />\n {resp && (\n <>\n <PostHighlightList\n type=\"hot\"\n title={t('highlights.hotQuestions.title')}\n noQuestionsLabel={t('highlights.hotQuestions.noQuestionsLabel')}\n icon={<Whatshot fontSize=\"small\" />}\n options={{ entities: [resp.entityRef] }}\n postType=\"question\"\n />\n <PostHighlightList\n type=\"unanswered\"\n title={t('highlights.unanswered.title')}\n noQuestionsLabel={t('highlights.unanswered.noQuestionsLabel')}\n options={{ entities: [resp.entityRef] }}\n postType=\"question\"\n />\n <PostHighlightList\n type=\"incorrect\"\n title={t('highlights.incorrect.title')}\n noQuestionsLabel={t('highlights.incorrect.noQuestionsLabel')}\n options={{ entities: [resp.entityRef] }}\n postType=\"question\"\n />\n </>\n )}\n {!resp && (\n <>\n <PostHighlightListContainer />\n </>\n )}\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EntityPage.esm.js","sources":["../../../src/components/EntityPage/EntityPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { ContentHeader } from '@backstage/core-components';\nimport { useParams } from 'react-router-dom';\nimport {\n AskQuestionButton,\n ButtonContainer,\n CreateLinkButton,\n EntitiesGrid,\n EntityFollowButton,\n FollowedEntitiesList,\n PostHighlightList,\n PostHighlightListContainer,\n PostsContainer,\n PostsGrid,\n qetaApiRef,\n qetaTranslationRef,\n ViewType,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport Whatshot from '@material-ui/icons/Whatshot';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport { EntityResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport { Card, CardContent, Grid, Typography } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const EntityPage = () => {\n const { entityRef } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n const [resp, setResp] = useState<undefined | EntityResponse>();\n const [view, setView] = useState<ViewType>('list');\n\n const qetaApi = useApi(qetaApiRef);\n const alertApi = useApi(alertApiRef);\n\n useEffect(() => {\n if (!entityRef) {\n setResp(undefined);\n return;\n }\n\n qetaApi\n .getEntity(entityRef)\n .then(res => {\n if (res) {\n setResp(res);\n }\n })\n .catch(e => {\n alertApi.post({\n message: e.message,\n severity: 'error',\n display: 'transient',\n });\n });\n }, [qetaApi, entityRef, alertApi]);\n\n let shownTitle: string = t('entitiesPage.defaultTitle');\n let link = undefined;\n if (entityRef) {\n shownTitle = '';\n link = <EntityRefLink entityRef={entityRef} />;\n }\n\n return (\n <Grid container spacing={4}>\n <Grid item md={12} lg={9} xl={10}>\n <ContentHeader\n titleComponent={\n <span style={{ display: 'flex', alignItems: 'center' }}>\n <Typography\n variant=\"h5\"\n component=\"h2\"\n style={{ marginRight: '0.5em' }}\n >\n {shownTitle} {link}\n </Typography>\n {entityRef && <EntityFollowButton entityRef={entityRef} />}\n </span>\n }\n >\n <ButtonContainer>\n <AskQuestionButton entity={entityRef} />\n <WriteArticleButton entity={entityRef} />\n <CreateLinkButton entity={entityRef} />\n </ButtonContainer>\n </ContentHeader>\n {resp && (\n <Card variant=\"outlined\" style={{ marginBottom: '1em' }}>\n <CardContent>\n <Typography variant=\"caption\">\n {t('common.posts', {\n count: resp.postsCount,\n itemType: 'post',\n })}\n {' · '}\n {t('common.followers', { count: resp.followerCount })}\n </Typography>\n </CardContent>\n </Card>\n )}\n {entityRef &&\n (view === 'grid' ? (\n <PostsGrid\n entity={entityRef}\n filterPanelProps={{ showEntityFilter: false }}\n view={view}\n onViewChange={setView}\n />\n ) : (\n <PostsContainer\n entity={entityRef}\n filterPanelProps={{ showEntityFilter: false }}\n view={view}\n showTypeLabel\n onViewChange={setView}\n />\n ))}\n {!entityRef && <EntitiesGrid />}\n </Grid>\n <Grid item lg={3} xl={2}>\n <FollowedEntitiesList />\n {resp && (\n <>\n <PostHighlightList\n type=\"hot\"\n title={t('highlights.hotQuestions.title')}\n noQuestionsLabel={t('highlights.hotQuestions.noQuestionsLabel')}\n icon={<Whatshot fontSize=\"small\" />}\n options={{ entities: [resp.entityRef] }}\n postType=\"question\"\n />\n <PostHighlightList\n type=\"unanswered\"\n title={t('highlights.unanswered.title')}\n noQuestionsLabel={t('highlights.unanswered.noQuestionsLabel')}\n options={{ entities: [resp.entityRef] }}\n postType=\"question\"\n />\n <PostHighlightList\n type=\"incorrect\"\n title={t('highlights.incorrect.title')}\n noQuestionsLabel={t('highlights.incorrect.noQuestionsLabel')}\n options={{ entities: [resp.entityRef] }}\n postType=\"question\"\n />\n </>\n )}\n {!resp && (\n <>\n <PostHighlightListContainer />\n </>\n )}\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { ContentHeader } from '@backstage/core-components';
4
4
  import { useParams } from 'react-router-dom';
5
5
  import { qetaTranslationRef, qetaApiRef, TagFollowButton, ButtonContainer, AskQuestionButton, WriteArticleButton, CreateLinkButton, MarkdownRenderer, PostsGrid, PostsContainer, TagsGrid, FollowedTagsList, PostHighlightList, PostHighlightListContainer } from '@drodil/backstage-plugin-qeta-react';
6
6
  import Whatshot from '@material-ui/icons/Whatshot';
7
- import { useApi } from '@backstage/core-plugin-api';
7
+ import { useApi, alertApiRef } from '@backstage/core-plugin-api';
8
8
  import { Grid, Typography, Card, CardContent } from '@material-ui/core';
9
9
  import { EntityRefLink } from '@backstage/plugin-catalog-react';
10
10
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
@@ -15,6 +15,7 @@ const TagPage = () => {
15
15
  const [resp, setResp] = useState();
16
16
  const [view, setView] = useState("list");
17
17
  const qetaApi = useApi(qetaApiRef);
18
+ const alertApi = useApi(alertApiRef);
18
19
  useEffect(() => {
19
20
  if (!tag) {
20
21
  setResp(void 0);
@@ -24,8 +25,14 @@ const TagPage = () => {
24
25
  if (res) {
25
26
  setResp(res);
26
27
  }
28
+ }).catch((e) => {
29
+ alertApi.post({
30
+ message: e.message,
31
+ severity: "error",
32
+ display: "transient"
33
+ });
27
34
  });
28
- }, [qetaApi, tag]);
35
+ }, [qetaApi, tag, alertApi]);
29
36
  return /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 4, children: [
30
37
  /* @__PURE__ */ jsxs(Grid, { item: true, md: 12, lg: 9, xl: 10, children: [
31
38
  tag ? /* @__PURE__ */ jsx(
@@ -1 +1 @@
1
- {"version":3,"file":"TagPage.esm.js","sources":["../../../src/components/TagPage/TagPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { ContentHeader } from '@backstage/core-components';\nimport { useParams } from 'react-router-dom';\nimport {\n AskQuestionButton,\n ButtonContainer,\n CreateLinkButton,\n FollowedTagsList,\n MarkdownRenderer,\n PostHighlightList,\n PostHighlightListContainer,\n PostsContainer,\n PostsGrid,\n qetaApiRef,\n qetaTranslationRef,\n TagFollowButton,\n TagsGrid,\n ViewType,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport Whatshot from '@material-ui/icons/Whatshot';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { TagResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { Card, CardContent, Grid, Typography } from '@material-ui/core';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const TagPage = () => {\n const { tag } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n const [resp, setResp] = useState<undefined | TagResponse>();\n const [view, setView] = useState<ViewType>('list');\n\n const qetaApi = useApi(qetaApiRef);\n\n useEffect(() => {\n if (!tag) {\n setResp(undefined);\n return;\n }\n\n qetaApi.getTag(tag).then(res => {\n if (res) {\n setResp(res);\n }\n });\n }, [qetaApi, tag]);\n\n return (\n <Grid container spacing={4}>\n <Grid item md={12} lg={9} xl={10}>\n {tag ? (\n <ContentHeader\n titleComponent={\n <span style={{ display: 'flex', alignItems: 'center' }}>\n <Typography\n variant=\"h5\"\n component=\"h2\"\n id=\"tag-title\"\n style={{ marginRight: '0.5em' }}\n >\n #{tag}\n </Typography>\n <TagFollowButton tag={tag} />\n </span>\n }\n >\n <ButtonContainer>\n <AskQuestionButton tags={[tag]} />\n <WriteArticleButton tags={[tag]} />\n <CreateLinkButton tags={[tag]} />\n </ButtonContainer>\n </ContentHeader>\n ) : (\n <ContentHeader title={t('tagPage.defaultTitle')}>\n <ButtonContainer>\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ButtonContainer>\n </ContentHeader>\n )}\n {resp && (\n <Card variant=\"outlined\" style={{ marginBottom: '1em' }}>\n <CardContent>\n <Typography variant=\"caption\">\n {t('common.posts', {\n count: resp.postsCount,\n itemType: 'post',\n })}\n {' · '}\n {t('common.followers', { count: resp.followerCount })}\n </Typography>\n <br />\n {resp.experts && resp.experts.length > 0 && (\n <Typography variant=\"caption\">\n {t('common.experts')}\n {': '}\n {resp.experts.map((e, i) => (\n <>\n <EntityRefLink key={e} entityRef={e} />\n {i === resp.experts!.length - 1 ? '' : ','}\n </>\n ))}\n </Typography>\n )}\n {resp.description && (\n <MarkdownRenderer content={resp.description} />\n )}\n </CardContent>\n </Card>\n )}\n {tag &&\n (view === 'grid' ? (\n <PostsGrid\n tags={[tag ?? '']}\n filterPanelProps={{ showTagFilter: false }}\n view={view}\n onViewChange={setView}\n />\n ) : (\n <PostsContainer\n tags={[tag ?? '']}\n filterPanelProps={{ showTagFilter: false }}\n view={view}\n showTypeLabel\n onViewChange={setView}\n />\n ))}\n {!tag && <TagsGrid />}\n </Grid>\n <Grid item lg={3} xl={2}>\n <FollowedTagsList />\n {resp && (\n <>\n <PostHighlightList\n type=\"hot\"\n title={t('highlights.hotQuestions.title')}\n noQuestionsLabel={t('highlights.hotQuestions.noQuestionsLabel')}\n icon={<Whatshot fontSize=\"small\" />}\n options={{ tags: [resp.tag] }}\n postType=\"question\"\n />\n\n <PostHighlightList\n type=\"unanswered\"\n title={t('highlights.unanswered.title')}\n noQuestionsLabel={t('highlights.unanswered.noQuestionsLabel')}\n options={{ tags: [resp.tag] }}\n postType=\"question\"\n />\n <PostHighlightList\n type=\"incorrect\"\n title={t('highlights.incorrect.title')}\n noQuestionsLabel={t('highlights.incorrect.noQuestionsLabel')}\n options={{ tags: [resp.tag] }}\n postType=\"question\"\n />\n </>\n )}\n {!resp && (\n <>\n <PostHighlightListContainer />\n </>\n )}\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TagPage.esm.js","sources":["../../../src/components/TagPage/TagPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { ContentHeader } from '@backstage/core-components';\nimport { useParams } from 'react-router-dom';\nimport {\n AskQuestionButton,\n ButtonContainer,\n CreateLinkButton,\n FollowedTagsList,\n MarkdownRenderer,\n PostHighlightList,\n PostHighlightListContainer,\n PostsContainer,\n PostsGrid,\n qetaApiRef,\n qetaTranslationRef,\n TagFollowButton,\n TagsGrid,\n ViewType,\n WriteArticleButton,\n} from '@drodil/backstage-plugin-qeta-react';\nimport Whatshot from '@material-ui/icons/Whatshot';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport { TagResponse } from '@drodil/backstage-plugin-qeta-common';\nimport { Card, CardContent, Grid, Typography } from '@material-ui/core';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport const TagPage = () => {\n const { tag } = useParams();\n const { t } = useTranslationRef(qetaTranslationRef);\n const [resp, setResp] = useState<undefined | TagResponse>();\n const [view, setView] = useState<ViewType>('list');\n\n const qetaApi = useApi(qetaApiRef);\n const alertApi = useApi(alertApiRef);\n\n useEffect(() => {\n if (!tag) {\n setResp(undefined);\n return;\n }\n\n qetaApi\n .getTag(tag)\n .then(res => {\n if (res) {\n setResp(res);\n }\n })\n .catch(e => {\n alertApi.post({\n message: e.message,\n severity: 'error',\n display: 'transient',\n });\n });\n }, [qetaApi, tag, alertApi]);\n\n return (\n <Grid container spacing={4}>\n <Grid item md={12} lg={9} xl={10}>\n {tag ? (\n <ContentHeader\n titleComponent={\n <span style={{ display: 'flex', alignItems: 'center' }}>\n <Typography\n variant=\"h5\"\n component=\"h2\"\n id=\"tag-title\"\n style={{ marginRight: '0.5em' }}\n >\n #{tag}\n </Typography>\n <TagFollowButton tag={tag} />\n </span>\n }\n >\n <ButtonContainer>\n <AskQuestionButton tags={[tag]} />\n <WriteArticleButton tags={[tag]} />\n <CreateLinkButton tags={[tag]} />\n </ButtonContainer>\n </ContentHeader>\n ) : (\n <ContentHeader title={t('tagPage.defaultTitle')}>\n <ButtonContainer>\n <AskQuestionButton />\n <WriteArticleButton />\n <CreateLinkButton />\n </ButtonContainer>\n </ContentHeader>\n )}\n {resp && (\n <Card variant=\"outlined\" style={{ marginBottom: '1em' }}>\n <CardContent>\n <Typography variant=\"caption\">\n {t('common.posts', {\n count: resp.postsCount,\n itemType: 'post',\n })}\n {' · '}\n {t('common.followers', { count: resp.followerCount })}\n </Typography>\n <br />\n {resp.experts && resp.experts.length > 0 && (\n <Typography variant=\"caption\">\n {t('common.experts')}\n {': '}\n {resp.experts.map((e, i) => (\n <>\n <EntityRefLink key={e} entityRef={e} />\n {i === resp.experts!.length - 1 ? '' : ','}\n </>\n ))}\n </Typography>\n )}\n {resp.description && (\n <MarkdownRenderer content={resp.description} />\n )}\n </CardContent>\n </Card>\n )}\n {tag &&\n (view === 'grid' ? (\n <PostsGrid\n tags={[tag ?? '']}\n filterPanelProps={{ showTagFilter: false }}\n view={view}\n onViewChange={setView}\n />\n ) : (\n <PostsContainer\n tags={[tag ?? '']}\n filterPanelProps={{ showTagFilter: false }}\n view={view}\n showTypeLabel\n onViewChange={setView}\n />\n ))}\n {!tag && <TagsGrid />}\n </Grid>\n <Grid item lg={3} xl={2}>\n <FollowedTagsList />\n {resp && (\n <>\n <PostHighlightList\n type=\"hot\"\n title={t('highlights.hotQuestions.title')}\n noQuestionsLabel={t('highlights.hotQuestions.noQuestionsLabel')}\n icon={<Whatshot fontSize=\"small\" />}\n options={{ tags: [resp.tag] }}\n postType=\"question\"\n />\n\n <PostHighlightList\n type=\"unanswered\"\n title={t('highlights.unanswered.title')}\n noQuestionsLabel={t('highlights.unanswered.noQuestionsLabel')}\n options={{ tags: [resp.tag] }}\n postType=\"question\"\n />\n <PostHighlightList\n type=\"incorrect\"\n title={t('highlights.incorrect.title')}\n noQuestionsLabel={t('highlights.incorrect.noQuestionsLabel')}\n options={{ tags: [resp.tag] }}\n postType=\"question\"\n />\n </>\n )}\n {!resp && (\n <>\n <PostHighlightListContainer />\n </>\n )}\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { makeStyles, Portal, Typography } from '@material-ui/core';
3
+ import { useTechDocsReaderPage, useShadowRootElements } from '@backstage/plugin-techdocs-react';
4
+ import { Link } from '@backstage/core-components';
5
+ import { askRouteRef } from '@drodil/backstage-plugin-qeta-react';
6
+ import { useRouteRef } from '@backstage/core-plugin-api';
7
+ import ContactSupportIcon from '@material-ui/icons/ContactSupport';
8
+ import { stringifyEntityRef } from '@backstage/catalog-model';
9
+
10
+ const useStyles = makeStyles((theme) => ({
11
+ root: {
12
+ padding: theme.spacing(1)
13
+ },
14
+ link: {
15
+ display: "grid",
16
+ gridAutoFlow: "column",
17
+ justifyContent: "flex-end",
18
+ alignItems: "center"
19
+ }
20
+ }));
21
+ const TechDocsAskQuestionAddon = () => {
22
+ const styles = useStyles();
23
+ const { title, subtitle, entityRef } = useTechDocsReaderPage();
24
+ const [mainContent] = useShadowRootElements([
25
+ '[data-md-component="main"] .md-content'
26
+ ]);
27
+ const askRoute = useRouteRef(askRouteRef);
28
+ const params = new URLSearchParams();
29
+ if (entityRef) {
30
+ params.append("entity", stringifyEntityRef(entityRef));
31
+ }
32
+ if (title) {
33
+ params.append(
34
+ "title",
35
+ `Question about "${title}${subtitle ? ` - ${subtitle}` : ""}"`
36
+ );
37
+ }
38
+ params.append(
39
+ "content",
40
+ `
41
+
42
+ This question relates to ${window.location.href}`
43
+ );
44
+ return /* @__PURE__ */ jsx(Portal, { container: mainContent, children: /* @__PURE__ */ jsx("div", { className: styles.root, children: /* @__PURE__ */ jsxs(
45
+ Link,
46
+ {
47
+ target: "_blank",
48
+ className: styles.link,
49
+ to: `${askRoute()}?${params.toString()}`,
50
+ children: [
51
+ /* @__PURE__ */ jsx(ContactSupportIcon, {}),
52
+ /* @__PURE__ */ jsx(Typography, { children: "Ask a question about the content" })
53
+ ]
54
+ }
55
+ ) }) });
56
+ };
57
+
58
+ export { TechDocsAskQuestionAddon };
59
+ //# sourceMappingURL=TechDocsAskQuestionAddon.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TechDocsAskQuestionAddon.esm.js","sources":["../../../src/components/TechDocsAskQuestionAddon/TechDocsAskQuestionAddon.tsx"],"sourcesContent":["import { makeStyles, Portal, Typography } from '@material-ui/core';\nimport {\n useShadowRootElements,\n useTechDocsReaderPage,\n} from '@backstage/plugin-techdocs-react';\nimport { Link } from '@backstage/core-components';\nimport { askRouteRef } from '@drodil/backstage-plugin-qeta-react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport ContactSupportIcon from '@material-ui/icons/ContactSupport';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n padding: theme.spacing(1),\n },\n link: {\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'flex-end',\n alignItems: 'center',\n },\n}));\n\nexport const TechDocsAskQuestionAddon = () => {\n const styles = useStyles();\n const { title, subtitle, entityRef } = useTechDocsReaderPage();\n const [mainContent] = useShadowRootElements([\n '[data-md-component=\"main\"] .md-content',\n ]);\n\n const askRoute = useRouteRef(askRouteRef);\n\n const params = new URLSearchParams();\n if (entityRef) {\n params.append('entity', stringifyEntityRef(entityRef));\n }\n if (title) {\n params.append(\n 'title',\n `Question about \"${title}${subtitle ? ` - ${subtitle}` : ''}\"`,\n );\n }\n params.append(\n 'content',\n `\\n\\nThis question relates to ${window.location.href}`,\n );\n\n return (\n <Portal container={mainContent}>\n <div className={styles.root}>\n <Link\n target=\"_blank\"\n className={styles.link}\n to={`${askRoute()}?${params.toString()}`}\n >\n <ContactSupportIcon />\n <Typography>Ask a question about the content</Typography>\n </Link>\n </div>\n </Portal>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAWA,MAAM,SAAA,GAAY,WAAW,CAAU,KAAA,MAAA;AAAA,EACrC,IAAM,EAAA;AAAA,IACJ,OAAA,EAAS,KAAM,CAAA,OAAA,CAAQ,CAAC;AAAA,GAC1B;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,OAAS,EAAA,MAAA;AAAA,IACT,YAAc,EAAA,QAAA;AAAA,IACd,cAAgB,EAAA,UAAA;AAAA,IAChB,UAAY,EAAA;AAAA;AAEhB,CAAE,CAAA,CAAA;AAEK,MAAM,2BAA2B,MAAM;AAC5C,EAAA,MAAM,SAAS,SAAU,EAAA;AACzB,EAAA,MAAM,EAAE,KAAA,EAAO,QAAU,EAAA,SAAA,KAAc,qBAAsB,EAAA;AAC7D,EAAM,MAAA,CAAC,WAAW,CAAA,GAAI,qBAAsB,CAAA;AAAA,IAC1C;AAAA,GACD,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,YAAY,WAAW,CAAA;AAExC,EAAM,MAAA,MAAA,GAAS,IAAI,eAAgB,EAAA;AACnC,EAAA,IAAI,SAAW,EAAA;AACb,IAAA,MAAA,CAAO,MAAO,CAAA,QAAA,EAAU,kBAAmB,CAAA,SAAS,CAAC,CAAA;AAAA;AAEvD,EAAA,IAAI,KAAO,EAAA;AACT,IAAO,MAAA,CAAA,MAAA;AAAA,MACL,OAAA;AAAA,MACA,mBAAmB,KAAK,CAAA,EAAG,WAAW,CAAM,GAAA,EAAA,QAAQ,KAAK,EAAE,CAAA,CAAA;AAAA,KAC7D;AAAA;AAEF,EAAO,MAAA,CAAA,MAAA;AAAA,IACL,SAAA;AAAA,IACA;;AAAA,yBAAgC,EAAA,MAAA,CAAO,SAAS,IAAI,CAAA;AAAA,GACtD;AAEA,EACE,uBAAA,GAAA,CAAC,UAAO,SAAW,EAAA,WAAA,EACjB,8BAAC,KAAI,EAAA,EAAA,SAAA,EAAW,OAAO,IACrB,EAAA,QAAA,kBAAA,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,MAAO,EAAA,QAAA;AAAA,MACP,WAAW,MAAO,CAAA,IAAA;AAAA,MAClB,IAAI,CAAG,EAAA,QAAA,EAAU,CAAI,CAAA,EAAA,MAAA,CAAO,UAAU,CAAA,CAAA;AAAA,MAEtC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,kBAAmB,EAAA,EAAA,CAAA;AAAA,wBACpB,GAAA,CAAC,cAAW,QAAgC,EAAA,kCAAA,EAAA;AAAA;AAAA;AAAA,KAEhD,CACF,EAAA,CAAA;AAEJ;;;;"}
package/dist/index.d.ts CHANGED
@@ -70,4 +70,6 @@ declare const EntityPostsContent: (props: EntityPostsContentProps) => react_jsx_
70
70
 
71
71
  declare const StatisticsPage: () => react_jsx_runtime.JSX.Element;
72
72
 
73
- export { Content, EntityPostsContainerCard, EntityPostsContent, EntityPostsGridCard, PostsTableCard, QetaPage, QetaSearchResultListItem, type QetaSearchResultListItemProps, QuestionsTableCard, StatisticsPage, qetaPlugin };
73
+ declare const TechDocsAskQuestionAddon: () => react_jsx_runtime.JSX.Element;
74
+
75
+ export { Content, EntityPostsContainerCard, EntityPostsContent, EntityPostsGridCard, PostsTableCard, QetaPage, QetaSearchResultListItem, type QetaSearchResultListItemProps, QuestionsTableCard, StatisticsPage, TechDocsAskQuestionAddon, qetaPlugin };
package/dist/index.esm.js CHANGED
@@ -4,4 +4,5 @@ export { EntityPostsContainerCard } from './components/EntityCards/EntityPostsCo
4
4
  export { EntityPostsGridCard } from './components/EntityCards/EntityPostsGridCard.esm.js';
5
5
  export { EntityPostsContent } from './components/EntityPostsContent/EntityPostsContent.esm.js';
6
6
  export { StatisticsPage } from './components/Statistics/StatisticsPage.esm.js';
7
+ export { TechDocsAskQuestionAddon } from './components/TechDocsAskQuestionAddon/TechDocsAskQuestionAddon.esm.js';
7
8
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -6,7 +6,7 @@ var keywords = [
6
6
  "frontend",
7
7
  "backstage.io"
8
8
  ];
9
- var version = "3.41.7";
9
+ var version = "3.42.1";
10
10
  var main = "src/index.ts";
11
11
  var types = "src/index.ts";
12
12
  var prepublishOnly = "yarn tsc && yarn build";
@@ -70,6 +70,7 @@ var dependencies = {
70
70
  "@backstage/plugin-search-common": "backstage:^",
71
71
  "@backstage/plugin-search-react": "backstage:^",
72
72
  "@backstage/plugin-signals-react": "backstage:^",
73
+ "@backstage/plugin-techdocs-react": "backstage:^",
73
74
  "@drodil/backstage-plugin-qeta-common": "workspace:^",
74
75
  "@drodil/backstage-plugin-qeta-react": "workspace:^",
75
76
  "@material-ui/core": "^4.12.2",
@@ -100,6 +101,7 @@ var devDependencies = {
100
101
  "@backstage/plugin-search": "backstage:^",
101
102
  "@backstage/plugin-search-react": "backstage:^",
102
103
  "@backstage/plugin-signals": "backstage:^",
104
+ "@backstage/plugin-techdocs": "backstage:^",
103
105
  "@backstage/ui": "backstage:^",
104
106
  "@testing-library/jest-dom": "^6.1.3",
105
107
  "@types/lodash": "^4.14.199",
@@ -1 +1 @@
1
- {"version":3,"file":"package.json.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"package.json.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "frontend",
8
8
  "backstage.io"
9
9
  ],
10
- "version": "3.41.7",
10
+ "version": "3.42.1",
11
11
  "main": "./dist/index.esm.js",
12
12
  "types": "./dist/index.d.ts",
13
13
  "prepublishOnly": "yarn tsc && yarn build",
@@ -83,8 +83,9 @@
83
83
  "@backstage/plugin-search-common": "^1.2.20",
84
84
  "@backstage/plugin-search-react": "^1.9.5",
85
85
  "@backstage/plugin-signals-react": "^0.0.16",
86
- "@drodil/backstage-plugin-qeta-common": "^3.41.7",
87
- "@drodil/backstage-plugin-qeta-react": "^3.41.7",
86
+ "@backstage/plugin-techdocs-react": "^1.3.4",
87
+ "@drodil/backstage-plugin-qeta-common": "^3.42.1",
88
+ "@drodil/backstage-plugin-qeta-react": "^3.42.1",
88
89
  "@material-ui/core": "^4.12.2",
89
90
  "@material-ui/icons": "^4.11.3",
90
91
  "@material-ui/lab": "4.0.0-alpha.61",
@@ -113,6 +114,7 @@
113
114
  "@backstage/plugin-search": "^1.4.31",
114
115
  "@backstage/plugin-search-react": "^1.9.5",
115
116
  "@backstage/plugin-signals": "^0.0.24",
117
+ "@backstage/plugin-techdocs": "^1.15.2",
116
118
  "@backstage/ui": "^0.8.2",
117
119
  "@testing-library/jest-dom": "^6.1.3",
118
120
  "@types/lodash": "^4.14.199",