Merge pull request #20133 from backstage/rugvip/reconfigure

core-plugin-api: remove experimental plugin configuration API
This commit is contained in:
Patrik Oldsberg
2023-09-26 10:54:02 +02:00
committed by GitHub
126 changed files with 156 additions and 1140 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-app-api': patch
---
Internal update for removal of experimental plugin configuration API.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/test-utils': patch
---
Removed the alpha `MockPluginProvider` export since the plugin configuration API has been removed.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/core-plugin-api': minor
---
Removed the exprimental plugin configuration API. The `__experimentalReconfigure()` from the plugin options as well as the `__experimentalConfigure()` method on plugin instances have both been removed.
+20
View File
@@ -0,0 +1,20 @@
---
'@backstage/plugin-catalog': minor
---
The catalog plugin no longer implements the experimental reconfiguration API. The create button title can now instead be configured using the new experimental internationalization API, via the `catalogTranslationRef` exported at `/alpha`. For example:
```ts
import { catalogTranslationRef } from '@backstage/plugin-catalog/alpha';
const app = createApp({
__experimentalTranslations: {
resources: [
createTranslationMessages({
ref: catalogTranslationRef,
catalog_page_create_button_title: 'Create Software',
}),
],
},
});
```
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-cost-insights': patch
---
The experimental plugin configuration has been removed. The trend line can now instead be hidden by setting `costInsights.hideTrendLine` to `true` in the configuration.
-68
View File
@@ -1,68 +0,0 @@
---
id: customization
title: Customization (Experimental)
description: Documentation on adding a customization logic to the plugin
---
## Overview
The Backstage core logic provides a possibility to make the component customizable in such a way that the application
developer can redefine the labels, icons, elements or even completely replace the component. It's up to each plugin
to decide what can be customized.
## For a plugin developer
When you are creating your plugin, you have a possibility to use a metadata field and define there all
customizable elements. For example
```typescript jsx
const plugin = createPlugin({
id: 'my-plugin',
__experimentalConfigure(
options?: CatalogInputPluginOptions,
): CatalogPluginOptions {
const defaultOptions = {
createButtonTitle: 'Create',
};
return { ...defaultOptions, ...options };
},
});
```
And the rendering part of the exposed component can retrieve that metadata as:
```typescript jsx
export type CatalogPluginOptions = {
createButtonTitle: string;
};
export type CatalogInputPluginOptions = {
createButtonTitle: string;
};
export const useCatalogPluginOptions = () =>
usePluginOptions<CatalogPluginOptions>();
export function DefaultMyPluginWelcomePage() {
const { createButtonTitle } = useCatalogPluginOptions();
return (
<div>
<button>{createButtonTitle}</button>
</div>
);
}
```
## For an application developer using the plugin
The way to reconfigure the default values provided by the plugin you can do it via reconfigure method, defined on the
plugin. Example:
```typescript jsx
import { myPlugin } from '@backstage/my-plugin';
myPlugin.__experimentalReconfigure({
createButtonTitle: 'New',
});
```
-1
View File
@@ -243,7 +243,6 @@
"plugins/integrating-plugin-into-software-catalog",
"plugins/integrating-search-into-plugins",
"plugins/composability",
"plugins/customization",
"plugins/internationalization",
"plugins/analytics",
"plugins/feature-flags",
+1 -1
View File
@@ -24,6 +24,7 @@
"@backstage/plugin-azure-devops": "workspace:^",
"@backstage/plugin-azure-sites": "workspace:^",
"@backstage/plugin-badges": "workspace:^",
"@backstage/plugin-catalog": "workspace:^",
"@backstage/plugin-catalog-common": "workspace:^",
"@backstage/plugin-catalog-graph": "workspace:^",
"@backstage/plugin-catalog-import": "workspace:^",
@@ -76,7 +77,6 @@
"@backstage/plugin-todo": "workspace:^",
"@backstage/plugin-user-settings": "workspace:^",
"@backstage/theme": "workspace:^",
"@internal/plugin-catalog-customized": "workspace:^",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.61",
+1 -1
View File
@@ -29,6 +29,7 @@
"@backstage/plugin-azure-devops": "workspace:^",
"@backstage/plugin-azure-sites": "workspace:^",
"@backstage/plugin-badges": "workspace:^",
"@backstage/plugin-catalog": "workspace:^",
"@backstage/plugin-catalog-common": "workspace:^",
"@backstage/plugin-catalog-graph": "workspace:^",
"@backstage/plugin-catalog-import": "workspace:^",
@@ -82,7 +83,6 @@
"@backstage/plugin-todo": "workspace:^",
"@backstage/plugin-user-settings": "workspace:^",
"@backstage/theme": "workspace:^",
"@internal/plugin-catalog-customized": "workspace:^",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.61",
+1 -1
View File
@@ -46,7 +46,7 @@ import {
CatalogEntityPage,
CatalogIndexPage,
catalogPlugin,
} from '@internal/plugin-catalog-customized';
} from '@backstage/plugin-catalog';
import { CatalogGraphPage } from '@backstage/plugin-catalog-graph';
import {
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { EntityLayout } from '@internal/plugin-catalog-customized';
import { EntityLayout } from '@backstage/plugin-catalog';
import {
EntityProvider,
starredEntitiesApiRef,
@@ -68,7 +68,7 @@ import {
hasLabels,
hasRelationWarnings,
EntityRelationWarning,
} from '@internal/plugin-catalog-customized';
} from '@backstage/plugin-catalog';
import {
Direction,
EntityCatalogGraphCard,
@@ -29,7 +29,7 @@ import {
useSearch,
} from '@backstage/plugin-search-react';
import { TechDocsSearchResultListItem } from '@backstage/plugin-techdocs';
import { CatalogSearchResultListItem } from '@internal/plugin-catalog-customized';
import { CatalogSearchResultListItem } from '@backstage/plugin-catalog';
import {
Box,
DialogActions,
@@ -23,7 +23,7 @@ import {
useSidebarPinState,
} from '@backstage/core-components';
import { useApi } from '@backstage/core-plugin-api';
import { CatalogSearchResultListItem } from '@internal/plugin-catalog-customized';
import { CatalogSearchResultListItem } from '@backstage/plugin-catalog';
import {
catalogApiRef,
CATALOG_FILTER_EXISTS,
@@ -4,9 +4,7 @@
```ts
import { ApiRef } from '@backstage/core-plugin-api';
import { BackstagePlugin } from '@backstage/core-plugin-api';
import { Observable } from '@backstage/types';
import { ReactNode } from 'react';
import { TranslationMessages as TranslationMessages_2 } from '@backstage/core-plugin-api/alpha';
import { TranslationRef as TranslationRef_2 } from '@backstage/core-plugin-api/alpha';
@@ -74,17 +72,6 @@ export function createTranslationResource<
options: TranslationResourceOptions<TId, TMessages, TTranslations>,
): TranslationResource<TId>;
// @alpha
export interface PluginOptionsProviderProps {
// (undocumented)
children: ReactNode;
// (undocumented)
plugin?: BackstagePlugin;
}
// @alpha
export const PluginProvider: (props: PluginOptionsProviderProps) => JSX.Element;
// @alpha (undocumented)
export type TranslationApi = {
getTranslation<
@@ -245,11 +232,6 @@ export type TranslationSnapshot<
t: TranslationFunction<TMessages>;
};
// @alpha
export function usePluginOptions<
TPluginOptions extends {} = {},
>(): TPluginOptions;
// @alpha (undocumented)
export const useTranslationRef: <
TMessages extends {
+3 -7
View File
@@ -222,7 +222,7 @@ export type BackstageIdentityResponse = {
export type BackstagePlugin<
Routes extends AnyRoutes = {},
ExternalRoutes extends AnyExternalRoutes = {},
PluginInputOptions extends {} = {},
_Ignored extends {} = {},
> = {
getId(): string;
getApis(): Iterable<AnyApiFactory>;
@@ -230,7 +230,6 @@ export type BackstagePlugin<
provide<T>(extension: Extension<T>): T;
routes: Routes;
externalRoutes: ExternalRoutes;
__experimentalReconfigure(options: PluginInputOptions): void;
};
// @public
@@ -318,10 +317,9 @@ export function createExternalRouteRef<
export function createPlugin<
Routes extends AnyRoutes = {},
ExternalRoutes extends AnyExternalRoutes = {},
PluginInputOptions extends {} = {},
>(
config: PluginConfig<Routes, ExternalRoutes, PluginInputOptions>,
): BackstagePlugin<Routes, ExternalRoutes, PluginInputOptions>;
config: PluginConfig<Routes, ExternalRoutes>,
): BackstagePlugin<Routes, ExternalRoutes>;
// @public
export function createReactExtension<
@@ -647,14 +645,12 @@ export type PendingOAuthRequest = {
export type PluginConfig<
Routes extends AnyRoutes,
ExternalRoutes extends AnyExternalRoutes,
PluginInputOptions extends {},
> = {
id: string;
apis?: Iterable<AnyApiFactory>;
routes?: Routes;
externalRoutes?: ExternalRoutes;
featureFlags?: PluginFeatureFlagConfig[];
__experimentalConfigure?(options?: PluginInputOptions): {};
};
// @public
-1
View File
@@ -14,6 +14,5 @@
* limitations under the License.
*/
export * from './plugin-options';
export * from './translation';
export * from './apis/alpha';
@@ -21,7 +21,6 @@ import { RouteRef, useRouteRef } from '../routing';
import { attachComponentData } from './componentData';
import { Extension, BackstagePlugin } from '../plugin';
import { PluginErrorBoundary } from './PluginErrorBoundary';
import { PluginProvider } from '../plugin-options';
import { routableExtensionRenderedEvent } from '../analytics/Tracker';
/**
@@ -258,9 +257,7 @@ export function createReactExtension<
...(mountPoint && { routeRef: mountPoint.id }),
}}
>
<PluginProvider plugin={plugin}>
<Component {...props} />
</PluginProvider>
<Component {...props} />
</AnalyticsContext>
</PluginErrorBoundary>
</Suspense>
@@ -1,18 +0,0 @@
/*
* Copyright 2020 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export { usePluginOptions, PluginProvider } from './usePluginOptions';
export type { PluginOptionsProviderProps } from './usePluginOptions';
@@ -1,53 +0,0 @@
/*
* Copyright 2021 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import { renderHook } from '@testing-library/react-hooks';
import { usePluginOptions, PluginProvider } from './usePluginOptions';
import { createPlugin } from '../plugin';
describe('usePluginOptions', () => {
it('should provide a versioned value to hook', () => {
type TestInputPluginOptions = {
'key-1': string;
};
type TestPluginOptions = {
'key-1': string;
'key-2': string;
};
const plugin = createPlugin({
id: 'my-plugin',
__experimentalConfigure(_: TestInputPluginOptions): TestPluginOptions {
return { 'key-1': 'value-1', 'key-2': 'value-2' };
},
});
const rendered = renderHook(() => usePluginOptions(), {
wrapper: ({ children }: React.PropsWithChildren<{}>) => (
<PluginProvider plugin={plugin}>{children}</PluginProvider>
),
});
const config = rendered.result.current;
expect(config).toEqual({
'key-1': 'value-1',
'key-2': 'value-2',
});
});
});
@@ -1,93 +0,0 @@
/*
* Copyright 2020 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {
createVersionedContext,
createVersionedValueMap,
useVersionedContext,
} from '@backstage/version-bridge';
import { BackstagePlugin } from '@backstage/core-plugin-api';
import React, { ReactNode } from 'react';
const contextKey: string = 'plugin-context';
/**
* Properties for the PluginProvider component.
*
* @alpha
*/
export interface PluginOptionsProviderProps {
children: ReactNode;
plugin?: BackstagePlugin;
}
/**
* Contains the plugin configuration.
*
* @alpha
*/
export const PluginProvider = (
props: PluginOptionsProviderProps,
): JSX.Element => {
const { children, plugin } = props;
const { Provider } = createVersionedContext<{
1: { plugin: BackstagePlugin | undefined };
}>(contextKey);
return (
<Provider
value={createVersionedValueMap({
1: {
plugin,
},
})}
>
{children}
</Provider>
);
};
/**
* Grab the current entity from the context, throws if the entity has not yet been loaded
* or is not available.
*
* @alpha
*/
export function usePluginOptions<
TPluginOptions extends {} = {},
>(): TPluginOptions {
const versionedHolder = useVersionedContext<{ 1: TPluginOptions }>(
contextKey,
);
if (!versionedHolder) {
throw new Error('Plugin Options context is not available');
}
const value = versionedHolder.atVersion(1);
if (!value) {
throw new Error('Plugin Options v1 is not available');
}
return (
value as unknown as {
plugin: {
getPluginOptions(): {};
};
}
).plugin.getPluginOptions() as TPluginOptions;
}
+4 -27
View File
@@ -30,18 +30,9 @@ import { AnyApiFactory } from '../apis';
export class PluginImpl<
Routes extends AnyRoutes,
ExternalRoutes extends AnyExternalRoutes,
PluginInputOptions extends {},
> implements BackstagePlugin<Routes, ExternalRoutes, PluginInputOptions>
> implements BackstagePlugin<Routes, ExternalRoutes>
{
constructor(
private readonly config: PluginConfig<
Routes,
ExternalRoutes,
PluginInputOptions
>,
) {}
private options: {} | undefined = undefined;
constructor(private readonly config: PluginConfig<Routes, ExternalRoutes>) {}
getId(): string {
return this.config.id;
@@ -67,19 +58,6 @@ export class PluginImpl<
return extension.expose(this);
}
__experimentalReconfigure(options: PluginInputOptions): void {
if (this.config.__experimentalConfigure) {
this.options = this.config.__experimentalConfigure(options);
}
}
getPluginOptions(): {} {
if (this.config.__experimentalConfigure && !this.options) {
this.options = this.config.__experimentalConfigure();
}
return this.options ?? {};
}
toString() {
return `plugin{${this.config.id}}`;
}
@@ -94,9 +72,8 @@ export class PluginImpl<
export function createPlugin<
Routes extends AnyRoutes = {},
ExternalRoutes extends AnyExternalRoutes = {},
PluginInputOptions extends {} = {},
>(
config: PluginConfig<Routes, ExternalRoutes, PluginInputOptions>,
): BackstagePlugin<Routes, ExternalRoutes, PluginInputOptions> {
config: PluginConfig<Routes, ExternalRoutes>,
): BackstagePlugin<Routes, ExternalRoutes> {
return new PluginImpl(config);
}
+1 -4
View File
@@ -52,7 +52,7 @@ export type AnyExternalRoutes = { [name: string]: ExternalRouteRef };
export type BackstagePlugin<
Routes extends AnyRoutes = {},
ExternalRoutes extends AnyExternalRoutes = {},
PluginInputOptions extends {} = {},
_Ignored extends {} = {},
> = {
getId(): string;
getApis(): Iterable<AnyApiFactory>;
@@ -63,7 +63,6 @@ export type BackstagePlugin<
provide<T>(extension: Extension<T>): T;
routes: Routes;
externalRoutes: ExternalRoutes;
__experimentalReconfigure(options: PluginInputOptions): void;
};
/**
@@ -84,14 +83,12 @@ export type PluginFeatureFlagConfig = {
export type PluginConfig<
Routes extends AnyRoutes,
ExternalRoutes extends AnyExternalRoutes,
PluginInputOptions extends {},
> = {
id: string;
apis?: Iterable<AnyApiFactory>;
routes?: Routes;
externalRoutes?: ExternalRoutes;
featureFlags?: PluginFeatureFlagConfig[];
__experimentalConfigure?(options?: PluginInputOptions): {};
};
/**
@@ -335,7 +335,6 @@ function toLegacyPlugin(plugin: BackstagePlugin): LegacyBackstagePlugin {
getApis: notImplemented,
getFeatureFlags: notImplemented,
provide: notImplemented,
__experimentalReconfigure: notImplemented,
};
}
-7
View File
@@ -4,17 +4,10 @@
```ts
import { Observable } from '@backstage/types';
import { PropsWithChildren } from 'react';
import { default as React_2 } from 'react';
import { TranslationApi } from '@backstage/core-plugin-api/alpha';
import { TranslationRef } from '@backstage/core-plugin-api/alpha';
import { TranslationSnapshot } from '@backstage/core-plugin-api/alpha';
// @alpha
export const MockPluginProvider: ({
children,
}: PropsWithChildren<{}>) => React_2.JSX.Element;
// @alpha (undocumented)
export class MockTranslationApi implements TranslationApi {
// (undocumented)
-1
View File
@@ -14,5 +14,4 @@
* limitations under the License.
*/
export * from './testUtils/MockPluginProvider';
export * from './testUtils/apis/TranslationApi';
@@ -1,36 +0,0 @@
/*
* Copyright 2020 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React, { PropsWithChildren } from 'react';
import { PluginProvider } from '@backstage/core-plugin-api/alpha';
import { createPlugin } from '@backstage/core-plugin-api';
/**
* Mock for PluginProvider to use in unit tests
* @alpha
*/
export const MockPluginProvider = ({ children }: PropsWithChildren<{}>) => {
type TestInputPluginOptions = {};
type TestPluginOptions = {};
const plugin = createPlugin({
id: 'my-plugin',
__experimentalConfigure(_: TestInputPluginOptions): TestPluginOptions {
return {};
},
});
return <PluginProvider plugin={plugin}>{children}</PluginProvider>;
};
-1
View File
@@ -72,7 +72,6 @@ export const adrPlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
-1
View File
@@ -13,7 +13,6 @@ export const airbrakePlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
-1
View File
@@ -18,7 +18,6 @@ export const allurePlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
+1 -1
View File
@@ -10,7 +10,7 @@ import { Config } from '@backstage/config';
import { IdentityApi } from '@backstage/core-plugin-api';
// @public @deprecated (undocumented)
export const analyticsModuleGA: BackstagePlugin<{}, {}, {}>;
export const analyticsModuleGA: BackstagePlugin<{}, {}>;
// @public
export class GoogleAnalytics implements AnalyticsApi {
-1
View File
@@ -22,7 +22,6 @@ export const apacheAirflowPlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
```
+1 -2
View File
@@ -54,8 +54,7 @@ const apiDocsPlugin: BackstagePlugin<
},
{
registerApi: ExternalRouteRef<undefined, true>;
},
{}
}
>;
export { apiDocsPlugin };
export { apiDocsPlugin as plugin };
-1
View File
@@ -38,7 +38,6 @@ export const apolloExplorerPlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
```
+1 -1
View File
@@ -162,7 +162,7 @@ export class AzureDevOpsClient implements AzureDevOpsApi {
}
// @public (undocumented)
export const azureDevOpsPlugin: BackstagePlugin<{}, {}, {}>;
export const azureDevOpsPlugin: BackstagePlugin<{}, {}>;
// @public (undocumented)
export const AzurePullRequestsIcon: (
-1
View File
@@ -49,7 +49,6 @@ export const azureSitesPlugin: BackstagePlugin<
{
entityContent: RouteRef<undefined>;
},
{},
{}
>;
+1 -1
View File
@@ -9,7 +9,7 @@ import { BackstagePlugin } from '@backstage/core-plugin-api';
import { JSX as JSX_2 } from 'react';
// @public (undocumented)
export const badgesPlugin: BackstagePlugin<{}, {}, {}>;
export const badgesPlugin: BackstagePlugin<{}, {}>;
// @public (undocumented)
export const EntityBadgesDialog: (props: {
-1
View File
@@ -41,7 +41,6 @@ export const bazaarPlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
+1 -1
View File
@@ -13,7 +13,7 @@ import { JSX as JSX_2 } from 'react';
export const BITRISE_APP_ANNOTATION = 'bitrise.io/app';
// @public (undocumented)
export const bitrisePlugin: BackstagePlugin<{}, {}, {}>;
export const bitrisePlugin: BackstagePlugin<{}, {}>;
// @public (undocumented)
export const EntityBitriseContent: () => JSX_2.Element;
-1
View File
@@ -1 +0,0 @@
module.exports = require('@backstage/cli/config/eslint-factory')(__dirname);
-457
View File
@@ -1,457 +0,0 @@
# @internal/plugin-catalog-customized
## 0.0.14
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.13.0
- @backstage/plugin-catalog-react@1.8.4
## 0.0.14-next.3
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.13.0-next.3
- @backstage/plugin-catalog-react@1.8.4-next.3
## 0.0.14-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.13.0-next.2
- @backstage/plugin-catalog-react@1.8.4-next.2
## 0.0.14-next.1
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.8.4-next.1
- @backstage/plugin-catalog@1.12.5-next.1
## 0.0.14-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.12.4-next.0
- @backstage/plugin-catalog-react@1.8.3-next.0
## 0.0.13
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.12.1
- @backstage/plugin-catalog-react@1.8.1
## 0.0.13-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.8.1-next.1
- @backstage/plugin-catalog@1.12.1-next.2
## 0.0.13-next.1
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.12.1-next.1
- @backstage/plugin-catalog-react@1.8.1-next.0
## 0.0.13-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.12.1-next.0
- @backstage/plugin-catalog-react@1.8.1-next.0
## 0.0.12
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.8.0
- @backstage/plugin-catalog@1.12.0
## 0.0.12-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.8.0-next.2
- @backstage/plugin-catalog@1.12.0-next.2
## 0.0.12-next.1
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.11.3-next.1
- @backstage/plugin-catalog-react@1.7.1-next.1
## 0.0.12-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.11.3-next.0
- @backstage/plugin-catalog-react@1.7.1-next.0
## 0.0.11
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.11.2
- @backstage/plugin-catalog-react@1.7.0
## 0.0.11-next.3
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.11.2-next.3
- @backstage/plugin-catalog-react@1.7.0-next.3
## 0.0.11-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.7.0-next.2
- @backstage/plugin-catalog@1.11.1-next.2
## 0.0.11-next.1
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.11.1-next.1
- @backstage/plugin-catalog-react@1.7.0-next.1
## 0.0.11-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.7.0-next.0
- @backstage/plugin-catalog@1.11.1-next.0
## 0.0.10
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.6.0
- @backstage/plugin-catalog@1.11.0
## 0.0.10-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.11.0-next.2
- @backstage/plugin-catalog-react@1.6.0-next.2
## 0.0.10-next.1
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.11.0-next.1
- @backstage/plugin-catalog-react@1.6.0-next.1
## 0.0.10-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.6.0-next.0
- @backstage/plugin-catalog@1.11.0-next.0
## 0.0.9
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.5.0
- @backstage/plugin-catalog@1.10.0
## 0.0.9-next.3
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.5.0-next.3
- @backstage/plugin-catalog@1.10.0-next.3
## 0.0.9-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.4.1-next.2
- @backstage/plugin-catalog@1.10.0-next.2
## 0.0.9-next.1
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.4.1-next.1
- @backstage/plugin-catalog@1.10.0-next.1
## 0.0.9-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.10.0-next.0
- @backstage/plugin-catalog-react@1.4.1-next.0
## 0.0.8
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.9.0
- @backstage/plugin-catalog-react@1.4.0
## 0.0.8-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.4.0-next.2
- @backstage/plugin-catalog@1.9.0-next.2
## 0.0.8-next.1
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.9.0-next.1
- @backstage/plugin-catalog-react@1.4.0-next.1
## 0.0.8-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.4.0-next.0
- @backstage/plugin-catalog@1.9.0-next.0
## 0.0.7
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.8.0
- @backstage/plugin-catalog-react@1.3.0
## 0.0.7-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.8.0-next.2
- @backstage/plugin-catalog-react@1.3.0-next.2
## 0.0.7-next.1
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.8.0-next.1
- @backstage/plugin-catalog-react@1.3.0-next.1
## 0.0.7-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.3.0-next.0
- @backstage/plugin-catalog@1.7.3-next.0
## 0.0.6
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.2.4
- @backstage/plugin-catalog@1.7.2
## 0.0.6-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.2.4-next.2
- @backstage/plugin-catalog@1.7.2-next.2
## 0.0.6-next.1
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.7.2-next.1
- @backstage/plugin-catalog-react@1.2.4-next.1
## 0.0.6-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.2.4-next.0
- @backstage/plugin-catalog@1.7.2-next.0
## 0.0.6
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.7.1
- @backstage/plugin-catalog-react@1.2.3
## 0.0.5
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.7.0
- @backstage/plugin-catalog-react@1.2.2
## 0.0.5-next.4
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.7.0-next.4
- @backstage/plugin-catalog-react@1.2.2-next.4
## 0.0.5-next.3
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.7.0-next.3
- @backstage/plugin-catalog-react@1.2.2-next.3
## 0.0.5-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.7.0-next.2
- @backstage/plugin-catalog-react@1.2.2-next.2
## 0.0.5-next.1
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.6.2-next.1
- @backstage/plugin-catalog-react@1.2.2-next.1
## 0.0.5-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.2.2-next.0
- @backstage/plugin-catalog@1.6.2-next.0
## 0.0.4
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.2.1
- @backstage/plugin-catalog@1.6.1
## 0.0.4-next.1
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.6.1-next.1
- @backstage/plugin-catalog-react@1.2.1-next.1
## 0.0.4-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.2.1-next.0
- @backstage/plugin-catalog@1.6.1-next.0
## 0.0.3
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.2.0
- @backstage/plugin-catalog@1.6.0
## 0.0.3-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.6.0-next.2
- @backstage/plugin-catalog-react@1.2.0-next.2
## 0.0.3-next.1
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.2.0-next.1
- @backstage/plugin-catalog@1.6.0-next.1
## 0.0.3-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.5.2-next.0
- @backstage/plugin-catalog-react@1.1.5-next.0
## 0.0.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.1.4
- @backstage/plugin-catalog@1.5.1
## 0.0.2-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.1.4-next.0
- @backstage/plugin-catalog@1.5.1-next.0
## 0.0.1
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.5.0
- @backstage/plugin-catalog-react@1.1.3
## 0.0.1-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.5.0-next.0
- @backstage/plugin-catalog-react@1.1.3-next.0
-57
View File
@@ -1,57 +0,0 @@
# Backstage Catalog Frontend
This is the React frontend to customize Backstage [software
catalog](http://backstage.io/docs/features/software-catalog/).
This package supplies the example how it can be achieved.
## Installation
This `@internal/plugin-catalog-customized` package comes installed by default in example application of
Backstage application.
To check if you already have the package, look under
`packages/app/package.json`, in the `dependencies` block, for
`@internal/plugin-catalog-customized`. The instructions below walk through restoring the
plugin, if you previously removed it.
### Install the package
```bash
# From your Backstage root directory
yarn add --cwd packages/app @internal/plugin-catalog-customized
```
### Add the plugin to your `packages/app`
Add the import to a file where is your plugin catalog is defined:
```diff
// packages/app/src/App.tsx
import from '@internal/plugin-catalog-customized';
...
import {
CatalogIndexPage,
CatalogEntityPage,
} from '@backstage/plugin-catalog';
...
```
## Development
This frontend plugin can be started in a standalone mode from directly in this
package with `yarn start`. However, it will have limited functionality and that
process is most convenient when developing the catalog frontend plugin itself.
To evaluate the catalog and have a greater amount of functionality available,
run the entire Backstage example application from the root folder:
```bash
yarn dev
```
This will launch both frontend and backend in the same window, populated with
some example entities.
-9
View File
@@ -1,9 +0,0 @@
## API Report File for "@internal/plugin-catalog-customized"
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
```ts
export * from '@backstage/plugin-catalog';
// (No @packageDocumentation comment for this package)
```
@@ -1,12 +0,0 @@
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: internal-plugin-catalog-customized
title: '@internal/plugin-catalog-customized'
description: >-
The internal Backstage Customizable plugin for browsing the Backstage
catalog
spec:
lifecycle: experimental
type: backstage-frontend-plugin
owner: catalog-maintainers
-51
View File
@@ -1,51 +0,0 @@
{
"name": "@internal/plugin-catalog-customized",
"description": "The internal Backstage Customizable plugin for browsing the Backstage catalog",
"version": "0.0.14",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
"private": true,
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
"types": "dist/index.d.ts"
},
"backstage": {
"role": "frontend-plugin"
},
"homepage": "https://backstage.io",
"repository": {
"type": "git",
"url": "https://github.com/backstage/backstage",
"directory": "plugins/catalog-customized"
},
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
"lint": "backstage-cli package lint",
"test": "backstage-cli package test",
"prepack": "backstage-cli package prepack",
"postpack": "backstage-cli package postpack",
"clean": "backstage-cli package clean"
},
"dependencies": {
"@backstage/plugin-catalog": "workspace:^",
"@backstage/plugin-catalog-react": "workspace:^"
},
"devDependencies": {
"@types/react": "^16.13.1 || ^17.0.0"
},
"peerDependencies": {
"react": "^16.13.1 || ^17.0.0",
"react-dom": "^16.13.1 || ^17.0.0",
"react-router-dom": "6.0.0-beta.0 || ^6.3.0"
},
"files": [
"dist"
]
}
+1 -2
View File
@@ -53,8 +53,7 @@ export const catalogGraphPlugin: BackstagePlugin<
},
true
>;
},
{}
}
>;
// @public
-1
View File
@@ -134,7 +134,6 @@ const catalogImportPlugin: BackstagePlugin<
{
importPage: RouteRef<undefined>;
},
{},
{}
>;
export { catalogImportPlugin };
@@ -34,7 +34,6 @@ export const catalogUnprocessedEntitiesPlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
+18
View File
@@ -0,0 +1,18 @@
## API Report File for "@backstage/plugin-catalog"
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
```ts
import { TranslationRef } from '@backstage/core-plugin-api/alpha';
// @alpha (undocumented)
export const catalogTranslationRef: TranslationRef<
'catalog',
{
readonly catalog_page_title: '{{orgName}} Catalog';
readonly catalog_page_create_button_title: 'Create';
}
>;
// (No @packageDocumentation comment for this package)
```
+1 -2
View File
@@ -117,8 +117,7 @@ export const catalogPlugin: BackstagePlugin<
},
true
>;
},
CatalogInputPluginOptions
}
>;
// @public (undocumented)
+16 -3
View File
@@ -6,9 +6,22 @@
"types": "src/index.ts",
"license": "Apache-2.0",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
"types": "dist/index.d.ts"
"access": "public"
},
"exports": {
".": "./src/index.ts",
"./alpha": "./src/alpha.ts",
"./package.json": "./package.json"
},
"typesVersions": {
"*": {
"alpha": [
"src/alpha.ts"
],
"package.json": [
"package.json"
]
}
},
"backstage": {
"role": "frontend-plugin"
@@ -1,5 +1,5 @@
/*
* Copyright 2020 The Backstage Authors
* Copyright 2023 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,6 +13,5 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import './plugin';
export * from '@backstage/plugin-catalog';
export * from './translation';
@@ -29,7 +29,6 @@ import {
MockStarredEntitiesApi,
starredEntitiesApiRef,
} from '@backstage/plugin-catalog-react';
import { MockPluginProvider } from '@backstage/test-utils/alpha';
import {
mockBreakpoint,
MockStorageApi,
@@ -133,7 +132,7 @@ describe('DefaultCatalogPage', () => {
[starredEntitiesApiRef, new MockStarredEntitiesApi()],
]}
>
<MockPluginProvider>{children}</MockPluginProvider>
{children}
</TestApiProvider>,
{
mountedRoutes: {
@@ -41,7 +41,8 @@ import {
import React, { ReactNode } from 'react';
import { createComponentRouteRef } from '../../routes';
import { CatalogTable, CatalogTableRow } from '../CatalogTable';
import { useCatalogPluginOptions } from '../../options';
import { catalogTranslationRef } from '../../translation';
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
/**
* Props for root catalog pages.
@@ -71,15 +72,14 @@ export function DefaultCatalogPage(props: DefaultCatalogPageProps) {
const orgName =
useApi(configApiRef).getOptionalString('organization.name') ?? 'Backstage';
const createComponentLink = useRouteRef(createComponentRouteRef);
const { createButtonTitle } = useCatalogPluginOptions();
const { t } = useTranslationRef(catalogTranslationRef);
return (
<PageWithHeader title={`${orgName} Catalog`} themeId="home">
<PageWithHeader title={t('catalog_page_title', { orgName })} themeId="home">
<Content>
<ContentHeader title="">
<CreateButton
title={createButtonTitle}
title={t('catalog_page_create_button_title')}
to={createComponentLink && createComponentLink()}
/>
<SupportButton>All your software catalog entities</SupportButton>
-29
View File
@@ -1,29 +0,0 @@
/*
* Copyright 2020 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { usePluginOptions } from '@backstage/core-plugin-api/alpha';
export type CatalogPluginOptions = {
createButtonTitle: string;
};
/** @ignore */
export type CatalogInputPluginOptions = {
createButtonTitle: string;
};
export const useCatalogPluginOptions = () =>
usePluginOptions<CatalogPluginOptions>();
-9
View File
@@ -52,7 +52,6 @@ import { HasSystemsCardProps } from './components/HasSystemsCard';
import { RelatedEntitiesCardProps } from './components/RelatedEntitiesCard';
import { CatalogSearchResultListItemProps } from './components/CatalogSearchResultListItem';
import { rootRouteRef } from './routes';
import { CatalogInputPluginOptions, CatalogPluginOptions } from './options';
/** @public */
export const catalogPlugin = createPlugin({
@@ -83,14 +82,6 @@ export const catalogPlugin = createPlugin({
viewTechDoc: viewTechDocRouteRef,
createFromTemplate: createFromTemplateRouteRef,
},
__experimentalConfigure(
options?: CatalogInputPluginOptions,
): CatalogPluginOptions {
const defaultOptions = {
createButtonTitle: 'Create',
};
return { ...defaultOptions, ...options };
},
});
/** @public */
@@ -1,5 +1,5 @@
/*
* Copyright 2020 The Backstage Authors
* Copyright 2023 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,9 +14,13 @@
* limitations under the License.
*/
import { catalogPlugin } from '@backstage/plugin-catalog';
import { createTranslationRef } from '@backstage/core-plugin-api/alpha';
// id: 'catalog-customized'
catalogPlugin.__experimentalReconfigure({
createButtonTitle: 'New',
/** @alpha */
export const catalogTranslationRef = createTranslationRef({
id: 'catalog',
messages: {
catalog_page_title: `{{orgName}} Catalog`,
catalog_page_create_button_title: 'Create',
},
});
-1
View File
@@ -85,7 +85,6 @@ export const cicdStatisticsPlugin: BackstagePlugin<
{
entityContent: RouteRef<undefined>;
},
{},
{}
>;
+1 -1
View File
@@ -63,7 +63,7 @@ export const circleCIApiRef: ApiRef<CircleCIApi>;
export const circleCIBuildRouteRef: SubRouteRef<PathParams<'/:buildId'>>;
// @public (undocumented)
const circleCIPlugin: BackstagePlugin<{}, {}, {}>;
const circleCIPlugin: BackstagePlugin<{}, {}>;
export { circleCIPlugin };
export { circleCIPlugin as plugin };
-1
View File
@@ -104,7 +104,6 @@ const cloudbuildPlugin: BackstagePlugin<
{
entityContent: RouteRef<undefined>;
},
{},
{}
>;
export { cloudbuildPlugin };
-1
View File
@@ -42,7 +42,6 @@ export const codeClimatePlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
-1
View File
@@ -14,7 +14,6 @@ export const codeCoveragePlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
-1
View File
@@ -24,7 +24,6 @@ export const codescenePlugin: BackstagePlugin<
projectId: string;
}>;
},
{},
{}
>;
-1
View File
@@ -29,7 +29,6 @@ export const configSchemaPlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
+2 -2
View File
@@ -242,6 +242,7 @@ export type ConfigContextProps = {
icons: Icon[];
engineerCost: number;
engineerThreshold: number;
hideTrendLine: boolean;
currencies: Currency[];
};
@@ -326,8 +327,7 @@ const costInsightsPlugin: BackstagePlugin<
growthAlerts: RouteRef<undefined>;
unlabeledDataflowAlerts: RouteRef<undefined>;
},
{},
CostInsightsInputPluginOptions
{}
>;
export { costInsightsPlugin };
export { costInsightsPlugin as plugin };
+5
View File
@@ -26,6 +26,11 @@ export interface Config {
*/
engineerThreshold?: number;
/**
* @visibility frontend
*/
hideTrendLine?: boolean;
/**
* @visibility frontend
*/
@@ -15,7 +15,6 @@
*/
import React from 'react';
import { fireEvent } from '@testing-library/react';
import { MockPluginProvider } from '@backstage/test-utils/alpha';
import { renderInTestApp } from '@backstage/test-utils';
import { CostOverviewCard } from './CostOverviewCard';
import { Cost } from '@backstage/plugin-cost-insights-common';
@@ -45,9 +44,7 @@ function renderInContext(children: JSX.Element) {
<MockConfigProvider>
<MockFilterProvider>
<MockBillingDateProvider>
<MockScrollProvider>
<MockPluginProvider>{children}</MockPluginProvider>
</MockScrollProvider>
<MockScrollProvider>{children}</MockScrollProvider>
</MockBillingDateProvider>
</MockFilterProvider>
</MockConfigProvider>
@@ -47,7 +47,6 @@ import { groupByDate, trendFrom } from '../../utils/charts';
import { aggregationSort } from '../../utils/sort';
import { CostOverviewLegend } from './CostOverviewLegend';
import { TooltipRenderer } from '../../types';
import { useCostInsightsOptions } from '../../options';
import { useConfig } from '../../hooks';
type CostOverviewChartProps = {
@@ -65,7 +64,7 @@ export const CostOverviewChart = ({
}: CostOverviewChartProps) => {
const theme = useTheme<CostInsightsTheme>();
const styles = useStyles(theme);
const { baseCurrency } = useConfig();
const { baseCurrency, hideTrendLine } = useConfig();
const data = {
dailyCost: {
@@ -134,7 +133,6 @@ export const CostOverviewChart = ({
);
};
const { hideTrendLine } = useCostInsightsOptions();
const localizedTickFormatter = formatGraphValue(baseCurrency);
return (
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import React from 'react';
import { MockPluginProvider } from '@backstage/test-utils/alpha';
import { renderInTestApp, TestApiProvider } from '@backstage/test-utils';
import {
changeOf,
@@ -65,9 +64,7 @@ function renderInContext(children: JSX.Element) {
<MockFilterProvider>
<MockBillingDateProvider>
<MockScrollProvider>
<MockScrollProvider>
<MockPluginProvider>{children}</MockPluginProvider>
</MockScrollProvider>
<MockScrollProvider>{children}</MockScrollProvider>
</MockScrollProvider>
</MockBillingDateProvider>
</MockFilterProvider>
@@ -72,6 +72,7 @@ export type ConfigContextProps = {
icons: Icon[];
engineerCost: number;
engineerThreshold: number;
hideTrendLine: boolean;
currencies: Currency[];
};
@@ -86,6 +87,7 @@ const defaultState: ConfigContextProps = {
icons: [],
engineerCost: 0,
engineerThreshold: EngineerThreshold,
hideTrendLine: false,
currencies: defaultCurrencies,
};
@@ -193,12 +195,20 @@ export const ConfigProvider = ({ children }: PropsWithChildren<{}>) => {
);
}
function getHideTrendLine(): boolean {
return (
c.getOptionalBoolean('costInsights.hideTrendLine') ??
defaultState.hideTrendLine
);
}
function getConfig() {
const baseCurrency = getBaseCurrency();
const products = getProducts();
const metrics = getMetrics();
const engineerCost = getEngineerCost();
const engineerThreshold = getEngineerThreshold();
const hideTrendLine = getHideTrendLine();
const icons = getIcons();
const currencies = getCurrencies();
@@ -212,6 +222,7 @@ export const ConfigProvider = ({ children }: PropsWithChildren<{}>) => {
products,
engineerCost,
engineerThreshold,
hideTrendLine,
icons,
currencies,
}));
-29
View File
@@ -1,29 +0,0 @@
/*
* Copyright 2020 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { usePluginOptions } from '@backstage/core-plugin-api/alpha';
export type CostInsightsPluginOptions = {
hideTrendLine?: boolean;
};
/** @ignore */
export type CostInsightsInputPluginOptions = {
hideTrendLine?: boolean;
};
export const useCostInsightsOptions = () =>
usePluginOptions<CostInsightsPluginOptions>();
-12
View File
@@ -19,10 +19,6 @@ import {
createRouteRef,
createRoutableExtension,
} from '@backstage/core-plugin-api';
import {
CostInsightsInputPluginOptions,
CostInsightsPluginOptions,
} from './options';
export const rootRouteRef = createRouteRef({
id: 'cost-insights',
@@ -45,14 +41,6 @@ export const costInsightsPlugin = createPlugin({
growthAlerts: projectGrowthAlertRef,
unlabeledDataflowAlerts: unlabeledDataflowAlertRef,
},
__experimentalConfigure(
options?: CostInsightsInputPluginOptions,
): CostInsightsPluginOptions {
const defaultOptions = {
hideTrendLine: false,
};
return { ...defaultOptions, ...options };
},
});
/** @public */
@@ -96,6 +96,7 @@ export const MockConfigProvider = (props: MockConfigProviderProps) => {
icons: [],
engineerCost: 0,
engineerThreshold: EngineerThreshold,
hideTrendLine: false,
currencies: [],
};
-1
View File
@@ -36,7 +36,6 @@ export const devToolsPlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
+1 -1
View File
@@ -10,7 +10,7 @@ import { Entity } from '@backstage/catalog-model';
import { JSX as JSX_2 } from 'react';
// @public
export const dynatracePlugin: BackstagePlugin<{}, {}, {}>;
export const dynatracePlugin: BackstagePlugin<{}, {}>;
// @public
export const DynatraceTab: () => JSX_2.Element;
-1
View File
@@ -70,7 +70,6 @@ export const entityFeedbackPlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
-1
View File
@@ -20,7 +20,6 @@ export const entityValidationPlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
-1
View File
@@ -17,7 +17,6 @@ export const todoListPlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
+1 -2
View File
@@ -99,8 +99,7 @@ const explorePlugin: BackstagePlugin<
},
true
>;
},
{}
}
>;
export { explorePlugin };
export { explorePlugin as plugin };
-1
View File
@@ -18,7 +18,6 @@ export const firehydrantPlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
-1
View File
@@ -31,7 +31,6 @@ export const fossaPlugin: BackstagePlugin<
{
fossaOverview: RouteRef<undefined>;
},
{},
{}
>;
```
-1
View File
@@ -51,7 +51,6 @@ export const gcalendarPlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
-1
View File
@@ -48,7 +48,6 @@ const gcpProjectsPlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
export { gcpProjectsPlugin };
@@ -263,7 +263,6 @@ export const gitReleaseManagerPlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
-1
View File
@@ -177,7 +177,6 @@ const githubActionsPlugin: BackstagePlugin<
{
entityContent: RouteRef<undefined>;
},
{},
{}
>;
export { githubActionsPlugin };
+1 -1
View File
@@ -43,7 +43,7 @@ export type GithubDeployment = {
};
// @public (undocumented)
export const githubDeploymentsPlugin: BackstagePlugin<{}, {}, {}>;
export const githubDeploymentsPlugin: BackstagePlugin<{}, {}>;
// @public (undocumented)
export const GithubDeploymentsTable: {
-1
View File
@@ -52,7 +52,6 @@ export const githubIssuesPlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
-1
View File
@@ -124,7 +124,6 @@ const gitopsProfilesPlugin: BackstagePlugin<
}>;
createPage: RouteRef<undefined>;
},
{},
{}
>;
export { gitopsProfilesPlugin };
+1 -1
View File
@@ -15,7 +15,7 @@ export const EntityGoCdContent: () => JSX.Element;
export const GOCD_PIPELINES_ANNOTATION = 'gocd.org/pipelines';
// @public
export const gocdPlugin: BackstagePlugin<{}, {}, {}>;
export const gocdPlugin: BackstagePlugin<{}, {}>;
// @public
export const isGoCdAvailable: (entity: Entity) => boolean;
+1 -1
View File
@@ -44,7 +44,7 @@ export const GraphiQLIcon: IconComponent;
export const GraphiQLPage: () => JSX_2.Element;
// @public (undocumented)
const graphiqlPlugin: BackstagePlugin<{}, {}, {}>;
const graphiqlPlugin: BackstagePlugin<{}, {}>;
export { graphiqlPlugin };
export { graphiqlPlugin as plugin };
-1
View File
@@ -59,7 +59,6 @@ export const graphqlVoyagerPlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
-1
View File
@@ -137,7 +137,6 @@ export const homePlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
-1
View File
@@ -539,7 +539,6 @@ const ilertPlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
export { ilertPlugin };
-1
View File
@@ -99,7 +99,6 @@ const jenkinsPlugin: BackstagePlugin<
{
entityContent: RouteRef<undefined>;
},
{},
{}
>;
export { jenkinsPlugin };
-1
View File
@@ -28,7 +28,6 @@ const kafkaPlugin: BackstagePlugin<
{
entityContent: RouteRef<undefined>;
},
{},
{}
>;
export { kafkaPlugin };
-1
View File
@@ -513,7 +513,6 @@ const kubernetesPlugin: BackstagePlugin<
{
entityContent: RouteRef<undefined>;
},
{},
{}
>;
export { kubernetesPlugin };
-1
View File
@@ -49,7 +49,6 @@ const lighthousePlugin: BackstagePlugin<
root: RouteRef<undefined>;
entityContent: RouteRef<undefined>;
},
{},
{}
>;
export { lighthousePlugin };
+1 -1
View File
@@ -16,7 +16,7 @@ export const EntityLinguistCard: () => JSX_2.Element;
export const isLinguistAvailable: (entity: Entity) => boolean;
// @public (undocumented)
export const linguistPlugin: BackstagePlugin<{}, {}, {}>;
export const linguistPlugin: BackstagePlugin<{}, {}>;
// (No @packageDocumentation comment for this package)
```
-1
View File
@@ -31,7 +31,6 @@ export const newRelicDashboardPlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
-1
View File
@@ -17,7 +17,6 @@ const newRelicPlugin: BackstagePlugin<
{
root: RouteRef<undefined>;
},
{},
{}
>;
export { newRelicPlugin };

Some files were not shown because too many files have changed in this diff Show More