@backstage/plugin-techdocs 1.18.0 → 1.18.1-next.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/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # @backstage/plugin-techdocs
2
2
 
3
+ ## 1.18.1-next.1
4
+
5
+ ### Patch Changes
6
+
7
+ - d421187: Reduced the initial app bundle size by loading page and optional UI implementations only when their extensions render.
8
+ - 9cb79f5: Use the catalog presentation API for TechDocs document titles and owner labels so entity display names are consistent with the rest of Backstage.
9
+ - Updated dependencies
10
+ - @backstage/core-components@0.18.14-next.1
11
+ - @backstage/integration@2.1.2-next.0
12
+ - @backstage/frontend-plugin-api@0.18.1-next.0
13
+ - @backstage/plugin-catalog-react@3.2.3-next.1
14
+ - @backstage/ui@0.18.0-next.1
15
+ - @backstage/integration-react@1.2.22-next.0
16
+ - @backstage/core-plugin-api@1.12.10-next.0
17
+ - @backstage/plugin-search-react@1.11.8-next.1
18
+ - @backstage/plugin-techdocs-react@1.3.15-next.1
19
+ - @backstage/catalog-client@1.16.2-next.0
20
+ - @backstage/plugin-auth-react@0.1.31-next.1
21
+
22
+ ## 1.18.1-next.0
23
+
24
+ ### Patch Changes
25
+
26
+ - Updated dependencies
27
+ - @backstage/ui@0.17.2-next.0
28
+ - @backstage/plugin-catalog-react@3.2.2-next.0
29
+ - @backstage/core-components@0.18.14-next.0
30
+ - @backstage/plugin-search-react@1.11.8-next.0
31
+ - @backstage/plugin-auth-react@0.1.31-next.0
32
+ - @backstage/plugin-techdocs-react@1.3.15-next.0
33
+
3
34
  ## 1.18.0
4
35
 
5
36
  ### Minor Changes
@@ -27,14 +27,7 @@ const TechDocsReaderEntityCard = (props) => {
27
27
  capitalize(entityMetadata.kind),
28
28
  ":"
29
29
  ] }) }),
30
- /* @__PURE__ */ jsx("dd", { className: styles.definitionValue, children: /* @__PURE__ */ jsx(
31
- EntityRefLink,
32
- {
33
- entityRef,
34
- title: entityMetadata.metadata.title,
35
- defaultKind: "Component"
36
- }
37
- ) })
30
+ /* @__PURE__ */ jsx("dd", { className: styles.definitionValue, children: /* @__PURE__ */ jsx(EntityRefLink, { entityRef, defaultKind: "Component" }) })
38
31
  ] }),
39
32
  ownedByRelations.length > 0 && /* @__PURE__ */ jsxs("div", { className: styles.definitionGroup, children: [
40
33
  /* @__PURE__ */ jsx("dt", { children: /* @__PURE__ */ jsx(Text, { variant: "body-small", weight: "bold", children: "Owner:" }) }),
@@ -1 +1 @@
1
- {"version":3,"file":"TechDocsReaderEntityCard.esm.js","sources":["../../../src/alpha/components/TechDocsReaderEntityCard.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useTechDocsReaderPage } from '@backstage/plugin-techdocs-react';\nimport {\n EntityRefLink,\n EntityRefLinks,\n getEntityRelations,\n} from '@backstage/plugin-catalog-react';\nimport { RELATION_OWNED_BY } from '@backstage/catalog-model';\nimport { Card, CardBody, Text } from '@backstage/ui';\nimport capitalize from 'lodash/capitalize';\nimport styles from './TechDocsReaderEntityCard.module.css';\nimport { TechDocsReaderSearch } from './TechDocsReaderSearch';\n\nexport type TechDocsReaderEntityCardProps = {\n withSearch?: boolean;\n};\n\nexport const TechDocsReaderEntityCard = (\n props: TechDocsReaderEntityCardProps,\n) => {\n const { withSearch } = props;\n const {\n entityRef,\n entityMetadata: { value: entityMetadata, loading: entityMetadataLoading },\n } = useTechDocsReaderPage();\n\n if (entityMetadataLoading || !entityMetadata) return null;\n\n const { spec } = entityMetadata;\n const lifecycle = spec?.lifecycle;\n const ownedByRelations = getEntityRelations(\n entityMetadata,\n RELATION_OWNED_BY,\n );\n\n return (\n <Card className={styles.entityCard}>\n <CardBody className={styles.cardBody}>\n <dl className={styles.definitionList}>\n <div className={styles.definitionGroup}>\n <dt>\n <Text variant=\"body-small\" weight=\"bold\">\n {capitalize(entityMetadata.kind)}:\n </Text>\n </dt>\n <dd className={styles.definitionValue}>\n <EntityRefLink\n entityRef={entityRef}\n title={entityMetadata.metadata.title}\n defaultKind=\"Component\"\n />\n </dd>\n </div>\n {ownedByRelations.length > 0 && (\n <div className={styles.definitionGroup}>\n <dt>\n <Text variant=\"body-small\" weight=\"bold\">\n Owner:\n </Text>\n </dt>\n <dd className={styles.definitionValue}>\n <EntityRefLinks\n entityRefs={ownedByRelations}\n defaultKind=\"group\"\n />\n </dd>\n </div>\n )}\n {lifecycle && (\n <div className={styles.definitionGroup}>\n <dt>\n <Text variant=\"body-small\" weight=\"bold\">\n Lifecycle:\n </Text>\n </dt>\n <dd className={styles.definitionValue}>\n <Text variant=\"body-small\">{String(lifecycle)}</Text>\n </dd>\n </div>\n )}\n </dl>\n {withSearch && (\n <div className={styles.searchWrapper}>\n <TechDocsReaderSearch entityId={entityRef} />\n </div>\n )}\n </CardBody>\n </Card>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TechDocsReaderEntityCard.esm.js","sources":["../../../src/alpha/components/TechDocsReaderEntityCard.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useTechDocsReaderPage } from '@backstage/plugin-techdocs-react';\nimport {\n EntityRefLink,\n EntityRefLinks,\n getEntityRelations,\n} from '@backstage/plugin-catalog-react';\nimport { RELATION_OWNED_BY } from '@backstage/catalog-model';\nimport { Card, CardBody, Text } from '@backstage/ui';\nimport capitalize from 'lodash/capitalize';\nimport styles from './TechDocsReaderEntityCard.module.css';\nimport { TechDocsReaderSearch } from './TechDocsReaderSearch';\n\nexport type TechDocsReaderEntityCardProps = {\n withSearch?: boolean;\n};\n\nexport const TechDocsReaderEntityCard = (\n props: TechDocsReaderEntityCardProps,\n) => {\n const { withSearch } = props;\n const {\n entityRef,\n entityMetadata: { value: entityMetadata, loading: entityMetadataLoading },\n } = useTechDocsReaderPage();\n\n if (entityMetadataLoading || !entityMetadata) return null;\n\n const { spec } = entityMetadata;\n const lifecycle = spec?.lifecycle;\n const ownedByRelations = getEntityRelations(\n entityMetadata,\n RELATION_OWNED_BY,\n );\n\n return (\n <Card className={styles.entityCard}>\n <CardBody className={styles.cardBody}>\n <dl className={styles.definitionList}>\n <div className={styles.definitionGroup}>\n <dt>\n <Text variant=\"body-small\" weight=\"bold\">\n {capitalize(entityMetadata.kind)}:\n </Text>\n </dt>\n <dd className={styles.definitionValue}>\n <EntityRefLink entityRef={entityRef} defaultKind=\"Component\" />\n </dd>\n </div>\n {ownedByRelations.length > 0 && (\n <div className={styles.definitionGroup}>\n <dt>\n <Text variant=\"body-small\" weight=\"bold\">\n Owner:\n </Text>\n </dt>\n <dd className={styles.definitionValue}>\n <EntityRefLinks\n entityRefs={ownedByRelations}\n defaultKind=\"group\"\n />\n </dd>\n </div>\n )}\n {lifecycle && (\n <div className={styles.definitionGroup}>\n <dt>\n <Text variant=\"body-small\" weight=\"bold\">\n Lifecycle:\n </Text>\n </dt>\n <dd className={styles.definitionValue}>\n <Text variant=\"body-small\">{String(lifecycle)}</Text>\n </dd>\n </div>\n )}\n </dl>\n {withSearch && (\n <div className={styles.searchWrapper}>\n <TechDocsReaderSearch entityId={entityRef} />\n </div>\n )}\n </CardBody>\n </Card>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAgCO,MAAM,wBAAA,GAA2B,CACtC,KAAA,KACG;AACH,EAAA,MAAM,EAAE,YAAW,GAAI,KAAA;AACvB,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,cAAA,EAAgB,EAAE,KAAA,EAAO,cAAA,EAAgB,SAAS,qBAAA;AAAsB,MACtE,qBAAA,EAAsB;AAE1B,EAAA,IAAI,qBAAA,IAAyB,CAAC,cAAA,EAAgB,OAAO,IAAA;AAErD,EAAA,MAAM,EAAE,MAAK,GAAI,cAAA;AACjB,EAAA,MAAM,YAAY,IAAA,EAAM,SAAA;AACxB,EAAA,MAAM,gBAAA,GAAmB,kBAAA;AAAA,IACvB,cAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBACE,GAAA,CAAC,QAAK,SAAA,EAAW,MAAA,CAAO,YACtB,QAAA,kBAAA,IAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAW,MAAA,CAAO,QAAA,EAC1B,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,MAAA,CAAO,cAAA,EACpB,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,eAAA,EACrB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QACC,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,YAAA,EAAa,QAAO,MAAA,EAC/B,QAAA,EAAA;AAAA,UAAA,UAAA,CAAW,eAAe,IAAI,CAAA;AAAA,UAAE;AAAA,SAAA,EACnC,CAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,MAAA,CAAO,eAAA,EACpB,8BAAC,aAAA,EAAA,EAAc,SAAA,EAAsB,WAAA,EAAY,WAAA,EAAY,CAAA,EAC/D;AAAA,OAAA,EACF,CAAA;AAAA,MACC,iBAAiB,MAAA,GAAS,CAAA,yBACxB,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,eAAA,EACrB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EACC,8BAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,cAAa,MAAA,EAAO,MAAA,EAAO,oBAEzC,CAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,MAAA,CAAO,eAAA,EACpB,QAAA,kBAAA,GAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,UAAA,EAAY,gBAAA;AAAA,YACZ,WAAA,EAAY;AAAA;AAAA,SACd,EACF;AAAA,OAAA,EACF,CAAA;AAAA,MAED,SAAA,oBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,eAAA,EACrB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EACC,8BAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,cAAa,MAAA,EAAO,MAAA,EAAO,wBAEzC,CAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,MAAA,CAAO,eAAA,EACpB,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,YAAA,EAAc,QAAA,EAAA,MAAA,CAAO,SAAS,CAAA,EAAE,CAAA,EAChD;AAAA,OAAA,EACF;AAAA,KAAA,EAEJ,CAAA;AAAA,IACC,UAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,eACrB,QAAA,kBAAA,GAAA,CAAC,oBAAA,EAAA,EAAqB,QAAA,EAAU,SAAA,EAAW,CAAA,EAC7C;AAAA,GAAA,EAEJ,CAAA,EACF,CAAA;AAEJ;;;;"}
@@ -0,0 +1,32 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { Suspense } from 'react';
3
+ import { TechDocsAddons } from '@backstage/plugin-techdocs-react';
4
+ import { attachTechDocsAddonComponentData } from '@backstage/plugin-techdocs-react/alpha';
5
+ import { TechDocsReaderRouter, EmbeddedDocsRouter } from '../../Router.esm.js';
6
+ import { TechDocsReaderLayout } from './TechDocsReaderLayout.esm.js';
7
+
8
+ function Addons(props) {
9
+ return /* @__PURE__ */ jsx(TechDocsAddons, { children: props.options.map((options) => {
10
+ const Addon = options.component;
11
+ attachTechDocsAddonComponentData(Addon, options);
12
+ return /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(Addon, {}) }, options.name);
13
+ }) });
14
+ }
15
+ function TechDocsReaderPage(props) {
16
+ return /* @__PURE__ */ jsxs(TechDocsReaderRouter, { children: [
17
+ /* @__PURE__ */ jsx(
18
+ TechDocsReaderLayout,
19
+ {
20
+ withSearch: props.withSearch,
21
+ withHeader: props.withHeader
22
+ }
23
+ ),
24
+ /* @__PURE__ */ jsx(Addons, { options: props.addonOptions })
25
+ ] });
26
+ }
27
+ function TechDocsEntityContent(props) {
28
+ return /* @__PURE__ */ jsx(EmbeddedDocsRouter, { emptyState: props.emptyState, children: /* @__PURE__ */ jsx(Addons, { options: props.addonOptions }) });
29
+ }
30
+
31
+ export { TechDocsEntityContent, TechDocsReaderPage };
32
+ //# sourceMappingURL=TechDocsReaderPage.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TechDocsReaderPage.esm.js","sources":["../../../src/alpha/components/TechDocsReaderPage.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ReactElement, Suspense } from 'react';\nimport {\n TechDocsAddons,\n type TechDocsAddonOptions,\n} from '@backstage/plugin-techdocs-react';\nimport { attachTechDocsAddonComponentData } from '@backstage/plugin-techdocs-react/alpha';\nimport { EmbeddedDocsRouter, TechDocsReaderRouter } from '../../Router';\nimport { TechDocsReaderLayout } from './TechDocsReaderLayout';\n\nfunction Addons(props: { options: TechDocsAddonOptions[] }) {\n return (\n <TechDocsAddons>\n {props.options.map(options => {\n const Addon = options.component;\n attachTechDocsAddonComponentData(Addon, options);\n return (\n <Suspense key={options.name} fallback={null}>\n <Addon />\n </Suspense>\n );\n })}\n </TechDocsAddons>\n );\n}\n\nexport function TechDocsReaderPage(props: {\n addonOptions: TechDocsAddonOptions[];\n withSearch: boolean;\n withHeader: boolean;\n}) {\n return (\n <TechDocsReaderRouter>\n <TechDocsReaderLayout\n withSearch={props.withSearch}\n withHeader={props.withHeader}\n />\n <Addons options={props.addonOptions} />\n </TechDocsReaderRouter>\n );\n}\n\nexport function TechDocsEntityContent(props: {\n addonOptions: TechDocsAddonOptions[];\n emptyState?: ReactElement;\n}) {\n return (\n <EmbeddedDocsRouter emptyState={props.emptyState}>\n <Addons options={props.addonOptions} />\n </EmbeddedDocsRouter>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAyBA,SAAS,OAAO,KAAA,EAA4C;AAC1D,EAAA,uBACE,GAAA,CAAC,cAAA,EAAA,EACE,QAAA,EAAA,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,OAAA,KAAW;AAC5B,IAAA,MAAM,QAAQ,OAAA,CAAQ,SAAA;AACtB,IAAA,gCAAA,CAAiC,OAAO,OAAO,CAAA;AAC/C,IAAA,uBACE,GAAA,CAAC,YAA4B,QAAA,EAAU,IAAA,EACrC,8BAAC,KAAA,EAAA,EAAM,CAAA,EAAA,EADM,QAAQ,IAEvB,CAAA;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ;AAEO,SAAS,mBAAmB,KAAA,EAIhC;AACD,EAAA,4BACG,oBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,YAAY,KAAA,CAAM;AAAA;AAAA,KACpB;AAAA,oBACA,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAS,KAAA,CAAM,YAAA,EAAc;AAAA,GAAA,EACvC,CAAA;AAEJ;AAEO,SAAS,sBAAsB,KAAA,EAGnC;AACD,EAAA,uBACE,GAAA,CAAC,kBAAA,EAAA,EAAmB,UAAA,EAAY,KAAA,CAAM,UAAA,EACpC,8BAAC,MAAA,EAAA,EAAO,OAAA,EAAS,KAAA,CAAM,YAAA,EAAc,CAAA,EACvC,CAAA;AAEJ;;;;"}
package/dist/alpha.esm.js CHANGED
@@ -1,19 +1,17 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { Suspense } from 'react';
1
+ import { jsx } from 'react/jsx-runtime';
3
2
  import { z } from 'zod/v4';
4
3
  import { RiArticleLine } from '@remixicon/react';
5
4
  import { ApiBlueprint, PageBlueprint, createExtensionInput, coreExtensionData, createExtension, PluginHeaderActionBlueprint, createFrontendPlugin } from '@backstage/frontend-plugin-api';
6
5
  import { fetchApiRef, discoveryApiRef, configApiRef } from '@backstage/core-plugin-api';
7
6
  import { EntityIconLinkBlueprint, EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';
8
7
  import { SearchResultListItemBlueprint, SearchFilterResultTypeBlueprint } from '@backstage/plugin-search-react/alpha';
9
- import { AddonBlueprint, attachTechDocsAddonComponentData } from '@backstage/plugin-techdocs-react/alpha';
8
+ import { AddonBlueprint } from '@backstage/plugin-techdocs-react/alpha';
10
9
  import { techdocsAddonsApiRef, TechDocsAddonsApiExtension } from './alpha/addonsApi.esm.js';
11
10
  import { TechDocsStorageClient, TechDocsClient } from './client.esm.js';
12
11
  import { rootRouteRef, rootDocsRouteRef, rootCatalogDocsRouteRef } from './routes.esm.js';
13
- import { TechDocsReaderLayout } from './alpha/components/TechDocsReaderLayout.esm.js';
14
- import { techdocsStorageApiRef, techdocsApiRef, TechDocsAddons } from '@backstage/plugin-techdocs-react';
12
+ import { techdocsStorageApiRef, techdocsApiRef } from '@backstage/plugin-techdocs-react';
15
13
  import { useTechdocsReaderIconLinkProps } from './alpha/hooks/useTechdocsReaderIconLinkProps.esm.js';
16
- import { DocsIcon, SupportButton } from '@backstage/core-components';
14
+ import { DocsIcon } from '@backstage/core-components';
17
15
  export { techdocsTranslationRef } from './translation.esm.js';
18
16
 
19
17
  const techdocsEntityIconLink = EntityIconLinkBlueprint.make({
@@ -112,21 +110,15 @@ const techDocsReaderPage = PageBlueprint.makeWithOverrides({
112
110
  (output) => output.get(AddonBlueprint.dataRefs.addon)
113
111
  );
114
112
  const addonOptions = [...apiAddons, ...directAddons];
115
- const addons = addonOptions.map((options) => {
116
- const Addon = options.component;
117
- attachTechDocsAddonComponentData(Addon, options);
118
- return /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(Addon, {}) }, options.name);
119
- });
120
- return import('./Router.esm.js').then(({ TechDocsReaderRouter }) => /* @__PURE__ */ jsxs(TechDocsReaderRouter, { children: [
121
- /* @__PURE__ */ jsx(
122
- TechDocsReaderLayout,
123
- {
124
- withSearch: !config.withoutSearch,
125
- withHeader: !config.withoutHeader
126
- }
127
- ),
128
- /* @__PURE__ */ jsx(TechDocsAddons, { children: addons })
129
- ] }));
113
+ const { TechDocsReaderPage } = await import('./alpha/components/TechDocsReaderPage.esm.js');
114
+ return /* @__PURE__ */ jsx(
115
+ TechDocsReaderPage,
116
+ {
117
+ addonOptions,
118
+ withSearch: !config.withoutSearch,
119
+ withHeader: !config.withoutHeader
120
+ }
121
+ );
130
122
  }
131
123
  });
132
124
  }
@@ -156,18 +148,13 @@ const techDocsEntityContent = EntityContentBlueprint.makeWithOverrides({
156
148
  (output) => output.get(AddonBlueprint.dataRefs.addon)
157
149
  );
158
150
  const addonOptions = [...apiAddons, ...directAddons];
159
- const addons = addonOptions.map((options) => {
160
- const Addon = options.component;
161
- attachTechDocsAddonComponentData(Addon, options);
162
- return /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(Addon, {}) }, options.name);
163
- });
164
- return import('./Router.esm.js').then(({ EmbeddedDocsRouter }) => /* @__PURE__ */ jsx(
165
- EmbeddedDocsRouter,
151
+ return import('./alpha/components/TechDocsReaderPage.esm.js').then((m) => /* @__PURE__ */ jsx(
152
+ m.TechDocsEntityContent,
166
153
  {
154
+ addonOptions,
167
155
  emptyState: context.inputs.emptyState?.get(
168
156
  coreExtensionData.reactElement
169
- ),
170
- children: /* @__PURE__ */ jsx(TechDocsAddons, { children: addons })
157
+ )
171
158
  }
172
159
  ));
173
160
  }
