@drodil/backstage-plugin-qeta 3.37.0 → 3.38.0

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,27 +1,31 @@
1
- import * as _backstage_catalog_model from '@backstage/catalog-model';
2
- import * as react from 'react';
3
1
  import * as _backstage_plugin_catalog_react_alpha from '@backstage/plugin-catalog-react/alpha';
4
- import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
5
2
  import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
3
+ import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
4
+ import * as react from 'react';
5
+ import { Entity } from '@backstage/catalog-model';
6
6
  export { qetaTranslationRef } from '@drodil/backstage-plugin-qeta-react';
7
7
 
8
- /** @alpha */
9
- declare const qetaNavItem: _backstage_frontend_plugin_api.ExtensionDefinition<{
10
- kind: "nav-item";
11
- name: undefined;
8
+ declare const QetaPageIntroElementBlueprint: _backstage_frontend_plugin_api.ExtensionBlueprint<{
9
+ kind: "intro-element";
10
+ params: {
11
+ element: JSX.Element;
12
+ };
13
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}>;
14
+ inputs: {};
12
15
  config: {};
13
16
  configInput: {};
14
- output: _backstage_frontend_plugin_api.ExtensionDataRef<{
15
- title: string;
16
- icon: _backstage_core_plugin_api.IconComponent;
17
- routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
18
- }, "core.nav-item.target", {}>;
19
- inputs: {};
17
+ dataRefs: never;
18
+ }>;
19
+ declare const QetaPageHeaderElementBlueprint: _backstage_frontend_plugin_api.ExtensionBlueprint<{
20
+ kind: "header-element";
20
21
  params: {
21
- title: string;
22
- icon: _backstage_core_plugin_api.IconComponent;
23
- routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
22
+ element: JSX.Element;
24
23
  };
24
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}>;
25
+ inputs: {};
26
+ config: {};
27
+ configInput: {};
28
+ dataRefs: never;
25
29
  }>;
