@backstage/plugin-catalog-react 0.6.5 → 0.6.9

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,41 @@
1
1
  # @backstage/plugin-catalog-react
2
2
 
3
+ ## 0.6.9
4
+
5
+ ### Patch Changes
6
+
7
+ - c6fdddec77: When a user has zero owned entities when viewing an entity kind in the catalog
8
+ page, it will be automatically redirected to see all the entities. Furthermore,
9
+ for the kind User and Group there are no longer the owned selector.
10
+ - Updated dependencies
11
+ - @backstage/integration@0.7.0
12
+
13
+ ## 0.6.8
14
+
15
+ ### Patch Changes
16
+
17
+ - 3491a36ab9: added useOwnedEntities hook to get the list of entities of the logged-in user
18
+ - Updated dependencies
19
+ - @backstage/core-plugin-api@0.4.0
20
+ - @backstage/core-components@0.8.2
21
+ - @backstage/catalog-client@0.5.3
22
+
23
+ ## 0.6.7
24
+
25
+ ### Patch Changes
26
+
27
+ - 6156fb8730: `useEntityTypeFilter`: Skip updating selected types if a kind filter change did not change them.
28
+ - Updated dependencies
29
+ - @backstage/core-plugin-api@0.3.1
30
+ - @backstage/core-components@0.8.1
31
+ - @backstage/catalog-model@0.9.8
32
+
33
+ ## 0.6.6
34
+
35
+ ### Patch Changes
36
+
37
+ - 4c0f0b2003: Removed dependency on `@backstage/core-app-api`.
38
+
3
39
  ## 0.6.5
4
40
 
5
41
  ### Patch Changes
package/dist/index.cjs.js CHANGED
@@ -13,6 +13,7 @@ var versionBridge = require('@backstage/version-bridge');
13
13
  var reactRouter = require('react-router');
14
14
  var reactUse = require('react-use');
15
15
  var qs = require('qs');
16
+ var isEqual = require('lodash/isEqual');
16
17
  var coreComponents = require('@backstage/core-components');
17
18
  var core = require('@material-ui/core');
18
19
  var jwtDecoder = require('jwt-decode');
@@ -33,6 +34,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
33
34
  var ObservableImpl__default = /*#__PURE__*/_interopDefaultLegacy(ObservableImpl);
34
35
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
35
36
  var qs__default = /*#__PURE__*/_interopDefaultLegacy(qs);
37
+ var isEqual__default = /*#__PURE__*/_interopDefaultLegacy(isEqual);
36
38
  var jwtDecoder__default = /*#__PURE__*/_interopDefaultLegacy(jwtDecoder);
37
39
  var CheckBoxIcon__default = /*#__PURE__*/_interopDefaultLegacy(CheckBoxIcon);
38
40
  var CheckBoxOutlineBlankIcon__default = /*#__PURE__*/_interopDefaultLegacy(CheckBoxOutlineBlankIcon);
@@ -577,7 +579,9 @@ function useEntityTypeFilter() {
577
579
  const newTypes = Object.entries(countByType).sort(([, count1], [, count2]) => count2 - count1).map(([type]) => type);
578
580
  setAvailableTypes(newTypes);
579
581
  const stillValidTypes = selectedTypes.filter((value) => newTypes.includes(value));
580
- setSelectedTypes(stillValidTypes);
582
+ if (!isEqual__default["default"](selectedTypes, stillValidTypes)) {
583
+ setSelectedTypes(stillValidTypes);
584
+ }
581
585
  }, [loading, kind, selectedTypes, setSelectedTypes, entities]);
