mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Restructure to monorepo (#6907)
* wip: restructure to monorepo Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * refactor create-release-pr to a package Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * build fixes Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * github workflow fixes Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix typo Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * add webpack-env types to core Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix github workflows Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * refactor/fix integration tests Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * lint fix Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * yarn run dev Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * eslint settings for vscode Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * move templates to right package Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * open-lens build fixes Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * integration test fix Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix nx task dependencies Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * use bash shell for unit tests in test workflow Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix test:unit for windows Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix win-ca webpack error in open-lens Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix win-ca webpack error in open-lens Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix build:app on windows Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * remove ELECTRON_BUILDER_EXTRA_ARGS Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * sync src/ from master Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * remove Makefile from core Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
This commit is contained in:
1 parent
0066ca4ea2
commit
2657df2293
3321 files changed
+28699
-11447
No files matched your search
@@ -0,0 +1,67 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
|
||||
import { clusterActivateHandler, clusterDisconnectHandler, clusterSetFrameIdHandler, clusterStates } from "../../common/ipc/cluster";
|
||||
import type { ClusterId, ClusterState } from "../../common/cluster-types";
|
||||
import { windowActionHandleChannel, windowLocationChangedChannel, windowOpenAppMenuAsContextMenuChannel, type WindowAction } from "../../common/ipc/window";
|
||||
import { extensionDiscoveryStateChannel, extensionLoaderFromMainChannel } from "../../common/ipc/extension-handling";
|
||||
import type { InstalledExtension } from "../../extensions/extension-discovery/extension-discovery";
|
||||
import type { LensExtensionId } from "../../extensions/lens-extension";
|
||||
import { toJS } from "../utils";
|
||||
import type { Location } from "history";
|
||||
import { getLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
|
||||
import ipcRendererInjectable from "../utils/channel/ipc-renderer.injectable";
|
||||
|
||||
function requestMain(channel: string, ...args: any[]) {
|
||||
const di = getLegacyGlobalDiForExtensionApi();
|
||||
|
||||
const ipcRenderer = di.inject(ipcRendererInjectable);
|
||||
|
||||
return ipcRenderer.invoke(channel, ...args.map(toJS));
|
||||
}
|
||||
|
||||
function emitToMain(channel: string, ...args: any[]) {
|
||||
const di = getLegacyGlobalDiForExtensionApi();
|
||||
|
||||
const ipcRenderer = di.inject(ipcRendererInjectable);
|
||||
|
||||
return ipcRenderer.send(channel, ...args.map(toJS));
|
||||
}
|
||||
|
||||
export function emitOpenAppMenuAsContextMenu(): void {
|
||||
emitToMain(windowOpenAppMenuAsContextMenuChannel);
|
||||
}
|
||||
|
||||
export function emitWindowLocationChanged(location: Location): void {
|
||||
emitToMain(windowLocationChangedChannel, location);
|
||||
}
|
||||
|
||||
export function requestWindowAction(type: WindowAction): Promise<void> {
|
||||
return requestMain(windowActionHandleChannel, type);
|
||||
}
|
||||
|
||||
export function requestSetClusterFrameId(clusterId: ClusterId): Promise<void> {
|
||||
return requestMain(clusterSetFrameIdHandler, clusterId);
|
||||
}
|
||||
|
||||
export function requestClusterActivation(clusterId: ClusterId, force?: boolean): Promise<void> {
|
||||
return requestMain(clusterActivateHandler, clusterId, force);
|
||||
}
|
||||
|
||||
export function requestClusterDisconnection(clusterId: ClusterId, force?: boolean): Promise<void> {
|
||||
return requestMain(clusterDisconnectHandler, clusterId, force);
|
||||
}
|
||||
|
||||
export function requestInitialClusterStates(): Promise<{ id: string; state: ClusterState }[]> {
|
||||
return requestMain(clusterStates);
|
||||
}
|
||||
|
||||
export function requestInitialExtensionDiscovery(): Promise<{ isLoaded: boolean }> {
|
||||
return requestMain(extensionDiscoveryStateChannel);
|
||||
}
|
||||
|
||||
export function requestExtensionLoaderInitialState(): Promise<[LensExtensionId, InstalledExtension][]> {
|
||||
return requestMain(extensionLoaderFromMainChannel);
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
/**
|
||||
* 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 { ipcRendererOn } from "../../common/ipc";
|
||||
|
||||
const legacyOnChannelListenInjectable = getInjectable({
|
||||
id: "legacy-on-channel-listen",
|
||||
instantiate: () => ipcRendererOn,
|
||||
causesSideEffects: true,
|
||||
});
|
||||
|
||||
export default legacyOnChannelListenInjectable;
|
||||
@@ -0,0 +1,87 @@
|
||||
/**
|
||||
* 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 navigateToEntitySettingsInjectable from "../../common/front-end-routing/routes/entity-settings/navigate-to-entity-settings.injectable";
|
||||
import type { ListNamespaceForbiddenArgs } from "../../common/ipc/cluster";
|
||||
import { Button } from "../components/button";
|
||||
import type { IpcRendererEvent } from "electron";
|
||||
import React from "react";
|
||||
import notificationsStoreInjectable from "../components/notifications/notifications-store.injectable";
|
||||
import { getMillisecondsFromUnixEpoch } from "../../common/utils/date/get-current-date-time";
|
||||
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({
|
||||
id: "list-namespaces-forbidden-handler",
|
||||
|
||||
instantiate: (di) => {
|
||||
const navigateToEntitySettings = di.inject(navigateToEntitySettingsInjectable);
|
||||
const notificationsStore = di.inject(notificationsStoreInjectable);
|
||||
const getClusterById = di.inject(getClusterByIdInjectable);
|
||||
const notificationLastDisplayedAt = new Map<string, number>();
|
||||
const showSuccessNotification = di.inject(showSuccessNotificationInjectable);
|
||||
|
||||
return (
|
||||
event: IpcRendererEvent,
|
||||
...[clusterId]: ListNamespaceForbiddenArgs
|
||||
): void => {
|
||||
const lastDisplayedAt = notificationLastDisplayedAt.get(clusterId);
|
||||
const now = getMillisecondsFromUnixEpoch();
|
||||
|
||||
if (
|
||||
typeof lastDisplayedAt !== "number" ||
|
||||
now - lastDisplayedAt > intervalBetweenNotifications
|
||||
) {
|
||||
notificationLastDisplayedAt.set(clusterId, now);
|
||||
} else {
|
||||
// don't bother the user too often
|
||||
return;
|
||||
}
|
||||
|
||||
const notificationId = `list-namespaces-forbidden:${clusterId}`;
|
||||
|
||||
if (notificationsStore.getById(notificationId)) {
|
||||
// notification is still visible
|
||||
return;
|
||||
}
|
||||
|
||||
showSuccessNotification(
|
||||
(
|
||||
<div className="flex column gaps">
|
||||
<b>Add Accessible Namespaces</b>
|
||||
<p>
|
||||
{"Cluster "}
|
||||
<b>{getClusterById(clusterId)?.name ?? "<unknown cluster>"}</b>
|
||||
{" does not have permissions to list namespaces. Please add the namespaces you have access to."}
|
||||
</p>
|
||||
<div className="flex gaps row align-left box grow">
|
||||
<Button
|
||||
active
|
||||
outlined
|
||||
label="Go to Accessible Namespaces Settings"
|
||||
onClick={() => {
|
||||
navigateToEntitySettings(clusterId, "namespaces");
|
||||
notificationsStore.remove(notificationId);
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
),
|
||||
{
|
||||
id: notificationId,
|
||||
/**
|
||||
* Set the time when the notification is closed as well so that there is at
|
||||
* least a minute between closing the notification as seeing it again
|
||||
*/
|
||||
onClose: () => notificationLastDisplayedAt.set(clusterId, getMillisecondsFromUnixEpoch()),
|
||||
},
|
||||
);
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export default listNamespacesForbiddenHandlerInjectable;
|
||||
@@ -0,0 +1,30 @@
|
||||
/**
|
||||
* 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 { 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";
|
||||
|
||||
const registerIpcListenersInjectable = getInjectable({
|
||||
id: "register-ipc-listeners",
|
||||
|
||||
instantiate: (di) => {
|
||||
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;
|
||||
Reference in new issue
Block a user