@backstage/plugin-catalog-react 1.21.0-next.2 → 1.21.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,52 @@
1
1
  # @backstage/plugin-catalog-react
2
2
 
3
+ ## 1.21.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 3c433e9: Correct translation key from "type" to "owner" for owner column in entity table to ensure the right translation is loaded.
8
+ - Updated dependencies
9
+ - @backstage/core-components@0.18.1
10
+
11
+ ## 1.21.0
12
+
13
+ ### Minor Changes
14
+
15
+ - 0e9ec44: Introduced new `streamEntities` async generator method for the catalog.
16
+
17
+ Catalog API and Catalog Service now includes a `streamEntities` method that allows for streaming entities from the catalog.
18
+ This method is designed to handle large datasets efficiently by processing entities in a stream rather than loading them
19
+ all into memory at once. This is useful when you need to fetch a large number of entities but do not want to use pagination
20
+ or fetch all entities at once.
21
+
22
+ Example usage:
23
+
24
+ ```ts
25
+ const pageStream = catalogClient.streamEntities({ pageSize: 100 }, { token });
26
+ for await (const page of pageStream) {
27
+ // Handle page of entities
28
+ for (const entity of page) {
29
+ console.log(entity);
30
+ }
31
+ }
32
+ ```
33
+
34
+ ### Patch Changes
35
+
36
+ - 0174799: Fix a potential race condition in EntityListProvider when selecting filters
37
+ - 4316c11: Catalog table columns support i18n
38
+ - 79ff318: Removed the deprecation warning when not passing an explicit type to `EntityCardBlueprint`. Omitting the type is now intended, allowing the layout to pick the default type instead, typically `content`.
39
+ - ad0f58d: Support `default*` for older packages as this package is in range for breaking `/alpha` changes
40
+ - Updated dependencies
41
+ - @backstage/frontend-plugin-api@0.12.0
42
+ - @backstage/core-plugin-api@1.11.0
43
+ - @backstage/catalog-client@1.12.0
44
+ - @backstage/frontend-test-utils@0.3.6
45
+ - @backstage/core-components@0.18.0
46
+ - @backstage/types@1.2.2
47
+ - @backstage/core-compat-api@0.5.2
48
+ - @backstage/integration-react@1.2.10
49
+
3
50
  ## 1.21.0-next.2
4
51
 
5
52
  ### Minor Changes
@@ -33,10 +33,6 @@ const EntityCardBlueprint = createExtensionBlueprint({
33
33
  const finalType = config.type ?? type;
34
34
  if (finalType) {
35
35
  yield entityCardTypeDataRef(finalType);
36
- } else {
37
- console.warn(
38
- `DEPRECATION WARNING: Not providing type for entity cards is deprecated. Missing from '${node.spec.id}'`
39
- );
40
36
  }
41
37
  }
42
38
  });