@@ -185,7 +172,7 @@ const techDocsEntityContentEmptyState = createExtension({
185
172
  });
186
173
  const techDocsSupportAction = PluginHeaderActionBlueprint.make({
187
174
  params: (defineParams) => defineParams({
188
- loader: async () => /* @__PURE__ */ jsx(SupportButton, { children: "Discover documentation in your ecosystem." })
175
+ loader: () => import('@backstage/core-components').then(({ SupportButton }) => /* @__PURE__ */ jsx(SupportButton, { children: "Discover documentation in your ecosystem." }))
189
176
  })
190
177
  });
191
178
  var index = createFrontendPlugin({
@@ -1 +1 @@
1
- {"version":3,"file":"alpha.esm.js","sources":["../src/alpha/index.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Suspense } from 'react';\nimport { z } from 'zod/v4';\nimport { RiArticleLine } from '@remixicon/react';\nimport {\n createFrontendPlugin,\n ApiBlueprint,\n PageBlueprint,\n PluginHeaderActionBlueprint,\n createExtensionInput,\n coreExtensionData,\n createExtension,\n} from '@backstage/frontend-plugin-api';\nimport {\n configApiRef,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\nimport {\n EntityContentBlueprint,\n EntityIconLinkBlueprint,\n} from '@backstage/plugin-catalog-react/alpha';\nimport {\n SearchFilterResultTypeBlueprint,\n SearchResultListItemBlueprint,\n} from '@backstage/plugin-search-react/alpha';\nimport {\n AddonBlueprint,\n attachTechDocsAddonComponentData,\n} from '@backstage/plugin-techdocs-react/alpha';\nimport { TechDocsAddonsApiExtension, techdocsAddonsApiRef } from './addonsApi';\nimport { TechDocsClient, TechDocsStorageClient } from '../client';\nimport {\n rootCatalogDocsRouteRef,\n rootDocsRouteRef,\n rootRouteRef,\n} from '../routes';\nimport { TechDocsReaderLayout } from './components/TechDocsReaderLayout';\nimport {\n TechDocsAddons,\n techdocsApiRef,\n techdocsStorageApiRef,\n} from '@backstage/plugin-techdocs-react';\n\nimport { useTechdocsReaderIconLinkProps } from './hooks/useTechdocsReaderIconLinkProps';\nimport { DocsIcon, SupportButton } from '@backstage/core-components';\n\n/** @alpha */\nconst techdocsEntityIconLink = EntityIconLinkBlueprint.make({\n name: 'read-docs',\n params: {\n useProps: useTechdocsReaderIconLinkProps,\n },\n});\n\n/** @alpha */\nconst techDocsStorageApi = ApiBlueprint.make({\n name: 'storage',\n params: defineParams =>\n defineParams({\n api: techdocsStorageApiRef,\n deps: {\n configApi: configApiRef,\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ configApi, discoveryApi, fetchApi }) =>\n new TechDocsStorageClient({\n configApi,\n discoveryApi,\n fetchApi,\n }),\n }),\n});\n\n/** @alpha */\nconst techDocsClientApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\n api: techdocsApiRef,\n deps: {\n configApi: configApiRef,\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ configApi, discoveryApi, fetchApi }) =>\n new TechDocsClient({\n configApi,\n discoveryApi,\n fetchApi,\n }),\n }),\n});\n\n/** @alpha */\nexport const techDocsSearchResultListItemExtension =\n SearchResultListItemBlueprint.makeWithOverrides({\n configSchema: {\n title: z.string().optional(),\n lineClamp: z.number().default(5),\n asLink: z.boolean().default(true),\n asListItem: z.boolean().default(true),\n },\n factory(originalFactory, { config }) {\n return originalFactory({\n icon: <DocsIcon />,\n predicate: result => result.type === 'techdocs',\n component: async () => {\n const { TechDocsSearchResultListItem } = await import(\n '../search/components/TechDocsSearchResultListItem'\n );\n return props => (\n <TechDocsSearchResultListItem {...props} {...config} />\n );\n },\n });\n },\n });\n\nconst techDocsSearchFilterResultTypeExtension =\n SearchFilterResultTypeBlueprint.make({\n params: {\n value: 'techdocs',\n name: 'Documentation',\n icon: <DocsIcon />,\n },\n });\n\n/**\n * Responsible for rendering the provided router element\n *\n * @alpha\n */\nconst techDocsPage = PageBlueprint.makeWithOverrides({\n configSchema: {\n initialFilter: z.enum(['all', 'owned', 'starred']).default('owned'),\n },\n factory(originalFactory, { config }) {\n return originalFactory({\n path: '/docs',\n routeRef: rootRouteRef,\n title: 'Docs',\n icon: <RiArticleLine />,\n loader: () =>\n import('./components/TechDocsIndexPageContent').then(m => (\n <m.TechDocsIndexPageContent initialFilter={config.initialFilter} />\n )),\n });\n },\n});\n\n/**\n * Component responsible for composing a TechDocs reader page experience\n *\n * @alpha\n */\nconst techDocsReaderPage = PageBlueprint.makeWithOverrides({\n name: 'reader',\n inputs: {\n addons: createExtensionInput([AddonBlueprint.dataRefs.addon]),\n },\n configSchema: {\n withoutSearch: z.boolean().default(false),\n withoutHeader: z.boolean().default(false),\n },\n factory(originalFactory, { apis, inputs, config }) {\n const addonsApi = apis.get(techdocsAddonsApiRef);\n\n return originalFactory({\n path: '/docs/:namespace/:kind/:name',\n routeRef: rootDocsRouteRef,\n loader: async () => {\n // Merge addons from the API with old-style direct attachments\n const apiAddons = addonsApi?.getAddons() ?? [];\n const directAddons = inputs.addons.map(output =>\n output.get(AddonBlueprint.dataRefs.addon),\n );\n const addonOptions = [...apiAddons, ...directAddons];\n\n const addons = addonOptions.map(options => {\n const Addon = options.component;\n attachTechDocsAddonComponentData(Addon, options);\n return (\n <Suspense key={options.name} fallback={null}>\n <Addon />\n </Suspense>\n );\n });\n\n return import('../Router').then(({ TechDocsReaderRouter }) => (\n <TechDocsReaderRouter>\n <TechDocsReaderLayout\n withSearch={!config.withoutSearch}\n withHeader={!config.withoutHeader}\n />\n <TechDocsAddons>{addons}</TechDocsAddons>\n </TechDocsReaderRouter>\n ));\n },\n });\n },\n});\n\n/**\n * Component responsible for rendering techdocs on entity pages\n *\n * @alpha\n */\nconst techDocsEntityContent = EntityContentBlueprint.makeWithOverrides({\n inputs: {\n addons: createExtensionInput([AddonBlueprint.dataRefs.addon]),\n emptyState: createExtensionInput(\n [coreExtensionData.reactElement.optional()],\n {\n singleton: true,\n optional: true,\n },\n ),\n },\n factory(originalFactory, context) {\n const addonsApi = context.apis.get(techdocsAddonsApiRef);\n\n return originalFactory(\n {\n path: 'docs',\n title: 'TechDocs',\n group: 'documentation',\n routeRef: rootCatalogDocsRouteRef,\n loader: () => {\n // Merge addons from the API with old-style direct attachments\n const apiAddons = addonsApi?.getAddons() ?? [];\n const directAddons = context.inputs.addons.map(output =>\n output.get(AddonBlueprint.dataRefs.addon),\n );\n const addonOptions = [...apiAddons, ...directAddons];\n\n const addons = addonOptions.map(options => {\n const Addon = options.component;\n attachTechDocsAddonComponentData(Addon, options);\n return (\n <Suspense key={options.name} fallback={null}>\n <Addon />\n </Suspense>\n );\n });\n\n return import('../Router').then(({ EmbeddedDocsRouter }) => (\n <EmbeddedDocsRouter\n emptyState={context.inputs.emptyState?.get(\n coreExtensionData.reactElement,\n )}\n >\n <TechDocsAddons>{addons}</TechDocsAddons>\n </EmbeddedDocsRouter>\n ));\n },\n },\n context,\n );\n },\n});\n\nconst techDocsEntityContentEmptyState = createExtension({\n kind: 'empty-state',\n name: 'entity-content',\n attachTo: { id: 'entity-content:techdocs', input: 'emptyState' },\n output: [coreExtensionData.reactElement.optional()],\n factory: () => [],\n});\n\nconst techDocsSupportAction = PluginHeaderActionBlueprint.make({\n params: defineParams =>\n defineParams({\n loader: async () => (\n <SupportButton>Discover documentation in your ecosystem.</SupportButton>\n ),\n }),\n});\n\n/** @alpha */\nexport default createFrontendPlugin({\n pluginId: 'techdocs',\n title: 'Documentation',\n icon: <RiArticleLine />,\n info: { packageJson: () => import('../../package.json') },\n extensions: [\n techDocsClientApi,\n techDocsStorageApi,\n TechDocsAddonsApiExtension,\n techDocsSupportAction,\n techDocsPage,\n techDocsReaderPage,\n techdocsEntityIconLink,\n techDocsEntityContent,\n techDocsEntityContentEmptyState,\n techDocsSearchFilterResultTypeExtension,\n techDocsSearchResultListItemExtension,\n ],\n routes: {\n root: rootRouteRef,\n docRoot: rootDocsRouteRef,\n entityContent: rootCatalogDocsRouteRef,\n },\n});\n\n/** @alpha */\nexport { techdocsTranslationRef } from '../translation';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"alpha.esm.js","sources":["../src/alpha/index.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { z } from 'zod/v4';\nimport { RiArticleLine } from '@remixicon/react';\nimport {\n createFrontendPlugin,\n ApiBlueprint,\n PageBlueprint,\n PluginHeaderActionBlueprint,\n createExtensionInput,\n coreExtensionData,\n createExtension,\n} from '@backstage/frontend-plugin-api';\nimport {\n configApiRef,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\nimport {\n EntityContentBlueprint,\n EntityIconLinkBlueprint,\n} from '@backstage/plugin-catalog-react/alpha';\nimport {\n SearchFilterResultTypeBlueprint,\n SearchResultListItemBlueprint,\n} from '@backstage/plugin-search-react/alpha';\nimport { AddonBlueprint } from '@backstage/plugin-techdocs-react/alpha';\nimport { TechDocsAddonsApiExtension, techdocsAddonsApiRef } from './addonsApi';\nimport { TechDocsClient, TechDocsStorageClient } from '../client';\nimport {\n rootCatalogDocsRouteRef,\n rootDocsRouteRef,\n rootRouteRef,\n} from '../routes';\nimport {\n techdocsApiRef,\n techdocsStorageApiRef,\n} from '@backstage/plugin-techdocs-react';\n\nimport { useTechdocsReaderIconLinkProps } from './hooks/useTechdocsReaderIconLinkProps';\nimport { DocsIcon } from '@backstage/core-components';\n\n/** @alpha */\nconst techdocsEntityIconLink = EntityIconLinkBlueprint.make({\n name: 'read-docs',\n params: {\n useProps: useTechdocsReaderIconLinkProps,\n },\n});\n\n/** @alpha */\nconst techDocsStorageApi = ApiBlueprint.make({\n name: 'storage',\n params: defineParams =>\n defineParams({\n api: techdocsStorageApiRef,\n deps: {\n configApi: configApiRef,\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ configApi, discoveryApi, fetchApi }) =>\n new TechDocsStorageClient({\n configApi,\n discoveryApi,\n fetchApi,\n }),\n }),\n});\n\n/** @alpha */\nconst techDocsClientApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\n api: techdocsApiRef,\n deps: {\n configApi: configApiRef,\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ configApi, discoveryApi, fetchApi }) =>\n new TechDocsClient({\n configApi,\n discoveryApi,\n fetchApi,\n }),\n }),\n});\n\n/** @alpha */\nexport const techDocsSearchResultListItemExtension =\n SearchResultListItemBlueprint.makeWithOverrides({\n configSchema: {\n title: z.string().optional(),\n lineClamp: z.number().default(5),\n asLink: z.boolean().default(true),\n asListItem: z.boolean().default(true),\n },\n factory(originalFactory, { config }) {\n return originalFactory({\n icon: <DocsIcon />,\n predicate: result => result.type === 'techdocs',\n component: async () => {\n const { TechDocsSearchResultListItem } = await import(\n '../search/components/TechDocsSearchResultListItem'\n );\n return props => (\n <TechDocsSearchResultListItem {...props} {...config} />\n );\n },\n });\n },\n });\n\nconst techDocsSearchFilterResultTypeExtension =\n SearchFilterResultTypeBlueprint.make({\n params: {\n value: 'techdocs',\n name: 'Documentation',\n icon: <DocsIcon />,\n },\n });\n\n/**\n * Responsible for rendering the provided router element\n *\n * @alpha\n */\nconst techDocsPage = PageBlueprint.makeWithOverrides({\n configSchema: {\n initialFilter: z.enum(['all', 'owned', 'starred']).default('owned'),\n },\n factory(originalFactory, { config }) {\n return originalFactory({\n path: '/docs',\n routeRef: rootRouteRef,\n title: 'Docs',\n icon: <RiArticleLine />,\n loader: () =>\n import('./components/TechDocsIndexPageContent').then(m => (\n <m.TechDocsIndexPageContent initialFilter={config.initialFilter} />\n )),\n });\n },\n});\n\n/**\n * Component responsible for composing a TechDocs reader page experience\n *\n * @alpha\n */\nconst techDocsReaderPage = PageBlueprint.makeWithOverrides({\n name: 'reader',\n inputs: {\n addons: createExtensionInput([AddonBlueprint.dataRefs.addon]),\n },\n configSchema: {\n withoutSearch: z.boolean().default(false),\n withoutHeader: z.boolean().default(false),\n },\n factory(originalFactory, { apis, inputs, config }) {\n const addonsApi = apis.get(techdocsAddonsApiRef);\n\n return originalFactory({\n path: '/docs/:namespace/:kind/:name',\n routeRef: rootDocsRouteRef,\n loader: async () => {\n // Merge addons from the API with old-style direct attachments\n const apiAddons = addonsApi?.getAddons() ?? [];\n const directAddons = inputs.addons.map(output =>\n output.get(AddonBlueprint.dataRefs.addon),\n );\n const addonOptions = [...apiAddons, ...directAddons];\n const { TechDocsReaderPage } = await import(\n './components/TechDocsReaderPage'\n );\n return (\n <TechDocsReaderPage\n addonOptions={addonOptions}\n withSearch={!config.withoutSearch}\n withHeader={!config.withoutHeader}\n />\n );\n },\n });\n },\n});\n\n/**\n * Component responsible for rendering techdocs on entity pages\n *\n * @alpha\n */\nconst techDocsEntityContent = EntityContentBlueprint.makeWithOverrides({\n inputs: {\n addons: createExtensionInput([AddonBlueprint.dataRefs.addon]),\n emptyState: createExtensionInput(\n [coreExtensionData.reactElement.optional()],\n {\n singleton: true,\n optional: true,\n },\n ),\n },\n factory(originalFactory, context) {\n const addonsApi = context.apis.get(techdocsAddonsApiRef);\n\n return originalFactory(\n {\n path: 'docs',\n title: 'TechDocs',\n group: 'documentation',\n routeRef: rootCatalogDocsRouteRef,\n loader: () => {\n // Merge addons from the API with old-style direct attachments\n const apiAddons = addonsApi?.getAddons() ?? [];\n const directAddons = context.inputs.addons.map(output =>\n output.get(AddonBlueprint.dataRefs.addon),\n );\n const addonOptions = [...apiAddons, ...directAddons];\n return import('./components/TechDocsReaderPage').then(m => (\n <m.TechDocsEntityContent\n addonOptions={addonOptions}\n emptyState={context.inputs.emptyState?.get(\n coreExtensionData.reactElement,\n )}\n />\n ));\n },\n },\n context,\n );\n },\n});\n\nconst techDocsEntityContentEmptyState = createExtension({\n kind: 'empty-state',\n name: 'entity-content',\n attachTo: { id: 'entity-content:techdocs', input: 'emptyState' },\n output: [coreExtensionData.reactElement.optional()],\n factory: () => [],\n});\n\nconst techDocsSupportAction = PluginHeaderActionBlueprint.make({\n params: defineParams =>\n defineParams({\n loader: () =>\n import('@backstage/core-components').then(({ SupportButton }) => (\n <SupportButton>\n Discover documentation in your ecosystem.\n </SupportButton>\n )),\n }),\n});\n\n/** @alpha */\nexport default createFrontendPlugin({\n pluginId: 'techdocs',\n title: 'Documentation',\n icon: <RiArticleLine />,\n info: { packageJson: () => import('../../package.json') },\n extensions: [\n techDocsClientApi,\n techDocsStorageApi,\n TechDocsAddonsApiExtension,\n techDocsSupportAction,\n techDocsPage,\n techDocsReaderPage,\n techdocsEntityIconLink,\n techDocsEntityContent,\n techDocsEntityContentEmptyState,\n techDocsSearchFilterResultTypeExtension,\n techDocsSearchResultListItemExtension,\n ],\n routes: {\n root: rootRouteRef,\n docRoot: rootDocsRouteRef,\n entityContent: rootCatalogDocsRouteRef,\n },\n});\n\n/** @alpha */\nexport { techdocsTranslationRef } from '../translation';\n"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { rootDocsRouteRef } from '../../../routes.esm.js';
3
3
  import { toLowerMaybe } from '../../../helpers.esm.js';
4
4
  import { useRouteRef, useApi, configApiRef } from '@backstage/core-plugin-api';
5
5
  import { ItemCardGrid, ItemCardHeader, LinkButton } from '@backstage/core-components';
6
+ import { EntityDisplayName } from '@backstage/plugin-catalog-react';
6
7
  import Card from '@material-ui/core/Card';
7
8
  import CardActions from '@material-ui/core/CardActions';
8
9
  import CardContent from '@material-ui/core/CardContent';
@@ -17,7 +18,7 @@ const DocsCardGrid = (props) => {
17
18
  /* @__PURE__ */ jsx(CardMedia, { children: /* @__PURE__ */ jsx(
18
19
  ItemCardHeader,
19
20
  {
20
- title: entity.metadata.title ?? entity.metadata.name
21
+ title: /* @__PURE__ */ jsx(EntityDisplayName, { entityRef: entity })
21
22
  }
22
23
  ) }),
23
24
  /* @__PURE__ */ jsx(CardContent, { children: entity.metadata.description }),
@@ -1 +1 @@
1
- {"version":3,"file":"DocsCardGrid.esm.js","sources":["../../../../src/home/components/Grids/DocsCardGrid.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { rootDocsRouteRef } from '../../../routes';\nimport { toLowerMaybe } from '../../../helpers';\nimport { Entity } from '@backstage/catalog-model';\nimport { useApi, useRouteRef, configApiRef } from '@backstage/core-plugin-api';\nimport {\n LinkButton,\n ItemCardGrid,\n ItemCardHeader,\n} from '@backstage/core-components';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardMedia from '@material-ui/core/CardMedia';\n\n/**\n * Props for {@link DocsCardGrid}\n *\n * @public\n */\nexport type DocsCardGridProps = {\n entities: Entity[] | undefined;\n};\n\n/**\n * Component which accepts a list of entities and renders a item card for each entity\n *\n * @public\n */\nexport const DocsCardGrid = (props: DocsCardGridProps) => {\n const { entities } = props;\n const getRouteToReaderPageFor = useRouteRef(rootDocsRouteRef);\n const config = useApi(configApiRef);\n if (!entities) return null;\n return (\n <ItemCardGrid data-testid=\"docs-explore\">\n {!entities?.length\n ? null\n : entities.map((entity, index: number) => (\n <Card key={index}>\n <CardMedia>\n <ItemCardHeader\n title={entity.metadata.title ?? entity.metadata.name}\n />\n </CardMedia>\n <CardContent>{entity.metadata.description}</CardContent>\n <CardActions>\n <LinkButton\n to={getRouteToReaderPageFor({\n namespace: toLowerMaybe(\n entity.metadata.namespace ?? 'default',\n config,\n ),\n kind: toLowerMaybe(entity.kind, config),\n name: toLowerMaybe(entity.metadata.name, config),\n })}\n color=\"primary\"\n data-testid=\"read_docs\"\n >\n Read Docs\n </LinkButton>\n </CardActions>\n </Card>\n ))}\n </ItemCardGrid>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AA4CO,MAAM,YAAA,GAAe,CAAC,KAAA,KAA6B;AACxD,EAAA,MAAM,EAAE,UAAS,GAAI,KAAA;AACrB,EAAA,MAAM,uBAAA,GAA0B,YAAY,gBAAgB,CAAA;AAC5D,EAAA,MAAM,MAAA,GAAS,OAAO,YAAY,CAAA;AAClC,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,EAAA,uBACE,GAAA,CAAC,YAAA,EAAA,EAAa,aAAA,EAAY,cAAA,EACvB,WAAC,QAAA,EAAU,MAAA,GACR,IAAA,GACA,QAAA,CAAS,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,0BACnB,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,KAAA,IAAS,OAAO,QAAA,CAAS;AAAA;AAAA,KAClD,EACF,CAAA;AAAA,oBACA,GAAA,CAAC,WAAA,EAAA,EAAa,QAAA,EAAA,MAAA,CAAO,QAAA,CAAS,WAAA,EAAY,CAAA;AAAA,wBACzC,WAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,IAAI,uBAAA,CAAwB;AAAA,UAC1B,SAAA,EAAW,YAAA;AAAA,YACT,MAAA,CAAO,SAAS,SAAA,IAAa,SAAA;AAAA,YAC7B;AAAA,WACF;AAAA,UACA,IAAA,EAAM,YAAA,CAAa,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AAAA,UACtC,IAAA,EAAM,YAAA,CAAa,MAAA,CAAO,QAAA,CAAS,MAAM,MAAM;AAAA,SAChD,CAAA;AAAA,QACD,KAAA,EAAM,SAAA;AAAA,QACN,aAAA,EAAY,WAAA;AAAA,QACb,QAAA,EAAA;AAAA;AAAA,KAED,EACF;AAAA,GAAA,EAAA,EAtBS,KAuBX,CACD,CAAA,EACP,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"DocsCardGrid.esm.js","sources":["../../../../src/home/components/Grids/DocsCardGrid.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { rootDocsRouteRef } from '../../../routes';\nimport { toLowerMaybe } from '../../../helpers';\nimport { Entity } from '@backstage/catalog-model';\nimport { useApi, useRouteRef, configApiRef } from '@backstage/core-plugin-api';\nimport {\n LinkButton,\n ItemCardGrid,\n ItemCardHeader,\n} from '@backstage/core-components';\nimport { EntityDisplayName } from '@backstage/plugin-catalog-react';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardMedia from '@material-ui/core/CardMedia';\n\n/**\n * Props for {@link DocsCardGrid}\n *\n * @public\n */\nexport type DocsCardGridProps = {\n entities: Entity[] | undefined;\n};\n\n/**\n * Component which accepts a list of entities and renders a item card for each entity\n *\n * @public\n */\nexport const DocsCardGrid = (props: DocsCardGridProps) => {\n const { entities } = props;\n const getRouteToReaderPageFor = useRouteRef(rootDocsRouteRef);\n const config = useApi(configApiRef);\n if (!entities) return null;\n return (\n <ItemCardGrid data-testid=\"docs-explore\">\n {!entities?.length\n ? null\n : entities.map((entity, index: number) => (\n <Card key={index}>\n <CardMedia>\n <ItemCardHeader\n title={<EntityDisplayName entityRef={entity} />}\n />\n </CardMedia>\n <CardContent>{entity.metadata.description}</CardContent>\n <CardActions>\n <LinkButton\n to={getRouteToReaderPageFor({\n namespace: toLowerMaybe(\n entity.metadata.namespace ?? 'default',\n config,\n ),\n kind: toLowerMaybe(entity.kind, config),\n name: toLowerMaybe(entity.metadata.name, config),\n })}\n color=\"primary\"\n data-testid=\"read_docs\"\n >\n Read Docs\n </LinkButton>\n </CardActions>\n </Card>\n ))}\n </ItemCardGrid>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AA6CO,MAAM,YAAA,GAAe,CAAC,KAAA,KAA6B;AACxD,EAAA,MAAM,EAAE,UAAS,GAAI,KAAA;AACrB,EAAA,MAAM,uBAAA,GAA0B,YAAY,gBAAgB,CAAA;AAC5D,EAAA,MAAM,MAAA,GAAS,OAAO,YAAY,CAAA;AAClC,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,EAAA,uBACE,GAAA,CAAC,YAAA,EAAA,EAAa,aAAA,EAAY,cAAA,EACvB,WAAC,QAAA,EAAU,MAAA,GACR,IAAA,GACA,QAAA,CAAS,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,0BACnB,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,KAAA,kBAAO,GAAA,CAAC,iBAAA,EAAA,EAAkB,SAAA,EAAW,MAAA,EAAQ;AAAA;AAAA,KAC/C,EACF,CAAA;AAAA,oBACA,GAAA,CAAC,WAAA,EAAA,EAAa,QAAA,EAAA,MAAA,CAAO,QAAA,CAAS,WAAA,EAAY,CAAA;AAAA,wBACzC,WAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,IAAI,uBAAA,CAAwB;AAAA,UAC1B,SAAA,EAAW,YAAA;AAAA,YACT,MAAA,CAAO,SAAS,SAAA,IAAa,SAAA;AAAA,YAC7B;AAAA,WACF;AAAA,UACA,IAAA,EAAM,YAAA,CAAa,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AAAA,UACtC,IAAA,EAAM,YAAA,CAAa,MAAA,CAAO,QAAA,CAAS,MAAM,MAAM;AAAA,SAChD,CAAA;AAAA,QACD,KAAA,EAAM,SAAA;AAAA,QACN,aAAA,EAAY,WAAA;AAAA,QACb,QAAA,EAAA;AAAA;AAAA,KAED,EACF;AAAA,GAAA,EAAA,EAtBS,KAuBX,CACD,CAAA,EACP,CAAA;AAEJ;;;;"}
@@ -1,7 +1,8 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { DocsCardGrid } from './DocsCardGrid.esm.js';
3
3
  import { WarningPanel, CodeSnippet, Progress, Link, Content, ContentHeader } from '@backstage/core-components';
4
- import { useEntityList, useEntityOwnership } from '@backstage/plugin-catalog-react';
4
+ import { useEntityList, entityPresentationApiRef, entityPresentationSnapshot, useEntityOwnership } from '@backstage/plugin-catalog-react';
5
+ import { useApiHolder } from '@backstage/core-plugin-api';
5
6
  import Typography from '@material-ui/core/Typography';
6
7
 
7
8
  const allEntitiesGroup = {
@@ -33,6 +34,8 @@ const EntityListDocsGridGroup = (props) => {
33
34
  };
34
35
  const EntityListDocsGrid = (props) => {
35
36
  const { loading, error, entities } = useEntityList();
37
+ const apiHolder = useApiHolder();
38
+ const presentationApi = apiHolder.get(entityPresentationApiRef);
36
39
  if (error) {
37
40
  return /* @__PURE__ */ jsx(
38
41
  WarningPanel,
@@ -54,15 +57,23 @@ const EntityListDocsGrid = (props) => {
54
57
  "."
55
58
  ] }) });
56
59
  }
57
- entities.sort(
58
- (a, b) => (a.metadata.title ?? a.metadata.name).localeCompare(
59
- b.metadata.title ?? b.metadata.name
60
- )
61
- );
60
+ const sortedEntities = [...entities].sort((a, b) => {
61
+ const titleA = entityPresentationSnapshot(
62
+ a,
63
+ void 0,
64
+ presentationApi
65
+ ).primaryTitle.toLocaleLowerCase();
66
+ const titleB = entityPresentationSnapshot(
67
+ b,
68
+ void 0,
69
+ presentationApi
70
+ ).primaryTitle.toLocaleLowerCase();
71
+ return titleA.localeCompare(titleB);
72
+ });
62
73
  return /* @__PURE__ */ jsx(Content, { children: (props.groups || [allEntitiesGroup]).map((group, index) => /* @__PURE__ */ jsx(
63
74
  EntityListDocsGridGroup,
64
75
  {
65
- entities,
76
+ entities: sortedEntities,
66
77
  group
67
78
  },
68
79
  `${group.title}-${index}`
@@ -1 +1 @@
1
- {"version":3,"file":"EntityListDocsGrid.esm.js","sources":["../../../../src/home/components/Grids/EntityListDocsGrid.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DocsCardGrid } from './DocsCardGrid';\nimport { Entity } from '@backstage/catalog-model';\nimport {\n CodeSnippet,\n Content,\n ContentHeader,\n Link,\n Progress,\n WarningPanel,\n} from '@backstage/core-components';\nimport {\n useEntityList,\n useEntityOwnership,\n} from '@backstage/plugin-catalog-react';\nimport Typography from '@material-ui/core/Typography';\nimport { ReactNode } from 'react';\n\n/**\n * Props for {@link EntityListDocsGrid}\n *\n * @public\n */\nexport type DocsGroupConfig = {\n title: ReactNode;\n filterPredicate: ((entity: Entity) => boolean) | string;\n};\n\n/**\n * Props for {@link EntityListDocsGrid}\n *\n * @public\n */\nexport type EntityListDocsGridPageProps = {\n groups?: DocsGroupConfig[];\n};\n\nconst allEntitiesGroup: DocsGroupConfig = {\n title: 'All Documentation',\n filterPredicate: () => true,\n};\n\nconst EntityListDocsGridGroup = (props: {\n group: DocsGroupConfig;\n entities: Entity[];\n}) => {\n const { entities, group } = props;\n const { loading: loadingOwnership, isOwnedEntity } = useEntityOwnership();\n\n const shownEntities = entities.filter(entity => {\n if (group.filterPredicate === 'ownedByUser') {\n if (loadingOwnership) {\n return false;\n }\n return isOwnedEntity(entity);\n }\n\n return (\n typeof group.filterPredicate === 'function' &&\n group.filterPredicate(entity)\n );\n });\n\n const titleComponent: ReactNode = (() => {\n return typeof group.title === 'string' ? (\n <ContentHeader title={group.title} />\n ) : (\n group.title\n );\n })();\n\n if (shownEntities.length === 0) {\n return null;\n }\n\n return (\n <Content>\n {titleComponent}\n <DocsCardGrid entities={shownEntities} />\n </Content>\n );\n};\n\n/**\n * Component responsible to get entities from entity list context and pass down to DocsCardGrid\n *\n * @public\n */\nexport const EntityListDocsGrid = (props: EntityListDocsGridPageProps) => {\n const { loading, error, entities } = useEntityList();\n\n if (error) {\n return (\n <WarningPanel\n severity=\"error\"\n title=\"Could not load available documentation.\"\n >\n <CodeSnippet language=\"text\" text={error.toString()} />\n </WarningPanel>\n );\n }\n\n if (loading) {\n return <Progress />;\n }\n\n if (entities.length === 0) {\n return (\n <div data-testid=\"doc-not-found\">\n <Typography variant=\"body2\">\n No documentation found that match your filter. Learn more about{' '}\n <Link to=\"https://backstage.io/docs/features/techdocs/creating-and-publishing\">\n publishing documentation\n </Link>\n .\n </Typography>\n </div>\n );\n }\n\n entities.sort((a, b) =>\n (a.metadata.title ?? a.metadata.name).localeCompare(\n b.metadata.title ?? b.metadata.name,\n ),\n );\n\n return (\n <Content>\n {(props.groups || [allEntitiesGroup]).map((group, index: number) => (\n <EntityListDocsGridGroup\n entities={entities}\n group={group}\n key={`${group.title}-${index}`}\n />\n ))}\n </Content>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EntityListDocsGrid.esm.js","sources":["../../../../src/home/components/Grids/EntityListDocsGrid.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DocsCardGrid } from './DocsCardGrid';\nimport { Entity } from '@backstage/catalog-model';\nimport {\n CodeSnippet,\n Content,\n ContentHeader,\n Link,\n Progress,\n WarningPanel,\n} from '@backstage/core-components';\nimport {\n entityPresentationApiRef,\n entityPresentationSnapshot,\n useEntityList,\n useEntityOwnership,\n} from '@backstage/plugin-catalog-react';\nimport { useApiHolder } from '@backstage/core-plugin-api';\nimport Typography from '@material-ui/core/Typography';\nimport { ReactNode } from 'react';\n\n/**\n * Props for {@link EntityListDocsGrid}\n *\n * @public\n */\nexport type DocsGroupConfig = {\n title: ReactNode;\n filterPredicate: ((entity: Entity) => boolean) | string;\n};\n\n/**\n * Props for {@link EntityListDocsGrid}\n *\n * @public\n */\nexport type EntityListDocsGridPageProps = {\n groups?: DocsGroupConfig[];\n};\n\nconst allEntitiesGroup: DocsGroupConfig = {\n title: 'All Documentation',\n filterPredicate: () => true,\n};\n\nconst EntityListDocsGridGroup = (props: {\n group: DocsGroupConfig;\n entities: Entity[];\n}) => {\n const { entities, group } = props;\n const { loading: loadingOwnership, isOwnedEntity } = useEntityOwnership();\n\n const shownEntities = entities.filter(entity => {\n if (group.filterPredicate === 'ownedByUser') {\n if (loadingOwnership) {\n return false;\n }\n return isOwnedEntity(entity);\n }\n\n return (\n typeof group.filterPredicate === 'function' &&\n group.filterPredicate(entity)\n );\n });\n\n const titleComponent: ReactNode = (() => {\n return typeof group.title === 'string' ? (\n <ContentHeader title={group.title} />\n ) : (\n group.title\n );\n })();\n\n if (shownEntities.length === 0) {\n return null;\n }\n\n return (\n <Content>\n {titleComponent}\n <DocsCardGrid entities={shownEntities} />\n </Content>\n );\n};\n\n/**\n * Component responsible to get entities from entity list context and pass down to DocsCardGrid\n *\n * @public\n */\nexport const EntityListDocsGrid = (props: EntityListDocsGridPageProps) => {\n const { loading, error, entities } = useEntityList();\n const apiHolder = useApiHolder();\n const presentationApi = apiHolder.get(entityPresentationApiRef);\n\n if (error) {\n return (\n <WarningPanel\n severity=\"error\"\n title=\"Could not load available documentation.\"\n >\n <CodeSnippet language=\"text\" text={error.toString()} />\n </WarningPanel>\n );\n }\n\n if (loading) {\n return <Progress />;\n }\n\n if (entities.length === 0) {\n return (\n <div data-testid=\"doc-not-found\">\n <Typography variant=\"body2\">\n No documentation found that match your filter. Learn more about{' '}\n <Link to=\"https://backstage.io/docs/features/techdocs/creating-and-publishing\">\n publishing documentation\n </Link>\n .\n </Typography>\n </div>\n );\n }\n\n const sortedEntities = [...entities].sort((a, b) => {\n const titleA = entityPresentationSnapshot(\n a,\n undefined,\n presentationApi,\n ).primaryTitle.toLocaleLowerCase();\n const titleB = entityPresentationSnapshot(\n b,\n undefined,\n presentationApi,\n ).primaryTitle.toLocaleLowerCase();\n return titleA.localeCompare(titleB);\n });\n\n return (\n <Content>\n {(props.groups || [allEntitiesGroup]).map((group, index: number) => (\n <EntityListDocsGridGroup\n entities={sortedEntities}\n group={group}\n key={`${group.title}-${index}`}\n />\n ))}\n </Content>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,12 +1,13 @@
1
1
  import { jsx, Fragment } from 'react/jsx-runtime';
2
2
  import useCopyToClipboard from 'react-use/esm/useCopyToClipboard';
3
- import { useRouteRef, useApi, configApiRef } from '@backstage/core-plugin-api';
3
+ import { useRouteRef, useApi, configApiRef, useApiHolder } from '@backstage/core-plugin-api';
4
4
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
5
5
  import { rootDocsRouteRef } from '../../../routes.esm.js';
6
+ import { entityPresentationApiRef } from '@backstage/plugin-catalog-react';
6
7
  import { Table, EmptyState, LinkButton } from '@backstage/core-components';
7
8
  import { techdocsTranslationRef } from '../../../translation.esm.js';
8
9
  import { actionFactories } from './actions.esm.js';
9
- import { defaultColumns, columnFactories } from './columns.esm.js';
10
+ import { columnFactories } from './columns.esm.js';
10
11
  import { entitiesToDocsMapper } from './helpers.esm.js';
11
12
 
12
13
  const DocsTableComponent = (props) => {
@@ -14,13 +15,27 @@ const DocsTableComponent = (props) => {
14
15
  const [, copyToClipboard] = useCopyToClipboard();
15
16
  const getRouteToReaderPageFor = useRouteRef(rootDocsRouteRef);
16
17
  const config = useApi(configApiRef);
18
+ const apiHolder = useApiHolder();
17
19
  const { t } = useTranslationRef(techdocsTranslationRef);
18
20
  if (!entities) return null;
19
21
  const documents = entitiesToDocsMapper(
20
22
  entities,
21
23
  getRouteToReaderPageFor,
22
- config
24
+ config,
25
+ apiHolder.get(entityPresentationApiRef)
23
26
  );
27
+ const tableColumns = columns || [
28
+ columnFactories.createTitleColumn({
29
+ hidden: true,
30
+ entityPresentationApi: apiHolder.get(entityPresentationApiRef)
31
+ }),
32
+ columnFactories.createNameColumn({
33
+ entityPresentationApi: apiHolder.get(entityPresentationApiRef)
34
+ }),
35
+ columnFactories.createOwnerColumn(),
36
+ columnFactories.createKindColumn(),
37
+ columnFactories.createTypeColumn()
38
+ ];
24
39
  const defaultActions = [
25
40
  actionFactories.createCopyDocsUrlAction(copyToClipboard, t)
26
41
  ];
@@ -38,7 +53,7 @@ const DocsTableComponent = (props) => {
38
53
  ...options
39
54
  },
40
55
  data: documents,
41
- columns: columns || defaultColumns,
56
+ columns: tableColumns,
42
57
  actions: actions || defaultActions,
43
58
  title: title ? `${title} (${documents.length})` : `${t("table.title.all")} (${documents.length})`,
44
59
  localization: {
@@ -1 +1 @@
1
- {"version":3,"file":"DocsTable.esm.js","sources":["../../../../src/home/components/Tables/DocsTable.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport useCopyToClipboard from 'react-use/esm/useCopyToClipboard';\n\nimport { configApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { Entity } from '@backstage/catalog-model';\nimport { rootDocsRouteRef } from '../../../routes';\nimport {\n EmptyState,\n LinkButton,\n Table,\n TableColumn,\n TableOptions,\n TableProps,\n} from '@backstage/core-components';\nimport { techdocsTranslationRef } from '../../../translation';\nimport { actionFactories } from './actions';\nimport { columnFactories, defaultColumns } from './columns';\nimport {\n DocsTableRow,\n DocsTableColumnFactories,\n DocsTableActionFactories,\n} from './types';\nimport { entitiesToDocsMapper } from './helpers';\n\n/**\n * Props for {@link DocsTable}.\n *\n * @public\n */\nexport type DocsTableProps = {\n entities: Entity[] | undefined;\n title?: string | undefined;\n loading?: boolean | undefined;\n columns?: TableColumn<DocsTableRow>[];\n actions?: TableProps<DocsTableRow>['actions'];\n options?: TableOptions<DocsTableRow>;\n};\n\n/**\n * Component which renders a table documents\n *\n * @public\n */\nconst DocsTableComponent = (props: DocsTableProps): JSX.Element | null => {\n const { entities, title, loading, columns, actions, options } = props;\n const [, copyToClipboard] = useCopyToClipboard();\n const getRouteToReaderPageFor = useRouteRef(rootDocsRouteRef);\n const config = useApi(configApiRef);\n const { t } = useTranslationRef(techdocsTranslationRef);\n if (!entities) return null;\n\n const documents = entitiesToDocsMapper(\n entities,\n getRouteToReaderPageFor,\n config,\n );\n\n const defaultActions: TableProps<DocsTableRow>['actions'] = [\n actionFactories.createCopyDocsUrlAction(copyToClipboard, t),\n ];\n\n const pageSize = 20;\n const paging = documents && documents.length > pageSize;\n\n return (\n <>\n {loading || (documents && documents.length > 0) ? (\n <Table<DocsTableRow>\n isLoading={loading}\n options={{\n paging,\n pageSize,\n search: true,\n actionsColumnIndex: -1,\n ...options,\n }}\n data={documents}\n columns={columns || defaultColumns}\n actions={actions || defaultActions}\n title={\n title\n ? `${title} (${documents.length})`\n : `${t('table.title.all')} (${documents.length})`\n }\n localization={{\n header: {\n actions: t('table.header.actions'),\n },\n toolbar: {\n searchPlaceholder: t('table.toolbar.searchPlaceholder'),\n },\n pagination: {\n labelRowsSelect: t('table.pagination.labelRowsSelect'),\n },\n body: {\n emptyDataSourceMessage: t('table.body.emptyDataSourceMessage'),\n },\n }}\n />\n ) : (\n <EmptyState\n missing=\"data\"\n title={t('table.emptyState.title')}\n description={t('table.emptyState.description')}\n action={\n <LinkButton\n color=\"primary\"\n to=\"https://backstage.io/docs/features/techdocs/getting-started\"\n variant=\"contained\"\n >\n {t('table.emptyState.docsButton')}\n </LinkButton>\n }\n />\n )}\n </>\n );\n};\n\n/**\n * @public\n */\nexport const DocsTable = DocsTableComponent as {\n (props: DocsTableProps): JSX.Element | null;\n columns: DocsTableColumnFactories;\n actions: DocsTableActionFactories;\n};\n\nDocsTable.columns = columnFactories;\nDocsTable.actions = actionFactories;\n"],"names":[],"mappings":";;;;;;;;;;;AA2DA,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAA8C;AACxE,EAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAO,SAAS,OAAA,EAAS,OAAA,EAAS,SAAQ,GAAI,KAAA;AAChE,EAAA,MAAM,GAAG,eAAe,CAAA,GAAI,kBAAA,EAAmB;AAC/C,EAAA,MAAM,uBAAA,GAA0B,YAAY,gBAAgB,CAAA;AAC5D,EAAA,MAAM,MAAA,GAAS,OAAO,YAAY,CAAA;AAClC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,sBAAsB,CAAA;AACtD,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AAEtB,EAAA,MAAM,SAAA,GAAY,oBAAA;AAAA,IAChB,QAAA;AAAA,IACA,uBAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,cAAA,GAAsD;AAAA,IAC1D,eAAA,CAAgB,uBAAA,CAAwB,eAAA,EAAiB,CAAC;AAAA,GAC5D;AAEA,EAAA,MAAM,QAAA,GAAW,EAAA;AACjB,EAAA,MAAM,MAAA,GAAS,SAAA,IAAa,SAAA,CAAU,MAAA,GAAS,QAAA;AAE/C,EAAA,uBACE,GAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA,OAAA,IAAY,SAAA,IAAa,SAAA,CAAU,SAAS,CAAA,mBAC3C,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACX,OAAA,EAAS;AAAA,QACP,MAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA,EAAQ,IAAA;AAAA,QACR,kBAAA,EAAoB,EAAA;AAAA,QACpB,GAAG;AAAA,OACL;AAAA,MACA,IAAA,EAAM,SAAA;AAAA,MACN,SAAS,OAAA,IAAW,cAAA;AAAA,MACpB,SAAS,OAAA,IAAW,cAAA;AAAA,MACpB,KAAA,EACE,KAAA,GACI,CAAA,EAAG,KAAK,KAAK,SAAA,CAAU,MAAM,CAAA,CAAA,CAAA,GAC7B,CAAA,EAAG,CAAA,CAAE,iBAAiB,CAAC,CAAA,EAAA,EAAK,UAAU,MAAM,CAAA,CAAA,CAAA;AAAA,MAElD,YAAA,EAAc;AAAA,QACZ,MAAA,EAAQ;AAAA,UACN,OAAA,EAAS,EAAE,sBAAsB;AAAA,SACnC;AAAA,QACA,OAAA,EAAS;AAAA,UACP,iBAAA,EAAmB,EAAE,iCAAiC;AAAA,SACxD;AAAA,QACA,UAAA,EAAY;AAAA,UACV,eAAA,EAAiB,EAAE,kCAAkC;AAAA,SACvD;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,sBAAA,EAAwB,EAAE,mCAAmC;AAAA;AAC/D;AACF;AAAA,GACF,mBAEA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,MAAA;AAAA,MACR,KAAA,EAAO,EAAE,wBAAwB,CAAA;AAAA,MACjC,WAAA,EAAa,EAAE,8BAA8B,CAAA;AAAA,MAC7C,MAAA,kBACE,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,SAAA;AAAA,UACN,EAAA,EAAG,6DAAA;AAAA,UACH,OAAA,EAAQ,WAAA;AAAA,UAEP,YAAE,6BAA6B;AAAA;AAAA;AAClC;AAAA,GAEJ,EAEJ,CAAA;AAEJ,CAAA;AAKO,MAAM,SAAA,GAAY;AAMzB,SAAA,CAAU,OAAA,GAAU,eAAA;AACpB,SAAA,CAAU,OAAA,GAAU,eAAA;;;;"}
1
+ {"version":3,"file":"DocsTable.esm.js","sources":["../../../../src/home/components/Tables/DocsTable.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport useCopyToClipboard from 'react-use/esm/useCopyToClipboard';\n\nimport {\n configApiRef,\n useApi,\n useApiHolder,\n useRouteRef,\n} from '@backstage/core-plugin-api';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { Entity } from '@backstage/catalog-model';\nimport { rootDocsRouteRef } from '../../../routes';\nimport { entityPresentationApiRef } from '@backstage/plugin-catalog-react';\nimport {\n EmptyState,\n LinkButton,\n Table,\n TableColumn,\n TableOptions,\n TableProps,\n} from '@backstage/core-components';\nimport { techdocsTranslationRef } from '../../../translation';\nimport { actionFactories } from './actions';\nimport { columnFactories } from './columns';\nimport {\n DocsTableRow,\n DocsTableColumnFactories,\n DocsTableActionFactories,\n} from './types';\nimport { entitiesToDocsMapper } from './helpers';\n\n/**\n * Props for {@link DocsTable}.\n *\n * @public\n */\nexport type DocsTableProps = {\n entities: Entity[] | undefined;\n title?: string | undefined;\n loading?: boolean | undefined;\n columns?: TableColumn<DocsTableRow>[];\n actions?: TableProps<DocsTableRow>['actions'];\n options?: TableOptions<DocsTableRow>;\n};\n\n/**\n * Component which renders a table documents\n *\n * @public\n */\nconst DocsTableComponent = (props: DocsTableProps): JSX.Element | null => {\n const { entities, title, loading, columns, actions, options } = props;\n const [, copyToClipboard] = useCopyToClipboard();\n const getRouteToReaderPageFor = useRouteRef(rootDocsRouteRef);\n const config = useApi(configApiRef);\n const apiHolder = useApiHolder();\n\n const { t } = useTranslationRef(techdocsTranslationRef);\n if (!entities) return null;\n\n const documents = entitiesToDocsMapper(\n entities,\n getRouteToReaderPageFor,\n config,\n apiHolder.get(entityPresentationApiRef),\n );\n\n const tableColumns = columns || [\n columnFactories.createTitleColumn({\n hidden: true,\n entityPresentationApi: apiHolder.get(entityPresentationApiRef),\n }),\n columnFactories.createNameColumn({\n entityPresentationApi: apiHolder.get(entityPresentationApiRef),\n }),\n columnFactories.createOwnerColumn(),\n columnFactories.createKindColumn(),\n columnFactories.createTypeColumn(),\n ];\n\n const defaultActions: TableProps<DocsTableRow>['actions'] = [\n actionFactories.createCopyDocsUrlAction(copyToClipboard, t),\n ];\n\n const pageSize = 20;\n const paging = documents && documents.length > pageSize;\n\n return (\n <>\n {loading || (documents && documents.length > 0) ? (\n <Table<DocsTableRow>\n isLoading={loading}\n options={{\n paging,\n pageSize,\n search: true,\n actionsColumnIndex: -1,\n ...options,\n }}\n data={documents}\n columns={tableColumns}\n actions={actions || defaultActions}\n title={\n title\n ? `${title} (${documents.length})`\n : `${t('table.title.all')} (${documents.length})`\n }\n localization={{\n header: {\n actions: t('table.header.actions'),\n },\n toolbar: {\n searchPlaceholder: t('table.toolbar.searchPlaceholder'),\n },\n pagination: {\n labelRowsSelect: t('table.pagination.labelRowsSelect'),\n },\n body: {\n emptyDataSourceMessage: t('table.body.emptyDataSourceMessage'),\n },\n }}\n />\n ) : (\n <EmptyState\n missing=\"data\"\n title={t('table.emptyState.title')}\n description={t('table.emptyState.description')}\n action={\n <LinkButton\n color=\"primary\"\n to=\"https://backstage.io/docs/features/techdocs/getting-started\"\n variant=\"contained\"\n >\n {t('table.emptyState.docsButton')}\n </LinkButton>\n }\n />\n )}\n </>\n );\n};\n\n/**\n * @public\n */\nexport const DocsTable = DocsTableComponent as {\n (props: DocsTableProps): JSX.Element | null;\n columns: DocsTableColumnFactories;\n actions: DocsTableActionFactories;\n};\n\nDocsTable.columns = columnFactories;\nDocsTable.actions = actionFactories;\n"],"names":[],"mappings":"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"}
@@ -2,15 +2,15 @@ import { jsx } from 'react/jsx-runtime';
2
2
  import useCopyToClipboard from 'react-use/esm/useCopyToClipboard';
3
3
  import { capitalize } from 'lodash';
4
4
  import { WarningPanel, CodeSnippet } from '@backstage/core-components';
5
- import { useRouteRef, useApi, configApiRef } from '@backstage/core-plugin-api';
5
+ import { useRouteRef, useApi, configApiRef, useApiHolder } from '@backstage/core-plugin-api';
6
6
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
7
- import { useEntityList, useStarredEntities } from '@backstage/plugin-catalog-react';
7
+ import { useEntityList, useStarredEntities, entityPresentationApiRef } from '@backstage/plugin-catalog-react';
8
8
  import { techdocsTranslationRef } from '../../../translation.esm.js';
9
9
  import { DocsTable } from './DocsTable.esm.js';
10
10
  import { OffsetPaginatedDocsTable } from './OffsetPaginatedDocsTable.esm.js';
11
11
  import { CursorPaginatedDocsTable } from './CursorPaginatedDocsTable.esm.js';
12
12
  import { actionFactories } from './actions.esm.js';
13
- import { defaultColumns, columnFactories } from './columns.esm.js';
13
+ import { columnFactories } from './columns.esm.js';
14
14
  import { rootDocsRouteRef } from '../../../routes.esm.js';
15
15
  import { entitiesToDocsMapper } from './helpers.esm.js';
16
16
 
@@ -21,6 +21,7 @@ const EntityListDocsTableComponent = (props) => {
21
21
  const [, copyToClipboard] = useCopyToClipboard();
22
22
  const getRouteToReaderPageFor = useRouteRef(rootDocsRouteRef);
23
23
  const config = useApi(configApiRef);
24
+ const apiHolder = useApiHolder();
24
25
  const { t } = useTranslationRef(techdocsTranslationRef);
25
26
  const title = capitalize(filters.user?.value ?? "all");
26
27
  const defaultActions = [
@@ -34,13 +35,26 @@ const EntityListDocsTableComponent = (props) => {
34
35
  const documents = entitiesToDocsMapper(
35
36
  entities,
36
37
  getRouteToReaderPageFor,
37
- config
38
+ config,
39
+ apiHolder.get(entityPresentationApiRef)
38
40
  );
41
+ const tableColumns = columns || [
42
+ columnFactories.createTitleColumn({
43
+ hidden: true,
44
+ entityPresentationApi: apiHolder.get(entityPresentationApiRef)
45
+ }),
46
+ columnFactories.createNameColumn({
47
+ entityPresentationApi: apiHolder.get(entityPresentationApiRef)
48
+ }),
49
+ columnFactories.createOwnerColumn(),
50
+ columnFactories.createKindColumn(),
51
+ columnFactories.createTypeColumn()
52
+ ];
39
53
  if (paginationMode === "cursor") {
40
54
  return /* @__PURE__ */ jsx(
41
55
  CursorPaginatedDocsTable,
42
56
  {
43
- columns: columns || defaultColumns,
57
+ columns: tableColumns,
44
58
  isLoading: loading,
45
59
  title,
46
60
  actions: actions || defaultActions,
@@ -54,7 +68,7 @@ const EntityListDocsTableComponent = (props) => {
54
68
  return /* @__PURE__ */ jsx(
55
69
  OffsetPaginatedDocsTable,
56
70
  {
57
- columns: columns || defaultColumns,
71
+ columns: tableColumns,
58
72
  isLoading: loading,
59
73
  title,
60
74
  actions: actions || defaultActions,
@@ -73,7 +87,7 @@ const EntityListDocsTableComponent = (props) => {
73
87
  entities,
74
88
  loading,
75
89
  actions: actions || defaultActions,
76
- columns,
90
+ columns: tableColumns,
77
91
  options
78
92
  }
79
93
  );
@@ -1 +1 @@
1
- {"version":3,"file":"EntityListDocsTable.esm.js","sources":["../../../../src/home/components/Tables/EntityListDocsTable.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport useCopyToClipboard from 'react-use/esm/useCopyToClipboard';\nimport { capitalize } from 'lodash';\nimport {\n CodeSnippet,\n TableColumn,\n TableOptions,\n TableProps,\n WarningPanel,\n} from '@backstage/core-components';\nimport { configApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport {\n useEntityList,\n useStarredEntities,\n} from '@backstage/plugin-catalog-react';\nimport { techdocsTranslationRef } from '../../../translation';\nimport { DocsTable } from './DocsTable';\nimport { OffsetPaginatedDocsTable } from './OffsetPaginatedDocsTable';\nimport { CursorPaginatedDocsTable } from './CursorPaginatedDocsTable';\nimport { actionFactories } from './actions';\nimport { columnFactories, defaultColumns } from './columns';\nimport {\n DocsTableRow,\n DocsTableColumnFactories,\n DocsTableActionFactories,\n} from './types';\nimport { rootDocsRouteRef } from '../../../routes';\nimport { entitiesToDocsMapper } from './helpers';\n\n/**\n * Props for {@link EntityListDocsTable}.\n *\n * @public\n */\nexport type EntityListDocsTableProps = {\n columns?: TableColumn<DocsTableRow>[];\n actions?: TableProps<DocsTableRow>['actions'];\n options?: TableOptions<DocsTableRow>;\n};\n\n/**\n * Component which renders a table with entities from catalog.\n *\n * @public\n */\nconst EntityListDocsTableComponent = (\n props: EntityListDocsTableProps,\n): JSX.Element | null => {\n const { columns, actions, options } = props;\n const { loading, error, entities, filters, paginationMode, pageInfo } =\n useEntityList();\n const { isStarredEntity, toggleStarredEntity } = useStarredEntities();\n const [, copyToClipboard] = useCopyToClipboard();\n const getRouteToReaderPageFor = useRouteRef(rootDocsRouteRef);\n const config = useApi(configApiRef);\n const { t } = useTranslationRef(techdocsTranslationRef);\n\n const title = capitalize(filters.user?.value ?? 'all');\n\n const defaultActions = [\n actionFactories.createCopyDocsUrlAction(copyToClipboard, t),\n actionFactories.createStarEntityAction(\n isStarredEntity,\n toggleStarredEntity,\n t,\n ),\n ];\n\n const documents = entitiesToDocsMapper(\n entities,\n getRouteToReaderPageFor,\n config,\n );\n\n if (paginationMode === 'cursor') {\n return (\n <CursorPaginatedDocsTable\n columns={columns || defaultColumns}\n isLoading={loading}\n title={title}\n actions={actions || defaultActions}\n options={options}\n data={documents}\n next={pageInfo?.next}\n prev={pageInfo?.prev}\n />\n );\n } else if (paginationMode === 'offset') {\n return (\n <OffsetPaginatedDocsTable\n columns={columns || defaultColumns}\n isLoading={loading}\n title={title}\n actions={actions || defaultActions}\n options={options}\n data={documents}\n />\n );\n }\n\n if (error) {\n return (\n <WarningPanel severity=\"error\" title={t('error.couldNotLoad')}>\n <CodeSnippet language=\"text\" text={error.toString()} />\n </WarningPanel>\n );\n }\n\n return (\n <DocsTable\n title={title}\n entities={entities}\n loading={loading}\n actions={actions || defaultActions}\n columns={columns}\n options={options}\n />\n );\n};\n\n/**\n * @public\n */\nexport const EntityListDocsTable = EntityListDocsTableComponent as {\n (props: EntityListDocsTableProps): JSX.Element | null;\n columns: DocsTableColumnFactories;\n actions: DocsTableActionFactories;\n};\n\nEntityListDocsTable.columns = columnFactories;\nEntityListDocsTable.actions = actionFactories;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AA6DA,MAAM,4BAAA,GAA+B,CACnC,KAAA,KACuB;AACvB,EAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAS,OAAA,EAAQ,GAAI,KAAA;AACtC,EAAA,MAAM,EAAE,SAAS,KAAA,EAAO,QAAA,EAAU,SAAS,cAAA,EAAgB,QAAA,KACzD,aAAA,EAAc;AAChB,EAAA,MAAM,EAAE,eAAA,EAAiB,mBAAA,EAAoB,GAAI,kBAAA,EAAmB;AACpE,EAAA,MAAM,GAAG,eAAe,CAAA,GAAI,kBAAA,EAAmB;AAC/C,EAAA,MAAM,uBAAA,GAA0B,YAAY,gBAAgB,CAAA;AAC5D,EAAA,MAAM,MAAA,GAAS,OAAO,YAAY,CAAA;AAClC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,sBAAsB,CAAA;AAEtD,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,OAAA,CAAQ,IAAA,EAAM,SAAS,KAAK,CAAA;AAErD,EAAA,MAAM,cAAA,GAAiB;AAAA,IACrB,eAAA,CAAgB,uBAAA,CAAwB,eAAA,EAAiB,CAAC,CAAA;AAAA,IAC1D,eAAA,CAAgB,sBAAA;AAAA,MACd,eAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,MAAM,SAAA,GAAY,oBAAA;AAAA,IAChB,QAAA;AAAA,IACA,uBAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,IAAI,mBAAmB,QAAA,EAAU;AAC/B,IAAA,uBACE,GAAA;AAAA,MAAC,wBAAA;AAAA,MAAA;AAAA,QACC,SAAS,OAAA,IAAW,cAAA;AAAA,QACpB,SAAA,EAAW,OAAA;AAAA,QACX,KAAA;AAAA,QACA,SAAS,OAAA,IAAW,cAAA;AAAA,QACpB,OAAA;AAAA,QACA,IAAA,EAAM,SAAA;AAAA,QACN,MAAM,QAAA,EAAU,IAAA;AAAA,QAChB,MAAM,QAAA,EAAU;AAAA;AAAA,KAClB;AAAA,EAEJ,CAAA,MAAA,IAAW,mBAAmB,QAAA,EAAU;AACtC,IAAA,uBACE,GAAA;AAAA,MAAC,wBAAA;AAAA,MAAA;AAAA,QACC,SAAS,OAAA,IAAW,cAAA;AAAA,QACpB,SAAA,EAAW,OAAA;AAAA,QACX,KAAA;AAAA,QACA,SAAS,OAAA,IAAW,cAAA;AAAA,QACpB,OAAA;AAAA,QACA,IAAA,EAAM;AAAA;AAAA,KACR;AAAA,EAEJ;AAEA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,2BACG,YAAA,EAAA,EAAa,QAAA,EAAS,OAAA,EAAQ,KAAA,EAAO,EAAE,oBAAoB,CAAA,EAC1D,QAAA,kBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,UAAS,MAAA,EAAO,IAAA,EAAM,KAAA,CAAM,QAAA,IAAY,CAAA,EACvD,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAS,OAAA,IAAW,cAAA;AAAA,MACpB,OAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ,CAAA;AAKO,MAAM,mBAAA,GAAsB;AAMnC,mBAAA,CAAoB,OAAA,GAAU,eAAA;AAC9B,mBAAA,CAAoB,OAAA,GAAU,eAAA;;;;"}
1
+ {"version":3,"file":"EntityListDocsTable.esm.js","sources":["../../../../src/home/components/Tables/EntityListDocsTable.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport useCopyToClipboard from 'react-use/esm/useCopyToClipboard';\nimport { capitalize } from 'lodash';\nimport {\n CodeSnippet,\n TableColumn,\n TableOptions,\n TableProps,\n WarningPanel,\n} from '@backstage/core-components';\nimport {\n configApiRef,\n useApi,\n useApiHolder,\n useRouteRef,\n} from '@backstage/core-plugin-api';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport {\n useEntityList,\n useStarredEntities,\n entityPresentationApiRef,\n} from '@backstage/plugin-catalog-react';\nimport { techdocsTranslationRef } from '../../../translation';\nimport { DocsTable } from './DocsTable';\nimport { OffsetPaginatedDocsTable } from './OffsetPaginatedDocsTable';\nimport { CursorPaginatedDocsTable } from './CursorPaginatedDocsTable';\nimport { actionFactories } from './actions';\nimport { columnFactories } from './columns';\nimport {\n DocsTableRow,\n DocsTableColumnFactories,\n DocsTableActionFactories,\n} from './types';\nimport { rootDocsRouteRef } from '../../../routes';\nimport { entitiesToDocsMapper } from './helpers';\n\n/**\n * Props for {@link EntityListDocsTable}.\n *\n * @public\n */\nexport type EntityListDocsTableProps = {\n columns?: TableColumn<DocsTableRow>[];\n actions?: TableProps<DocsTableRow>['actions'];\n options?: TableOptions<DocsTableRow>;\n};\n\n/**\n * Component which renders a table with entities from catalog.\n *\n * @public\n */\nconst EntityListDocsTableComponent = (\n props: EntityListDocsTableProps,\n): JSX.Element | null => {\n const { columns, actions, options } = props;\n const { loading, error, entities, filters, paginationMode, pageInfo } =\n useEntityList();\n const { isStarredEntity, toggleStarredEntity } = useStarredEntities();\n const [, copyToClipboard] = useCopyToClipboard();\n const getRouteToReaderPageFor = useRouteRef(rootDocsRouteRef);\n const config = useApi(configApiRef);\n const apiHolder = useApiHolder();\n const { t } = useTranslationRef(techdocsTranslationRef);\n\n const title = capitalize(filters.user?.value ?? 'all');\n\n const defaultActions = [\n actionFactories.createCopyDocsUrlAction(copyToClipboard, t),\n actionFactories.createStarEntityAction(\n isStarredEntity,\n toggleStarredEntity,\n t,\n ),\n ];\n\n const documents = entitiesToDocsMapper(\n entities,\n getRouteToReaderPageFor,\n config,\n apiHolder.get(entityPresentationApiRef),\n );\n\n const tableColumns = columns || [\n columnFactories.createTitleColumn({\n hidden: true,\n entityPresentationApi: apiHolder.get(entityPresentationApiRef),\n }),\n columnFactories.createNameColumn({\n entityPresentationApi: apiHolder.get(entityPresentationApiRef),\n }),\n columnFactories.createOwnerColumn(),\n columnFactories.createKindColumn(),\n columnFactories.createTypeColumn(),\n ];\n\n if (paginationMode === 'cursor') {\n return (\n <CursorPaginatedDocsTable\n columns={tableColumns}\n isLoading={loading}\n title={title}\n actions={actions || defaultActions}\n options={options}\n data={documents}\n next={pageInfo?.next}\n prev={pageInfo?.prev}\n />\n );\n } else if (paginationMode === 'offset') {\n return (\n <OffsetPaginatedDocsTable\n columns={tableColumns}\n isLoading={loading}\n title={title}\n actions={actions || defaultActions}\n options={options}\n data={documents}\n />\n );\n }\n\n if (error) {\n return (\n <WarningPanel severity=\"error\" title={t('error.couldNotLoad')}>\n <CodeSnippet language=\"text\" text={error.toString()} />\n </WarningPanel>\n );\n }\n\n return (\n <DocsTable\n title={title}\n entities={entities}\n loading={loading}\n actions={actions || defaultActions}\n columns={tableColumns}\n options={options}\n />\n );\n};\n\n/**\n * @public\n */\nexport const EntityListDocsTable = EntityListDocsTableComponent as {\n (props: EntityListDocsTableProps): JSX.Element | null;\n columns: DocsTableColumnFactories;\n actions: DocsTableActionFactories;\n};\n\nEntityListDocsTable.columns = columnFactories;\nEntityListDocsTable.actions = actionFactories;\n"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import { jsx, Fragment } from 'react/jsx-runtime';
2
2
  import { SubvalueCell, Link } from '@backstage/core-components';
3
- import { EntityRefLinks } from '@backstage/plugin-catalog-react';
3
+ import { EntityRefLinks, EntityDisplayName, entityPresentationSnapshot } from '@backstage/plugin-catalog-react';
4
4
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
5
5
  import { techdocsTranslationRef } from '../../../translation.esm.js';
6
6
 
7
- function customTitle(entity) {
8
- return entity.metadata.title || entity.metadata.name;
7
+ function customTitle(entity, presentationApi) {
8
+ return entityPresentationSnapshot(entity, void 0, presentationApi).primaryTitle;
9
9
  }
10
10
  const TableColumnTitle = ({
11
11
  translationKey
@@ -15,14 +15,17 @@ const TableColumnTitle = ({
15
15
  };
16
16
  const columnFactories = {
17
17
  createTitleColumn(options) {
18
- const nameCol = columnFactories.createNameColumn();
18
+ const nameCol = columnFactories.createNameColumn({
19
+ entityPresentationApi: options?.entityPresentationApi
20
+ });
19
21
  return {
20
22
  ...nameCol,
21
23
  field: "entity.metadata.title",
22
24
  hidden: options?.hidden
23
25
  };
24
26
  },
25
- createNameColumn() {
27
+ createNameColumn(options) {
28
+ const presentationApi = options?.entityPresentationApi;
26
29
  return {
27
30
  title: /* @__PURE__ */ jsx(TableColumnTitle, { translationKey: "document" }),
28
31
  field: "entity.metadata.name",
@@ -30,14 +33,21 @@ const columnFactories = {
30
33
  searchable: true,
31
34
  defaultSort: "asc",
32
35
  customSort: (row1, row2) => {
33
- const title1 = customTitle(row1.entity).toLocaleLowerCase();
34
- const title2 = customTitle(row2.entity).toLocaleLowerCase();
36
+ const title1 = customTitle(
37
+ row1.entity,
38
+ presentationApi
39
+ ).toLocaleLowerCase();
40
+ const title2 = customTitle(
41
+ row2.entity,
42
+ presentationApi
43
+ ).toLocaleLowerCase();
35
44
  return title1.localeCompare(title2);
36
45
  },
46
+ customFilterAndSearch: (filter, row) => customTitle(row.entity, presentationApi).toLocaleLowerCase().includes(filter.toLocaleLowerCase()),
37
47
  render: (row) => /* @__PURE__ */ jsx(
38
48
  SubvalueCell,
39
49
  {
40
- value: /* @__PURE__ */ jsx(Link, { to: row.resolved.docsUrl, children: customTitle(row.entity) }),
50
+ value: /* @__PURE__ */ jsx(Link, { to: row.resolved.docsUrl, children: presentationApi ? /* @__PURE__ */ jsx(EntityDisplayName, { entityRef: row.entity }) : customTitle(row.entity) }),
41
51
  subvalue: row.entity.metadata.description
42
52
  }
43
53
  )
@@ -69,7 +79,7 @@ const columnFactories = {
69
79
  };
70
80
  }
71
81
  };
72
- const defaultColumns = [
82
+ [
73
83
  columnFactories.createTitleColumn({ hidden: true }),
74
84
  columnFactories.createNameColumn(),
75
85
  columnFactories.createOwnerColumn(),
@@ -77,5 +87,5 @@ const defaultColumns = [
77
87
  columnFactories.createTypeColumn()
78
88
  ];
79
89
 
80
- export { columnFactories, defaultColumns };
90
+ export { columnFactories };
81
91
  //# sourceMappingURL=columns.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"columns.esm.js","sources":["../../../../src/home/components/Tables/columns.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Link, SubvalueCell, TableColumn } from '@backstage/core-components';\nimport { EntityRefLinks } from '@backstage/plugin-catalog-react';\nimport { Entity } from '@backstage/catalog-model';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { techdocsTranslationRef } from '../../../translation';\nimport { DocsTableRow } from './types';\n\nfunction customTitle(entity: Entity): string {\n return entity.metadata.title || entity.metadata.name;\n}\n\n/**\n * Component for translating table column titles\n * @alpha\n */\nconst TableColumnTitle = ({\n translationKey,\n}: {\n translationKey: 'document' | 'owner' | 'kind' | 'type';\n}) => {\n const { t } = useTranslationRef(techdocsTranslationRef);\n return <>{t(`table.columns.${translationKey}`)}</>;\n};\n\n/**\n * Not directly exported, but through DocsTable.columns and EntityListDocsTable.columns\n *\n * @public\n */\nexport const columnFactories = {\n createTitleColumn(options?: { hidden?: boolean }): TableColumn<DocsTableRow> {\n const nameCol = columnFactories.createNameColumn();\n return {\n ...nameCol,\n field: 'entity.metadata.title',\n hidden: options?.hidden,\n };\n },\n createNameColumn(): TableColumn<DocsTableRow> {\n return {\n title: <TableColumnTitle translationKey=\"document\" />,\n field: 'entity.metadata.name',\n highlight: true,\n searchable: true,\n defaultSort: 'asc',\n customSort: (row1, row2) => {\n const title1 = customTitle(row1.entity).toLocaleLowerCase();\n const title2 = customTitle(row2.entity).toLocaleLowerCase();\n return title1.localeCompare(title2);\n },\n render: (row: DocsTableRow) => (\n <SubvalueCell\n value={\n <Link to={row.resolved.docsUrl}>{customTitle(row.entity)}</Link>\n }\n subvalue={row.entity.metadata.description}\n />\n ),\n };\n },\n createOwnerColumn(): TableColumn<DocsTableRow> {\n return {\n title: <TableColumnTitle translationKey=\"owner\" />,\n field: 'resolved.ownedByRelationsTitle',\n render: ({ resolved }) => (\n <EntityRefLinks\n entityRefs={resolved.ownedByRelations}\n defaultKind=\"group\"\n />\n ),\n };\n },\n createKindColumn(): TableColumn<DocsTableRow> {\n return {\n title: <TableColumnTitle translationKey=\"kind\" />,\n field: 'entity.kind',\n };\n },\n createTypeColumn(): TableColumn<DocsTableRow> {\n return {\n title: <TableColumnTitle translationKey=\"type\" />,\n field: 'entity.spec.type',\n };\n },\n};\n\nexport const defaultColumns: TableColumn<DocsTableRow>[] = [\n columnFactories.createTitleColumn({ hidden: true }),\n columnFactories.createNameColumn(),\n columnFactories.createOwnerColumn(),\n columnFactories.createKindColumn(),\n columnFactories.createTypeColumn(),\n];\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"columns.esm.js","sources":["../../../../src/home/components/Tables/columns.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Link,\n SubvalueCell,\n type TableColumn,\n} from '@backstage/core-components';\nimport {\n EntityDisplayName,\n type EntityPresentationApi,\n entityPresentationSnapshot,\n EntityRefLinks,\n} from '@backstage/plugin-catalog-react';\nimport { Entity } from '@backstage/catalog-model';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { techdocsTranslationRef } from '../../../translation';\nimport { DocsTableRow } from './types';\n\nfunction customTitle(\n entity: Entity,\n presentationApi?: EntityPresentationApi,\n): string {\n return entityPresentationSnapshot(entity, undefined, presentationApi)\n .primaryTitle;\n}\n\n/**\n * Component for translating table column titles\n * @alpha\n */\nconst TableColumnTitle = ({\n translationKey,\n}: {\n translationKey: 'document' | 'owner' | 'kind' | 'type';\n}) => {\n const { t } = useTranslationRef(techdocsTranslationRef);\n return <>{t(`table.columns.${translationKey}`)}</>;\n};\n\n/**\n * Not directly exported, but through DocsTable.columns and EntityListDocsTable.columns\n *\n * @public\n */\nexport const columnFactories = {\n createTitleColumn(options?: {\n hidden?: boolean;\n entityPresentationApi?: EntityPresentationApi;\n }): TableColumn<DocsTableRow> {\n const nameCol = columnFactories.createNameColumn({\n entityPresentationApi: options?.entityPresentationApi,\n });\n return {\n ...nameCol,\n field: 'entity.metadata.title',\n hidden: options?.hidden,\n };\n },\n\n createNameColumn(options?: {\n entityPresentationApi?: EntityPresentationApi;\n }): TableColumn<DocsTableRow> {\n const presentationApi = options?.entityPresentationApi;\n return {\n title: <TableColumnTitle translationKey=\"document\" />,\n field: 'entity.metadata.name',\n highlight: true,\n searchable: true,\n defaultSort: 'asc',\n customSort: (row1, row2) => {\n const title1 = customTitle(\n row1.entity,\n presentationApi,\n ).toLocaleLowerCase();\n const title2 = customTitle(\n row2.entity,\n presentationApi,\n ).toLocaleLowerCase();\n return title1.localeCompare(title2);\n },\n customFilterAndSearch: (filter, row) =>\n customTitle(row.entity, presentationApi)\n .toLocaleLowerCase()\n .includes(filter.toLocaleLowerCase()),\n render: (row: DocsTableRow) => (\n <SubvalueCell\n value={\n <Link to={row.resolved.docsUrl}>\n {presentationApi ? (\n <EntityDisplayName entityRef={row.entity} />\n ) : (\n customTitle(row.entity)\n )}\n </Link>\n }\n subvalue={row.entity.metadata.description}\n />\n ),\n };\n },\n createOwnerColumn(): TableColumn<DocsTableRow> {\n return {\n title: <TableColumnTitle translationKey=\"owner\" />,\n field: 'resolved.ownedByRelationsTitle',\n render: ({ resolved }) => (\n <EntityRefLinks\n entityRefs={resolved.ownedByRelations}\n defaultKind=\"group\"\n />\n ),\n };\n },\n createKindColumn(): TableColumn<DocsTableRow> {\n return {\n title: <TableColumnTitle translationKey=\"kind\" />,\n field: 'entity.kind',\n };\n },\n createTypeColumn(): TableColumn<DocsTableRow> {\n return {\n title: <TableColumnTitle translationKey=\"type\" />,\n field: 'entity.spec.type',\n };\n },\n};\n\nexport const defaultColumns: TableColumn<DocsTableRow>[] = [\n columnFactories.createTitleColumn({ hidden: true }),\n columnFactories.createNameColumn(),\n columnFactories.createOwnerColumn(),\n columnFactories.createKindColumn(),\n columnFactories.createTypeColumn(),\n];\n"],"names":[],"mappings":"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"}
@@ -7,11 +7,11 @@ import './Tables/EntityListDocsTable.esm.js';
7
7
  import { DocsTable } from './Tables/DocsTable.esm.js';
8
8
  import { DocsCardGrid } from './Grids/DocsCardGrid.esm.js';
9
9
  import { Content, Progress, WarningPanel, CodeSnippet, HeaderTabs, ContentHeader, SupportButton } from '@backstage/core-components';
10
+ import { useApi } from '@backstage/core-plugin-api';
10
11
  import '@material-ui/core/Typography';
11
12
  import { InfoCardGrid } from './Grids/InfoCardGrid.esm.js';
12
13
  import { TechDocsPageWrapper } from './TechDocsPageWrapper.esm.js';
13
14
  import { TechDocsIndexPage } from './TechDocsIndexPage.esm.js';
14
- import { useApi } from '@backstage/core-plugin-api';
15
15
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
16
16
  import { techdocsTranslationRef } from '../../translation.esm.js';
17
17
  import { TECHDOCS_ANNOTATION } from '@backstage/plugin-techdocs-common';
package/dist/index.d.ts CHANGED
@@ -10,7 +10,7 @@ import { ReactNode, PropsWithChildren, JSX as JSX$1, FC } from 'react';
10
10
  import { ThemeOptions } from '@material-ui/core/styles';
11
11
  import { ToolbarProps } from '@material-ui/core/Toolbar';
12
12
  import { TableColumn, TableProps, TableOptions } from '@backstage/core-components';
13
- import { UserListFilterKind, EntityOwnerPickerProps, EntityListPagination } from '@backstage/plugin-catalog-react';
13
+ import { EntityPresentationApi, UserListFilterKind, EntityOwnerPickerProps, EntityListPagination } from '@backstage/plugin-catalog-react';
14
14
  import { CSSProperties } from '@material-ui/styles/withStyles';
15
15
  import { EntityFilterQuery } from '@backstage/catalog-client';
16
16
  import { SearchResultListItemExtensionProps } from '@backstage/plugin-search-react';
@@ -401,8 +401,11 @@ type DocsTableRow = {
401
401
  interface DocsTableColumnFactories {
402
402
  createTitleColumn(options?: {
403
403
  hidden?: boolean;
404
+ entityPresentationApi?: EntityPresentationApi;
405
+ }): TableColumn<DocsTableRow>;
406
+ createNameColumn(options?: {
407
+ entityPresentationApi?: EntityPresentationApi;
404
408
  }): TableColumn<DocsTableRow>;
405
- createNameColumn(): TableColumn<DocsTableRow>;
406
409
  createOwnerColumn(): TableColumn<DocsTableRow>;
407
410
  createKindColumn(): TableColumn<DocsTableRow>;
408
411
  createTypeColumn(): TableColumn<DocsTableRow>;
@@ -1,5 +1,5 @@
1
1
  var name = "@backstage/plugin-techdocs";
2
- var version = "1.18.0";
2
+ var version = "1.18.1-next.1";
3
3
  var description = "The Backstage plugin that renders technical documentation for your components";
4
4
  var backstage = {
5
5
  role: "frontend-plugin",
@@ -44,7 +44,6 @@ const TechDocsReaderPageHeader = (props) => {
44
44
  {
45
45
  color: "inherit",
46
46
  entityRef,
47
- title: entityMetadata?.metadata.title,
48
47
  defaultKind: "Component"
49
48
  }
50
49
  )
@@ -1 +1 @@
1
- {"version":3,"file":"TechDocsReaderPageHeader.esm.js","sources":["../../../../src/reader/components/TechDocsReaderPageHeader/TechDocsReaderPageHeader.tsx"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { PropsWithChildren } from 'react';\nimport Helmet from 'react-helmet';\n\nimport Grid from '@material-ui/core/Grid';\nimport Skeleton from '@material-ui/lab/Skeleton';\nimport CodeIcon from '@material-ui/icons/Code';\n\nimport {\n TechDocsAddonLocations as locations,\n TechDocsEntityMetadata,\n TechDocsMetadata,\n} from '@backstage/plugin-techdocs-react';\nimport {\n EntityRefLink,\n EntityRefLinks,\n getEntityRelations,\n} from '@backstage/plugin-catalog-react';\nimport { RELATION_OWNED_BY, CompoundEntityRef } from '@backstage/catalog-model';\nimport { Header, HeaderLabel } from '@backstage/core-components';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport capitalize from 'lodash/capitalize';\n\nimport { rootRouteRef } from '../../../routes';\nimport { techdocsTranslationRef } from '../../../translation';\nimport { useTechDocsReaderHeaderData } from '../../../hooks/useTechDocsReaderHeaderData';\n\nconst skeleton = <Skeleton animation=\"wave\" variant=\"text\" height={40} />;\n\n/**\n * Props for {@link TechDocsReaderPageHeader}\n *\n * @public\n * @deprecated No need to pass down properties anymore. The component consumes data from `TechDocsReaderPageContext` instead. Use the {@link @backstage/plugin-techdocs-react#useTechDocsReaderPage} hook for custom header.\n */\nexport type TechDocsReaderPageHeaderProps = PropsWithChildren<{\n entityRef?: CompoundEntityRef;\n entityMetadata?: TechDocsEntityMetadata;\n techDocsMetadata?: TechDocsMetadata;\n}>;\n\n/**\n * Renders the reader page header.\n * This component does not accept props, please use\n * the Tech Docs add-ons to customize it\n * @public\n */\nexport const TechDocsReaderPageHeader = (\n props: TechDocsReaderPageHeaderProps,\n) => {\n const { children } = props;\n const { t } = useTranslationRef(techdocsTranslationRef);\n const {\n title,\n subtitle,\n entityRef,\n entityMetadata,\n tabTitle,\n hidden,\n showSourceLink,\n sourceLink,\n addons,\n } = useTechDocsReaderHeaderData();\n\n const docsRootLink = useRouteRef(rootRouteRef)();\n\n if (hidden) return null;\n\n const { spec } = entityMetadata || {};\n const lifecycle = spec?.lifecycle;\n\n const ownedByRelations = entityMetadata\n ? getEntityRelations(entityMetadata, RELATION_OWNED_BY)\n : [];\n\n const labels = (\n <>\n <HeaderLabel\n label={capitalize(entityMetadata?.kind || 'entity')}\n value={\n <EntityRefLink\n color=\"inherit\"\n entityRef={entityRef}\n title={entityMetadata?.metadata.title}\n defaultKind=\"Component\"\n />\n }\n />\n {ownedByRelations.length > 0 && (\n <HeaderLabel\n label={t('readerPageHeader.owner')}\n value={\n <EntityRefLinks\n color=\"inherit\"\n entityRefs={ownedByRelations}\n defaultKind=\"group\"\n />\n }\n />\n )}\n {lifecycle ? (\n <HeaderLabel\n label={t('readerPageHeader.lifecycle')}\n value={String(lifecycle)}\n />\n ) : null}\n {showSourceLink ? (\n <HeaderLabel\n label=\"\"\n value={\n <Grid container direction=\"column\" alignItems=\"center\">\n <Grid style={{ padding: 0 }} item>\n <CodeIcon style={{ marginTop: '-25px' }} />\n </Grid>\n <Grid style={{ padding: 0 }} item>\n {t('readerPageHeader.source')}\n </Grid>\n </Grid>\n }\n url={sourceLink}\n />\n ) : null}\n </>\n );\n\n return (\n <Header\n type=\"Documentation\"\n typeLink={docsRootLink}\n title={title || skeleton}\n subtitle={subtitle === '' ? undefined : subtitle || skeleton}\n >\n <Helmet titleTemplate=\"%s\">\n <title>{tabTitle}</title>\n </Helmet>\n {labels}\n {children}\n {addons.renderComponentsByLocation(locations.Header)}\n </Header>\n );\n};\n"],"names":["locations"],"mappings":"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"}
1
+ {"version":3,"file":"TechDocsReaderPageHeader.esm.js","sources":["../../../../src/reader/components/TechDocsReaderPageHeader/TechDocsReaderPageHeader.tsx"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { PropsWithChildren } from 'react';\nimport Helmet from 'react-helmet';\n\nimport Grid from '@material-ui/core/Grid';\nimport Skeleton from '@material-ui/lab/Skeleton';\nimport CodeIcon from '@material-ui/icons/Code';\n\nimport {\n TechDocsAddonLocations as locations,\n TechDocsEntityMetadata,\n TechDocsMetadata,\n} from '@backstage/plugin-techdocs-react';\nimport {\n EntityRefLink,\n EntityRefLinks,\n getEntityRelations,\n} from '@backstage/plugin-catalog-react';\nimport { RELATION_OWNED_BY, CompoundEntityRef } from '@backstage/catalog-model';\nimport { Header, HeaderLabel } from '@backstage/core-components';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport capitalize from 'lodash/capitalize';\n\nimport { rootRouteRef } from '../../../routes';\nimport { techdocsTranslationRef } from '../../../translation';\nimport { useTechDocsReaderHeaderData } from '../../../hooks/useTechDocsReaderHeaderData';\n\nconst skeleton = <Skeleton animation=\"wave\" variant=\"text\" height={40} />;\n\n/**\n * Props for {@link TechDocsReaderPageHeader}\n *\n * @public\n * @deprecated No need to pass down properties anymore. The component consumes data from `TechDocsReaderPageContext` instead. Use the {@link @backstage/plugin-techdocs-react#useTechDocsReaderPage} hook for custom header.\n */\nexport type TechDocsReaderPageHeaderProps = PropsWithChildren<{\n entityRef?: CompoundEntityRef;\n entityMetadata?: TechDocsEntityMetadata;\n techDocsMetadata?: TechDocsMetadata;\n}>;\n\n/**\n * Renders the reader page header.\n * This component does not accept props, please use\n * the Tech Docs add-ons to customize it\n * @public\n */\nexport const TechDocsReaderPageHeader = (\n props: TechDocsReaderPageHeaderProps,\n) => {\n const { children } = props;\n const { t } = useTranslationRef(techdocsTranslationRef);\n const {\n title,\n subtitle,\n entityRef,\n entityMetadata,\n tabTitle,\n hidden,\n showSourceLink,\n sourceLink,\n addons,\n } = useTechDocsReaderHeaderData();\n\n const docsRootLink = useRouteRef(rootRouteRef)();\n\n if (hidden) return null;\n\n const { spec } = entityMetadata || {};\n const lifecycle = spec?.lifecycle;\n\n const ownedByRelations = entityMetadata\n ? getEntityRelations(entityMetadata, RELATION_OWNED_BY)\n : [];\n\n const labels = (\n <>\n <HeaderLabel\n label={capitalize(entityMetadata?.kind || 'entity')}\n value={\n <EntityRefLink\n color=\"inherit\"\n entityRef={entityRef}\n defaultKind=\"Component\"\n />\n }\n />\n {ownedByRelations.length > 0 && (\n <HeaderLabel\n label={t('readerPageHeader.owner')}\n value={\n <EntityRefLinks\n color=\"inherit\"\n entityRefs={ownedByRelations}\n defaultKind=\"group\"\n />\n }\n />\n )}\n {lifecycle ? (\n <HeaderLabel\n label={t('readerPageHeader.lifecycle')}\n value={String(lifecycle)}\n />\n ) : null}\n {showSourceLink ? (\n <HeaderLabel\n label=\"\"\n value={\n <Grid container direction=\"column\" alignItems=\"center\">\n <Grid style={{ padding: 0 }} item>\n <CodeIcon style={{ marginTop: '-25px' }} />\n </Grid>\n <Grid style={{ padding: 0 }} item>\n {t('readerPageHeader.source')}\n </Grid>\n </Grid>\n }\n url={sourceLink}\n />\n ) : null}\n </>\n );\n\n return (\n <Header\n type=\"Documentation\"\n typeLink={docsRootLink}\n title={title || skeleton}\n subtitle={subtitle === '' ? undefined : subtitle || skeleton}\n >\n <Helmet titleTemplate=\"%s\">\n <title>{tabTitle}</title>\n </Helmet>\n {labels}\n {children}\n {addons.renderComponentsByLocation(locations.Header)}\n </Header>\n );\n};\n"],"names":["locations"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-techdocs",
3
- "version": "1.18.0",
3
+ "version": "1.18.1-next.1",
4
4
  "description": "The Backstage plugin that renders technical documentation for your components",
5
5
  "backstage": {
6
6
  "role": "frontend-plugin",
@@ -71,23 +71,23 @@
71
71
  "test": "backstage-cli package test"
72
72
  },
73
73
  "dependencies": {
74
- "@backstage/catalog-client": "^1.16.1",
75
- "@backstage/catalog-model": "^1.10.0",
76
- "@backstage/config": "^1.3.8",
77
- "@backstage/core-components": "^0.18.13",
78
- "@backstage/core-plugin-api": "^1.12.9",
79
- "@backstage/errors": "^1.3.1",
80
- "@backstage/frontend-plugin-api": "^0.18.0",
81
- "@backstage/integration": "^2.1.0",
82
- "@backstage/integration-react": "^1.2.21",
83
- "@backstage/plugin-auth-react": "^0.1.30",
84
- "@backstage/plugin-catalog-react": "^3.2.1",
85
- "@backstage/plugin-search-common": "^1.2.24",
86
- "@backstage/plugin-search-react": "^1.11.7",
87
- "@backstage/plugin-techdocs-common": "^0.1.1",
88
- "@backstage/plugin-techdocs-react": "^1.3.14",
89
- "@backstage/theme": "^0.7.3",
90
- "@backstage/ui": "^0.17.1",
74
+ "@backstage/catalog-client": "1.16.2-next.0",
75
+ "@backstage/catalog-model": "1.10.0",
76
+ "@backstage/config": "1.3.8",
77
+ "@backstage/core-components": "0.18.14-next.1",
78
+ "@backstage/core-plugin-api": "1.12.10-next.0",
79
+ "@backstage/errors": "1.3.1",
80
+ "@backstage/frontend-plugin-api": "0.18.1-next.0",
81
+ "@backstage/integration": "2.1.2-next.0",
82
+ "@backstage/integration-react": "1.2.22-next.0",
83
+ "@backstage/plugin-auth-react": "0.1.31-next.1",
84
+ "@backstage/plugin-catalog-react": "3.2.3-next.1",
85
+ "@backstage/plugin-search-common": "1.2.24",
86
+ "@backstage/plugin-search-react": "1.11.8-next.1",
87
+ "@backstage/plugin-techdocs-common": "0.1.1",
88
+ "@backstage/plugin-techdocs-react": "1.3.15-next.1",
89
+ "@backstage/theme": "0.7.3",
90
+ "@backstage/ui": "0.18.0-next.1",
91
91
  "@material-ui/core": "^4.12.2",
92
92
  "@material-ui/icons": "^4.9.1",
93
93
  "@material-ui/lab": "4.0.0-alpha.61",
@@ -102,12 +102,12 @@
102
102
  "zod": "^4.0.0"
103
103
  },
104
104
  "devDependencies": {
105
- "@backstage/cli": "^0.36.5",
106
- "@backstage/core-app-api": "^1.20.4",
107
- "@backstage/dev-utils": "^1.1.26",
108
- "@backstage/plugin-catalog": "^2.0.8",
109
- "@backstage/plugin-techdocs-module-addons-contrib": "^1.1.39",
110
- "@backstage/test-utils": "^1.7.21",
105
+ "@backstage/cli": "0.36.6-next.0",
106
+ "@backstage/core-app-api": "1.20.5-next.1",
107
+ "@backstage/dev-utils": "1.1.27-next.1",
108
+ "@backstage/plugin-catalog": "2.0.9-next.1",
109
+ "@backstage/plugin-techdocs-module-addons-contrib": "1.1.40-next.1",
110
+ "@backstage/test-utils": "1.7.22-next.1",
111
111
  "@testing-library/dom": "^10.0.0",
112
112
  "@testing-library/jest-dom": "^6.0.0",
113
113
  "@testing-library/react": "^16.0.0",