@backstage-community/plugin-tech-insights-maturity 0.2.2 → 0.3.0
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 +15 -0
- package/dist/ScoreRouter.esm.js +2 -2
- package/dist/ScoreRouter.esm.js.map +1 -1
- package/dist/SummaryRouter.esm.js +2 -2
- package/dist/SummaryRouter.esm.js.map +1 -1
- package/dist/components/MaturityChartCard/MaturityChartCard.esm.js +44 -41
- package/dist/components/MaturityChartCard/MaturityChartCard.esm.js.map +1 -1
- package/dist/components/MaturityPage/MaturityPage.esm.js +5 -2
- package/dist/components/MaturityPage/MaturityPage.esm.js.map +1 -1
- package/dist/components/MaturityRankAvatar/MaturityRankAvatar.esm.js +23 -21
- package/dist/components/MaturityRankAvatar/MaturityRankAvatar.esm.js.map +1 -1
- package/dist/components/MaturityRankInfoCard/MaturityRankInfoCard.esm.js +32 -17
- package/dist/components/MaturityRankInfoCard/MaturityRankInfoCard.esm.js.map +1 -1
- package/dist/components/MaturityRankWidget/MaturityRankWidget.esm.js +3 -3
- package/dist/components/MaturityRankWidget/MaturityRankWidget.esm.js.map +1 -1
- package/dist/components/MaturityScorePage/MaturityScorePage.esm.js +52 -45
- package/dist/components/MaturityScorePage/MaturityScorePage.esm.js.map +1 -1
- package/dist/components/MaturityScorePage/maturityTableRows.esm.js +75 -42
- package/dist/components/MaturityScorePage/maturityTableRows.esm.js.map +1 -1
- package/dist/components/MaturitySummaryInfoCard/MaturitySummaryCardContent.esm.js +4 -4
- package/dist/components/MaturitySummaryInfoCard/MaturitySummaryCardContent.esm.js.map +1 -1
- package/dist/components/MaturitySummaryInfoCard/MaturitySummaryInfoCard.esm.js +12 -6
- package/dist/components/MaturitySummaryInfoCard/MaturitySummaryInfoCard.esm.js.map +1 -1
- package/dist/components/MaturitySummaryPage/MaturitySummaryPage.esm.js +8 -5
- package/dist/components/MaturitySummaryPage/MaturitySummaryPage.esm.js.map +1 -1
- package/dist/components/MaturitySummaryTable/MaturitySummaryTable.esm.js +43 -38
- package/dist/components/MaturitySummaryTable/MaturitySummaryTable.esm.js.map +1 -1
- package/dist/helpers/AreaProgress.esm.js +26 -15
- package/dist/helpers/AreaProgress.esm.js.map +1 -1
- package/dist/helpers/MaturityHelp.esm.js +2 -2
- package/dist/helpers/MaturityHelp.esm.js.map +1 -1
- package/dist/helpers/MaturityLink.esm.js +2 -2
- package/dist/helpers/MaturityLink.esm.js.map +1 -1
- package/dist/index.d.ts +9 -10
- package/package.json +18 -18
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @backstage-community/plugin-tech-insights-maturity
|
|
2
2
|
|
|
3
|
+
## 0.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- a01ae4e: Backstage version bump to v1.39.0
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- 01640b2: Minor update to the API report.
|
|
12
|
+
- Updated dependencies [d6411fe]
|
|
13
|
+
- Updated dependencies [a01ae4e]
|
|
14
|
+
- @backstage-community/plugin-tech-insights-common@0.7.0
|
|
15
|
+
- @backstage-community/plugin-tech-insights-maturity-common@0.3.0
|
|
16
|
+
- @backstage-community/plugin-tech-insights-react@1.2.0
|
|
17
|
+
|
|
3
18
|
## 0.2.2
|
|
4
19
|
|
|
5
20
|
### Patch Changes
|
package/dist/ScoreRouter.esm.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { Routes, Route } from 'react-router-dom';
|
|
3
3
|
import { MaturityScorePage } from './components/MaturityScorePage/MaturityScorePage.esm.js';
|
|
4
4
|
|
|
5
|
-
const ScoreRouter = () => /* @__PURE__ */
|
|
5
|
+
const ScoreRouter = () => /* @__PURE__ */ jsx(Routes, { children: /* @__PURE__ */ jsx(Route, { path: "/", element: /* @__PURE__ */ jsx(MaturityScorePage, {}) }) });
|
|
6
6
|
|
|
7
7
|
export { ScoreRouter };
|
|
8
8
|
//# sourceMappingURL=ScoreRouter.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScoreRouter.esm.js","sources":["../src/ScoreRouter.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 */\nimport
|
|
1
|
+
{"version":3,"file":"ScoreRouter.esm.js","sources":["../src/ScoreRouter.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 */\nimport { Route, Routes } from 'react-router-dom';\nimport { MaturityScorePage } from './components/MaturityScorePage';\n\nexport const ScoreRouter = () => (\n <Routes>\n <Route path=\"/\" element={<MaturityScorePage />} />\n </Routes>\n);\n"],"names":[],"mappings":";;;;AAkBO,MAAM,WAAc,GAAA,sBACxB,GAAA,CAAA,MAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,KAAA,EAAA,EAAM,IAAK,EAAA,GAAA,EAAI,OAAS,kBAAA,GAAA,CAAC,iBAAkB,EAAA,EAAA,CAAA,EAAI,CAClD,EAAA;;;;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { Routes, Route } from 'react-router-dom';
|
|
3
3
|
import { MaturitySummaryPage } from './components/MaturitySummaryPage/MaturitySummaryPage.esm.js';
|
|
4
4
|
|
|
5
|
-
const SummaryRouter = () => /* @__PURE__ */
|
|
5
|
+
const SummaryRouter = () => /* @__PURE__ */ jsx(Routes, { children: /* @__PURE__ */ jsx(Route, { path: "/", element: /* @__PURE__ */ jsx(MaturitySummaryPage, {}) }) });
|
|
6
6
|
|
|
7
7
|
export { SummaryRouter };
|
|
8
8
|
//# sourceMappingURL=SummaryRouter.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SummaryRouter.esm.js","sources":["../src/SummaryRouter.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 */\nimport
|
|
1
|
+
{"version":3,"file":"SummaryRouter.esm.js","sources":["../src/SummaryRouter.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 */\nimport { Route, Routes } from 'react-router-dom';\nimport { MaturitySummaryPage } from './components/MaturitySummaryPage';\n\nexport const SummaryRouter = () => (\n <Routes>\n <Route path=\"/\" element={<MaturitySummaryPage />} />\n </Routes>\n);\n"],"names":[],"mappings":";;;;AAkBO,MAAM,aAAgB,GAAA,sBAC1B,GAAA,CAAA,MAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,KAAA,EAAA,EAAM,IAAK,EAAA,GAAA,EAAI,OAAS,kBAAA,GAAA,CAAC,mBAAoB,EAAA,EAAA,CAAA,EAAI,CACpD,EAAA;;;;"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
1
2
|
import { useApi } from '@backstage/core-plugin-api';
|
|
2
3
|
import { Rank } from '@backstage-community/plugin-tech-insights-maturity-common';
|
|
3
4
|
import Card from '@mui/material/Card';
|
|
@@ -6,7 +7,6 @@ import CircularProgress from '@mui/material/CircularProgress';
|
|
|
6
7
|
import { styled } from '@mui/material/styles';
|
|
7
8
|
import { useDrawingArea } from '@mui/x-charts/hooks';
|
|
8
9
|
import { PieChart } from '@mui/x-charts/PieChart';
|
|
9
|
-
import React from 'react';
|
|
10
10
|
import useAsyncRetry from 'react-use/lib/useAsync';
|
|
11
11
|
import { maturityApiRef } from '../../api/MaturityApi.esm.js';
|
|
12
12
|
import '@backstage/catalog-model';
|
|
@@ -26,7 +26,7 @@ const StyledText = styled("text")(({ theme }) => ({
|
|
|
26
26
|
}));
|
|
27
27
|
function PieCenterLabel({ children }) {
|
|
28
28
|
const { width, height, left, top } = useDrawingArea();
|
|
29
|
-
return /* @__PURE__ */
|
|
29
|
+
return /* @__PURE__ */ jsx(StyledText, { x: left + width / 2, y: top + height / 2, children });
|
|
30
30
|
}
|
|
31
31
|
const MaturityChartCard = ({ entities }) => {
|
|
32
32
|
const api = useApi(maturityApiRef);
|
|
@@ -34,45 +34,48 @@ const MaturityChartCard = ({ entities }) => {
|
|
|
34
34
|
async () => api.getBulkMaturityCheckResults(entities),
|
|
35
35
|
[api]
|
|
36
36
|
);
|
|
37
|
-
return /* @__PURE__ */
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
{
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
37
|
+
return /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsxs(CardContent, { children: [
|
|
38
|
+
loading && /* @__PURE__ */ jsx(CircularProgress, { size: 100 }),
|
|
39
|
+
value && value.length > 0 && /* @__PURE__ */ jsx(
|
|
40
|
+
PieChart,
|
|
41
|
+
{
|
|
42
|
+
colors: [
|
|
43
|
+
getRankColor(Rank.Stone),
|
|
44
|
+
getRankColor(Rank.Bronze),
|
|
45
|
+
getRankColor(Rank.Silver),
|
|
46
|
+
getRankColor(Rank.Gold)
|
|
47
|
+
],
|
|
48
|
+
series: [
|
|
49
|
+
{
|
|
50
|
+
arcLabel: (item) => item.value > 0 ? `${(item.value / value.length * 100).toFixed()}%` : "",
|
|
51
|
+
data: [
|
|
52
|
+
{
|
|
53
|
+
value: value.filter((x) => x.rank === Rank.Stone).length,
|
|
54
|
+
label: Rank[Rank.Stone]
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
value: value.filter((x) => x.rank === Rank.Bronze).length,
|
|
58
|
+
label: Rank[Rank.Bronze]
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
value: value.filter((x) => x.rank === Rank.Silver).length,
|
|
62
|
+
label: Rank[Rank.Silver]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
value: value.filter((x) => x.rank === Rank.Gold).length,
|
|
66
|
+
label: Rank[Rank.Gold]
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
highlightScope: { faded: "global", highlighted: "item" },
|
|
70
|
+
faded: { color: "gray" },
|
|
71
|
+
innerRadius: 90
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
...size,
|
|
75
|
+
children: /* @__PURE__ */ jsx(PieCenterLabel, { children: `${value.length} services` })
|
|
76
|
+
}
|
|
77
|
+
)
|
|
78
|
+
] }) });
|
|
76
79
|
};
|
|
77
80
|
|
|
78
81
|
export { MaturityChartCard };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MaturityChartCard.esm.js","sources":["../../../src/components/MaturityChartCard/MaturityChartCard.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 */\nimport { Entity } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { Rank } from '@backstage-community/plugin-tech-insights-maturity-common';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { styled } from '@mui/material/styles';\nimport { useDrawingArea } from '@mui/x-charts/hooks';\nimport { PieChart } from '@mui/x-charts/PieChart';\nimport
|
|
1
|
+
{"version":3,"file":"MaturityChartCard.esm.js","sources":["../../../src/components/MaturityChartCard/MaturityChartCard.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 */\nimport { Entity } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { Rank } from '@backstage-community/plugin-tech-insights-maturity-common';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { styled } from '@mui/material/styles';\nimport { useDrawingArea } from '@mui/x-charts/hooks';\nimport { PieChart } from '@mui/x-charts/PieChart';\nimport type { ReactNode } from 'react';\nimport useAsyncRetry from 'react-use/lib/useAsync';\nimport { maturityApiRef } from '../../api';\nimport { getRankColor } from '../../helpers/utils';\n\ntype Props = {\n entities: Entity[];\n};\n\nconst size = {\n width: 380,\n height: 300,\n};\n\nconst StyledText = styled('text')(({ theme }) => ({\n fill: theme.palette.text.primary,\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize: 20,\n}));\n\nfunction PieCenterLabel({ children }: { children: ReactNode }) {\n const { width, height, left, top } = useDrawingArea();\n return (\n <StyledText x={left + width / 2} y={top + height / 2}>\n {children}\n </StyledText>\n );\n}\n\nexport const MaturityChartCard = ({ entities }: Props) => {\n const api = useApi(maturityApiRef);\n const { loading, value } = useAsyncRetry(\n async () => api.getBulkMaturityCheckResults(entities),\n [api],\n );\n\n return (\n <Card>\n <CardContent>\n {loading && <CircularProgress size={100} />}\n {value && value.length > 0 && (\n <PieChart\n colors={[\n getRankColor(Rank.Stone),\n getRankColor(Rank.Bronze),\n getRankColor(Rank.Silver),\n getRankColor(Rank.Gold),\n ]}\n series={[\n {\n arcLabel: item =>\n item.value > 0\n ? `${((item.value / value.length) * 100).toFixed()}%`\n : '',\n data: [\n {\n value: value.filter(x => x.rank === Rank.Stone).length,\n label: Rank[Rank.Stone],\n },\n {\n value: value.filter(x => x.rank === Rank.Bronze).length,\n label: Rank[Rank.Bronze],\n },\n {\n value: value.filter(x => x.rank === Rank.Silver).length,\n label: Rank[Rank.Silver],\n },\n {\n value: value.filter(x => x.rank === Rank.Gold).length,\n label: Rank[Rank.Gold],\n },\n ],\n highlightScope: { faded: 'global', highlighted: 'item' },\n faded: { color: 'gray' },\n innerRadius: 90,\n },\n ]}\n {...size}\n >\n <PieCenterLabel>{`${value.length} services`}</PieCenterLabel>\n </PieChart>\n )}\n </CardContent>\n </Card>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
1
2
|
import { Page, Header, Content } from '@backstage/core-components';
|
|
2
3
|
import { useApi } from '@backstage/core-plugin-api';
|
|
3
4
|
import { catalogApiRef } from '@backstage/plugin-catalog-react';
|
|
4
5
|
import Grid from '@mui/material/Grid';
|
|
5
|
-
import React from 'react';
|
|
6
6
|
import useAsyncRetry from 'react-use/lib/useAsync';
|
|
7
7
|
import { MaturityChartCard } from '../MaturityChartCard/MaturityChartCard.esm.js';
|
|
8
8
|
|
|
@@ -14,7 +14,10 @@ const MaturityPage = () => {
|
|
|
14
14
|
});
|
|
15
15
|
return entitiesList.items;
|
|
16
16
|
}, [catalogApi]);
|
|
17
|
-
return /* @__PURE__ */
|
|
17
|
+
return /* @__PURE__ */ jsxs(Page, { themeId: "home", children: [
|
|
18
|
+
/* @__PURE__ */ jsx(Header, { title: "Maturity" }),
|
|
19
|
+
/* @__PURE__ */ jsx(Content, { children: /* @__PURE__ */ jsx(Grid, { container: true, children: /* @__PURE__ */ jsx(Grid, { item: true, md: 4, children: /* @__PURE__ */ jsx(MaturityChartCard, { entities: entities ?? [] }) }) }) })
|
|
20
|
+
] });
|
|
18
21
|
};
|
|
19
22
|
|
|
20
23
|
export { MaturityPage };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MaturityPage.esm.js","sources":["../../../src/components/MaturityPage/MaturityPage.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 */\nimport { Content, Header, Page } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport Grid from '@mui/material/Grid';\nimport
|
|
1
|
+
{"version":3,"file":"MaturityPage.esm.js","sources":["../../../src/components/MaturityPage/MaturityPage.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 */\nimport { Content, Header, Page } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport Grid from '@mui/material/Grid';\nimport useAsyncRetry from 'react-use/lib/useAsync';\nimport { MaturityChartCard } from '../MaturityChartCard';\n\nexport const MaturityPage = () => {\n const catalogApi = useApi(catalogApiRef);\n\n const { value: entities } = useAsyncRetry(async () => {\n const entitiesList = await catalogApi.getEntities({\n filter: { kind: ['Component'] },\n });\n return entitiesList.items;\n }, [catalogApi]);\n\n return (\n <Page themeId=\"home\">\n <Header title=\"Maturity\" />\n <Content>\n <Grid container>\n <Grid item md={4}>\n <MaturityChartCard entities={entities ?? []} />\n </Grid>\n </Grid>\n </Content>\n </Page>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAsBO,MAAM,eAAe,MAAM;AAChC,EAAM,MAAA,UAAA,GAAa,OAAO,aAAa,CAAA;AAEvC,EAAA,MAAM,EAAE,KAAA,EAAO,QAAS,EAAA,GAAI,cAAc,YAAY;AACpD,IAAM,MAAA,YAAA,GAAe,MAAM,UAAA,CAAW,WAAY,CAAA;AAAA,MAChD,MAAQ,EAAA,EAAE,IAAM,EAAA,CAAC,WAAW,CAAE;AAAA,KAC/B,CAAA;AACD,IAAA,OAAO,YAAa,CAAA,KAAA;AAAA,GACtB,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EACE,uBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,OAAA,EAAQ,MACZ,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,MAAA,EAAA,EAAO,OAAM,UAAW,EAAA,CAAA;AAAA,oBACzB,GAAA,CAAC,WACC,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,WAAS,IACb,EAAA,QAAA,kBAAA,GAAA,CAAC,QAAK,IAAI,EAAA,IAAA,EAAC,IAAI,CACb,EAAA,QAAA,kBAAA,GAAA,CAAC,qBAAkB,QAAU,EAAA,QAAA,IAAY,EAAI,EAAA,CAAA,EAC/C,GACF,CACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
1
2
|
import { Rank } from '@backstage-community/plugin-tech-insights-maturity-common';
|
|
2
3
|
import Avatar from '@mui/material/Avatar';
|
|
3
4
|
import Chip from '@mui/material/Chip';
|
|
4
5
|
import Tooltip from '@mui/material/Tooltip';
|
|
5
6
|
import { Circle } from 'rc-progress';
|
|
6
|
-
import React from 'react';
|
|
7
7
|
import getRankImg from '../../helpers/Rank.esm.js';
|
|
8
8
|
import { getNextRankColor, pluralize } from '../../helpers/utils.esm.js';
|
|
9
9
|
import { MaturityLink } from '../../helpers/MaturityLink.esm.js';
|
|
@@ -18,7 +18,7 @@ const ChipWrapper = ({
|
|
|
18
18
|
if (isMaxRank) {
|
|
19
19
|
backgroundColor = "rgb(35, 180, 70, 1)";
|
|
20
20
|
}
|
|
21
|
-
return /* @__PURE__ */
|
|
21
|
+
return /* @__PURE__ */ jsx(
|
|
22
22
|
Chip,
|
|
23
23
|
{
|
|
24
24
|
avatar: children,
|
|
@@ -44,7 +44,7 @@ const MaturityRankAvatar = ({
|
|
|
44
44
|
const rank = value.rank;
|
|
45
45
|
const maxRank = value.isMaxRank ? value.rank : Rank.Gold;
|
|
46
46
|
const img = getRankImg(rank);
|
|
47
|
-
result = /* @__PURE__ */
|
|
47
|
+
result = /* @__PURE__ */ jsx(
|
|
48
48
|
Avatar,
|
|
49
49
|
{
|
|
50
50
|
alt: Rank[rank],
|
|
@@ -60,7 +60,7 @@ const MaturityRankAvatar = ({
|
|
|
60
60
|
remainingTasks
|
|
61
61
|
)} left)`;
|
|
62
62
|
tooltip = value.isMaxRank ? `${Rank[rank]} rank acquired` : `${progress.percentage}% to ${Rank[rank + 1]} ${remainingTasksTip}`;
|
|
63
|
-
result = /* @__PURE__ */
|
|
63
|
+
result = /* @__PURE__ */ jsxs(
|
|
64
64
|
"div",
|
|
65
65
|
{
|
|
66
66
|
style: {
|
|
@@ -68,32 +68,34 @@ const MaturityRankAvatar = ({
|
|
|
68
68
|
position: "relative",
|
|
69
69
|
alignItems: "center",
|
|
70
70
|
justifyContent: "center"
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
71
|
+
},
|
|
72
|
+
children: [
|
|
73
|
+
/* @__PURE__ */ jsx(
|
|
74
|
+
Circle,
|
|
75
|
+
{
|
|
76
|
+
strokeColor: getNextRankColor(rank, maxRank),
|
|
77
|
+
trailColor: "rgba(0, 0, 0, 0.1)",
|
|
78
|
+
strokeWidth: 14,
|
|
79
|
+
trailWidth: 14,
|
|
80
|
+
percent: progress.percentage,
|
|
81
|
+
style: { width: size + size / 4, height: size + size / 4 }
|
|
82
|
+
}
|
|
83
|
+
),
|
|
84
|
+
/* @__PURE__ */ jsx("div", { style: { zIndex: 1, position: "absolute" }, children: result })
|
|
85
|
+
]
|
|
86
|
+
}
|
|
85
87
|
);
|
|
86
88
|
} else {
|
|
87
89
|
tooltip = Rank[rank];
|
|
88
90
|
}
|
|
89
91
|
if (variant === "chip") {
|
|
90
92
|
tooltip = value.isMaxRank ? "All required tasks have been completed!" : `Increase your rank by completing all ${Rank[rank + 1]} rank tasks!`;
|
|
91
|
-
result = /* @__PURE__ */
|
|
93
|
+
result = /* @__PURE__ */ jsx(ChipWrapper, { rank, size, isMaxRank: value.isMaxRank, children: result });
|
|
92
94
|
}
|
|
93
95
|
if (entity !== void 0) {
|
|
94
|
-
result = /* @__PURE__ */
|
|
96
|
+
result = /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(MaturityLink, { entity, children: result }) });
|
|
95
97
|
}
|
|
96
|
-
return /* @__PURE__ */
|
|
98
|
+
return /* @__PURE__ */ jsx(Tooltip, { title: tooltip, arrow: true, children: result });
|
|
97
99
|
};
|
|
98
100
|
|
|
99
101
|
export { MaturityRankAvatar };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MaturityRankAvatar.esm.js","sources":["../../../src/components/MaturityRankAvatar/MaturityRankAvatar.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 */\nimport { Entity } from '@backstage/catalog-model';\nimport {\n MaturityProgress,\n Rank,\n} from '@backstage-community/plugin-tech-insights-maturity-common';\nimport Avatar from '@mui/material/Avatar';\nimport Chip from '@mui/material/Chip';\nimport Tooltip from '@mui/material/Tooltip';\nimport { Circle } from 'rc-progress';\nimport
|
|
1
|
+
{"version":3,"file":"MaturityRankAvatar.esm.js","sources":["../../../src/components/MaturityRankAvatar/MaturityRankAvatar.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 */\nimport { Entity } from '@backstage/catalog-model';\nimport {\n MaturityProgress,\n Rank,\n} from '@backstage-community/plugin-tech-insights-maturity-common';\nimport Avatar from '@mui/material/Avatar';\nimport Chip from '@mui/material/Chip';\nimport Tooltip from '@mui/material/Tooltip';\nimport { Circle } from 'rc-progress';\nimport type { JSX } from 'react';\nimport getRankImg from '../../helpers/Rank';\nimport { getNextRankColor, pluralize } from '../../helpers/utils';\nimport { MaturityLink } from '../../helpers/MaturityLink';\n\nconst ChipWrapper = ({\n children,\n rank,\n size,\n isMaxRank,\n}: {\n children: JSX.Element;\n rank: Rank;\n size: number;\n isMaxRank?: boolean;\n}) => {\n let backgroundColor;\n if (isMaxRank) {\n backgroundColor = 'rgb(35, 180, 70, 1)';\n }\n\n return (\n <Chip\n avatar={children}\n label={Rank[rank]}\n style={{\n height: size + 7,\n backgroundColor,\n margin: '0',\n }}\n clickable\n />\n );\n};\n\ntype Props = {\n value: { rank: Rank; isMaxRank?: boolean };\n className?: string;\n entity?: Entity;\n size?: number;\n progress?: MaturityProgress;\n variant?: 'chip';\n};\n\nexport const MaturityRankAvatar = ({\n className,\n entity,\n progress,\n size = 27,\n value,\n variant,\n}: Props) => {\n let result;\n const rank = value.rank;\n const maxRank = value.isMaxRank ? value.rank : Rank.Gold;\n\n const img = getRankImg(rank);\n\n // Define base Avatar element\n result = (\n <Avatar\n alt={Rank[rank]}\n src={img}\n className={className}\n style={{ width: size, height: size }}\n />\n );\n\n let tooltip = '';\n\n // Wrap Avatar with a progress indicator if provided\n if (progress !== undefined) {\n const remainingTasks = progress.totalChecks - progress.passedChecks;\n const remainingTasksTip = `(${remainingTasks} task${pluralize(\n remainingTasks,\n )} left)`;\n tooltip = value.isMaxRank\n ? `${Rank[rank]} rank acquired`\n : `${progress.percentage}% to ${Rank[rank + 1]} ${remainingTasksTip}`;\n\n result = (\n <div\n style={{\n display: 'flex',\n position: 'relative',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Circle\n strokeColor={getNextRankColor(rank, maxRank)}\n trailColor=\"rgba(0, 0, 0, 0.1)\"\n strokeWidth={14}\n trailWidth={14}\n percent={progress.percentage}\n style={{ width: size + size / 4, height: size + size / 4 }}\n />\n <div style={{ zIndex: 1, position: 'absolute' }}>{result}</div>\n </div>\n );\n } else {\n tooltip = Rank[rank];\n }\n\n // Wrap Avatar in Chip if specified\n if (variant === 'chip') {\n tooltip = value.isMaxRank\n ? 'All required tasks have been completed!'\n : `Increase your rank by completing all ${Rank[rank + 1]} rank tasks!`;\n\n result = (\n <ChipWrapper rank={rank} size={size} isMaxRank={value.isMaxRank}>\n {result}\n </ChipWrapper>\n );\n }\n\n // Wrap with Entity link if Entity is provided\n if (entity !== undefined) {\n result = (\n <div>\n <MaturityLink entity={entity}>{result}</MaturityLink>\n </div>\n );\n }\n\n // Wrap with tooltip and return\n return (\n <Tooltip title={tooltip} arrow>\n {result}\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AA6BA,MAAM,cAAc,CAAC;AAAA,EACnB,QAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAKM,KAAA;AACJ,EAAI,IAAA,eAAA;AACJ,EAAA,IAAI,SAAW,EAAA;AACb,IAAkB,eAAA,GAAA,qBAAA;AAAA;AAGpB,EACE,uBAAA,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,MAAQ,EAAA,QAAA;AAAA,MACR,KAAA,EAAO,KAAK,IAAI,CAAA;AAAA,MAChB,KAAO,EAAA;AAAA,QACL,QAAQ,IAAO,GAAA,CAAA;AAAA,QACf,eAAA;AAAA,QACA,MAAQ,EAAA;AAAA,OACV;AAAA,MACA,SAAS,EAAA;AAAA;AAAA,GACX;AAEJ,CAAA;AAWO,MAAM,qBAAqB,CAAC;AAAA,EACjC,SAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAO,GAAA,EAAA;AAAA,EACP,KAAA;AAAA,EACA;AACF,CAAa,KAAA;AACX,EAAI,IAAA,MAAA;AACJ,EAAA,MAAM,OAAO,KAAM,CAAA,IAAA;AACnB,EAAA,MAAM,OAAU,GAAA,KAAA,CAAM,SAAY,GAAA,KAAA,CAAM,OAAO,IAAK,CAAA,IAAA;AAEpD,EAAM,MAAA,GAAA,GAAM,WAAW,IAAI,CAAA;AAG3B,EACE,MAAA,mBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,KAAK,IAAI,CAAA;AAAA,MACd,GAAK,EAAA,GAAA;AAAA,MACL,SAAA;AAAA,MACA,KAAO,EAAA,EAAE,KAAO,EAAA,IAAA,EAAM,QAAQ,IAAK;AAAA;AAAA,GACrC;AAGF,EAAA,IAAI,OAAU,GAAA,EAAA;AAGd,EAAA,IAAI,aAAa,KAAW,CAAA,EAAA;AAC1B,IAAM,MAAA,cAAA,GAAiB,QAAS,CAAA,WAAA,GAAc,QAAS,CAAA,YAAA;AACvD,IAAM,MAAA,iBAAA,GAAoB,CAAI,CAAA,EAAA,cAAc,CAAQ,KAAA,EAAA,SAAA;AAAA,MAClD;AAAA,KACD,CAAA,MAAA,CAAA;AACD,IAAA,OAAA,GAAU,MAAM,SACZ,GAAA,CAAA,EAAG,IAAK,CAAA,IAAI,CAAC,CACb,cAAA,CAAA,GAAA,CAAA,EAAG,QAAS,CAAA,UAAU,QAAQ,IAAK,CAAA,IAAA,GAAO,CAAC,CAAC,IAAI,iBAAiB,CAAA,CAAA;AAErE,IACE,MAAA,mBAAA,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAO,EAAA;AAAA,UACL,OAAS,EAAA,MAAA;AAAA,UACT,QAAU,EAAA,UAAA;AAAA,UACV,UAAY,EAAA,QAAA;AAAA,UACZ,cAAgB,EAAA;AAAA,SAClB;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAa,gBAAiB,CAAA,IAAA,EAAM,OAAO,CAAA;AAAA,cAC3C,UAAW,EAAA,oBAAA;AAAA,cACX,WAAa,EAAA,EAAA;AAAA,cACb,UAAY,EAAA,EAAA;AAAA,cACZ,SAAS,QAAS,CAAA,UAAA;AAAA,cAClB,KAAA,EAAO,EAAE,KAAO,EAAA,IAAA,GAAO,OAAO,CAAG,EAAA,MAAA,EAAQ,IAAO,GAAA,IAAA,GAAO,CAAE;AAAA;AAAA,WAC3D;AAAA,0BACA,GAAA,CAAC,SAAI,KAAO,EAAA,EAAE,QAAQ,CAAG,EAAA,QAAA,EAAU,UAAW,EAAA,EAAI,QAAO,EAAA,MAAA,EAAA;AAAA;AAAA;AAAA,KAC3D;AAAA,GAEG,MAAA;AACL,IAAA,OAAA,GAAU,KAAK,IAAI,CAAA;AAAA;AAIrB,EAAA,IAAI,YAAY,MAAQ,EAAA;AACtB,IAAA,OAAA,GAAU,MAAM,SACZ,GAAA,yCAAA,GACA,wCAAwC,IAAK,CAAA,IAAA,GAAO,CAAC,CAAC,CAAA,YAAA,CAAA;AAE1D,IAAA,MAAA,uBACG,WAAY,EAAA,EAAA,IAAA,EAAY,MAAY,SAAW,EAAA,KAAA,CAAM,WACnD,QACH,EAAA,MAAA,EAAA,CAAA;AAAA;AAKJ,EAAA,IAAI,WAAW,KAAW,CAAA,EAAA;AACxB,IAAA,MAAA,uBACG,KACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,YAAa,EAAA,EAAA,MAAA,EAAiB,kBAAO,CACxC,EAAA,CAAA;AAAA;AAKJ,EAAA,2BACG,OAAQ,EAAA,EAAA,KAAA,EAAO,OAAS,EAAA,KAAA,EAAK,MAC3B,QACH,EAAA,MAAA,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Fragment } from 'react';
|
|
2
3
|
import { InfoCard } from '@backstage/core-components';
|
|
3
4
|
import { Rank } from '@backstage-community/plugin-tech-insights-maturity-common';
|
|
4
5
|
import { makeStyles } from '@mui/styles';
|
|
@@ -45,7 +46,7 @@ function rankProgress(rank, value) {
|
|
|
45
46
|
return void 0;
|
|
46
47
|
}
|
|
47
48
|
function getRankAvatarProgress(rank, value) {
|
|
48
|
-
return /* @__PURE__ */
|
|
49
|
+
return /* @__PURE__ */ jsx(
|
|
49
50
|
MaturityRankAvatar,
|
|
50
51
|
{
|
|
51
52
|
value: { rank, isMaxRank: true },
|
|
@@ -56,23 +57,37 @@ function getRankAvatarProgress(rank, value) {
|
|
|
56
57
|
}
|
|
57
58
|
const MaturityRankInfoCard = ({ summary }) => {
|
|
58
59
|
const { content } = useStyles();
|
|
59
|
-
return /* @__PURE__ */
|
|
60
|
+
return /* @__PURE__ */ jsxs(
|
|
60
61
|
InfoCard,
|
|
61
62
|
{
|
|
62
|
-
title: /* @__PURE__ */
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
63
|
+
title: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
64
|
+
"Maturity Rank",
|
|
65
|
+
/* @__PURE__ */ jsx(MaturityHelp, {})
|
|
66
|
+
] }),
|
|
67
|
+
children: [
|
|
68
|
+
/* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 5, children: [
|
|
69
|
+
getRankAvatarProgress(Rank.Stone, summary),
|
|
70
|
+
getRankAvatarProgress(Rank.Bronze, summary),
|
|
71
|
+
getRankAvatarProgress(Rank.Silver, summary),
|
|
72
|
+
getRankAvatarProgress(Rank.Gold, summary)
|
|
73
|
+
] }) }),
|
|
74
|
+
/* @__PURE__ */ jsxs(CardContent, { children: [
|
|
75
|
+
/* @__PURE__ */ jsx(
|
|
76
|
+
MaturityRankAvatar,
|
|
77
|
+
{
|
|
78
|
+
value: summary,
|
|
79
|
+
size: 80,
|
|
80
|
+
progress: summary.rankProgress,
|
|
81
|
+
className: content
|
|
82
|
+
}
|
|
83
|
+
),
|
|
84
|
+
/* @__PURE__ */ jsx(Typography, { variant: "h6", align: "center", children: Rank[summary.rank] }),
|
|
85
|
+
/* @__PURE__ */ jsx(Typography, { variant: "subtitle2", align: "center", children: RankDescription.get(summary.rank) })
|
|
86
|
+
] }),
|
|
87
|
+
/* @__PURE__ */ jsx(Divider, {}),
|
|
88
|
+
/* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(MaturitySummaryCardContent, { summary, variant: "infoCard" }) })
|
|
89
|
+
]
|
|
90
|
+
}
|
|
76
91
|
);
|
|
77
92
|
};
|
|
78
93
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MaturityRankInfoCard.esm.js","sources":["../../../src/components/MaturityRankInfoCard/MaturityRankInfoCard.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 */\nimport
|
|
1
|
+
{"version":3,"file":"MaturityRankInfoCard.esm.js","sources":["../../../src/components/MaturityRankInfoCard/MaturityRankInfoCard.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 */\nimport { Fragment } from 'react';\nimport { InfoCard } from '@backstage/core-components';\nimport {\n MaturitySummary,\n Rank,\n} from '@backstage-community/plugin-tech-insights-maturity-common';\nimport { makeStyles } from '@mui/styles';\nimport Typography from '@mui/material/Typography';\nimport CardContent from '@mui/material/CardContent';\nimport Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport { MaturitySummaryCardContent } from '../MaturitySummaryInfoCard/MaturitySummaryCardContent';\nimport { MaturityHelp } from '../../helpers/MaturityHelp';\nimport { MaturityRankAvatar } from '../MaturityRankAvatar';\n\ntype Props = {\n summary: MaturitySummary;\n};\n\nconst useStyles = makeStyles({\n content: {\n justifyContent: 'center',\n margin: 'auto',\n },\n});\n\nconst RankDescription = new Map<number, string>([\n [\n Rank.Stone,\n 'Entity does not utilize standard infrastructure or tools to ensure effective operations',\n ],\n [\n Rank.Bronze,\n 'Has full Ownership, but Maintainability, Security, and Reliability are not ensured',\n ],\n [\n Rank.Silver,\n 'Ownership, Maintainability, and Security are ensured, but Reliability is not guaranteed',\n ],\n [\n Rank.Gold,\n 'Conforms with the Golden Path standards. Ownership, Maintainability, Security, and Reliability are all ensured',\n ],\n]);\n\nfunction rankProgress(rank: Rank, value: MaturitySummary) {\n if (value.rank >= rank || (value.maxRank === rank && value.isMaxRank)) {\n return {\n passedChecks: 0,\n totalChecks: 0,\n percentage: 100,\n };\n }\n return undefined;\n}\n\nfunction getRankAvatarProgress(rank: Rank, value: MaturitySummary) {\n return (\n <MaturityRankAvatar\n value={{ rank, isMaxRank: true }}\n size={25}\n progress={rankProgress(rank, value)}\n />\n );\n}\n\nexport const MaturityRankInfoCard = ({ summary }: Props) => {\n const { content } = useStyles();\n\n return (\n <InfoCard\n title={\n <Fragment>\n Maturity Rank\n <MaturityHelp />\n </Fragment>\n }\n >\n <CardContent>\n <Stack direction=\"row\" spacing={5}>\n {getRankAvatarProgress(Rank.Stone, summary)}\n {getRankAvatarProgress(Rank.Bronze, summary)}\n {getRankAvatarProgress(Rank.Silver, summary)}\n {getRankAvatarProgress(Rank.Gold, summary)}\n </Stack>\n </CardContent>\n <CardContent>\n <MaturityRankAvatar\n value={summary}\n size={80}\n progress={summary.rankProgress}\n className={content}\n />\n <Typography variant=\"h6\" align=\"center\">\n {Rank[summary.rank]}\n </Typography>\n <Typography variant=\"subtitle2\" align=\"center\">\n {RankDescription.get(summary.rank)}\n </Typography>\n </CardContent>\n <Divider />\n <CardContent>\n <MaturitySummaryCardContent summary={summary} variant=\"infoCard\" />\n </CardContent>\n </InfoCard>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import useAsyncRetry from 'react-use/lib/useAsync';
|
|
3
3
|
import { useApi } from '@backstage/core-plugin-api';
|
|
4
4
|
import { maturityApiRef } from '../../api/MaturityApi.esm.js';
|
|
@@ -14,8 +14,8 @@ const MaturityRankWidget = ({ entity }) => {
|
|
|
14
14
|
async () => api.getMaturityRank(entity),
|
|
15
15
|
[api, entity]
|
|
16
16
|
);
|
|
17
|
-
if (loading || !value) return /* @__PURE__ */
|
|
18
|
-
return /* @__PURE__ */
|
|
17
|
+
if (loading || !value) return /* @__PURE__ */ jsx(Fragment, {});
|
|
18
|
+
return /* @__PURE__ */ jsx(MaturityRankAvatar, { entity, value, variant: "chip" });
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
export { MaturityRankWidget };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MaturityRankWidget.esm.js","sources":["../../../src/components/MaturityRankWidget/MaturityRankWidget.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 */\nimport
|
|
1
|
+
{"version":3,"file":"MaturityRankWidget.esm.js","sources":["../../../src/components/MaturityRankWidget/MaturityRankWidget.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 */\nimport useAsyncRetry from 'react-use/lib/useAsync';\n\nimport { Entity } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { maturityApiRef } from '../../api';\nimport { MaturityRankAvatar } from '../MaturityRankAvatar';\n\ntype Props = {\n entity: Entity;\n};\n\nexport const MaturityRankWidget = ({ entity }: Props) => {\n const api = useApi(maturityApiRef);\n const { value, loading } = useAsyncRetry(\n async () => api.getMaturityRank(entity),\n [api, entity],\n );\n\n if (loading || !value) return <></>;\n return <MaturityRankAvatar entity={entity} value={value} variant=\"chip\" />;\n};\n"],"names":[],"mappings":";;;;;;;;;;AA0BO,MAAM,kBAAqB,GAAA,CAAC,EAAE,MAAA,EAAoB,KAAA;AACvD,EAAM,MAAA,GAAA,GAAM,OAAO,cAAc,CAAA;AACjC,EAAM,MAAA,EAAE,KAAO,EAAA,OAAA,EAAY,GAAA,aAAA;AAAA,IACzB,YAAY,GAAI,CAAA,eAAA,CAAgB,MAAM,CAAA;AAAA,IACtC,CAAC,KAAK,MAAM;AAAA,GACd;AAEA,EAAA,IAAI,OAAW,IAAA,CAAC,KAAO,EAAA,uBAAS,GAAA,CAAA,QAAA,EAAA,EAAA,CAAA;AAChC,EAAA,uBAAQ,GAAA,CAAA,kBAAA,EAAA,EAAmB,MAAgB,EAAA,KAAA,EAAc,SAAQ,MAAO,EAAA,CAAA;AAC1E;;;;"}
|