@@ -1 +1 @@
1
- {"version":3,"file":"EntityCardBlueprint.esm.js","sources":["../../../src/alpha/blueprints/EntityCardBlueprint.ts"],"sourcesContent":["/*\n * Copyright 2024 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 ExtensionBoundary,\n coreExtensionData,\n createExtensionBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport {\n entityFilterFunctionDataRef,\n entityFilterExpressionDataRef,\n entityCardTypeDataRef,\n entityCardTypes,\n EntityCardType,\n} from './extensionData';\nimport { createEntityPredicateSchema } from '../predicates/createEntityPredicateSchema';\nimport { EntityPredicate } from '../predicates';\nimport { resolveEntityFilterData } from './resolveEntityFilterData';\nimport { Entity } from '@backstage/catalog-model';\n\n/**\n * @alpha\n * A blueprint for creating cards for the entity pages in the catalog.\n */\nexport const EntityCardBlueprint = createExtensionBlueprint({\n kind: 'entity-card',\n attachTo: { id: 'entity-content:catalog/overview', input: 'cards' },\n output: [\n coreExtensionData.reactElement,\n entityFilterFunctionDataRef.optional(),\n entityFilterExpressionDataRef.optional(),\n entityCardTypeDataRef.optional(),\n ],\n dataRefs: {\n filterFunction: entityFilterFunctionDataRef,\n filterExpression: entityFilterExpressionDataRef,\n type: entityCardTypeDataRef,\n },\n config: {\n schema: {\n filter: z =>\n z.union([z.string(), createEntityPredicateSchema(z)]).optional(),\n type: z => z.enum(entityCardTypes).optional(),\n },\n },\n *factory(\n {\n loader,\n filter,\n type,\n }: {\n loader: () => Promise<JSX.Element>;\n filter?: string | EntityPredicate | ((entity: Entity) => boolean);\n type?: EntityCardType;\n },\n { node, config },\n ) {\n yield coreExtensionData.reactElement(ExtensionBoundary.lazy(node, loader));\n\n yield* resolveEntityFilterData(filter, config, node);\n\n const finalType = config.type ?? type;\n if (finalType) {\n yield entityCardTypeDataRef(finalType);\n } else {\n // eslint-disable-next-line no-console\n console.warn(\n `DEPRECATION WARNING: Not providing type for entity cards is deprecated. Missing from '${node.spec.id}'`,\n );\n }\n },\n});\n"],"names":[],"mappings":";;;;;AAqCO,MAAM,sBAAsB,wBAAA,CAAyB;AAAA,EAC1D,IAAA,EAAM,aAAA;AAAA,EACN,QAAA,EAAU,EAAE,EAAA,EAAI,iCAAA,EAAmC,OAAO,OAAA,EAAQ;AAAA,EAClE,MAAA,EAAQ;AAAA,IACN,iBAAA,CAAkB,YAAA;AAAA,IAClB,4BAA4B,QAAA,EAAS;AAAA,IACrC,8BAA8B,QAAA,EAAS;AAAA,IACvC,sBAAsB,QAAA;AAAS,GACjC;AAAA,EACA,QAAA,EAAU;AAAA,IACR,cAAA,EAAgB,2BAAA;AAAA,IAChB,gBAAA,EAAkB,6BAAA;AAAA,IAClB,IAAA,EAAM;AAAA,GACR;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ,CAAA,CAAA,KACN,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,EAAO,EAAG,2BAAA,CAA4B,CAAC,CAAC,CAAC,EAAE,QAAA,EAAS;AAAA,MACjE,MAAM,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,CAAK,eAAe,EAAE,QAAA;AAAS;AAC9C,GACF;AAAA,EACA,CAAC,OAAA,CACC;AAAA,IACE,MAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF,EAKA,EAAE,IAAA,EAAM,MAAA,EAAO,EACf;AACA,IAAA,MAAM,kBAAkB,YAAA,CAAa,iBAAA,CAAkB,IAAA,CAAK,IAAA,EAAM,MAAM,CAAC,CAAA;AAEzE,IAAA,OAAO,uBAAA,CAAwB,MAAA,EAAQ,MAAA,EAAQ,IAAI,CAAA;AAEnD,IAAA,MAAM,SAAA,GAAY,OAAO,IAAA,IAAQ,IAAA;AACjC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,sBAAsB,SAAS,CAAA;AAAA,IACvC,CAAA,MAAO;AAEL,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN,CAAA,sFAAA,EAAyF,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA,CAAA;AAAA,OACvG;AAAA,IACF;AAAA,EACF;AACF,CAAC;;;;"}
1
+ {"version":3,"file":"EntityCardBlueprint.esm.js","sources":["../../../src/alpha/blueprints/EntityCardBlueprint.ts"],"sourcesContent":["/*\n * Copyright 2024 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 ExtensionBoundary,\n coreExtensionData,\n createExtensionBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport {\n entityFilterFunctionDataRef,\n entityFilterExpressionDataRef,\n entityCardTypeDataRef,\n entityCardTypes,\n EntityCardType,\n} from './extensionData';\nimport { createEntityPredicateSchema } from '../predicates/createEntityPredicateSchema';\nimport { EntityPredicate } from '../predicates';\nimport { resolveEntityFilterData } from './resolveEntityFilterData';\nimport { Entity } from '@backstage/catalog-model';\n\n/**\n * @alpha\n * A blueprint for creating cards for the entity pages in the catalog.\n */\nexport const EntityCardBlueprint = createExtensionBlueprint({\n kind: 'entity-card',\n attachTo: { id: 'entity-content:catalog/overview', input: 'cards' },\n output: [\n coreExtensionData.reactElement,\n entityFilterFunctionDataRef.optional(),\n entityFilterExpressionDataRef.optional(),\n entityCardTypeDataRef.optional(),\n ],\n dataRefs: {\n filterFunction: entityFilterFunctionDataRef,\n filterExpression: entityFilterExpressionDataRef,\n type: entityCardTypeDataRef,\n },\n config: {\n schema: {\n filter: z =>\n z.union([z.string(), createEntityPredicateSchema(z)]).optional(),\n type: z => z.enum(entityCardTypes).optional(),\n },\n },\n *factory(\n {\n loader,\n filter,\n type,\n }: {\n loader: () => Promise<JSX.Element>;\n filter?: string | EntityPredicate | ((entity: Entity) => boolean);\n type?: EntityCardType;\n },\n { node, config },\n ) {\n yield coreExtensionData.reactElement(ExtensionBoundary.lazy(node, loader));\n\n yield* resolveEntityFilterData(filter, config, node);\n\n const finalType = config.type ?? type;\n if (finalType) {\n yield entityCardTypeDataRef(finalType);\n }\n },\n});\n"],"names":[],"mappings":";;;;;AAqCO,MAAM,sBAAsB,wBAAA,CAAyB;AAAA,EAC1D,IAAA,EAAM,aAAA;AAAA,EACN,QAAA,EAAU,EAAE,EAAA,EAAI,iCAAA,EAAmC,OAAO,OAAA,EAAQ;AAAA,EAClE,MAAA,EAAQ;AAAA,IACN,iBAAA,CAAkB,YAAA;AAAA,IAClB,4BAA4B,QAAA,EAAS;AAAA,IACrC,8BAA8B,QAAA,EAAS;AAAA,IACvC,sBAAsB,QAAA;AAAS,GACjC;AAAA,EACA,QAAA,EAAU;AAAA,IACR,cAAA,EAAgB,2BAAA;AAAA,IAChB,gBAAA,EAAkB,6BAAA;AAAA,IAClB,IAAA,EAAM;AAAA,GACR;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ,CAAA,CAAA,KACN,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,EAAO,EAAG,2BAAA,CAA4B,CAAC,CAAC,CAAC,EAAE,QAAA,EAAS;AAAA,MACjE,MAAM,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,CAAK,eAAe,EAAE,QAAA;AAAS;AAC9C,GACF;AAAA,EACA,CAAC,OAAA,CACC;AAAA,IACE,MAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF,EAKA,EAAE,IAAA,EAAM,MAAA,EAAO,EACf;AACA,IAAA,MAAM,kBAAkB,YAAA,CAAa,iBAAA,CAAkB,IAAA,CAAK,IAAA,EAAM,MAAM,CAAC,CAAA;AAEzE,IAAA,OAAO,uBAAA,CAAwB,MAAA,EAAQ,MAAA,EAAQ,IAAI,CAAA;AAEnD,IAAA,MAAM,SAAA,GAAY,OAAO,IAAA,IAAQ,IAAA;AACjC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,sBAAsB,SAAS,CAAA;AAAA,IACvC;AAAA,EACF;AACF,CAAC;;;;"}
package/dist/alpha.d.ts CHANGED
@@ -374,6 +374,18 @@ declare const catalogReactTranslationRef: _backstage_core_plugin_api_alpha.Trans
374
374
  readonly "userListPicker.personalFilter.title": "Personal";
