@backstage/plugin-catalog-react 1.0.1-next.1 → 1.0.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,59 @@
1
1
  # @backstage/plugin-catalog-react
2
2
 
3
+ ## 1.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 0ffd88a90e: Prevent permissions with types other than `ResourcePermission<'catalog-entity'>` from being used with the `useEntityPermission` hook.
8
+ - 7c7919777e: build(deps-dev): bump `@testing-library/react-hooks` from 7.0.2 to 8.0.0
9
+ - 24254fd433: build(deps): bump `@testing-library/user-event` from 13.5.0 to 14.0.0
10
+ - 4af82967f4: Decouple tags picker from backend entities
11
+
12
+ `EntityTagPicker` fetches all the tags independently and it doesn't require all the entities to be available client side.
13
+
14
+ - 4be0d1e777: Changed catalog filter components to only pay attention to query parameters relevant to the component.
15
+ - 5d5fdbe541: Columns in CatalogTable now change depending on the entity kind, ensuring only relevant columns are displayed.
16
+ - 863e7bcb7b: Updated the "unregister location" behavior in `UnregisterEntityDialog`. Removed unnecessary entity deletion requests that were sent after successfully deleting a location.
17
+ - 37b04b5a5e: Removed broken link from Labels section of entity inspector.
18
+ - a496cee4d1: Add support for string refs to the `EntityRefLinks` component
19
+ - d34900af81: Added a new `NextScaffolderRouter` which will eventually replace the exiting router
20
+ - 99063c39ae: Minor API report cleanup
21
+ - 4431873583: Update `usePermission` usage.
22
+ - Updated dependencies
23
+ - @backstage/integration@1.1.0
24
+ - @backstage/plugin-permission-react@0.4.0
25
+ - @backstage/plugin-permission-common@0.6.0
26
+ - @backstage/catalog-model@1.0.1
27
+ - @backstage/core-components@0.9.3
28
+ - @backstage/core-plugin-api@1.0.1
29
+ - @backstage/version-bridge@1.0.1
30
+ - @backstage/plugin-catalog-common@1.0.1
31
+ - @backstage/catalog-client@1.0.1
32
+
33
+ ## 1.0.1-next.3
34
+
35
+ ### Patch Changes
36
+
37
+ - 24254fd433: build(deps): bump `@testing-library/user-event` from 13.5.0 to 14.0.0
38
+ - 863e7bcb7b: Updated the "unregister location" behavior in `UnregisterEntityDialog`. Removed unnecessary entity deletion requests that were sent after successfully deleting a location.
39
+ - Updated dependencies
40
+ - @backstage/core-components@0.9.3-next.2
41
+ - @backstage/core-plugin-api@1.0.1-next.0
42
+ - @backstage/plugin-permission-common@0.6.0-next.1
43
+ - @backstage/plugin-permission-react@0.4.0-next.1
44
+ - @backstage/integration@1.1.0-next.2
45
+
46
+ ## 1.0.1-next.2
47
+
48
+ ### Patch Changes
49
+
50
+ - 4be0d1e777: Changed catalog filter components to only pay attention to query parameters relevant to the component.
51
+ - 5d5fdbe541: Columns in CatalogTable now change depending on the entity kind, ensuring only relevant columns are displayed.
52
+ - 99063c39ae: Minor API report cleanup
53
+ - Updated dependencies
54
+ - @backstage/core-components@0.9.3-next.1
55
+ - @backstage/catalog-model@1.0.1-next.1
56
+
3
57
  ## 1.0.1-next.1
4
58
 
5
59
  ### Patch Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-catalog-react",
3
- "version": "1.0.1-next.1",
3
+ "version": "1.0.1",
4
4
  "main": "../dist/index.esm.js",
5
5
  "types": "../dist/index.alpha.d.ts"
6
6
  }
@@ -259,7 +259,7 @@ export declare const EntityOwnerPicker: () => JSX.Element | null;
259
259
  *
260
260
  * @public
261
261
  */
262
- export declare const EntityProvider: ({ entity, children }: EntityProviderProps) => JSX.Element;
262
+ export declare const EntityProvider: (props: EntityProviderProps) => JSX.Element;
263
263
 
264
264
  /**
265
265
  * Properties for the EntityProvider component.
@@ -259,7 +259,7 @@ export declare const EntityOwnerPicker: () => JSX.Element | null;
259
259
  *
260
260
  * @public
261
261
  */
262
- export declare const EntityProvider: ({ entity, children }: EntityProviderProps) => JSX.Element;
262
+ export declare const EntityProvider: (props: EntityProviderProps) => JSX.Element;
263
263
 
264
264
  /**
265
265
  * Properties for the EntityProvider component.
package/dist/index.d.ts CHANGED
@@ -259,7 +259,7 @@ export declare const EntityOwnerPicker: () => JSX.Element | null;
259
259
  *
260
260
  * @public
261
261
  */
262
- export declare const EntityProvider: ({ entity, children }: EntityProviderProps) => JSX.Element;
262
+ export declare const EntityProvider: (props: EntityProviderProps) => JSX.Element;
263
263
 
