Skip to content

Commit f165b5b

Browse files
committed
Expose useSpaces function to external consumers
1 parent ce4ded6 commit f165b5b

File tree

7 files changed

+25
-18
lines changed

7 files changed

+25
-18
lines changed

x-pack/plugins/spaces/public/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export type { SpaceAvatarProps } from './space_avatar';
3030

3131
export type { SpaceListProps } from './space_list';
3232

33-
export type { SpacesContextProps } from './spaces_context';
33+
export type { SpacesContextProps, SpacesReactContextValue } from './spaces_context';
3434

3535
export type { LazyComponentFn, SpacesApiUi, SpacesApiUiComponent } from './ui_api';
3636

x-pack/plugins/spaces/public/mocks.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ const createApiUiMock = () => {
2525
const mock: SpacesApiUiMock = {
2626
components: createApiUiComponentsMock(),
2727
redirectLegacyUrl: jest.fn(),
28+
useSpaces: jest.fn(),
2829
};
2930

3031
return mock;

x-pack/plugins/spaces/public/spaces_context/context.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,22 @@
77

88
import * as React from 'react';
99

10+
import type { CoreStart } from 'src/core/public';
11+
1012
import type { SpacesManager } from '../spaces_manager';
1113
import type { SpacesData } from '../types';
12-
import type { KibanaServices, SpacesReactContext, SpacesReactContextValue } from './types';
14+
import type { SpacesReactContext, SpacesReactContextValue } from './types';
1315

1416
const { useContext, createElement, createContext } = React;
1517

16-
const context = createContext<Partial<SpacesReactContextValue<KibanaServices>>>({});
18+
const context = createContext<Partial<SpacesReactContextValue<Partial<CoreStart>>>>({});
1719

18-
export const useSpaces = <Extra extends object = {}>(): SpacesReactContextValue<
19-
KibanaServices & Extra
20-
> =>
21-
useContext(
22-
(context as unknown) as React.Context<SpacesReactContextValue<KibanaServices & Extra>>
23-
);
20+
export const useSpaces = <
21+
Services extends Partial<CoreStart>
22+
>(): SpacesReactContextValue<Services> =>
23+
useContext((context as unknown) as React.Context<SpacesReactContextValue<Services>>);
2424

25-
export const createSpacesReactContext = <Services extends KibanaServices>(
25+
export const createSpacesReactContext = <Services extends Partial<CoreStart>>(
2626
services: Services,
2727
spacesManager: SpacesManager,
2828
spacesDataPromise: Promise<SpacesData>

x-pack/plugins/spaces/public/spaces_context/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
*/
77

88
export { useSpaces } from './context';
9-
export type { SpacesContextProps } from './types';
9+
export type { SpacesContextProps, SpacesReactContextValue } from './types';
1010
export { getSpacesContextProviderWrapper } from './wrapper';

x-pack/plugins/spaces/public/spaces_context/types.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,16 @@ import type { PluginsStart } from '../plugin';
1313
import type { SpacesManager } from '../spaces_manager';
1414
import type { SpacesData } from '../types';
1515

16-
export type KibanaServices = Partial<CoreStart>;
17-
18-
export interface SpacesReactContextValue<Services extends KibanaServices> {
16+
export interface SpacesReactContextValue<Services extends Partial<CoreStart>> {
1917
readonly spacesManager: SpacesManager;
2018
readonly spacesDataPromise: Promise<SpacesData>;
2119
readonly services: Services;
2220
}
2321

24-
export interface SpacesReactContext<T extends KibanaServices> {
25-
value: SpacesReactContextValue<T>;
22+
export interface SpacesReactContext<Services extends Partial<CoreStart>> {
23+
value: SpacesReactContextValue<Services>;
2624
Provider: React.FC;
27-
Consumer: React.Consumer<SpacesReactContextValue<T>>;
25+
Consumer: React.Consumer<SpacesReactContextValue<Services>>;
2826
}
2927

3028
export interface InternalProps {

x-pack/plugins/spaces/public/ui_api/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import type { StartServicesAccessor } from 'src/core/public';
99

1010
import type { PluginsStart } from '../plugin';
1111
import { createRedirectLegacyUrl } from '../share_saved_objects_to_space';
12+
import { useSpaces } from '../spaces_context';
1213
import type { SpacesManager } from '../spaces_manager';
1314
import { getComponents } from './components';
1415
import type { LazyComponentFn, SpacesApiUi, SpacesApiUiComponent } from './types';
@@ -26,5 +27,6 @@ export const getUiApi = ({ spacesManager, getStartServices }: GetUiApiOptions):
2627
return {
2728
components,
2829
redirectLegacyUrl: createRedirectLegacyUrl(getStartServices),
30+
useSpaces,
2931
};
3032
};

x-pack/plugins/spaces/public/ui_api/types.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,16 @@
77

88
import type { ReactElement } from 'react';
99

10+
import type { CoreStart } from 'src/core/public';
11+
1012
import type { CopyToSpaceFlyoutProps } from '../copy_saved_objects_to_space';
1113
import type {
1214
LegacyUrlConflictProps,
1315
ShareToSpaceFlyoutProps,
1416
} from '../share_saved_objects_to_space';
1517
import type { SpaceAvatarProps } from '../space_avatar';
1618
import type { SpaceListProps } from '../space_list';
17-
import type { SpacesContextProps } from '../spaces_context';
19+
import type { SpacesContextProps, SpacesReactContextValue } from '../spaces_context';
1820

1921
/**
2022
* Function that returns a promise for a lazy-loadable component.
@@ -50,6 +52,10 @@ export interface SpacesApiUi {
5052
* location_. Default value is 'object'.
5153
*/
5254
redirectLegacyUrl: (path: string, objectNoun?: string) => Promise<void>;
55+
/**
56+
* Helper function to easily access the Spaces React Context provider.
57+
*/
58+
useSpaces<Services extends Partial<CoreStart>>(): SpacesReactContextValue<Services>;
5359
}
5460

5561
/**

0 commit comments

Comments
 (0)