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:
committed by
Camila Belo
parent
baa8af646c
commit
5514040b44
@@ -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
@@ -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,
|
||||
|
||||
+7
-7
@@ -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,
|
||||
});
|
||||
+6
-7
@@ -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(),
|
||||
};
|
||||
+5
-5
@@ -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,
|
||||
});
|
||||
+5
-5
@@ -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 }),
|
||||
@@ -14,6 +14,6 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export * from './CoreStorageVisitsApi';
|
||||
export * from './LocalStorageVisitsApi';
|
||||
export * from './VisitsStorageApi';
|
||||
export * from './VisitsWebStorageApi';
|
||||
export * from './VisitsApi';
|
||||
|
||||
@@ -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: {
|
||||
|
||||
Reference in New Issue
Block a user