@backstage/plugin-catalog-graph 0.4.8 → 0.4.9-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,35 @@
1
1
  # @backstage/plugin-catalog-graph
2
2
 
3
+ ## 0.4.9-next.1
4
+
5
+ ### Patch Changes
6
+
7
+ - da91078: Fixed a bug in the `CatalogGraphPage` component where, after clicking on some nodes, clicking the back button would break the navigation. This issue caused the entire navigation to fail and behaved differently across various browsers.
8
+ - Updated dependencies
9
+ - @backstage/frontend-plugin-api@0.8.0-next.1
10
+ - @backstage/core-compat-api@0.3.0-next.1
11
+ - @backstage/catalog-client@1.6.7-next.0
12
+ - @backstage/core-components@0.14.11-next.0
13
+ - @backstage/plugin-catalog-react@1.12.4-next.1
14
+ - @backstage/catalog-model@1.6.0
15
+ - @backstage/core-plugin-api@1.9.3
16
+ - @backstage/types@1.1.1
17
+
18
+ ## 0.4.9-next.0
19
+
20
+ ### Patch Changes
21
+
22
+ - fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
23
+ - Updated dependencies
24
+ - @backstage/frontend-plugin-api@0.8.0-next.0
25
+ - @backstage/core-compat-api@0.2.9-next.0
26
+ - @backstage/plugin-catalog-react@1.12.4-next.0
27
+ - @backstage/catalog-client@1.6.6
28
+ - @backstage/catalog-model@1.6.0
29
+ - @backstage/core-components@0.14.10
30
+ - @backstage/core-plugin-api@1.9.3
31
+ - @backstage/types@1.1.1
32
+
3
33
  ## 0.4.8
4
34
 
5
35
  ### Patch Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-catalog-graph__alpha",
3
- "version": "0.4.8",
3
+ "version": "0.4.9-next.1",
4
4
  "main": "../dist/alpha.esm.js",
5
5
  "module": "../dist/alpha.esm.js",
6
6
  "types": "../dist/alpha.d.ts"
package/dist/alpha.d.ts CHANGED
@@ -3,7 +3,7 @@ import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api'
3
3
  import React__default from 'react';
4
4
  import { Direction } from '@backstage/plugin-catalog-graph';
5
5
 
6
- declare const _default: _backstage_frontend_plugin_api.BackstagePlugin<{
6
+ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
7
7
  catalogGraph: _backstage_frontend_plugin_api.RouteRef<undefined>;
8
8
  }, {
9
9
  catalogEntity: _backstage_frontend_plugin_api.ExternalRouteRef<{
@@ -13,87 +13,95 @@ declare const _default: _backstage_frontend_plugin_api.BackstagePlugin<{
13
13
  }>;
14
14
  }, {
15
15
  "entity-card:catalog-graph/relations": _backstage_frontend_plugin_api.ExtensionDefinition<{
16
- kinds: string[] | undefined;
17
- relations: string[] | undefined;
18
- maxDepth: number | undefined;
19
- unidirectional: boolean | undefined;
20
- mergeRelations: boolean | undefined;
21
- direction: Direction | undefined;
22
- relationPairs: [string, string][] | undefined;
23
- zoom: "disabled" | "enabled" | "enable-on-click" | undefined;
24
- curve: "curveStepBefore" | "curveMonotoneX" | undefined;
25
- title: string | undefined;
26
- height: number | undefined;
27
- } & {
28
- filter: string | undefined;
29
- }, {
30
- height?: number | undefined;
31
- curve?: "curveStepBefore" | "curveMonotoneX" | undefined;
32
- direction?: Direction | undefined;
33
- title?: string | undefined;
34
- zoom?: "disabled" | "enabled" | "enable-on-click" | undefined;
35
- relations?: string[] | undefined;
36
- maxDepth?: number | undefined;
37
- kinds?: string[] | undefined;
38
- unidirectional?: boolean | undefined;
39
- mergeRelations?: boolean | undefined;
40
- relationPairs?: [string, string][] | undefined;
41
- } & {
42
- filter?: string | undefined;
43
- }, _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<React__default.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
44
- optional: true;
45
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
46
- optional: true;
47
- }>, {
48
- [x: string]: _backstage_frontend_plugin_api.ExtensionInput<_backstage_frontend_plugin_api.AnyExtensionDataRef, {
49
- optional: boolean;
50
- singleton: boolean;
16
+ config: {
17
+ kinds: string[] | undefined;
18
+ relations: string[] | undefined;
19
+ maxDepth: number | undefined;
20
+ unidirectional: boolean | undefined;
21
+ mergeRelations: boolean | undefined;
22
+ direction: Direction | undefined;
23
+ relationPairs: [string, string][] | undefined;
24
+ zoom: "disabled" | "enabled" | "enable-on-click" | undefined;
25
+ curve: "curveStepBefore" | "curveMonotoneX" | undefined;
26
+ title: string | undefined;
27
+ height: number | undefined;
28
+ } & {
29
+ filter: string | undefined;
30
+ };
31
+ configInput: {
32
+ height?: number | undefined;
33
+ curve?: "curveStepBefore" | "curveMonotoneX" | undefined;
34
+ direction?: Direction | undefined;
35
+ title?: string | undefined;
36
+ zoom?: "disabled" | "enabled" | "enable-on-click" | undefined;
37
+ relations?: string[] | undefined;
38
+ maxDepth?: number | undefined;
39
+ kinds?: string[] | undefined;
40
+ unidirectional?: boolean | undefined;
41
+ mergeRelations?: boolean | undefined;
42
+ relationPairs?: [string, string][] | undefined;
43
+ } & {
44
+ filter?: string | undefined;
45
+ };
46
+ output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<React__default.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
47
+ optional: true;
48
+ }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
49
+ optional: true;
51
50
  }>;
52
- }, {
51
+ inputs: {
52
+ [x: string]: _backstage_frontend_plugin_api.ExtensionInput<_backstage_frontend_plugin_api.AnyExtensionDataRef, {
53
+ optional: boolean;
54
+ singleton: boolean;
55
+ }>;
56
+ };
53
57
  kind: "entity-card";
54
58
  namespace: undefined;
55
59
  name: "relations";
56
60
  }>;
