@red-hat-developer-hub/backstage-plugin-scorecard 2.7.0 → 2.7.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 +8 -0
- package/dist/alpha.d.ts +1 -1
- package/dist/api/index.esm.js +45 -1
- package/dist/api/index.esm.js.map +1 -1
- package/dist/components/AggregatedMetricCards/AverageCard/AverageCardComponent.esm.js +3 -1
- package/dist/components/AggregatedMetricCards/AverageCard/AverageCardComponent.esm.js.map +1 -1
- package/dist/components/AggregatedMetricCards/StatusGroupedCard/StatusGroupedCardComponent.esm.js +3 -1
- package/dist/components/AggregatedMetricCards/StatusGroupedCard/StatusGroupedCardComponent.esm.js.map +1 -1
- package/dist/components/AggregatedMetricCards/components/CardSubheader.esm.js +26 -12
- package/dist/components/AggregatedMetricCards/components/CardSubheader.esm.js.map +1 -1
- package/dist/components/ScorecardHomepageSection/ScorecardHomepageCard.esm.js +12 -1
- package/dist/components/ScorecardHomepageSection/ScorecardHomepageCard.esm.js.map +1 -1
- package/dist/components/ScorecardPage/EntitiesTable/EntitiesTable.esm.js +72 -64
- package/dist/components/ScorecardPage/EntitiesTable/EntitiesTable.esm.js.map +1 -1
- package/dist/components/ScorecardPage/EntitiesTable/EntitiesTableWrapper.esm.js +2 -2
- package/dist/components/ScorecardPage/EntitiesTable/EntitiesTableWrapper.esm.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/translations/de.esm.js +3 -0
- package/dist/translations/de.esm.js.map +1 -1
- package/dist/translations/es.esm.js +3 -0
- package/dist/translations/es.esm.js.map +1 -1
- package/dist/translations/fr.esm.js +3 -0
- package/dist/translations/fr.esm.js.map +1 -1
- package/dist/translations/it.esm.js +3 -0
- package/dist/translations/it.esm.js.map +1 -1
- package/dist/translations/ja.esm.js +3 -0
- package/dist/translations/ja.esm.js.map +1 -1
- package/dist/translations/ref.esm.js +4 -1
- package/dist/translations/ref.esm.js.map +1 -1
- package/dist/types/{index.d-Uz1xsqdo.d.ts → index.d-pCF5Ectg.d.ts} +3 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @red-hat-developer-hub/backstage-plugin-scorecard
|
|
2
2
|
|
|
3
|
+
## 2.7.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 91e724f: Expose scorecard entity calculation health on drill-down and aggregation APIs, and align the drill-down warning plus homepage subheader with those counts.
|
|
8
|
+
- Updated dependencies [91e724f]
|
|
9
|
+
- @red-hat-developer-hub/backstage-plugin-scorecard-common@2.7.1
|
|
10
|
+
|
|
3
11
|
## 2.7.0
|
|
4
12
|
|
|
5
13
|
### Minor Changes
|
package/dist/alpha.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
|
|
3
3
|
import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
|
|
4
|
-
export { a as scorecardTranslationRef, s as scorecardTranslations } from './types/index.d-
|
|
4
|
+
export { a as scorecardTranslationRef, s as scorecardTranslations } from './types/index.d-pCF5Ectg.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* The primary Scorecard frontend plugin.
|
package/dist/api/index.esm.js
CHANGED
|
@@ -72,7 +72,51 @@ class ScorecardApiClient {
|
|
|
72
72
|
"Invalid response format from aggregated scorecard API"
|
|
73
73
|
);
|
|
74
74
|
}
|
|
75
|
-
|
|
75
|
+
const resultRaw = data.result;
|
|
76
|
+
if (resultRaw === null || typeof resultRaw !== "object" || Array.isArray(resultRaw)) {
|
|
77
|
+
throw new TypeError(
|
|
78
|
+
"Invalid response format from aggregated scorecard API: result must be a non-null object"
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
const requireFiniteNumber = (value, fieldName) => {
|
|
82
|
+
const n = Number(value ?? 0);
|
|
83
|
+
if (!Number.isFinite(n)) {
|
|
84
|
+
throw new TypeError(
|
|
85
|
+
`Invalid aggregated scorecard API response: ${fieldName} must be a finite number`
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
return n;
|
|
89
|
+
};
|
|
90
|
+
const resultRecord = resultRaw;
|
|
91
|
+
const timestampValue = resultRecord.timestamp;
|
|
92
|
+
let timestamp;
|
|
93
|
+
if (typeof timestampValue === "string") {
|
|
94
|
+
timestamp = timestampValue;
|
|
95
|
+
} else if (typeof timestampValue === "number" && Number.isFinite(timestampValue)) {
|
|
96
|
+
timestamp = String(timestampValue);
|
|
97
|
+
} else if (typeof timestampValue === "bigint") {
|
|
98
|
+
timestamp = timestampValue.toString();
|
|
99
|
+
} else if (timestampValue instanceof Date) {
|
|
100
|
+
timestamp = timestampValue.toISOString();
|
|
101
|
+
} else {
|
|
102
|
+
timestamp = "";
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
...data,
|
|
106
|
+
result: {
|
|
107
|
+
...resultRecord,
|
|
108
|
+
total: requireFiniteNumber(resultRecord.total, "total"),
|
|
109
|
+
entitiesConsidered: requireFiniteNumber(
|
|
110
|
+
resultRecord.entitiesConsidered,
|
|
111
|
+
"entitiesConsidered"
|
|
112
|
+
),
|
|
113
|
+
calculationErrorCount: requireFiniteNumber(
|
|
114
|
+
resultRecord.calculationErrorCount,
|
|
115
|
+
"calculationErrorCount"
|
|
116
|
+
),
|
|
117
|
+
timestamp
|
|
118
|
+
}
|
|
119
|
+
};
|
|
76
120
|
} catch (error) {
|
|
77
121
|
if (error instanceof Error) {
|
|
78
122
|
throw error;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../src/api/index.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n createApiRef,\n FetchApi,\n DiscoveryApi,\n} from '@backstage/core-plugin-api';\nimport type {\n MetricResult,\n AggregatedMetricResult,\n AggregationMetadata,\n Metric,\n EntityMetricDetailResponse,\n} from '@red-hat-developer-hub/backstage-plugin-scorecard-common';\n\nimport type { GetAggregatedScorecardEntitiesOptions } from '../components/types';\n\nexport { ScorecardQueryProvider } from './ScorecardQueryProvider';\n\nimport type {\n ScorecardApi,\n ScorecardApiClientOptions,\n ScorecardOptions,\n} from './types';\n\nexport const scorecardApiRef = createApiRef<ScorecardApi>({\n id: 'plugin.scorecard.service',\n});\n\n/**\n * Client implementation for the Scorecard API.\n * @public\n */\nexport class ScorecardApiClient implements ScorecardApi {\n private readonly fetchApi: FetchApi;\n private readonly discoveryApi: DiscoveryApi;\n\n constructor(options: ScorecardApiClientOptions) {\n this.fetchApi = options.fetchApi;\n this.discoveryApi = options.discoveryApi;\n }\n\n async getBaseUrl(): Promise<string> {\n return await this.discoveryApi.getBaseUrl('scorecard');\n }\n\n async getScorecards({\n entity,\n metricIds,\n }: ScorecardOptions): Promise<MetricResult[]> {\n if (\n !entity?.kind ||\n !entity?.metadata?.namespace ||\n !entity?.metadata?.name\n ) {\n throw new Error(\n 'Entity missing required properties for scorecard lookup',\n );\n }\n\n const baseUrl = await this.getBaseUrl();\n const url = new URL(\n `${baseUrl}/metrics/catalog/${entity.kind}/${entity.metadata.namespace}/${entity.metadata.name}`,\n );\n\n if (metricIds) {\n url.searchParams.set('metricIds', metricIds.join(','));\n }\n\n try {\n const response = await this.fetchApi.fetch(url.toString());\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to fetch scorecards: ${response.status} ${response.statusText}. ${errorText}`,\n );\n }\n\n const data = await response.json();\n\n if (!Array.isArray(data)) {\n throw new Error('Invalid response format from scorecard API');\n }\n\n return data;\n } catch (error) {\n if (error instanceof Error) {\n throw error;\n }\n throw new Error(`Unexpected error fetching scorecards: ${String(error)}`);\n }\n }\n\n async getAggregatedScorecard(\n aggregationId: string,\n ): Promise<AggregatedMetricResult> {\n if (!aggregationId || aggregationId.trim() === '') {\n throw new Error('Aggregation ID is required for aggregated scorecards');\n }\n\n const baseUrl = await this.getBaseUrl();\n const url = new URL(`${baseUrl}/aggregations/${aggregationId}`);\n\n try {\n const response = await this.fetchApi.fetch(url.toString());\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to fetch aggregated scorecards: ${response.status} ${response.statusText}. ${errorText}`,\n );\n }\n\n const data = await response.json();\n\n if (\n !data ||\n Array.isArray(data) ||\n typeof data !== 'object' ||\n !('result' in data) ||\n !('metadata' in data) ||\n !('id' in data) ||\n !('status' in data)\n ) {\n throw new TypeError(\n 'Invalid response format from aggregated scorecard API',\n );\n }\n\n return data;\n } catch (error) {\n if (error instanceof Error) {\n throw error;\n }\n throw new Error(\n `Unexpected error fetching aggregated scorecards: ${String(error)}`,\n );\n }\n }\n\n async getMetrics(options?: {\n metricIds?: string[];\n }): Promise<{ metrics: Metric[] }> {\n const { metricIds } = options || {};\n\n const isMetricIds =\n metricIds && Array.isArray(metricIds) && metricIds.length > 0;\n\n const baseUrl = await this.getBaseUrl();\n const url = new URL(`${baseUrl}/metrics`);\n\n if (isMetricIds) {\n url.searchParams.set('metricIds', metricIds.join(','));\n }\n\n try {\n const response = await this.fetchApi.fetch(url.toString());\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to fetch metric: ${response.status} ${response.statusText}. ${errorText}`,\n );\n }\n\n const data = await response.json();\n\n if (\n !data ||\n Array.isArray(data) ||\n typeof data !== 'object' ||\n !('metrics' in data) ||\n !Array.isArray(data.metrics)\n ) {\n throw new TypeError('Invalid response format from metrics API');\n }\n\n return data;\n } catch (error) {\n if (error instanceof Error) {\n throw error;\n }\n throw new Error(`Unexpected error fetching metric: ${String(error)}`);\n }\n }\n\n async getAggregatedScorecardEntities(\n options: GetAggregatedScorecardEntitiesOptions,\n ): Promise<EntityMetricDetailResponse> {\n const {\n metricId,\n page,\n pageSize,\n ownershipEntityRefs = [],\n orderBy = null,\n order = 'asc',\n } = options;\n\n if (!metricId) {\n throw new Error('Metric ID is required for aggregated scorecards');\n }\n\n const baseUrl = await this.getBaseUrl();\n const url = new URL(\n `${baseUrl}/metrics/${metricId}/catalog/aggregations/entities`,\n );\n if (page) {\n url.searchParams.append('page', page.toString());\n }\n if (pageSize) {\n url.searchParams.append('pageSize', pageSize.toString());\n }\n if (ownershipEntityRefs.length > 0) {\n for (const ownershipEntityRef of ownershipEntityRefs) {\n url.searchParams.append('owner', ownershipEntityRef);\n }\n }\n if (orderBy) {\n url.searchParams.append('sortBy', orderBy);\n url.searchParams.append('sortOrder', order);\n }\n\n try {\n const response = await this.fetchApi.fetch(url.toString());\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to fetch aggregated scorecards: ${response.status} ${response.statusText}. ${errorText}`,\n );\n }\n\n const data = await response.json();\n\n if (!data || Array.isArray(data) || typeof data !== 'object') {\n throw new TypeError(\n 'Invalid response format from aggregated scorecard API',\n );\n }\n\n return data;\n } catch (error) {\n if (error instanceof Error) {\n throw error;\n }\n throw new Error(\n `Unexpected error fetching aggregated scorecards: ${String(error)}`,\n );\n }\n }\n\n async getAggregationMetadata(\n aggregationId: string,\n ): Promise<AggregationMetadata> {\n if (!aggregationId || aggregationId.trim() === '') {\n throw new Error('Aggregation ID is required for aggregation metadata');\n }\n\n const baseUrl = await this.getBaseUrl();\n const url = new URL(`${baseUrl}/aggregations/${aggregationId}/metadata`);\n\n try {\n const response = await this.fetchApi.fetch(url.toString());\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to fetch aggregation metadata: ${response.status} ${response.statusText}. ${errorText}`,\n );\n }\n\n const data = await response.json();\n\n if (\n !data ||\n Array.isArray(data) ||\n typeof data !== 'object' ||\n !('title' in data) ||\n !('description' in data) ||\n !('type' in data) ||\n !('aggregationType' in data)\n ) {\n throw new TypeError(\n 'Invalid response format from aggregation metadata API',\n );\n }\n\n return data as AggregationMetadata;\n } catch (error) {\n if (error instanceof Error) {\n throw error;\n }\n throw new Error(\n `Unexpected error fetching aggregation metadata: ${String(error)}`,\n );\n }\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../src/api/index.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n createApiRef,\n FetchApi,\n DiscoveryApi,\n} from '@backstage/core-plugin-api';\nimport type {\n MetricResult,\n AggregatedMetricResult,\n AggregationMetadata,\n Metric,\n EntityMetricDetailResponse,\n} from '@red-hat-developer-hub/backstage-plugin-scorecard-common';\n\nimport type { GetAggregatedScorecardEntitiesOptions } from '../components/types';\n\nexport { ScorecardQueryProvider } from './ScorecardQueryProvider';\n\nimport type {\n ScorecardApi,\n ScorecardApiClientOptions,\n ScorecardOptions,\n} from './types';\n\nexport const scorecardApiRef = createApiRef<ScorecardApi>({\n id: 'plugin.scorecard.service',\n});\n\n/**\n * Client implementation for the Scorecard API.\n * @public\n */\nexport class ScorecardApiClient implements ScorecardApi {\n private readonly fetchApi: FetchApi;\n private readonly discoveryApi: DiscoveryApi;\n\n constructor(options: ScorecardApiClientOptions) {\n this.fetchApi = options.fetchApi;\n this.discoveryApi = options.discoveryApi;\n }\n\n async getBaseUrl(): Promise<string> {\n return await this.discoveryApi.getBaseUrl('scorecard');\n }\n\n async getScorecards({\n entity,\n metricIds,\n }: ScorecardOptions): Promise<MetricResult[]> {\n if (\n !entity?.kind ||\n !entity?.metadata?.namespace ||\n !entity?.metadata?.name\n ) {\n throw new Error(\n 'Entity missing required properties for scorecard lookup',\n );\n }\n\n const baseUrl = await this.getBaseUrl();\n const url = new URL(\n `${baseUrl}/metrics/catalog/${entity.kind}/${entity.metadata.namespace}/${entity.metadata.name}`,\n );\n\n if (metricIds) {\n url.searchParams.set('metricIds', metricIds.join(','));\n }\n\n try {\n const response = await this.fetchApi.fetch(url.toString());\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to fetch scorecards: ${response.status} ${response.statusText}. ${errorText}`,\n );\n }\n\n const data = await response.json();\n\n if (!Array.isArray(data)) {\n throw new Error('Invalid response format from scorecard API');\n }\n\n return data;\n } catch (error) {\n if (error instanceof Error) {\n throw error;\n }\n throw new Error(`Unexpected error fetching scorecards: ${String(error)}`);\n }\n }\n\n async getAggregatedScorecard(\n aggregationId: string,\n ): Promise<AggregatedMetricResult> {\n if (!aggregationId || aggregationId.trim() === '') {\n throw new Error('Aggregation ID is required for aggregated scorecards');\n }\n\n const baseUrl = await this.getBaseUrl();\n const url = new URL(`${baseUrl}/aggregations/${aggregationId}`);\n\n try {\n const response = await this.fetchApi.fetch(url.toString());\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to fetch aggregated scorecards: ${response.status} ${response.statusText}. ${errorText}`,\n );\n }\n\n const data = await response.json();\n\n if (\n !data ||\n Array.isArray(data) ||\n typeof data !== 'object' ||\n !('result' in data) ||\n !('metadata' in data) ||\n !('id' in data) ||\n !('status' in data)\n ) {\n throw new TypeError(\n 'Invalid response format from aggregated scorecard API',\n );\n }\n\n const resultRaw = data.result;\n if (\n resultRaw === null ||\n typeof resultRaw !== 'object' ||\n Array.isArray(resultRaw)\n ) {\n throw new TypeError(\n 'Invalid response format from aggregated scorecard API: result must be a non-null object',\n );\n }\n\n const requireFiniteNumber = (value: unknown, fieldName: string) => {\n const n = Number(value ?? 0);\n if (!Number.isFinite(n)) {\n throw new TypeError(\n `Invalid aggregated scorecard API response: ${fieldName} must be a finite number`,\n );\n }\n return n;\n };\n\n const resultRecord = resultRaw as Record<string, unknown>;\n const timestampValue = resultRecord.timestamp;\n let timestamp: string;\n if (typeof timestampValue === 'string') {\n timestamp = timestampValue;\n } else if (\n typeof timestampValue === 'number' &&\n Number.isFinite(timestampValue)\n ) {\n timestamp = String(timestampValue);\n } else if (typeof timestampValue === 'bigint') {\n timestamp = timestampValue.toString();\n } else if (timestampValue instanceof Date) {\n timestamp = timestampValue.toISOString();\n } else {\n timestamp = '';\n }\n\n return {\n ...data,\n result: {\n ...resultRecord,\n total: requireFiniteNumber(resultRecord.total, 'total'),\n entitiesConsidered: requireFiniteNumber(\n resultRecord.entitiesConsidered,\n 'entitiesConsidered',\n ),\n calculationErrorCount: requireFiniteNumber(\n resultRecord.calculationErrorCount,\n 'calculationErrorCount',\n ),\n timestamp,\n },\n } as AggregatedMetricResult;\n } catch (error) {\n if (error instanceof Error) {\n throw error;\n }\n throw new Error(\n `Unexpected error fetching aggregated scorecards: ${String(error)}`,\n );\n }\n }\n\n async getMetrics(options?: {\n metricIds?: string[];\n }): Promise<{ metrics: Metric[] }> {\n const { metricIds } = options || {};\n\n const isMetricIds =\n metricIds && Array.isArray(metricIds) && metricIds.length > 0;\n\n const baseUrl = await this.getBaseUrl();\n const url = new URL(`${baseUrl}/metrics`);\n\n if (isMetricIds) {\n url.searchParams.set('metricIds', metricIds.join(','));\n }\n\n try {\n const response = await this.fetchApi.fetch(url.toString());\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to fetch metric: ${response.status} ${response.statusText}. ${errorText}`,\n );\n }\n\n const data = await response.json();\n\n if (\n !data ||\n Array.isArray(data) ||\n typeof data !== 'object' ||\n !('metrics' in data) ||\n !Array.isArray(data.metrics)\n ) {\n throw new TypeError('Invalid response format from metrics API');\n }\n\n return data;\n } catch (error) {\n if (error instanceof Error) {\n throw error;\n }\n throw new Error(`Unexpected error fetching metric: ${String(error)}`);\n }\n }\n\n async getAggregatedScorecardEntities(\n options: GetAggregatedScorecardEntitiesOptions,\n ): Promise<EntityMetricDetailResponse> {\n const {\n metricId,\n page,\n pageSize,\n ownershipEntityRefs = [],\n orderBy = null,\n order = 'asc',\n } = options;\n\n if (!metricId) {\n throw new Error('Metric ID is required for aggregated scorecards');\n }\n\n const baseUrl = await this.getBaseUrl();\n const url = new URL(\n `${baseUrl}/metrics/${metricId}/catalog/aggregations/entities`,\n );\n if (page) {\n url.searchParams.append('page', page.toString());\n }\n if (pageSize) {\n url.searchParams.append('pageSize', pageSize.toString());\n }\n if (ownershipEntityRefs.length > 0) {\n for (const ownershipEntityRef of ownershipEntityRefs) {\n url.searchParams.append('owner', ownershipEntityRef);\n }\n }\n if (orderBy) {\n url.searchParams.append('sortBy', orderBy);\n url.searchParams.append('sortOrder', order);\n }\n\n try {\n const response = await this.fetchApi.fetch(url.toString());\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to fetch aggregated scorecards: ${response.status} ${response.statusText}. ${errorText}`,\n );\n }\n\n const data = await response.json();\n\n if (!data || Array.isArray(data) || typeof data !== 'object') {\n throw new TypeError(\n 'Invalid response format from aggregated scorecard API',\n );\n }\n\n return data;\n } catch (error) {\n if (error instanceof Error) {\n throw error;\n }\n throw new Error(\n `Unexpected error fetching aggregated scorecards: ${String(error)}`,\n );\n }\n }\n\n async getAggregationMetadata(\n aggregationId: string,\n ): Promise<AggregationMetadata> {\n if (!aggregationId || aggregationId.trim() === '') {\n throw new Error('Aggregation ID is required for aggregation metadata');\n }\n\n const baseUrl = await this.getBaseUrl();\n const url = new URL(`${baseUrl}/aggregations/${aggregationId}/metadata`);\n\n try {\n const response = await this.fetchApi.fetch(url.toString());\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to fetch aggregation metadata: ${response.status} ${response.statusText}. ${errorText}`,\n );\n }\n\n const data = await response.json();\n\n if (\n !data ||\n Array.isArray(data) ||\n typeof data !== 'object' ||\n !('title' in data) ||\n !('description' in data) ||\n !('type' in data) ||\n !('aggregationType' in data)\n ) {\n throw new TypeError(\n 'Invalid response format from aggregation metadata API',\n );\n }\n\n return data as AggregationMetadata;\n } catch (error) {\n if (error instanceof Error) {\n throw error;\n }\n throw new Error(\n `Unexpected error fetching aggregation metadata: ${String(error)}`,\n );\n }\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -76,7 +76,9 @@ const AverageCardComponent = ({
|
|
|
76
76
|
{
|
|
77
77
|
aggregationId,
|
|
78
78
|
scorecardId: scorecard.id,
|
|
79
|
-
entitiesCount: scorecard.result.total
|
|
79
|
+
entitiesCount: scorecard.result.total,
|
|
80
|
+
entitiesConsidered: scorecard.result.entitiesConsidered,
|
|
81
|
+
calculationErrorCount: scorecard.result.calculationErrorCount
|
|
80
82
|
}
|
|
81
83
|
) : null;
|
|
82
84
|
const info = showInfo ? /* @__PURE__ */ jsx(CardInfoButton, { timestamp: scorecard.result.timestamp }) : null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AverageCardComponent.esm.js","sources":["../../../../src/components/AggregatedMetricCards/AverageCard/AverageCardComponent.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useState } from 'react';\nimport type { MouseEvent } from 'react';\n\nimport { useTheme } from '@mui/material/styles';\n\nimport { CardWrapper } from '../../Common/CardWrapper';\nimport type { PieData } from '../../types';\nimport {\n getThresholdRuleColor,\n resolveStatusColor,\n SCORECARD_ERROR_STATE_COLOR,\n} from '../../../utils';\nimport { ResponsivePieChart } from '../../ScorecardHomepageSection/ResponsivePieChart';\nimport { CardInfoButton } from '../components/CardInfoButton';\nimport { CardSubheader } from '../components/CardSubheader';\nimport { CardChartContainer } from '../components/CardChartContainer';\nimport { CardTooltip } from '../components/CardTooltip';\nimport { LegendTooltipContent } from './LegendTooltipContent';\nimport { DonutChartTooltipContent } from './DonutChartTooltipContent';\nimport type { AverageCardComponentProps, TooltipPosition } from './types';\nimport { CardLegendContent } from '../components/CardLegendContent';\nimport { AverageCardPieCenterLabel } from './AverageCardPieCenterLabel';\nimport { formatPercentage } from '../../../utils/formatPercentage';\n\nconst AVERAGE_SCORE_SLICE = 'averageScoreFill';\nconst AVERAGE_REMAINDER_SLICE = 'averageScoreRemainder';\n\nfunction clampPercentForDonut(rawPercent: number): {\n fill: number;\n remainder: number;\n} {\n const fill = Math.min(100, Math.max(0, rawPercent));\n return { fill, remainder: 100 - fill };\n}\n\nexport const AverageCardComponent = ({\n scorecard,\n cardTitle,\n description,\n aggregationId,\n showSubheader = true,\n showInfo = true,\n dataTestId,\n}: AverageCardComponentProps) => {\n const theme = useTheme();\n\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n const [tooltipPosition, setTooltipPosition] =\n useState<TooltipPosition | null>(null);\n const [centerTooltipPosition, setCenterTooltipPosition] =\n useState<TooltipPosition | null>(null);\n\n const updateCenterTooltipPosition = (e: MouseEvent<SVGCircleElement>) => {\n const rect = e.currentTarget.getBoundingClientRect();\n setCenterTooltipPosition({\n left: rect.left + rect.width / 2,\n top: rect.top,\n });\n };\n\n const rawPercent = scorecard.result.averageScore * 100;\n const { fill: chartFillPercent, remainder: chartRemainderPercent } =\n clampPercentForDonut(rawPercent);\n\n const centerPercentLabel = `${formatPercentage(rawPercent)}%`;\n\n const arcResolvedColor = resolveStatusColor(\n theme,\n scorecard.result.aggregationChartDisplayColor,\n );\n\n const averagePieData: PieData[] = [\n {\n name: AVERAGE_SCORE_SLICE,\n value: chartFillPercent,\n color: arcResolvedColor,\n },\n {\n name: AVERAGE_REMAINDER_SLICE,\n value: chartRemainderPercent,\n color: theme.palette.grey[300],\n },\n ];\n\n const statusPieData: PieData[] =\n scorecard.result.values?.map(value => ({\n name: value.name,\n value: value.count,\n score: value.score,\n color: resolveStatusColor(\n theme,\n getThresholdRuleColor(scorecard.result.thresholds.rules, value.name) ??\n SCORECARD_ERROR_STATE_COLOR,\n ),\n })) ?? [];\n\n const subheader = showSubheader ? (\n <CardSubheader\n aggregationId={aggregationId}\n scorecardId={scorecard.id}\n entitiesCount={scorecard.result.total}\n />\n ) : null;\n\n const info = showInfo ? (\n <CardInfoButton timestamp={scorecard.result.timestamp} />\n ) : null;\n\n return (\n <CardWrapper\n title={cardTitle}\n dataTestId={dataTestId}\n subheader={subheader}\n description={description}\n info={info}\n >\n <CardChartContainer>\n <ResponsivePieChart\n pieData={averagePieData}\n LabelContent={props => (\n <AverageCardPieCenterLabel\n {...props}\n centerPercentLabel={centerPercentLabel}\n arcResolvedColor={arcResolvedColor}\n setActiveIndex={setActiveIndex}\n setTooltipPosition={setTooltipPosition}\n updateCenterTooltipPosition={updateCenterTooltipPosition}\n setCenterTooltipPosition={setCenterTooltipPosition}\n />\n )}\n legendContent={props => (\n <CardLegendContent\n {...props}\n activeIndex={activeIndex}\n setActiveIndex={setActiveIndex}\n setTooltipPosition={setTooltipPosition}\n pieData={statusPieData}\n />\n )}\n />\n\n {centerTooltipPosition && (\n <CardTooltip\n tooltipPosition={centerTooltipPosition}\n pieData={averagePieData}\n payload={[\n {\n name: AVERAGE_SCORE_SLICE,\n value: 1,\n payload: averagePieData[0],\n },\n ]}\n customContent={\n <DonutChartTooltipContent\n weightedSum={scorecard.result.averageWeightedSum}\n maxPossible={scorecard.result.averageMaxPossible}\n />\n }\n />\n )}\n\n {activeIndex !== null &&\n tooltipPosition &&\n statusPieData[activeIndex] && (\n <CardTooltip\n tooltipPosition={tooltipPosition}\n pieData={statusPieData}\n payload={[\n {\n name: statusPieData[activeIndex].name,\n value: statusPieData[activeIndex].value || 1,\n payload: statusPieData[activeIndex],\n },\n ]}\n customContent={\n <LegendTooltipContent\n row={statusPieData[activeIndex]}\n maxPossible={scorecard.result.averageMaxPossible}\n />\n }\n />\n )}\n </CardChartContainer>\n </CardWrapper>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AverageCardComponent.esm.js","sources":["../../../../src/components/AggregatedMetricCards/AverageCard/AverageCardComponent.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useState } from 'react';\nimport type { MouseEvent } from 'react';\n\nimport { useTheme } from '@mui/material/styles';\n\nimport { CardWrapper } from '../../Common/CardWrapper';\nimport type { PieData } from '../../types';\nimport {\n getThresholdRuleColor,\n resolveStatusColor,\n SCORECARD_ERROR_STATE_COLOR,\n} from '../../../utils';\nimport { ResponsivePieChart } from '../../ScorecardHomepageSection/ResponsivePieChart';\nimport { CardInfoButton } from '../components/CardInfoButton';\nimport { CardSubheader } from '../components/CardSubheader';\nimport { CardChartContainer } from '../components/CardChartContainer';\nimport { CardTooltip } from '../components/CardTooltip';\nimport { LegendTooltipContent } from './LegendTooltipContent';\nimport { DonutChartTooltipContent } from './DonutChartTooltipContent';\nimport type { AverageCardComponentProps, TooltipPosition } from './types';\nimport { CardLegendContent } from '../components/CardLegendContent';\nimport { AverageCardPieCenterLabel } from './AverageCardPieCenterLabel';\nimport { formatPercentage } from '../../../utils/formatPercentage';\n\nconst AVERAGE_SCORE_SLICE = 'averageScoreFill';\nconst AVERAGE_REMAINDER_SLICE = 'averageScoreRemainder';\n\nfunction clampPercentForDonut(rawPercent: number): {\n fill: number;\n remainder: number;\n} {\n const fill = Math.min(100, Math.max(0, rawPercent));\n return { fill, remainder: 100 - fill };\n}\n\nexport const AverageCardComponent = ({\n scorecard,\n cardTitle,\n description,\n aggregationId,\n showSubheader = true,\n showInfo = true,\n dataTestId,\n}: AverageCardComponentProps) => {\n const theme = useTheme();\n\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n const [tooltipPosition, setTooltipPosition] =\n useState<TooltipPosition | null>(null);\n const [centerTooltipPosition, setCenterTooltipPosition] =\n useState<TooltipPosition | null>(null);\n\n const updateCenterTooltipPosition = (e: MouseEvent<SVGCircleElement>) => {\n const rect = e.currentTarget.getBoundingClientRect();\n setCenterTooltipPosition({\n left: rect.left + rect.width / 2,\n top: rect.top,\n });\n };\n\n const rawPercent = scorecard.result.averageScore * 100;\n const { fill: chartFillPercent, remainder: chartRemainderPercent } =\n clampPercentForDonut(rawPercent);\n\n const centerPercentLabel = `${formatPercentage(rawPercent)}%`;\n\n const arcResolvedColor = resolveStatusColor(\n theme,\n scorecard.result.aggregationChartDisplayColor,\n );\n\n const averagePieData: PieData[] = [\n {\n name: AVERAGE_SCORE_SLICE,\n value: chartFillPercent,\n color: arcResolvedColor,\n },\n {\n name: AVERAGE_REMAINDER_SLICE,\n value: chartRemainderPercent,\n color: theme.palette.grey[300],\n },\n ];\n\n const statusPieData: PieData[] =\n scorecard.result.values?.map(value => ({\n name: value.name,\n value: value.count,\n score: value.score,\n color: resolveStatusColor(\n theme,\n getThresholdRuleColor(scorecard.result.thresholds.rules, value.name) ??\n SCORECARD_ERROR_STATE_COLOR,\n ),\n })) ?? [];\n\n const subheader = showSubheader ? (\n <CardSubheader\n aggregationId={aggregationId}\n scorecardId={scorecard.id}\n entitiesCount={scorecard.result.total}\n entitiesConsidered={scorecard.result.entitiesConsidered}\n calculationErrorCount={scorecard.result.calculationErrorCount}\n />\n ) : null;\n\n const info = showInfo ? (\n <CardInfoButton timestamp={scorecard.result.timestamp} />\n ) : null;\n\n return (\n <CardWrapper\n title={cardTitle}\n dataTestId={dataTestId}\n subheader={subheader}\n description={description}\n info={info}\n >\n <CardChartContainer>\n <ResponsivePieChart\n pieData={averagePieData}\n LabelContent={props => (\n <AverageCardPieCenterLabel\n {...props}\n centerPercentLabel={centerPercentLabel}\n arcResolvedColor={arcResolvedColor}\n setActiveIndex={setActiveIndex}\n setTooltipPosition={setTooltipPosition}\n updateCenterTooltipPosition={updateCenterTooltipPosition}\n setCenterTooltipPosition={setCenterTooltipPosition}\n />\n )}\n legendContent={props => (\n <CardLegendContent\n {...props}\n activeIndex={activeIndex}\n setActiveIndex={setActiveIndex}\n setTooltipPosition={setTooltipPosition}\n pieData={statusPieData}\n />\n )}\n />\n\n {centerTooltipPosition && (\n <CardTooltip\n tooltipPosition={centerTooltipPosition}\n pieData={averagePieData}\n payload={[\n {\n name: AVERAGE_SCORE_SLICE,\n value: 1,\n payload: averagePieData[0],\n },\n ]}\n customContent={\n <DonutChartTooltipContent\n weightedSum={scorecard.result.averageWeightedSum}\n maxPossible={scorecard.result.averageMaxPossible}\n />\n }\n />\n )}\n\n {activeIndex !== null &&\n tooltipPosition &&\n statusPieData[activeIndex] && (\n <CardTooltip\n tooltipPosition={tooltipPosition}\n pieData={statusPieData}\n payload={[\n {\n name: statusPieData[activeIndex].name,\n value: statusPieData[activeIndex].value || 1,\n payload: statusPieData[activeIndex],\n },\n ]}\n customContent={\n <LegendTooltipContent\n row={statusPieData[activeIndex]}\n maxPossible={scorecard.result.averageMaxPossible}\n />\n }\n />\n )}\n </CardChartContainer>\n </CardWrapper>\n );\n};\n"],"names":[],"mappings":"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"}
|
package/dist/components/AggregatedMetricCards/StatusGroupedCard/StatusGroupedCardComponent.esm.js
CHANGED
|
@@ -40,7 +40,9 @@ const StatusGroupedCardComponent = ({
|
|
|
40
40
|
{
|
|
41
41
|
aggregationId,
|
|
42
42
|
scorecardId,
|
|
43
|
-
entitiesCount: result.total
|
|
43
|
+
entitiesCount: result.total,
|
|
44
|
+
entitiesConsidered: result.entitiesConsidered,
|
|
45
|
+
calculationErrorCount: result.calculationErrorCount
|
|
44
46
|
}
|
|
45
47
|
) : null;
|
|
46
48
|
const info = showInfo ? /* @__PURE__ */ jsx(CardInfoButton, { timestamp: result.timestamp }) : null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusGroupedCardComponent.esm.js","sources":["../../../../src/components/AggregatedMetricCards/StatusGroupedCard/StatusGroupedCardComponent.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useTheme } from '@mui/material/styles';\nimport { useState } from 'react';\nimport { PieData } from '../../types';\nimport {\n getThresholdRuleColor,\n SCORECARD_ERROR_STATE_COLOR,\n resolveStatusColor,\n} from '../../../utils';\nimport { CardWrapper } from '../../Common/CardWrapper';\nimport { CardInfoButton } from '../components/CardInfoButton';\nimport { ResponsivePieChart } from '../../ScorecardHomepageSection/ResponsivePieChart';\nimport { CardLegendContent } from '../components/CardLegendContent';\nimport { CardPieTooltipContent } from '../components/CardPieTooltipContent';\nimport { CardChartContainer } from '../components/CardChartContainer';\nimport { CardSubheader } from '../components/CardSubheader';\nimport { CardTooltip } from '../components/CardTooltip';\nimport { StatusGroupedCardComponentProps } from './types';\n\nexport const StatusGroupedCardComponent = ({\n scorecard,\n cardTitle,\n description,\n aggregationId,\n showSubheader = true,\n showInfo = true,\n dataTestId,\n}: StatusGroupedCardComponentProps) => {\n const theme = useTheme();\n\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n const [tooltipPosition, setTooltipPosition] = useState<{\n left: number;\n top: number;\n } | null>(null);\n\n const { id: scorecardId, result } = scorecard;\n\n const pieData: PieData[] =\n result.values?.map(value => ({\n name: value.name,\n value: value.count,\n color: resolveStatusColor(\n theme,\n getThresholdRuleColor(result.thresholds.rules, value.name) ??\n SCORECARD_ERROR_STATE_COLOR,\n ),\n })) ?? [];\n\n const subheader = showSubheader ? (\n <CardSubheader\n aggregationId={aggregationId}\n scorecardId={scorecardId}\n entitiesCount={result.total}\n />\n ) : null;\n\n const info = showInfo ? (\n <CardInfoButton timestamp={result.timestamp} />\n ) : null;\n\n return (\n <CardWrapper\n title={cardTitle}\n dataTestId={dataTestId}\n subheader={subheader}\n description={description}\n info={info}\n >\n <CardChartContainer>\n <ResponsivePieChart\n pieData={pieData}\n legendContent={props => (\n <CardLegendContent\n {...props}\n activeIndex={activeIndex}\n setActiveIndex={setActiveIndex}\n setTooltipPosition={setTooltipPosition}\n pieData={pieData}\n />\n )}\n tooltipContent={({ active, payload }) => (\n <CardPieTooltipContent\n active={active}\n payload={payload}\n pieData={pieData}\n />\n )}\n />\n\n {activeIndex !== null && tooltipPosition && (\n <CardTooltip\n tooltipPosition={tooltipPosition}\n pieData={pieData}\n payload={[\n {\n name: pieData[activeIndex].name,\n value: pieData[activeIndex].value,\n payload: pieData[activeIndex],\n },\n ]}\n />\n )}\n </CardChartContainer>\n </CardWrapper>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAkCO,MAAM,6BAA6B,CAAC;AAAA,EACzC,SAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAgB,GAAA,IAAA;AAAA,EAChB,QAAW,GAAA,IAAA;AAAA,EACX;AACF,CAAuC,KAAA;AACrC,EAAA,MAAM,QAAQ,QAAS,EAAA;AAEvB,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAwB,IAAI,CAAA;AAClE,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,SAGpC,IAAI,CAAA;AAEd,EAAA,MAAM,EAAE,EAAA,EAAI,WAAa,EAAA,MAAA,EAAW,GAAA,SAAA;AAEpC,EAAA,MAAM,OACJ,GAAA,MAAA,CAAO,MAAQ,EAAA,GAAA,CAAI,CAAU,KAAA,MAAA;AAAA,IAC3B,MAAM,KAAM,CAAA,IAAA;AAAA,IACZ,OAAO,KAAM,CAAA,KAAA;AAAA,IACb,KAAO,EAAA,kBAAA;AAAA,MACL,KAAA;AAAA,MACA,sBAAsB,MAAO,CAAA,UAAA,CAAW,KAAO,EAAA,KAAA,CAAM,IAAI,CACvD,IAAA;AAAA;AACJ,GACF,CAAE,KAAK,EAAC;AAEV,EAAA,MAAM,YAAY,aAChB,mBAAA,GAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,aAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAe,MAAO,CAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"StatusGroupedCardComponent.esm.js","sources":["../../../../src/components/AggregatedMetricCards/StatusGroupedCard/StatusGroupedCardComponent.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useTheme } from '@mui/material/styles';\nimport { useState } from 'react';\nimport { PieData } from '../../types';\nimport {\n getThresholdRuleColor,\n SCORECARD_ERROR_STATE_COLOR,\n resolveStatusColor,\n} from '../../../utils';\nimport { CardWrapper } from '../../Common/CardWrapper';\nimport { CardInfoButton } from '../components/CardInfoButton';\nimport { ResponsivePieChart } from '../../ScorecardHomepageSection/ResponsivePieChart';\nimport { CardLegendContent } from '../components/CardLegendContent';\nimport { CardPieTooltipContent } from '../components/CardPieTooltipContent';\nimport { CardChartContainer } from '../components/CardChartContainer';\nimport { CardSubheader } from '../components/CardSubheader';\nimport { CardTooltip } from '../components/CardTooltip';\nimport { StatusGroupedCardComponentProps } from './types';\n\nexport const StatusGroupedCardComponent = ({\n scorecard,\n cardTitle,\n description,\n aggregationId,\n showSubheader = true,\n showInfo = true,\n dataTestId,\n}: StatusGroupedCardComponentProps) => {\n const theme = useTheme();\n\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n const [tooltipPosition, setTooltipPosition] = useState<{\n left: number;\n top: number;\n } | null>(null);\n\n const { id: scorecardId, result } = scorecard;\n\n const pieData: PieData[] =\n result.values?.map(value => ({\n name: value.name,\n value: value.count,\n color: resolveStatusColor(\n theme,\n getThresholdRuleColor(result.thresholds.rules, value.name) ??\n SCORECARD_ERROR_STATE_COLOR,\n ),\n })) ?? [];\n\n const subheader = showSubheader ? (\n <CardSubheader\n aggregationId={aggregationId}\n scorecardId={scorecardId}\n entitiesCount={result.total}\n entitiesConsidered={result.entitiesConsidered}\n calculationErrorCount={result.calculationErrorCount}\n />\n ) : null;\n\n const info = showInfo ? (\n <CardInfoButton timestamp={result.timestamp} />\n ) : null;\n\n return (\n <CardWrapper\n title={cardTitle}\n dataTestId={dataTestId}\n subheader={subheader}\n description={description}\n info={info}\n >\n <CardChartContainer>\n <ResponsivePieChart\n pieData={pieData}\n legendContent={props => (\n <CardLegendContent\n {...props}\n activeIndex={activeIndex}\n setActiveIndex={setActiveIndex}\n setTooltipPosition={setTooltipPosition}\n pieData={pieData}\n />\n )}\n tooltipContent={({ active, payload }) => (\n <CardPieTooltipContent\n active={active}\n payload={payload}\n pieData={pieData}\n />\n )}\n />\n\n {activeIndex !== null && tooltipPosition && (\n <CardTooltip\n tooltipPosition={tooltipPosition}\n pieData={pieData}\n payload={[\n {\n name: pieData[activeIndex].name,\n value: pieData[activeIndex].value,\n payload: pieData[activeIndex],\n },\n ]}\n />\n )}\n </CardChartContainer>\n </CardWrapper>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAkCO,MAAM,6BAA6B,CAAC;AAAA,EACzC,SAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAgB,GAAA,IAAA;AAAA,EAChB,QAAW,GAAA,IAAA;AAAA,EACX;AACF,CAAuC,KAAA;AACrC,EAAA,MAAM,QAAQ,QAAS,EAAA;AAEvB,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAwB,IAAI,CAAA;AAClE,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,SAGpC,IAAI,CAAA;AAEd,EAAA,MAAM,EAAE,EAAA,EAAI,WAAa,EAAA,MAAA,EAAW,GAAA,SAAA;AAEpC,EAAA,MAAM,OACJ,GAAA,MAAA,CAAO,MAAQ,EAAA,GAAA,CAAI,CAAU,KAAA,MAAA;AAAA,IAC3B,MAAM,KAAM,CAAA,IAAA;AAAA,IACZ,OAAO,KAAM,CAAA,KAAA;AAAA,IACb,KAAO,EAAA,kBAAA;AAAA,MACL,KAAA;AAAA,MACA,sBAAsB,MAAO,CAAA,UAAA,CAAW,KAAO,EAAA,KAAA,CAAM,IAAI,CACvD,IAAA;AAAA;AACJ,GACF,CAAE,KAAK,EAAC;AAEV,EAAA,MAAM,YAAY,aAChB,mBAAA,GAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,aAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAe,MAAO,CAAA,KAAA;AAAA,MACtB,oBAAoB,MAAO,CAAA,kBAAA;AAAA,MAC3B,uBAAuB,MAAO,CAAA;AAAA;AAAA,GAE9B,GAAA,IAAA;AAEJ,EAAA,MAAM,OAAO,QACX,mBAAA,GAAA,CAAC,kBAAe,SAAW,EAAA,MAAA,CAAO,WAAW,CAC3C,GAAA,IAAA;AAEJ,EACE,uBAAA,GAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA,SAAA;AAAA,MACP,UAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,IAAA;AAAA,MAEA,+BAAC,kBACC,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,kBAAA;AAAA,UAAA;AAAA,YACC,OAAA;AAAA,YACA,eAAe,CACb,KAAA,qBAAA,GAAA;AAAA,cAAC,iBAAA;AAAA,cAAA;AAAA,gBACE,GAAG,KAAA;AAAA,gBACJ,WAAA;AAAA,gBACA,cAAA;AAAA,gBACA,kBAAA;AAAA,gBACA;AAAA;AAAA,aACF;AAAA,YAEF,cAAgB,EAAA,CAAC,EAAE,MAAA,EAAQ,SACzB,qBAAA,GAAA;AAAA,cAAC,qBAAA;AAAA,cAAA;AAAA,gBACC,MAAA;AAAA,gBACA,OAAA;AAAA,gBACA;AAAA;AAAA;AACF;AAAA,SAEJ;AAAA,QAEC,WAAA,KAAgB,QAAQ,eACvB,oBAAA,GAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,eAAA;AAAA,YACA,OAAA;AAAA,YACA,OAAS,EAAA;AAAA,cACP;AAAA,gBACE,IAAA,EAAM,OAAQ,CAAA,WAAW,CAAE,CAAA,IAAA;AAAA,gBAC3B,KAAA,EAAO,OAAQ,CAAA,WAAW,CAAE,CAAA,KAAA;AAAA,gBAC5B,OAAA,EAAS,QAAQ,WAAW;AAAA;AAC9B;AACF;AAAA;AACF,OAEJ,EAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import Box from '@mui/material/Box';
|
|
2
3
|
import Tooltip from '@mui/material/Tooltip';
|
|
3
4
|
import { Link } from '@backstage/core-components';
|
|
4
5
|
import { useTranslation } from '../../../hooks/useTranslation.esm.js';
|
|
@@ -6,27 +7,40 @@ import { useTranslation } from '../../../hooks/useTranslation.esm.js';
|
|
|
6
7
|
const CardSubheader = ({
|
|
7
8
|
aggregationId,
|
|
8
9
|
scorecardId,
|
|
9
|
-
entitiesCount
|
|
10
|
+
entitiesCount,
|
|
11
|
+
entitiesConsidered = entitiesCount,
|
|
12
|
+
calculationErrorCount = 0
|
|
10
13
|
}) => {
|
|
11
14
|
const { t } = useTranslation();
|
|
12
|
-
|
|
15
|
+
const totalEntities = Math.max(0, entitiesConsidered);
|
|
16
|
+
const inferredErrorCount = Math.max(0, totalEntities - entitiesCount);
|
|
17
|
+
const effectiveErrorCount = Math.max(
|
|
18
|
+
calculationErrorCount,
|
|
19
|
+
inferredErrorCount
|
|
20
|
+
);
|
|
21
|
+
const hasCalculationErrors = effectiveErrorCount > 0;
|
|
22
|
+
const healthyEntitiesCount = Math.max(0, totalEntities - effectiveErrorCount);
|
|
23
|
+
const ratioTemplate = t("metric.homepageEntityHealthRatio");
|
|
24
|
+
const entitiesLabel = hasCalculationErrors ? ratioTemplate.replace("{{healthy}}", String(healthyEntitiesCount)).replace("{{total}}", String(totalEntities)) : t("thresholds.entities", { count: entitiesCount });
|
|
25
|
+
const linkNode = /* @__PURE__ */ jsx(
|
|
26
|
+
Link,
|
|
27
|
+
{
|
|
28
|
+
to: `/scorecard/aggregations/${encodeURIComponent(
|
|
29
|
+
aggregationId
|
|
30
|
+
)}/metrics/${encodeURIComponent(scorecardId)}`,
|
|
31
|
+
children: entitiesLabel
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
return /* @__PURE__ */ jsx(Box, { sx: { display: "inline-flex", alignItems: "center" }, children: hasCalculationErrors ? /* @__PURE__ */ jsx(
|
|
13
35
|
Tooltip,
|
|
14
36
|
{
|
|
15
37
|
enterDelay: 1500,
|
|
16
38
|
title: t("metric.someEntitiesNotReportingValues"),
|
|
17
39
|
arrow: true,
|
|
18
40
|
placement: "right",
|
|
19
|
-
children:
|
|
20
|
-
Link,
|
|
21
|
-
{
|
|
22
|
-
to: `/scorecard/aggregations/${encodeURIComponent(
|
|
23
|
-
aggregationId
|
|
24
|
-
)}/metrics/${encodeURIComponent(scorecardId)}`,
|
|
25
|
-
children: t("thresholds.entities", { count: entitiesCount })
|
|
26
|
-
}
|
|
27
|
-
)
|
|
41
|
+
children: linkNode
|
|
28
42
|
}
|
|
29
|
-
);
|
|
43
|
+
) : linkNode });
|
|
30
44
|
};
|
|
31
45
|
|
|
32
46
|
export { CardSubheader };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardSubheader.esm.js","sources":["../../../../src/components/AggregatedMetricCards/components/CardSubheader.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Tooltip from '@mui/material/Tooltip';\nimport { Link } from '@backstage/core-components';\nimport { useTranslation } from '../../../hooks/useTranslation';\n\ntype CardSubheaderProps = {\n aggregationId: string;\n scorecardId: string;\n entitiesCount: number;\n};\n\nexport const CardSubheader = ({\n aggregationId,\n scorecardId,\n entitiesCount,\n}: CardSubheaderProps) => {\n const { t } = useTranslation();\n\n
|
|
1
|
+
{"version":3,"file":"CardSubheader.esm.js","sources":["../../../../src/components/AggregatedMetricCards/components/CardSubheader.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Box from '@mui/material/Box';\nimport Tooltip from '@mui/material/Tooltip';\nimport { Link } from '@backstage/core-components';\nimport { useTranslation } from '../../../hooks/useTranslation';\n\ntype CardSubheaderProps = {\n aggregationId: string;\n scorecardId: string;\n entitiesCount: number;\n entitiesConsidered?: number;\n calculationErrorCount?: number;\n};\n\nexport const CardSubheader = ({\n aggregationId,\n scorecardId,\n entitiesCount,\n entitiesConsidered = entitiesCount,\n calculationErrorCount = 0,\n}: CardSubheaderProps) => {\n const { t } = useTranslation();\n const totalEntities = Math.max(0, entitiesConsidered);\n const inferredErrorCount = Math.max(0, totalEntities - entitiesCount);\n const effectiveErrorCount = Math.max(\n calculationErrorCount,\n inferredErrorCount,\n );\n const hasCalculationErrors = effectiveErrorCount > 0;\n const healthyEntitiesCount = Math.max(0, totalEntities - effectiveErrorCount);\n const ratioTemplate = t('metric.homepageEntityHealthRatio');\n const entitiesLabel = hasCalculationErrors\n ? ratioTemplate\n .replace('{{healthy}}', String(healthyEntitiesCount))\n .replace('{{total}}', String(totalEntities))\n : t('thresholds.entities', { count: entitiesCount });\n\n const linkNode = (\n <Link\n to={`/scorecard/aggregations/${encodeURIComponent(\n aggregationId,\n )}/metrics/${encodeURIComponent(scorecardId)}`}\n >\n {entitiesLabel}\n </Link>\n );\n\n return (\n <Box sx={{ display: 'inline-flex', alignItems: 'center' }}>\n {hasCalculationErrors ? (\n <Tooltip\n enterDelay={1500}\n title={t('metric.someEntitiesNotReportingValues')}\n arrow\n placement=\"right\"\n >\n {linkNode}\n </Tooltip>\n ) : (\n linkNode\n )}\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;AA6BO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,aAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAqB,GAAA,aAAA;AAAA,EACrB,qBAAwB,GAAA;AAC1B,CAA0B,KAAA;AACxB,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAC7B,EAAA,MAAM,aAAgB,GAAA,IAAA,CAAK,GAAI,CAAA,CAAA,EAAG,kBAAkB,CAAA;AACpD,EAAA,MAAM,kBAAqB,GAAA,IAAA,CAAK,GAAI,CAAA,CAAA,EAAG,gBAAgB,aAAa,CAAA;AACpE,EAAA,MAAM,sBAAsB,IAAK,CAAA,GAAA;AAAA,IAC/B,qBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,uBAAuB,mBAAsB,GAAA,CAAA;AACnD,EAAA,MAAM,oBAAuB,GAAA,IAAA,CAAK,GAAI,CAAA,CAAA,EAAG,gBAAgB,mBAAmB,CAAA;AAC5E,EAAM,MAAA,aAAA,GAAgB,EAAE,kCAAkC,CAAA;AAC1D,EAAM,MAAA,aAAA,GAAgB,uBAClB,aACG,CAAA,OAAA,CAAQ,eAAe,MAAO,CAAA,oBAAoB,CAAC,CACnD,CAAA,OAAA,CAAQ,aAAa,MAAO,CAAA,aAAa,CAAC,CAC7C,GAAA,CAAA,CAAE,uBAAuB,EAAE,KAAA,EAAO,eAAe,CAAA;AAErD,EAAA,MAAM,QACJ,mBAAA,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,IAAI,CAA2B,wBAAA,EAAA,kBAAA;AAAA,QAC7B;AAAA,OACD,CAAA,SAAA,EAAY,kBAAmB,CAAA,WAAW,CAAC,CAAA,CAAA;AAAA,MAE3C,QAAA,EAAA;AAAA;AAAA,GACH;AAGF,EACE,uBAAA,GAAA,CAAC,OAAI,EAAI,EAAA,EAAE,SAAS,aAAe,EAAA,UAAA,EAAY,QAAS,EAAA,EACrD,QACC,EAAA,oBAAA,mBAAA,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,UAAY,EAAA,IAAA;AAAA,MACZ,KAAA,EAAO,EAAE,uCAAuC,CAAA;AAAA,MAChD,KAAK,EAAA,IAAA;AAAA,MACL,SAAU,EAAA,OAAA;AAAA,MAET,QAAA,EAAA;AAAA;AAAA,MAGH,QAEJ,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -9,6 +9,10 @@ import { useMetricDisplayLabels } from '../../hooks/useMetricDisplayLabels.esm.j
|
|
|
9
9
|
import { CardLoading } from '../Common/CardLoading.esm.js';
|
|
10
10
|
import { ScorecardQueryProvider } from '../../api/ScorecardQueryProvider.esm.js';
|
|
11
11
|
|
|
12
|
+
function toSafeFiniteNumber(value) {
|
|
13
|
+
const n = Number(value ?? 0);
|
|
14
|
+
return Number.isFinite(n) ? n : 0;
|
|
15
|
+
}
|
|
12
16
|
const ScorecardHomepageCard = ({
|
|
13
17
|
metricId,
|
|
14
18
|
aggregationId,
|
|
@@ -46,7 +50,14 @@ const ScorecardHomepageCard = ({
|
|
|
46
50
|
if (!data) {
|
|
47
51
|
return null;
|
|
48
52
|
}
|
|
49
|
-
|
|
53
|
+
const result = data.result;
|
|
54
|
+
const total = toSafeFiniteNumber(result.total);
|
|
55
|
+
const calculationErrorCount = toSafeFiniteNumber(
|
|
56
|
+
result.calculationErrorCount
|
|
57
|
+
);
|
|
58
|
+
const entitiesConsidered = toSafeFiniteNumber(result.entitiesConsidered);
|
|
59
|
+
const hasNoRenderableAggregation = total === 0 && calculationErrorCount === 0 && entitiesConsidered === 0;
|
|
60
|
+
if (hasNoRenderableAggregation) {
|
|
50
61
|
return /* @__PURE__ */ jsx(
|
|
51
62
|
EmptyStatePanel,
|
|
52
63
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScorecardHomepageCard.esm.js","sources":["../../../src/components/ScorecardHomepageSection/ScorecardHomepageCard.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ScorecardQueryProvider } from '../../api';\nimport { AggregatedMetricCard } from '../AggregatedMetricCards/AggregatedMetricCard';\nimport { useAggregatedScorecard } from '../../hooks/useAggregatedScorecard';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { ErrorStatePanel } from './ErrorStatePanel';\nimport { EmptyStatePanel } from './EmptyStatePanel';\nimport { Metric } from '@red-hat-developer-hub/backstage-plugin-scorecard-common';\nimport { useMetricDisplayLabels } from '../../hooks/useMetricDisplayLabels';\nimport { CardLoading } from '../Common/CardLoading';\n\nexport const ScorecardHomepageCard = ({\n metricId,\n aggregationId,\n showSubheader = true,\n showInfo = true,\n}: {\n metricId?: string;\n aggregationId?: string;\n showSubheader?: boolean;\n showInfo?: boolean;\n}) => {\n const { t } = useTranslation();\n\n // Deprecated logic to support both metricId and aggregationId. Only aggregationId will be used in the future.\n const resolvedScorecardId = aggregationId || metricId || '';\n\n const { data, isLoading, error } = useAggregatedScorecard({\n aggregationId: resolvedScorecardId,\n });\n\n const aggregatedMetricDetails = data\n ? ({\n id: resolvedScorecardId,\n title: data.metadata.title,\n description: data.metadata.description,\n } as Pick<Metric, 'id' | 'title' | 'description'>)\n : undefined;\n\n const { title, description } = useMetricDisplayLabels(\n aggregatedMetricDetails,\n );\n\n const cardDataTestId = `scorecard-homepage-card-${resolvedScorecardId}`;\n\n if (isLoading) {\n return <CardLoading dataTestId={cardDataTestId} />;\n }\n\n if (error) {\n return (\n <ErrorStatePanel\n error={error}\n showSubheader={showSubheader}\n aggregationId={resolvedScorecardId}\n cardDataTestId={cardDataTestId}\n />\n );\n }\n\n if (!data) {\n return null;\n }\n\n
|
|
1
|
+
{"version":3,"file":"ScorecardHomepageCard.esm.js","sources":["../../../src/components/ScorecardHomepageSection/ScorecardHomepageCard.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ScorecardQueryProvider } from '../../api';\nimport { AggregatedMetricCard } from '../AggregatedMetricCards/AggregatedMetricCard';\nimport { useAggregatedScorecard } from '../../hooks/useAggregatedScorecard';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { ErrorStatePanel } from './ErrorStatePanel';\nimport { EmptyStatePanel } from './EmptyStatePanel';\nimport { Metric } from '@red-hat-developer-hub/backstage-plugin-scorecard-common';\nimport { useMetricDisplayLabels } from '../../hooks/useMetricDisplayLabels';\nimport { CardLoading } from '../Common/CardLoading';\n\n/** Coerces unknown/missing values to a finite number for safe UI math (NaN → 0). */\nfunction toSafeFiniteNumber(value: unknown): number {\n const n = Number(value ?? 0);\n return Number.isFinite(n) ? n : 0;\n}\n\nexport const ScorecardHomepageCard = ({\n metricId,\n aggregationId,\n showSubheader = true,\n showInfo = true,\n}: {\n metricId?: string;\n aggregationId?: string;\n showSubheader?: boolean;\n showInfo?: boolean;\n}) => {\n const { t } = useTranslation();\n\n // Deprecated logic to support both metricId and aggregationId. Only aggregationId will be used in the future.\n const resolvedScorecardId = aggregationId || metricId || '';\n\n const { data, isLoading, error } = useAggregatedScorecard({\n aggregationId: resolvedScorecardId,\n });\n\n const aggregatedMetricDetails = data\n ? ({\n id: resolvedScorecardId,\n title: data.metadata.title,\n description: data.metadata.description,\n } as Pick<Metric, 'id' | 'title' | 'description'>)\n : undefined;\n\n const { title, description } = useMetricDisplayLabels(\n aggregatedMetricDetails,\n );\n\n const cardDataTestId = `scorecard-homepage-card-${resolvedScorecardId}`;\n\n if (isLoading) {\n return <CardLoading dataTestId={cardDataTestId} />;\n }\n\n if (error) {\n return (\n <ErrorStatePanel\n error={error}\n showSubheader={showSubheader}\n aggregationId={resolvedScorecardId}\n cardDataTestId={cardDataTestId}\n />\n );\n }\n\n if (!data) {\n return null;\n }\n\n const result = data.result;\n const total = toSafeFiniteNumber(result.total);\n const calculationErrorCount = toSafeFiniteNumber(\n result.calculationErrorCount,\n );\n const entitiesConsidered = toSafeFiniteNumber(result.entitiesConsidered);\n const hasNoRenderableAggregation =\n total === 0 && calculationErrorCount === 0 && entitiesConsidered === 0;\n\n if (hasNoRenderableAggregation) {\n return (\n <EmptyStatePanel\n showSubheader={showSubheader}\n cardTitle={title}\n cardDescription={description}\n label={t('errors.noDataFound')}\n tooltipContent={t('errors.noDataFoundMessage')}\n dataTestId={cardDataTestId}\n />\n );\n }\n\n return (\n <AggregatedMetricCard\n key={data.id}\n showSubheader={showSubheader}\n showInfo={showInfo}\n cardTitle={title}\n description={description}\n scorecard={data}\n aggregationId={resolvedScorecardId}\n dataTestId={cardDataTestId}\n />\n );\n};\n\n/**\n * ScorecardHomepageCard wrapped with QueryClientProvider so it works\n * when rendered outside a tree that already has a provider (e.g. on the homepage).\n */\nexport const ScorecardHomepageCardWithProvider = (props: {\n metricId?: string;\n aggregationId?: string;\n showSubheader?: boolean;\n showInfo?: boolean;\n}) => (\n <ScorecardQueryProvider>\n <ScorecardHomepageCard {...props} />\n </ScorecardQueryProvider>\n);\n"],"names":[],"mappings":";;;;;;;;;;;AA2BA,SAAS,mBAAmB,KAAwB,EAAA;AAClD,EAAM,MAAA,CAAA,GAAI,MAAO,CAAA,KAAA,IAAS,CAAC,CAAA;AAC3B,EAAA,OAAO,MAAO,CAAA,QAAA,CAAS,CAAC,CAAA,GAAI,CAAI,GAAA,CAAA;AAClC;AAEO,MAAM,wBAAwB,CAAC;AAAA,EACpC,QAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAgB,GAAA,IAAA;AAAA,EAChB,QAAW,GAAA;AACb,CAKM,KAAA;AACJ,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAG7B,EAAM,MAAA,mBAAA,GAAsB,iBAAiB,QAAY,IAAA,EAAA;AAEzD,EAAA,MAAM,EAAE,IAAA,EAAM,SAAW,EAAA,KAAA,KAAU,sBAAuB,CAAA;AAAA,IACxD,aAAe,EAAA;AAAA,GAChB,CAAA;AAED,EAAA,MAAM,0BAA0B,IAC3B,GAAA;AAAA,IACC,EAAI,EAAA,mBAAA;AAAA,IACJ,KAAA,EAAO,KAAK,QAAS,CAAA,KAAA;AAAA,IACrB,WAAA,EAAa,KAAK,QAAS,CAAA;AAAA,GAE7B,GAAA,MAAA;AAEJ,EAAM,MAAA,EAAE,KAAO,EAAA,WAAA,EAAgB,GAAA,sBAAA;AAAA,IAC7B;AAAA,GACF;AAEA,EAAM,MAAA,cAAA,GAAiB,2BAA2B,mBAAmB,CAAA,CAAA;AAErE,EAAA,IAAI,SAAW,EAAA;AACb,IAAO,uBAAA,GAAA,CAAC,WAAY,EAAA,EAAA,UAAA,EAAY,cAAgB,EAAA,CAAA;AAAA;AAGlD,EAAA,IAAI,KAAO,EAAA;AACT,IACE,uBAAA,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,aAAA;AAAA,QACA,aAAe,EAAA,mBAAA;AAAA,QACf;AAAA;AAAA,KACF;AAAA;AAIJ,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,MAAM,SAAS,IAAK,CAAA,MAAA;AACpB,EAAM,MAAA,KAAA,GAAQ,kBAAmB,CAAA,MAAA,CAAO,KAAK,CAAA;AAC7C,EAAA,MAAM,qBAAwB,GAAA,kBAAA;AAAA,IAC5B,MAAO,CAAA;AAAA,GACT;AACA,EAAM,MAAA,kBAAA,GAAqB,kBAAmB,CAAA,MAAA,CAAO,kBAAkB,CAAA;AACvE,EAAA,MAAM,0BACJ,GAAA,KAAA,KAAU,CAAK,IAAA,qBAAA,KAA0B,KAAK,kBAAuB,KAAA,CAAA;AAEvE,EAAA,IAAI,0BAA4B,EAAA;AAC9B,IACE,uBAAA,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,aAAA;AAAA,QACA,SAAW,EAAA,KAAA;AAAA,QACX,eAAiB,EAAA,WAAA;AAAA,QACjB,KAAA,EAAO,EAAE,oBAAoB,CAAA;AAAA,QAC7B,cAAA,EAAgB,EAAE,2BAA2B,CAAA;AAAA,QAC7C,UAAY,EAAA;AAAA;AAAA,KACd;AAAA;AAIJ,EACE,uBAAA,GAAA;AAAA,IAAC,oBAAA;AAAA,IAAA;AAAA,MAEC,aAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAW,EAAA,KAAA;AAAA,MACX,WAAA;AAAA,MACA,SAAW,EAAA,IAAA;AAAA,MACX,aAAe,EAAA,mBAAA;AAAA,MACf,UAAY,EAAA;AAAA,KAAA;AAAA,IAPP,IAAK,CAAA;AAAA,GAQZ;AAEJ;AAMa,MAAA,iCAAA,GAAoC,CAAC,KAMhD,qBAAA,GAAA,CAAC,0BACC,QAAC,kBAAA,GAAA,CAAA,qBAAA,EAAA,EAAuB,GAAG,KAAA,EAAO,CACpC,EAAA;;;;"}
|
|
@@ -82,73 +82,81 @@ const EntitiesTable = ({
|
|
|
82
82
|
const { entityMetadataMap } = useEntityMetadataMap(entityRefs);
|
|
83
83
|
const entities = aggregatedScorecardEntities?.entities ?? [];
|
|
84
84
|
const total = aggregatedScorecardEntities?.pagination?.total ?? 0;
|
|
85
|
+
const calculationErrorCount = aggregatedScorecardEntities?.entityHealth?.calculationErrorCount ?? 0;
|
|
85
86
|
const entitiesTableTitle = total > 0 ? t("entitiesPage.entitiesTable.titleWithCount", { count: total }) : t("entitiesPage.entitiesTable.title");
|
|
86
|
-
return /* @__PURE__ */ jsx(
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
),
|
|
95
|
-
/* @__PURE__ */ jsxs(TableBody, { children: [
|
|
96
|
-
(ownershipLoading || loadingDataEntities) && /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(
|
|
97
|
-
TableCell,
|
|
98
|
-
{
|
|
99
|
-
colSpan: SCORECARD_ENTITIES_TABLE_HEADERS.length,
|
|
100
|
-
align: "center",
|
|
101
|
-
children: /* @__PURE__ */ jsx(CircularProgress, { "aria-label": t("common.loading") })
|
|
102
|
-
}
|
|
103
|
-
) }, "entities-table-loading-row"),
|
|
104
|
-
!ownershipLoading && !loadingDataEntities && entitiesError && /* @__PURE__ */ jsx(
|
|
105
|
-
EntitiesTableStateRow,
|
|
106
|
-
{
|
|
107
|
-
colSpan: SCORECARD_ENTITIES_TABLE_HEADERS.length,
|
|
108
|
-
error: entitiesError,
|
|
109
|
-
metricId,
|
|
110
|
-
setMetricTitle
|
|
111
|
-
}
|
|
112
|
-
),
|
|
113
|
-
!ownershipLoading && !loadingDataEntities && !entitiesError && entities.length === 0 && /* @__PURE__ */ jsx(
|
|
114
|
-
EntitiesTableStateRow,
|
|
115
|
-
{
|
|
116
|
-
colSpan: SCORECARD_ENTITIES_TABLE_HEADERS.length,
|
|
117
|
-
metricId,
|
|
118
|
-
setMetricTitle,
|
|
119
|
-
noEntities: entities.length === 0
|
|
120
|
-
}
|
|
121
|
-
),
|
|
122
|
-
!ownershipLoading && !loadingDataEntities && entities.length > 0 && entities.map((entity) => /* @__PURE__ */ jsx(
|
|
123
|
-
EntitiesRow,
|
|
124
|
-
{
|
|
125
|
-
entity,
|
|
126
|
-
entityMetadataMap,
|
|
127
|
-
thresholdRules
|
|
128
|
-
},
|
|
129
|
-
entity.entityRef
|
|
130
|
-
))
|
|
131
|
-
] }),
|
|
132
|
-
/* @__PURE__ */ jsx(TableFooter, { children: /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(
|
|
133
|
-
TableCell,
|
|
134
|
-
{
|
|
135
|
-
colSpan: SCORECARD_ENTITIES_TABLE_HEADERS.length,
|
|
136
|
-
sx: {
|
|
137
|
-
padding: 0
|
|
138
|
-
},
|
|
139
|
-
children: /* @__PURE__ */ jsx(
|
|
140
|
-
EntitiesTableFooter,
|
|
87
|
+
return /* @__PURE__ */ jsx(
|
|
88
|
+
EntitiesTableWrapper,
|
|
89
|
+
{
|
|
90
|
+
title: entitiesTableTitle,
|
|
91
|
+
showCalculationWarning: calculationErrorCount > 0,
|
|
92
|
+
children: /* @__PURE__ */ jsxs(Table, { sx: { width: "100%", tableLayout: "fixed" }, children: [
|
|
93
|
+
/* @__PURE__ */ jsx(
|
|
94
|
+
EntitiesTableHeader,
|
|
141
95
|
{
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
handleChangePage: (_event, newPage) => setPage(newPage),
|
|
146
|
-
handleChangeRowsPerPage
|
|
96
|
+
orderBy,
|
|
97
|
+
order,
|
|
98
|
+
onSortRequest: handleSortRequest
|
|
147
99
|
}
|
|
148
|
-
)
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
100
|
+
),
|
|
101
|
+
/* @__PURE__ */ jsxs(TableBody, { children: [
|
|
102
|
+
(ownershipLoading || loadingDataEntities) && /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(
|
|
103
|
+
TableCell,
|
|
104
|
+
{
|
|
105
|
+
colSpan: SCORECARD_ENTITIES_TABLE_HEADERS.length,
|
|
106
|
+
align: "center",
|
|
107
|
+
children: /* @__PURE__ */ jsx(CircularProgress, { "aria-label": t("common.loading") })
|
|
108
|
+
}
|
|
109
|
+
) }, "entities-table-loading-row"),
|
|
110
|
+
!ownershipLoading && !loadingDataEntities && entitiesError && /* @__PURE__ */ jsx(
|
|
111
|
+
EntitiesTableStateRow,
|
|
112
|
+
{
|
|
113
|
+
colSpan: SCORECARD_ENTITIES_TABLE_HEADERS.length,
|
|
114
|
+
error: entitiesError,
|
|
115
|
+
metricId,
|
|
116
|
+
setMetricTitle
|
|
117
|
+
}
|
|
118
|
+
),
|
|
119
|
+
!ownershipLoading && !loadingDataEntities && !entitiesError && entities.length === 0 && /* @__PURE__ */ jsx(
|
|
120
|
+
EntitiesTableStateRow,
|
|
121
|
+
{
|
|
122
|
+
colSpan: SCORECARD_ENTITIES_TABLE_HEADERS.length,
|
|
123
|
+
metricId,
|
|
124
|
+
setMetricTitle,
|
|
125
|
+
noEntities: entities.length === 0
|
|
126
|
+
}
|
|
127
|
+
),
|
|
128
|
+
!ownershipLoading && !loadingDataEntities && entities.length > 0 && entities.map((entity) => /* @__PURE__ */ jsx(
|
|
129
|
+
EntitiesRow,
|
|
130
|
+
{
|
|
131
|
+
entity,
|
|
132
|
+
entityMetadataMap,
|
|
133
|
+
thresholdRules
|
|
134
|
+
},
|
|
135
|
+
entity.entityRef
|
|
136
|
+
))
|
|
137
|
+
] }),
|
|
138
|
+
/* @__PURE__ */ jsx(TableFooter, { children: /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(
|
|
139
|
+
TableCell,
|
|
140
|
+
{
|
|
141
|
+
colSpan: SCORECARD_ENTITIES_TABLE_HEADERS.length,
|
|
142
|
+
sx: {
|
|
143
|
+
padding: 0
|
|
144
|
+
},
|
|
145
|
+
children: /* @__PURE__ */ jsx(
|
|
146
|
+
EntitiesTableFooter,
|
|
147
|
+
{
|
|
148
|
+
count: aggregatedScorecardEntities?.pagination?.total ?? 0,
|
|
149
|
+
page,
|
|
150
|
+
rowsPerPage,
|
|
151
|
+
handleChangePage: (_event, newPage) => setPage(newPage),
|
|
152
|
+
handleChangeRowsPerPage
|
|
153
|
+
}
|
|
154
|
+
)
|
|
155
|
+
}
|
|
156
|
+
) }) })
|
|
157
|
+
] })
|
|
158
|
+
}
|
|
159
|
+
);
|
|
152
160
|
};
|
|
153
161
|
|
|
154
162
|
export { EntitiesTable };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntitiesTable.esm.js","sources":["../../../../src/components/ScorecardPage/EntitiesTable/EntitiesTable.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChangeEvent, useCallback, useEffect, useMemo, useState } from 'react';\n\nimport type { EntityMetricDetail } from '@red-hat-developer-hub/backstage-plugin-scorecard-common';\n\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableFooter from '@mui/material/TableFooter';\nimport TableRow from '@mui/material/TableRow';\nimport TableCell from '@mui/material/TableCell';\nimport CircularProgress from '@mui/material/CircularProgress';\n\nimport { useOwnershipEntityRefs } from '../../../hooks/useOwnershipEntityRefs';\nimport { useAggregatedScorecardEntities } from '../../../hooks/useAggregatedScorecardEntities';\nimport { useAggregatedScorecard } from '../../../hooks/useAggregatedScorecard';\nimport { useEntityMetadataMap } from '../../../hooks/useEntityMetadataMap';\nimport { SCORECARD_ENTITIES_TABLE_HEADERS } from '../../../utils';\nimport { useTranslation } from '../../../hooks/useTranslation';\n\nimport { EntitiesTableStateRow } from './EntitiesTableStateRow';\nimport { EntitiesTableWrapper } from './EntitiesTableWrapper';\nimport { EntitiesTableHeader } from './EntitiesTableHeader';\nimport { EntitiesTableFooter } from './EntitiesTableFooter';\nimport { EntitiesRow } from './EntitiesRow';\n\ninterface EntitiesTableProps {\n metricId?: string;\n aggregationId?: string;\n setMetricTitle: (title: string) => void;\n setMetricNotFound?: (notFound: boolean) => void;\n}\n\nexport const EntitiesTable = ({\n metricId,\n aggregationId,\n setMetricTitle,\n setMetricNotFound,\n}: EntitiesTableProps) => {\n const [page, setPage] = useState<number>(1);\n const [rowsPerPage, setRowsPerPage] = useState<number>(5);\n const { t } = useTranslation();\n\n const [sortState, setSortState] = useState<{\n orderBy: string | null;\n order: 'asc' | 'desc';\n }>({\n orderBy: null,\n order: 'asc',\n });\n\n const { orderBy, order } = sortState;\n\n const { ownershipEntityRefs, loading: ownershipLoading } =\n useOwnershipEntityRefs();\n\n // TODO: Remove metricId once we deprecate it. We need to keep it for backward compatibility.\n const resolvedMetricId = aggregationId || metricId || '';\n\n const {\n aggregatedScorecardEntities,\n loadingData: loadingDataEntities,\n error: entitiesError,\n } = useAggregatedScorecardEntities({\n metricId: metricId as string,\n page,\n pageSize: rowsPerPage,\n ownershipEntityRefs,\n orderBy,\n order,\n enabled: !ownershipLoading,\n });\n\n const { data: aggregatedScorecard } = useAggregatedScorecard({\n aggregationId: resolvedMetricId,\n enabled: !!metricId && !ownershipLoading && !loadingDataEntities,\n });\n\n const thresholdRules = aggregatedScorecard?.result?.thresholds?.rules ?? [];\n\n useEffect(() => {\n if (entitiesError?.message?.includes('NotFoundError')) {\n setMetricNotFound?.(true);\n }\n }, [entitiesError, setMetricNotFound]);\n\n useEffect(() => {\n setMetricTitle(aggregatedScorecard?.metadata?.title ?? '');\n }, [aggregatedScorecard?.metadata?.title, setMetricTitle]);\n\n const handleChangeRowsPerPage = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n setRowsPerPage(Number(event.target.value));\n },\n [],\n );\n\n const handleSortRequest = useCallback((columnId: string) => {\n setSortState(prev =>\n prev.orderBy !== columnId\n ? { orderBy: columnId, order: 'asc' }\n : { ...prev, order: prev.order === 'asc' ? 'desc' : 'asc' },\n );\n }, []);\n\n const entityRefs = useMemo(\n () =>\n aggregatedScorecardEntities?.entities?.map(\n (entity: { entityRef: string }) => entity.entityRef,\n ) ?? [],\n [aggregatedScorecardEntities],\n );\n\n const { entityMetadataMap } = useEntityMetadataMap(entityRefs);\n\n const entities = aggregatedScorecardEntities?.entities ?? [];\n\n const total = aggregatedScorecardEntities?.pagination?.total ?? 0;\n const entitiesTableTitle =\n total > 0\n ? t('entitiesPage.entitiesTable.titleWithCount', { count: total } as any)\n : t('entitiesPage.entitiesTable.title');\n\n return (\n <EntitiesTableWrapper title={entitiesTableTitle} isError={!!entitiesError}>\n <Table sx={{ width: '100%', tableLayout: 'fixed' }}>\n <EntitiesTableHeader\n orderBy={orderBy}\n order={order}\n onSortRequest={handleSortRequest}\n />\n\n <TableBody>\n {(ownershipLoading || loadingDataEntities) && (\n <TableRow key=\"entities-table-loading-row\">\n <TableCell\n colSpan={SCORECARD_ENTITIES_TABLE_HEADERS.length}\n align=\"center\"\n >\n <CircularProgress aria-label={t('common.loading')} />\n </TableCell>\n </TableRow>\n )}\n\n {!ownershipLoading && !loadingDataEntities && entitiesError && (\n <EntitiesTableStateRow\n colSpan={SCORECARD_ENTITIES_TABLE_HEADERS.length}\n error={entitiesError}\n metricId={metricId}\n setMetricTitle={setMetricTitle}\n />\n )}\n\n {!ownershipLoading &&\n !loadingDataEntities &&\n !entitiesError &&\n entities.length === 0 && (\n <EntitiesTableStateRow\n colSpan={SCORECARD_ENTITIES_TABLE_HEADERS.length}\n metricId={metricId}\n setMetricTitle={setMetricTitle}\n noEntities={entities.length === 0}\n />\n )}\n\n {!ownershipLoading &&\n !loadingDataEntities &&\n entities.length > 0 &&\n entities.map((entity: EntityMetricDetail) => (\n <EntitiesRow\n key={entity.entityRef}\n entity={entity}\n entityMetadataMap={entityMetadataMap}\n thresholdRules={thresholdRules}\n />\n ))}\n </TableBody>\n\n <TableFooter>\n <TableRow>\n <TableCell\n colSpan={SCORECARD_ENTITIES_TABLE_HEADERS.length}\n sx={{\n padding: 0,\n }}\n >\n <EntitiesTableFooter\n count={aggregatedScorecardEntities?.pagination?.total ?? 0}\n page={page}\n rowsPerPage={rowsPerPage}\n handleChangePage={(_event, newPage) => setPage(newPage)}\n handleChangeRowsPerPage={handleChangeRowsPerPage}\n />\n </TableCell>\n </TableRow>\n </TableFooter>\n </Table>\n </EntitiesTableWrapper>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EntitiesTable.esm.js","sources":["../../../../src/components/ScorecardPage/EntitiesTable/EntitiesTable.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChangeEvent, useCallback, useEffect, useMemo, useState } from 'react';\n\nimport type { EntityMetricDetail } from '@red-hat-developer-hub/backstage-plugin-scorecard-common';\n\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableFooter from '@mui/material/TableFooter';\nimport TableRow from '@mui/material/TableRow';\nimport TableCell from '@mui/material/TableCell';\nimport CircularProgress from '@mui/material/CircularProgress';\n\nimport { useOwnershipEntityRefs } from '../../../hooks/useOwnershipEntityRefs';\nimport { useAggregatedScorecardEntities } from '../../../hooks/useAggregatedScorecardEntities';\nimport { useAggregatedScorecard } from '../../../hooks/useAggregatedScorecard';\nimport { useEntityMetadataMap } from '../../../hooks/useEntityMetadataMap';\nimport { SCORECARD_ENTITIES_TABLE_HEADERS } from '../../../utils';\nimport { useTranslation } from '../../../hooks/useTranslation';\n\nimport { EntitiesTableStateRow } from './EntitiesTableStateRow';\nimport { EntitiesTableWrapper } from './EntitiesTableWrapper';\nimport { EntitiesTableHeader } from './EntitiesTableHeader';\nimport { EntitiesTableFooter } from './EntitiesTableFooter';\nimport { EntitiesRow } from './EntitiesRow';\n\ninterface EntitiesTableProps {\n metricId?: string;\n aggregationId?: string;\n setMetricTitle: (title: string) => void;\n setMetricNotFound?: (notFound: boolean) => void;\n}\n\nexport const EntitiesTable = ({\n metricId,\n aggregationId,\n setMetricTitle,\n setMetricNotFound,\n}: EntitiesTableProps) => {\n const [page, setPage] = useState<number>(1);\n const [rowsPerPage, setRowsPerPage] = useState<number>(5);\n const { t } = useTranslation();\n\n const [sortState, setSortState] = useState<{\n orderBy: string | null;\n order: 'asc' | 'desc';\n }>({\n orderBy: null,\n order: 'asc',\n });\n\n const { orderBy, order } = sortState;\n\n const { ownershipEntityRefs, loading: ownershipLoading } =\n useOwnershipEntityRefs();\n\n // TODO: Remove metricId once we deprecate it. We need to keep it for backward compatibility.\n const resolvedMetricId = aggregationId || metricId || '';\n\n const {\n aggregatedScorecardEntities,\n loadingData: loadingDataEntities,\n error: entitiesError,\n } = useAggregatedScorecardEntities({\n metricId: metricId as string,\n page,\n pageSize: rowsPerPage,\n ownershipEntityRefs,\n orderBy,\n order,\n enabled: !ownershipLoading,\n });\n\n const { data: aggregatedScorecard } = useAggregatedScorecard({\n aggregationId: resolvedMetricId,\n enabled: !!metricId && !ownershipLoading && !loadingDataEntities,\n });\n\n const thresholdRules = aggregatedScorecard?.result?.thresholds?.rules ?? [];\n\n useEffect(() => {\n if (entitiesError?.message?.includes('NotFoundError')) {\n setMetricNotFound?.(true);\n }\n }, [entitiesError, setMetricNotFound]);\n\n useEffect(() => {\n setMetricTitle(aggregatedScorecard?.metadata?.title ?? '');\n }, [aggregatedScorecard?.metadata?.title, setMetricTitle]);\n\n const handleChangeRowsPerPage = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n setRowsPerPage(Number(event.target.value));\n },\n [],\n );\n\n const handleSortRequest = useCallback((columnId: string) => {\n setSortState(prev =>\n prev.orderBy !== columnId\n ? { orderBy: columnId, order: 'asc' }\n : { ...prev, order: prev.order === 'asc' ? 'desc' : 'asc' },\n );\n }, []);\n\n const entityRefs = useMemo(\n () =>\n aggregatedScorecardEntities?.entities?.map(\n (entity: { entityRef: string }) => entity.entityRef,\n ) ?? [],\n [aggregatedScorecardEntities],\n );\n\n const { entityMetadataMap } = useEntityMetadataMap(entityRefs);\n\n const entities = aggregatedScorecardEntities?.entities ?? [];\n\n const total = aggregatedScorecardEntities?.pagination?.total ?? 0;\n const calculationErrorCount =\n aggregatedScorecardEntities?.entityHealth?.calculationErrorCount ?? 0;\n const entitiesTableTitle =\n total > 0\n ? t('entitiesPage.entitiesTable.titleWithCount', { count: total } as any)\n : t('entitiesPage.entitiesTable.title');\n\n return (\n <EntitiesTableWrapper\n title={entitiesTableTitle}\n showCalculationWarning={calculationErrorCount > 0}\n >\n <Table sx={{ width: '100%', tableLayout: 'fixed' }}>\n <EntitiesTableHeader\n orderBy={orderBy}\n order={order}\n onSortRequest={handleSortRequest}\n />\n\n <TableBody>\n {(ownershipLoading || loadingDataEntities) && (\n <TableRow key=\"entities-table-loading-row\">\n <TableCell\n colSpan={SCORECARD_ENTITIES_TABLE_HEADERS.length}\n align=\"center\"\n >\n <CircularProgress aria-label={t('common.loading')} />\n </TableCell>\n </TableRow>\n )}\n\n {!ownershipLoading && !loadingDataEntities && entitiesError && (\n <EntitiesTableStateRow\n colSpan={SCORECARD_ENTITIES_TABLE_HEADERS.length}\n error={entitiesError}\n metricId={metricId}\n setMetricTitle={setMetricTitle}\n />\n )}\n\n {!ownershipLoading &&\n !loadingDataEntities &&\n !entitiesError &&\n entities.length === 0 && (\n <EntitiesTableStateRow\n colSpan={SCORECARD_ENTITIES_TABLE_HEADERS.length}\n metricId={metricId}\n setMetricTitle={setMetricTitle}\n noEntities={entities.length === 0}\n />\n )}\n\n {!ownershipLoading &&\n !loadingDataEntities &&\n entities.length > 0 &&\n entities.map((entity: EntityMetricDetail) => (\n <EntitiesRow\n key={entity.entityRef}\n entity={entity}\n entityMetadataMap={entityMetadataMap}\n thresholdRules={thresholdRules}\n />\n ))}\n </TableBody>\n\n <TableFooter>\n <TableRow>\n <TableCell\n colSpan={SCORECARD_ENTITIES_TABLE_HEADERS.length}\n sx={{\n padding: 0,\n }}\n >\n <EntitiesTableFooter\n count={aggregatedScorecardEntities?.pagination?.total ?? 0}\n page={page}\n rowsPerPage={rowsPerPage}\n handleChangePage={(_event, newPage) => setPage(newPage)}\n handleChangeRowsPerPage={handleChangeRowsPerPage}\n />\n </TableCell>\n </TableRow>\n </TableFooter>\n </Table>\n </EntitiesTableWrapper>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ import { useTranslation } from '../../../hooks/useTranslation.esm.js';
|
|
|
9
9
|
const EntitiesTableWrapper = ({
|
|
10
10
|
children,
|
|
11
11
|
title,
|
|
12
|
-
|
|
12
|
+
showCalculationWarning = false
|
|
13
13
|
}) => {
|
|
14
14
|
const { t } = useTranslation();
|
|
15
15
|
return /* @__PURE__ */ jsxs(Paper, { elevation: 1, sx: { borderRadius: "1rem", width: "100%" }, children: [
|
|
@@ -32,7 +32,7 @@ const EntitiesTableWrapper = ({
|
|
|
32
32
|
},
|
|
33
33
|
children: [
|
|
34
34
|
title,
|
|
35
|
-
|
|
35
|
+
showCalculationWarning && /* @__PURE__ */ jsx(
|
|
36
36
|
Tooltip,
|
|
37
37
|
{
|
|
38
38
|
title: t("metric.someEntitiesNotReportingValues"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntitiesTableWrapper.esm.js","sources":["../../../../src/components/ScorecardPage/EntitiesTable/EntitiesTableWrapper.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FC, ReactNode } from 'react';\n\nimport Paper from '@mui/material/Paper';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport ReportProblemOutlinedIcon from '@mui/icons-material/ReportProblemOutlined';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport { useTranslation } from '../../../hooks/useTranslation';\n\ninterface EntitiesTableWrapperProps {\n children: ReactNode;\n title: string;\n
|
|
1
|
+
{"version":3,"file":"EntitiesTableWrapper.esm.js","sources":["../../../../src/components/ScorecardPage/EntitiesTable/EntitiesTableWrapper.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FC, ReactNode } from 'react';\n\nimport Paper from '@mui/material/Paper';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport ReportProblemOutlinedIcon from '@mui/icons-material/ReportProblemOutlined';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport { useTranslation } from '../../../hooks/useTranslation';\n\ninterface EntitiesTableWrapperProps {\n children: ReactNode;\n title: string;\n /** When true, show a warning that at least one visible entity had a metric calculation failure. */\n showCalculationWarning?: boolean;\n}\n\nexport const EntitiesTableWrapper: FC<EntitiesTableWrapperProps> = ({\n children,\n title,\n showCalculationWarning = false,\n}) => {\n const { t } = useTranslation();\n\n return (\n <Paper elevation={1} sx={{ borderRadius: '1rem', width: '100%' }}>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n }}\n >\n <Typography\n variant=\"h3\"\n sx={{\n p: 3,\n display: 'flex',\n alignItems: 'center',\n fontWeight: 'bold',\n }}\n >\n {title}\n {showCalculationWarning && (\n <Tooltip\n title={t('metric.someEntitiesNotReportingValues')}\n arrow\n placement=\"right\"\n sx={{\n ml: 0.5,\n cursor: 'pointer',\n }}\n >\n <ReportProblemOutlinedIcon color=\"warning\" fontSize=\"small\" />\n </Tooltip>\n )}\n </Typography>\n </Box>\n <Box sx={{ pl: 3, pr: 3 }}>{children}</Box>\n </Paper>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAiCO,MAAM,uBAAsD,CAAC;AAAA,EAClE,QAAA;AAAA,EACA,KAAA;AAAA,EACA,sBAAyB,GAAA;AAC3B,CAAM,KAAA;AACJ,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAE7B,EACE,uBAAA,IAAA,CAAC,KAAM,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,EAAA,EAAI,EAAE,YAAc,EAAA,MAAA,EAAQ,KAAO,EAAA,MAAA,EACtD,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,EAAI,EAAA;AAAA,UACF,OAAS,EAAA,MAAA;AAAA,UACT,cAAgB,EAAA;AAAA,SAClB;AAAA,QAEA,QAAA,kBAAA,IAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,OAAQ,EAAA,IAAA;AAAA,YACR,EAAI,EAAA;AAAA,cACF,CAAG,EAAA,CAAA;AAAA,cACH,OAAS,EAAA,MAAA;AAAA,cACT,UAAY,EAAA,QAAA;AAAA,cACZ,UAAY,EAAA;AAAA,aACd;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,KAAA;AAAA,cACA,sBACC,oBAAA,GAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAO,EAAE,uCAAuC,CAAA;AAAA,kBAChD,KAAK,EAAA,IAAA;AAAA,kBACL,SAAU,EAAA,OAAA;AAAA,kBACV,EAAI,EAAA;AAAA,oBACF,EAAI,EAAA,GAAA;AAAA,oBACJ,MAAQ,EAAA;AAAA,mBACV;AAAA,kBAEA,QAAC,kBAAA,GAAA,CAAA,yBAAA,EAAA,EAA0B,KAAM,EAAA,SAAA,EAAU,UAAS,OAAQ,EAAA;AAAA;AAAA;AAC9D;AAAA;AAAA;AAEJ;AAAA,KACF;AAAA,oBACA,GAAA,CAAC,OAAI,EAAI,EAAA,EAAE,IAAI,CAAG,EAAA,EAAA,EAAI,CAAE,EAAA,EAAI,QAAS,EAAA;AAAA,GACvC,EAAA,CAAA;AAEJ;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
|
|
3
|
-
export { a as scorecardTranslationRef, s as scorecardTranslations } from './types/index.d-
|
|
3
|
+
export { a as scorecardTranslationRef, s as scorecardTranslations } from './types/index.d-pCF5Ectg.js';
|
|
4
4
|
export { default as ScorecardSuccessStatusIcon } from '@mui/icons-material/CheckCircleOutline';
|
|
5
5
|
export { default as ScorecardWarningStatusIcon } from '@mui/icons-material/WarningAmber';
|
|
6
6
|
export { default as ScorecardErrorStatusIcon } from '@mui/icons-material/DangerousOutlined';
|
|
@@ -53,6 +53,9 @@ const scorecardTranslationDe = createTranslationMessages({
|
|
|
53
53
|
"metric.averageLegendTooltipEntitiesEach_one": "{{count}} Element, je {{score}}",
|
|
54
54
|
"metric.averageLegendTooltipEntitiesEach_other": "{{count}} Elemente, je {{score}}",
|
|
55
55
|
"metric.averageLegendTooltipRowTotal": "Gesamtpunktzahl {{total}}",
|
|
56
|
+
"metric.drillDownCalculationFailures": "Mindestens ein Element konnte diese Metrik nicht berechnen.",
|
|
57
|
+
"metric.homepageEntityHealthRatio": "{{healthy}}/{{total}} Elemente",
|
|
58
|
+
"metric.homepageEntityCalculationHealth": "{{healthy}} / {{total}} Elemente ohne Metrik-Berechnungsfehler",
|
|
56
59
|
// Threshold translations
|
|
57
60
|
"thresholds.success": "Erfolg",
|
|
58
61
|
"thresholds.warning": "Warnung",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"de.esm.js","sources":["../../src/translations/de.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { scorecardTranslationRef } from './ref';\n\n/**\n * de translation for plugin.scorecard.\n * @public\n */\nconst scorecardTranslationDe = createTranslationMessages({\n ref: scorecardTranslationRef,\n messages: {\n // Empty state translations\n 'emptyState.title': 'Noch keine Scorecards hinzugefügt',\n 'emptyState.description':\n 'Scorecards helfen Ihnen, den Zustand der Komponenten auf einen Blick zu überwachen. Schauen Sie sich zunächst unsere Dokumentation mit den Einrichtungshinweisen an.',\n 'emptyState.button': 'Dokumentation anzeigen',\n 'emptyState.altText': 'Keine Scorecards',\n\n // Permission required translations\n 'permissionRequired.title': 'Fehlende Berechtigung',\n 'permissionRequired.description':\n 'Wenn Sie das Scorecard-Plugin anzeigen möchten, wenden Sie sich an den Administrator, um die Berechtigung {{permission}} zu erhalten.',\n 'permissionRequired.button': 'Mehr erfahren',\n 'permissionRequired.altText': 'Berechtigung erforderlich',\n\n // Common UI\n 'common.loading': 'Wird geladen',\n\n // Not found state\n 'notFound.title': '404 Diese Seite wurde nicht gefunden',\n 'notFound.description':\n 'Fügen Sie eine {{indexFile}}-Datei im Stammverzeichnis des docs-Ordners dieses Repositorys hinzu.',\n 'notFound.readMore': 'Mehr erfahren',\n 'notFound.goBack': 'Zurück',\n 'notFound.contactSupport': 'Support kontaktieren',\n 'notFound.altText': 'Seite nicht gefunden',\n\n // Error messages\n 'errors.entityMissingProperties':\n 'Für die Scorecard-Suche fehlen dem Element die erforderlichen Eigenschaften.',\n 'errors.missingAggregationId':\n 'Die Scorecard ist falsch konfiguriert; die Eigenschaft „Aggregations-ID“ (oder „Metrik-ID“) wurde nicht angegeben',\n 'errors.invalidApiResponse': 'Ungültiges Antwortformat der Scorecard-API',\n 'errors.fetchError': 'Fehler beim Abrufen der Scorecards: {{error}}',\n 'errors.metricDataUnavailable': 'Metrikdaten nicht verfügbar',\n 'errors.invalidThresholds': 'Ungültige Schwellenwerte',\n 'errors.missingPermission': 'Fehlende Berechtigung',\n 'errors.noDataFound': 'Keine Daten gefunden',\n 'errors.authenticationError': 'Authentifizierungsfehler',\n 'errors.missingPermissionMessage':\n 'Um die Metriken der Scorecard einzusehen, muss Ihnen der Administrator die erforderliche Berechtigung erteilen.',\n 'errors.userNotFoundInCatalogMessage':\n 'Benutzer-Element nicht im Katalog gefunden.',\n 'errors.noDataFoundMessage':\n 'Um Ihre Daten hier anzuzeigen, überprüfen Sie, ob Ihre Elemente Werte melden, die mit dieser Metrik in Verbindung stehen.',\n 'errors.unsupportedAggregationType':\n 'Diese Scorecard verwendet einen Aggregationstyp, der von dieser Plugin-Version nicht unterstützt wird.',\n 'errors.authenticationErrorMessage':\n 'Bitte melden Sie sich an, um Ihre Daten anzuzeigen.',\n\n // Metric translations\n 'metric.github.open_prs.title': 'GitHub PRs offen',\n 'metric.github.open_prs.description':\n 'Aktuelle Anzahl offener Pull Requests für ein bestimmtes GitHub-Repository.',\n 'metric.jira.open_issues.title': 'Jira offene blockierende Tickets',\n 'metric.jira.open_issues.description':\n 'Hervorhebt die Anzahl der kritischen, blockierenden Probleme, die derzeit in Jira offen sind.',\n 'metric.filecheck.title': 'Dateiprüfung: {{name}}',\n 'metric.filecheck.description':\n 'Prüft, ob die Datei {{name}} im Repository vorhanden ist.',\n 'metric.lastUpdated': 'Zuletzt aktualisiert: {{timestamp}}',\n 'metric.lastUpdatedNotAvailable': 'Zuletzt aktualisiert: Nicht verfügbar',\n 'metric.someEntitiesNotReportingValues':\n 'Einige Elemente melden keine Werte, die mit dieser Metrik in Verbindung stehen.',\n 'metric.averageCenterTooltipTotalLabel': 'Gesamtpunktzahl',\n 'metric.averageCenterTooltipMaxLabel': 'Maximal mögliche Punktzahl',\n 'metric.averageLegendTooltipEntitiesEach_one':\n '{{count}} Element, je {{score}}',\n 'metric.averageLegendTooltipEntitiesEach_other':\n '{{count}} Elemente, je {{score}}',\n 'metric.averageLegendTooltipRowTotal': 'Gesamtpunktzahl {{total}}',\n\n // Threshold translations\n 'thresholds.success': 'Erfolg',\n 'thresholds.warning': 'Warnung',\n 'thresholds.error': 'Fehler',\n 'thresholds.exist': 'Vorhanden',\n 'thresholds.missing': 'Fehlend',\n 'thresholds.noEntities': 'Keine Elemente im {{category}}-Zustand',\n 'thresholds.entities_one': '{{count}} Element',\n 'thresholds.entities_other': '{{count}} Elemente',\n\n // Entities page translations\n 'entitiesPage.unknownMetric': 'Unbekannte Metrik',\n 'entitiesPage.noDataFound':\n 'Um Ihre Daten hier anzuzeigen, überprüfen Sie, ob Ihre Elemente Werte melden, die mit dieser Metrik in Verbindung stehen.',\n 'entitiesPage.missingPermission':\n 'Um die Metriken der Scorecard einzusehen, muss Ihnen der Administrator die erforderliche Berechtigung erteilen.',\n 'entitiesPage.metricProviderNotRegistered':\n 'Metrik-Anbieter mit ID {{metricId}} ist nicht registriert.',\n 'entitiesPage.entitiesTable.title': 'Elemente',\n 'entitiesPage.entitiesTable.unavailable': 'Nicht verfügbar',\n 'entitiesPage.entitiesTable.titleWithCount': 'Elemente ({{count}})',\n 'entitiesPage.entitiesTable.header.status': 'Status',\n 'entitiesPage.entitiesTable.header.value': 'Wert',\n 'entitiesPage.entitiesTable.header.entity': 'Element',\n 'entitiesPage.entitiesTable.header.owner': 'Eigentümer',\n 'entitiesPage.entitiesTable.header.kind': 'Art',\n 'entitiesPage.entitiesTable.header.lastUpdated': 'Zuletzt aktualisiert',\n 'entitiesPage.entitiesTable.footer.allRows': 'Alle Zeilen',\n 'entitiesPage.entitiesTable.footer.rows_one': '{{count}} Zeile',\n 'entitiesPage.entitiesTable.footer.rows_other': '{{count}} Zeilen',\n 'entitiesPage.entitiesTable.footer.of': 'von',\n },\n});\n\nexport default scorecardTranslationDe;\n"],"names":[],"mappings":";;;AAuBA,MAAM,yBAAyB,yBAA0B,CAAA;AAAA,EACvD,GAAK,EAAA,uBAAA;AAAA,EACL,QAAU,EAAA;AAAA;AAAA,IAER,kBAAoB,EAAA,sCAAA;AAAA,IACpB,wBACE,EAAA,4KAAA;AAAA,IACF,mBAAqB,EAAA,wBAAA;AAAA,IACrB,oBAAsB,EAAA,kBAAA;AAAA;AAAA,IAGtB,0BAA4B,EAAA,uBAAA;AAAA,IAC5B,gCACE,EAAA,0IAAA;AAAA,IACF,2BAA6B,EAAA,eAAA;AAAA,IAC7B,4BAA8B,EAAA,2BAAA;AAAA;AAAA,IAG9B,gBAAkB,EAAA,cAAA;AAAA;AAAA,IAGlB,gBAAkB,EAAA,sCAAA;AAAA,IAClB,sBACE,EAAA,sGAAA;AAAA,IACF,mBAAqB,EAAA,eAAA;AAAA,IACrB,iBAAmB,EAAA,WAAA;AAAA,IACnB,yBAA2B,EAAA,sBAAA;AAAA,IAC3B,kBAAoB,EAAA,sBAAA;AAAA;AAAA,IAGpB,gCACE,EAAA,iFAAA;AAAA,IACF,6BACE,EAAA,uIAAA;AAAA,IACF,2BAA6B,EAAA,+CAAA;AAAA,IAC7B,mBAAqB,EAAA,+CAAA;AAAA,IACrB,8BAAgC,EAAA,gCAAA;AAAA,IAChC,0BAA4B,EAAA,6BAAA;AAAA,IAC5B,0BAA4B,EAAA,uBAAA;AAAA,IAC5B,oBAAsB,EAAA,sBAAA;AAAA,IACtB,4BAA8B,EAAA,0BAAA;AAAA,IAC9B,iCACE,EAAA,iHAAA;AAAA,IACF,qCACE,EAAA,6CAAA;AAAA,IACF,2BACE,EAAA,iIAAA;AAAA,IACF,mCACE,EAAA,2GAAA;AAAA,IACF,mCACE,EAAA,qDAAA;AAAA;AAAA,IAGF,8BAAgC,EAAA,kBAAA;AAAA,IAChC,oCACE,EAAA,gFAAA;AAAA,IACF,+BAAiC,EAAA,kCAAA;AAAA,IACjC,qCACE,EAAA,+FAAA;AAAA,IACF,wBAA0B,EAAA,2BAAA;AAAA,IAC1B,8BACE,EAAA,8DAAA;AAAA,IACF,oBAAsB,EAAA,qCAAA;AAAA,IACtB,gCAAkC,EAAA,0CAAA;AAAA,IAClC,uCACE,EAAA,iFAAA;AAAA,IACF,uCAAyC,EAAA,iBAAA;AAAA,IACzC,qCAAuC,EAAA,+BAAA;AAAA,IACvC,6CACE,EAAA,iCAAA;AAAA,IACF,+CACE,EAAA,kCAAA;AAAA,IACF,qCAAuC,EAAA,2BAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"de.esm.js","sources":["../../src/translations/de.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { scorecardTranslationRef } from './ref';\n\n/**\n * de translation for plugin.scorecard.\n * @public\n */\nconst scorecardTranslationDe = createTranslationMessages({\n ref: scorecardTranslationRef,\n messages: {\n // Empty state translations\n 'emptyState.title': 'Noch keine Scorecards hinzugefügt',\n 'emptyState.description':\n 'Scorecards helfen Ihnen, den Zustand der Komponenten auf einen Blick zu überwachen. Schauen Sie sich zunächst unsere Dokumentation mit den Einrichtungshinweisen an.',\n 'emptyState.button': 'Dokumentation anzeigen',\n 'emptyState.altText': 'Keine Scorecards',\n\n // Permission required translations\n 'permissionRequired.title': 'Fehlende Berechtigung',\n 'permissionRequired.description':\n 'Wenn Sie das Scorecard-Plugin anzeigen möchten, wenden Sie sich an den Administrator, um die Berechtigung {{permission}} zu erhalten.',\n 'permissionRequired.button': 'Mehr erfahren',\n 'permissionRequired.altText': 'Berechtigung erforderlich',\n\n // Common UI\n 'common.loading': 'Wird geladen',\n\n // Not found state\n 'notFound.title': '404 Diese Seite wurde nicht gefunden',\n 'notFound.description':\n 'Fügen Sie eine {{indexFile}}-Datei im Stammverzeichnis des docs-Ordners dieses Repositorys hinzu.',\n 'notFound.readMore': 'Mehr erfahren',\n 'notFound.goBack': 'Zurück',\n 'notFound.contactSupport': 'Support kontaktieren',\n 'notFound.altText': 'Seite nicht gefunden',\n\n // Error messages\n 'errors.entityMissingProperties':\n 'Für die Scorecard-Suche fehlen dem Element die erforderlichen Eigenschaften.',\n 'errors.missingAggregationId':\n 'Die Scorecard ist falsch konfiguriert; die Eigenschaft „Aggregations-ID“ (oder „Metrik-ID“) wurde nicht angegeben',\n 'errors.invalidApiResponse': 'Ungültiges Antwortformat der Scorecard-API',\n 'errors.fetchError': 'Fehler beim Abrufen der Scorecards: {{error}}',\n 'errors.metricDataUnavailable': 'Metrikdaten nicht verfügbar',\n 'errors.invalidThresholds': 'Ungültige Schwellenwerte',\n 'errors.missingPermission': 'Fehlende Berechtigung',\n 'errors.noDataFound': 'Keine Daten gefunden',\n 'errors.authenticationError': 'Authentifizierungsfehler',\n 'errors.missingPermissionMessage':\n 'Um die Metriken der Scorecard einzusehen, muss Ihnen der Administrator die erforderliche Berechtigung erteilen.',\n 'errors.userNotFoundInCatalogMessage':\n 'Benutzer-Element nicht im Katalog gefunden.',\n 'errors.noDataFoundMessage':\n 'Um Ihre Daten hier anzuzeigen, überprüfen Sie, ob Ihre Elemente Werte melden, die mit dieser Metrik in Verbindung stehen.',\n 'errors.unsupportedAggregationType':\n 'Diese Scorecard verwendet einen Aggregationstyp, der von dieser Plugin-Version nicht unterstützt wird.',\n 'errors.authenticationErrorMessage':\n 'Bitte melden Sie sich an, um Ihre Daten anzuzeigen.',\n\n // Metric translations\n 'metric.github.open_prs.title': 'GitHub PRs offen',\n 'metric.github.open_prs.description':\n 'Aktuelle Anzahl offener Pull Requests für ein bestimmtes GitHub-Repository.',\n 'metric.jira.open_issues.title': 'Jira offene blockierende Tickets',\n 'metric.jira.open_issues.description':\n 'Hervorhebt die Anzahl der kritischen, blockierenden Probleme, die derzeit in Jira offen sind.',\n 'metric.filecheck.title': 'Dateiprüfung: {{name}}',\n 'metric.filecheck.description':\n 'Prüft, ob die Datei {{name}} im Repository vorhanden ist.',\n 'metric.lastUpdated': 'Zuletzt aktualisiert: {{timestamp}}',\n 'metric.lastUpdatedNotAvailable': 'Zuletzt aktualisiert: Nicht verfügbar',\n 'metric.someEntitiesNotReportingValues':\n 'Einige Elemente melden keine Werte, die mit dieser Metrik in Verbindung stehen.',\n 'metric.averageCenterTooltipTotalLabel': 'Gesamtpunktzahl',\n 'metric.averageCenterTooltipMaxLabel': 'Maximal mögliche Punktzahl',\n 'metric.averageLegendTooltipEntitiesEach_one':\n '{{count}} Element, je {{score}}',\n 'metric.averageLegendTooltipEntitiesEach_other':\n '{{count}} Elemente, je {{score}}',\n 'metric.averageLegendTooltipRowTotal': 'Gesamtpunktzahl {{total}}',\n 'metric.drillDownCalculationFailures':\n 'Mindestens ein Element konnte diese Metrik nicht berechnen.',\n 'metric.homepageEntityHealthRatio': '{{healthy}}/{{total}} Elemente',\n 'metric.homepageEntityCalculationHealth':\n '{{healthy}} / {{total}} Elemente ohne Metrik-Berechnungsfehler',\n\n // Threshold translations\n 'thresholds.success': 'Erfolg',\n 'thresholds.warning': 'Warnung',\n 'thresholds.error': 'Fehler',\n 'thresholds.exist': 'Vorhanden',\n 'thresholds.missing': 'Fehlend',\n 'thresholds.noEntities': 'Keine Elemente im {{category}}-Zustand',\n 'thresholds.entities_one': '{{count}} Element',\n 'thresholds.entities_other': '{{count}} Elemente',\n\n // Entities page translations\n 'entitiesPage.unknownMetric': 'Unbekannte Metrik',\n 'entitiesPage.noDataFound':\n 'Um Ihre Daten hier anzuzeigen, überprüfen Sie, ob Ihre Elemente Werte melden, die mit dieser Metrik in Verbindung stehen.',\n 'entitiesPage.missingPermission':\n 'Um die Metriken der Scorecard einzusehen, muss Ihnen der Administrator die erforderliche Berechtigung erteilen.',\n 'entitiesPage.metricProviderNotRegistered':\n 'Metrik-Anbieter mit ID {{metricId}} ist nicht registriert.',\n 'entitiesPage.entitiesTable.title': 'Elemente',\n 'entitiesPage.entitiesTable.unavailable': 'Nicht verfügbar',\n 'entitiesPage.entitiesTable.titleWithCount': 'Elemente ({{count}})',\n 'entitiesPage.entitiesTable.header.status': 'Status',\n 'entitiesPage.entitiesTable.header.value': 'Wert',\n 'entitiesPage.entitiesTable.header.entity': 'Element',\n 'entitiesPage.entitiesTable.header.owner': 'Eigentümer',\n 'entitiesPage.entitiesTable.header.kind': 'Art',\n 'entitiesPage.entitiesTable.header.lastUpdated': 'Zuletzt aktualisiert',\n 'entitiesPage.entitiesTable.footer.allRows': 'Alle Zeilen',\n 'entitiesPage.entitiesTable.footer.rows_one': '{{count}} Zeile',\n 'entitiesPage.entitiesTable.footer.rows_other': '{{count}} Zeilen',\n 'entitiesPage.entitiesTable.footer.of': 'von',\n },\n});\n\nexport default scorecardTranslationDe;\n"],"names":[],"mappings":"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"}
|
|
@@ -53,6 +53,9 @@ const scorecardTranslationEs = createTranslationMessages({
|
|
|
53
53
|
"metric.averageLegendTooltipEntitiesEach_one": "{{count}} entidad, cada una {{score}}",
|
|
54
54
|
"metric.averageLegendTooltipEntitiesEach_other": "{{count}} entidades, cada una {{score}}",
|
|
55
55
|
"metric.averageLegendTooltipRowTotal": "Puntuaci\xF3n total {{total}}",
|
|
56
|
+
"metric.drillDownCalculationFailures": "Una o m\xE1s entidades fallaron al calcular esta m\xE9trica.",
|
|
57
|
+
"metric.homepageEntityHealthRatio": "{{healthy}}/{{total}} entidades",
|
|
58
|
+
"metric.homepageEntityCalculationHealth": "{{healthy}} / {{total}} entidades sin errores de c\xE1lculo de m\xE9trica",
|
|
56
59
|
// Threshold translations
|
|
57
60
|
"thresholds.success": "\xC9xito",
|
|
58
61
|
"thresholds.warning": "Advertencia",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"es.esm.js","sources":["../../src/translations/es.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { scorecardTranslationRef } from './ref';\n\n/**\n * es translation for plugin.scorecard.\n * @public\n */\nconst scorecardTranslationEs = createTranslationMessages({\n ref: scorecardTranslationRef,\n messages: {\n // Empty state translations\n 'emptyState.title': 'Aún no se agregaron tarjetas de puntuación',\n 'emptyState.description':\n 'Las tarjetas de puntuación ayudan a monitorear el estado del componente de un vistazo. Para comenzar, explore la documentación para obtener pautas de configuración.',\n 'emptyState.button': 'Ver documentación',\n 'emptyState.altText': 'No hay tarjetas de puntuación',\n\n // Permission required translations\n 'permissionRequired.title': 'Permiso faltante',\n 'permissionRequired.description':\n 'Para ver el complemento de tarjetas de puntuación, comuníquese con su administrador para que le otorgue el permiso {{permission}}.',\n 'permissionRequired.button': 'Leer más',\n 'permissionRequired.altText': 'Permiso requerido',\n\n // Common UI\n 'common.loading': 'Cargando',\n\n // Not found state\n 'notFound.title': '404 No pudimos encontrar esa página',\n 'notFound.description':\n 'Intente agregar un archivo {{indexFile}} en la raíz del directorio de documentación de este repositorio.',\n 'notFound.readMore': 'Leer más',\n 'notFound.goBack': 'Volver',\n 'notFound.contactSupport': 'Contactar soporte',\n 'notFound.altText': 'Página no encontrada',\n\n // Error messages\n 'errors.entityMissingProperties':\n 'Entidad a la que le faltan las propiedades requeridas para la búsqueda en la tarjeta de puntuación',\n 'errors.missingAggregationId':\n 'El cuadro de mando está mal configurado; no se ha proporcionado la propiedad «ID de agregación» (o «ID de métrica»)',\n 'errors.invalidApiResponse':\n 'Formato de respuesta no válido de la API de la tarjeta de puntuación',\n 'errors.fetchError':\n 'Error al extraer las tarjetas de puntuación: {{error}}',\n 'errors.metricDataUnavailable': 'Datos de métricas no disponibles',\n 'errors.invalidThresholds': 'Umbrales no válidos',\n 'errors.missingPermission': 'Permiso faltante',\n 'errors.noDataFound': 'No se encontraron datos',\n 'errors.authenticationError': 'Error de autenticación',\n 'errors.missingPermissionMessage':\n 'Para ver las métricas de la tarjeta de puntuación, su administrador debe otorgarle el permiso requerido.',\n 'errors.userNotFoundInCatalogMessage':\n 'Entidad de usuario no encontrada en el catálogo',\n 'errors.noDataFoundMessage':\n 'Para ver tus datos aquí, comprueba que tus entidades estén reportando valores relacionados con esta métrica.',\n 'errors.unsupportedAggregationType':\n 'Esta scorecard usa un tipo de agregación no admitido en esta versión del plugin.',\n 'errors.authenticationErrorMessage': 'Inicie sesión para ver sus datos.',\n\n // Metric translations\n 'metric.github.open_prs.title': 'GitHub PRs abiertas',\n 'metric.github.open_prs.description':\n 'Recuento actual de Pull Requests abiertas para un repositorio de GitHub dado.',\n 'metric.jira.open_issues.title': 'Jira tickets bloqueantes abiertos',\n 'metric.jira.open_issues.description':\n 'Destaca el número de problemas críticos y bloqueantes que están actualmente abiertos en Jira.',\n 'metric.filecheck.title': 'Verificación de archivo: {{name}}',\n 'metric.filecheck.description':\n 'Verifica si el archivo {{name}} existe en el repositorio.',\n 'metric.lastUpdated': 'Última actualización: {{timestamp}}',\n 'metric.lastUpdatedNotAvailable': 'Última actualización: No disponible',\n 'metric.someEntitiesNotReportingValues':\n 'Algunas entidades no están reportando valores relacionados con esta métrica.',\n 'metric.averageCenterTooltipTotalLabel': 'Puntuación total',\n 'metric.averageCenterTooltipMaxLabel': 'Puntuación máxima posible',\n 'metric.averageLegendTooltipEntitiesEach_one':\n '{{count}} entidad, cada una {{score}}',\n 'metric.averageLegendTooltipEntitiesEach_other':\n '{{count}} entidades, cada una {{score}}',\n 'metric.averageLegendTooltipRowTotal': 'Puntuación total {{total}}',\n\n // Threshold translations\n 'thresholds.success': 'Éxito',\n 'thresholds.warning': 'Advertencia',\n 'thresholds.error': 'Error',\n 'thresholds.exist': 'Existe',\n 'thresholds.missing': 'Faltante',\n 'thresholds.noEntities': 'No hay entidades en el estado {{category}}',\n 'thresholds.entities_one': '{{count}} entidad',\n 'thresholds.entities_other': '{{count}} entidades',\n\n // Entities page translations\n 'entitiesPage.unknownMetric': 'Métrica desconocida',\n 'entitiesPage.noDataFound':\n 'Para ver tus datos aquí, comprueba que tus entidades estén reportando valores relacionados con esta métrica.',\n 'entitiesPage.missingPermission':\n 'Para ver las métricas de scorecard, tu administrador debe otorgarle el permiso requerido.',\n 'entitiesPage.metricProviderNotRegistered':\n 'Proveedor de métrica con ID {{metricId}} no registrado.',\n 'entitiesPage.entitiesTable.title': 'Entidades',\n 'entitiesPage.entitiesTable.unavailable': 'No disponible',\n 'entitiesPage.entitiesTable.titleWithCount': 'Entidades ({{count}})',\n 'entitiesPage.entitiesTable.header.status': 'Estado',\n 'entitiesPage.entitiesTable.header.value': 'Valor',\n 'entitiesPage.entitiesTable.header.entity': 'Entidad',\n 'entitiesPage.entitiesTable.header.owner': 'Propietario',\n 'entitiesPage.entitiesTable.header.kind': 'Tipo',\n 'entitiesPage.entitiesTable.header.lastUpdated': 'Última actualización',\n 'entitiesPage.entitiesTable.footer.allRows': 'Todas las filas',\n 'entitiesPage.entitiesTable.footer.rows_one': '{{count}} fila',\n 'entitiesPage.entitiesTable.footer.rows_other': '{{count}} filas',\n 'entitiesPage.entitiesTable.footer.of': 'de',\n },\n});\n\nexport default scorecardTranslationEs;\n"],"names":[],"mappings":";;;AAuBA,MAAM,yBAAyB,yBAA0B,CAAA;AAAA,EACvD,GAAK,EAAA,uBAAA;AAAA,EACL,QAAU,EAAA;AAAA;AAAA,IAER,kBAAoB,EAAA,kDAAA;AAAA,IACpB,wBACE,EAAA,+KAAA;AAAA,IACF,mBAAqB,EAAA,sBAAA;AAAA,IACrB,oBAAsB,EAAA,kCAAA;AAAA;AAAA,IAGtB,0BAA4B,EAAA,kBAAA;AAAA,IAC5B,gCACE,EAAA,0IAAA;AAAA,IACF,2BAA6B,EAAA,aAAA;AAAA,IAC7B,4BAA8B,EAAA,mBAAA;AAAA;AAAA,IAG9B,gBAAkB,EAAA,UAAA;AAAA;AAAA,IAGlB,gBAAkB,EAAA,wCAAA;AAAA,IAClB,sBACE,EAAA,gHAAA;AAAA,IACF,mBAAqB,EAAA,aAAA;AAAA,IACrB,iBAAmB,EAAA,QAAA;AAAA,IACnB,yBAA2B,EAAA,mBAAA;AAAA,IAC3B,kBAAoB,EAAA,yBAAA;AAAA;AAAA,IAGpB,gCACE,EAAA,0GAAA;AAAA,IACF,6BACE,EAAA,0IAAA;AAAA,IACF,2BACE,EAAA,4EAAA;AAAA,IACF,mBACE,EAAA,2DAAA;AAAA,IACF,8BAAgC,EAAA,qCAAA;AAAA,IAChC,0BAA4B,EAAA,wBAAA;AAAA,IAC5B,0BAA4B,EAAA,kBAAA;AAAA,IAC5B,oBAAsB,EAAA,yBAAA;AAAA,IACtB,4BAA8B,EAAA,2BAAA;AAAA,IAC9B,iCACE,EAAA,gHAAA;AAAA,IACF,qCACE,EAAA,oDAAA;AAAA,IACF,2BACE,EAAA,uHAAA;AAAA,IACF,mCACE,EAAA,wFAAA;AAAA,IACF,mCAAqC,EAAA,sCAAA;AAAA;AAAA,IAGrC,8BAAgC,EAAA,qBAAA;AAAA,IAChC,oCACE,EAAA,+EAAA;AAAA,IACF,+BAAiC,EAAA,mCAAA;AAAA,IACjC,qCACE,EAAA,wGAAA;AAAA,IACF,wBAA0B,EAAA,sCAAA;AAAA,IAC1B,8BACE,EAAA,2DAAA;AAAA,IACF,oBAAsB,EAAA,2CAAA;AAAA,IACtB,gCAAkC,EAAA,2CAAA;AAAA,IAClC,uCACE,EAAA,oFAAA;AAAA,IACF,uCAAyC,EAAA,qBAAA;AAAA,IACzC,qCAAuC,EAAA,iCAAA;AAAA,IACvC,6CACE,EAAA,uCAAA;AAAA,IACF,+CACE,EAAA,yCAAA;AAAA,IACF,qCAAuC,EAAA,+BAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"es.esm.js","sources":["../../src/translations/es.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { scorecardTranslationRef } from './ref';\n\n/**\n * es translation for plugin.scorecard.\n * @public\n */\nconst scorecardTranslationEs = createTranslationMessages({\n ref: scorecardTranslationRef,\n messages: {\n // Empty state translations\n 'emptyState.title': 'Aún no se agregaron tarjetas de puntuación',\n 'emptyState.description':\n 'Las tarjetas de puntuación ayudan a monitorear el estado del componente de un vistazo. Para comenzar, explore la documentación para obtener pautas de configuración.',\n 'emptyState.button': 'Ver documentación',\n 'emptyState.altText': 'No hay tarjetas de puntuación',\n\n // Permission required translations\n 'permissionRequired.title': 'Permiso faltante',\n 'permissionRequired.description':\n 'Para ver el complemento de tarjetas de puntuación, comuníquese con su administrador para que le otorgue el permiso {{permission}}.',\n 'permissionRequired.button': 'Leer más',\n 'permissionRequired.altText': 'Permiso requerido',\n\n // Common UI\n 'common.loading': 'Cargando',\n\n // Not found state\n 'notFound.title': '404 No pudimos encontrar esa página',\n 'notFound.description':\n 'Intente agregar un archivo {{indexFile}} en la raíz del directorio de documentación de este repositorio.',\n 'notFound.readMore': 'Leer más',\n 'notFound.goBack': 'Volver',\n 'notFound.contactSupport': 'Contactar soporte',\n 'notFound.altText': 'Página no encontrada',\n\n // Error messages\n 'errors.entityMissingProperties':\n 'Entidad a la que le faltan las propiedades requeridas para la búsqueda en la tarjeta de puntuación',\n 'errors.missingAggregationId':\n 'El cuadro de mando está mal configurado; no se ha proporcionado la propiedad «ID de agregación» (o «ID de métrica»)',\n 'errors.invalidApiResponse':\n 'Formato de respuesta no válido de la API de la tarjeta de puntuación',\n 'errors.fetchError':\n 'Error al extraer las tarjetas de puntuación: {{error}}',\n 'errors.metricDataUnavailable': 'Datos de métricas no disponibles',\n 'errors.invalidThresholds': 'Umbrales no válidos',\n 'errors.missingPermission': 'Permiso faltante',\n 'errors.noDataFound': 'No se encontraron datos',\n 'errors.authenticationError': 'Error de autenticación',\n 'errors.missingPermissionMessage':\n 'Para ver las métricas de la tarjeta de puntuación, su administrador debe otorgarle el permiso requerido.',\n 'errors.userNotFoundInCatalogMessage':\n 'Entidad de usuario no encontrada en el catálogo',\n 'errors.noDataFoundMessage':\n 'Para ver tus datos aquí, comprueba que tus entidades estén reportando valores relacionados con esta métrica.',\n 'errors.unsupportedAggregationType':\n 'Esta scorecard usa un tipo de agregación no admitido en esta versión del plugin.',\n 'errors.authenticationErrorMessage': 'Inicie sesión para ver sus datos.',\n\n // Metric translations\n 'metric.github.open_prs.title': 'GitHub PRs abiertas',\n 'metric.github.open_prs.description':\n 'Recuento actual de Pull Requests abiertas para un repositorio de GitHub dado.',\n 'metric.jira.open_issues.title': 'Jira tickets bloqueantes abiertos',\n 'metric.jira.open_issues.description':\n 'Destaca el número de problemas críticos y bloqueantes que están actualmente abiertos en Jira.',\n 'metric.filecheck.title': 'Verificación de archivo: {{name}}',\n 'metric.filecheck.description':\n 'Verifica si el archivo {{name}} existe en el repositorio.',\n 'metric.lastUpdated': 'Última actualización: {{timestamp}}',\n 'metric.lastUpdatedNotAvailable': 'Última actualización: No disponible',\n 'metric.someEntitiesNotReportingValues':\n 'Algunas entidades no están reportando valores relacionados con esta métrica.',\n 'metric.averageCenterTooltipTotalLabel': 'Puntuación total',\n 'metric.averageCenterTooltipMaxLabel': 'Puntuación máxima posible',\n 'metric.averageLegendTooltipEntitiesEach_one':\n '{{count}} entidad, cada una {{score}}',\n 'metric.averageLegendTooltipEntitiesEach_other':\n '{{count}} entidades, cada una {{score}}',\n 'metric.averageLegendTooltipRowTotal': 'Puntuación total {{total}}',\n 'metric.drillDownCalculationFailures':\n 'Una o más entidades fallaron al calcular esta métrica.',\n 'metric.homepageEntityHealthRatio': '{{healthy}}/{{total}} entidades',\n 'metric.homepageEntityCalculationHealth':\n '{{healthy}} / {{total}} entidades sin errores de cálculo de métrica',\n\n // Threshold translations\n 'thresholds.success': 'Éxito',\n 'thresholds.warning': 'Advertencia',\n 'thresholds.error': 'Error',\n 'thresholds.exist': 'Existe',\n 'thresholds.missing': 'Faltante',\n 'thresholds.noEntities': 'No hay entidades en el estado {{category}}',\n 'thresholds.entities_one': '{{count}} entidad',\n 'thresholds.entities_other': '{{count}} entidades',\n\n // Entities page translations\n 'entitiesPage.unknownMetric': 'Métrica desconocida',\n 'entitiesPage.noDataFound':\n 'Para ver tus datos aquí, comprueba que tus entidades estén reportando valores relacionados con esta métrica.',\n 'entitiesPage.missingPermission':\n 'Para ver las métricas de scorecard, tu administrador debe otorgarle el permiso requerido.',\n 'entitiesPage.metricProviderNotRegistered':\n 'Proveedor de métrica con ID {{metricId}} no registrado.',\n 'entitiesPage.entitiesTable.title': 'Entidades',\n 'entitiesPage.entitiesTable.unavailable': 'No disponible',\n 'entitiesPage.entitiesTable.titleWithCount': 'Entidades ({{count}})',\n 'entitiesPage.entitiesTable.header.status': 'Estado',\n 'entitiesPage.entitiesTable.header.value': 'Valor',\n 'entitiesPage.entitiesTable.header.entity': 'Entidad',\n 'entitiesPage.entitiesTable.header.owner': 'Propietario',\n 'entitiesPage.entitiesTable.header.kind': 'Tipo',\n 'entitiesPage.entitiesTable.header.lastUpdated': 'Última actualización',\n 'entitiesPage.entitiesTable.footer.allRows': 'Todas las filas',\n 'entitiesPage.entitiesTable.footer.rows_one': '{{count}} fila',\n 'entitiesPage.entitiesTable.footer.rows_other': '{{count}} filas',\n 'entitiesPage.entitiesTable.footer.of': 'de',\n },\n});\n\nexport default scorecardTranslationEs;\n"],"names":[],"mappings":"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"}
|
|
@@ -53,6 +53,9 @@ const scorecardTranslationFr = createTranslationMessages({
|
|
|
53
53
|
"metric.averageLegendTooltipEntitiesEach_one": "{{count}} entit\xE9, chacune {{score}}",
|
|
54
54
|
"metric.averageLegendTooltipEntitiesEach_other": "{{count}} entit\xE9s, chacune {{score}}",
|
|
55
55
|
"metric.averageLegendTooltipRowTotal": "Score total {{total}}",
|
|
56
|
+
"metric.drillDownCalculationFailures": "Le calcul de cette m\xE9trique a \xE9chou\xE9 pour une ou plusieurs entit\xE9s.",
|
|
57
|
+
"metric.homepageEntityHealthRatio": "{{healthy}}/{{total}} entit\xE9s",
|
|
58
|
+
"metric.homepageEntityCalculationHealth": "{{healthy}} / {{total}} entit\xE9s sans erreur de calcul de m\xE9trique",
|
|
56
59
|
// Threshold translations
|
|
57
60
|
"thresholds.success": "Succ\xE8s",
|
|
58
61
|
"thresholds.warning": "Attention",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fr.esm.js","sources":["../../src/translations/fr.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { scorecardTranslationRef } from './ref';\n\n/**\n * fr translation for plugin.scorecard.\n * @public\n */\nconst scorecardTranslationFr = createTranslationMessages({\n ref: scorecardTranslationRef,\n messages: {\n // Empty state translations\n 'emptyState.title': \"Aucune carte de score n'a encore été ajoutée\",\n 'emptyState.description':\n 'Les tableaux de bord vous aident à surveiller l’état des composants en un coup d’œil. Pour commencer, explorez notre documentation pour obtenir des instructions de configuration.',\n 'emptyState.button': 'Voir la documentation',\n 'emptyState.altText': 'Pas de tableau de bord',\n\n // Permission required translations\n 'permissionRequired.title': 'Autorisations manquantes',\n 'permissionRequired.description':\n \"Pour afficher le plugin Scorecard, contactez votre administrateur pour lui accorder l'autorisation {{permission}}.\",\n 'permissionRequired.button': 'En savoir plus',\n 'permissionRequired.altText': 'Autorisation requise',\n\n // Common UI\n 'common.loading': 'Chargement',\n\n // Not found state\n 'notFound.title': \"404 Nous n'avons pas trouvé cette page\",\n 'notFound.description':\n \"Essayez d'ajouter un fichier {{indexFile}} à la racine du répertoire docs de ce dépôt.\",\n 'notFound.readMore': 'En savoir plus',\n 'notFound.goBack': 'Retour',\n 'notFound.contactSupport': 'Contacter le support',\n 'notFound.altText': 'Page introuvable',\n\n // Error messages\n 'errors.entityMissingProperties':\n \"Entité manquant les propriétés requises pour la recherche dans la fiche d'évaluation\",\n 'errors.missingAggregationId':\n \"La fiche de suivi est mal configurée ; la propriété « ID d'agrégation » (ou « ID de métrique ») n'est pas fournie\",\n 'errors.invalidApiResponse':\n \"Format de réponse non valide de l'API de scorecard\",\n 'errors.fetchError':\n 'Erreur lors de la récupération des tableaux de bord : {{error}}',\n 'errors.metricDataUnavailable': 'Données métriques indisponibles',\n 'errors.invalidThresholds': 'Seuils invalides',\n 'errors.missingPermission': 'Permission manquante',\n 'errors.noDataFound': 'Aucune donnée trouvée',\n 'errors.authenticationError': \"Erreur d'authentification\",\n 'errors.missingPermissionMessage':\n 'Pour voir les métriques de scorecard, votre administrateur doit vous donner la permission requise.',\n 'errors.userNotFoundInCatalogMessage':\n 'Entité utilisateur non trouvée dans le catalogue',\n 'errors.noDataFoundMessage':\n 'Pour voir vos données ici, vérifiez que vos entités communiquent les valeurs liées à cet indicateur.',\n 'errors.unsupportedAggregationType':\n \"Cette fiche d'évaluation utilise un type d'agrégation non pris en charge par cette version du plugin.\",\n 'errors.authenticationErrorMessage':\n 'Veuillez vous connecter pour afficher vos données.',\n\n // Metric translations\n 'metric.github.open_prs.title': 'GitHub ouvre des PR',\n 'metric.github.open_prs.description':\n \"Nombre actuel de requêtes d'extraction ouvertes pour un référentiel GitHub donné.\",\n 'metric.jira.open_issues.title': 'Jira ouvre des tickets bloquants',\n 'metric.jira.open_issues.description':\n 'Met en évidence le nombre de problèmes critiques et bloquants actuellement ouverts dans Jira.',\n 'metric.filecheck.title': 'Vérification de fichier : {{name}}',\n 'metric.filecheck.description':\n 'Vérifie si le fichier {{name}} existe dans le dépôt.',\n 'metric.lastUpdated': 'Dernière mise à jour: {{timestamp}}',\n 'metric.lastUpdatedNotAvailable': 'Dernière mise à jour: Non disponible',\n 'metric.someEntitiesNotReportingValues':\n 'Certaines entités ne communiquent pas de valeurs liées à cette métrique.',\n 'metric.averageCenterTooltipTotalLabel': 'Score total',\n 'metric.averageCenterTooltipMaxLabel': 'Score maximum possible',\n 'metric.averageLegendTooltipEntitiesEach_one':\n '{{count}} entité, chacune {{score}}',\n 'metric.averageLegendTooltipEntitiesEach_other':\n '{{count}} entités, chacune {{score}}',\n 'metric.averageLegendTooltipRowTotal': 'Score total {{total}}',\n\n // Threshold translations\n 'thresholds.success': 'Succès',\n 'thresholds.warning': 'Attention',\n 'thresholds.error': 'Erreur',\n 'thresholds.exist': 'Existant',\n 'thresholds.missing': 'Manquant',\n 'thresholds.noEntities': \"Aucune entité dans l'état {{category}}\",\n 'thresholds.entities_one': '{{count}} entité',\n 'thresholds.entities_other': '{{count}} entités',\n\n // Entities page translations\n 'entitiesPage.unknownMetric': 'Métrique inconnue',\n 'entitiesPage.noDataFound':\n 'Pour voir vos données ici, vérifiez que vos entités communiquent les valeurs liées à cet indicateur.',\n 'entitiesPage.missingPermission':\n 'Pour voir les métriques de scorecard, votre administrateur doit vous donner la permission requise.',\n 'entitiesPage.metricProviderNotRegistered':\n 'Fournisseur de métrique avec ID {{metricId}} non enregistré.',\n 'entitiesPage.entitiesTable.title': 'Entités',\n 'entitiesPage.entitiesTable.unavailable': 'Non disponible',\n 'entitiesPage.entitiesTable.titleWithCount': 'Entités ({{count}})',\n 'entitiesPage.entitiesTable.header.status': 'Statut',\n 'entitiesPage.entitiesTable.header.value': 'Valeur',\n 'entitiesPage.entitiesTable.header.entity': 'Entité',\n 'entitiesPage.entitiesTable.header.owner': 'Propriétaire',\n 'entitiesPage.entitiesTable.header.kind': 'Type',\n 'entitiesPage.entitiesTable.header.lastUpdated': 'Dernière mise à jour',\n 'entitiesPage.entitiesTable.footer.allRows': 'Toutes les lignes',\n 'entitiesPage.entitiesTable.footer.rows_one': '{{count}} ligne',\n 'entitiesPage.entitiesTable.footer.rows_other': '{{count}} lignes',\n 'entitiesPage.entitiesTable.footer.of': 'de',\n },\n});\n\nexport default scorecardTranslationFr;\n"],"names":[],"mappings":";;;AAuBA,MAAM,yBAAyB,yBAA0B,CAAA;AAAA,EACvD,GAAK,EAAA,uBAAA;AAAA,EACL,QAAU,EAAA;AAAA;AAAA,IAER,kBAAoB,EAAA,uDAAA;AAAA,IACpB,wBACE,EAAA,yMAAA;AAAA,IACF,mBAAqB,EAAA,uBAAA;AAAA,IACrB,oBAAsB,EAAA,wBAAA;AAAA;AAAA,IAGtB,0BAA4B,EAAA,0BAAA;AAAA,IAC5B,gCACE,EAAA,oHAAA;AAAA,IACF,2BAA6B,EAAA,gBAAA;AAAA,IAC7B,4BAA8B,EAAA,sBAAA;AAAA;AAAA,IAG9B,gBAAkB,EAAA,YAAA;AAAA;AAAA,IAGlB,gBAAkB,EAAA,2CAAA;AAAA,IAClB,sBACE,EAAA,oGAAA;AAAA,IACF,mBAAqB,EAAA,gBAAA;AAAA,IACrB,iBAAmB,EAAA,QAAA;AAAA,IACnB,yBAA2B,EAAA,sBAAA;AAAA,IAC3B,kBAAoB,EAAA,kBAAA;AAAA;AAAA,IAGpB,gCACE,EAAA,kGAAA;AAAA,IACF,6BACE,EAAA,8IAAA;AAAA,IACF,2BACE,EAAA,uDAAA;AAAA,IACF,mBACE,EAAA,0EAAA;AAAA,IACF,8BAAgC,EAAA,uCAAA;AAAA,IAChC,0BAA4B,EAAA,kBAAA;AAAA,IAC5B,0BAA4B,EAAA,sBAAA;AAAA,IAC5B,oBAAsB,EAAA,6BAAA;AAAA,IACtB,4BAA8B,EAAA,2BAAA;AAAA,IAC9B,iCACE,EAAA,uGAAA;AAAA,IACF,qCACE,EAAA,wDAAA;AAAA,IACF,2BACE,EAAA,qHAAA;AAAA,IACF,mCACE,EAAA,6GAAA;AAAA,IACF,mCACE,EAAA,uDAAA;AAAA;AAAA,IAGF,8BAAgC,EAAA,qBAAA;AAAA,IAChC,oCACE,EAAA,+FAAA;AAAA,IACF,+BAAiC,EAAA,kCAAA;AAAA,IACjC,qCACE,EAAA,qGAAA;AAAA,IACF,wBAA0B,EAAA,uCAAA;AAAA,IAC1B,8BACE,EAAA,+DAAA;AAAA,IACF,oBAAsB,EAAA,2CAAA;AAAA,IACtB,gCAAkC,EAAA,4CAAA;AAAA,IAClC,uCACE,EAAA,sFAAA;AAAA,IACF,uCAAyC,EAAA,aAAA;AAAA,IACzC,qCAAuC,EAAA,wBAAA;AAAA,IACvC,6CACE,EAAA,wCAAA;AAAA,IACF,+CACE,EAAA,yCAAA;AAAA,IACF,qCAAuC,EAAA,uBAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"fr.esm.js","sources":["../../src/translations/fr.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { scorecardTranslationRef } from './ref';\n\n/**\n * fr translation for plugin.scorecard.\n * @public\n */\nconst scorecardTranslationFr = createTranslationMessages({\n ref: scorecardTranslationRef,\n messages: {\n // Empty state translations\n 'emptyState.title': \"Aucune carte de score n'a encore été ajoutée\",\n 'emptyState.description':\n 'Les tableaux de bord vous aident à surveiller l’état des composants en un coup d’œil. Pour commencer, explorez notre documentation pour obtenir des instructions de configuration.',\n 'emptyState.button': 'Voir la documentation',\n 'emptyState.altText': 'Pas de tableau de bord',\n\n // Permission required translations\n 'permissionRequired.title': 'Autorisations manquantes',\n 'permissionRequired.description':\n \"Pour afficher le plugin Scorecard, contactez votre administrateur pour lui accorder l'autorisation {{permission}}.\",\n 'permissionRequired.button': 'En savoir plus',\n 'permissionRequired.altText': 'Autorisation requise',\n\n // Common UI\n 'common.loading': 'Chargement',\n\n // Not found state\n 'notFound.title': \"404 Nous n'avons pas trouvé cette page\",\n 'notFound.description':\n \"Essayez d'ajouter un fichier {{indexFile}} à la racine du répertoire docs de ce dépôt.\",\n 'notFound.readMore': 'En savoir plus',\n 'notFound.goBack': 'Retour',\n 'notFound.contactSupport': 'Contacter le support',\n 'notFound.altText': 'Page introuvable',\n\n // Error messages\n 'errors.entityMissingProperties':\n \"Entité manquant les propriétés requises pour la recherche dans la fiche d'évaluation\",\n 'errors.missingAggregationId':\n \"La fiche de suivi est mal configurée ; la propriété « ID d'agrégation » (ou « ID de métrique ») n'est pas fournie\",\n 'errors.invalidApiResponse':\n \"Format de réponse non valide de l'API de scorecard\",\n 'errors.fetchError':\n 'Erreur lors de la récupération des tableaux de bord : {{error}}',\n 'errors.metricDataUnavailable': 'Données métriques indisponibles',\n 'errors.invalidThresholds': 'Seuils invalides',\n 'errors.missingPermission': 'Permission manquante',\n 'errors.noDataFound': 'Aucune donnée trouvée',\n 'errors.authenticationError': \"Erreur d'authentification\",\n 'errors.missingPermissionMessage':\n 'Pour voir les métriques de scorecard, votre administrateur doit vous donner la permission requise.',\n 'errors.userNotFoundInCatalogMessage':\n 'Entité utilisateur non trouvée dans le catalogue',\n 'errors.noDataFoundMessage':\n 'Pour voir vos données ici, vérifiez que vos entités communiquent les valeurs liées à cet indicateur.',\n 'errors.unsupportedAggregationType':\n \"Cette fiche d'évaluation utilise un type d'agrégation non pris en charge par cette version du plugin.\",\n 'errors.authenticationErrorMessage':\n 'Veuillez vous connecter pour afficher vos données.',\n\n // Metric translations\n 'metric.github.open_prs.title': 'GitHub ouvre des PR',\n 'metric.github.open_prs.description':\n \"Nombre actuel de requêtes d'extraction ouvertes pour un référentiel GitHub donné.\",\n 'metric.jira.open_issues.title': 'Jira ouvre des tickets bloquants',\n 'metric.jira.open_issues.description':\n 'Met en évidence le nombre de problèmes critiques et bloquants actuellement ouverts dans Jira.',\n 'metric.filecheck.title': 'Vérification de fichier : {{name}}',\n 'metric.filecheck.description':\n 'Vérifie si le fichier {{name}} existe dans le dépôt.',\n 'metric.lastUpdated': 'Dernière mise à jour: {{timestamp}}',\n 'metric.lastUpdatedNotAvailable': 'Dernière mise à jour: Non disponible',\n 'metric.someEntitiesNotReportingValues':\n 'Certaines entités ne communiquent pas de valeurs liées à cette métrique.',\n 'metric.averageCenterTooltipTotalLabel': 'Score total',\n 'metric.averageCenterTooltipMaxLabel': 'Score maximum possible',\n 'metric.averageLegendTooltipEntitiesEach_one':\n '{{count}} entité, chacune {{score}}',\n 'metric.averageLegendTooltipEntitiesEach_other':\n '{{count}} entités, chacune {{score}}',\n 'metric.averageLegendTooltipRowTotal': 'Score total {{total}}',\n 'metric.drillDownCalculationFailures':\n 'Le calcul de cette métrique a échoué pour une ou plusieurs entités.',\n 'metric.homepageEntityHealthRatio': '{{healthy}}/{{total}} entités',\n 'metric.homepageEntityCalculationHealth':\n '{{healthy}} / {{total}} entités sans erreur de calcul de métrique',\n\n // Threshold translations\n 'thresholds.success': 'Succès',\n 'thresholds.warning': 'Attention',\n 'thresholds.error': 'Erreur',\n 'thresholds.exist': 'Existant',\n 'thresholds.missing': 'Manquant',\n 'thresholds.noEntities': \"Aucune entité dans l'état {{category}}\",\n 'thresholds.entities_one': '{{count}} entité',\n 'thresholds.entities_other': '{{count}} entités',\n\n // Entities page translations\n 'entitiesPage.unknownMetric': 'Métrique inconnue',\n 'entitiesPage.noDataFound':\n 'Pour voir vos données ici, vérifiez que vos entités communiquent les valeurs liées à cet indicateur.',\n 'entitiesPage.missingPermission':\n 'Pour voir les métriques de scorecard, votre administrateur doit vous donner la permission requise.',\n 'entitiesPage.metricProviderNotRegistered':\n 'Fournisseur de métrique avec ID {{metricId}} non enregistré.',\n 'entitiesPage.entitiesTable.title': 'Entités',\n 'entitiesPage.entitiesTable.unavailable': 'Non disponible',\n 'entitiesPage.entitiesTable.titleWithCount': 'Entités ({{count}})',\n 'entitiesPage.entitiesTable.header.status': 'Statut',\n 'entitiesPage.entitiesTable.header.value': 'Valeur',\n 'entitiesPage.entitiesTable.header.entity': 'Entité',\n 'entitiesPage.entitiesTable.header.owner': 'Propriétaire',\n 'entitiesPage.entitiesTable.header.kind': 'Type',\n 'entitiesPage.entitiesTable.header.lastUpdated': 'Dernière mise à jour',\n 'entitiesPage.entitiesTable.footer.allRows': 'Toutes les lignes',\n 'entitiesPage.entitiesTable.footer.rows_one': '{{count}} ligne',\n 'entitiesPage.entitiesTable.footer.rows_other': '{{count}} lignes',\n 'entitiesPage.entitiesTable.footer.of': 'de',\n },\n});\n\nexport default scorecardTranslationFr;\n"],"names":[],"mappings":"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"}
|
|
@@ -53,6 +53,9 @@ const scorecardTranslationIt = createTranslationMessages({
|
|
|
53
53
|
"metric.averageLegendTooltipEntitiesEach_one": "{{count}} entit\xE0, ciascuna {{score}}",
|
|
54
54
|
"metric.averageLegendTooltipEntitiesEach_other": "{{count}} entit\xE0, ciascuna {{score}}",
|
|
55
55
|
"metric.averageLegendTooltipRowTotal": "Punteggio totale {{total}}",
|
|
56
|
+
"metric.drillDownCalculationFailures": "Il calcolo di questa metrica non \xE8 riuscito per una o pi\xF9 entit\xE0.",
|
|
57
|
+
"metric.homepageEntityHealthRatio": "{{healthy}}/{{total}} entit\xE0",
|
|
58
|
+
"metric.homepageEntityCalculationHealth": "{{healthy}} / {{total}} entit\xE0 senza errori di calcolo della metrica",
|
|
56
59
|
// Threshold translations
|
|
57
60
|
"thresholds.success": "Attivit\xE0 riuscita",
|
|
58
61
|
"thresholds.warning": "Avviso",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"it.esm.js","sources":["../../src/translations/it.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { scorecardTranslationRef } from './ref';\n\n/**\n * Italian translation for plugin.scorecard.\n * @public\n */\nconst scorecardTranslationIt = createTranslationMessages({\n ref: scorecardTranslationRef,\n messages: {\n // Empty state translations\n 'emptyState.title': 'Non è stata ancora aggiunta alcuna scheda punteggio',\n 'emptyState.description':\n \"Le schede punteggio aiutano a monitorare a colpo d'occhio l'integrità dei componenti. Per iniziare, consultare la documentazione per le linee guida di configurazione.\",\n 'emptyState.button': 'Visualizza la documentazione',\n 'emptyState.altText': 'Nessuna scheda punteggio',\n\n // Permission required translations\n 'permissionRequired.title': 'Autorizzazione mancante',\n 'permissionRequired.description':\n \"Per visualizzare il plugin Scorecard, contattare l'amministratore per richiedere l'autorizzazione {{permission}}.\",\n 'permissionRequired.button': 'Per saperne di più',\n 'permissionRequired.altText': 'Autorizzazione richiesta',\n\n // Common UI\n 'common.loading': 'Caricamento in corso',\n\n // Not found state\n 'notFound.title': '404 Pagina non trovata',\n 'notFound.description':\n 'Prova ad aggiungere un file {{indexFile}} nella root della directory docs di questo repository.',\n 'notFound.readMore': 'Scopri di più',\n 'notFound.goBack': 'Indietro',\n 'notFound.contactSupport': 'Contatta il supporto',\n 'notFound.altText': 'Pagina non trovata',\n\n // Error messages\n 'errors.entityMissingProperties':\n 'Entità priva delle proprietà richieste per la ricerca nella scheda punteggio',\n 'errors.missingAggregationId':\n 'La scheda di valutazione non è configurata correttamente; la proprietà ID aggregazione (o ID metrica) non è stata specificata',\n 'errors.invalidApiResponse':\n \"Formato di risposta non valido dall'API della scheda punteggio\",\n 'errors.fetchError':\n 'Errore durante il recupero delle schede punteggio: {{error}}',\n 'errors.metricDataUnavailable': 'Dati metrici non disponibili',\n 'errors.invalidThresholds': 'Soglie non valide',\n 'errors.missingPermission': 'Autorizzazione mancante',\n 'errors.noDataFound': 'Nessun dato trovato',\n 'errors.authenticationError': 'Errore di autenticazione',\n 'errors.missingPermissionMessage':\n \"Per visualizzare le metriche della scheda punteggio, il tuo amministratore deve concedere l'autorizzazione richiesta.\",\n 'errors.userNotFoundInCatalogMessage':\n 'Entità utente non trovata nel catalogo.',\n 'errors.noDataFoundMessage':\n 'Per visualizzare i tuoi dati qui, verifica che le tue entità stiano riportando valori relativi a questa metrica.',\n 'errors.unsupportedAggregationType':\n 'Questa scorecard utilizza un tipo di aggregazione non supportato da questa versione del plugin.',\n 'errors.authenticationErrorMessage':\n 'Effettua il login per visualizzare i tuoi dati.',\n\n // Metric translations\n 'metric.github.open_prs.title': 'Richieste pull aperte su GitHub',\n 'metric.github.open_prs.description':\n 'Conteggio attuale delle richieste pull aperte per uno specifico repository GitHub.',\n 'metric.jira.open_issues.title': 'Ticket di blocco Jira aperti',\n 'metric.jira.open_issues.description':\n 'Evidenzia il numero di problemi critici e di blocco attualmente aperti in Jira.',\n 'metric.filecheck.title': 'Verifica file: {{name}}',\n 'metric.filecheck.description':\n 'Verifica se il file {{name}} esiste nel repository.',\n 'metric.lastUpdated': 'Ultimo aggiornamento: {{timestamp}}',\n 'metric.lastUpdatedNotAvailable': 'Ultimo aggiornamento: Non disponibile',\n 'metric.someEntitiesNotReportingValues':\n 'Alcune entità non stanno riportando valori relativi a questa metrica.',\n 'metric.averageCenterTooltipTotalLabel': 'Punteggio totale',\n 'metric.averageCenterTooltipMaxLabel': 'Punteggio massimo possibile',\n 'metric.averageLegendTooltipEntitiesEach_one':\n '{{count}} entità, ciascuna {{score}}',\n 'metric.averageLegendTooltipEntitiesEach_other':\n '{{count}} entità, ciascuna {{score}}',\n 'metric.averageLegendTooltipRowTotal': 'Punteggio totale {{total}}',\n\n // Threshold translations\n 'thresholds.success': 'Attività riuscita',\n 'thresholds.warning': 'Avviso',\n 'thresholds.error': 'Errore',\n 'thresholds.exist': 'Esistente',\n 'thresholds.missing': 'Mancante',\n 'thresholds.noEntities': 'Nessuna entità con stato {{category}}',\n 'thresholds.entities_one': '{{count}} entità',\n 'thresholds.entities_other': '{{count}} entità',\n\n // Entities page translations\n 'entitiesPage.unknownMetric': 'Metrica sconosciuta',\n 'entitiesPage.noDataFound':\n 'Per visualizzare i tuoi dati qui, verifica che le tue entità stiano riportando valori relativi a questa metrica.',\n 'entitiesPage.missingPermission':\n \"Per visualizzare le metriche della scheda punteggio, il tuo amministratore deve concedere l'autorizzazione richiesta.\",\n 'entitiesPage.metricProviderNotRegistered':\n 'Provider di metrica con ID {{metricId}} non registrato.',\n 'entitiesPage.entitiesTable.title': 'Entità',\n 'entitiesPage.entitiesTable.unavailable': 'Non disponibile',\n 'entitiesPage.entitiesTable.titleWithCount': 'Entità ({{count}})',\n 'entitiesPage.entitiesTable.header.status': 'Stato',\n 'entitiesPage.entitiesTable.header.value': 'Valore',\n 'entitiesPage.entitiesTable.header.entity': 'Entità',\n 'entitiesPage.entitiesTable.header.owner': 'Proprietario',\n 'entitiesPage.entitiesTable.header.kind': 'Tipo',\n 'entitiesPage.entitiesTable.header.lastUpdated': 'Ultimo aggiornamento',\n 'entitiesPage.entitiesTable.footer.allRows': 'Tutte le righe',\n 'entitiesPage.entitiesTable.footer.rows_one': '{{count}} riga',\n 'entitiesPage.entitiesTable.footer.rows_other': '{{count}} righe',\n 'entitiesPage.entitiesTable.footer.of': 'di',\n },\n});\n\nexport default scorecardTranslationIt;\n"],"names":[],"mappings":";;;AAuBA,MAAM,yBAAyB,yBAA0B,CAAA;AAAA,EACvD,GAAK,EAAA,uBAAA;AAAA,EACL,QAAU,EAAA;AAAA;AAAA,IAER,kBAAoB,EAAA,wDAAA;AAAA,IACpB,wBACE,EAAA,2KAAA;AAAA,IACF,mBAAqB,EAAA,8BAAA;AAAA,IACrB,oBAAsB,EAAA,0BAAA;AAAA;AAAA,IAGtB,0BAA4B,EAAA,yBAAA;AAAA,IAC5B,gCACE,EAAA,mHAAA;AAAA,IACF,2BAA6B,EAAA,uBAAA;AAAA,IAC7B,4BAA8B,EAAA,0BAAA;AAAA;AAAA,IAG9B,gBAAkB,EAAA,sBAAA;AAAA;AAAA,IAGlB,gBAAkB,EAAA,wBAAA;AAAA,IAClB,sBACE,EAAA,iGAAA;AAAA,IACF,mBAAqB,EAAA,kBAAA;AAAA,IACrB,iBAAmB,EAAA,UAAA;AAAA,IACnB,yBAA2B,EAAA,sBAAA;AAAA,IAC3B,kBAAoB,EAAA,oBAAA;AAAA;AAAA,IAGpB,gCACE,EAAA,oFAAA;AAAA,IACF,6BACE,EAAA,wIAAA;AAAA,IACF,2BACE,EAAA,gEAAA;AAAA,IACF,mBACE,EAAA,8DAAA;AAAA,IACF,8BAAgC,EAAA,8BAAA;AAAA,IAChC,0BAA4B,EAAA,mBAAA;AAAA,IAC5B,0BAA4B,EAAA,yBAAA;AAAA,IAC5B,oBAAsB,EAAA,qBAAA;AAAA,IACtB,4BAA8B,EAAA,0BAAA;AAAA,IAC9B,iCACE,EAAA,uHAAA;AAAA,IACF,qCACE,EAAA,4CAAA;AAAA,IACF,2BACE,EAAA,qHAAA;AAAA,IACF,mCACE,EAAA,iGAAA;AAAA,IACF,mCACE,EAAA,iDAAA;AAAA;AAAA,IAGF,8BAAgC,EAAA,iCAAA;AAAA,IAChC,oCACE,EAAA,oFAAA;AAAA,IACF,+BAAiC,EAAA,8BAAA;AAAA,IACjC,qCACE,EAAA,iFAAA;AAAA,IACF,wBAA0B,EAAA,yBAAA;AAAA,IAC1B,8BACE,EAAA,qDAAA;AAAA,IACF,oBAAsB,EAAA,qCAAA;AAAA,IACtB,gCAAkC,EAAA,uCAAA;AAAA,IAClC,uCACE,EAAA,0EAAA;AAAA,IACF,uCAAyC,EAAA,kBAAA;AAAA,IACzC,qCAAuC,EAAA,6BAAA;AAAA,IACvC,6CACE,EAAA,yCAAA;AAAA,IACF,+CACE,EAAA,yCAAA;AAAA,IACF,qCAAuC,EAAA,4BAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"it.esm.js","sources":["../../src/translations/it.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { scorecardTranslationRef } from './ref';\n\n/**\n * Italian translation for plugin.scorecard.\n * @public\n */\nconst scorecardTranslationIt = createTranslationMessages({\n ref: scorecardTranslationRef,\n messages: {\n // Empty state translations\n 'emptyState.title': 'Non è stata ancora aggiunta alcuna scheda punteggio',\n 'emptyState.description':\n \"Le schede punteggio aiutano a monitorare a colpo d'occhio l'integrità dei componenti. Per iniziare, consultare la documentazione per le linee guida di configurazione.\",\n 'emptyState.button': 'Visualizza la documentazione',\n 'emptyState.altText': 'Nessuna scheda punteggio',\n\n // Permission required translations\n 'permissionRequired.title': 'Autorizzazione mancante',\n 'permissionRequired.description':\n \"Per visualizzare il plugin Scorecard, contattare l'amministratore per richiedere l'autorizzazione {{permission}}.\",\n 'permissionRequired.button': 'Per saperne di più',\n 'permissionRequired.altText': 'Autorizzazione richiesta',\n\n // Common UI\n 'common.loading': 'Caricamento in corso',\n\n // Not found state\n 'notFound.title': '404 Pagina non trovata',\n 'notFound.description':\n 'Prova ad aggiungere un file {{indexFile}} nella root della directory docs di questo repository.',\n 'notFound.readMore': 'Scopri di più',\n 'notFound.goBack': 'Indietro',\n 'notFound.contactSupport': 'Contatta il supporto',\n 'notFound.altText': 'Pagina non trovata',\n\n // Error messages\n 'errors.entityMissingProperties':\n 'Entità priva delle proprietà richieste per la ricerca nella scheda punteggio',\n 'errors.missingAggregationId':\n 'La scheda di valutazione non è configurata correttamente; la proprietà ID aggregazione (o ID metrica) non è stata specificata',\n 'errors.invalidApiResponse':\n \"Formato di risposta non valido dall'API della scheda punteggio\",\n 'errors.fetchError':\n 'Errore durante il recupero delle schede punteggio: {{error}}',\n 'errors.metricDataUnavailable': 'Dati metrici non disponibili',\n 'errors.invalidThresholds': 'Soglie non valide',\n 'errors.missingPermission': 'Autorizzazione mancante',\n 'errors.noDataFound': 'Nessun dato trovato',\n 'errors.authenticationError': 'Errore di autenticazione',\n 'errors.missingPermissionMessage':\n \"Per visualizzare le metriche della scheda punteggio, il tuo amministratore deve concedere l'autorizzazione richiesta.\",\n 'errors.userNotFoundInCatalogMessage':\n 'Entità utente non trovata nel catalogo.',\n 'errors.noDataFoundMessage':\n 'Per visualizzare i tuoi dati qui, verifica che le tue entità stiano riportando valori relativi a questa metrica.',\n 'errors.unsupportedAggregationType':\n 'Questa scorecard utilizza un tipo di aggregazione non supportato da questa versione del plugin.',\n 'errors.authenticationErrorMessage':\n 'Effettua il login per visualizzare i tuoi dati.',\n\n // Metric translations\n 'metric.github.open_prs.title': 'Richieste pull aperte su GitHub',\n 'metric.github.open_prs.description':\n 'Conteggio attuale delle richieste pull aperte per uno specifico repository GitHub.',\n 'metric.jira.open_issues.title': 'Ticket di blocco Jira aperti',\n 'metric.jira.open_issues.description':\n 'Evidenzia il numero di problemi critici e di blocco attualmente aperti in Jira.',\n 'metric.filecheck.title': 'Verifica file: {{name}}',\n 'metric.filecheck.description':\n 'Verifica se il file {{name}} esiste nel repository.',\n 'metric.lastUpdated': 'Ultimo aggiornamento: {{timestamp}}',\n 'metric.lastUpdatedNotAvailable': 'Ultimo aggiornamento: Non disponibile',\n 'metric.someEntitiesNotReportingValues':\n 'Alcune entità non stanno riportando valori relativi a questa metrica.',\n 'metric.averageCenterTooltipTotalLabel': 'Punteggio totale',\n 'metric.averageCenterTooltipMaxLabel': 'Punteggio massimo possibile',\n 'metric.averageLegendTooltipEntitiesEach_one':\n '{{count}} entità, ciascuna {{score}}',\n 'metric.averageLegendTooltipEntitiesEach_other':\n '{{count}} entità, ciascuna {{score}}',\n 'metric.averageLegendTooltipRowTotal': 'Punteggio totale {{total}}',\n 'metric.drillDownCalculationFailures':\n 'Il calcolo di questa metrica non è riuscito per una o più entità.',\n 'metric.homepageEntityHealthRatio': '{{healthy}}/{{total}} entità',\n 'metric.homepageEntityCalculationHealth':\n '{{healthy}} / {{total}} entità senza errori di calcolo della metrica',\n\n // Threshold translations\n 'thresholds.success': 'Attività riuscita',\n 'thresholds.warning': 'Avviso',\n 'thresholds.error': 'Errore',\n 'thresholds.exist': 'Esistente',\n 'thresholds.missing': 'Mancante',\n 'thresholds.noEntities': 'Nessuna entità con stato {{category}}',\n 'thresholds.entities_one': '{{count}} entità',\n 'thresholds.entities_other': '{{count}} entità',\n\n // Entities page translations\n 'entitiesPage.unknownMetric': 'Metrica sconosciuta',\n 'entitiesPage.noDataFound':\n 'Per visualizzare i tuoi dati qui, verifica che le tue entità stiano riportando valori relativi a questa metrica.',\n 'entitiesPage.missingPermission':\n \"Per visualizzare le metriche della scheda punteggio, il tuo amministratore deve concedere l'autorizzazione richiesta.\",\n 'entitiesPage.metricProviderNotRegistered':\n 'Provider di metrica con ID {{metricId}} non registrato.',\n 'entitiesPage.entitiesTable.title': 'Entità',\n 'entitiesPage.entitiesTable.unavailable': 'Non disponibile',\n 'entitiesPage.entitiesTable.titleWithCount': 'Entità ({{count}})',\n 'entitiesPage.entitiesTable.header.status': 'Stato',\n 'entitiesPage.entitiesTable.header.value': 'Valore',\n 'entitiesPage.entitiesTable.header.entity': 'Entità',\n 'entitiesPage.entitiesTable.header.owner': 'Proprietario',\n 'entitiesPage.entitiesTable.header.kind': 'Tipo',\n 'entitiesPage.entitiesTable.header.lastUpdated': 'Ultimo aggiornamento',\n 'entitiesPage.entitiesTable.footer.allRows': 'Tutte le righe',\n 'entitiesPage.entitiesTable.footer.rows_one': '{{count}} riga',\n 'entitiesPage.entitiesTable.footer.rows_other': '{{count}} righe',\n 'entitiesPage.entitiesTable.footer.of': 'di',\n },\n});\n\nexport default scorecardTranslationIt;\n"],"names":[],"mappings":";;;AAuBA,MAAM,yBAAyB,yBAA0B,CAAA;AAAA,EACvD,GAAK,EAAA,uBAAA;AAAA,EACL,QAAU,EAAA;AAAA;AAAA,IAER,kBAAoB,EAAA,wDAAA;AAAA,IACpB,wBACE,EAAA,2KAAA;AAAA,IACF,mBAAqB,EAAA,8BAAA;AAAA,IACrB,oBAAsB,EAAA,0BAAA;AAAA;AAAA,IAGtB,0BAA4B,EAAA,yBAAA;AAAA,IAC5B,gCACE,EAAA,mHAAA;AAAA,IACF,2BAA6B,EAAA,uBAAA;AAAA,IAC7B,4BAA8B,EAAA,0BAAA;AAAA;AAAA,IAG9B,gBAAkB,EAAA,sBAAA;AAAA;AAAA,IAGlB,gBAAkB,EAAA,wBAAA;AAAA,IAClB,sBACE,EAAA,iGAAA;AAAA,IACF,mBAAqB,EAAA,kBAAA;AAAA,IACrB,iBAAmB,EAAA,UAAA;AAAA,IACnB,yBAA2B,EAAA,sBAAA;AAAA,IAC3B,kBAAoB,EAAA,oBAAA;AAAA;AAAA,IAGpB,gCACE,EAAA,oFAAA;AAAA,IACF,6BACE,EAAA,wIAAA;AAAA,IACF,2BACE,EAAA,gEAAA;AAAA,IACF,mBACE,EAAA,8DAAA;AAAA,IACF,8BAAgC,EAAA,8BAAA;AAAA,IAChC,0BAA4B,EAAA,mBAAA;AAAA,IAC5B,0BAA4B,EAAA,yBAAA;AAAA,IAC5B,oBAAsB,EAAA,qBAAA;AAAA,IACtB,4BAA8B,EAAA,0BAAA;AAAA,IAC9B,iCACE,EAAA,uHAAA;AAAA,IACF,qCACE,EAAA,4CAAA;AAAA,IACF,2BACE,EAAA,qHAAA;AAAA,IACF,mCACE,EAAA,iGAAA;AAAA,IACF,mCACE,EAAA,iDAAA;AAAA;AAAA,IAGF,8BAAgC,EAAA,iCAAA;AAAA,IAChC,oCACE,EAAA,oFAAA;AAAA,IACF,+BAAiC,EAAA,8BAAA;AAAA,IACjC,qCACE,EAAA,iFAAA;AAAA,IACF,wBAA0B,EAAA,yBAAA;AAAA,IAC1B,8BACE,EAAA,qDAAA;AAAA,IACF,oBAAsB,EAAA,qCAAA;AAAA,IACtB,gCAAkC,EAAA,uCAAA;AAAA,IAClC,uCACE,EAAA,0EAAA;AAAA,IACF,uCAAyC,EAAA,kBAAA;AAAA,IACzC,qCAAuC,EAAA,6BAAA;AAAA,IACvC,6CACE,EAAA,yCAAA;AAAA,IACF,+CACE,EAAA,yCAAA;AAAA,IACF,qCAAuC,EAAA,4BAAA;AAAA,IACvC,qCACE,EAAA,4EAAA;AAAA,IACF,kCAAoC,EAAA,iCAAA;AAAA,IACpC,wCACE,EAAA,yEAAA;AAAA;AAAA,IAGF,oBAAsB,EAAA,sBAAA;AAAA,IACtB,oBAAsB,EAAA,QAAA;AAAA,IACtB,kBAAoB,EAAA,QAAA;AAAA,IACpB,kBAAoB,EAAA,WAAA;AAAA,IACpB,oBAAsB,EAAA,UAAA;AAAA,IACtB,uBAAyB,EAAA,0CAAA;AAAA,IACzB,yBAA2B,EAAA,qBAAA;AAAA,IAC3B,2BAA6B,EAAA,qBAAA;AAAA;AAAA,IAG7B,4BAA8B,EAAA,qBAAA;AAAA,IAC9B,0BACE,EAAA,qHAAA;AAAA,IACF,gCACE,EAAA,uHAAA;AAAA,IACF,0CACE,EAAA,yDAAA;AAAA,IACF,kCAAoC,EAAA,WAAA;AAAA,IACpC,wCAA0C,EAAA,iBAAA;AAAA,IAC1C,2CAA6C,EAAA,uBAAA;AAAA,IAC7C,0CAA4C,EAAA,OAAA;AAAA,IAC5C,yCAA2C,EAAA,QAAA;AAAA,IAC3C,0CAA4C,EAAA,WAAA;AAAA,IAC5C,yCAA2C,EAAA,cAAA;AAAA,IAC3C,wCAA0C,EAAA,MAAA;AAAA,IAC1C,+CAAiD,EAAA,sBAAA;AAAA,IACjD,2CAA6C,EAAA,gBAAA;AAAA,IAC7C,4CAA8C,EAAA,gBAAA;AAAA,IAC9C,8CAAgD,EAAA,iBAAA;AAAA,IAChD,sCAAwC,EAAA;AAAA;AAE5C,CAAC;;;;"}
|
|
@@ -53,6 +53,9 @@ const scorecardTranslationJa = createTranslationMessages({
|
|
|
53
53
|
"metric.averageLegendTooltipEntitiesEach_one": "{{count}} \u4EF6\u306E\u30A8\u30F3\u30C6\u30A3\u30C6\u30A3\u30FC\u3001\u5404 {{score}}",
|
|
54
54
|
"metric.averageLegendTooltipEntitiesEach_other": "{{count}} \u4EF6\u306E\u30A8\u30F3\u30C6\u30A3\u30C6\u30A3\u30FC\u3001\u5404 {{score}}",
|
|
55
55
|
"metric.averageLegendTooltipRowTotal": "\u5408\u8A08\u30B9\u30B3\u30A2 {{total}}",
|
|
56
|
+
"metric.drillDownCalculationFailures": "1 \u4EF6\u4EE5\u4E0A\u306E\u30A8\u30F3\u30C6\u30A3\u30C6\u30A3\u30FC\u3067\u3053\u306E\u6307\u6A19\u306E\u8A08\u7B97\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002",
|
|
57
|
+
"metric.homepageEntityHealthRatio": "{{healthy}}/{{total}} \u30A8\u30F3\u30C6\u30A3\u30C6\u30A3\u30FC",
|
|
58
|
+
"metric.homepageEntityCalculationHealth": "\u6307\u6A19\u306E\u8A08\u7B97\u30A8\u30E9\u30FC\u304C\u306A\u3044\u30A8\u30F3\u30C6\u30A3\u30C6\u30A3\u30FC {{healthy}} / {{total}}",
|
|
56
59
|
// Threshold translations
|
|
57
60
|
"thresholds.success": "\u6210\u529F",
|
|
58
61
|
"thresholds.warning": "\u8B66\u544A",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ja.esm.js","sources":["../../src/translations/ja.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { scorecardTranslationRef } from './ref';\n\n/**\n * Japanese translation for plugin.scorecard.\n * @public\n */\nconst scorecardTranslationJa = createTranslationMessages({\n ref: scorecardTranslationRef,\n messages: {\n // Empty state translations\n 'emptyState.title': 'スコアカードはまだ追加されていません',\n 'emptyState.description':\n 'スコアカードを使用すると、コンポーネントの健全性を一目で監視できます。まず、セットアップ手順に関するドキュメントを参照してください。',\n 'emptyState.button': 'ドキュメントの表示',\n 'emptyState.altText': 'スコアカードなし',\n\n // Permission required translations\n 'permissionRequired.title': '権限がありません',\n 'permissionRequired.description':\n 'スコアカードプラグインを表示するには、管理者に連絡して {{permission}} 権限を付与してもらうよう依頼してください。',\n 'permissionRequired.button': 'さらに表示する',\n 'permissionRequired.altText': '権限が必要',\n\n // Common UI\n 'common.loading': '読み込み中',\n\n // Not found state\n 'notFound.title': '404 ページが見つかりません',\n 'notFound.description':\n 'このリポジトリの docs ディレクトリのルートに {{indexFile}} ファイルを追加してみてください。',\n 'notFound.readMore': '詳細を見る',\n 'notFound.goBack': '戻る',\n 'notFound.contactSupport': 'サポートに連絡',\n 'notFound.altText': 'ページが見つかりません',\n\n // Error messages\n 'errors.entityMissingProperties':\n 'スコアカードの検索に必要なプロパティーがエンティティーにありません',\n 'errors.missingAggregationId':\n 'スコアカードの構成に誤りがあります。集計ID(またはメトリックID)のプロパティが指定されていません',\n 'errors.invalidApiResponse': 'スコアカード API からの応答形式が無効です',\n 'errors.fetchError':\n 'スコアカードの取得中にエラーが発生しました: {{error}}',\n 'errors.metricDataUnavailable': 'メトリクスデータがありません',\n 'errors.invalidThresholds': '無効なしきい値',\n 'errors.missingPermission': '権限がありません',\n 'errors.noDataFound': 'データが見つかりませんでした',\n 'errors.authenticationError': '認証エラー',\n 'errors.missingPermissionMessage':\n 'スコアカードのメトリクスを表示するには、管理者に権限を付与してもらうよう依頼してください。',\n 'errors.userNotFoundInCatalogMessage':\n 'ユーザーエンティティーがカタログに見つかりません',\n 'errors.noDataFoundMessage':\n 'ここでデータを確認するには、エンティティがこの指標に関連する値を報告していることを確認してください。',\n 'errors.unsupportedAggregationType':\n 'このスコアカードの集計タイプは、使用中のプラグインのバージョンではサポートされていません。',\n 'errors.authenticationErrorMessage':\n 'データを確認するにはサインインしてください。',\n\n // Metric translations\n 'metric.github.open_prs.title': 'GitHub のオープン状態の PR',\n 'metric.github.open_prs.description':\n '特定の GitHub リポジトリーにおけるオープン状態のプルリクエストの数。',\n 'metric.jira.open_issues.title':\n 'Jira のオープン状態の進行を妨げているチケット',\n 'metric.jira.open_issues.description':\n 'Jira で現在オープン状態になっている、重大かつ進行を妨げている課題の数を明示します。',\n 'metric.filecheck.title': 'ファイル確認: {{name}}',\n 'metric.filecheck.description':\n 'リポジトリーに {{name}} ファイルが存在するかを確認します。',\n 'metric.lastUpdated': '最終更新日: {{timestamp}}',\n 'metric.lastUpdatedNotAvailable': '最終更新日: 利用不可',\n 'metric.someEntitiesNotReportingValues':\n 'エンティティーがこの指標に関連する値を報告していません。',\n 'metric.averageCenterTooltipTotalLabel': '合計スコア',\n 'metric.averageCenterTooltipMaxLabel': '最大可能スコア',\n 'metric.averageLegendTooltipEntitiesEach_one':\n '{{count}} 件のエンティティー、各 {{score}}',\n 'metric.averageLegendTooltipEntitiesEach_other':\n '{{count}} 件のエンティティー、各 {{score}}',\n 'metric.averageLegendTooltipRowTotal': '合計スコア {{total}}',\n\n // Threshold translations\n 'thresholds.success': '成功',\n 'thresholds.warning': '警告',\n 'thresholds.error': 'エラー',\n 'thresholds.exist': '存在',\n 'thresholds.missing': '欠落',\n 'thresholds.noEntities': '{{category}} 状態のエンティティーがありません',\n 'thresholds.entities_one': '{{count}} エンティティー',\n 'thresholds.entities_other': '{{count}} エンティティー',\n\n // Entities page translations\n 'entitiesPage.unknownMetric': '不明なメトリクス',\n 'entitiesPage.noDataFound':\n 'ここでデータを確認するには、エンティティがこの指標に関連する値を報告していることを確認してください。',\n 'entitiesPage.missingPermission':\n 'スコアカードのメトリクスを表示するには、管理者に権限を付与してもらうよう依頼してください。',\n 'entitiesPage.metricProviderNotRegistered':\n 'ID {{metricId}} のメトリクスプロバイダーが登録されていません。',\n 'entitiesPage.entitiesTable.title': 'エンティティー',\n 'entitiesPage.entitiesTable.unavailable': '利用不可',\n 'entitiesPage.entitiesTable.titleWithCount': 'エンティティー ({{count}})',\n 'entitiesPage.entitiesTable.header.status': '状態',\n 'entitiesPage.entitiesTable.header.value': '値',\n 'entitiesPage.entitiesTable.header.entity': 'エンティティー',\n 'entitiesPage.entitiesTable.header.owner': '所有者',\n 'entitiesPage.entitiesTable.header.kind': '種類',\n 'entitiesPage.entitiesTable.header.lastUpdated': '最終更新日',\n 'entitiesPage.entitiesTable.footer.allRows': 'すべての行',\n 'entitiesPage.entitiesTable.footer.rows_one': '{{count}} 行',\n 'entitiesPage.entitiesTable.footer.rows_other': '{{count}} 行',\n 'entitiesPage.entitiesTable.footer.of': 'の',\n },\n});\n\nexport default scorecardTranslationJa;\n"],"names":[],"mappings":";;;AAuBA,MAAM,yBAAyB,yBAA0B,CAAA;AAAA,EACvD,GAAK,EAAA,uBAAA;AAAA,EACL,QAAU,EAAA;AAAA;AAAA,IAER,kBAAoB,EAAA,8GAAA;AAAA,IACpB,wBACE,EAAA,8YAAA;AAAA,IACF,mBAAqB,EAAA,wDAAA;AAAA,IACrB,oBAAsB,EAAA,kDAAA;AAAA;AAAA,IAGtB,0BAA4B,EAAA,kDAAA;AAAA,IAC5B,gCACE,EAAA,kTAAA;AAAA,IACF,2BAA6B,EAAA,4CAAA;AAAA,IAC7B,4BAA8B,EAAA,gCAAA;AAAA;AAAA,IAG9B,gBAAkB,EAAA,gCAAA;AAAA;AAAA,IAGlB,gBAAkB,EAAA,wEAAA;AAAA,IAClB,sBACE,EAAA,yOAAA;AAAA,IACF,mBAAqB,EAAA,gCAAA;AAAA,IACrB,iBAAmB,EAAA,cAAA;AAAA,IACnB,yBAA2B,EAAA,4CAAA;AAAA,IAC3B,kBAAoB,EAAA,oEAAA;AAAA;AAAA,IAGpB,gCACE,EAAA,wMAAA;AAAA,IACF,6BACE,EAAA,0RAAA;AAAA,IACF,2BAA6B,EAAA,mHAAA;AAAA,IAC7B,mBACE,EAAA,2IAAA;AAAA,IACF,8BAAgC,EAAA,sFAAA;AAAA,IAChC,0BAA4B,EAAA,4CAAA;AAAA,IAC5B,0BAA4B,EAAA,kDAAA;AAAA,IAC5B,oBAAsB,EAAA,sFAAA;AAAA,IACtB,4BAA8B,EAAA,gCAAA;AAAA,IAC9B,iCACE,EAAA,gRAAA;AAAA,IACF,qCACE,EAAA,kJAAA;AAAA,IACF,2BACE,EAAA,8SAAA;AAAA,IACF,mCACE,EAAA,gRAAA;AAAA,IACF,mCACE,EAAA,sIAAA;AAAA;AAAA,IAGF,8BAAgC,EAAA,4DAAA;AAAA,IAChC,oCACE,EAAA,8LAAA;AAAA,IACF,+BACE,EAAA,+HAAA;AAAA,IACF,qCACE,EAAA,iPAAA;AAAA,IACF,wBAA0B,EAAA,gDAAA;AAAA,IAC1B,8BACE,EAAA,4JAAA;AAAA,IACF,oBAAsB,EAAA,+CAAA;AAAA,IACtB,gCAAkC,EAAA,0DAAA;AAAA,IAClC,uCACE,EAAA,0KAAA;AAAA,IACF,uCAAyC,EAAA,gCAAA;AAAA,IACzC,qCAAuC,EAAA,4CAAA;AAAA,IACvC,6CACE,EAAA,wFAAA;AAAA,IACF,+CACE,EAAA,wFAAA;AAAA,IACF,qCAAuC,EAAA,0CAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"ja.esm.js","sources":["../../src/translations/ja.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { scorecardTranslationRef } from './ref';\n\n/**\n * Japanese translation for plugin.scorecard.\n * @public\n */\nconst scorecardTranslationJa = createTranslationMessages({\n ref: scorecardTranslationRef,\n messages: {\n // Empty state translations\n 'emptyState.title': 'スコアカードはまだ追加されていません',\n 'emptyState.description':\n 'スコアカードを使用すると、コンポーネントの健全性を一目で監視できます。まず、セットアップ手順に関するドキュメントを参照してください。',\n 'emptyState.button': 'ドキュメントの表示',\n 'emptyState.altText': 'スコアカードなし',\n\n // Permission required translations\n 'permissionRequired.title': '権限がありません',\n 'permissionRequired.description':\n 'スコアカードプラグインを表示するには、管理者に連絡して {{permission}} 権限を付与してもらうよう依頼してください。',\n 'permissionRequired.button': 'さらに表示する',\n 'permissionRequired.altText': '権限が必要',\n\n // Common UI\n 'common.loading': '読み込み中',\n\n // Not found state\n 'notFound.title': '404 ページが見つかりません',\n 'notFound.description':\n 'このリポジトリの docs ディレクトリのルートに {{indexFile}} ファイルを追加してみてください。',\n 'notFound.readMore': '詳細を見る',\n 'notFound.goBack': '戻る',\n 'notFound.contactSupport': 'サポートに連絡',\n 'notFound.altText': 'ページが見つかりません',\n\n // Error messages\n 'errors.entityMissingProperties':\n 'スコアカードの検索に必要なプロパティーがエンティティーにありません',\n 'errors.missingAggregationId':\n 'スコアカードの構成に誤りがあります。集計ID(またはメトリックID)のプロパティが指定されていません',\n 'errors.invalidApiResponse': 'スコアカード API からの応答形式が無効です',\n 'errors.fetchError':\n 'スコアカードの取得中にエラーが発生しました: {{error}}',\n 'errors.metricDataUnavailable': 'メトリクスデータがありません',\n 'errors.invalidThresholds': '無効なしきい値',\n 'errors.missingPermission': '権限がありません',\n 'errors.noDataFound': 'データが見つかりませんでした',\n 'errors.authenticationError': '認証エラー',\n 'errors.missingPermissionMessage':\n 'スコアカードのメトリクスを表示するには、管理者に権限を付与してもらうよう依頼してください。',\n 'errors.userNotFoundInCatalogMessage':\n 'ユーザーエンティティーがカタログに見つかりません',\n 'errors.noDataFoundMessage':\n 'ここでデータを確認するには、エンティティがこの指標に関連する値を報告していることを確認してください。',\n 'errors.unsupportedAggregationType':\n 'このスコアカードの集計タイプは、使用中のプラグインのバージョンではサポートされていません。',\n 'errors.authenticationErrorMessage':\n 'データを確認するにはサインインしてください。',\n\n // Metric translations\n 'metric.github.open_prs.title': 'GitHub のオープン状態の PR',\n 'metric.github.open_prs.description':\n '特定の GitHub リポジトリーにおけるオープン状態のプルリクエストの数。',\n 'metric.jira.open_issues.title':\n 'Jira のオープン状態の進行を妨げているチケット',\n 'metric.jira.open_issues.description':\n 'Jira で現在オープン状態になっている、重大かつ進行を妨げている課題の数を明示します。',\n 'metric.filecheck.title': 'ファイル確認: {{name}}',\n 'metric.filecheck.description':\n 'リポジトリーに {{name}} ファイルが存在するかを確認します。',\n 'metric.lastUpdated': '最終更新日: {{timestamp}}',\n 'metric.lastUpdatedNotAvailable': '最終更新日: 利用不可',\n 'metric.someEntitiesNotReportingValues':\n 'エンティティーがこの指標に関連する値を報告していません。',\n 'metric.averageCenterTooltipTotalLabel': '合計スコア',\n 'metric.averageCenterTooltipMaxLabel': '最大可能スコア',\n 'metric.averageLegendTooltipEntitiesEach_one':\n '{{count}} 件のエンティティー、各 {{score}}',\n 'metric.averageLegendTooltipEntitiesEach_other':\n '{{count}} 件のエンティティー、各 {{score}}',\n 'metric.averageLegendTooltipRowTotal': '合計スコア {{total}}',\n 'metric.drillDownCalculationFailures':\n '1 件以上のエンティティーでこの指標の計算に失敗しました。',\n 'metric.homepageEntityHealthRatio': '{{healthy}}/{{total}} エンティティー',\n 'metric.homepageEntityCalculationHealth':\n '指標の計算エラーがないエンティティー {{healthy}} / {{total}}',\n\n // Threshold translations\n 'thresholds.success': '成功',\n 'thresholds.warning': '警告',\n 'thresholds.error': 'エラー',\n 'thresholds.exist': '存在',\n 'thresholds.missing': '欠落',\n 'thresholds.noEntities': '{{category}} 状態のエンティティーがありません',\n 'thresholds.entities_one': '{{count}} エンティティー',\n 'thresholds.entities_other': '{{count}} エンティティー',\n\n // Entities page translations\n 'entitiesPage.unknownMetric': '不明なメトリクス',\n 'entitiesPage.noDataFound':\n 'ここでデータを確認するには、エンティティがこの指標に関連する値を報告していることを確認してください。',\n 'entitiesPage.missingPermission':\n 'スコアカードのメトリクスを表示するには、管理者に権限を付与してもらうよう依頼してください。',\n 'entitiesPage.metricProviderNotRegistered':\n 'ID {{metricId}} のメトリクスプロバイダーが登録されていません。',\n 'entitiesPage.entitiesTable.title': 'エンティティー',\n 'entitiesPage.entitiesTable.unavailable': '利用不可',\n 'entitiesPage.entitiesTable.titleWithCount': 'エンティティー ({{count}})',\n 'entitiesPage.entitiesTable.header.status': '状態',\n 'entitiesPage.entitiesTable.header.value': '値',\n 'entitiesPage.entitiesTable.header.entity': 'エンティティー',\n 'entitiesPage.entitiesTable.header.owner': '所有者',\n 'entitiesPage.entitiesTable.header.kind': '種類',\n 'entitiesPage.entitiesTable.header.lastUpdated': '最終更新日',\n 'entitiesPage.entitiesTable.footer.allRows': 'すべての行',\n 'entitiesPage.entitiesTable.footer.rows_one': '{{count}} 行',\n 'entitiesPage.entitiesTable.footer.rows_other': '{{count}} 行',\n 'entitiesPage.entitiesTable.footer.of': 'の',\n },\n});\n\nexport default scorecardTranslationJa;\n"],"names":[],"mappings":"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"}
|
|
@@ -67,7 +67,10 @@ const scorecardMessages = {
|
|
|
67
67
|
averageCenterTooltipMaxLabel: "Max possible score",
|
|
68
68
|
averageLegendTooltipEntitiesEach_one: "{{count}} entity, each {{score}}",
|
|
69
69
|
averageLegendTooltipEntitiesEach_other: "{{count}} entities, each {{score}}",
|
|
70
|
-
averageLegendTooltipRowTotal: "Total score {{total}}"
|
|
70
|
+
averageLegendTooltipRowTotal: "Total score {{total}}",
|
|
71
|
+
drillDownCalculationFailures: "One or more entities failed while calculating this metric.",
|
|
72
|
+
homepageEntityHealthRatio: "{{healthy}}/{{total}} entities",
|
|
73
|
+
homepageEntityCalculationHealth: "{{healthy}} / {{total}} entities without metric calculation errors"
|
|
71
74
|
},
|
|
72
75
|
// Threshold translations
|
|
73
76
|
thresholds: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ref.esm.js","sources":["../../src/translations/ref.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationRef } from '@backstage/core-plugin-api/alpha';\n\n/**\n * Messages object containing all English translations.\n * This is our single source of truth for translations.\n * @public\n */\nexport const scorecardMessages = {\n // Empty state\n emptyState: {\n title: 'No scorecards added yet',\n description:\n 'Scorecards help you monitor component health at a glance. To begin, explore our documentation for setup guidelines.',\n button: 'View documentation',\n altText: 'No scorecards',\n },\n\n // Not found state (404)\n notFound: {\n title: \"404 We couldn't find that page\",\n description:\n 'Try adding an {{indexFile}} file in the root of the docs directory of this repository.',\n readMore: 'Read more',\n goBack: 'Go back',\n contactSupport: 'Contact support',\n altText: 'Page not found',\n },\n\n // Permission required state\n permissionRequired: {\n title: 'Missing permission',\n description:\n 'To view Scorecard plugin, contact your administrator to give the {{permission}} permission.',\n button: 'Read more',\n altText: 'Permission required',\n },\n\n // Common UI\n common: {\n loading: 'Loading',\n },\n\n // Error messages\n errors: {\n entityMissingProperties:\n 'Entity missing required properties for scorecard lookup',\n missingAggregationId:\n 'Scorecard misconfigured, aggregation ID (or metric ID) property is not provided', // \"or metric ID\" will be removed in the future\n invalidApiResponse: 'Invalid response format from scorecard API',\n fetchError: 'Error fetching scorecards: {{error}}',\n metricDataUnavailable: 'Metric data unavailable',\n invalidThresholds: 'Invalid thresholds',\n missingPermission: 'Missing permission',\n noDataFound: 'No data found',\n authenticationError: 'Authentication error',\n missingPermissionMessage:\n 'To view the scorecard metrics, your administrator must grant you the required permission.',\n userNotFoundInCatalogMessage: 'User entity not found in catalog.',\n noDataFoundMessage:\n 'To see your data here, check that your entities are reporting values related to this metric.',\n unsupportedAggregationType:\n 'This scorecard uses an aggregation type that is not supported by this version of the plugin.',\n authenticationErrorMessage: 'Please sign in to view your data.',\n },\n\n // Metric translations\n metric: {\n 'github.open_prs': {\n title: 'GitHub open PRs',\n description:\n 'Current count of open Pull Requests for a given GitHub repository.',\n },\n 'jira.open_issues': {\n title: 'Jira open blocking tickets',\n description:\n 'Highlights the number of critical, blocking issues that are currently open in Jira.',\n },\n filecheck: {\n title: 'File check: {{name}}',\n description: 'Checks whether the {{name}} file exists in the repository.',\n },\n lastUpdated: 'Last updated: {{timestamp}}',\n lastUpdatedNotAvailable: 'Last updated: Not available',\n someEntitiesNotReportingValues:\n 'Some entities are not reporting values related to this metric.',\n averageCenterTooltipTotalLabel: 'Total score',\n averageCenterTooltipMaxLabel: 'Max possible score',\n averageLegendTooltipEntitiesEach_one: '{{count}} entity, each {{score}}',\n averageLegendTooltipEntitiesEach_other:\n '{{count}} entities, each {{score}}',\n averageLegendTooltipRowTotal: 'Total score {{total}}',\n },\n\n // Threshold translations\n thresholds: {\n success: 'Success',\n warning: 'Warning',\n error: 'Error',\n exist: 'Exist',\n missing: 'Missing',\n noEntities: 'No entities in {{category}} state',\n entities_one: '{{count}} entity',\n entities_other: '{{count}} entities',\n },\n\n // Entities page translations\n entitiesPage: {\n unknownMetric: 'Unknown metric',\n noDataFound:\n 'To see your data here, check that your entities are reporting values related to this metric.',\n missingPermission:\n 'To view the scorecard metrics, your administrator must grant you the required permission.',\n metricProviderNotRegistered:\n 'Metric provider with ID {{metricId}} is not registered.',\n entitiesTable: {\n title: 'Entities',\n unavailable: 'Unavailable',\n titleWithCount: 'Entities ({{count}})',\n header: {\n status: 'Status',\n value: 'Value',\n entity: 'Entity',\n owner: 'Owner',\n kind: 'Kind',\n lastUpdated: 'Last updated',\n },\n footer: {\n allRows: 'All rows',\n rows_one: '{{count}} row',\n rows_other: '{{count}} rows',\n of: 'of',\n },\n },\n },\n};\n\n/**\n * Translation reference for scorecard plugin\n * @public\n */\nexport const scorecardTranslationRef = createTranslationRef({\n id: 'plugin.scorecard',\n messages: scorecardMessages,\n});\n"],"names":[],"mappings":";;AAuBO,MAAM,iBAAoB,GAAA;AAAA;AAAA,EAE/B,UAAY,EAAA;AAAA,IACV,KAAO,EAAA,yBAAA;AAAA,IACP,WACE,EAAA,qHAAA;AAAA,IACF,MAAQ,EAAA,oBAAA;AAAA,IACR,OAAS,EAAA;AAAA,GACX;AAAA;AAAA,EAGA,QAAU,EAAA;AAAA,IACR,KAAO,EAAA,gCAAA;AAAA,IACP,WACE,EAAA,wFAAA;AAAA,IACF,QAAU,EAAA,WAAA;AAAA,IACV,MAAQ,EAAA,SAAA;AAAA,IACR,cAAgB,EAAA,iBAAA;AAAA,IAChB,OAAS,EAAA;AAAA,GACX;AAAA;AAAA,EAGA,kBAAoB,EAAA;AAAA,IAClB,KAAO,EAAA,oBAAA;AAAA,IACP,WACE,EAAA,6FAAA;AAAA,IACF,MAAQ,EAAA,WAAA;AAAA,IACR,OAAS,EAAA;AAAA,GACX;AAAA;AAAA,EAGA,MAAQ,EAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA;AAAA,EAGA,MAAQ,EAAA;AAAA,IACN,uBACE,EAAA,yDAAA;AAAA,IACF,oBACE,EAAA,iFAAA;AAAA;AAAA,IACF,kBAAoB,EAAA,4CAAA;AAAA,IACpB,UAAY,EAAA,sCAAA;AAAA,IACZ,qBAAuB,EAAA,yBAAA;AAAA,IACvB,iBAAmB,EAAA,oBAAA;AAAA,IACnB,iBAAmB,EAAA,oBAAA;AAAA,IACnB,WAAa,EAAA,eAAA;AAAA,IACb,mBAAqB,EAAA,sBAAA;AAAA,IACrB,wBACE,EAAA,2FAAA;AAAA,IACF,4BAA8B,EAAA,mCAAA;AAAA,IAC9B,kBACE,EAAA,8FAAA;AAAA,IACF,0BACE,EAAA,8FAAA;AAAA,IACF,0BAA4B,EAAA;AAAA,GAC9B;AAAA;AAAA,EAGA,MAAQ,EAAA;AAAA,IACN,iBAAmB,EAAA;AAAA,MACjB,KAAO,EAAA,iBAAA;AAAA,MACP,WACE,EAAA;AAAA,KACJ;AAAA,IACA,kBAAoB,EAAA;AAAA,MAClB,KAAO,EAAA,4BAAA;AAAA,MACP,WACE,EAAA;AAAA,KACJ;AAAA,IACA,SAAW,EAAA;AAAA,MACT,KAAO,EAAA,sBAAA;AAAA,MACP,WAAa,EAAA;AAAA,KACf;AAAA,IACA,WAAa,EAAA,6BAAA;AAAA,IACb,uBAAyB,EAAA,6BAAA;AAAA,IACzB,8BACE,EAAA,gEAAA;AAAA,IACF,8BAAgC,EAAA,aAAA;AAAA,IAChC,4BAA8B,EAAA,oBAAA;AAAA,IAC9B,oCAAsC,EAAA,kCAAA;AAAA,IACtC,sCACE,EAAA,oCAAA;AAAA,IACF,4BAA8B,EAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"ref.esm.js","sources":["../../src/translations/ref.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationRef } from '@backstage/core-plugin-api/alpha';\n\n/**\n * Messages object containing all English translations.\n * This is our single source of truth for translations.\n * @public\n */\nexport const scorecardMessages = {\n // Empty state\n emptyState: {\n title: 'No scorecards added yet',\n description:\n 'Scorecards help you monitor component health at a glance. To begin, explore our documentation for setup guidelines.',\n button: 'View documentation',\n altText: 'No scorecards',\n },\n\n // Not found state (404)\n notFound: {\n title: \"404 We couldn't find that page\",\n description:\n 'Try adding an {{indexFile}} file in the root of the docs directory of this repository.',\n readMore: 'Read more',\n goBack: 'Go back',\n contactSupport: 'Contact support',\n altText: 'Page not found',\n },\n\n // Permission required state\n permissionRequired: {\n title: 'Missing permission',\n description:\n 'To view Scorecard plugin, contact your administrator to give the {{permission}} permission.',\n button: 'Read more',\n altText: 'Permission required',\n },\n\n // Common UI\n common: {\n loading: 'Loading',\n },\n\n // Error messages\n errors: {\n entityMissingProperties:\n 'Entity missing required properties for scorecard lookup',\n missingAggregationId:\n 'Scorecard misconfigured, aggregation ID (or metric ID) property is not provided', // \"or metric ID\" will be removed in the future\n invalidApiResponse: 'Invalid response format from scorecard API',\n fetchError: 'Error fetching scorecards: {{error}}',\n metricDataUnavailable: 'Metric data unavailable',\n invalidThresholds: 'Invalid thresholds',\n missingPermission: 'Missing permission',\n noDataFound: 'No data found',\n authenticationError: 'Authentication error',\n missingPermissionMessage:\n 'To view the scorecard metrics, your administrator must grant you the required permission.',\n userNotFoundInCatalogMessage: 'User entity not found in catalog.',\n noDataFoundMessage:\n 'To see your data here, check that your entities are reporting values related to this metric.',\n unsupportedAggregationType:\n 'This scorecard uses an aggregation type that is not supported by this version of the plugin.',\n authenticationErrorMessage: 'Please sign in to view your data.',\n },\n\n // Metric translations\n metric: {\n 'github.open_prs': {\n title: 'GitHub open PRs',\n description:\n 'Current count of open Pull Requests for a given GitHub repository.',\n },\n 'jira.open_issues': {\n title: 'Jira open blocking tickets',\n description:\n 'Highlights the number of critical, blocking issues that are currently open in Jira.',\n },\n filecheck: {\n title: 'File check: {{name}}',\n description: 'Checks whether the {{name}} file exists in the repository.',\n },\n lastUpdated: 'Last updated: {{timestamp}}',\n lastUpdatedNotAvailable: 'Last updated: Not available',\n someEntitiesNotReportingValues:\n 'Some entities are not reporting values related to this metric.',\n averageCenterTooltipTotalLabel: 'Total score',\n averageCenterTooltipMaxLabel: 'Max possible score',\n averageLegendTooltipEntitiesEach_one: '{{count}} entity, each {{score}}',\n averageLegendTooltipEntitiesEach_other:\n '{{count}} entities, each {{score}}',\n averageLegendTooltipRowTotal: 'Total score {{total}}',\n drillDownCalculationFailures:\n 'One or more entities failed while calculating this metric.',\n homepageEntityHealthRatio: '{{healthy}}/{{total}} entities',\n homepageEntityCalculationHealth:\n '{{healthy}} / {{total}} entities without metric calculation errors',\n },\n\n // Threshold translations\n thresholds: {\n success: 'Success',\n warning: 'Warning',\n error: 'Error',\n exist: 'Exist',\n missing: 'Missing',\n noEntities: 'No entities in {{category}} state',\n entities_one: '{{count}} entity',\n entities_other: '{{count}} entities',\n },\n\n // Entities page translations\n entitiesPage: {\n unknownMetric: 'Unknown metric',\n noDataFound:\n 'To see your data here, check that your entities are reporting values related to this metric.',\n missingPermission:\n 'To view the scorecard metrics, your administrator must grant you the required permission.',\n metricProviderNotRegistered:\n 'Metric provider with ID {{metricId}} is not registered.',\n entitiesTable: {\n title: 'Entities',\n unavailable: 'Unavailable',\n titleWithCount: 'Entities ({{count}})',\n header: {\n status: 'Status',\n value: 'Value',\n entity: 'Entity',\n owner: 'Owner',\n kind: 'Kind',\n lastUpdated: 'Last updated',\n },\n footer: {\n allRows: 'All rows',\n rows_one: '{{count}} row',\n rows_other: '{{count}} rows',\n of: 'of',\n },\n },\n },\n};\n\n/**\n * Translation reference for scorecard plugin\n * @public\n */\nexport const scorecardTranslationRef = createTranslationRef({\n id: 'plugin.scorecard',\n messages: scorecardMessages,\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -48,6 +48,9 @@ declare const scorecardTranslationRef: _backstage_frontend_plugin_api.Translatio
|
|
|
48
48
|
readonly "metric.averageLegendTooltipEntitiesEach_one": string;
|
|
49
49
|
readonly "metric.averageLegendTooltipEntitiesEach_other": string;
|
|
50
50
|
readonly "metric.averageLegendTooltipRowTotal": string;
|
|
51
|
+
readonly "metric.drillDownCalculationFailures": string;
|
|
52
|
+
readonly "metric.homepageEntityHealthRatio": string;
|
|
53
|
+
readonly "metric.homepageEntityCalculationHealth": string;
|
|
51
54
|
readonly "thresholds.success": string;
|
|
52
55
|
readonly "thresholds.warning": string;
|
|
53
56
|
readonly "thresholds.error": string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@red-hat-developer-hub/backstage-plugin-scorecard",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "./dist/index.esm.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"@backstage/theme": "^0.7.2",
|
|
76
76
|
"@mui/icons-material": "5.18.0",
|
|
77
77
|
"@mui/material": "5.18.0",
|
|
78
|
-
"@red-hat-developer-hub/backstage-plugin-scorecard-common": "^2.7.
|
|
78
|
+
"@red-hat-developer-hub/backstage-plugin-scorecard-common": "^2.7.1",
|
|
79
79
|
"@tanstack/react-query": "^5.95.2",
|
|
80
80
|
"date-fns": "^4.1.0",
|
|
81
81
|
"react-use": "^17.2.4",
|