rename(plugins/home): VisitsStorageApi and VisitsWebStorageApi

Signed-off-by: Renan Mendes Carvalho <aitherios@gmail.com>
Co-authored-by: Avantika Iyer <chick157@gmail.com>
This commit is contained in:
Renan Mendes Carvalho
2023-09-20 14:16:48 +02:00
committed by Camila Belo
parent baa8af646c
commit 5514040b44
8 changed files with 62 additions and 63 deletions
+7 -7
View File
@@ -274,8 +274,8 @@ documentation for more information. Bellow you can see an example for two option
// packages/app/src/apis.ts
// ...
import {
CoreStorageVisitsApi,
LocalStoreVisitsApi,
VisitsStorageApi,
VisitsWebStorageApi,
visitsApiRef,
} from '@backstage/plugin-home';
// ...
@@ -288,17 +288,17 @@ export const apis: AnyApiFactory[] = [
identityApi: identityApiRef,
},
factory: ({ storageApi, identityApi }) =>
CoreStorageVisitsApi.create({ storageApi, identityApi }),
VisitsStorageApi.create({ storageApi, identityApi }),
}),
// Or a local data implementation, relies on WebStorage implementation of storageApi
// Or a localStorage data implementation, relies on WebStorage implementation of storageApi
createApiFactory({
api: visitsApiRef,
deps: {
identityApi: identityApiRef,
errorApi: errorApiRef
},
factory: ({ identityApi, errorApi }) => LocalStoreVisitsApi.create({ identityApi, errorApi }),
factory: ({ identityApi, errorApi }) => VisitsWebStorageApi.create({ identityApi, errorApi }),
}),
// ...
```
@@ -308,14 +308,14 @@ See the example usage:
```ts
// packages/app/src/App.tsx
import { VisitsListener } from '@backstage/plugin-home';
import { VisitListener } from '@backstage/plugin-home';
// ...
export default app.createRoot(
<>
<AlertDisplay />
<OAuthRequestDialog />
<AppRouter>
<VisitsListener />
<VisitListener />
<Root>{routes}</Root>
</AppRouter>
</>,
+28 -28
View File
@@ -77,21 +77,6 @@ export const ComponentTabs: (props: {
}[];
}) => JSX_2.Element;
// @public
export class CoreStorageVisitsApi implements VisitsApi {
// (undocumented)
static create(options: CoreStorageVisitsApiOptions): CoreStorageVisitsApi;
list(queryParams?: VisitsApiQueryParams): Promise<Visit[]>;
save(saveParams: VisitsApiSaveParams): Promise<Visit>;
}
// @public (undocumented)
export type CoreStorageVisitsApiOptions = {
limit?: number;
storageApi: StorageApi;
identityApi: IdentityApi;
};
// @public @deprecated (undocumented)
export const createCardExtension: typeof createCardExtension_2;
@@ -179,19 +164,6 @@ export type LayoutConfiguration = {
resizable?: boolean;
};
// @public
export class LocalStorageVisitsApi {
// (undocumented)
static create(options: LocalStorageVisitsApiOptions): CoreStorageVisitsApi;
}
// @public (undocumented)
export type LocalStorageVisitsApiOptions = {
limit?: number;
identityApi: IdentityApi;
errorApi: ErrorApi;
};
// @public @deprecated (undocumented)
export type RendererProps = RendererProps_2;
@@ -289,6 +261,34 @@ export type VisitsApiSaveParams = {
visit: Omit<Visit, 'id' | 'hits' | 'timestamp'>;
};
// @public
export class VisitsStorageApi implements VisitsApi {
// (undocumented)
static create(options: VisitsStorageApiOptions): VisitsStorageApi;
list(queryParams?: VisitsApiQueryParams): Promise<Visit[]>;
save(saveParams: VisitsApiSaveParams): Promise<Visit>;
}
// @public (undocumented)
export type VisitsStorageApiOptions = {
limit?: number;
storageApi: StorageApi;
identityApi: IdentityApi;
};
// @public
export class VisitsWebStorageApi {
// (undocumented)
static create(options: VisitsWebStorageApiOptions): VisitsStorageApi;
}
// @public (undocumented)
export type VisitsWebStorageApiOptions = {
limit?: number;
identityApi: IdentityApi;
errorApi: ErrorApi;
};
// @public
export const WelcomeTitle: ({
language,
@@ -15,11 +15,11 @@
*/
import { BackstageUserIdentity, IdentityApi } from '@backstage/core-plugin-api';
import { CoreStorageVisitsApi } from './CoreStorageVisitsApi';
import { VisitsStorageApi } from './VisitsStorageApi';
import { MockStorageApi } from '@backstage/test-utils';
import { Visit, VisitsApi } from './VisitsApi';
describe('CoreStorageVisitsApi.create', () => {
describe('VisitsStorageApi.create', () => {
const mockRandomUUID = () =>
'068f3129-7440-4e0e-8fd4-xxxxxxxxxxxx'.replace(
/x/g,
@@ -46,7 +46,7 @@ describe('CoreStorageVisitsApi.create', () => {
});
it('instantiates', () => {
const api = CoreStorageVisitsApi.create({
const api = VisitsStorageApi.create({
storageApi: MockStorageApi.create(),
identityApi: mockIdentityApi,
});
@@ -55,7 +55,7 @@ describe('CoreStorageVisitsApi.create', () => {
describe('.save()', () => {
it('saves a visit', async () => {
const api = CoreStorageVisitsApi.create({
const api = VisitsStorageApi.create({
storageApi: MockStorageApi.create(),
identityApi: mockIdentityApi,
});
@@ -72,7 +72,7 @@ describe('CoreStorageVisitsApi.create', () => {
});
it('can control the number of stored entities', async () => {
const api = CoreStorageVisitsApi.create({
const api = VisitsStorageApi.create({
storageApi: MockStorageApi.create(),
identityApi: mockIdentityApi,
limit: 2,
@@ -106,7 +106,7 @@ describe('CoreStorageVisitsApi.create', () => {
});
it('correctly bumps the hits from a previous visit', async () => {
const api = CoreStorageVisitsApi.create({
const api = VisitsStorageApi.create({
storageApi: MockStorageApi.create(),
identityApi: mockIdentityApi,
});
@@ -135,7 +135,7 @@ describe('CoreStorageVisitsApi.create', () => {
let baseDate: number;
beforeEach(() => {
api = CoreStorageVisitsApi.create({
api = VisitsStorageApi.create({
storageApi: MockStorageApi.create(),
identityApi: mockIdentityApi,
});
@@ -22,7 +22,7 @@ import {
} from './VisitsApi';
/** @public */
export type CoreStorageVisitsApiOptions = {
export type VisitsStorageApiOptions = {
limit?: number;
storageApi: StorageApi;
identityApi: IdentityApi;
@@ -36,18 +36,17 @@ type ArrayElement<A> = A extends readonly (infer T)[] ? T : never;
* Beware that filtering and ordering are done in memory therefore it is
* prudent to keep limit to a reasonable size.
*/
export class CoreStorageVisitsApi implements VisitsApi {
private readonly randomUUID = window.crypto.randomUUID;
export class VisitsStorageApi implements VisitsApi {
private readonly limit: number;
private readonly storageApi: StorageApi;
private readonly storageKeyPrefix = '@backstage/plugin-home:visits';
private readonly identityApi: IdentityApi;
static create(options: CoreStorageVisitsApiOptions) {
return new CoreStorageVisitsApi(options);
static create(options: VisitsStorageApiOptions) {
return new VisitsStorageApi(options);
}
private constructor(options: CoreStorageVisitsApiOptions) {
private constructor(options: VisitsStorageApiOptions) {
this.limit = Math.abs(options.limit ?? 100);
this.storageApi = options.storageApi;
this.identityApi = options.identityApi;
@@ -95,7 +94,7 @@ export class CoreStorageVisitsApi implements VisitsApi {
const visit: Visit = {
...saveParams.visit,
id: this.randomUUID(),
id: window.crypto.randomUUID(),
hits: 1,
timestamp: Date.now(),
};
@@ -15,9 +15,9 @@
*/
import { BackstageUserIdentity, IdentityApi } from '@backstage/core-plugin-api';
import { LocalStorageVisitsApi } from './LocalStorageVisitsApi';
import { VisitsWebStorageApi } from './VisitsWebStorageApi';
describe('LocalStorageVisitsApi.create()', () => {
describe('VisitsWebStorageApi.create()', () => {
const mockRandomUUID = () =>
'068f3129-7440-4e0e-8fd4-xxxxxxxxxxxx'.replace(
/x/g,
@@ -44,7 +44,7 @@ describe('LocalStorageVisitsApi.create()', () => {
});
it('instantiates with only identitiyApi', () => {
const api = LocalStorageVisitsApi.create({
const api = VisitsWebStorageApi.create({
identityApi: mockIdentityApi,
errorApi: mockErrorApi,
});
@@ -52,7 +52,7 @@ describe('LocalStorageVisitsApi.create()', () => {
});
it('saves a visit', async () => {
const api = LocalStorageVisitsApi.create({
const api = VisitsWebStorageApi.create({
identityApi: mockIdentityApi,
errorApi: mockErrorApi,
});
@@ -69,7 +69,7 @@ describe('LocalStorageVisitsApi.create()', () => {
});
it('retrieves visits', async () => {
const api = LocalStorageVisitsApi.create({
const api = VisitsWebStorageApi.create({
identityApi: mockIdentityApi,
errorApi: mockErrorApi,
});
@@ -14,11 +14,11 @@
* limitations under the License.
*/
import { ErrorApi, IdentityApi } from '@backstage/core-plugin-api';
import { CoreStorageVisitsApi } from './CoreStorageVisitsApi';
import { VisitsStorageApi } from './VisitsStorageApi';
import { WebStorage } from '@backstage/core-app-api';
/** @public */
export type LocalStorageVisitsApiOptions = {
export type VisitsWebStorageApiOptions = {
limit?: number;
identityApi: IdentityApi;
errorApi: ErrorApi;
@@ -28,9 +28,9 @@ export type LocalStorageVisitsApiOptions = {
* @public
* This is a reference implementation of VisitsApi using WebStorage.
*/
export class LocalStorageVisitsApi {
static create(options: LocalStorageVisitsApiOptions) {
return CoreStorageVisitsApi.create({
export class VisitsWebStorageApi {
static create(options: VisitsWebStorageApiOptions) {
return VisitsStorageApi.create({
limit: options.limit,
identityApi: options.identityApi,
storageApi: WebStorage.create({ errorApi: options.errorApi }),
+2 -2
View File
@@ -14,6 +14,6 @@
* limitations under the License.
*/
export * from './CoreStorageVisitsApi';
export * from './LocalStorageVisitsApi';
export * from './VisitsStorageApi';
export * from './VisitsWebStorageApi';
export * from './VisitsApi';
+2 -2
View File
@@ -25,7 +25,7 @@ import {
import { createCardExtension } from '@backstage/plugin-home-react';
import { ToolkitContentProps, VisitedByTypeProps } from './homePageComponents';
import { rootRouteRef } from './routes';
import { CoreStorageVisitsApi, visitsApiRef } from './api';
import { VisitsStorageApi, visitsApiRef } from './api';
/** @public */
export const homePlugin = createPlugin({
@@ -38,7 +38,7 @@ export const homePlugin = createPlugin({
identityApi: identityApiRef,
},
factory: ({ storageApi, identityApi }) =>
CoreStorageVisitsApi.create({ storageApi, identityApi }),
VisitsStorageApi.create({ storageApi, identityApi }),
}),
],
routes: {