26
30
  /**
27
31
  * Backstage frontend plugin.
@@ -75,7 +79,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
75
79
  };
76
80
  output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
77
81
  optional: true;
78
- }> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
82
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: Entity) => boolean, "catalog.entity-filter-function", {
79
83
  optional: true;
80
84
  }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
81
85
  optional: true;
@@ -101,7 +105,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
101
105
  group?: ("overview" | "documentation" | "development" | "deployment" | "operation" | "observability") | (string & {});
102
106
  loader: () => Promise<JSX.Element>;
103
107
  routeRef?: _backstage_frontend_plugin_api.RouteRef;
104
- filter?: string | _backstage_plugin_catalog_react_alpha.EntityPredicate | ((entity: _backstage_catalog_model.Entity) => boolean);
108
+ filter?: string | _backstage_plugin_catalog_react_alpha.EntityPredicate | ((entity: Entity) => boolean);
105
109
  };
106
110
  }>;
107
111
  "nav-item:qeta": _backstage_frontend_plugin_api.ExtensionDefinition<{
@@ -164,4 +168,4 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
164
168
  }>;
165
169
  }>;
166
170
 
167
- export { _default as default, qetaNavItem };
171
+ export { QetaPageHeaderElementBlueprint, QetaPageIntroElementBlueprint, _default as default };
package/dist/alpha.esm.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { ApiBlueprint, PageBlueprint, createExtensionInput, coreExtensionData, NavItemBlueprint, createFrontendPlugin } from '@backstage/frontend-plugin-api';
2
+ import { ApiBlueprint, createExtensionBlueprint, coreExtensionData, PageBlueprint, createExtensionInput, NavItemBlueprint, createFrontendPlugin } from '@backstage/frontend-plugin-api';
3
3
  import { convertLegacyRouteRef, compatWrapper, convertLegacyRouteRefs } from '@backstage/core-compat-api';
4
4
  import { qetaApiRef, qetaRouteRef } from '@drodil/backstage-plugin-qeta-react';
5
5
  export { qetaTranslationRef } from '@drodil/backstage-plugin-qeta-react';
6
- import { discoveryApiRef, fetchApiRef } from '@backstage/core-plugin-api';
6
+ import { discoveryApiRef, fetchApiRef, configApiRef } from '@backstage/core-plugin-api';
7
7
  import { QetaClient } from '@drodil/backstage-plugin-qeta-common';
8
- import LiveHelpIcon from '@material-ui/icons/LiveHelp';
8
+ import ContactSupportIcon from '@material-ui/icons/ContactSupport';
9
9
  import { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';
10
10
 
11
11
  const qetaApi = ApiBlueprint.make({
@@ -20,6 +20,22 @@ const qetaApi = ApiBlueprint.make({
20
20
  }
21
21
  })
22
22
  });
23
+ const QetaPageIntroElementBlueprint = createExtensionBlueprint({
24
+ kind: "intro-element",
25
+ attachTo: { id: "page:qeta", input: "introElement" },
26
+ output: [coreExtensionData.reactElement],
27
+ factory(params) {
28
+ return [coreExtensionData.reactElement(params.element)];
29
+ }
30
+ });
31
+ const QetaPageHeaderElementBlueprint = createExtensionBlueprint({
32
+ kind: "header-element",
33
+ attachTo: { id: "page:qeta", input: "headerElements" },
34
+ output: [coreExtensionData.reactElement],
35
+ factory(params) {
36
+ return [coreExtensionData.reactElement(params.element)];
37
+ }
38
+ });
23
39
  const qetaPage = PageBlueprint.makeWithOverrides({
24
40
  config: {
25
41
  schema: {
@@ -80,10 +96,19 @@ const EntityPostsContent = EntityContentBlueprint.makeWithOverrides({
80
96
  view: (z) => z.enum(["list", "grid"]).optional()
81
97
  }
82
98
  },
83
- factory: (originalFactory, { config }) => {
99
+ factory: (originalFactory, { config, apis }) => {
84
100
  return originalFactory({
85
101
  path: config.path ?? "/qeta",
86
102
  title: config.title ?? "Q&A",
103
+ filter: (entity) => {
104
+ const configApi = apis.get(configApiRef);
105
+ const supportedKinds = (configApi?.getOptionalStringArray("qeta.entityKinds") ?? [
106
+ "system",
107
+ "component"
108
+ ])?.map((k) => k.toLowerCase());
109
+ const entityKind = entity.kind.toLowerCase();
110
+ return supportedKinds?.includes(entityKind);
111
+ },
87
112
  loader: async () => import('./components/EntityPostsContent/EntityPostsContent.esm.js').then(
88
113
  (m) => compatWrapper(/* @__PURE__ */ jsx(m.EntityPostsContent, { ...config }))
89
114
  )
@@ -94,7 +119,7 @@ const qetaNavItem = NavItemBlueprint.make({
94
119
  params: {
95
120
  title: "Q&A",
96
121
  routeRef: convertLegacyRouteRef(qetaRouteRef),
97
- icon: LiveHelpIcon
122
+ icon: ContactSupportIcon
98
123
  }
99
124
  });
