mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Remove all uses of legacy global Notification functions
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
2aa9fc972e
commit
b86eb3d8db
@ -22,6 +22,11 @@ import notificationsStoreInjectable from "../../renderer/components/notification
|
|||||||
import podStoreInjectable from "../../renderer/components/+workloads-pods/store.injectable";
|
import podStoreInjectable from "../../renderer/components/+workloads-pods/store.injectable";
|
||||||
import getDetailsUrlInjectable from "../../renderer/components/kube-detail-params/get-details-url.injectable";
|
import getDetailsUrlInjectable from "../../renderer/components/kube-detail-params/get-details-url.injectable";
|
||||||
import showDetailsInjectable from "../../renderer/components/kube-detail-params/show-details.injectable";
|
import showDetailsInjectable from "../../renderer/components/kube-detail-params/show-details.injectable";
|
||||||
|
import showCheckedErrorNotificationInjectable from "../../renderer/components/notifications/show-checked-error.injectable";
|
||||||
|
import showErrorNotificationInjectable from "../../renderer/components/notifications/show-error-notification.injectable";
|
||||||
|
import showInfoNotificationInjectable from "../../renderer/components/notifications/show-info-notification.injectable";
|
||||||
|
import showShortInfoNotificationInjectable from "../../renderer/components/notifications/show-short-info.injectable";
|
||||||
|
import showSuccessNotificationInjectable from "../../renderer/components/notifications/show-success-notification.injectable";
|
||||||
|
|
||||||
// layouts
|
// layouts
|
||||||
export * from "../../renderer/components/layout/main-layout";
|
export * from "../../renderer/components/layout/main-layout";
|
||||||
@ -67,7 +72,25 @@ export * from "../../renderer/components/drawer";
|
|||||||
export * from "../../renderer/components/dialog";
|
export * from "../../renderer/components/dialog";
|
||||||
export * from "../../renderer/components/line-progress";
|
export * from "../../renderer/components/line-progress";
|
||||||
export * from "../../renderer/components/menu";
|
export * from "../../renderer/components/menu";
|
||||||
export * from "../../renderer/components/notifications";
|
|
||||||
|
export type {
|
||||||
|
CreateNotificationOptions,
|
||||||
|
Notification,
|
||||||
|
NotificationId,
|
||||||
|
NotificationMessage,
|
||||||
|
NotificationStatus,
|
||||||
|
ShowNotification,
|
||||||
|
NotificationsStore,
|
||||||
|
} from "../../renderer/components/notifications";
|
||||||
|
|
||||||
|
export const Notifications = {
|
||||||
|
ok: asLegacyGlobalFunctionForExtensionApi(showSuccessNotificationInjectable),
|
||||||
|
error: asLegacyGlobalFunctionForExtensionApi(showErrorNotificationInjectable),
|
||||||
|
checkedError: asLegacyGlobalFunctionForExtensionApi(showCheckedErrorNotificationInjectable),
|
||||||
|
info: asLegacyGlobalFunctionForExtensionApi(showInfoNotificationInjectable),
|
||||||
|
shortInfo: asLegacyGlobalFunctionForExtensionApi(showShortInfoNotificationInjectable),
|
||||||
|
};
|
||||||
|
|
||||||
export * from "../../renderer/components/spinner";
|
export * from "../../renderer/components/spinner";
|
||||||
export * from "../../renderer/components/stepper";
|
export * from "../../renderer/components/stepper";
|
||||||
export * from "../../renderer/components/wizard";
|
export * from "../../renderer/components/wizard";
|
||||||
|
|||||||
@ -16,7 +16,7 @@ import { loadConfigFromString, splitConfig } from "../../../common/kube-helpers"
|
|||||||
import { docsUrl } from "../../../common/vars";
|
import { docsUrl } from "../../../common/vars";
|
||||||
import { isDefined, iter } from "../../utils";
|
import { isDefined, iter } from "../../utils";
|
||||||
import { Button } from "../button";
|
import { Button } from "../button";
|
||||||
import { Notifications } from "../notifications";
|
import type { ShowNotification } from "../notifications";
|
||||||
import { SettingLayout } from "../layout/setting-layout";
|
import { SettingLayout } from "../layout/setting-layout";
|
||||||
import { MonacoEditor } from "../monaco-editor";
|
import { MonacoEditor } from "../monaco-editor";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
@ -27,6 +27,8 @@ import type { EmitAppEvent } from "../../../common/app-event-bus/emit-event.inje
|
|||||||
import emitAppEventInjectable from "../../../common/app-event-bus/emit-event.injectable";
|
import emitAppEventInjectable from "../../../common/app-event-bus/emit-event.injectable";
|
||||||
import type { GetDirnameOfPath } from "../../../common/path/get-dirname.injectable";
|
import type { GetDirnameOfPath } from "../../../common/path/get-dirname.injectable";
|
||||||
import getDirnameOfPathInjectable from "../../../common/path/get-dirname.injectable";
|
import getDirnameOfPathInjectable from "../../../common/path/get-dirname.injectable";
|
||||||
|
import showSuccessNotificationInjectable from "../notifications/show-success-notification.injectable";
|
||||||
|
import showErrorNotificationInjectable from "../notifications/show-error-notification.injectable";
|
||||||
|
|
||||||
interface Option {
|
interface Option {
|
||||||
config: KubeConfig;
|
config: KubeConfig;
|
||||||
@ -38,6 +40,8 @@ interface Dependencies {
|
|||||||
navigateToCatalog: NavigateToCatalog;
|
navigateToCatalog: NavigateToCatalog;
|
||||||
getDirnameOfPath: GetDirnameOfPath;
|
getDirnameOfPath: GetDirnameOfPath;
|
||||||
emitAppEvent: EmitAppEvent;
|
emitAppEvent: EmitAppEvent;
|
||||||
|
showSuccessNotification: ShowNotification;
|
||||||
|
showErrorNotification: ShowNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getContexts(config: KubeConfig): Map<string, Option> {
|
function getContexts(config: KubeConfig): Map<string, Option> {
|
||||||
@ -97,11 +101,11 @@ class NonInjectedAddCluster extends React.Component<Dependencies> {
|
|||||||
await fse.ensureDir(this.props.getDirnameOfPath(absPath));
|
await fse.ensureDir(this.props.getDirnameOfPath(absPath));
|
||||||
await fse.writeFile(absPath, this.customConfig.trim(), { encoding: "utf-8", mode: 0o600 });
|
await fse.writeFile(absPath, this.customConfig.trim(), { encoding: "utf-8", mode: 0o600 });
|
||||||
|
|
||||||
Notifications.ok(`Successfully added ${this.kubeContexts.size} new cluster(s)`);
|
this.props.showSuccessNotification(`Successfully added ${this.kubeContexts.size} new cluster(s)`);
|
||||||
|
|
||||||
return this.props.navigateToCatalog();
|
return this.props.navigateToCatalog();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
Notifications.error(`Failed to add clusters: ${error}`);
|
this.props.showErrorNotification(`Failed to add clusters: ${error}`);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -163,5 +167,7 @@ export const AddCluster = withInjectables<Dependencies>(NonInjectedAddCluster, {
|
|||||||
navigateToCatalog: di.inject(navigateToCatalogInjectable),
|
navigateToCatalog: di.inject(navigateToCatalogInjectable),
|
||||||
getDirnameOfPath: di.inject(getDirnameOfPathInjectable),
|
getDirnameOfPath: di.inject(getDirnameOfPathInjectable),
|
||||||
emitAppEvent: di.inject(emitAppEventInjectable),
|
emitAppEvent: di.inject(emitAppEventInjectable),
|
||||||
|
showSuccessNotification: di.inject(showSuccessNotificationInjectable),
|
||||||
|
showErrorNotification: di.inject(showErrorNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -18,13 +18,14 @@ import type { IResourceQuotaValues, ResourceQuotaApi } from "../../../../common/
|
|||||||
import { Select } from "../../select";
|
import { Select } from "../../select";
|
||||||
import { Icon } from "../../icon";
|
import { Icon } from "../../icon";
|
||||||
import { Button } from "../../button";
|
import { Button } from "../../button";
|
||||||
import { Notifications } from "../../notifications";
|
|
||||||
import { NamespaceSelect } from "../../+namespaces/namespace-select";
|
import { NamespaceSelect } from "../../+namespaces/namespace-select";
|
||||||
import { SubTitle } from "../../layout/sub-title";
|
import { SubTitle } from "../../layout/sub-title";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import closeAddQuotaDialogInjectable from "./close.injectable";
|
import closeAddQuotaDialogInjectable from "./close.injectable";
|
||||||
import isAddQuotaDialogOpenInjectable from "./is-open.injectable";
|
import isAddQuotaDialogOpenInjectable from "./is-open.injectable";
|
||||||
import resourceQuotaApiInjectable from "../../../../common/k8s-api/endpoints/resource-quota.api.injectable";
|
import resourceQuotaApiInjectable from "../../../../common/k8s-api/endpoints/resource-quota.api.injectable";
|
||||||
|
import type { ShowCheckedErrorNotification } from "../../notifications/show-checked-error.injectable";
|
||||||
|
import showCheckedErrorNotificationInjectable from "../../notifications/show-checked-error.injectable";
|
||||||
|
|
||||||
export interface AddQuotaDialogProps extends DialogProps {
|
export interface AddQuotaDialogProps extends DialogProps {
|
||||||
}
|
}
|
||||||
@ -33,6 +34,7 @@ interface Dependencies {
|
|||||||
resourceQuotaApi: ResourceQuotaApi;
|
resourceQuotaApi: ResourceQuotaApi;
|
||||||
isAddQuotaDialogOpen: IComputedValue<boolean>;
|
isAddQuotaDialogOpen: IComputedValue<boolean>;
|
||||||
closeAddQuotaDialog: () => void;
|
closeAddQuotaDialog: () => void;
|
||||||
|
showCheckedErrorNotification: ShowCheckedErrorNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultQuotas = JSON.stringify({
|
const defaultQuotas = JSON.stringify({
|
||||||
@ -128,7 +130,7 @@ class NonInjectedAddQuotaDialog extends React.Component<AddQuotaDialogProps & De
|
|||||||
});
|
});
|
||||||
this.close();
|
this.close();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Notifications.checkedError(err, "Unknown error occured while creating ResourceQuota");
|
this.props.showCheckedErrorNotification(err, "Unknown error occured while creating ResourceQuota");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -250,5 +252,6 @@ export const AddQuotaDialog = withInjectables<Dependencies, AddQuotaDialogProps>
|
|||||||
closeAddQuotaDialog: di.inject(closeAddQuotaDialogInjectable),
|
closeAddQuotaDialog: di.inject(closeAddQuotaDialogInjectable),
|
||||||
isAddQuotaDialogOpen: di.inject(isAddQuotaDialogOpenInjectable),
|
isAddQuotaDialogOpen: di.inject(isAddQuotaDialogOpenInjectable),
|
||||||
resourceQuotaApi: di.inject(resourceQuotaApiInjectable),
|
resourceQuotaApi: di.inject(resourceQuotaApiInjectable),
|
||||||
|
showCheckedErrorNotification: di.inject(showCheckedErrorNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -21,7 +21,6 @@ import { NamespaceSelect } from "../../+namespaces/namespace-select";
|
|||||||
import { Select } from "../../select";
|
import { Select } from "../../select";
|
||||||
import { Icon } from "../../icon";
|
import { Icon } from "../../icon";
|
||||||
import { base64, iter } from "../../../utils";
|
import { base64, iter } from "../../../utils";
|
||||||
import { Notifications } from "../../notifications";
|
|
||||||
import upperFirst from "lodash/upperFirst";
|
import upperFirst from "lodash/upperFirst";
|
||||||
import { fromEntries } from "../../../../common/utils/objects";
|
import { fromEntries } from "../../../../common/utils/objects";
|
||||||
import type { ShowDetails } from "../../kube-detail-params/show-details.injectable";
|
import type { ShowDetails } from "../../kube-detail-params/show-details.injectable";
|
||||||
@ -30,6 +29,8 @@ import closeAddSecretDialogInjectable from "./close.injectable";
|
|||||||
import secretApiInjectable from "../../../../common/k8s-api/endpoints/secret.api.injectable";
|
import secretApiInjectable from "../../../../common/k8s-api/endpoints/secret.api.injectable";
|
||||||
import showDetailsInjectable from "../../kube-detail-params/show-details.injectable";
|
import showDetailsInjectable from "../../kube-detail-params/show-details.injectable";
|
||||||
import isAddSecretDialogOpenInjectable from "./is-open.injectable";
|
import isAddSecretDialogOpenInjectable from "./is-open.injectable";
|
||||||
|
import type { ShowCheckedErrorNotification } from "../../notifications/show-checked-error.injectable";
|
||||||
|
import showCheckedErrorNotificationInjectable from "../../notifications/show-checked-error.injectable";
|
||||||
|
|
||||||
export interface AddSecretDialogProps extends Partial<DialogProps> {
|
export interface AddSecretDialogProps extends Partial<DialogProps> {
|
||||||
}
|
}
|
||||||
@ -54,6 +55,7 @@ interface Dependencies {
|
|||||||
isAddSecretDialogOpen: IComputedValue<boolean>;
|
isAddSecretDialogOpen: IComputedValue<boolean>;
|
||||||
closeAddSecretDialog: () => void;
|
closeAddSecretDialog: () => void;
|
||||||
showDetails: ShowDetails;
|
showDetails: ShowDetails;
|
||||||
|
showCheckedErrorNotification: ShowCheckedErrorNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -116,7 +118,7 @@ class NonInjectedAddSecretDialog extends React.Component<AddSecretDialogProps &
|
|||||||
this.props.showDetails(newSecret?.selfLink);
|
this.props.showDetails(newSecret?.selfLink);
|
||||||
this.close();
|
this.close();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Notifications.checkedError(err, "Unknown error occured while creating a Secret");
|
this.props.showCheckedErrorNotification(err, "Unknown error occured while creating a Secret");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -254,5 +256,6 @@ export const AddSecretDialog = withInjectables<Dependencies, AddSecretDialogProp
|
|||||||
secretApi: di.inject(secretApiInjectable),
|
secretApi: di.inject(secretApiInjectable),
|
||||||
showDetails: di.inject(showDetailsInjectable),
|
showDetails: di.inject(showDetailsInjectable),
|
||||||
isAddSecretDialogOpen: di.inject(isAddSecretDialogOpenInjectable),
|
isAddSecretDialogOpen: di.inject(isAddSecretDialogOpenInjectable),
|
||||||
|
showCheckedErrorNotification: di.inject(showCheckedErrorNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -14,7 +14,7 @@ import createTempFilesAndValidateInjectable from "./create-temp-files-and-valida
|
|||||||
import extensionInstallationStateStoreInjectable from "../../../../extensions/extension-installation-state-store/extension-installation-state-store.injectable";
|
import extensionInstallationStateStoreInjectable from "../../../../extensions/extension-installation-state-store/extension-installation-state-store.injectable";
|
||||||
import type { Disposer } from "../../../../common/utils";
|
import type { Disposer } from "../../../../common/utils";
|
||||||
import { disposer } from "../../../../common/utils";
|
import { disposer } from "../../../../common/utils";
|
||||||
import { Notifications } from "../../notifications";
|
import type { ShowNotification } from "../../notifications";
|
||||||
import { Button } from "../../button";
|
import { Button } from "../../button";
|
||||||
import type { ExtensionLoader } from "../../../../extensions/extension-loader";
|
import type { ExtensionLoader } from "../../../../extensions/extension-loader";
|
||||||
import type { LensExtensionId } from "../../../../extensions/lens-extension";
|
import type { LensExtensionId } from "../../../../extensions/lens-extension";
|
||||||
@ -23,6 +23,8 @@ import { remove as removeDir } from "fs-extra";
|
|||||||
import { shell } from "electron";
|
import { shell } from "electron";
|
||||||
import type { ExtensionInstallationStateStore } from "../../../../extensions/extension-installation-state-store/extension-installation-state-store";
|
import type { ExtensionInstallationStateStore } from "../../../../extensions/extension-installation-state-store/extension-installation-state-store";
|
||||||
import { ExtensionInstallationState } from "../../../../extensions/extension-installation-state-store/extension-installation-state-store";
|
import { ExtensionInstallationState } from "../../../../extensions/extension-installation-state-store/extension-installation-state-store";
|
||||||
|
import showErrorNotificationInjectable from "../../notifications/show-error-notification.injectable";
|
||||||
|
import showInfoNotificationInjectable from "../../notifications/show-info-notification.injectable";
|
||||||
|
|
||||||
export interface InstallRequest {
|
export interface InstallRequest {
|
||||||
fileName: string;
|
fileName: string;
|
||||||
@ -36,6 +38,8 @@ interface Dependencies {
|
|||||||
createTempFilesAndValidate: CreateTempFilesAndValidate;
|
createTempFilesAndValidate: CreateTempFilesAndValidate;
|
||||||
getExtensionDestFolder: GetExtensionDestFolder;
|
getExtensionDestFolder: GetExtensionDestFolder;
|
||||||
installStateStore: ExtensionInstallationStateStore;
|
installStateStore: ExtensionInstallationStateStore;
|
||||||
|
showErrorNotification: ShowNotification;
|
||||||
|
showInfoNotification: ShowNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type AttemptInstall = (request: InstallRequest, cleanup?: Disposer) => Promise<void>;
|
export type AttemptInstall = (request: InstallRequest, cleanup?: Disposer) => Promise<void>;
|
||||||
@ -47,6 +51,8 @@ const attemptInstall = ({
|
|||||||
createTempFilesAndValidate,
|
createTempFilesAndValidate,
|
||||||
getExtensionDestFolder,
|
getExtensionDestFolder,
|
||||||
installStateStore,
|
installStateStore,
|
||||||
|
showErrorNotification,
|
||||||
|
showInfoNotification,
|
||||||
}: Dependencies): AttemptInstall =>
|
}: Dependencies): AttemptInstall =>
|
||||||
async (request, cleanup) => {
|
async (request, cleanup) => {
|
||||||
const dispose = disposer(
|
const dispose = disposer(
|
||||||
@ -66,7 +72,7 @@ const attemptInstall = ({
|
|||||||
if (curState !== ExtensionInstallationState.IDLE) {
|
if (curState !== ExtensionInstallationState.IDLE) {
|
||||||
dispose();
|
dispose();
|
||||||
|
|
||||||
return void Notifications.error(
|
return void showErrorNotification(
|
||||||
<div className="flex column gaps">
|
<div className="flex column gaps">
|
||||||
<b>Extension Install Collision:</b>
|
<b>Extension Install Collision:</b>
|
||||||
<p>
|
<p>
|
||||||
@ -86,7 +92,7 @@ const attemptInstall = ({
|
|||||||
const { version: oldVersion } = installedExtension.manifest;
|
const { version: oldVersion } = installedExtension.manifest;
|
||||||
|
|
||||||
// confirm to uninstall old version before installing new version
|
// confirm to uninstall old version before installing new version
|
||||||
const removeNotification = Notifications.info(
|
const removeNotification = showInfoNotification(
|
||||||
<div className="InstallingExtensionNotification flex gaps align-center">
|
<div className="InstallingExtensionNotification flex gaps align-center">
|
||||||
<div className="flex column gaps">
|
<div className="flex column gaps">
|
||||||
<p>
|
<p>
|
||||||
@ -142,6 +148,8 @@ const attemptInstallInjectable = getInjectable({
|
|||||||
createTempFilesAndValidate: di.inject(createTempFilesAndValidateInjectable),
|
createTempFilesAndValidate: di.inject(createTempFilesAndValidateInjectable),
|
||||||
getExtensionDestFolder: di.inject(getExtensionDestFolderInjectable),
|
getExtensionDestFolder: di.inject(getExtensionDestFolderInjectable),
|
||||||
installStateStore: di.inject(extensionInstallationStateStoreInjectable),
|
installStateStore: di.inject(extensionInstallationStateStoreInjectable),
|
||||||
|
showErrorNotification: di.inject(showErrorNotificationInjectable),
|
||||||
|
showInfoNotification: di.inject(showInfoNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -9,10 +9,11 @@ import extensionDiscoveryInjectable from "../../../extensions/extension-discover
|
|||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import type { LensExtensionId } from "../../../extensions/lens-extension";
|
import type { LensExtensionId } from "../../../extensions/lens-extension";
|
||||||
import { extensionDisplayName } from "../../../extensions/lens-extension";
|
import { extensionDisplayName } from "../../../extensions/lens-extension";
|
||||||
import { Notifications } from "../notifications";
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { when } from "mobx";
|
import { when } from "mobx";
|
||||||
import { getMessageFromError } from "./get-message-from-error/get-message-from-error";
|
import { getMessageFromError } from "./get-message-from-error/get-message-from-error";
|
||||||
|
import showSuccessNotificationInjectable from "../notifications/show-success-notification.injectable";
|
||||||
|
import showErrorNotificationInjectable from "../notifications/show-error-notification.injectable";
|
||||||
|
|
||||||
const uninstallExtensionInjectable = getInjectable({
|
const uninstallExtensionInjectable = getInjectable({
|
||||||
id: "uninstall-extension",
|
id: "uninstall-extension",
|
||||||
@ -22,6 +23,8 @@ const uninstallExtensionInjectable = getInjectable({
|
|||||||
const extensionDiscovery = di.inject(extensionDiscoveryInjectable);
|
const extensionDiscovery = di.inject(extensionDiscoveryInjectable);
|
||||||
const extensionInstallationStateStore = di.inject(extensionInstallationStateStoreInjectable);
|
const extensionInstallationStateStore = di.inject(extensionInstallationStateStoreInjectable);
|
||||||
const logger = di.inject(loggerInjectable);
|
const logger = di.inject(loggerInjectable);
|
||||||
|
const showSuccessNotification = di.inject(showSuccessNotificationInjectable);
|
||||||
|
const showErrorNotification = di.inject(showErrorNotificationInjectable);
|
||||||
|
|
||||||
return async (extensionId: LensExtensionId): Promise<boolean> => {
|
return async (extensionId: LensExtensionId): Promise<boolean> => {
|
||||||
const ext = extensionLoader.getExtension(extensionId);
|
const ext = extensionLoader.getExtension(extensionId);
|
||||||
@ -44,7 +47,7 @@ const uninstallExtensionInjectable = getInjectable({
|
|||||||
// wait for the ExtensionLoader to actually uninstall the extension
|
// wait for the ExtensionLoader to actually uninstall the extension
|
||||||
await when(() => !extensionLoader.userExtensions.has(extensionId));
|
await when(() => !extensionLoader.userExtensions.has(extensionId));
|
||||||
|
|
||||||
Notifications.ok(
|
showSuccessNotification(
|
||||||
<p>
|
<p>
|
||||||
{"Extension "}
|
{"Extension "}
|
||||||
<b>{displayName}</b>
|
<b>{displayName}</b>
|
||||||
@ -60,7 +63,7 @@ const uninstallExtensionInjectable = getInjectable({
|
|||||||
`[EXTENSION-UNINSTALL]: uninstalling ${displayName} has failed: ${error}`,
|
`[EXTENSION-UNINSTALL]: uninstalling ${displayName} has failed: ${error}`,
|
||||||
{ error },
|
{ error },
|
||||||
);
|
);
|
||||||
Notifications.error(
|
showErrorNotification(
|
||||||
<p>
|
<p>
|
||||||
{"Uninstalling extension "}
|
{"Uninstalling extension "}
|
||||||
<b>{displayName}</b>
|
<b>{displayName}</b>
|
||||||
|
|||||||
@ -14,7 +14,6 @@ import { Dialog } from "../../dialog";
|
|||||||
import { Wizard, WizardStep } from "../../wizard";
|
import { Wizard, WizardStep } from "../../wizard";
|
||||||
import type { HelmRelease } from "../../../../common/k8s-api/endpoints/helm-releases.api";
|
import type { HelmRelease } from "../../../../common/k8s-api/endpoints/helm-releases.api";
|
||||||
import { Select } from "../../select";
|
import { Select } from "../../select";
|
||||||
import { Notifications } from "../../notifications";
|
|
||||||
import orderBy from "lodash/orderBy";
|
import orderBy from "lodash/orderBy";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import releaseRollbackDialogStateInjectable from "./state.injectable";
|
import releaseRollbackDialogStateInjectable from "./state.injectable";
|
||||||
@ -22,6 +21,8 @@ import type { RollbackRelease } from "../rollback-release/rollback-release.injec
|
|||||||
import rollbackReleaseInjectable from "../rollback-release/rollback-release.injectable";
|
import rollbackReleaseInjectable from "../rollback-release/rollback-release.injectable";
|
||||||
import type { HelmReleaseRevision, RequestHelmReleaseHistory } from "../../../../common/k8s-api/endpoints/helm-releases.api/request-history.injectable";
|
import type { HelmReleaseRevision, RequestHelmReleaseHistory } from "../../../../common/k8s-api/endpoints/helm-releases.api/request-history.injectable";
|
||||||
import requestHelmReleaseHistoryInjectable from "../../../../common/k8s-api/endpoints/helm-releases.api/request-history.injectable";
|
import requestHelmReleaseHistoryInjectable from "../../../../common/k8s-api/endpoints/helm-releases.api/request-history.injectable";
|
||||||
|
import type { ShowCheckedErrorNotification } from "../../notifications/show-checked-error.injectable";
|
||||||
|
import showCheckedErrorNotificationInjectable from "../../notifications/show-checked-error.injectable";
|
||||||
|
|
||||||
export interface ReleaseRollbackDialogProps extends DialogProps {
|
export interface ReleaseRollbackDialogProps extends DialogProps {
|
||||||
}
|
}
|
||||||
@ -30,6 +31,7 @@ interface Dependencies {
|
|||||||
rollbackRelease: RollbackRelease;
|
rollbackRelease: RollbackRelease;
|
||||||
state: IObservableValue<HelmRelease | undefined>;
|
state: IObservableValue<HelmRelease | undefined>;
|
||||||
requestHelmReleaseHistory: RequestHelmReleaseHistory;
|
requestHelmReleaseHistory: RequestHelmReleaseHistory;
|
||||||
|
showCheckedErrorNotification: ShowCheckedErrorNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -71,7 +73,7 @@ class NonInjectedReleaseRollbackDialog extends React.Component<ReleaseRollbackDi
|
|||||||
await this.props.rollbackRelease(release.getName(), release.getNs(), revision.revision);
|
await this.props.rollbackRelease(release.getName(), release.getNs(), revision.revision);
|
||||||
this.close();
|
this.close();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Notifications.checkedError(err, "Unknown error occured while rolling back release");
|
this.props.showCheckedErrorNotification(err, "Unknown error occured while rolling back release");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -143,5 +145,6 @@ export const ReleaseRollbackDialog = withInjectables<Dependencies, ReleaseRollba
|
|||||||
rollbackRelease: di.inject(rollbackReleaseInjectable),
|
rollbackRelease: di.inject(rollbackReleaseInjectable),
|
||||||
state: di.inject(releaseRollbackDialogStateInjectable),
|
state: di.inject(releaseRollbackDialogStateInjectable),
|
||||||
requestHelmReleaseHistory: di.inject(requestHelmReleaseHistoryInjectable),
|
requestHelmReleaseHistory: di.inject(requestHelmReleaseHistoryInjectable),
|
||||||
|
showCheckedErrorNotification: di.inject(showCheckedErrorNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -15,13 +15,14 @@ import { Wizard, WizardStep } from "../../wizard";
|
|||||||
import type { Namespace } from "../../../../common/k8s-api/endpoints";
|
import type { Namespace } from "../../../../common/k8s-api/endpoints";
|
||||||
import { Input } from "../../input";
|
import { Input } from "../../input";
|
||||||
import { systemName } from "../../input/input_validators";
|
import { systemName } from "../../input/input_validators";
|
||||||
import { Notifications } from "../../notifications";
|
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import namespaceStoreInjectable from "../store.injectable";
|
import namespaceStoreInjectable from "../store.injectable";
|
||||||
import addNamespaceDialogStateInjectable
|
import addNamespaceDialogStateInjectable
|
||||||
from "./state.injectable";
|
from "./state.injectable";
|
||||||
import type { NamespaceStore } from "../store";
|
import type { NamespaceStore } from "../store";
|
||||||
import { autoBind } from "../../../utils";
|
import { autoBind } from "../../../utils";
|
||||||
|
import type { ShowCheckedErrorNotification } from "../../notifications/show-checked-error.injectable";
|
||||||
|
import showCheckedErrorNotificationInjectable from "../../notifications/show-checked-error.injectable";
|
||||||
|
|
||||||
export interface AddNamespaceDialogProps extends DialogProps {
|
export interface AddNamespaceDialogProps extends DialogProps {
|
||||||
onSuccess?(ns: Namespace): void;
|
onSuccess?(ns: Namespace): void;
|
||||||
@ -31,6 +32,7 @@ export interface AddNamespaceDialogProps extends DialogProps {
|
|||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
namespaceStore: NamespaceStore;
|
namespaceStore: NamespaceStore;
|
||||||
state: IObservableValue<boolean>;
|
state: IObservableValue<boolean>;
|
||||||
|
showCheckedErrorNotification: ShowCheckedErrorNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -63,7 +65,7 @@ class NonInjectedAddNamespaceDialog extends React.Component<AddNamespaceDialogPr
|
|||||||
onSuccess?.(created);
|
onSuccess?.(created);
|
||||||
this.close();
|
this.close();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Notifications.checkedError(err, "Unknown error occured while creating the namespace");
|
this.props.showCheckedErrorNotification(err, "Unknown error occured while creating the namespace");
|
||||||
onError?.(err);
|
onError?.(err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -112,5 +114,6 @@ export const AddNamespaceDialog = withInjectables<Dependencies, AddNamespaceDial
|
|||||||
...props,
|
...props,
|
||||||
namespaceStore: di.inject(namespaceStoreInjectable),
|
namespaceStore: di.inject(namespaceStoreInjectable),
|
||||||
state: di.inject(addNamespaceDialogStateInjectable),
|
state: di.inject(addNamespaceDialogStateInjectable),
|
||||||
|
showCheckedErrorNotification: di.inject(showCheckedErrorNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -10,12 +10,13 @@ import type { MenuActionsProps } from "../menu/menu-actions";
|
|||||||
import { MenuActions } from "../menu/menu-actions";
|
import { MenuActions } from "../menu/menu-actions";
|
||||||
import { MenuItem } from "../menu";
|
import { MenuItem } from "../menu";
|
||||||
import { Icon } from "../icon";
|
import { Icon } from "../icon";
|
||||||
import { Notifications } from "../notifications";
|
import type { ShowNotification } from "../notifications";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import portForwardDialogModelInjectable from "../../port-forward/port-forward-dialog-model/port-forward-dialog-model.injectable";
|
import portForwardDialogModelInjectable from "../../port-forward/port-forward-dialog-model/port-forward-dialog-model.injectable";
|
||||||
import portForwardStoreInjectable from "../../port-forward/port-forward-store/port-forward-store.injectable";
|
import portForwardStoreInjectable from "../../port-forward/port-forward-store/port-forward-store.injectable";
|
||||||
import type { OpenPortForward } from "../../port-forward/open-port-forward.injectable";
|
import type { OpenPortForward } from "../../port-forward/open-port-forward.injectable";
|
||||||
import openPortForwardInjectable from "../../port-forward/open-port-forward.injectable";
|
import openPortForwardInjectable from "../../port-forward/open-port-forward.injectable";
|
||||||
|
import showErrorNotificationInjectable from "../notifications/show-error-notification.injectable";
|
||||||
|
|
||||||
export interface PortForwardMenuProps extends MenuActionsProps {
|
export interface PortForwardMenuProps extends MenuActionsProps {
|
||||||
portForward: PortForwardItem;
|
portForward: PortForwardItem;
|
||||||
@ -26,6 +27,7 @@ interface Dependencies {
|
|||||||
portForwardStore: PortForwardStore;
|
portForwardStore: PortForwardStore;
|
||||||
openPortForwardDialog: (item: PortForwardItem) => void;
|
openPortForwardDialog: (item: PortForwardItem) => void;
|
||||||
openPortForward: OpenPortForward;
|
openPortForward: OpenPortForward;
|
||||||
|
showErrorNotification: ShowNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
class NonInjectedPortForwardMenu<Props extends PortForwardMenuProps & Dependencies> extends React.Component<Props> {
|
class NonInjectedPortForwardMenu<Props extends PortForwardMenuProps & Dependencies> extends React.Component<Props> {
|
||||||
@ -35,12 +37,12 @@ class NonInjectedPortForwardMenu<Props extends PortForwardMenuProps & Dependenci
|
|||||||
}
|
}
|
||||||
|
|
||||||
remove() {
|
remove() {
|
||||||
const { portForward } = this.props;
|
const { portForward, showErrorNotification } = this.props;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this.portForwardStore.remove(portForward);
|
this.portForwardStore.remove(portForward);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
Notifications.error(`Error occurred stopping the port-forward from port ${portForward.forwardPort}. The port-forward may still be active.`);
|
showErrorNotification(`Error occurred stopping the port-forward from port ${portForward.forwardPort}. The port-forward may still be active.`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,14 +51,14 @@ class NonInjectedPortForwardMenu<Props extends PortForwardMenuProps & Dependenci
|
|||||||
}
|
}
|
||||||
|
|
||||||
private startPortForwarding = async () => {
|
private startPortForwarding = async () => {
|
||||||
const { portForward } = this.props;
|
const { portForward, showErrorNotification } = this.props;
|
||||||
|
|
||||||
const pf = await this.portForwardStore.start(portForward);
|
const pf = await this.portForwardStore.start(portForward);
|
||||||
|
|
||||||
if (pf.status === "Disabled") {
|
if (pf.status === "Disabled") {
|
||||||
const { name, kind, forwardPort } = portForward;
|
const { name, kind, forwardPort } = portForward;
|
||||||
|
|
||||||
Notifications.error(`Error occurred starting port-forward, the local port ${forwardPort} may not be available or the ${kind} ${name} may not be reachable`);
|
showErrorNotification(`Error occurred starting port-forward, the local port ${forwardPort} may not be available or the ${kind} ${name} may not be reachable`);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -134,15 +136,12 @@ class NonInjectedPortForwardMenu<Props extends PortForwardMenuProps & Dependenci
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const PortForwardMenu = withInjectables<Dependencies, PortForwardMenuProps>(
|
export const PortForwardMenu = withInjectables<Dependencies, PortForwardMenuProps>(NonInjectedPortForwardMenu, {
|
||||||
NonInjectedPortForwardMenu,
|
getProps: (di, props) => ({
|
||||||
|
...props,
|
||||||
{
|
portForwardStore: di.inject(portForwardStoreInjectable),
|
||||||
getProps: (di, props) => ({
|
openPortForwardDialog: di.inject(portForwardDialogModelInjectable).open,
|
||||||
portForwardStore: di.inject(portForwardStoreInjectable),
|
openPortForward: di.inject(openPortForwardInjectable),
|
||||||
openPortForwardDialog: di.inject(portForwardDialogModelInjectable).open,
|
showErrorNotification: di.inject(showErrorNotificationInjectable),
|
||||||
openPortForward: di.inject(openPortForwardInjectable),
|
}),
|
||||||
...props,
|
});
|
||||||
}),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|||||||
@ -10,7 +10,7 @@ import { disposeOnUnmount, observer } from "mobx-react";
|
|||||||
import type { Service, ServicePort } from "../../../common/k8s-api/endpoints";
|
import type { Service, ServicePort } from "../../../common/k8s-api/endpoints";
|
||||||
import { action, makeObservable, observable, reaction } from "mobx";
|
import { action, makeObservable, observable, reaction } from "mobx";
|
||||||
import { cssNames } from "../../utils";
|
import { cssNames } from "../../utils";
|
||||||
import { Notifications } from "../notifications";
|
import type { ShowNotification } from "../notifications";
|
||||||
import { Button } from "../button";
|
import { Button } from "../button";
|
||||||
import type { ForwardedPort, PortForwardStore } from "../../port-forward";
|
import type { ForwardedPort, PortForwardStore } from "../../port-forward";
|
||||||
import { predictProtocol } from "../../port-forward";
|
import { predictProtocol } from "../../port-forward";
|
||||||
@ -24,6 +24,7 @@ import notifyErrorPortForwardingInjectable from "../../port-forward/notify-error
|
|||||||
import type { OpenPortForward } from "../../port-forward/open-port-forward.injectable";
|
import type { OpenPortForward } from "../../port-forward/open-port-forward.injectable";
|
||||||
import openPortForwardInjectable from "../../port-forward/open-port-forward.injectable";
|
import openPortForwardInjectable from "../../port-forward/open-port-forward.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
|
import showErrorNotificationInjectable from "../notifications/show-error-notification.injectable";
|
||||||
|
|
||||||
export interface ServicePortComponentProps {
|
export interface ServicePortComponentProps {
|
||||||
service: Service;
|
service: Service;
|
||||||
@ -37,6 +38,7 @@ interface Dependencies {
|
|||||||
aboutPortForwarding: () => void;
|
aboutPortForwarding: () => void;
|
||||||
notifyErrorPortForwarding: (message: string) => void;
|
notifyErrorPortForwarding: (message: string) => void;
|
||||||
openPortForward: OpenPortForward;
|
openPortForward: OpenPortForward;
|
||||||
|
showErrorNotification: ShowNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -138,7 +140,7 @@ class NonInjectedServicePortComponent extends React.Component<ServicePortCompone
|
|||||||
|
|
||||||
@action
|
@action
|
||||||
async stopPortForward() {
|
async stopPortForward() {
|
||||||
const { service, port } = this.props;
|
const { service, port, showErrorNotification } = this.props;
|
||||||
const portForward: ForwardedPort = {
|
const portForward: ForwardedPort = {
|
||||||
kind: "service",
|
kind: "service",
|
||||||
name: service.getName(),
|
name: service.getName(),
|
||||||
@ -152,7 +154,7 @@ class NonInjectedServicePortComponent extends React.Component<ServicePortCompone
|
|||||||
try {
|
try {
|
||||||
await this.portForwardStore.remove(portForward);
|
await this.portForwardStore.remove(portForward);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
Notifications.error(`Error occurred stopping the port-forward from port ${portForward.forwardPort}.`);
|
showErrorNotification(`Error occurred stopping the port-forward from port ${portForward.forwardPort}.`);
|
||||||
} finally {
|
} finally {
|
||||||
this.checkExistingPortForwarding();
|
this.checkExistingPortForwarding();
|
||||||
this.forwardPort = 0;
|
this.forwardPort = 0;
|
||||||
@ -207,6 +209,7 @@ export const ServicePortComponent = withInjectables<Dependencies, ServicePortCom
|
|||||||
notifyErrorPortForwarding: di.inject(notifyErrorPortForwardingInjectable),
|
notifyErrorPortForwarding: di.inject(notifyErrorPortForwardingInjectable),
|
||||||
openPortForward: di.inject(openPortForwardInjectable),
|
openPortForward: di.inject(openPortForwardInjectable),
|
||||||
logger: di.inject(loggerInjectable),
|
logger: di.inject(loggerInjectable),
|
||||||
|
showErrorNotification: di.inject(showErrorNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -16,7 +16,6 @@ import { Dialog } from "../../../dialog";
|
|||||||
import { EditableList } from "../../../editable-list";
|
import { EditableList } from "../../../editable-list";
|
||||||
import { Icon } from "../../../icon";
|
import { Icon } from "../../../icon";
|
||||||
import { SubTitle } from "../../../layout/sub-title";
|
import { SubTitle } from "../../../layout/sub-title";
|
||||||
import { Notifications } from "../../../notifications";
|
|
||||||
import { onMultiSelectFor, Select } from "../../../select";
|
import { onMultiSelectFor, Select } from "../../../select";
|
||||||
import { Wizard, WizardStep } from "../../../wizard";
|
import { Wizard, WizardStep } from "../../../wizard";
|
||||||
import { ObservableHashSet, nFircate } from "../../../../utils";
|
import { ObservableHashSet, nFircate } from "../../../../utils";
|
||||||
@ -39,6 +38,8 @@ import type { ShowDetails } from "../../../kube-detail-params/show-details.injec
|
|||||||
import type { ClusterRoleBindingStore } from "../store";
|
import type { ClusterRoleBindingStore } from "../store";
|
||||||
import clusterRoleBindingStoreInjectable from "../store.injectable";
|
import clusterRoleBindingStoreInjectable from "../store.injectable";
|
||||||
import showDetailsInjectable from "../../../kube-detail-params/show-details.injectable";
|
import showDetailsInjectable from "../../../kube-detail-params/show-details.injectable";
|
||||||
|
import type { ShowCheckedErrorNotification } from "../../../notifications/show-checked-error.injectable";
|
||||||
|
import showCheckedErrorNotificationInjectable from "../../../notifications/show-checked-error.injectable";
|
||||||
|
|
||||||
export interface ClusterRoleBindingDialogProps extends Partial<DialogProps> {
|
export interface ClusterRoleBindingDialogProps extends Partial<DialogProps> {
|
||||||
}
|
}
|
||||||
@ -52,6 +53,7 @@ interface Dependencies {
|
|||||||
closeClusterRoleBindingDialog: CloseClusterRoleBindingDialog;
|
closeClusterRoleBindingDialog: CloseClusterRoleBindingDialog;
|
||||||
openClusterRoleBindingDialog: OpenClusterRoleBindingDialog;
|
openClusterRoleBindingDialog: OpenClusterRoleBindingDialog;
|
||||||
showDetails: ShowDetails;
|
showDetails: ShowDetails;
|
||||||
|
showCheckedErrorNotification: ShowCheckedErrorNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -167,7 +169,7 @@ class NonInjectedClusterRoleBindingDialog extends React.Component<ClusterRoleBin
|
|||||||
showDetails(selfLink);
|
showDetails(selfLink);
|
||||||
closeClusterRoleBindingDialog();
|
closeClusterRoleBindingDialog();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Notifications.checkedError(err, `Unknown error occured while ${this.isEditing ? "editing the" : "creating a"} ClusterRoleBinding`);
|
this.props.showCheckedErrorNotification(err, `Unknown error occured while ${this.isEditing ? "editing the" : "creating a"} ClusterRoleBinding`);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -307,5 +309,6 @@ export const ClusterRoleBindingDialog = withInjectables<Dependencies, ClusterRol
|
|||||||
openClusterRoleBindingDialog: di.inject(openClusterRoleBindingDialogInjectable),
|
openClusterRoleBindingDialog: di.inject(openClusterRoleBindingDialogInjectable),
|
||||||
closeClusterRoleBindingDialog: di.inject(closeClusterRoleBindingDialogInjectable),
|
closeClusterRoleBindingDialog: di.inject(closeClusterRoleBindingDialogInjectable),
|
||||||
showDetails: di.inject(showDetailsInjectable),
|
showDetails: di.inject(showDetailsInjectable),
|
||||||
|
showCheckedErrorNotification: di.inject(showCheckedErrorNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -11,7 +11,6 @@ import type { DialogProps } from "../../../dialog";
|
|||||||
import { Dialog } from "../../../dialog";
|
import { Dialog } from "../../../dialog";
|
||||||
import { Input } from "../../../input";
|
import { Input } from "../../../input";
|
||||||
import { SubTitle } from "../../../layout/sub-title";
|
import { SubTitle } from "../../../layout/sub-title";
|
||||||
import { Notifications } from "../../../notifications";
|
|
||||||
import { Wizard, WizardStep } from "../../../wizard";
|
import { Wizard, WizardStep } from "../../../wizard";
|
||||||
import type { AddClusterRoleDialogState } from "./state.injectable";
|
import type { AddClusterRoleDialogState } from "./state.injectable";
|
||||||
import type { ClusterRoleStore } from "../store";
|
import type { ClusterRoleStore } from "../store";
|
||||||
@ -21,6 +20,8 @@ import closeAddClusterRoleDialogInjectable from "./close.injectable";
|
|||||||
import clusterRoleStoreInjectable from "../store.injectable";
|
import clusterRoleStoreInjectable from "../store.injectable";
|
||||||
import showDetailsInjectable from "../../../kube-detail-params/show-details.injectable";
|
import showDetailsInjectable from "../../../kube-detail-params/show-details.injectable";
|
||||||
import addClusterRoleDialogStateInjectable from "./state.injectable";
|
import addClusterRoleDialogStateInjectable from "./state.injectable";
|
||||||
|
import type { ShowCheckedErrorNotification } from "../../../notifications/show-checked-error.injectable";
|
||||||
|
import showCheckedErrorNotificationInjectable from "../../../notifications/show-checked-error.injectable";
|
||||||
|
|
||||||
export interface AddClusterRoleDialogProps extends Partial<DialogProps> {
|
export interface AddClusterRoleDialogProps extends Partial<DialogProps> {
|
||||||
}
|
}
|
||||||
@ -30,6 +31,7 @@ interface Dependencies {
|
|||||||
clusterRoleStore: ClusterRoleStore;
|
clusterRoleStore: ClusterRoleStore;
|
||||||
showDetails: ShowDetails;
|
showDetails: ShowDetails;
|
||||||
closeAddClusterRoleDialog: () => void;
|
closeAddClusterRoleDialog: () => void;
|
||||||
|
showCheckedErrorNotification: ShowCheckedErrorNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -40,6 +42,7 @@ class NonInjectedAddClusterRoleDialog extends React.Component<AddClusterRoleDial
|
|||||||
clusterRoleStore,
|
clusterRoleStore,
|
||||||
showDetails,
|
showDetails,
|
||||||
state,
|
state,
|
||||||
|
showCheckedErrorNotification,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -48,7 +51,7 @@ class NonInjectedAddClusterRoleDialog extends React.Component<AddClusterRoleDial
|
|||||||
showDetails(role.selfLink);
|
showDetails(role.selfLink);
|
||||||
closeAddClusterRoleDialog();
|
closeAddClusterRoleDialog();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
Notifications.checkedError(error, "Unknown error occured while creating the role");
|
showCheckedErrorNotification(error, "Unknown error occured while creating the role");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -94,5 +97,6 @@ export const AddClusterRoleDialog = withInjectables<Dependencies, AddClusterRole
|
|||||||
clusterRoleStore: di.inject(clusterRoleStoreInjectable),
|
clusterRoleStore: di.inject(clusterRoleStoreInjectable),
|
||||||
showDetails: di.inject(showDetailsInjectable),
|
showDetails: di.inject(showDetailsInjectable),
|
||||||
state: di.inject(addClusterRoleDialogStateInjectable),
|
state: di.inject(addClusterRoleDialogStateInjectable),
|
||||||
|
showCheckedErrorNotification: di.inject(showCheckedErrorNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -16,7 +16,6 @@ import { Dialog } from "../../../dialog";
|
|||||||
import { EditableList } from "../../../editable-list";
|
import { EditableList } from "../../../editable-list";
|
||||||
import { Icon } from "../../../icon";
|
import { Icon } from "../../../icon";
|
||||||
import { SubTitle } from "../../../layout/sub-title";
|
import { SubTitle } from "../../../layout/sub-title";
|
||||||
import { Notifications } from "../../../notifications";
|
|
||||||
import type { SelectOption } from "../../../select";
|
import type { SelectOption } from "../../../select";
|
||||||
import { onMultiSelectFor, Select } from "../../../select";
|
import { onMultiSelectFor, Select } from "../../../select";
|
||||||
import { Wizard, WizardStep } from "../../../wizard";
|
import { Wizard, WizardStep } from "../../../wizard";
|
||||||
@ -38,6 +37,8 @@ import clusterRoleStoreInjectable from "../../+cluster-roles/store.injectable";
|
|||||||
import roleStoreInjectable from "../../+roles/store.injectable";
|
import roleStoreInjectable from "../../+roles/store.injectable";
|
||||||
import serviceAccountStoreInjectable from "../../+service-accounts/store.injectable";
|
import serviceAccountStoreInjectable from "../../+service-accounts/store.injectable";
|
||||||
import roleApiInjectable from "../../../../../common/k8s-api/endpoints/role.api.injectable";
|
import roleApiInjectable from "../../../../../common/k8s-api/endpoints/role.api.injectable";
|
||||||
|
import type { ShowCheckedErrorNotification } from "../../../notifications/show-checked-error.injectable";
|
||||||
|
import showCheckedErrorNotificationInjectable from "../../../notifications/show-checked-error.injectable";
|
||||||
|
|
||||||
export interface RoleBindingDialogProps extends Partial<DialogProps> {
|
export interface RoleBindingDialogProps extends Partial<DialogProps> {
|
||||||
}
|
}
|
||||||
@ -51,6 +52,7 @@ interface Dependencies {
|
|||||||
clusterRoleStore: ClusterRoleStore;
|
clusterRoleStore: ClusterRoleStore;
|
||||||
serviceAccountStore: ServiceAccountStore;
|
serviceAccountStore: ServiceAccountStore;
|
||||||
roleApi: RoleApi;
|
roleApi: RoleApi;
|
||||||
|
showCheckedErrorNotification: ShowCheckedErrorNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -169,6 +171,7 @@ class NonInjectedRoleBindingDialog extends React.Component<RoleBindingDialogProp
|
|||||||
const {
|
const {
|
||||||
roleBindingStore,
|
roleBindingStore,
|
||||||
showDetails,
|
showDetails,
|
||||||
|
showCheckedErrorNotification,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
const { selectedRoleRef, bindingNamespace, selectedBindings, roleBinding, bindingName } = this;
|
const { selectedRoleRef, bindingNamespace, selectedBindings, roleBinding, bindingName } = this;
|
||||||
|
|
||||||
@ -193,7 +196,7 @@ class NonInjectedRoleBindingDialog extends React.Component<RoleBindingDialogProp
|
|||||||
showDetails(newRoleBinding.selfLink);
|
showDetails(newRoleBinding.selfLink);
|
||||||
this.props.closeRoleBindingDialog();
|
this.props.closeRoleBindingDialog();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Notifications.checkedError(err, `Unknown error occured while ${this.isEditing ? "editing" : "creating"} role bindings.`);
|
showCheckedErrorNotification(err, `Unknown error occured while ${this.isEditing ? "editing" : "creating"} role bindings.`);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -318,5 +321,6 @@ export const RoleBindingDialog = withInjectables<Dependencies, RoleBindingDialog
|
|||||||
roleStore: di.inject(roleStoreInjectable),
|
roleStore: di.inject(roleStoreInjectable),
|
||||||
serviceAccountStore: di.inject(serviceAccountStoreInjectable),
|
serviceAccountStore: di.inject(serviceAccountStoreInjectable),
|
||||||
roleApi: di.inject(roleApiInjectable),
|
roleApi: di.inject(roleApiInjectable),
|
||||||
|
showCheckedErrorNotification: di.inject(showCheckedErrorNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -13,7 +13,6 @@ import type { DialogProps } from "../../../dialog";
|
|||||||
import { Dialog } from "../../../dialog";
|
import { Dialog } from "../../../dialog";
|
||||||
import { Input } from "../../../input";
|
import { Input } from "../../../input";
|
||||||
import { SubTitle } from "../../../layout/sub-title";
|
import { SubTitle } from "../../../layout/sub-title";
|
||||||
import { Notifications } from "../../../notifications";
|
|
||||||
import { Wizard, WizardStep } from "../../../wizard";
|
import { Wizard, WizardStep } from "../../../wizard";
|
||||||
import type { AddRoleDialogState } from "./state.injectable";
|
import type { AddRoleDialogState } from "./state.injectable";
|
||||||
import type { RoleStore } from "../store";
|
import type { RoleStore } from "../store";
|
||||||
@ -23,6 +22,8 @@ import closeAddRoleDialogInjectable from "./close.injectable";
|
|||||||
import roleStoreInjectable from "../store.injectable";
|
import roleStoreInjectable from "../store.injectable";
|
||||||
import showDetailsInjectable from "../../../kube-detail-params/show-details.injectable";
|
import showDetailsInjectable from "../../../kube-detail-params/show-details.injectable";
|
||||||
import addRoleDialogStateInjectable from "./state.injectable";
|
import addRoleDialogStateInjectable from "./state.injectable";
|
||||||
|
import type { ShowCheckedErrorNotification } from "../../../notifications/show-checked-error.injectable";
|
||||||
|
import showCheckedErrorNotificationInjectable from "../../../notifications/show-checked-error.injectable";
|
||||||
|
|
||||||
export interface AddRoleDialogProps extends Partial<DialogProps> {
|
export interface AddRoleDialogProps extends Partial<DialogProps> {
|
||||||
}
|
}
|
||||||
@ -32,6 +33,7 @@ interface Dependencies {
|
|||||||
showDetails: ShowDetails;
|
showDetails: ShowDetails;
|
||||||
state: AddRoleDialogState;
|
state: AddRoleDialogState;
|
||||||
roleStore: RoleStore;
|
roleStore: RoleStore;
|
||||||
|
showCheckedErrorNotification: ShowCheckedErrorNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -42,6 +44,7 @@ class NonInjectedAddRoleDialog extends React.Component<AddRoleDialogProps & Depe
|
|||||||
roleStore,
|
roleStore,
|
||||||
state,
|
state,
|
||||||
showDetails,
|
showDetails,
|
||||||
|
showCheckedErrorNotification,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -53,7 +56,7 @@ class NonInjectedAddRoleDialog extends React.Component<AddRoleDialogProps & Depe
|
|||||||
showDetails(role.selfLink);
|
showDetails(role.selfLink);
|
||||||
closeAddRoleDialog();
|
closeAddRoleDialog();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Notifications.checkedError(err, "Unknown error occured while creating role");
|
showCheckedErrorNotification(err, "Unknown error occured while creating role");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -104,5 +107,6 @@ export const AddRoleDialog = withInjectables<Dependencies, AddRoleDialogProps>(N
|
|||||||
roleStore: di.inject(roleStoreInjectable),
|
roleStore: di.inject(roleStoreInjectable),
|
||||||
showDetails: di.inject(showDetailsInjectable),
|
showDetails: di.inject(showDetailsInjectable),
|
||||||
state: di.inject(addRoleDialogStateInjectable),
|
state: di.inject(addRoleDialogStateInjectable),
|
||||||
|
showCheckedErrorNotification: di.inject(showCheckedErrorNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -14,7 +14,6 @@ import { Dialog } from "../../../dialog";
|
|||||||
import { Input } from "../../../input";
|
import { Input } from "../../../input";
|
||||||
import { systemName } from "../../../input/input_validators";
|
import { systemName } from "../../../input/input_validators";
|
||||||
import { SubTitle } from "../../../layout/sub-title";
|
import { SubTitle } from "../../../layout/sub-title";
|
||||||
import { Notifications } from "../../../notifications";
|
|
||||||
import { Wizard, WizardStep } from "../../../wizard";
|
import { Wizard, WizardStep } from "../../../wizard";
|
||||||
import type { CreateServiceAccountDialogState } from "./state.injectable";
|
import type { CreateServiceAccountDialogState } from "./state.injectable";
|
||||||
import type { ServiceAccountStore } from "../store";
|
import type { ServiceAccountStore } from "../store";
|
||||||
@ -24,6 +23,8 @@ import closeCreateServiceAccountDialogInjectable from "./close.injectable";
|
|||||||
import serviceAccountStoreInjectable from "../store.injectable";
|
import serviceAccountStoreInjectable from "../store.injectable";
|
||||||
import showDetailsInjectable from "../../../kube-detail-params/show-details.injectable";
|
import showDetailsInjectable from "../../../kube-detail-params/show-details.injectable";
|
||||||
import createServiceAccountDialogStateInjectable from "./state.injectable";
|
import createServiceAccountDialogStateInjectable from "./state.injectable";
|
||||||
|
import type { ShowCheckedErrorNotification } from "../../../notifications/show-checked-error.injectable";
|
||||||
|
import showCheckedErrorNotificationInjectable from "../../../notifications/show-checked-error.injectable";
|
||||||
|
|
||||||
export interface CreateServiceAccountDialogProps extends Partial<DialogProps> {
|
export interface CreateServiceAccountDialogProps extends Partial<DialogProps> {
|
||||||
}
|
}
|
||||||
@ -33,12 +34,19 @@ interface Dependencies {
|
|||||||
serviceAccountStore: ServiceAccountStore;
|
serviceAccountStore: ServiceAccountStore;
|
||||||
closeCreateServiceAccountDialog: () => void;
|
closeCreateServiceAccountDialog: () => void;
|
||||||
showDetails: ShowDetails;
|
showDetails: ShowDetails;
|
||||||
|
showCheckedErrorNotification: ShowCheckedErrorNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
class NonInjectedCreateServiceAccountDialog extends React.Component<CreateServiceAccountDialogProps & Dependencies> {
|
class NonInjectedCreateServiceAccountDialog extends React.Component<CreateServiceAccountDialogProps & Dependencies> {
|
||||||
createAccount = async () => {
|
createAccount = async () => {
|
||||||
const { closeCreateServiceAccountDialog, serviceAccountStore, state, showDetails } = this.props;
|
const {
|
||||||
|
closeCreateServiceAccountDialog,
|
||||||
|
serviceAccountStore,
|
||||||
|
state,
|
||||||
|
showDetails,
|
||||||
|
showCheckedErrorNotification,
|
||||||
|
} = this.props;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const serviceAccount = await serviceAccountStore.create({
|
const serviceAccount = await serviceAccountStore.create({
|
||||||
@ -49,7 +57,7 @@ class NonInjectedCreateServiceAccountDialog extends React.Component<CreateServic
|
|||||||
showDetails(serviceAccount.selfLink);
|
showDetails(serviceAccount.selfLink);
|
||||||
closeCreateServiceAccountDialog();
|
closeCreateServiceAccountDialog();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Notifications.checkedError(err, "Unknown error occured while creating service account");
|
showCheckedErrorNotification(err, "Unknown error occured while creating service account");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -99,5 +107,6 @@ export const CreateServiceAccountDialog = withInjectables<Dependencies, CreateSe
|
|||||||
serviceAccountStore: di.inject(serviceAccountStoreInjectable),
|
serviceAccountStore: di.inject(serviceAccountStoreInjectable),
|
||||||
showDetails: di.inject(showDetailsInjectable),
|
showDetails: di.inject(showDetailsInjectable),
|
||||||
state: di.inject(createServiceAccountDialogStateInjectable),
|
state: di.inject(createServiceAccountDialogStateInjectable),
|
||||||
|
showCheckedErrorNotification: di.inject(showCheckedErrorNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -7,13 +7,14 @@ import type { KubeObjectMenuProps } from "../kube-object-menu";
|
|||||||
import type { CronJob, CronJobApi } from "../../../common/k8s-api/endpoints";
|
import type { CronJob, CronJobApi } from "../../../common/k8s-api/endpoints";
|
||||||
import { MenuItem } from "../menu";
|
import { MenuItem } from "../menu";
|
||||||
import { Icon } from "../icon";
|
import { Icon } from "../icon";
|
||||||
import { Notifications } from "../notifications";
|
|
||||||
import type { OpenConfirmDialog } from "../confirm-dialog/open.injectable";
|
import type { OpenConfirmDialog } from "../confirm-dialog/open.injectable";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import openConfirmDialogInjectable from "../confirm-dialog/open.injectable";
|
import openConfirmDialogInjectable from "../confirm-dialog/open.injectable";
|
||||||
import type { OpenCronJobTriggerDialog } from "./trigger-dialog/open.injectable";
|
import type { OpenCronJobTriggerDialog } from "./trigger-dialog/open.injectable";
|
||||||
import openCronJobTriggerDialogInjectable from "./trigger-dialog/open.injectable";
|
import openCronJobTriggerDialogInjectable from "./trigger-dialog/open.injectable";
|
||||||
import cronJobApiInjectable from "../../../common/k8s-api/endpoints/cron-job.api.injectable";
|
import cronJobApiInjectable from "../../../common/k8s-api/endpoints/cron-job.api.injectable";
|
||||||
|
import type { ShowCheckedErrorNotification } from "../notifications/show-checked-error.injectable";
|
||||||
|
import showCheckedErrorNotificationInjectable from "../notifications/show-checked-error.injectable";
|
||||||
|
|
||||||
export interface CronJobMenuProps extends KubeObjectMenuProps<CronJob> {}
|
export interface CronJobMenuProps extends KubeObjectMenuProps<CronJob> {}
|
||||||
|
|
||||||
@ -21,6 +22,7 @@ interface Dependencies {
|
|||||||
openConfirmDialog: OpenConfirmDialog;
|
openConfirmDialog: OpenConfirmDialog;
|
||||||
openCronJobTriggerDialog: OpenCronJobTriggerDialog;
|
openCronJobTriggerDialog: OpenCronJobTriggerDialog;
|
||||||
cronJobApi: CronJobApi;
|
cronJobApi: CronJobApi;
|
||||||
|
showCheckedErrorNotification: ShowCheckedErrorNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
const NonInjectedCronJobMenu = ({
|
const NonInjectedCronJobMenu = ({
|
||||||
@ -29,6 +31,7 @@ const NonInjectedCronJobMenu = ({
|
|||||||
openConfirmDialog,
|
openConfirmDialog,
|
||||||
openCronJobTriggerDialog,
|
openCronJobTriggerDialog,
|
||||||
cronJobApi,
|
cronJobApi,
|
||||||
|
showCheckedErrorNotification,
|
||||||
}: Dependencies & CronJobMenuProps) => (
|
}: Dependencies & CronJobMenuProps) => (
|
||||||
<>
|
<>
|
||||||
<MenuItem onClick={() => openCronJobTriggerDialog(object)}>
|
<MenuItem onClick={() => openCronJobTriggerDialog(object)}>
|
||||||
@ -48,7 +51,7 @@ const NonInjectedCronJobMenu = ({
|
|||||||
try {
|
try {
|
||||||
await cronJobApi.resume({ namespace: object.getNs(), name: object.getName() });
|
await cronJobApi.resume({ namespace: object.getNs(), name: object.getName() });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Notifications.checkedError(err, "Unknown error occured while resuming CronJob");
|
showCheckedErrorNotification(err, "Unknown error occured while resuming CronJob");
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
labelOk: `Resume`,
|
labelOk: `Resume`,
|
||||||
@ -76,7 +79,7 @@ const NonInjectedCronJobMenu = ({
|
|||||||
try {
|
try {
|
||||||
await cronJobApi.suspend({ namespace: object.getNs(), name: object.getName() });
|
await cronJobApi.suspend({ namespace: object.getNs(), name: object.getName() });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Notifications.checkedError(err, "Unknown error occured while suspending CronJob");
|
showCheckedErrorNotification(err, "Unknown error occured while suspending CronJob");
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
labelOk: `Suspend`,
|
labelOk: `Suspend`,
|
||||||
@ -106,5 +109,6 @@ export const CronJobMenu = withInjectables<Dependencies, CronJobMenuProps>(NonIn
|
|||||||
openConfirmDialog: di.inject(openConfirmDialogInjectable),
|
openConfirmDialog: di.inject(openConfirmDialogInjectable),
|
||||||
openCronJobTriggerDialog: di.inject(openCronJobTriggerDialogInjectable),
|
openCronJobTriggerDialog: di.inject(openCronJobTriggerDialogInjectable),
|
||||||
cronJobApi: di.inject(cronJobApiInjectable),
|
cronJobApi: di.inject(cronJobApiInjectable),
|
||||||
|
showCheckedErrorNotification: di.inject(showCheckedErrorNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -13,7 +13,7 @@ import type { DialogProps } from "../../dialog";
|
|||||||
import { Dialog } from "../../dialog";
|
import { Dialog } from "../../dialog";
|
||||||
import { Wizard, WizardStep } from "../../wizard";
|
import { Wizard, WizardStep } from "../../wizard";
|
||||||
import type { CronJob, JobApi } from "../../../../common/k8s-api/endpoints";
|
import type { CronJob, JobApi } from "../../../../common/k8s-api/endpoints";
|
||||||
import { Notifications } from "../../notifications";
|
import type { ShowNotification } from "../../notifications";
|
||||||
import { cssNames } from "../../../utils";
|
import { cssNames } from "../../../utils";
|
||||||
import { Input } from "../../input";
|
import { Input } from "../../input";
|
||||||
import { systemName, maxLength } from "../../input/input_validators";
|
import { systemName, maxLength } from "../../input/input_validators";
|
||||||
@ -21,6 +21,9 @@ import { withInjectables } from "@ogre-tools/injectable-react";
|
|||||||
import closeCronJobTriggerDialogInjectable from "./close.injectable";
|
import closeCronJobTriggerDialogInjectable from "./close.injectable";
|
||||||
import jobApiInjectable from "../../../../common/k8s-api/endpoints/job.api.injectable";
|
import jobApiInjectable from "../../../../common/k8s-api/endpoints/job.api.injectable";
|
||||||
import cronJobTriggerDialogStateInjectable from "./state.injectable";
|
import cronJobTriggerDialogStateInjectable from "./state.injectable";
|
||||||
|
import type { ShowCheckedErrorNotification } from "../../notifications/show-checked-error.injectable";
|
||||||
|
import showCheckedErrorNotificationInjectable from "../../notifications/show-checked-error.injectable";
|
||||||
|
import showErrorNotificationInjectable from "../../notifications/show-error-notification.injectable";
|
||||||
|
|
||||||
export interface CronJobTriggerDialogProps extends Partial<DialogProps> {
|
export interface CronJobTriggerDialogProps extends Partial<DialogProps> {
|
||||||
}
|
}
|
||||||
@ -29,6 +32,8 @@ interface Dependencies {
|
|||||||
state: IObservableValue<CronJob | undefined>;
|
state: IObservableValue<CronJob | undefined>;
|
||||||
jobApi: JobApi;
|
jobApi: JobApi;
|
||||||
closeCronJobTriggerDialog: () => void;
|
closeCronJobTriggerDialog: () => void;
|
||||||
|
showCheckedErrorNotification: ShowCheckedErrorNotification;
|
||||||
|
showErrorNotification: ShowNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -49,7 +54,9 @@ class NonInjectedCronJobTriggerDialog extends Component<CronJobTriggerDialogProp
|
|||||||
|
|
||||||
async trigger(cronJob: CronJob): Promise<void> {
|
async trigger(cronJob: CronJob): Promise<void> {
|
||||||
if (!cronJob.spec.jobTemplate) {
|
if (!cronJob.spec.jobTemplate) {
|
||||||
return void Notifications.error(`CronJob ${cronJob.getName()} has no jobTemplate`);
|
this.props.showErrorNotification(`CronJob ${cronJob.getName()} has no jobTemplate`);
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -73,7 +80,7 @@ class NonInjectedCronJobTriggerDialog extends Component<CronJobTriggerDialogProp
|
|||||||
|
|
||||||
this.props.closeCronJobTriggerDialog();
|
this.props.closeCronJobTriggerDialog();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Notifications.checkedError(err, "Unknown error occurred while creating job");
|
this.props.showCheckedErrorNotification(err, "Unknown error occurred while creating job");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,5 +145,7 @@ export const CronJobTriggerDialog = withInjectables<Dependencies, CronJobTrigger
|
|||||||
closeCronJobTriggerDialog: di.inject(closeCronJobTriggerDialogInjectable),
|
closeCronJobTriggerDialog: di.inject(closeCronJobTriggerDialogInjectable),
|
||||||
jobApi: di.inject(jobApiInjectable),
|
jobApi: di.inject(jobApiInjectable),
|
||||||
state: di.inject(cronJobTriggerDialogStateInjectable),
|
state: di.inject(cronJobTriggerDialogStateInjectable),
|
||||||
|
showCheckedErrorNotification: di.inject(showCheckedErrorNotificationInjectable),
|
||||||
|
showErrorNotification: di.inject(showErrorNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -7,17 +7,19 @@ import type { KubeObjectMenuProps } from "../kube-object-menu";
|
|||||||
import type { DaemonSet, DaemonSetApi } from "../../../common/k8s-api/endpoints";
|
import type { DaemonSet, DaemonSetApi } from "../../../common/k8s-api/endpoints";
|
||||||
import { MenuItem } from "../menu";
|
import { MenuItem } from "../menu";
|
||||||
import { Icon } from "../icon";
|
import { Icon } from "../icon";
|
||||||
import { Notifications } from "../notifications";
|
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import daemonSetApiInjectable from "../../../common/k8s-api/endpoints/daemon-set.api.injectable";
|
import daemonSetApiInjectable from "../../../common/k8s-api/endpoints/daemon-set.api.injectable";
|
||||||
import type { OpenConfirmDialog } from "../confirm-dialog/open.injectable";
|
import type { OpenConfirmDialog } from "../confirm-dialog/open.injectable";
|
||||||
import openConfirmDialogInjectable from "../confirm-dialog/open.injectable";
|
import openConfirmDialogInjectable from "../confirm-dialog/open.injectable";
|
||||||
|
import type { ShowCheckedErrorNotification } from "../notifications/show-checked-error.injectable";
|
||||||
|
import showCheckedErrorNotificationInjectable from "../notifications/show-checked-error.injectable";
|
||||||
|
|
||||||
export interface DaemonSetMenuProps extends KubeObjectMenuProps<DaemonSet> {}
|
export interface DaemonSetMenuProps extends KubeObjectMenuProps<DaemonSet> {}
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
daemonsetApi: DaemonSetApi;
|
daemonsetApi: DaemonSetApi;
|
||||||
openConfirmDialog: OpenConfirmDialog;
|
openConfirmDialog: OpenConfirmDialog;
|
||||||
|
showCheckedErrorNotification: ShowCheckedErrorNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
const NonInjectedDaemonSetMenu = ({
|
const NonInjectedDaemonSetMenu = ({
|
||||||
@ -25,6 +27,7 @@ const NonInjectedDaemonSetMenu = ({
|
|||||||
object,
|
object,
|
||||||
toolbar,
|
toolbar,
|
||||||
openConfirmDialog,
|
openConfirmDialog,
|
||||||
|
showCheckedErrorNotification,
|
||||||
}: Dependencies & DaemonSetMenuProps) => (
|
}: Dependencies & DaemonSetMenuProps) => (
|
||||||
<>
|
<>
|
||||||
<MenuItem
|
<MenuItem
|
||||||
@ -37,7 +40,7 @@ const NonInjectedDaemonSetMenu = ({
|
|||||||
name: object.getName(),
|
name: object.getName(),
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Notifications.checkedError(err, "Unknown error occured while restarting daemonset");
|
showCheckedErrorNotification(err, "Unknown error occured while restarting daemonset");
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
labelOk: "Restart",
|
labelOk: "Restart",
|
||||||
@ -65,5 +68,6 @@ export const DaemonSetMenu = withInjectables<Dependencies, DaemonSetMenuProps>(N
|
|||||||
...props,
|
...props,
|
||||||
daemonsetApi: di.inject(daemonSetApiInjectable),
|
daemonsetApi: di.inject(daemonSetApiInjectable),
|
||||||
openConfirmDialog: di.inject(openConfirmDialogInjectable),
|
openConfirmDialog: di.inject(openConfirmDialogInjectable),
|
||||||
|
showCheckedErrorNotification: di.inject(showCheckedErrorNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -7,13 +7,14 @@ import type { KubeObjectMenuProps } from "../kube-object-menu";
|
|||||||
import type { Deployment, DeploymentApi } from "../../../common/k8s-api/endpoints";
|
import type { Deployment, DeploymentApi } from "../../../common/k8s-api/endpoints";
|
||||||
import { MenuItem } from "../menu";
|
import { MenuItem } from "../menu";
|
||||||
import { Icon } from "../icon";
|
import { Icon } from "../icon";
|
||||||
import { Notifications } from "../notifications";
|
|
||||||
import type { OpenDeploymentScaleDialog } from "./scale/open.injectable";
|
import type { OpenDeploymentScaleDialog } from "./scale/open.injectable";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import deploymentApiInjectable from "../../../common/k8s-api/endpoints/deployment.api.injectable";
|
import deploymentApiInjectable from "../../../common/k8s-api/endpoints/deployment.api.injectable";
|
||||||
import openDeploymentScaleDialogInjectable from "./scale/open.injectable";
|
import openDeploymentScaleDialogInjectable from "./scale/open.injectable";
|
||||||
import type { OpenConfirmDialog } from "../confirm-dialog/open.injectable";
|
import type { OpenConfirmDialog } from "../confirm-dialog/open.injectable";
|
||||||
import openConfirmDialogInjectable from "../confirm-dialog/open.injectable";
|
import openConfirmDialogInjectable from "../confirm-dialog/open.injectable";
|
||||||
|
import type { ShowCheckedErrorNotification } from "../notifications/show-checked-error.injectable";
|
||||||
|
import showCheckedErrorNotificationInjectable from "../notifications/show-checked-error.injectable";
|
||||||
|
|
||||||
export interface DeploymentMenuProps extends KubeObjectMenuProps<Deployment> {}
|
export interface DeploymentMenuProps extends KubeObjectMenuProps<Deployment> {}
|
||||||
|
|
||||||
@ -21,6 +22,7 @@ interface Dependencies {
|
|||||||
openDeploymentScaleDialog: OpenDeploymentScaleDialog;
|
openDeploymentScaleDialog: OpenDeploymentScaleDialog;
|
||||||
deploymentApi: DeploymentApi;
|
deploymentApi: DeploymentApi;
|
||||||
openConfirmDialog: OpenConfirmDialog;
|
openConfirmDialog: OpenConfirmDialog;
|
||||||
|
showCheckedErrorNotification: ShowCheckedErrorNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
const NonInjectedDeploymentMenu = ({
|
const NonInjectedDeploymentMenu = ({
|
||||||
@ -29,6 +31,7 @@ const NonInjectedDeploymentMenu = ({
|
|||||||
openDeploymentScaleDialog,
|
openDeploymentScaleDialog,
|
||||||
toolbar,
|
toolbar,
|
||||||
openConfirmDialog,
|
openConfirmDialog,
|
||||||
|
showCheckedErrorNotification,
|
||||||
}: Dependencies & DeploymentMenuProps) => (
|
}: Dependencies & DeploymentMenuProps) => (
|
||||||
<>
|
<>
|
||||||
<MenuItem onClick={() => openDeploymentScaleDialog(object)}>
|
<MenuItem onClick={() => openDeploymentScaleDialog(object)}>
|
||||||
@ -49,7 +52,7 @@ const NonInjectedDeploymentMenu = ({
|
|||||||
name: object.getName(),
|
name: object.getName(),
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Notifications.checkedError(err, "Unknown error occured while restarting deployment");
|
showCheckedErrorNotification(err, "Unknown error occured while restarting deployment");
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
labelOk: "Restart",
|
labelOk: "Restart",
|
||||||
@ -78,5 +81,6 @@ export const DeploymentMenu = withInjectables<Dependencies, DeploymentMenuProps>
|
|||||||
deploymentApi: di.inject(deploymentApiInjectable),
|
deploymentApi: di.inject(deploymentApiInjectable),
|
||||||
openDeploymentScaleDialog: di.inject(openDeploymentScaleDialogInjectable),
|
openDeploymentScaleDialog: di.inject(openDeploymentScaleDialogInjectable),
|
||||||
openConfirmDialog: di.inject(openConfirmDialogInjectable),
|
openConfirmDialog: di.inject(openConfirmDialogInjectable),
|
||||||
|
showCheckedErrorNotification: di.inject(showCheckedErrorNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -15,11 +15,12 @@ import { Wizard, WizardStep } from "../../wizard";
|
|||||||
import type { Deployment, DeploymentApi } from "../../../../common/k8s-api/endpoints";
|
import type { Deployment, DeploymentApi } from "../../../../common/k8s-api/endpoints";
|
||||||
import { Icon } from "../../icon";
|
import { Icon } from "../../icon";
|
||||||
import { Slider } from "../../slider";
|
import { Slider } from "../../slider";
|
||||||
import { Notifications } from "../../notifications";
|
|
||||||
import { cssNames } from "../../../utils";
|
import { cssNames } from "../../../utils";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import deploymentApiInjectable from "../../../../common/k8s-api/endpoints/deployment.api.injectable";
|
import deploymentApiInjectable from "../../../../common/k8s-api/endpoints/deployment.api.injectable";
|
||||||
import deploymentScaleDialogStateInjectable from "./dialog-state.injectable";
|
import deploymentScaleDialogStateInjectable from "./dialog-state.injectable";
|
||||||
|
import type { ShowCheckedErrorNotification } from "../../notifications/show-checked-error.injectable";
|
||||||
|
import showCheckedErrorNotificationInjectable from "../../notifications/show-checked-error.injectable";
|
||||||
|
|
||||||
export interface DeploymentScaleDialogProps extends Partial<DialogProps> {
|
export interface DeploymentScaleDialogProps extends Partial<DialogProps> {
|
||||||
}
|
}
|
||||||
@ -27,6 +28,7 @@ export interface DeploymentScaleDialogProps extends Partial<DialogProps> {
|
|||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
deploymentApi: DeploymentApi;
|
deploymentApi: DeploymentApi;
|
||||||
state: IObservableValue<Deployment | undefined>;
|
state: IObservableValue<Deployment | undefined>;
|
||||||
|
showCheckedErrorNotification: ShowCheckedErrorNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -82,7 +84,7 @@ class NonInjectedDeploymentScaleDialog extends Component<DeploymentScaleDialogPr
|
|||||||
}
|
}
|
||||||
close();
|
close();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Notifications.checkedError(err, "Unknown error occured while scaling Deployment");
|
this.props.showCheckedErrorNotification(err, "Unknown error occured while scaling Deployment");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -182,5 +184,6 @@ export const DeploymentScaleDialog = withInjectables<Dependencies, DeploymentSca
|
|||||||
...props,
|
...props,
|
||||||
deploymentApi: di.inject(deploymentApiInjectable),
|
deploymentApi: di.inject(deploymentApiInjectable),
|
||||||
state: di.inject(deploymentScaleDialogStateInjectable),
|
state: di.inject(deploymentScaleDialogStateInjectable),
|
||||||
|
showCheckedErrorNotification: di.inject(showCheckedErrorNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -10,7 +10,7 @@ import { disposeOnUnmount, observer } from "mobx-react";
|
|||||||
import type { ContainerPort, Pod } from "../../../common/k8s-api/endpoints";
|
import type { ContainerPort, Pod } from "../../../common/k8s-api/endpoints";
|
||||||
import { action, makeObservable, observable, reaction } from "mobx";
|
import { action, makeObservable, observable, reaction } from "mobx";
|
||||||
import { cssNames } from "../../utils";
|
import { cssNames } from "../../utils";
|
||||||
import { Notifications } from "../notifications";
|
import type { ShowNotification } from "../notifications";
|
||||||
import { Button } from "../button";
|
import { Button } from "../button";
|
||||||
import type { ForwardedPort, PortForwardStore } from "../../port-forward";
|
import type { ForwardedPort, PortForwardStore } from "../../port-forward";
|
||||||
import { predictProtocol } from "../../port-forward";
|
import { predictProtocol } from "../../port-forward";
|
||||||
@ -24,6 +24,7 @@ import notifyErrorPortForwardingInjectable from "../../port-forward/notify-error
|
|||||||
import type { OpenPortForward } from "../../port-forward/open-port-forward.injectable";
|
import type { OpenPortForward } from "../../port-forward/open-port-forward.injectable";
|
||||||
import openPortForwardInjectable from "../../port-forward/open-port-forward.injectable";
|
import openPortForwardInjectable from "../../port-forward/open-port-forward.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
|
import showErrorNotificationInjectable from "../notifications/show-error-notification.injectable";
|
||||||
|
|
||||||
export interface PodContainerPortProps {
|
export interface PodContainerPortProps {
|
||||||
pod: Pod;
|
pod: Pod;
|
||||||
@ -37,6 +38,7 @@ interface Dependencies {
|
|||||||
aboutPortForwarding: () => void;
|
aboutPortForwarding: () => void;
|
||||||
notifyErrorPortForwarding: (message: string) => void;
|
notifyErrorPortForwarding: (message: string) => void;
|
||||||
openPortForward: OpenPortForward;
|
openPortForward: OpenPortForward;
|
||||||
|
showErrorNotification: ShowNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -134,7 +136,7 @@ class NonInjectedPodContainerPort extends React.Component<PodContainerPortProps
|
|||||||
|
|
||||||
@action
|
@action
|
||||||
async stopPortForward() {
|
async stopPortForward() {
|
||||||
const { pod, port } = this.props;
|
const { pod, port, showErrorNotification } = this.props;
|
||||||
const portForward: ForwardedPort = {
|
const portForward: ForwardedPort = {
|
||||||
kind: "pod",
|
kind: "pod",
|
||||||
name: pod.getName(),
|
name: pod.getName(),
|
||||||
@ -148,7 +150,7 @@ class NonInjectedPodContainerPort extends React.Component<PodContainerPortProps
|
|||||||
try {
|
try {
|
||||||
await this.portForwardStore.remove(portForward);
|
await this.portForwardStore.remove(portForward);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
Notifications.error(`Error occurred stopping the port-forward from port ${portForward.forwardPort}.`);
|
showErrorNotification(`Error occurred stopping the port-forward from port ${portForward.forwardPort}.`);
|
||||||
} finally {
|
} finally {
|
||||||
this.checkExistingPortForwarding();
|
this.checkExistingPortForwarding();
|
||||||
this.forwardPort = 0;
|
this.forwardPort = 0;
|
||||||
@ -205,5 +207,6 @@ export const PodContainerPort = withInjectables<Dependencies, PodContainerPortPr
|
|||||||
notifyErrorPortForwarding: di.inject(notifyErrorPortForwardingInjectable),
|
notifyErrorPortForwarding: di.inject(notifyErrorPortForwardingInjectable),
|
||||||
openPortForward: di.inject(openPortForwardInjectable),
|
openPortForward: di.inject(openPortForwardInjectable),
|
||||||
logger: di.inject(loggerInjectable),
|
logger: di.inject(loggerInjectable),
|
||||||
|
showErrorNotification: di.inject(showErrorNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -14,12 +14,13 @@ import { Dialog } from "../../dialog";
|
|||||||
import { Wizard, WizardStep } from "../../wizard";
|
import { Wizard, WizardStep } from "../../wizard";
|
||||||
import { Icon } from "../../icon";
|
import { Icon } from "../../icon";
|
||||||
import { Slider } from "../../slider";
|
import { Slider } from "../../slider";
|
||||||
import { Notifications } from "../../notifications";
|
|
||||||
import { cssNames } from "../../../utils";
|
import { cssNames } from "../../../utils";
|
||||||
import type { ReplicaSet, ReplicaSetApi } from "../../../../common/k8s-api/endpoints";
|
import type { ReplicaSet, ReplicaSetApi } from "../../../../common/k8s-api/endpoints";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import replicaSetApiInjectable from "../../../../common/k8s-api/endpoints/replica-set.api.injectable";
|
import replicaSetApiInjectable from "../../../../common/k8s-api/endpoints/replica-set.api.injectable";
|
||||||
import replicaSetScaleDialogStateInjectable from "./state.injectable";
|
import replicaSetScaleDialogStateInjectable from "./state.injectable";
|
||||||
|
import type { ShowCheckedErrorNotification } from "../../notifications/show-checked-error.injectable";
|
||||||
|
import showCheckedErrorNotificationInjectable from "../../notifications/show-checked-error.injectable";
|
||||||
|
|
||||||
export interface ReplicaSetScaleDialogProps extends Partial<DialogProps> {
|
export interface ReplicaSetScaleDialogProps extends Partial<DialogProps> {
|
||||||
}
|
}
|
||||||
@ -27,6 +28,7 @@ export interface ReplicaSetScaleDialogProps extends Partial<DialogProps> {
|
|||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
replicaSetApi: ReplicaSetApi;
|
replicaSetApi: ReplicaSetApi;
|
||||||
state: IObservableValue<ReplicaSet | undefined>;
|
state: IObservableValue<ReplicaSet | undefined>;
|
||||||
|
showCheckedErrorNotification: ShowCheckedErrorNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -82,7 +84,7 @@ class NonInjectedReplicaSetScaleDialog extends Component<ReplicaSetScaleDialogPr
|
|||||||
}
|
}
|
||||||
close();
|
close();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Notifications.checkedError(err, "Unknown error occured while scaling ReplicaSet");
|
this.props.showCheckedErrorNotification(err, "Unknown error occured while scaling ReplicaSet");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -178,5 +180,6 @@ export const ReplicaSetScaleDialog = withInjectables<Dependencies, ReplicaSetSca
|
|||||||
...props,
|
...props,
|
||||||
replicaSetApi: di.inject(replicaSetApiInjectable),
|
replicaSetApi: di.inject(replicaSetApiInjectable),
|
||||||
state: di.inject(replicaSetScaleDialogStateInjectable),
|
state: di.inject(replicaSetScaleDialogStateInjectable),
|
||||||
|
showCheckedErrorNotification: di.inject(showCheckedErrorNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -15,11 +15,12 @@ import { Dialog } from "../../dialog";
|
|||||||
import { Wizard, WizardStep } from "../../wizard";
|
import { Wizard, WizardStep } from "../../wizard";
|
||||||
import { Icon } from "../../icon";
|
import { Icon } from "../../icon";
|
||||||
import { Slider } from "../../slider";
|
import { Slider } from "../../slider";
|
||||||
import { Notifications } from "../../notifications";
|
|
||||||
import { cssNames } from "../../../utils";
|
import { cssNames } from "../../../utils";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import statefulSetApiInjectable from "../../../../common/k8s-api/endpoints/stateful-set.api.injectable";
|
import statefulSetApiInjectable from "../../../../common/k8s-api/endpoints/stateful-set.api.injectable";
|
||||||
import statefulSetDialogStateInjectable from "./dialog-state.injectable";
|
import statefulSetDialogStateInjectable from "./dialog-state.injectable";
|
||||||
|
import type { ShowCheckedErrorNotification } from "../../notifications/show-checked-error.injectable";
|
||||||
|
import showCheckedErrorNotificationInjectable from "../../notifications/show-checked-error.injectable";
|
||||||
|
|
||||||
export interface StatefulSetScaleDialogProps extends Partial<DialogProps> {
|
export interface StatefulSetScaleDialogProps extends Partial<DialogProps> {
|
||||||
}
|
}
|
||||||
@ -27,6 +28,7 @@ export interface StatefulSetScaleDialogProps extends Partial<DialogProps> {
|
|||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
statefulSetApi: StatefulSetApi;
|
statefulSetApi: StatefulSetApi;
|
||||||
state: IObservableValue<StatefulSet | undefined>;
|
state: IObservableValue<StatefulSet | undefined>;
|
||||||
|
showCheckedErrorNotification: ShowCheckedErrorNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -82,7 +84,7 @@ class NonInjectedStatefulSetScaleDialog extends Component<StatefulSetScaleDialog
|
|||||||
}
|
}
|
||||||
close();
|
close();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
Notifications.checkedError(error, "Unknown error occured while scaling StatefulSet");
|
this.props.showCheckedErrorNotification(error, "Unknown error occured while scaling StatefulSet");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -178,5 +180,6 @@ export const StatefulSetScaleDialog = withInjectables<Dependencies, StatefulSetS
|
|||||||
...props,
|
...props,
|
||||||
statefulSetApi: di.inject(statefulSetApiInjectable),
|
statefulSetApi: di.inject(statefulSetApiInjectable),
|
||||||
state: di.inject(statefulSetDialogStateInjectable),
|
state: di.inject(statefulSetDialogStateInjectable),
|
||||||
|
showCheckedErrorNotification: di.inject(showCheckedErrorNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -16,9 +16,10 @@ import { Button } from "../button";
|
|||||||
import type { DialogProps } from "../dialog";
|
import type { DialogProps } from "../dialog";
|
||||||
import { Dialog } from "../dialog";
|
import { Dialog } from "../dialog";
|
||||||
import { Icon } from "../icon";
|
import { Icon } from "../icon";
|
||||||
import { Notifications } from "../notifications";
|
import type { ShowNotification } from "../notifications";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import confirmDialogStateInjectable from "./state.injectable";
|
import confirmDialogStateInjectable from "./state.injectable";
|
||||||
|
import showErrorNotificationInjectable from "../notifications/show-error-notification.injectable";
|
||||||
|
|
||||||
export interface ConfirmDialogProps extends Partial<DialogProps> {
|
export interface ConfirmDialogProps extends Partial<DialogProps> {
|
||||||
}
|
}
|
||||||
@ -39,6 +40,7 @@ export interface ConfirmDialogBooleanParams {
|
|||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
state: IObservableValue<ConfirmDialogParams | undefined>;
|
state: IObservableValue<ConfirmDialogParams | undefined>;
|
||||||
|
showErrorNotification: ShowNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultParams = {
|
const defaultParams = {
|
||||||
@ -68,7 +70,7 @@ class NonInjectedConfirmDialog extends React.Component<ConfirmDialogProps & Depe
|
|||||||
this.isSaving = true;
|
this.isSaving = true;
|
||||||
await (async () => this.params.ok())();
|
await (async () => this.params.ok())();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
Notifications.error(
|
this.props.showErrorNotification(
|
||||||
<>
|
<>
|
||||||
<p>Confirmation action failed:</p>
|
<p>Confirmation action failed:</p>
|
||||||
<p>
|
<p>
|
||||||
@ -96,7 +98,7 @@ class NonInjectedConfirmDialog extends React.Component<ConfirmDialogProps & Depe
|
|||||||
try {
|
try {
|
||||||
await Promise.resolve(this.params.cancel());
|
await Promise.resolve(this.params.cancel());
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
Notifications.error(
|
this.props.showErrorNotification(
|
||||||
<>
|
<>
|
||||||
<p>Cancelling action failed:</p>
|
<p>Cancelling action failed:</p>
|
||||||
<p>
|
<p>
|
||||||
@ -167,5 +169,6 @@ export const ConfirmDialog = withInjectables<Dependencies, ConfirmDialogProps>(N
|
|||||||
getProps: (di, props) => ({
|
getProps: (di, props) => ({
|
||||||
...props,
|
...props,
|
||||||
state: di.inject(confirmDialogStateInjectable),
|
state: di.inject(confirmDialogStateInjectable),
|
||||||
|
showErrorNotification: di.inject(showErrorNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -9,18 +9,31 @@ import React from "react";
|
|||||||
import type { DialogProps } from "../dialog";
|
import type { DialogProps } from "../dialog";
|
||||||
import { Dialog } from "../dialog";
|
import { Dialog } from "../dialog";
|
||||||
import { Wizard, WizardStep } from "../wizard";
|
import { Wizard, WizardStep } from "../wizard";
|
||||||
import { Notifications } from "../notifications";
|
import type { ShowNotification } from "../notifications";
|
||||||
import { Button } from "../button";
|
import { Button } from "../button";
|
||||||
import { Icon } from "../icon";
|
import { Icon } from "../icon";
|
||||||
import { clipboard } from "electron";
|
import { clipboard } from "electron";
|
||||||
import { kebabCase } from "lodash/fp";
|
import { kebabCase } from "lodash/fp";
|
||||||
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
|
import showSuccessNotificationInjectable from "../notifications/show-success-notification.injectable";
|
||||||
|
|
||||||
export interface LogsDialogProps extends DialogProps {
|
export interface LogsDialogProps extends DialogProps {
|
||||||
title: string;
|
title: string;
|
||||||
logs: string;
|
logs: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function LogsDialog({ title, logs, ...dialogProps }: LogsDialogProps) {
|
interface Dependencies {
|
||||||
|
showSuccessNotification: ShowNotification;
|
||||||
|
}
|
||||||
|
|
||||||
|
const NonInjectedLogsDialog = (props: LogsDialogProps & Dependencies) => {
|
||||||
|
const {
|
||||||
|
title,
|
||||||
|
logs,
|
||||||
|
showSuccessNotification,
|
||||||
|
...dialogProps
|
||||||
|
} = props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Dialog
|
<Dialog
|
||||||
{...dialogProps}
|
{...dialogProps}
|
||||||
@ -39,7 +52,7 @@ export function LogsDialog({ title, logs, ...dialogProps }: LogsDialogProps) {
|
|||||||
plain
|
plain
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
clipboard.writeText(logs);
|
clipboard.writeText(logs);
|
||||||
Notifications.ok(`Logs copied to clipboard.`);
|
showSuccessNotification(`Logs copied to clipboard.`);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Icon material="assignment"/>
|
<Icon material="assignment"/>
|
||||||
@ -58,4 +71,11 @@ export function LogsDialog({ title, logs, ...dialogProps }: LogsDialogProps) {
|
|||||||
</Wizard>
|
</Wizard>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
);
|
);
|
||||||
}
|
};
|
||||||
|
|
||||||
|
export const LogsDialog = withInjectables<Dependencies, LogsDialogProps>(NonInjectedLogsDialog, {
|
||||||
|
getProps: (di, props) => ({
|
||||||
|
...props,
|
||||||
|
showSuccessNotification: di.inject(showSuccessNotificationInjectable),
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|||||||
@ -4,22 +4,16 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { when } from "mobx";
|
import { when } from "mobx";
|
||||||
|
import loggerInjectable from "../../../../common/logger.injectable";
|
||||||
import { TerminalChannels } from "../../../../common/terminal/channels";
|
import { TerminalChannels } from "../../../../common/terminal/channels";
|
||||||
import { waitUntilDefined } from "../../../../common/utils/wait";
|
import { waitUntilDefined } from "../../../../common/utils/wait";
|
||||||
import type { TerminalApi } from "../../../api/terminal-api";
|
|
||||||
import { noop } from "../../../utils";
|
import { noop } from "../../../utils";
|
||||||
import { Notifications } from "../../notifications";
|
import showSuccessNotificationInjectable from "../../notifications/show-success-notification.injectable";
|
||||||
import selectDockTabInjectable from "../dock/select-dock-tab.injectable";
|
import selectDockTabInjectable from "../dock/select-dock-tab.injectable";
|
||||||
import type { DockTab, TabId } from "../dock/store";
|
import type { TabId } from "../dock/store";
|
||||||
import createTerminalTabInjectable from "./create-terminal-tab.injectable";
|
import createTerminalTabInjectable from "./create-terminal-tab.injectable";
|
||||||
import getTerminalApiInjectable from "./get-terminal-api.injectable";
|
import getTerminalApiInjectable from "./get-terminal-api.injectable";
|
||||||
|
|
||||||
interface Dependencies {
|
|
||||||
selectTab: (tabId: TabId) => void;
|
|
||||||
createTerminalTab: () => DockTab;
|
|
||||||
getTerminalApi: (tabId: TabId) => TerminalApi | undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface SendCommandOptions {
|
export interface SendCommandOptions {
|
||||||
/**
|
/**
|
||||||
* Emit an enter after the command
|
* Emit an enter after the command
|
||||||
@ -37,59 +31,63 @@ export interface SendCommandOptions {
|
|||||||
tabId?: TabId;
|
tabId?: TabId;
|
||||||
}
|
}
|
||||||
|
|
||||||
const sendCommand = ({ selectTab, createTerminalTab, getTerminalApi }: Dependencies) => async (command: string, options: SendCommandOptions = {}): Promise<void> => {
|
export type SendCommand = (command: string, options?: SendCommandOptions) => Promise<void>;
|
||||||
let tabId: string | undefined = options.tabId;
|
|
||||||
|
|
||||||
if (tabId) {
|
|
||||||
selectTab(tabId);
|
|
||||||
} else {
|
|
||||||
tabId = createTerminalTab().id;
|
|
||||||
}
|
|
||||||
|
|
||||||
const terminalApi = await waitUntilDefined(() => (
|
|
||||||
tabId
|
|
||||||
? getTerminalApi(tabId)
|
|
||||||
: undefined
|
|
||||||
));
|
|
||||||
const shellIsReady = when(() => terminalApi.isReady);
|
|
||||||
const notifyVeryLong = setTimeout(() => {
|
|
||||||
shellIsReady.cancel();
|
|
||||||
Notifications.info(
|
|
||||||
"If terminal shell is not ready please check your shell init files, if applicable.",
|
|
||||||
{
|
|
||||||
timeout: 4_000,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}, 10_000);
|
|
||||||
|
|
||||||
await shellIsReady.catch(noop);
|
|
||||||
clearTimeout(notifyVeryLong);
|
|
||||||
|
|
||||||
if (terminalApi) {
|
|
||||||
if (options.enter) {
|
|
||||||
command += "\r";
|
|
||||||
}
|
|
||||||
|
|
||||||
terminalApi.sendMessage({
|
|
||||||
type: TerminalChannels.STDIN,
|
|
||||||
data: command,
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
console.warn(
|
|
||||||
"The selected tab is does not have a connection. Cannot send command.",
|
|
||||||
{ tabId, command },
|
|
||||||
);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const sendCommandInjectable = getInjectable({
|
const sendCommandInjectable = getInjectable({
|
||||||
id: "send-command",
|
id: "send-command",
|
||||||
|
|
||||||
instantiate: (di) => sendCommand({
|
instantiate: (di): SendCommand => {
|
||||||
createTerminalTab: di.inject(createTerminalTabInjectable),
|
const createTerminalTab = di.inject(createTerminalTabInjectable);
|
||||||
selectTab: di.inject(selectDockTabInjectable),
|
const selectTab = di.inject(selectDockTabInjectable);
|
||||||
getTerminalApi: di.inject(getTerminalApiInjectable),
|
const getTerminalApi = di.inject(getTerminalApiInjectable);
|
||||||
}),
|
const showSuccessNotification = di.inject(showSuccessNotificationInjectable);
|
||||||
|
const logger = di.inject(loggerInjectable);
|
||||||
|
|
||||||
|
return async (command: string, options: SendCommandOptions = {}): Promise<void> => {
|
||||||
|
let tabId: string | undefined = options.tabId;
|
||||||
|
|
||||||
|
if (tabId) {
|
||||||
|
selectTab(tabId);
|
||||||
|
} else {
|
||||||
|
tabId = createTerminalTab().id;
|
||||||
|
}
|
||||||
|
|
||||||
|
const terminalApi = await waitUntilDefined(() => (
|
||||||
|
tabId
|
||||||
|
? getTerminalApi(tabId)
|
||||||
|
: undefined
|
||||||
|
));
|
||||||
|
const shellIsReady = when(() => terminalApi.isReady);
|
||||||
|
const notifyVeryLong = setTimeout(() => {
|
||||||
|
shellIsReady.cancel();
|
||||||
|
showSuccessNotification(
|
||||||
|
"If terminal shell is not ready please check your shell init files, if applicable.",
|
||||||
|
{
|
||||||
|
timeout: 4_000,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}, 10_000);
|
||||||
|
|
||||||
|
await shellIsReady.catch(noop);
|
||||||
|
clearTimeout(notifyVeryLong);
|
||||||
|
|
||||||
|
if (terminalApi) {
|
||||||
|
if (options.enter) {
|
||||||
|
command += "\r";
|
||||||
|
}
|
||||||
|
|
||||||
|
terminalApi.sendMessage({
|
||||||
|
type: TerminalChannels.STDIN,
|
||||||
|
data: command,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
logger.warn(
|
||||||
|
"The selected tab is does not have a connection. Cannot send command.",
|
||||||
|
{ tabId, command },
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export default sendCommandInjectable;
|
export default sendCommandInjectable;
|
||||||
|
|||||||
@ -16,13 +16,6 @@ import { Animate } from "../animate";
|
|||||||
import { Icon } from "../icon";
|
import { Icon } from "../icon";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import notificationsStoreInjectable from "./notifications-store.injectable";
|
import notificationsStoreInjectable from "./notifications-store.injectable";
|
||||||
import { asLegacyGlobalFunctionForExtensionApi } from "../../../extensions/as-legacy-globals-for-extension-api/as-legacy-global-function-for-extension-api";
|
|
||||||
import showSuccessNotificationInjectable from "./show-success-notification.injectable";
|
|
||||||
import type { ShowCheckedErrorNotification } from "./show-checked-error.injectable";
|
|
||||||
import showCheckedErrorNotificationInjectable from "./show-checked-error.injectable";
|
|
||||||
import showErrorNotificationInjectable from "./show-error-notification.injectable";
|
|
||||||
import showInfoNotificationInjectable from "./show-info-notification.injectable";
|
|
||||||
import showShortInfoNotificationInjectable from "./show-short-info.injectable";
|
|
||||||
|
|
||||||
export type ShowNotification = (message: NotificationMessage, opts?: CreateNotificationOptions) => Disposer;
|
export type ShowNotification = (message: NotificationMessage, opts?: CreateNotificationOptions) => Disposer;
|
||||||
|
|
||||||
@ -102,25 +95,8 @@ class NonInjectedNotifications extends React.Component<Dependencies> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const Notifications = withInjectables<Dependencies>(
|
export const Notifications = withInjectables<Dependencies>(NonInjectedNotifications, {
|
||||||
NonInjectedNotifications,
|
getProps: (di) => ({
|
||||||
|
store: di.inject(notificationsStoreInjectable),
|
||||||
{
|
}),
|
||||||
getProps: (di) => ({
|
});
|
||||||
store: di.inject(notificationsStoreInjectable),
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
) as React.FC & {
|
|
||||||
ok: ShowNotification;
|
|
||||||
checkedError: ShowCheckedErrorNotification;
|
|
||||||
error: ShowNotification;
|
|
||||||
shortInfo: ShowNotification;
|
|
||||||
info: ShowNotification;
|
|
||||||
};
|
|
||||||
|
|
||||||
Notifications.ok = asLegacyGlobalFunctionForExtensionApi(showSuccessNotificationInjectable);
|
|
||||||
Notifications.error = asLegacyGlobalFunctionForExtensionApi(showErrorNotificationInjectable);
|
|
||||||
Notifications.checkedError = asLegacyGlobalFunctionForExtensionApi(showCheckedErrorNotificationInjectable);
|
|
||||||
Notifications.info = asLegacyGlobalFunctionForExtensionApi(showInfoNotificationInjectable);
|
|
||||||
Notifications.shortInfo = asLegacyGlobalFunctionForExtensionApi(showShortInfoNotificationInjectable);
|
|
||||||
|
|
||||||
|
|||||||
@ -2,13 +2,13 @@
|
|||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
import { Notifications } from "../components/notifications";
|
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import userStoreInjectable from "../../common/user-store/user-store.injectable";
|
import userStoreInjectable from "../../common/user-store/user-store.injectable";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import navigateToKubernetesPreferencesInjectable from "../../features/preferences/common/navigate-to-kubernetes-preferences.injectable";
|
import navigateToKubernetesPreferencesInjectable from "../../features/preferences/common/navigate-to-kubernetes-preferences.injectable";
|
||||||
import discoverAllKubeconfigSyncKindsInjectable from "../../features/preferences/renderer/preference-items/kubernetes/kubeconfig-sync/discover-all-sync-kinds.injectable";
|
import discoverAllKubeconfigSyncKindsInjectable from "../../features/preferences/renderer/preference-items/kubernetes/kubeconfig-sync/discover-all-sync-kinds.injectable";
|
||||||
import { action } from "mobx";
|
import { action } from "mobx";
|
||||||
|
import showSuccessNotificationInjectable from "../components/notifications/show-success-notification.injectable";
|
||||||
|
|
||||||
const addSyncEntriesInjectable = getInjectable({
|
const addSyncEntriesInjectable = getInjectable({
|
||||||
id: "add-sync-entries",
|
id: "add-sync-entries",
|
||||||
@ -17,6 +17,7 @@ const addSyncEntriesInjectable = getInjectable({
|
|||||||
const userStore = di.inject(userStoreInjectable);
|
const userStore = di.inject(userStoreInjectable);
|
||||||
const navigateToKubernetesPreferences = di.inject(navigateToKubernetesPreferencesInjectable);
|
const navigateToKubernetesPreferences = di.inject(navigateToKubernetesPreferencesInjectable);
|
||||||
const discoverAllKubeconfigSyncKinds = di.inject(discoverAllKubeconfigSyncKindsInjectable);
|
const discoverAllKubeconfigSyncKinds = di.inject(discoverAllKubeconfigSyncKindsInjectable);
|
||||||
|
const showSuccessNotification = di.inject(showSuccessNotificationInjectable);
|
||||||
|
|
||||||
return async (filePaths: string[]) => {
|
return async (filePaths: string[]) => {
|
||||||
const kinds = await discoverAllKubeconfigSyncKinds(filePaths);
|
const kinds = await discoverAllKubeconfigSyncKinds(filePaths);
|
||||||
@ -27,7 +28,7 @@ const addSyncEntriesInjectable = getInjectable({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Notifications.ok((
|
showSuccessNotification((
|
||||||
<div>
|
<div>
|
||||||
<p>Selected items has been added to Kubeconfig Sync.</p>
|
<p>Selected items has been added to Kubeconfig Sync.</p>
|
||||||
<br/>
|
<br/>
|
||||||
|
|||||||
@ -5,13 +5,15 @@
|
|||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import navigateToEntitySettingsInjectable from "../../common/front-end-routing/routes/entity-settings/navigate-to-entity-settings.injectable";
|
import navigateToEntitySettingsInjectable from "../../common/front-end-routing/routes/entity-settings/navigate-to-entity-settings.injectable";
|
||||||
import type { ListNamespaceForbiddenArgs } from "../../common/ipc/cluster";
|
import type { ListNamespaceForbiddenArgs } from "../../common/ipc/cluster";
|
||||||
import { Notifications } from "../components/notifications";
|
|
||||||
import { Button } from "../components/button";
|
import { Button } from "../components/button";
|
||||||
import type { IpcRendererEvent } from "electron";
|
import type { IpcRendererEvent } from "electron";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import notificationsStoreInjectable from "../components/notifications/notifications-store.injectable";
|
import notificationsStoreInjectable from "../components/notifications/notifications-store.injectable";
|
||||||
import { getMillisecondsFromUnixEpoch } from "../../common/utils/date/get-current-date-time";
|
import { getMillisecondsFromUnixEpoch } from "../../common/utils/date/get-current-date-time";
|
||||||
import getClusterByIdInjectable from "../../common/cluster-store/get-by-id.injectable";
|
import getClusterByIdInjectable from "../../common/cluster-store/get-by-id.injectable";
|
||||||
|
import showSuccessNotificationInjectable from "../components/notifications/show-success-notification.injectable";
|
||||||
|
|
||||||
|
const intervalBetweenNotifications = 1000 * 60; // 60s
|
||||||
|
|
||||||
const listNamespacesForbiddenHandlerInjectable = getInjectable({
|
const listNamespacesForbiddenHandlerInjectable = getInjectable({
|
||||||
id: "list-namespaces-forbidden-handler",
|
id: "list-namespaces-forbidden-handler",
|
||||||
@ -21,7 +23,7 @@ const listNamespacesForbiddenHandlerInjectable = getInjectable({
|
|||||||
const notificationsStore = di.inject(notificationsStoreInjectable);
|
const notificationsStore = di.inject(notificationsStoreInjectable);
|
||||||
const getClusterById = di.inject(getClusterByIdInjectable);
|
const getClusterById = di.inject(getClusterByIdInjectable);
|
||||||
const notificationLastDisplayedAt = new Map<string, number>();
|
const notificationLastDisplayedAt = new Map<string, number>();
|
||||||
const intervalBetweenNotifications = 1000 * 60; // 60s
|
const showSuccessNotification = di.inject(showSuccessNotificationInjectable);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
event: IpcRendererEvent,
|
event: IpcRendererEvent,
|
||||||
@ -47,7 +49,7 @@ const listNamespacesForbiddenHandlerInjectable = getInjectable({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Notifications.info(
|
showSuccessNotification(
|
||||||
(
|
(
|
||||||
<div className="flex column gaps">
|
<div className="flex column gaps">
|
||||||
<b>Add Accessible Namespaces</b>
|
<b>Add Accessible Namespaces</b>
|
||||||
|
|||||||
@ -3,15 +3,28 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { registerIpcListeners } from "./register-listeners";
|
import { defaultHotbarCells } from "../../common/hotbars/types";
|
||||||
|
import { clusterListNamespaceForbiddenChannel } from "../../common/ipc/cluster";
|
||||||
|
import { hotbarTooManyItemsChannel } from "../../common/ipc/hotbar";
|
||||||
|
import showErrorNotificationInjectable from "../components/notifications/show-error-notification.injectable";
|
||||||
|
import ipcRendererInjectable from "../utils/channel/ipc-renderer.injectable";
|
||||||
import listNamespacesForbiddenHandlerInjectable from "./list-namespaces-forbidden-handler.injectable";
|
import listNamespacesForbiddenHandlerInjectable from "./list-namespaces-forbidden-handler.injectable";
|
||||||
|
|
||||||
const registerIpcListenersInjectable = getInjectable({
|
const registerIpcListenersInjectable = getInjectable({
|
||||||
id: "register-ipc-listeners",
|
id: "register-ipc-listeners",
|
||||||
|
|
||||||
instantiate: (di) => registerIpcListeners({
|
instantiate: (di) => {
|
||||||
listNamespacesForbiddenHandler: di.inject(listNamespacesForbiddenHandlerInjectable),
|
const listNamespacesForbiddenHandler = di.inject(listNamespacesForbiddenHandlerInjectable);
|
||||||
}),
|
const ipcRenderer = di.inject(ipcRendererInjectable);
|
||||||
|
const showErrorNotification = di.inject(showErrorNotificationInjectable);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
ipcRenderer.on(clusterListNamespaceForbiddenChannel, listNamespacesForbiddenHandler);
|
||||||
|
ipcRenderer.on(hotbarTooManyItemsChannel, () => {
|
||||||
|
showErrorNotification(`Cannot have more than ${defaultHotbarCells} items pinned to a hotbar`);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export default registerIpcListenersInjectable;
|
export default registerIpcListenersInjectable;
|
||||||
|
|||||||
@ -1,27 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import type { IpcRendererEvent } from "electron";
|
|
||||||
import { ipcRenderer } from "electron";
|
|
||||||
import { Notifications } from "../components/notifications";
|
|
||||||
import { defaultHotbarCells } from "../../common/hotbars/types";
|
|
||||||
import { type ListNamespaceForbiddenArgs, clusterListNamespaceForbiddenChannel } from "../../common/ipc/cluster";
|
|
||||||
import { hotbarTooManyItemsChannel } from "../../common/ipc/hotbar";
|
|
||||||
|
|
||||||
function HotbarTooManyItemsHandler(): void {
|
|
||||||
Notifications.error(`Cannot have more than ${defaultHotbarCells} items pinned to a hotbar`);
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Dependencies {
|
|
||||||
listNamespacesForbiddenHandler: (
|
|
||||||
event: IpcRendererEvent,
|
|
||||||
...[clusterId]: ListNamespaceForbiddenArgs
|
|
||||||
) => void;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const registerIpcListeners = ({ listNamespacesForbiddenHandler }: Dependencies) => () => {
|
|
||||||
ipcRenderer.on(clusterListNamespaceForbiddenChannel, listNamespacesForbiddenHandler);
|
|
||||||
ipcRenderer.on(hotbarTooManyItemsChannel, HotbarTooManyItemsHandler);
|
|
||||||
};
|
|
||||||
@ -1,30 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
||||||
*/
|
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
|
||||||
import { aboutPortForwarding } from "./port-forward-notify";
|
|
||||||
import navigateToPortForwardsInjectable from "../../common/front-end-routing/routes/cluster/network/port-forwards/navigate-to-port-forwards.injectable";
|
|
||||||
import hostedClusterIdInjectable from "../cluster-frame-context/hosted-cluster-id.injectable";
|
|
||||||
import assert from "assert";
|
|
||||||
import notificationsStoreInjectable from "../components/notifications/notifications-store.injectable";
|
|
||||||
|
|
||||||
const aboutPortForwardingInjectable = getInjectable({
|
|
||||||
id: "about-port-forwarding",
|
|
||||||
|
|
||||||
instantiate: (di) => {
|
|
||||||
const hostedClusterId = di.inject(hostedClusterIdInjectable);
|
|
||||||
const notificationsStore = di.inject(notificationsStoreInjectable);
|
|
||||||
const navigateToPortForwards = di.inject(navigateToPortForwardsInjectable);
|
|
||||||
|
|
||||||
assert(hostedClusterId, "Only allowed to notify about port forward errors within a cluster frame");
|
|
||||||
|
|
||||||
return aboutPortForwarding({
|
|
||||||
navigateToPortForwards,
|
|
||||||
hostedClusterId,
|
|
||||||
notificationsStore,
|
|
||||||
});
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
export default aboutPortForwardingInjectable;
|
|
||||||
@ -0,0 +1,48 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
|
import React from "react";
|
||||||
|
import navigateToPortForwardsInjectable from "../../common/front-end-routing/routes/cluster/network/port-forwards/navigate-to-port-forwards.injectable";
|
||||||
|
import { Button } from "../components/button";
|
||||||
|
import showSuccessNotificationInjectable from "../components/notifications/show-success-notification.injectable";
|
||||||
|
|
||||||
|
const aboutPortForwardingInjectable = getInjectable({
|
||||||
|
id: "about-port-forwarding",
|
||||||
|
|
||||||
|
instantiate: (di) => {
|
||||||
|
const showSuccessNotification = di.inject(showSuccessNotificationInjectable);
|
||||||
|
const navigateToPortForwards = di.inject(navigateToPortForwardsInjectable);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
const removeNotification = showSuccessNotification(
|
||||||
|
(
|
||||||
|
<div className="flex column gaps">
|
||||||
|
<b>Port Forwarding</b>
|
||||||
|
<p>
|
||||||
|
You can manage your port forwards on the Port Forwarding Page.
|
||||||
|
</p>
|
||||||
|
<div className="flex gaps row align-left box grow">
|
||||||
|
<Button
|
||||||
|
active
|
||||||
|
outlined
|
||||||
|
label="Go to Port Forwarding"
|
||||||
|
onClick={() => {
|
||||||
|
navigateToPortForwards();
|
||||||
|
removeNotification();
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
),
|
||||||
|
{
|
||||||
|
id: "port-forward-notification",
|
||||||
|
timeout: 10_000,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
};
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default aboutPortForwardingInjectable;
|
||||||
@ -1,30 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
||||||
*/
|
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
|
||||||
import { notifyErrorPortForwarding } from "./port-forward-notify";
|
|
||||||
import navigateToPortForwardsInjectable from "../../common/front-end-routing/routes/cluster/network/port-forwards/navigate-to-port-forwards.injectable";
|
|
||||||
import hostedClusterIdInjectable from "../cluster-frame-context/hosted-cluster-id.injectable";
|
|
||||||
import assert from "assert";
|
|
||||||
import notificationsStoreInjectable from "../components/notifications/notifications-store.injectable";
|
|
||||||
|
|
||||||
const notifyErrorPortForwardingInjectable = getInjectable({
|
|
||||||
id: "notify-error-port-forwarding",
|
|
||||||
|
|
||||||
instantiate: (di) => {
|
|
||||||
const hostedClusterId = di.inject(hostedClusterIdInjectable);
|
|
||||||
const notificationsStore = di.inject(notificationsStoreInjectable);
|
|
||||||
const navigateToPortForwards = di.inject(navigateToPortForwardsInjectable);
|
|
||||||
|
|
||||||
assert(hostedClusterId, "Only allowed to notify about port forward errors within a cluster frame");
|
|
||||||
|
|
||||||
return notifyErrorPortForwarding({
|
|
||||||
navigateToPortForwards,
|
|
||||||
hostedClusterId,
|
|
||||||
notificationsStore,
|
|
||||||
});
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
export default notifyErrorPortForwardingInjectable;
|
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
|
import navigateToPortForwardsInjectable from "../../common/front-end-routing/routes/cluster/network/port-forwards/navigate-to-port-forwards.injectable";
|
||||||
|
import showErrorNotificationInjectable from "../components/notifications/show-error-notification.injectable";
|
||||||
|
import React from "react";
|
||||||
|
import { Button } from "../components/button";
|
||||||
|
|
||||||
|
const notifyErrorPortForwardingInjectable = getInjectable({
|
||||||
|
id: "notify-error-port-forwarding",
|
||||||
|
|
||||||
|
instantiate: (di) => {
|
||||||
|
const showErrorNotification = di.inject(showErrorNotificationInjectable);
|
||||||
|
const navigateToPortForwards = di.inject(navigateToPortForwardsInjectable);
|
||||||
|
|
||||||
|
return (msg: string) => {
|
||||||
|
const removeNotification = showErrorNotification(
|
||||||
|
(
|
||||||
|
<div className="flex column gaps">
|
||||||
|
<b>Port Forwarding</b>
|
||||||
|
<p>
|
||||||
|
{msg}
|
||||||
|
</p>
|
||||||
|
<div className="flex gaps row align-left box grow">
|
||||||
|
<Button
|
||||||
|
active
|
||||||
|
outlined
|
||||||
|
label="Check Port Forwarding"
|
||||||
|
onClick={() => {
|
||||||
|
navigateToPortForwards();
|
||||||
|
removeNotification();
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
),
|
||||||
|
{
|
||||||
|
timeout: 10_000,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
};
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default notifyErrorPortForwardingInjectable;
|
||||||
@ -1,92 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import React from "react";
|
|
||||||
import { Button } from "../components/button";
|
|
||||||
import { Notifications } from "../components/notifications";
|
|
||||||
import type { NavigateToPortForwards } from "../../common/front-end-routing/routes/cluster/network/port-forwards/navigate-to-port-forwards.injectable";
|
|
||||||
import type { NotificationsStore } from "../components/notifications/notifications.store";
|
|
||||||
|
|
||||||
interface AboutPortForwardingDependencies {
|
|
||||||
navigateToPortForwards: NavigateToPortForwards;
|
|
||||||
hostedClusterId: string;
|
|
||||||
notificationsStore: NotificationsStore;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const aboutPortForwarding = ({
|
|
||||||
navigateToPortForwards,
|
|
||||||
hostedClusterId,
|
|
||||||
notificationsStore,
|
|
||||||
}: AboutPortForwardingDependencies) => () => {
|
|
||||||
const notificationId = `port-forward-notification-${hostedClusterId}`;
|
|
||||||
|
|
||||||
Notifications.info(
|
|
||||||
(
|
|
||||||
<div className="flex column gaps">
|
|
||||||
<b>Port Forwarding</b>
|
|
||||||
<p>
|
|
||||||
You can manage your port forwards on the Port Forwarding Page.
|
|
||||||
</p>
|
|
||||||
<div className="flex gaps row align-left box grow">
|
|
||||||
<Button
|
|
||||||
active
|
|
||||||
outlined
|
|
||||||
label="Go to Port Forwarding"
|
|
||||||
onClick={() => {
|
|
||||||
navigateToPortForwards();
|
|
||||||
notificationsStore.remove(notificationId);
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
),
|
|
||||||
{
|
|
||||||
id: notificationId,
|
|
||||||
timeout: 10_000,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
interface NotifyErrorPortForwardingDependencies {
|
|
||||||
navigateToPortForwards: NavigateToPortForwards;
|
|
||||||
hostedClusterId: string;
|
|
||||||
notificationsStore: NotificationsStore;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
export const notifyErrorPortForwarding = ({
|
|
||||||
navigateToPortForwards,
|
|
||||||
hostedClusterId,
|
|
||||||
notificationsStore,
|
|
||||||
}: NotifyErrorPortForwardingDependencies) => (msg: string) => {
|
|
||||||
const notificationId = `port-forward-error-notification-${hostedClusterId}`;
|
|
||||||
|
|
||||||
Notifications.error(
|
|
||||||
(
|
|
||||||
<div className="flex column gaps">
|
|
||||||
<b>Port Forwarding</b>
|
|
||||||
<p>
|
|
||||||
{msg}
|
|
||||||
</p>
|
|
||||||
<div className="flex gaps row align-left box grow">
|
|
||||||
<Button
|
|
||||||
active
|
|
||||||
outlined
|
|
||||||
label="Check Port Forwarding"
|
|
||||||
onClick={() => {
|
|
||||||
navigateToPortForwards();
|
|
||||||
notificationsStore.remove(notificationId);
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
),
|
|
||||||
{
|
|
||||||
id: notificationId,
|
|
||||||
timeout: 10_000,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
@ -16,6 +16,7 @@ import catalogEntityRegistryInjectable from "../../api/catalog/entity/registry.i
|
|||||||
// TODO: Importing from features is not OK. Make protocol-router to comply with Open Closed Principle to allow moving implementation under a feature
|
// TODO: Importing from features is not OK. Make protocol-router to comply with Open Closed Principle to allow moving implementation under a feature
|
||||||
import navigateToPreferencesInjectable from "../../../features/preferences/common/navigate-to-preferences.injectable";
|
import navigateToPreferencesInjectable from "../../../features/preferences/common/navigate-to-preferences.injectable";
|
||||||
import getClusterByIdInjectable from "../../../common/cluster-store/get-by-id.injectable";
|
import getClusterByIdInjectable from "../../../common/cluster-store/get-by-id.injectable";
|
||||||
|
import showShortInfoNotificationInjectable from "../../components/notifications/show-short-info.injectable";
|
||||||
|
|
||||||
const bindProtocolAddRouteHandlersInjectable = getInjectable({
|
const bindProtocolAddRouteHandlersInjectable = getInjectable({
|
||||||
id: "bind-protocol-add-route-handlers",
|
id: "bind-protocol-add-route-handlers",
|
||||||
@ -31,6 +32,7 @@ const bindProtocolAddRouteHandlersInjectable = getInjectable({
|
|||||||
navigateToPreferences: di.inject(navigateToPreferencesInjectable),
|
navigateToPreferences: di.inject(navigateToPreferencesInjectable),
|
||||||
entityRegistry: di.inject(catalogEntityRegistryInjectable),
|
entityRegistry: di.inject(catalogEntityRegistryInjectable),
|
||||||
getClusterById: di.inject(getClusterByIdInjectable),
|
getClusterById: di.inject(getClusterByIdInjectable),
|
||||||
|
showShortInfoNotification: di.inject(showShortInfoNotificationInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -11,7 +11,7 @@ import {
|
|||||||
EXTENSION_PUBLISHER_MATCH,
|
EXTENSION_PUBLISHER_MATCH,
|
||||||
LensProtocolRouter,
|
LensProtocolRouter,
|
||||||
} from "../../../common/protocol-handler";
|
} from "../../../common/protocol-handler";
|
||||||
import { Notifications } from "../../components/notifications";
|
import type { ShowNotification } from "../../components/notifications";
|
||||||
import type { NavigateToCatalog } from "../../../common/front-end-routing/routes/catalog/navigate-to-catalog.injectable";
|
import type { NavigateToCatalog } from "../../../common/front-end-routing/routes/catalog/navigate-to-catalog.injectable";
|
||||||
import type { NavigateToEntitySettings } from "../../../common/front-end-routing/routes/entity-settings/navigate-to-entity-settings.injectable";
|
import type { NavigateToEntitySettings } from "../../../common/front-end-routing/routes/entity-settings/navigate-to-entity-settings.injectable";
|
||||||
import type { NavigateToClusterView } from "../../../common/front-end-routing/routes/cluster-view/navigate-to-cluster-view.injectable";
|
import type { NavigateToClusterView } from "../../../common/front-end-routing/routes/cluster-view/navigate-to-cluster-view.injectable";
|
||||||
@ -19,7 +19,6 @@ import assert from "assert";
|
|||||||
import type { AttemptInstallByInfo } from "../../components/+extensions/attempt-install-by-info.injectable";
|
import type { AttemptInstallByInfo } from "../../components/+extensions/attempt-install-by-info.injectable";
|
||||||
import type { GetClusterById } from "../../../common/cluster-store/get-by-id.injectable";
|
import type { GetClusterById } from "../../../common/cluster-store/get-by-id.injectable";
|
||||||
|
|
||||||
// TODO: make it so that the handlers are type safe and we don't need to do the asserts
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
attemptInstallByInfo: AttemptInstallByInfo;
|
attemptInstallByInfo: AttemptInstallByInfo;
|
||||||
lensProtocolRouterRenderer: LensProtocolRouterRenderer;
|
lensProtocolRouterRenderer: LensProtocolRouterRenderer;
|
||||||
@ -31,6 +30,7 @@ interface Dependencies {
|
|||||||
navigateToPreferences: (tabId: string) => void;
|
navigateToPreferences: (tabId: string) => void;
|
||||||
entityRegistry: CatalogEntityRegistry;
|
entityRegistry: CatalogEntityRegistry;
|
||||||
getClusterById: GetClusterById;
|
getClusterById: GetClusterById;
|
||||||
|
showShortInfoNotification: ShowNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const bindProtocolAddRouteHandlers = ({
|
export const bindProtocolAddRouteHandlers = ({
|
||||||
@ -44,6 +44,7 @@ export const bindProtocolAddRouteHandlers = ({
|
|||||||
navigateToPreferences,
|
navigateToPreferences,
|
||||||
entityRegistry,
|
entityRegistry,
|
||||||
getClusterById,
|
getClusterById,
|
||||||
|
showShortInfoNotification,
|
||||||
}: Dependencies) => () => {
|
}: Dependencies) => () => {
|
||||||
lensProtocolRouterRenderer
|
lensProtocolRouterRenderer
|
||||||
.addInternalHandler("/preferences", ({ search: { highlight: tabId }}) => {
|
.addInternalHandler("/preferences", ({ search: { highlight: tabId }}) => {
|
||||||
@ -53,7 +54,7 @@ export const bindProtocolAddRouteHandlers = ({
|
|||||||
})
|
})
|
||||||
.addInternalHandler("/", ({ tail }) => {
|
.addInternalHandler("/", ({ tail }) => {
|
||||||
if (tail) {
|
if (tail) {
|
||||||
Notifications.shortInfo(
|
showShortInfoNotification(
|
||||||
<p>
|
<p>
|
||||||
{"Unknown Action for "}
|
{"Unknown Action for "}
|
||||||
<code>
|
<code>
|
||||||
@ -83,7 +84,7 @@ export const bindProtocolAddRouteHandlers = ({
|
|||||||
if (entity) {
|
if (entity) {
|
||||||
navigateToEntitySettings(entityId);
|
navigateToEntitySettings(entityId);
|
||||||
} else {
|
} else {
|
||||||
Notifications.shortInfo(
|
showShortInfoNotification(
|
||||||
<p>
|
<p>
|
||||||
{"Unknown catalog entity "}
|
{"Unknown catalog entity "}
|
||||||
<code>{entityId}</code>
|
<code>{entityId}</code>
|
||||||
@ -100,7 +101,7 @@ export const bindProtocolAddRouteHandlers = ({
|
|||||||
if (cluster) {
|
if (cluster) {
|
||||||
navigateToClusterView(clusterId);
|
navigateToClusterView(clusterId);
|
||||||
} else {
|
} else {
|
||||||
Notifications.shortInfo(
|
showShortInfoNotification(
|
||||||
<p>
|
<p>
|
||||||
{"Unknown catalog entity "}
|
{"Unknown catalog entity "}
|
||||||
<code>{clusterId}</code>
|
<code>{clusterId}</code>
|
||||||
@ -116,7 +117,7 @@ export const bindProtocolAddRouteHandlers = ({
|
|||||||
if (cluster) {
|
if (cluster) {
|
||||||
navigateToEntitySettings(clusterId);
|
navigateToEntitySettings(clusterId);
|
||||||
} else {
|
} else {
|
||||||
Notifications.shortInfo(
|
showShortInfoNotification(
|
||||||
<p>
|
<p>
|
||||||
{"Unknown catalog entity "}
|
{"Unknown catalog entity "}
|
||||||
<code>{clusterId}</code>
|
<code>{clusterId}</code>
|
||||||
|
|||||||
@ -7,16 +7,19 @@ import extensionLoaderInjectable from "../../../extensions/extension-loader/exte
|
|||||||
import { LensProtocolRouterRenderer } from "./lens-protocol-router-renderer";
|
import { LensProtocolRouterRenderer } from "./lens-protocol-router-renderer";
|
||||||
import extensionsStoreInjectable from "../../../extensions/extensions-store/extensions-store.injectable";
|
import extensionsStoreInjectable from "../../../extensions/extensions-store/extensions-store.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
|
import showErrorNotificationInjectable from "../../components/notifications/show-error-notification.injectable";
|
||||||
|
import showShortInfoNotificationInjectable from "../../components/notifications/show-short-info.injectable";
|
||||||
|
|
||||||
const lensProtocolRouterRendererInjectable = getInjectable({
|
const lensProtocolRouterRendererInjectable = getInjectable({
|
||||||
id: "lens-protocol-router-renderer",
|
id: "lens-protocol-router-renderer",
|
||||||
|
|
||||||
instantiate: (di) =>
|
instantiate: (di) => new LensProtocolRouterRenderer({
|
||||||
new LensProtocolRouterRenderer({
|
extensionLoader: di.inject(extensionLoaderInjectable),
|
||||||
extensionLoader: di.inject(extensionLoaderInjectable),
|
extensionsStore: di.inject(extensionsStoreInjectable),
|
||||||
extensionsStore: di.inject(extensionsStoreInjectable),
|
logger: di.inject(loggerInjectable),
|
||||||
logger: di.inject(loggerInjectable),
|
showErrorNotification: di.inject(showErrorNotificationInjectable),
|
||||||
}),
|
showShortInfoNotification: di.inject(showShortInfoNotificationInjectable),
|
||||||
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
export default lensProtocolRouterRendererInjectable;
|
export default lensProtocolRouterRendererInjectable;
|
||||||
|
|||||||
@ -9,12 +9,15 @@ import * as proto from "../../../common/protocol-handler";
|
|||||||
import Url from "url-parse";
|
import Url from "url-parse";
|
||||||
import type { LensProtocolRouterDependencies } from "../../../common/protocol-handler";
|
import type { LensProtocolRouterDependencies } from "../../../common/protocol-handler";
|
||||||
import { foldAttemptResults, ProtocolHandlerInvalid, RouteAttempt } from "../../../common/protocol-handler";
|
import { foldAttemptResults, ProtocolHandlerInvalid, RouteAttempt } from "../../../common/protocol-handler";
|
||||||
import { Notifications } from "../../components/notifications";
|
import type { ShowNotification } from "../../components/notifications";
|
||||||
|
|
||||||
interface Dependencies extends LensProtocolRouterDependencies {}
|
interface Dependencies extends LensProtocolRouterDependencies {
|
||||||
|
showShortInfoNotification: ShowNotification;
|
||||||
|
showErrorNotification: ShowNotification;
|
||||||
|
}
|
||||||
|
|
||||||
export class LensProtocolRouterRenderer extends proto.LensProtocolRouter {
|
export class LensProtocolRouterRenderer extends proto.LensProtocolRouter {
|
||||||
constructor(protected dependencies: Dependencies) {
|
constructor(protected readonly dependencies: Dependencies) {
|
||||||
super(dependencies);
|
super(dependencies);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -26,7 +29,7 @@ export class LensProtocolRouterRenderer extends proto.LensProtocolRouter {
|
|||||||
const rendererAttempt = this._routeToInternal(new Url(rawUrl, true));
|
const rendererAttempt = this._routeToInternal(new Url(rawUrl, true));
|
||||||
|
|
||||||
if (foldAttemptResults(mainAttemptResult, rendererAttempt) === RouteAttempt.MISSING) {
|
if (foldAttemptResults(mainAttemptResult, rendererAttempt) === RouteAttempt.MISSING) {
|
||||||
Notifications.shortInfo((
|
this.dependencies.showShortInfoNotification((
|
||||||
<p>
|
<p>
|
||||||
{"Unknown action "}
|
{"Unknown action "}
|
||||||
<code>{rawUrl}</code>
|
<code>{rawUrl}</code>
|
||||||
@ -40,7 +43,7 @@ export class LensProtocolRouterRenderer extends proto.LensProtocolRouter {
|
|||||||
|
|
||||||
switch (foldAttemptResults(mainAttemptResult, rendererAttempt)) {
|
switch (foldAttemptResults(mainAttemptResult, rendererAttempt)) {
|
||||||
case RouteAttempt.MISSING:
|
case RouteAttempt.MISSING:
|
||||||
Notifications.shortInfo((
|
this.dependencies.showShortInfoNotification((
|
||||||
<p>
|
<p>
|
||||||
{"Unknown action "}
|
{"Unknown action "}
|
||||||
<code>{rawUrl}</code>
|
<code>{rawUrl}</code>
|
||||||
@ -49,7 +52,7 @@ export class LensProtocolRouterRenderer extends proto.LensProtocolRouter {
|
|||||||
));
|
));
|
||||||
break;
|
break;
|
||||||
case RouteAttempt.MISSING_EXTENSION:
|
case RouteAttempt.MISSING_EXTENSION:
|
||||||
Notifications.shortInfo((
|
this.dependencies.showShortInfoNotification((
|
||||||
<p>
|
<p>
|
||||||
{"Missing extension for action "}
|
{"Missing extension for action "}
|
||||||
<code>{rawUrl}</code>
|
<code>{rawUrl}</code>
|
||||||
@ -60,7 +63,7 @@ export class LensProtocolRouterRenderer extends proto.LensProtocolRouter {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
ipcRenderer.on(ProtocolHandlerInvalid, (event, error: string, rawUrl: string) => {
|
ipcRenderer.on(ProtocolHandlerInvalid, (event, error: string, rawUrl: string) => {
|
||||||
Notifications.error((
|
this.dependencies.showErrorNotification((
|
||||||
<>
|
<>
|
||||||
<p>
|
<p>
|
||||||
{"Failed to route "}
|
{"Failed to route "}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user