582
586
  React.useEffect(() => {
583
587
  updateFilters({
@@ -765,6 +769,30 @@ function useEntityOwnership() {
765
769
  return React.useMemo(() => ({ loading, isOwnedEntity }), [loading, isOwnedEntity]);
766
770
  }
767
771
 
772
+ function useOwnedEntities(allowedKinds) {
773
+ const identityApi = corePluginApi.useApi(corePluginApi.identityApiRef);
774
+ const catalogApi = corePluginApi.useApi(catalogApiRef);
775
+ const { loading, value: refs } = reactUse.useAsync(async () => {
776
+ const identityRefs = await loadIdentityOwnerRefs(identityApi);
777
+ const catalogRefs = await loadCatalogOwnerRefs(catalogApi, identityRefs);
778
+ const catalogs = await catalogApi.getEntities(allowedKinds ? {
779
+ filter: {
780
+ kind: allowedKinds,
781
+ [`relations.${catalogModel.RELATION_OWNED_BY}`]: [...identityRefs, ...catalogRefs]
782
+ }
783
+ } : {
784
+ filter: {
785
+ [`relations.${catalogModel.RELATION_OWNED_BY}`]: [...identityRefs, ...catalogRefs]
786
+ }
787
+ });
788
+ return catalogs;
789
+ }, []);
790
+ const ownedEntities = React.useMemo(() => {
791
+ return refs;
792
+ }, [refs]);
793
+ return React.useMemo(() => ({ loading, ownedEntities }), [loading, ownedEntities]);
794
+ }
795
+
768
796
  const EntityKindPicker = ({
769
797
  initialFilter,
770
798
  hidden
@@ -1489,22 +1517,24 @@ const UserListPicker = ({
1489
1517
  const classes = useStyles();
1490
1518
  const configApi = corePluginApi.useApi(corePluginApi.configApiRef);
1491
1519
  const orgName = (_a = configApi.getOptionalString("organization.name")) != null ? _a : "Company";
1520
+ const { filters, updateFilters, backendEntities, queryParameters } = useEntityListProvider();
1521
+ const userAndGroupFilterIds = ["starred", "all"];
1492
1522
  const filterGroups = getFilterGroups(orgName).map((filterGroup) => ({
1493
1523
  ...filterGroup,
1494
- items: filterGroup.items.filter(({ id }) => !availableFilters || availableFilters.includes(id))
1524
+ items: filterGroup.items.filter(({ id }) => ["group", "user"].some((kind) => kind === queryParameters.kind) ? userAndGroupFilterIds.includes(id) : !availableFilters || availableFilters.includes(id))
1495
1525
  })).filter(({ items }) => !!items.length);
1496
- const { filters, updateFilters, backendEntities, queryParameters } = useEntityListProvider();
1497
1526
  const { isStarredEntity } = useStarredEntities();
1498
1527
  const { isOwnedEntity } = useEntityOwnership();
1499
- const [selectedUserFilter, setSelectedUserFilter] = React.useState((_b = [queryParameters.user].flat()[0]) != null ? _b : initialFilter);
1500
1528
  const ownedFilter = React.useMemo(() => new UserListFilter("owned", isOwnedEntity, isStarredEntity), [isOwnedEntity, isStarredEntity]);
1501
1529
  const starredFilter = React.useMemo(() => new UserListFilter("starred", isOwnedEntity, isStarredEntity), [isOwnedEntity, isStarredEntity]);
1530
+ const [entitiesWithoutUserFilter, setEntitiesWithoutUserFilter] = React.useState(backendEntities);
1531
+ const totalOwnedUserEntities = entitiesWithoutUserFilter.filter((entity) => ownedFilter.filterEntity(entity)).length;
1532
+ const [selectedUserFilter, setSelectedUserFilter] = React.useState(totalOwnedUserEntities > 0 ? (_b = [queryParameters.user].flat()[0]) != null ? _b : initialFilter : "all");
1502
1533
  React.useEffect(() => {
1503
1534
  updateFilters({
1504
1535
  user: selectedUserFilter ? new UserListFilter(selectedUserFilter, isOwnedEntity, isStarredEntity) : void 0
1505
1536
  });
1506
1537
  }, [selectedUserFilter, isOwnedEntity, isStarredEntity, updateFilters]);
1507
- const [entitiesWithoutUserFilter, setEntitiesWithoutUserFilter] = React.useState(backendEntities);
1508
1538
  React.useEffect(() => {
1509
1539
  const filterFn = reduceEntityFilters(lodash.compact(Object.values({ ...filters, user: void 0 })));
1510
1540
  setEntitiesWithoutUserFilter(backendEntities.filter(filterFn));
@@ -1512,7 +1542,7 @@ const UserListPicker = ({
1512
1542
  function getFilterCount(id) {
1513
1543
  switch (id) {
1514
1544
  case "owned":
1515
- return entitiesWithoutUserFilter.filter((entity) => ownedFilter.filterEntity(entity)).length;
1545
+ return totalOwnedUserEntities;
1516
1546
  case "starred":
1517
1547
  return entitiesWithoutUserFilter.filter((entity) => starredFilter.filterEntity(entity)).length;
1518
1548
  default:
@@ -1634,6 +1664,7 @@ exports.useEntityListProvider = useEntityListProvider;
1634
1664
  exports.useEntityOwnership = useEntityOwnership;
1635
1665
  exports.useEntityTypeFilter = useEntityTypeFilter;
1636
1666
  exports.useOwnUser = useOwnUser;
1667
+ exports.useOwnedEntities = useOwnedEntities;
1637
1668
  exports.useRelatedEntities = useRelatedEntities;
1638
1669
  exports.useStarredEntities = useStarredEntities;
1639
1670
  exports.useStarredEntity = useStarredEntity;