100
125
  var alpha = createFrontendPlugin({
@@ -106,5 +131,5 @@ var alpha = createFrontendPlugin({
106
131
  extensions: [qetaApi, qetaPage, EntityPostsContent, qetaNavItem]
107
132
  });
108
133
 
109
- export { alpha as default, qetaNavItem };
134
+ export { QetaPageHeaderElementBlueprint, QetaPageIntroElementBlueprint, alpha as default };
110
135
  //# sourceMappingURL=alpha.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["import {\n ApiBlueprint,\n coreExtensionData,\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 { discoveryApiRef, fetchApiRef } from '@backstage/core-plugin-api';\nimport { QetaClient } from '@drodil/backstage-plugin-qeta-common';\nimport LiveHelpIcon from '@material-ui/icons/LiveHelp';\nimport { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';\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\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 },\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 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 />,\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 factory: (originalFactory, { config }) => {\n return originalFactory({\n path: config.path ?? '/qeta',\n title: config.title ?? 'Q&A',\n loader: async () =>\n import('./components/EntityPostsContent/EntityPostsContent.tsx').then(\n m => compatWrapper(<m.EntityPostsContent {...config} />),\n ),\n });\n },\n});\n\n/** @alpha */\nexport const qetaNavItem = NavItemBlueprint.make({\n params: {\n title: 'Q&A',\n routeRef: convertLegacyRouteRef(qetaRouteRef),\n icon: LiveHelpIcon,\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: [qetaApi, qetaPage, EntityPostsContent, qetaNavItem],\n});\n\nexport { qetaTranslationRef } from '@drodil/backstage-plugin-qeta-react';\n"],"names":[],"mappings":";;;;;;;;;;AAmBA,MAAM,OAAA,GAAU,aAAa,IAAK,CAAA;AAAA,EAChC,MAAA,EAAQ,kBACN,YAAa,CAAA;AAAA,IACX,GAAK,EAAA,UAAA;AAAA,IACL,IAAM,EAAA;AAAA,MACJ,YAAc,EAAA,eAAA;AAAA,MACd,QAAU,EAAA;AAAA,KACZ;AAAA,IACA,OAAQ,CAAA,EAAE,YAAc,EAAA,QAAA,EAAY,EAAA;AAClC,MAAA,OAAO,IAAI,UAAA,CAAW,EAAE,YAAA,EAAc,UAAU,CAAA;AAAA;AAClD,GACD;AACL,CAAC,CAAA;AAED,MAAM,QAAA,GAAW,cAAc,iBAAkB,CAAA;AAAA,EAC/C,MAAQ,EAAA;AAAA,IACN,MAAQ,EAAA;AAAA,MACN,QAAU,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,MAAA,GAAS,QAAS,EAAA;AAAA,MACnC,OAAS,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,MAAA,GAAS,QAAS,EAAA;AAAA,MAClC,aAAe,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,MAAA,GAAS,QAAS,EAAA;AAAA,MACxC,UAAY,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,MAAA,GAAS,QAAS,EAAA;AAAA,MACrC,cAAgB,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,MAAA,GAAS,QAAS;AAAA;AAC3C,GACF;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,YAAc,EAAA,oBAAA,CAAqB,CAAC,iBAAA,CAAkB,YAAY,CAAG,EAAA;AAAA,MACnE,SAAW,EAAA,IAAA;AAAA,MACX,QAAU,EAAA;AAAA,KACX,CAAA;AAAA,IACD,cAAgB,EAAA,oBAAA,CAAqB,CAAC,iBAAA,CAAkB,YAAY,CAAG,EAAA;AAAA,MACrE,SAAW,EAAA,KAAA;AAAA,MACX,QAAU,EAAA;AAAA,KACX;AAAA,GACH;AAAA,EACA,SAAS,CAAC,eAAA,EAAiB,EAAE,MAAA,EAAQ,QAAa,KAAA;AAChD,IAAM,MAAA,YAAA,GAAe,OAAO,YAAc,EAAA,GAAA;AAAA,MACxC,iBAAkB,CAAA;AAAA,KACpB;AACA,IAAM,MAAA,cAAA,GAAiB,OAAO,cAAe,CAAA,GAAA;AAAA,MAAI,CAC/C,CAAA,KAAA,CAAA,CAAE,GAAI,CAAA,iBAAA,CAAkB,YAAY;AAAA,KACtC;AACA,IAAA,OAAO,eAAgB,CAAA;AAAA,MACrB,IAAA,EAAM,OAAO,IAAQ,IAAA,OAAA;AAAA,MACrB,QAAA,EAAU,sBAAsB,YAAY,CAAA;AAAA,MAC5C,MAAQ,EAAA,MACN,OAAO,oCAAuB,CAAE,CAAA,IAAA;AAAA,QAAK,CACnC,CAAA,KAAA,aAAA;AAAA,0BACE,GAAA;AAAA,YAAC,CAAE,CAAA,QAAA;AAAA,YAAF;AAAA,cACE,GAAG,MAAA;AAAA,cACJ,YAAA;AAAA,cACA;AAAA;AAAA;AACF;AACF;AACF,KACH,CAAA;AAAA;AAEL,CAAC,CAAA;AAED,MAAM,kBAAA,GAAqB,uBAAuB,iBAAkB,CAAA;AAAA,EAClE,IAAM,EAAA,sBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,MAAQ,EAAA;AAAA,MACN,WAAa,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,GAAU,QAAS,EAAA;AAAA,MACvC,SAAW,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,GAAU,QAAS,EAAA;AAAA,MACrC,aAAe,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,GAAU,QAAS,EAAA;AAAA,MACzC,eAAiB,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,GAAU,QAAS,EAAA;AAAA,MAC3C,cAAgB,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,GAAU,QAAS,EAAA;AAAA,MAC1C,kBAAoB,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,OAAA,GAAU,QAAS,EAAA;AAAA,MAC9C,eAAiB,EAAA,CAAA,CAAA,KAAK,CAAE,CAAA,MAAA,GAAS,QAAS,EAAA;AAAA,MAC1C,IAAA,EAAM,CAAK,CAAA,KAAA,CAAA,CAAE,IAAK,CAAA,CAAC,YAAY,SAAW,EAAA,MAAM,CAAC,CAAA,CAAE,QAAS,EAAA;AAAA,MAC5D,IAAA,EAAM,OAAK,CAAE,CAAA,IAAA,CAAK,CAAC,MAAQ,EAAA,MAAM,CAAC,CAAA,CAAE,QAAS;AAAA;AAC/C,GACF;AAAA,EACA,OAAS,EAAA,CAAC,eAAiB,EAAA,EAAE,QAAa,KAAA;AACxC,IAAA,OAAO,eAAgB,CAAA;AAAA,MACrB,IAAA,EAAM,OAAO,IAAQ,IAAA,OAAA;AAAA,MACrB,KAAA,EAAO,OAAO,KAAS,IAAA,KAAA;AAAA,MACvB,MAAQ,EAAA,YACN,OAAO,2DAAwD,CAAE,CAAA,IAAA;AAAA,QAC/D,CAAA,CAAA,KAAK,8BAAe,GAAA,CAAA,CAAA,CAAE,oBAAF,EAAsB,GAAG,QAAQ,CAAE;AAAA;AACzD,KACH,CAAA;AAAA;AAEL,CAAC,CAAA;AAGY,MAAA,WAAA,GAAc,iBAAiB,IAAK,CAAA;AAAA,EAC/C,MAAQ,EAAA;AAAA,IACN,KAAO,EAAA,KAAA;AAAA,IACP,QAAA,EAAU,sBAAsB,YAAY,CAAA;AAAA,IAC5C,IAAM,EAAA;AAAA;AAEV,CAAC;AAOD,YAAe,oBAAqB,CAAA;AAAA,EAClC,QAAU,EAAA,MAAA;AAAA,EACV,MAAM,EAAE,WAAA,EAAa,MAAM,OAAO,uBAAiB,CAAE,EAAA;AAAA,EACrD,QAAQ,sBAAuB,CAAA;AAAA,IAC7B,IAAM,EAAA;AAAA,GACP,CAAA;AAAA,EACD,UAAY,EAAA,CAAC,OAAS,EAAA,QAAA,EAAU,oBAAoB,WAAW;AACjE,CAAC,CAAA;;;;"}
1
+ {"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["import {\n ApiBlueprint,\n coreExtensionData,\n createExtensionBlueprint,\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 { QetaClient } 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';\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\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 },\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 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 />,\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 factory: (originalFactory, { config, apis }) => {\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 = (\n configApi?.getOptionalStringArray('qeta.entityKinds') ?? [\n 'system',\n 'component',\n ]\n )?.map(k => k.toLowerCase());\n const entityKind = entity.kind.toLowerCase();\n return supportedKinds?.includes(entityKind);\n },\n loader: async () =>\n import('./components/EntityPostsContent/EntityPostsContent.tsx').then(\n m => compatWrapper(<m.EntityPostsContent {...config} />),\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\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: [qetaApi, qetaPage, EntityPostsContent, qetaNavItem],\n});\n\nexport { qetaTranslationRef } from '@drodil/backstage-plugin-qeta-react';\n"],"names":[],"mappings":"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"}
@@ -2,18 +2,24 @@ import { jsx } from 'react/jsx-runtime';
2
2
  import { useState } from 'react';
3
3
  import { PostsContainer } from '@drodil/backstage-plugin-qeta-react';
4
4
  import { Content } from '@backstage/core-components';
5
- import { stringifyEntityRef } from '@backstage/catalog-model';
5
+ import { isUserEntity, stringifyEntityRef } from '@backstage/catalog-model';
6
6
  import { useEntity } from '@backstage/plugin-catalog-react';
7
7
  import { Container } from '@material-ui/core';
8
8
 
9
9
  const EntityPostsContent = (props) => {
10
10
  const [view, setView] = useState("list");
11
11
  const { entity } = useEntity();
12
+ const additionalProps = {};
13
+ if (isUserEntity(entity)) {
14
+ additionalProps.author = stringifyEntityRef(entity);
15
+ } else {
16
+ additionalProps.entity = props.entity ?? stringifyEntityRef(entity);
17
+ }
12
18
  return /* @__PURE__ */ jsx(Content, { children: /* @__PURE__ */ jsx(Container, { children: /* @__PURE__ */ jsx(
13
19
  PostsContainer,
14
20
  {
15
21
  ...props,
16
- entity: props.entity ? props.entity : stringifyEntityRef(entity),
22
+ ...additionalProps,
17
23
  view,
18
24
  onViewChange: setView
19
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EntityPostsContent.esm.js","sources":["../../../src/components/EntityPostsContent/EntityPostsContent.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n PostsContainer,\n PostsContainerProps,\n ViewType,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Content } from '@backstage/core-components';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport { Container } from '@material-ui/core';\n\nexport const EntityPostsContent = (props: PostsContainerProps) => {\n const [view, setView] = useState<ViewType>('list');\n const { entity } = useEntity();\n return (\n <Content>\n <Container>\n <PostsContainer\n {...props}\n entity={props.entity ? props.entity : stringifyEntityRef(entity)}\n view={view}\n onViewChange={setView}\n />\n </Container>\n </Content>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAWa,MAAA,kBAAA,GAAqB,CAAC,KAA+B,KAAA;AAChE,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAmB,MAAM,CAAA;AACjD,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA;AAC7B,EACE,uBAAA,GAAA,CAAC,OACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,SACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,QAAQ,KAAM,CAAA,MAAA,GAAS,KAAM,CAAA,MAAA,GAAS,mBAAmB,MAAM,CAAA;AAAA,MAC/D,IAAA;AAAA,MACA,YAAc,EAAA;AAAA;AAAA,KAElB,CACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"EntityPostsContent.esm.js","sources":["../../../src/components/EntityPostsContent/EntityPostsContent.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n PostsContainer,\n PostsContainerProps,\n ViewType,\n} from '@drodil/backstage-plugin-qeta-react';\nimport { Content } from '@backstage/core-components';\nimport { isUserEntity, stringifyEntityRef } from '@backstage/catalog-model';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport { Container } from '@material-ui/core';\n\nexport const EntityPostsContent = (props: PostsContainerProps) => {\n const [view, setView] = useState<ViewType>('list');\n const { entity } = useEntity();\n const additionalProps: PostsContainerProps = {};\n if (isUserEntity(entity)) {\n additionalProps.author = stringifyEntityRef(entity);\n } else {\n additionalProps.entity = props.entity ?? stringifyEntityRef(entity);\n }\n\n return (\n <Content>\n <Container>\n <PostsContainer\n {...props}\n {...additionalProps}\n view={view}\n onViewChange={setView}\n />\n </Container>\n </Content>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAWa,MAAA,kBAAA,GAAqB,CAAC,KAA+B,KAAA;AAChE,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAmB,MAAM,CAAA;AACjD,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA;AAC7B,EAAA,MAAM,kBAAuC,EAAC;AAC9C,EAAI,IAAA,YAAA,CAAa,MAAM,CAAG,EAAA;AACxB,IAAgB,eAAA,CAAA,MAAA,GAAS,mBAAmB,MAAM,CAAA;AAAA,GAC7C,MAAA;AACL,IAAA,eAAA,CAAgB,MAAS,GAAA,KAAA,CAAM,MAAU,IAAA,kBAAA,CAAmB,MAAM,CAAA;AAAA;AAGpE,EACE,uBAAA,GAAA,CAAC,OACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,SACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACH,GAAG,eAAA;AAAA,MACJ,IAAA;AAAA,MACA,YAAc,EAAA;AAAA;AAAA,KAElB,CACF,EAAA,CAAA;AAEJ;;;;"}
@@ -6,7 +6,7 @@ var keywords = [
6
6
  "frontend",
7
7
  "backstage.io"
8
8
  ];
9
- var version = "3.37.0";
9
+ var version = "3.38.0";
10
10
  var main = "src/index.ts";
11
11
  var types = "src/index.ts";
12
12
  var prepublishOnly = "yarn tsc && yarn build";
@@ -92,6 +92,7 @@ var resolutions = {
92
92
  var devDependencies = {
93
93
  "@backstage/cli": "backstage:^",
94
94
  "@backstage/dev-utils": "backstage:^",
95
+ "@backstage/frontend-defaults": "backstage:^",
95
96
  "@backstage/plugin-catalog": "backstage:^",
96
97
  "@backstage/plugin-home": "backstage:^",
97
98
  "@backstage/plugin-notifications": "backstage:^",
@@ -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.37.0",
10
+ "version": "3.38.0",
11
11
  "main": "./dist/index.esm.js",
12
12
  "types": "./dist/index.d.ts",
13
13
  "prepublishOnly": "yarn tsc && yarn build",
@@ -83,8 +83,8 @@
83
83
  "@backstage/plugin-search-common": "^1.2.19",
84
84
  "@backstage/plugin-search-react": "^1.9.4",
85
85
  "@backstage/plugin-signals-react": "^0.0.15",
86
- "@drodil/backstage-plugin-qeta-common": "^3.37.0",
87
- "@drodil/backstage-plugin-qeta-react": "^3.37.0",
86
+ "@drodil/backstage-plugin-qeta-common": "^3.38.0",
87
+ "@drodil/backstage-plugin-qeta-react": "^3.38.0",
88
88
  "@material-ui/core": "^4.12.2",
89
89
  "@material-ui/icons": "^4.11.3",
90
90
  "@material-ui/lab": "4.0.0-alpha.61",
@@ -105,6 +105,7 @@
105
105
  "devDependencies": {
106
106
  "@backstage/cli": "^0.34.3",
107
107
  "@backstage/dev-utils": "^1.1.14",
108
+ "@backstage/frontend-defaults": "^0.3.1",
108
109
  "@backstage/plugin-catalog": "^1.31.3",
109
110
  "@backstage/plugin-home": "^0.8.12",
110
111
  "@backstage/plugin-notifications": "^0.5.9",