264
264
  /**
265
265
  * Properties for the EntityProvider component.
package/dist/index.esm.js CHANGED
@@ -125,12 +125,12 @@ const AsyncEntityProvider = ({
125
125
  value: createVersionedValueMap({ 1: value })
126
126
  }, children);
127
127
  };
128
- const EntityProvider = ({ entity, children }) => /* @__PURE__ */ React.createElement(AsyncEntityProvider, {
129
- entity,
130
- loading: !Boolean(entity),
128
+ const EntityProvider = (props) => /* @__PURE__ */ React.createElement(AsyncEntityProvider, {
129
+ entity: props.entity,
130
+ loading: !Boolean(props.entity),
131
131
  error: void 0,
132
132
  refresh: void 0,
133
- children
133
+ children: props.children
134
134
  });
135
135
  function useEntity() {
136
136
  const versionedHolder = useVersionedContext("entity-context");
@@ -479,16 +479,16 @@ function useEntityTypeFilter() {
479
479
  const catalogApi = useApi(catalogApiRef);
480
480
  const {
481
481
  filters: { kind: kindFilter, type: typeFilter },
482
- queryParameters,
482
+ queryParameters: { type: typeParameter },
483
483
  updateFilters
484
484
  } = useEntityList();
485
- const queryParamTypes = useMemo(() => [queryParameters.type].flat().filter(Boolean), [queryParameters]);
486
- const [selectedTypes, setSelectedTypes] = useState(queryParamTypes.length ? queryParamTypes : (_a = typeFilter == null ? void 0 : typeFilter.getTypes()) != null ? _a : []);
485
+ const flattenedQueryTypes = useMemo(() => [typeParameter].flat().filter(Boolean), [typeParameter]);
486
+ const [selectedTypes, setSelectedTypes] = useState(flattenedQueryTypes.length ? flattenedQueryTypes : (_a = typeFilter == null ? void 0 : typeFilter.getTypes()) != null ? _a : []);
487
487
  useEffect(() => {
488
- if (queryParamTypes.length) {
489
- setSelectedTypes(queryParamTypes);
488
+ if (flattenedQueryTypes.length) {
489
+ setSelectedTypes(flattenedQueryTypes);
490
490
  }
491
- }, [queryParamTypes]);
491
+ }, [flattenedQueryTypes]);
492
492
  const [availableTypes, setAvailableTypes] = useState([]);
493
493
  const kind = useMemo(() => kindFilter == null ? void 0 : kindFilter.value, [kindFilter]);
494
494
  const {
@@ -665,8 +665,11 @@ function useEntityPermission(permission) {
665
665
  const EntityKindPicker = (props) => {
666
666
  var _a;
667
667
  const { initialFilter, hidden } = props;
668
- const { updateFilters, queryParameters } = useEntityList();
669
- const [selectedKind] = useState((_a = [queryParameters.kind].flat()[0]) != null ? _a : initialFilter);
668
+ const {
669
+ updateFilters,
670
+ queryParameters: { kind: kindParameter }
671
+ } = useEntityList();
672
+ const [selectedKind] = useState((_a = [kindParameter].flat()[0]) != null ? _a : initialFilter);
670
673
  useEffect(() => {
671
674
  updateFilters({
672
675
  kind: selectedKind ? new EntityKindFilter(selectedKind) : void 0
@@ -693,8 +696,13 @@ const checkedIcon$2 = /* @__PURE__ */ React.createElement(CheckBoxIcon, {
693
696
  const EntityLifecyclePicker = () => {
694
697
  var _a, _b;
695
698
  const classes = useStyles$b();
696
- const { updateFilters, backendEntities, filters, queryParameters } = useEntityList();
697
- const queryParamLifecycles = useMemo(() => [queryParameters.lifecycles].flat().filter(Boolean), [queryParameters]);
699
+ const {
700
+ updateFilters,
701
+ backendEntities,
702
+ filters,
703
+ queryParameters: { lifecycles: lifecyclesParameter }
704
+ } = useEntityList();
705
+ const queryParamLifecycles = useMemo(() => [lifecyclesParameter].flat().filter(Boolean), [lifecyclesParameter]);
698
706
  const [selectedLifecycles, setSelectedLifecycles] = useState(queryParamLifecycles.length ? queryParamLifecycles : (_b = (_a = filters.lifecycles) == null ? void 0 : _a.values) != null ? _b : []);
699
707
  useEffect(() => {
700
708
  if (queryParamLifecycles.length) {
@@ -759,8 +767,13 @@ const checkedIcon$1 = /* @__PURE__ */ React.createElement(CheckBoxIcon, {
759
767
  const EntityOwnerPicker = () => {
760
768
  var _a, _b;
761
769
  const classes = useStyles$a();
762
- const { updateFilters, backendEntities, filters, queryParameters } = useEntityList();
763
- const queryParamOwners = useMemo(() => [queryParameters.owners].flat().filter(Boolean), [queryParameters]);
770
+ const {
771
+ updateFilters,
772
+ backendEntities,
773
+ filters,
774
+ queryParameters: { owners: ownersParameter }
775
+ } = useEntityList();
776
+ const queryParamOwners = useMemo(() => [ownersParameter].flat().filter(Boolean), [ownersParameter]);
764
777
  const [selectedOwners, setSelectedOwners] = useState(queryParamOwners.length ? queryParamOwners : (_b = (_a = filters.owners) == null ? void 0 : _a.values) != null ? _b : []);
765
778
  useEffect(() => {
766
779
  if (queryParamOwners.length) {
@@ -1032,7 +1045,11 @@ const checkedIcon = /* @__PURE__ */ React.createElement(CheckBoxIcon, {
1032
1045
  const EntityTagPicker = () => {
1033
1046
  var _a, _b;
1034
1047
  const classes = useStyles$7();
1035
- const { updateFilters, filters, queryParameters } = useEntityList();
1048
+ const {
1049
+ updateFilters,
1050
+ filters,
1051
+ queryParameters: { tags: tagsParameter }
1052
+ } = useEntityList();
1036
1053
  const catalogApi = useApi(catalogApiRef);
1037
1054
  const { value: availableTags } = useAsync(async () => {
1038
1055
  var _a2;
@@ -1043,7 +1060,7 @@ const EntityTagPicker = () => {
1043
1060
  });
1044
1061
  return facets[facet].map(({ value }) => value);
1045
1062
  }, [filters.kind]);
1046
- const queryParamTags = useMemo(() => [queryParameters.tags].flat().filter(Boolean), [queryParameters]);
1063
+ const queryParamTags = useMemo(() => [tagsParameter].flat().filter(Boolean), [tagsParameter]);
1047
1064
  const [selectedTags, setSelectedTags] = useState(queryParamTags.length ? queryParamTags : (_b = (_a = filters.tags) == null ? void 0 : _a.values) != null ? _b : []);
1048
1065
  useEffect(() => {
1049
1066
  if (queryParamTags.length) {
@@ -1736,9 +1753,8 @@ function useUnregisterEntityDialogState(entity) {
1736
1753
  }));
1737
1754
  }, [catalogApi, entity]);
1738
1755
  const unregisterLocation = useCallback(async function unregisterLocationFn() {
1739
- const { location: location2, colocatedEntities: colocatedEntities2 } = prerequisites.value;
1756
+ const { location: location2 } = prerequisites.value;
1740
1757
  await catalogApi.removeLocationById(location2.id);
1741
- await Promise.allSettled(colocatedEntities2.map((e) => catalogApi.removeEntityByUid(e.metadata.uid)));
1742
1758
  }, [catalogApi, prerequisites]);
1743
1759
  const deleteEntity = useCallback(async function deleteEntityFn() {
1744
1760
  await catalogApi.removeEntityByUid(uid);
@@ -1962,20 +1978,20 @@ const UserListPicker = (props) => {
1962
1978
  filters,
1963
1979
  updateFilters,
1964
1980
  backendEntities,
1965
- queryParameters,
1981
+ queryParameters: { kind: kindParameter, user: userParameter },
1966
1982
  loading: loadingBackendEntities
1967
1983
  } = useEntityList();
1968
1984
  const userAndGroupFilterIds = ["starred", "all"];
1969
1985
  const filterGroups = getFilterGroups(orgName).map((filterGroup) => ({
1970
1986
  ...filterGroup,
1971
- items: filterGroup.items.filter(({ id }) => ["group", "user"].some((kind) => kind === queryParameters.kind) ? userAndGroupFilterIds.includes(id) : !availableFilters || availableFilters.includes(id))
1987
+ items: filterGroup.items.filter(({ id }) => ["group", "user"].some((kind) => kind === kindParameter) ? userAndGroupFilterIds.includes(id) : !availableFilters || availableFilters.includes(id))
1972
1988
  })).filter(({ items }) => !!items.length);
1973
1989
  const { isStarredEntity } = useStarredEntities();
1974
1990
  const { isOwnedEntity, loading: loadingEntityOwnership } = useEntityOwnership();
1975
1991
  const loading = loadingBackendEntities || loadingEntityOwnership;
1976
1992
  const ownedFilter = useMemo(() => new UserListFilter("owned", isOwnedEntity, isStarredEntity), [isOwnedEntity, isStarredEntity]);
1977
1993
  const starredFilter = useMemo(() => new UserListFilter("starred", isOwnedEntity, isStarredEntity), [isOwnedEntity, isStarredEntity]);
1978
- const queryParamUserFilter = useMemo(() => [queryParameters.user].flat()[0], [queryParameters]);
1994
+ const queryParamUserFilter = useMemo(() => [userParameter].flat()[0], [userParameter]);
1979
1995
  const [selectedUserFilter, setSelectedUserFilter] = useState(queryParamUserFilter != null ? queryParamUserFilter : initialFilter);
1980
1996
  const entitiesWithoutUserFilter = useMemo(() => backendEntities.filter(reduceEntityFilters(compact(Object.values({ ...filters, user: void 0 })))), [filters, backendEntities]);
1981
1997
  const filterCounts = useMemo(() => ({