375
375
  readonly "userListPicker.personalFilter.ownedLabel": "Owned";
376
376
  readonly "userListPicker.personalFilter.starredLabel": "Starred";
377
+ readonly "entityTableColumnTitle.name": "Name";
378
+ readonly "entityTableColumnTitle.type": "Type";
379
+ readonly "entityTableColumnTitle.label": "Label";
380
+ readonly "entityTableColumnTitle.title": "Title";
381
+ readonly "entityTableColumnTitle.description": "Description";
382
+ readonly "entityTableColumnTitle.domain": "Domain";
383
+ readonly "entityTableColumnTitle.system": "System";
384
+ readonly "entityTableColumnTitle.tags": "Tags";
385
+ readonly "entityTableColumnTitle.namespace": "Namespace";
386
+ readonly "entityTableColumnTitle.lifecycle": "Lifecycle";
387
+ readonly "entityTableColumnTitle.owner": "Owner";
388
+ readonly "entityTableColumnTitle.targets": "Targets";
377
389
  }>;
378
390
 
379
391
  /**
@@ -393,4 +405,15 @@ declare function useEntityPermission(permission: ResourcePermission<'catalog-ent
393
405
  error?: Error;
394
406
  };
395
407
 
396
- export { CatalogFilterBlueprint, EntityCardBlueprint, type EntityCardType, EntityContentBlueprint, EntityContentLayoutBlueprint, type EntityContentLayoutProps, EntityContextMenuItemBlueprint, type EntityContextMenuItemParams, EntityHeaderBlueprint, EntityIconLinkBlueprint, type EntityPredicate, type EntityPredicateExpression, type EntityPredicatePrimitive, type EntityPredicateValue, type UseProps, catalogReactTranslationRef, convertLegacyEntityCardExtension, convertLegacyEntityContentExtension, defaultEntityContentGroups, entityPredicateToFilterFunction, isOwnerOf, useEntityPermission };
408
+ /**
409
+ * @alpha
410
+ */
411
+ type EntityTableColumnTitleProps = {
412
+ translationKey: 'name' | 'system' | 'owner' | 'type' | 'lifecycle' | 'namespace' | 'description' | 'tags' | 'targets' | 'title' | 'label' | 'domain';
413
+ };
414
+ /**
415
+ * @alpha
416
+ */
417
+ declare const EntityTableColumnTitle: ({ translationKey, }: EntityTableColumnTitleProps) => "Title" | "System" | "Domain" | "Lifecycle" | "Namespace" | "Owner" | "Tags" | "Type" | "Name" | "Description" | "Targets" | "Label";
418
+
419
+ export { CatalogFilterBlueprint, EntityCardBlueprint, type EntityCardType, EntityContentBlueprint, EntityContentLayoutBlueprint, type EntityContentLayoutProps, EntityContextMenuItemBlueprint, type EntityContextMenuItemParams, EntityHeaderBlueprint, EntityIconLinkBlueprint, type EntityPredicate, type EntityPredicateExpression, type EntityPredicatePrimitive, type EntityPredicateValue, EntityTableColumnTitle, type EntityTableColumnTitleProps, type UseProps, catalogReactTranslationRef, convertLegacyEntityCardExtension, convertLegacyEntityContentExtension, defaultEntityContentGroups, entityPredicateToFilterFunction, isOwnerOf, useEntityPermission };
package/dist/alpha.esm.js CHANGED
@@ -12,4 +12,5 @@ export { entityPredicateToFilterFunction } from './alpha/predicates/entityPredic
12
12
  export { catalogReactTranslationRef } from './translation.esm.js';
13
13
  export { isOwnerOf } from './utils/isOwnerOf.esm.js';
14
14
  export { useEntityPermission } from './hooks/useEntityPermission.esm.js';
15
+ export { EntityTableColumnTitle } from './components/EntityTable/TitleColumn.esm.js';
15
16
  //# sourceMappingURL=alpha.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"alpha.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