57
61
  "page:catalog-graph": _backstage_frontend_plugin_api.ExtensionDefinition<{
58
- selectedKinds: string[] | undefined;
59
- selectedRelations: string[] | undefined;
60
- rootEntityRefs: string[] | undefined;
61
- maxDepth: number | undefined;
62
- unidirectional: boolean | undefined;
63
- mergeRelations: boolean | undefined;
64
- direction: Direction | undefined;
65
- showFilters: boolean | undefined;
66
- curve: "curveStepBefore" | "curveMonotoneX" | undefined;
67
- kinds: string[] | undefined;
68
- relations: string[] | undefined;
69
- relationPairs: [string, string][] | undefined;
70
- zoom: "disabled" | "enabled" | "enable-on-click" | undefined;
71
- } & {
72
- path: string | undefined;
73
- }, {
74
- curve?: "curveStepBefore" | "curveMonotoneX" | undefined;
75
- direction?: Direction | undefined;
76
- zoom?: "disabled" | "enabled" | "enable-on-click" | undefined;
77
- relations?: string[] | undefined;
78
- rootEntityRefs?: string[] | undefined;
79
- maxDepth?: number | undefined;
80
- kinds?: string[] | undefined;
81
- unidirectional?: boolean | undefined;
82
- mergeRelations?: boolean | undefined;
83
- relationPairs?: [string, string][] | undefined;
84
- selectedRelations?: string[] | undefined;
85
- selectedKinds?: string[] | undefined;
86
- showFilters?: boolean | undefined;
87
- } & {
88
- path?: string | undefined;
89
- }, _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<React__default.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
90
- optional: true;
91
- }>, {
92
- [x: string]: _backstage_frontend_plugin_api.ExtensionInput<_backstage_frontend_plugin_api.AnyExtensionDataRef, {
93
- optional: boolean;
94
- singleton: boolean;
62
+ config: {
63
+ selectedKinds: string[] | undefined;
64
+ selectedRelations: string[] | undefined;
65
+ rootEntityRefs: string[] | undefined;
66
+ maxDepth: number | undefined;
67
+ unidirectional: boolean | undefined;
68
+ mergeRelations: boolean | undefined;
69
+ direction: Direction | undefined;
70
+ showFilters: boolean | undefined;
71
+ curve: "curveStepBefore" | "curveMonotoneX" | undefined;
72
+ kinds: string[] | undefined;
73
+ relations: string[] | undefined;
74
+ relationPairs: [string, string][] | undefined;
75
+ zoom: "disabled" | "enabled" | "enable-on-click" | undefined;
76
+ } & {
77
+ path: string | undefined;
78
+ };
79
+ configInput: {
80
+ curve?: "curveStepBefore" | "curveMonotoneX" | undefined;
81
+ direction?: Direction | undefined;
82
+ zoom?: "disabled" | "enabled" | "enable-on-click" | undefined;
83
+ relations?: string[] | undefined;
84
+ rootEntityRefs?: string[] | undefined;
85
+ maxDepth?: number | undefined;
86
+ kinds?: string[] | undefined;
87
+ unidirectional?: boolean | undefined;
88
+ mergeRelations?: boolean | undefined;
89
+ relationPairs?: [string, string][] | undefined;
90
+ selectedRelations?: string[] | undefined;
91
+ selectedKinds?: string[] | undefined;
92
+ showFilters?: boolean | undefined;
93
+ } & {
94
+ path?: string | undefined;
95
+ };
96
+ output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<React__default.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
97
+ optional: true;
95
98
  }>;
96
- }, {
99
+ inputs: {
100
+ [x: string]: _backstage_frontend_plugin_api.ExtensionInput<_backstage_frontend_plugin_api.AnyExtensionDataRef, {
101
+ optional: boolean;
102
+ singleton: boolean;
103
+ }>;
104
+ };
97
105
  kind: "page";
98
106
  namespace: undefined;
99
107
  name: undefined;
@@ -1,8 +1,7 @@
1
1
  import { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model';
2
2
  import qs from 'qs';
3
- import { useMemo, useState, useCallback, useEffect } from 'react';
4
- import { useLocation } from 'react-router-dom';
5
- import usePrevious from 'react-use/esm/usePrevious';
3
+ import { useMemo, useCallback, useState, useEffect } from 'react';
4
+ import { useLocation, useNavigate } from 'react-router-dom';
6
5
  import '../EntityRelationsGraph/EntityRelationsGraph.esm.js';
7
6
  import { Direction } from '../EntityRelationsGraph/types.esm.js';
8
7
 
@@ -10,12 +9,33 @@ function useCatalogGraphPage({
10
9
  initialState = {}
11
10
  }) {
12
11
  const location = useLocation();
12
+ const navigate = useNavigate();
13
13
  const query = useMemo(
14
14
  () => qs.parse(location.search, { arrayLimit: 0, ignoreQueryPrefix: true }) || {},
15
15
  [location.search]
16
16
  );
17
- const [rootEntityNames, setRootEntityNames] = useState(
18
- () => (Array.isArray(query.rootEntityRefs) ? query.rootEntityRefs : initialState?.rootEntityRefs ?? []).map((r) => parseEntityRef(r))
17
+ const rootEntityNames = useMemo(
18
+ () => (Array.isArray(query.rootEntityRefs) ? query.rootEntityRefs : initialState?.rootEntityRefs ?? []).map((r) => parseEntityRef(r)),
19
+ [initialState?.rootEntityRefs, query.rootEntityRefs]
20
+ );
21
+ const setRootEntityNames = useCallback(
22
+ (value) => {
23
+ const areSame = rootEntityNames.length === value.length && rootEntityNames.every(
24
+ (r, i) => stringifyEntityRef(r) === stringifyEntityRef(value[i])
25
+ );
26
+ if (areSame) {
27
+ return;
28
+ }
29
+ const newSearch = qs.stringify(
30
+ {
31
+ ...query,
32
+ rootEntityRefs: value.map((r) => stringifyEntityRef(r))
33
+ },
34
+ { arrayFormat: "brackets", addQueryPrefix: true }
35
+ );
36
+ navigate(newSearch);
37
+ },
38
+ [rootEntityNames, navigate, query]
19
39
  );
20
40
  const [maxDepth, setMaxDepth] = useState(
21
41
  () => typeof query.maxDepth === "string" ? parseMaxDepth(query.maxDepth) : initialState?.maxDepth ?? Number.POSITIVE_INFINITY
@@ -45,82 +65,33 @@ function useCatalogGraphPage({
45
65
  () => setShowFilters((s) => !s),
46
66
  [setShowFilters]
47
67
  );
48
- const prevQueryParams = usePrevious(location.search);
49
68
  useEffect(() => {
50
- if (location.search === prevQueryParams) {
51
- return;
52
- }
53
- if (Array.isArray(query.rootEntityRefs)) {
54
- setRootEntityNames(query.rootEntityRefs.map((r) => parseEntityRef(r)));
55
- }
56
- if (typeof query.maxDepth === "string") {
57
- setMaxDepth(parseMaxDepth(query.maxDepth));
58
- }
59
- if (Array.isArray(query.selectedKinds)) {
60
- setSelectedKinds(query.selectedKinds);
61
- }
62
- if (Array.isArray(query.selectedRelations)) {
63
- setSelectedRelations(query.selectedRelations);
64
- }
65
- if (typeof query.unidirectional === "string") {
66
- setUnidirectional(query.unidirectional === "true");
67
- }
68
- if (typeof query.mergeRelations === "string") {
69
- setMergeRelations(query.mergeRelations === "true");
70
- }
71
- if (typeof query.direction === "string") {
72
- setDirection(query.direction);
73
- }
74
- if (typeof query.showFilters === "string") {
75
- setShowFilters(query.showFilters === "true");
76
- }
77
- }, [
78
- prevQueryParams,
79
- location.search,
80
- query,
81
- setRootEntityNames,
82
- setMaxDepth,
83
- setSelectedKinds,
84
- setSelectedRelations,
85
- setUnidirectional,
86
- setMergeRelations,
87
- setDirection,
88
- setShowFilters
89
- ]);
90
- const previousRootEntityRefs = usePrevious(
91
- rootEntityNames.map((e) => stringifyEntityRef(e))
92
- );
93
- useEffect(() => {
94
- const rootEntityRefs = rootEntityNames.map((e) => stringifyEntityRef(e));
95
69
  const newParams = qs.stringify(
96
70
  {
97
- rootEntityRefs,
71
+ rootEntityRefs: rootEntityNames.map(stringifyEntityRef),
98
72
  maxDepth: isFinite(maxDepth) ? maxDepth : "\u221E",
99
73
  selectedKinds,
100
74
  selectedRelations,
101
75
  unidirectional,
102
76
  mergeRelations,
103
77
  direction,
104
- showFilters
78
+ showFilters,
79
+ curve
105
80
  },
106
81
  { arrayFormat: "brackets", addQueryPrefix: true }
107
82
  );
108
- const newUrl = `${window.location.pathname}${newParams}`;
109
- if (!previousRootEntityRefs || rootEntityRefs.length === previousRootEntityRefs.length && rootEntityRefs.every((v, i) => v === previousRootEntityRefs[i])) {
110
- window.history.replaceState(null, document.title, newUrl);
111
- } else {
112
- window.history.pushState(null, document.title, newUrl);
113
- }
83
+ navigate(newParams, { replace: true });
114
84
  }, [
115
- rootEntityNames,
116
85
  maxDepth,
86
+ curve,
117
87
  selectedKinds,
118
88
  selectedRelations,
119
89
  unidirectional,
120
90
  mergeRelations,
121
91
  direction,
122
92
  showFilters,
123
- previousRootEntityRefs
93
+ rootEntityNames,
94
+ navigate
124
95
  ]);
125
96
  return {
126
97
  rootEntityNames,
@@ -1 +1 @@
1
- {"version":3,"file":"useCatalogGraphPage.esm.js","sources":["../../../src/components/CatalogGraphPage/useCatalogGraphPage.ts"],"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 */\nimport {\n CompoundEntityRef,\n parseEntityRef,\n stringifyEntityRef,\n} from '@backstage/catalog-model';\nimport qs from 'qs';\nimport {\n Dispatch,\n DispatchWithoutAction,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { useLocation } from 'react-router-dom';\nimport usePrevious from 'react-use/esm/usePrevious';\nimport { Direction } from '../EntityRelationsGraph';\n\nexport type CatalogGraphPageValue = {\n rootEntityNames: CompoundEntityRef[];\n setRootEntityNames: Dispatch<React.SetStateAction<CompoundEntityRef[]>>;\n maxDepth: number;\n setMaxDepth: Dispatch<React.SetStateAction<number>>;\n selectedRelations: string[] | undefined;\n setSelectedRelations: Dispatch<React.SetStateAction<string[] | undefined>>;\n selectedKinds: string[] | undefined;\n setSelectedKinds: Dispatch<React.SetStateAction<string[] | undefined>>;\n unidirectional: boolean;\n setUnidirectional: Dispatch<React.SetStateAction<boolean>>;\n mergeRelations: boolean;\n setMergeRelations: Dispatch<React.SetStateAction<boolean>>;\n direction: Direction;\n setDirection: Dispatch<React.SetStateAction<Direction>>;\n curve: 'curveStepBefore' | 'curveMonotoneX';\n setCurve: Dispatch<\n React.SetStateAction<'curveStepBefore' | 'curveMonotoneX'>\n >;\n showFilters: boolean;\n toggleShowFilters: DispatchWithoutAction;\n};\n\nexport function useCatalogGraphPage({\n initialState = {},\n}: {\n initialState?: {\n selectedRelations?: string[] | undefined;\n selectedKinds?: string[] | undefined;\n rootEntityRefs?: string[];\n maxDepth?: number;\n unidirectional?: boolean;\n mergeRelations?: boolean;\n direction?: Direction;\n showFilters?: boolean;\n curve?: 'curveStepBefore' | 'curveMonotoneX';\n };\n}): CatalogGraphPageValue {\n const location = useLocation();\n const query = useMemo(\n () =>\n (qs.parse(location.search, { arrayLimit: 0, ignoreQueryPrefix: true }) ||\n {}) as {\n selectedRelations?: string[] | string;\n selectedKinds?: string[] | string;\n rootEntityRefs?: string[] | string;\n maxDepth?: string[] | string;\n unidirectional?: string[] | string;\n mergeRelations?: string[] | string;\n direction?: string[] | Direction;\n showFilters?: string[] | string;\n curve?: string[] | 'curveStepBefore' | 'curveMonotoneX';\n },\n [location.search],\n );\n\n // Initial state\n const [rootEntityNames, setRootEntityNames] = useState<CompoundEntityRef[]>(\n () =>\n (Array.isArray(query.rootEntityRefs)\n ? query.rootEntityRefs\n : initialState?.rootEntityRefs ?? []\n ).map(r => parseEntityRef(r)),\n );\n const [maxDepth, setMaxDepth] = useState<number>(() =>\n typeof query.maxDepth === 'string'\n ? parseMaxDepth(query.maxDepth)\n : initialState?.maxDepth ?? Number.POSITIVE_INFINITY,\n );\n const [selectedRelations, setSelectedRelations] = useState<\n string[] | undefined\n >(() =>\n Array.isArray(query.selectedRelations)\n ? query.selectedRelations\n : initialState?.selectedRelations,\n );\n const [selectedKinds, setSelectedKinds] = useState<string[] | undefined>(() =>\n (Array.isArray(query.selectedKinds)\n ? query.selectedKinds\n : initialState?.selectedKinds\n )?.map(k => k.toLocaleLowerCase('en-US')),\n );\n const [unidirectional, setUnidirectional] = useState<boolean>(() =>\n typeof query.unidirectional === 'string'\n ? query.unidirectional === 'true'\n : initialState?.unidirectional ?? true,\n );\n const [mergeRelations, setMergeRelations] = useState<boolean>(() =>\n typeof query.mergeRelations === 'string'\n ? query.mergeRelations === 'true'\n : initialState?.mergeRelations ?? true,\n );\n const [direction, setDirection] = useState<Direction>(() =>\n typeof query.direction === 'string'\n ? query.direction\n : initialState?.direction ?? Direction.LEFT_RIGHT,\n );\n const [curve, setCurve] = useState<'curveStepBefore' | 'curveMonotoneX'>(() =>\n typeof query.curve === 'string'\n ? query.curve\n : initialState?.curve ?? 'curveMonotoneX',\n );\n const [showFilters, setShowFilters] = useState<boolean>(() =>\n typeof query.showFilters === 'string'\n ? query.showFilters === 'true'\n : initialState?.showFilters ?? true,\n );\n const toggleShowFilters = useCallback(\n () => setShowFilters(s => !s),\n [setShowFilters],\n );\n\n // Update from query parameters\n const prevQueryParams = usePrevious(location.search);\n useEffect(() => {\n // Only respond to changes to url query params\n if (location.search === prevQueryParams) {\n return;\n }\n\n if (Array.isArray(query.rootEntityRefs)) {\n setRootEntityNames(query.rootEntityRefs.map(r => parseEntityRef(r)));\n }\n\n if (typeof query.maxDepth === 'string') {\n setMaxDepth(parseMaxDepth(query.maxDepth));\n }\n\n if (Array.isArray(query.selectedKinds)) {\n setSelectedKinds(query.selectedKinds);\n }\n\n if (Array.isArray(query.selectedRelations)) {\n setSelectedRelations(query.selectedRelations);\n }\n\n if (typeof query.unidirectional === 'string') {\n setUnidirectional(query.unidirectional === 'true');\n }\n\n if (typeof query.mergeRelations === 'string') {\n setMergeRelations(query.mergeRelations === 'true');\n }\n\n if (typeof query.direction === 'string') {\n setDirection(query.direction);\n }\n\n if (typeof query.showFilters === 'string') {\n setShowFilters(query.showFilters === 'true');\n }\n }, [\n prevQueryParams,\n location.search,\n query,\n setRootEntityNames,\n setMaxDepth,\n setSelectedKinds,\n setSelectedRelations,\n setUnidirectional,\n setMergeRelations,\n setDirection,\n setShowFilters,\n ]);\n\n // Update query parameters\n const previousRootEntityRefs = usePrevious(\n rootEntityNames.map(e => stringifyEntityRef(e)),\n );\n\n useEffect(() => {\n const rootEntityRefs = rootEntityNames.map(e => stringifyEntityRef(e));\n const newParams = qs.stringify(\n {\n rootEntityRefs,\n maxDepth: isFinite(maxDepth) ? maxDepth : '∞',\n selectedKinds,\n selectedRelations,\n unidirectional,\n mergeRelations,\n direction,\n showFilters,\n },\n { arrayFormat: 'brackets', addQueryPrefix: true },\n );\n const newUrl = `${window.location.pathname}${newParams}`;\n\n // We directly manipulate window history here in order to not re-render\n // infinitely (state => location => state => etc). The intention of this\n // code is just to ensure the right query/filters are loaded when a user\n // clicks the \"back\" button after clicking a result.\n // Only push a new history entry if we switched to another entity, but not\n // if we just changed a viewer setting.\n if (\n !previousRootEntityRefs ||\n (rootEntityRefs.length === previousRootEntityRefs.length &&\n rootEntityRefs.every((v, i) => v === previousRootEntityRefs[i]))\n ) {\n window.history.replaceState(null, document.title, newUrl);\n } else {\n window.history.pushState(null, document.title, newUrl);\n }\n }, [\n rootEntityNames,\n maxDepth,\n selectedKinds,\n selectedRelations,\n unidirectional,\n mergeRelations,\n direction,\n showFilters,\n previousRootEntityRefs,\n ]);\n\n return {\n rootEntityNames,\n setRootEntityNames,\n maxDepth,\n setMaxDepth,\n selectedRelations,\n setSelectedRelations,\n selectedKinds,\n setSelectedKinds,\n unidirectional,\n setUnidirectional,\n mergeRelations,\n setMergeRelations,\n direction,\n setDirection,\n curve,\n setCurve,\n showFilters,\n toggleShowFilters,\n };\n}\n\nfunction parseMaxDepth(value: string): number {\n return value === '∞' ? Number.POSITIVE_INFINITY : Number(value);\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useCatalogGraphPage.esm.js","sources":["../../../src/components/CatalogGraphPage/useCatalogGraphPage.ts"],"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 */\nimport {\n CompoundEntityRef,\n parseEntityRef,\n stringifyEntityRef,\n} from '@backstage/catalog-model';\nimport qs from 'qs';\nimport {\n Dispatch,\n DispatchWithoutAction,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport { Direction } from '../EntityRelationsGraph';\n\nexport type CatalogGraphPageValue = {\n rootEntityNames: CompoundEntityRef[];\n setRootEntityNames: (value: CompoundEntityRef[]) => void;\n maxDepth: number;\n setMaxDepth: Dispatch<React.SetStateAction<number>>;\n selectedRelations: string[] | undefined;\n setSelectedRelations: Dispatch<React.SetStateAction<string[] | undefined>>;\n selectedKinds: string[] | undefined;\n setSelectedKinds: Dispatch<React.SetStateAction<string[] | undefined>>;\n unidirectional: boolean;\n setUnidirectional: Dispatch<React.SetStateAction<boolean>>;\n mergeRelations: boolean;\n setMergeRelations: Dispatch<React.SetStateAction<boolean>>;\n direction: Direction;\n setDirection: Dispatch<React.SetStateAction<Direction>>;\n curve: 'curveStepBefore' | 'curveMonotoneX';\n setCurve: Dispatch<\n React.SetStateAction<'curveStepBefore' | 'curveMonotoneX'>\n >;\n showFilters: boolean;\n toggleShowFilters: DispatchWithoutAction;\n};\n\nexport function useCatalogGraphPage({\n initialState = {},\n}: {\n initialState?: {\n selectedRelations?: string[] | undefined;\n selectedKinds?: string[] | undefined;\n rootEntityRefs?: string[];\n maxDepth?: number;\n unidirectional?: boolean;\n mergeRelations?: boolean;\n direction?: Direction;\n showFilters?: boolean;\n curve?: 'curveStepBefore' | 'curveMonotoneX';\n };\n}): CatalogGraphPageValue {\n const location = useLocation();\n const navigate = useNavigate();\n\n const query = useMemo(\n () =>\n (qs.parse(location.search, { arrayLimit: 0, ignoreQueryPrefix: true }) ||\n {}) as {\n selectedRelations?: string[] | string;\n selectedKinds?: string[] | string;\n rootEntityRefs?: string[] | string;\n maxDepth?: string[] | string;\n unidirectional?: string[] | string;\n mergeRelations?: string[] | string;\n direction?: string[] | Direction;\n showFilters?: string[] | string;\n curve?: string[] | 'curveStepBefore' | 'curveMonotoneX';\n },\n [location.search],\n );\n\n const rootEntityNames = useMemo(\n () =>\n (Array.isArray(query.rootEntityRefs)\n ? query.rootEntityRefs\n : initialState?.rootEntityRefs ?? []\n ).map(r => parseEntityRef(r)),\n [initialState?.rootEntityRefs, query.rootEntityRefs],\n );\n\n const setRootEntityNames = useCallback(\n (value: CompoundEntityRef[]) => {\n const areSame =\n rootEntityNames.length === value.length &&\n rootEntityNames.every(\n (r, i) => stringifyEntityRef(r) === stringifyEntityRef(value[i]),\n );\n\n if (areSame) {\n return;\n }\n\n const newSearch = qs.stringify(\n {\n ...query,\n rootEntityRefs: value.map(r => stringifyEntityRef(r)),\n },\n { arrayFormat: 'brackets', addQueryPrefix: true },\n );\n\n navigate(newSearch);\n },\n [rootEntityNames, navigate, query],\n );\n\n const [maxDepth, setMaxDepth] = useState<number>(() =>\n typeof query.maxDepth === 'string'\n ? parseMaxDepth(query.maxDepth)\n : initialState?.maxDepth ?? Number.POSITIVE_INFINITY,\n );\n\n const [selectedRelations, setSelectedRelations] = useState<\n string[] | undefined\n >(() =>\n Array.isArray(query.selectedRelations)\n ? query.selectedRelations\n : initialState?.selectedRelations,\n );\n\n const [selectedKinds, setSelectedKinds] = useState<string[] | undefined>(() =>\n (Array.isArray(query.selectedKinds)\n ? query.selectedKinds\n : initialState?.selectedKinds\n )?.map(k => k.toLocaleLowerCase('en-US')),\n );\n\n const [unidirectional, setUnidirectional] = useState<boolean>(() =>\n typeof query.unidirectional === 'string'\n ? query.unidirectional === 'true'\n : initialState?.unidirectional ?? true,\n );\n\n const [mergeRelations, setMergeRelations] = useState<boolean>(() =>\n typeof query.mergeRelations === 'string'\n ? query.mergeRelations === 'true'\n : initialState?.mergeRelations ?? true,\n );\n\n const [direction, setDirection] = useState<Direction>(() =>\n typeof query.direction === 'string'\n ? query.direction\n : initialState?.direction ?? Direction.LEFT_RIGHT,\n );\n\n const [curve, setCurve] = useState<'curveStepBefore' | 'curveMonotoneX'>(() =>\n typeof query.curve === 'string'\n ? query.curve\n : initialState?.curve ?? 'curveMonotoneX',\n );\n\n const [showFilters, setShowFilters] = useState<boolean>(() =>\n typeof query.showFilters === 'string'\n ? query.showFilters === 'true'\n : initialState?.showFilters ?? true,\n );\n\n const toggleShowFilters = useCallback(\n () => setShowFilters(s => !s),\n [setShowFilters],\n );\n\n useEffect(() => {\n const newParams = qs.stringify(\n {\n rootEntityRefs: rootEntityNames.map(stringifyEntityRef),\n maxDepth: isFinite(maxDepth) ? maxDepth : '∞',\n selectedKinds,\n selectedRelations,\n unidirectional,\n mergeRelations,\n direction,\n showFilters,\n curve,\n },\n { arrayFormat: 'brackets', addQueryPrefix: true },\n );\n\n navigate(newParams, { replace: true });\n }, [\n maxDepth,\n curve,\n selectedKinds,\n selectedRelations,\n unidirectional,\n mergeRelations,\n direction,\n showFilters,\n rootEntityNames,\n navigate,\n ]);\n\n return {\n rootEntityNames,\n setRootEntityNames,\n maxDepth,\n setMaxDepth,\n selectedRelations,\n setSelectedRelations,\n selectedKinds,\n setSelectedKinds,\n unidirectional,\n setUnidirectional,\n mergeRelations,\n setMergeRelations,\n direction,\n setDirection,\n curve,\n setCurve,\n showFilters,\n toggleShowFilters,\n };\n}\n\nfunction parseMaxDepth(value: string): number {\n return value === '∞' ? Number.POSITIVE_INFINITY : Number(value);\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-catalog-graph",
3
- "version": "0.4.8",
3
+ "version": "0.4.9-next.1",
4
4
  "backstage": {
5
5
  "role": "frontend-plugin",
6
6
  "pluginId": "catalog-graph",
@@ -48,13 +48,13 @@
48
48
  "test": "backstage-cli package test"
49
49
  },
50
50
  "dependencies": {
51
- "@backstage/catalog-client": "^1.6.6",
51
+ "@backstage/catalog-client": "^1.6.7-next.0",
52
52
  "@backstage/catalog-model": "^1.6.0",
53
- "@backstage/core-compat-api": "^0.2.8",
54
- "@backstage/core-components": "^0.14.10",
53
+ "@backstage/core-compat-api": "^0.3.0-next.1",
54
+ "@backstage/core-components": "^0.14.11-next.0",
55
55
  "@backstage/core-plugin-api": "^1.9.3",
56
- "@backstage/frontend-plugin-api": "^0.7.0",
57
- "@backstage/plugin-catalog-react": "^1.12.3",
56
+ "@backstage/frontend-plugin-api": "^0.8.0-next.1",
57
+ "@backstage/plugin-catalog-react": "^1.12.4-next.1",
58
58
  "@backstage/types": "^1.1.1",
59
59
  "@material-ui/core": "^4.12.2",
60
60
  "@material-ui/icons": "^4.9.1",
@@ -67,11 +67,11 @@
67
67
  "react-use": "^17.2.4"
68
68
  },
69
69
  "devDependencies": {
70
- "@backstage/cli": "^0.27.0",
70
+ "@backstage/cli": "^0.27.1-next.1",
71
71
  "@backstage/core-app-api": "^1.14.2",
72
- "@backstage/dev-utils": "^1.0.37",
73
- "@backstage/plugin-catalog": "^1.22.0",
74
- "@backstage/test-utils": "^1.5.10",
72
+ "@backstage/dev-utils": "^1.0.38-next.1",
73
+ "@backstage/plugin-catalog": "^1.22.1-next.1",
74
+ "@backstage/test-utils": "^1.6.0-next.0",
75
75
  "@testing-library/dom": "^10.0.0",
76
76
  "@testing-library/jest-dom": "^6.0.0",
77
77
  "@testing-library/react": "^15.0.0",