Skip to content

Commit 9f30eb0

Browse files
committed
feat:add onAvailableContexts and onCurrentContext
Signed-off-by: Philippe Martin <[email protected]>
1 parent 39ec40e commit 9f30eb0

20 files changed

+46
-76
lines changed

packages/api/src/kubernetes-dashboard-extension-api.d.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,23 @@
1616
* SPDX-License-Identifier: Apache-2.0
1717
***********************************************************************/
1818

19+
import type { Disposable } from '@podman-desktop/api';
20+
21+
export interface AvailableContextsInfo {
22+
contextNames: string[];
23+
}
24+
25+
export interface CurrentContextInfo {
26+
contextName?: string;
27+
namespace?: string;
28+
}
29+
1930
/**
2031
* The subscriber for the events emitted by the Kubernetes Dashboard extension.
2132
*/
2233
export interface KubernetesDashboardSubscriber {
34+
onAvailableContexts(listener: (event: AvailableContextsInfo) => void): Disposable;
35+
onCurrentContext(listener: (event: CurrentContextInfo) => void): Disposable;
2336
/**
2437
* Disposes the subscriber and unsubscribes from all the events emitted by the Kubernetes Dashboard extension.
2538
*/

packages/channels/src/channels.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,8 @@ import type { PortForwardApi } from './interface/port-forward-api';
2424
import type { SubscribeApi } from './interface/subscribe-api';
2525
import type { SystemApi } from './interface/system-api';
2626
import type { ActiveResourcesCountInfo } from './model/active-resources-count-info';
27-
import type { AvailableContextsInfo } from './model/available-contexts-info';
2827
import type { ContextsHealthsInfo } from './model/contexts-healths-info';
2928
import type { ContextsPermissionsInfo } from './model/contexts-permissions-info';
30-
import type { CurrentContextInfo } from './model/current-context-info';
3129
import type { EndpointsInfo } from './model/endpoints-info';
3230
import type { KubernetesProvidersInfo } from './model/kubernetes-providers-info';
3331
import type { PodLogsChunk } from './model/pod-logs-chunk';
@@ -38,6 +36,7 @@ import type { ResourceEventsInfo } from './model/resource-events-info';
3836
import type { ResourcesCountInfo } from './model/resources-count-info';
3937
import type { UpdateResourceInfo } from './model/update-resource-info';
4038
import { createRpcChannel } from '@kubernetes-dashboard/rpc';
39+
import type { AvailableContextsInfo, CurrentContextInfo } from '@podman-desktop/kubernetes-dashboard-extension-api';
4140

4241
// RPC channels (used by the webview to send requests to the extension)
4342
export const API_CONTEXTS = createRpcChannel<ContextsApi>('ContextsApi');

packages/channels/src/model/available-contexts-info.ts

Lines changed: 0 additions & 21 deletions
This file was deleted.

packages/channels/src/model/current-context-info.ts

Lines changed: 0 additions & 22 deletions
This file was deleted.

packages/channels/src/model/index.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,11 @@
1717
***********************************************************************/
1818

1919
export * from './active-resources-count-info';
20-
export * from './available-contexts-info';
2120
export * from './context-resource-events';
2221
export * from './context-resources-details';
2322
export * from './context-resources-items';
2423
export * from './contexts-healths-info';
2524
export * from './contexts-permissions-info';
26-
export * from './current-context-info';
2725
export * from './endpoint';
2826
export * from './endpoints-info';
2927
export * from './endpoints-options';

packages/extension/src/dashboard-extension.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ import {
3636
API_PORT_FORWARD,
3737
API_SUBSCRIBE,
3838
API_SYSTEM,
39+
AVAILABLE_CONTEXTS,
40+
CURRENT_CONTEXT,
3941
IDisposable,
4042
} from '@kubernetes-dashboard/channels';
4143
import { SystemApiImpl } from './manager/system-api';
@@ -47,6 +49,8 @@ import { NavigationApiImpl } from '/@/manager/navigation-api';
4749
import { KubernetesProvidersManager } from '/@/manager/kubernetes-providers';
4850
import { ChannelSubscriber } from '/@/subscriber/channel-subscriber';
4951
import type {
52+
AvailableContextsInfo,
53+
CurrentContextInfo,
5054
KubernetesDashboardExtensionApi,
5155
KubernetesDashboardSubscriber,
5256
} from '@podman-desktop/kubernetes-dashboard-extension-api';
@@ -131,6 +135,12 @@ export class DashboardExtension {
131135
const subscriber = new ApiSubscriber();
132136
this.#contextsStatesDispatcher.addSubscriber(subscriber);
133137
return {
138+
onAvailableContexts: (listener: (event: AvailableContextsInfo) => void): IDisposable => {
139+
return subscriber.subscribe(AVAILABLE_CONTEXTS, undefined, listener);
140+
},
141+
onCurrentContext: (listener: (event: CurrentContextInfo) => void): IDisposable => {
142+
return subscriber.subscribe(CURRENT_CONTEXT, undefined, listener);
143+
},
134144
dispose: () => {
135145
subscriber.dispose();
136146
},

packages/extension/src/dispatcher/available-contexts-dispatcher.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@
1919
import { inject, injectable } from 'inversify';
2020
import type { DispatcherObject } from './util/dispatcher-object';
2121
import { AbsDispatcherObjectImpl } from './util/dispatcher-object';
22-
import { AVAILABLE_CONTEXTS, AvailableContextsInfo } from '@kubernetes-dashboard/channels';
22+
import { AVAILABLE_CONTEXTS } from '@kubernetes-dashboard/channels';
2323
import { ContextsManager } from '/@/manager/contexts-manager';
24+
import type { AvailableContextsInfo } from '@podman-desktop/kubernetes-dashboard-extension-api';
2425

2526
@injectable()
2627
export class AvailableContextsDispatcher

packages/extension/src/dispatcher/current-context-dispatcher.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@
1919
import { inject, injectable } from 'inversify';
2020
import type { DispatcherObject } from './util/dispatcher-object';
2121
import { AbsDispatcherObjectImpl } from './util/dispatcher-object';
22-
import { CURRENT_CONTEXT, CurrentContextInfo } from '@kubernetes-dashboard/channels';
22+
import { CURRENT_CONTEXT } from '@kubernetes-dashboard/channels';
2323
import { ContextsManager } from '/@/manager/contexts-manager';
24+
import type { CurrentContextInfo } from '@podman-desktop/kubernetes-dashboard-extension-api';
2425

2526
@injectable()
2627
export class CurrentContextDispatcher

packages/webview/src/App.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@
1919
import { render } from '@testing-library/svelte';
2020
import { StatesMocks } from '/@/tests/state-mocks';
2121
import { FakeStateObject } from '/@/state/util/fake-state-object.svelte';
22-
import type { AvailableContextsInfo, CurrentContextInfo } from '@kubernetes-dashboard/channels';
2322
import App from './App.svelte';
2423
import NoContextPage from './component/dashboard/NoContextPage.svelte';
2524
import NoSelectedContextPage from './component/dashboard/NoSelectedContextPage.svelte';
2625
import * as svelte from 'svelte';
2726
import type { WebviewApi } from '@podman-desktop/webview-api';
2827
import AppWithContext from '/@/AppWithContext.svelte';
2928
import { afterEach, beforeEach, expect, test, vi } from 'vitest';
29+
import type { CurrentContextInfo, AvailableContextsInfo } from '@podman-desktop/kubernetes-dashboard-extension-api';
3030

3131
vi.mock(import('/@/component/dashboard/NoContextPage.svelte'));
3232
vi.mock(import('/@/component/dashboard/NoSelectedContextPage.svelte'));

packages/webview/src/component/connection/CheckConnection.spec.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,11 @@ import { assert, beforeEach, expect, test, vi } from 'vitest';
2323

2424
import { StatesMocks } from '/@/tests/state-mocks';
2525
import { FakeStateObject } from '/@/state/util/fake-state-object.svelte';
26-
import {
27-
type CurrentContextInfo,
28-
type ContextsHealthsInfo,
29-
API_CONTEXTS,
30-
type ContextsApi,
31-
} from '@kubernetes-dashboard/channels';
26+
import { type ContextsHealthsInfo, API_CONTEXTS, type ContextsApi } from '@kubernetes-dashboard/channels';
3227
import CheckConnection from './CheckConnection.svelte';
3328
import userEvent from '@testing-library/user-event';
3429
import { RemoteMocks } from '/@/tests/remote-mocks';
30+
import type { CurrentContextInfo } from '@podman-desktop/kubernetes-dashboard-extension-api';
3531

3632
const statesMocks = new StatesMocks();
3733
const remoteMocks = new RemoteMocks();

0 commit comments

Comments
 (0)