1
+ {"version":3,"file":"alpha.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
@@ -0,0 +1,12 @@
1
+ import { useTranslationRef } from '@backstage/frontend-plugin-api';
2
+ import { catalogReactTranslationRef } from '../../translation.esm.js';
3
+
4
+ const EntityTableColumnTitle = ({
5
+ translationKey
6
+ }) => {
7
+ const { t } = useTranslationRef(catalogReactTranslationRef);
8
+ return t(`entityTableColumnTitle.${translationKey}`);
9
+ };
10
+
11
+ export { EntityTableColumnTitle };
12
+ //# sourceMappingURL=TitleColumn.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TitleColumn.esm.js","sources":["../../../src/components/EntityTable/TitleColumn.tsx"],"sourcesContent":["/*\n * Copyright 2025 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 { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport { catalogReactTranslationRef } from '../../translation';\n\n/**\n * @alpha\n */\nexport type EntityTableColumnTitleProps = {\n translationKey:\n | 'name'\n | 'system'\n | 'owner'\n | 'type'\n | 'lifecycle'\n | 'namespace'\n | 'description'\n | 'tags'\n | 'targets'\n | 'title'\n | 'label'\n | 'domain';\n};\n\n/**\n * @alpha\n */\nexport const EntityTableColumnTitle = ({\n translationKey,\n}: EntityTableColumnTitleProps) => {\n const { t } = useTranslationRef(catalogReactTranslationRef);\n return t(`entityTableColumnTitle.${translationKey}`);\n};\n"],"names":[],"mappings":";;;AAyCO,MAAM,yBAAyB,CAAC;AAAA,EACrC;AACF,CAAA,KAAmC;AACjC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,0BAA0B,CAAA;AAC1D,EAAA,OAAO,CAAA,CAAE,CAAA,uBAAA,EAA0B,cAAc,CAAA,CAAE,CAAA;AACrD;;;;"}
@@ -5,6 +5,7 @@ import { getEntityRelations } from '../../utils/getEntityRelations.esm.js';
5
5
  import { EntityRefLink } from '../EntityRefLink/EntityRefLink.esm.js';
6
6
  import { EntityRefLinks } from '../EntityRefLink/EntityRefLinks.esm.js';
7
7
  import { humanizeEntityRef } from '../EntityRefLink/humanize.esm.js';
8
+ import { EntityTableColumnTitle } from './TitleColumn.esm.js';
8
9
 
9
10
  const columnFactories = Object.freeze({
10
11
  createEntityRefColumn(options) {
@@ -15,7 +16,7 @@ const columnFactories = Object.freeze({
15
16
  });
16
17
  }
17
18
  return {
18
- title: "Name",
19
+ title: /* @__PURE__ */ jsx(EntityTableColumnTitle, { translationKey: "name" }),
19
20
  highlight: true,
20
21
  customFilterAndSearch(filter, entity) {
21
22
  return formatContent(entity).includes(filter);
@@ -62,14 +63,14 @@ const columnFactories = Object.freeze({
62
63
  },
63
64
  createOwnerColumn() {
64
65
  return this.createEntityRelationColumn({
65
- title: "Owner",
66
+ title: /* @__PURE__ */ jsx(EntityTableColumnTitle, { translationKey: "owner" }),
66
67
  relation: RELATION_OWNED_BY,
67
68
  defaultKind: "group"
68
69
  });
69
70
  },
70
71
  createDomainColumn() {
71
72
  return this.createEntityRelationColumn({
72
- title: "Domain",
73
+ title: /* @__PURE__ */ jsx(EntityTableColumnTitle, { translationKey: "domain" }),
73
74
  relation: RELATION_PART_OF,
74
75
  defaultKind: "domain",
75
76
  filter: {
@@ -79,7 +80,7 @@ const columnFactories = Object.freeze({
79
80
  },
80
81
  createSystemColumn() {
81
82
  return this.createEntityRelationColumn({
82
- title: "System",
83
+ title: /* @__PURE__ */ jsx(EntityTableColumnTitle, { translationKey: "system" }),
83
84
  relation: RELATION_PART_OF,
84
85
  defaultKind: "system",
85
86
  filter: {
@@ -89,7 +90,7 @@ const columnFactories = Object.freeze({
89
90
  },
90
91
  createMetadataDescriptionColumn() {
91
92
  return {
92
- title: "Description",
93
+ title: /* @__PURE__ */ jsx(EntityTableColumnTitle, { translationKey: "description" }),
93
94
  field: "metadata.description",
94
95
  render: (entity) => /* @__PURE__ */ jsx(
95
96
  OverflowTooltip,
@@ -103,13 +104,13 @@ const columnFactories = Object.freeze({
103
104
  },
104
105
  createSpecLifecycleColumn() {
105
106
  return {
106
- title: "Lifecycle",
107
+ title: /* @__PURE__ */ jsx(EntityTableColumnTitle, { translationKey: "lifecycle" }),
107
108
  field: "spec.lifecycle"
108
109
  };
109
110
  },
110
111
  createSpecTypeColumn() {
111
112
  return {
112
- title: "Type",
113
+ title: /* @__PURE__ */ jsx(EntityTableColumnTitle, { translationKey: "type" }),
113
114
  field: "spec.type"
114
115
  };
115
116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"columns.esm.js","sources":["../../../src/components/EntityTable/columns.tsx"],"sourcesContent":["/*\n * Copyright 2020 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 Entity,\n CompoundEntityRef,\n RELATION_OWNED_BY,\n RELATION_PART_OF,\n} from '@backstage/catalog-model';\nimport { OverflowTooltip, TableColumn } from '@backstage/core-components';\nimport { getEntityRelations } from '../../utils';\nimport {\n EntityRefLink,\n EntityRefLinks,\n humanizeEntityRef,\n} from '../EntityRefLink';\n\n// TODO: column title support i18n\n\n/** @public */\nexport const columnFactories = Object.freeze({\n createEntityRefColumn<T extends Entity>(options: {\n defaultKind?: string;\n }): TableColumn<T> {\n const { defaultKind } = options;\n function formatContent(entity: T): string {\n return (\n entity.metadata?.title ||\n humanizeEntityRef(entity, {\n defaultKind,\n })\n );\n }\n\n return {\n title: 'Name',\n highlight: true,\n customFilterAndSearch(filter, entity) {\n // TODO: We could implement this more efficiently, like searching over\n // each field that is displayed individually (kind, namespace, name).\n // but that might confuse the user as it will behave different than a\n // simple text search.\n // Another alternative would be to cache the values. But writing them\n // into the entity feels bad too.\n return formatContent(entity).includes(filter);\n },\n customSort(entity1, entity2) {\n // TODO: We could implement this more efficiently by comparing field by field.\n // This has similar issues as above.\n return formatContent(entity1).localeCompare(formatContent(entity2));\n },\n render: entity => (\n <EntityRefLink\n entityRef={entity}\n defaultKind={defaultKind}\n title={entity.metadata?.title}\n />\n ),\n };\n },\n createEntityRelationColumn<T extends Entity>(options: {\n title: string;\n relation: string;\n defaultKind?: string;\n filter?: { kind: string };\n }): TableColumn<T> {\n const { title, relation, defaultKind, filter: entityFilter } = options;\n\n function getRelations(entity: T): CompoundEntityRef[] {\n return getEntityRelations(entity, relation, entityFilter);\n }\n\n function formatContent(entity: T): string {\n return getRelations(entity)\n .map(r => humanizeEntityRef(r, { defaultKind }))\n .join(', ');\n }\n\n return {\n title,\n customFilterAndSearch(filter, entity) {\n return formatContent(entity).includes(filter);\n },\n customSort(entity1, entity2) {\n return formatContent(entity1).localeCompare(formatContent(entity2));\n },\n render: entity => {\n return (\n <EntityRefLinks\n entityRefs={getRelations(entity)}\n defaultKind={defaultKind}\n />\n );\n },\n };\n },\n createOwnerColumn<T extends Entity>(): TableColumn<T> {\n return this.createEntityRelationColumn({\n title: 'Owner',\n relation: RELATION_OWNED_BY,\n defaultKind: 'group',\n });\n },\n createDomainColumn<T extends Entity>(): TableColumn<T> {\n return this.createEntityRelationColumn({\n title: 'Domain',\n relation: RELATION_PART_OF,\n defaultKind: 'domain',\n filter: {\n kind: 'domain',\n },\n });\n },\n createSystemColumn<T extends Entity>(): TableColumn<T> {\n return this.createEntityRelationColumn({\n title: 'System',\n relation: RELATION_PART_OF,\n defaultKind: 'system',\n filter: {\n kind: 'system',\n },\n });\n },\n createMetadataDescriptionColumn<T extends Entity>(): TableColumn<T> {\n return {\n title: 'Description',\n field: 'metadata.description',\n render: entity => (\n <OverflowTooltip\n text={entity.metadata.description}\n placement=\"bottom-start\"\n line={2}\n />\n ),\n };\n },\n createSpecLifecycleColumn<T extends Entity>(): TableColumn<T> {\n return {\n title: 'Lifecycle',\n field: 'spec.lifecycle',\n };\n },\n createSpecTypeColumn<T extends Entity>(): TableColumn<T> {\n return {\n title: 'Type',\n field: 'spec.type',\n };\n },\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"columns.esm.js","sources":["../../../src/components/EntityTable/columns.tsx"],"sourcesContent":["/*\n * Copyright 2020 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 Entity,\n CompoundEntityRef,\n RELATION_OWNED_BY,\n RELATION_PART_OF,\n} from '@backstage/catalog-model';\nimport { OverflowTooltip, TableColumn } from '@backstage/core-components';\nimport { getEntityRelations } from '../../utils';\nimport {\n EntityRefLink,\n EntityRefLinks,\n humanizeEntityRef,\n} from '../EntityRefLink';\nimport { EntityTableColumnTitle } from './TitleColumn';\n\n/** @public */\nexport const columnFactories = Object.freeze({\n createEntityRefColumn<T extends Entity>(options: {\n defaultKind?: string;\n }): TableColumn<T> {\n const { defaultKind } = options;\n function formatContent(entity: T): string {\n return (\n entity.metadata?.title ||\n humanizeEntityRef(entity, {\n defaultKind,\n })\n );\n }\n\n return {\n title: <EntityTableColumnTitle translationKey=\"name\" />,\n highlight: true,\n customFilterAndSearch(filter, entity) {\n // TODO: We could implement this more efficiently, like searching over\n // each field that is displayed individually (kind, namespace, name).\n // but that might confuse the user as it will behave different than a\n // simple text search.\n // Another alternative would be to cache the values. But writing them\n // into the entity feels bad too.\n return formatContent(entity).includes(filter);\n },\n customSort(entity1, entity2) {\n // TODO: We could implement this more efficiently by comparing field by field.\n // This has similar issues as above.\n return formatContent(entity1).localeCompare(formatContent(entity2));\n },\n render: entity => (\n <EntityRefLink\n entityRef={entity}\n defaultKind={defaultKind}\n title={entity.metadata?.title}\n />\n ),\n };\n },\n createEntityRelationColumn<T extends Entity>(options: {\n title: string | JSX.Element;\n relation: string;\n defaultKind?: string;\n filter?: { kind: string };\n }): TableColumn<T> {\n const { title, relation, defaultKind, filter: entityFilter } = options;\n\n function getRelations(entity: T): CompoundEntityRef[] {\n return getEntityRelations(entity, relation, entityFilter);\n }\n\n function formatContent(entity: T): string {\n return getRelations(entity)\n .map(r => humanizeEntityRef(r, { defaultKind }))\n .join(', ');\n }\n\n return {\n title,\n customFilterAndSearch(filter, entity) {\n return formatContent(entity).includes(filter);\n },\n customSort(entity1, entity2) {\n return formatContent(entity1).localeCompare(formatContent(entity2));\n },\n render: entity => {\n return (\n <EntityRefLinks\n entityRefs={getRelations(entity)}\n defaultKind={defaultKind}\n />\n );\n },\n };\n },\n createOwnerColumn<T extends Entity>(): TableColumn<T> {\n return this.createEntityRelationColumn({\n title: <EntityTableColumnTitle translationKey=\"owner\" />,\n relation: RELATION_OWNED_BY,\n defaultKind: 'group',\n });\n },\n createDomainColumn<T extends Entity>(): TableColumn<T> {\n return this.createEntityRelationColumn({\n title: <EntityTableColumnTitle translationKey=\"domain\" />,\n relation: RELATION_PART_OF,\n defaultKind: 'domain',\n filter: {\n kind: 'domain',\n },\n });\n },\n createSystemColumn<T extends Entity>(): TableColumn<T> {\n return this.createEntityRelationColumn({\n title: <EntityTableColumnTitle translationKey=\"system\" />,\n relation: RELATION_PART_OF,\n defaultKind: 'system',\n filter: {\n kind: 'system',\n },\n });\n },\n createMetadataDescriptionColumn<T extends Entity>(): TableColumn<T> {\n return {\n title: <EntityTableColumnTitle translationKey=\"description\" />,\n field: 'metadata.description',\n render: entity => (\n <OverflowTooltip\n text={entity.metadata.description}\n placement=\"bottom-start\"\n line={2}\n />\n ),\n };\n },\n createSpecLifecycleColumn<T extends Entity>(): TableColumn<T> {\n return {\n title: <EntityTableColumnTitle translationKey=\"lifecycle\" />,\n field: 'spec.lifecycle',\n };\n },\n createSpecTypeColumn<T extends Entity>(): TableColumn<T> {\n return {\n title: <EntityTableColumnTitle translationKey=\"type\" />,\n field: 'spec.type',\n };\n },\n});\n"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -448,7 +448,7 @@ declare const EntityTable: {
448
448
  defaultKind?: string;
449
449
  }): TableColumn<T>;
450
450
  createEntityRelationColumn<T extends Entity>(options: {
451
- title: string;
451
+ title: string | JSX.Element;
452
452
  relation: string;
453
453
  defaultKind?: string;
454
454
  filter?: {
@@ -472,7 +472,7 @@ declare const columnFactories: Readonly<{
472
472
  defaultKind?: string;
473
473
  }): TableColumn<T>;
474
474
  createEntityRelationColumn<T extends Entity>(options: {
475
- title: string;
475
+ title: string | JSX.Element;
476
476
  relation: string;
477
477
  defaultKind?: string;
478
478
  filter?: {
@@ -99,6 +99,20 @@ const catalogReactTranslationRef = createTranslationRef({
99
99
  starredLabel: "Starred"
100
100
  },
101
101
  orgFilterAllLabel: "All"
102
+ },
103
+ entityTableColumnTitle: {
104
+ name: "Name",
105
+ system: "System",
106
+ owner: "Owner",
107
+ type: "Type",
108
+ lifecycle: "Lifecycle",
109
+ namespace: "Namespace",
110
+ description: "Description",
111
+ tags: "Tags",
112
+ targets: "Targets",
113
+ title: "Title",
114
+ label: "Label",
115
+ domain: "Domain"
102
116
  }
103
117
  }
104
118
  });
@@ -1 +1 @@
1
- {"version":3,"file":"translation.esm.js","sources":["../src/translation.ts"],"sourcesContent":["/*\n * Copyright 2024 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 { createTranslationRef } from '@backstage/core-plugin-api/alpha';\n\n/** @alpha */\nexport const catalogReactTranslationRef = createTranslationRef({\n id: 'catalog-react',\n messages: {\n catalogFilter: {\n title: 'Filters',\n buttonTitle: 'Filters',\n },\n entityKindPicker: {\n title: 'Kind',\n errorMessage: 'Failed to load entity kinds',\n },\n entityLifecyclePicker: {\n title: 'Lifecycle',\n },\n entityNamespacePicker: {\n title: 'Namespace',\n },\n entityOwnerPicker: {\n title: 'Owner',\n },\n entityProcessingStatusPicker: {\n title: 'Processing Status',\n },\n entityTagPicker: {\n title: 'Tags',\n },\n entityPeekAheadPopover: {\n title: 'Drill into the entity to see all of the tags.',\n emailCardAction: {\n title: 'Email {{email}}',\n subTitle: 'mailto {{email}}',\n },\n entityCardActionsTitle: 'Show details',\n },\n entitySearchBar: {\n placeholder: 'Search',\n },\n entityTypePicker: {\n title: 'Type',\n errorMessage: 'Failed to load entity types',\n optionAllTitle: 'all',\n },\n favoriteEntity: {\n addToFavorites: 'Add to favorites',\n removeFromFavorites: 'Remove from favorites',\n },\n inspectEntityDialog: {\n title: 'Entity Inspector',\n closeButtonTitle: 'Close',\n ancestryPage: {\n title: 'Ancestry',\n },\n colocatedPage: {\n title: 'Colocated',\n description:\n 'These are the entities that are colocated with this entity - as in, they originated from the same data source (e.g. came from the same YAML file), or from the same origin (e.g. the originally registered URL).',\n alertNoLocation: 'Entity had no location information.',\n alertNoEntity: 'There were no other entities on this location.',\n },\n jsonPage: {\n title: 'Entity as JSON',\n description:\n 'This is the raw entity data as received from the catalog, on JSON form.',\n },\n overviewPage: {\n title: 'Overview',\n },\n yamlPage: {\n title: 'Entity as YAML',\n description:\n 'This is the raw entity data as received from the catalog, on YAML form.',\n },\n },\n unregisterEntityDialog: {\n title: 'Are you sure you want to unregister this entity?',\n cancelButtonTitle: 'Cancel',\n deleteButtonTitle: 'Delete Entity',\n deleteEntitySuccessMessage: 'Removed entity {{entityName}}',\n bootstrapState: {\n title:\n 'You cannot unregister this entity, since it originates from a protected Backstage configuration (location \"{{location}}\"). If you believe this is in error, please contact the {{appTitle}} integrator.',\n advancedDescription:\n 'You have the option to delete the entity itself from the catalog. Note that this should only be done if you know that the catalog file has been deleted at, or moved from, its origin location. If that is not the case, the entity will reappear shortly as the next refresh round is performed by the catalog.',\n advancedOptions: 'Advanced Options',\n },\n onlyDeleteStateTitle:\n 'This entity does not seem to originate from a registered location. You therefore only have the option to delete it outright from the catalog.',\n unregisterState: {\n title: 'This action will unregister the following entities:',\n subTitle: 'Located at the following location:',\n description: 'To undo, just re-register the entity in {{appTitle}}.',\n unregisterButtonTitle: 'Unregister Location',\n advancedOptions: 'Advanced Options',\n advancedDescription:\n 'You also have the option to delete the entity itself from the catalog. Note that this should only be done if you know that the catalog file has been deleted at, or moved from, its origin location. If that is not the case, the entity will reappear shortly as the next refresh round is performed by the catalog.',\n },\n errorStateTitle: 'Internal error: Unknown state',\n },\n userListPicker: {\n defaultOrgName: 'Company',\n personalFilter: {\n title: 'Personal',\n ownedLabel: 'Owned',\n starredLabel: 'Starred',\n },\n orgFilterAllLabel: 'All',\n },\n },\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"translation.esm.js","sources":["../src/translation.ts"],"sourcesContent":["/*\n * Copyright 2024 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 { createTranslationRef } from '@backstage/core-plugin-api/alpha';\n\n/** @alpha */\nexport const catalogReactTranslationRef = createTranslationRef({\n id: 'catalog-react',\n messages: {\n catalogFilter: {\n title: 'Filters',\n buttonTitle: 'Filters',\n },\n entityKindPicker: {\n title: 'Kind',\n errorMessage: 'Failed to load entity kinds',\n },\n entityLifecyclePicker: {\n title: 'Lifecycle',\n },\n entityNamespacePicker: {\n title: 'Namespace',\n },\n entityOwnerPicker: {\n title: 'Owner',\n },\n entityProcessingStatusPicker: {\n title: 'Processing Status',\n },\n entityTagPicker: {\n title: 'Tags',\n },\n entityPeekAheadPopover: {\n title: 'Drill into the entity to see all of the tags.',\n emailCardAction: {\n title: 'Email {{email}}',\n subTitle: 'mailto {{email}}',\n },\n entityCardActionsTitle: 'Show details',\n },\n entitySearchBar: {\n placeholder: 'Search',\n },\n entityTypePicker: {\n title: 'Type',\n errorMessage: 'Failed to load entity types',\n optionAllTitle: 'all',\n },\n favoriteEntity: {\n addToFavorites: 'Add to favorites',\n removeFromFavorites: 'Remove from favorites',\n },\n inspectEntityDialog: {\n title: 'Entity Inspector',\n closeButtonTitle: 'Close',\n ancestryPage: {\n title: 'Ancestry',\n },\n colocatedPage: {\n title: 'Colocated',\n description:\n 'These are the entities that are colocated with this entity - as in, they originated from the same data source (e.g. came from the same YAML file), or from the same origin (e.g. the originally registered URL).',\n alertNoLocation: 'Entity had no location information.',\n alertNoEntity: 'There were no other entities on this location.',\n },\n jsonPage: {\n title: 'Entity as JSON',\n description:\n 'This is the raw entity data as received from the catalog, on JSON form.',\n },\n overviewPage: {\n title: 'Overview',\n },\n yamlPage: {\n title: 'Entity as YAML',\n description:\n 'This is the raw entity data as received from the catalog, on YAML form.',\n },\n },\n unregisterEntityDialog: {\n title: 'Are you sure you want to unregister this entity?',\n cancelButtonTitle: 'Cancel',\n deleteButtonTitle: 'Delete Entity',\n deleteEntitySuccessMessage: 'Removed entity {{entityName}}',\n bootstrapState: {\n title:\n 'You cannot unregister this entity, since it originates from a protected Backstage configuration (location \"{{location}}\"). If you believe this is in error, please contact the {{appTitle}} integrator.',\n advancedDescription:\n 'You have the option to delete the entity itself from the catalog. Note that this should only be done if you know that the catalog file has been deleted at, or moved from, its origin location. If that is not the case, the entity will reappear shortly as the next refresh round is performed by the catalog.',\n advancedOptions: 'Advanced Options',\n },\n onlyDeleteStateTitle:\n 'This entity does not seem to originate from a registered location. You therefore only have the option to delete it outright from the catalog.',\n unregisterState: {\n title: 'This action will unregister the following entities:',\n subTitle: 'Located at the following location:',\n description: 'To undo, just re-register the entity in {{appTitle}}.',\n unregisterButtonTitle: 'Unregister Location',\n advancedOptions: 'Advanced Options',\n advancedDescription:\n 'You also have the option to delete the entity itself from the catalog. Note that this should only be done if you know that the catalog file has been deleted at, or moved from, its origin location. If that is not the case, the entity will reappear shortly as the next refresh round is performed by the catalog.',\n },\n errorStateTitle: 'Internal error: Unknown state',\n },\n userListPicker: {\n defaultOrgName: 'Company',\n personalFilter: {\n title: 'Personal',\n ownedLabel: 'Owned',\n starredLabel: 'Starred',\n },\n orgFilterAllLabel: 'All',\n },\n entityTableColumnTitle: {\n name: 'Name',\n system: 'System',\n owner: 'Owner',\n type: 'Type',\n lifecycle: 'Lifecycle',\n namespace: 'Namespace',\n description: 'Description',\n tags: 'Tags',\n targets: 'Targets',\n title: 'Title',\n label: 'Label',\n domain: 'Domain',\n },\n },\n});\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-catalog-react",
3
- "version": "1.21.0-next.2",
3
+ "version": "1.21.1",
4
4
  "description": "A frontend library that helps other Backstage plugins interact with the catalog",
5
5
  "backstage": {
6
6
  "role": "web-library",
@@ -73,20 +73,20 @@
73
73
  "test": "backstage-cli package test"
74
74
  },
75
75
  "dependencies": {
76
- "@backstage/catalog-client": "1.12.0-next.0",
77
- "@backstage/catalog-model": "1.7.5",
78
- "@backstage/core-compat-api": "0.5.2-next.2",
79
- "@backstage/core-components": "0.17.6-next.1",
80
- "@backstage/core-plugin-api": "1.10.9",
81
- "@backstage/errors": "1.2.7",
82
- "@backstage/frontend-plugin-api": "0.11.1-next.0",
83
- "@backstage/frontend-test-utils": "0.3.6-next.0",
84
- "@backstage/integration-react": "1.2.10-next.0",
85
- "@backstage/plugin-catalog-common": "1.1.5",
86
- "@backstage/plugin-permission-common": "0.9.1",
87
- "@backstage/plugin-permission-react": "0.4.36",
88
- "@backstage/types": "1.2.1",
89
- "@backstage/version-bridge": "1.0.11",
76
+ "@backstage/catalog-client": "^1.12.0",
77
+ "@backstage/catalog-model": "^1.7.5",
78
+ "@backstage/core-compat-api": "^0.5.2",
79
+ "@backstage/core-components": "^0.18.1",
80
+ "@backstage/core-plugin-api": "^1.11.0",
81
+ "@backstage/errors": "^1.2.7",
82
+ "@backstage/frontend-plugin-api": "^0.12.0",
83
+ "@backstage/frontend-test-utils": "^0.3.6",
84
+ "@backstage/integration-react": "^1.2.10",
85
+ "@backstage/plugin-catalog-common": "^1.1.5",
86
+ "@backstage/plugin-permission-common": "^0.9.1",
87
+ "@backstage/plugin-permission-react": "^0.4.36",
88
+ "@backstage/types": "^1.2.2",
89
+ "@backstage/version-bridge": "^1.0.11",
90
90
  "@material-ui/core": "^4.12.2",
91
91
  "@material-ui/icons": "^4.9.1",
92
92
  "@material-ui/lab": "4.0.0-alpha.61",
@@ -100,11 +100,11 @@
100
100
  "zen-observable": "^0.10.0"
101
101
  },
102
102
  "devDependencies": {
103
- "@backstage/cli": "0.34.2-next.2",
104
- "@backstage/core-app-api": "1.18.0",
105
- "@backstage/plugin-catalog-common": "1.1.5",
106
- "@backstage/plugin-scaffolder-common": "1.7.1-next.0",
107
- "@backstage/test-utils": "1.7.11",
103
+ "@backstage/cli": "^0.34.3",
104
+ "@backstage/core-app-api": "^1.19.0",
105
+ "@backstage/plugin-catalog-common": "^1.1.5",
106
+ "@backstage/plugin-scaffolder-common": "^1.7.1",
107
+ "@backstage/test-utils": "^1.7.11",
108
108
  "@testing-library/dom": "^10.0.0",
109
109
  "@testing-library/jest-dom": "^6.0.0",
110
110
  "@testing-library/react": "^16.0.0",