From bafcf4ef502a905ceba6b8c073698236e4c05a1d Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Fri, 12 Aug 2022 11:11:50 +0300 Subject: [PATCH] Move downloadLogs logic to the model Signed-off-by: Alex Andreev --- src/renderer/components/dock/logs/controls.tsx | 16 ++-------------- .../dock/logs/download-all-logs.injectable.ts | 7 +------ .../dock/logs/download-logs-dropdown.tsx | 4 ++-- .../dock/logs/download-logs.injectable.ts | 16 ++++++++++++++++ .../dock/logs/logs-view-model.injectable.ts | 2 ++ .../components/dock/logs/logs-view-model.ts | 15 +++++++++++++++ 6 files changed, 38 insertions(+), 22 deletions(-) create mode 100644 src/renderer/components/dock/logs/download-logs.injectable.ts diff --git a/src/renderer/components/dock/logs/controls.tsx b/src/renderer/components/dock/logs/controls.tsx index 4e5adf6dec..f89c3a7a10 100644 --- a/src/renderer/components/dock/logs/controls.tsx +++ b/src/renderer/components/dock/logs/controls.tsx @@ -26,7 +26,7 @@ interface Dependencies { downloadAllLogs: (params: ResourceDescriptor, query: PodLogsQuery) => Promise; } -const NonInjectedLogControls = observer(({ openSaveFileDialog, model, downloadAllLogs }: Dependencies & LogControlsProps) => { +const NonInjectedLogControls = observer(({ model, downloadAllLogs }: Dependencies & LogControlsProps) => { const tabData = model.logTabData.get(); const pod = model.pod.get(); @@ -47,18 +47,6 @@ const NonInjectedLogControls = observer(({ openSaveFileDialog, model, downloadAl model.reloadLogs(); }; - const downloadLogs = () => { - return new Promise((resolve) => { - const fileName = pod.getName(); - const logsToDownload: string[] = showTimestamps - ? model.logs.get() - : model.logsWithoutTimestamps.get(); - - openSaveFileDialog(`${fileName}.log`, logsToDownload.join("\n"), "text/plain"); - resolve(true); - }); - }; - return (
@@ -85,7 +73,7 @@ const NonInjectedLogControls = observer(({ openSaveFileDialog, model, downloadAl /> downloadAllLogs( { name: pod.getName(), namespace: pod.getNs() }, { timestamps: showTimestamps, previous } diff --git a/src/renderer/components/dock/logs/download-all-logs.injectable.ts b/src/renderer/components/dock/logs/download-all-logs.injectable.ts index a32c85b888..3581e2a70f 100644 --- a/src/renderer/components/dock/logs/download-all-logs.injectable.ts +++ b/src/renderer/components/dock/logs/download-all-logs.injectable.ts @@ -1,14 +1,9 @@ import { getInjectable } from "@ogre-tools/injectable"; -import type { PodContainer, Pod, PodLogsQuery } from "../../../../common/k8s-api/endpoints"; +import type { PodLogsQuery } from "../../../../common/k8s-api/endpoints"; import type { ResourceDescriptor } from "../../../../common/k8s-api/kube-api"; import openSaveFileDialogInjectable from "../../../utils/save-file.injectable"; import callForLogsInjectable from "./call-for-logs.injectable"; -export interface PodLogsTabData { - selectedPod: Pod; - selectedContainer: PodContainer; -} - const downloadAllLogsInjectable = getInjectable({ id: "download-all-logs", diff --git a/src/renderer/components/dock/logs/download-logs-dropdown.tsx b/src/renderer/components/dock/logs/download-logs-dropdown.tsx index 76907d87d1..164cd5f400 100644 --- a/src/renderer/components/dock/logs/download-logs-dropdown.tsx +++ b/src/renderer/components/dock/logs/download-logs-dropdown.tsx @@ -10,7 +10,7 @@ import { Icon } from "../../icon"; import { Menu, MenuItem } from "../../menu"; interface DownloadLogsDropdownProps { - downloadVisibleLogs: () => Promise; + downloadVisibleLogs: () => void; downloadAllLogs: () => Promise; } @@ -51,7 +51,7 @@ export function DownloadLogsDropdown({ downloadAllLogs, downloadVisibleLogs }: D open={toggle} > downloadLogs(downloadVisibleLogs)} + onClick={downloadVisibleLogs} data-testid="download-visible-logs" > Visible logs diff --git a/src/renderer/components/dock/logs/download-logs.injectable.ts b/src/renderer/components/dock/logs/download-logs.injectable.ts new file mode 100644 index 0000000000..616cb83385 --- /dev/null +++ b/src/renderer/components/dock/logs/download-logs.injectable.ts @@ -0,0 +1,16 @@ +import { getInjectable } from "@ogre-tools/injectable"; +import openSaveFileDialogInjectable from "../../../utils/save-file.injectable"; + +const downloadLogsInjectable = getInjectable({ + id: "download-logs", + + instantiate: (di) => { + const openSaveFileDialog = di.inject(openSaveFileDialogInjectable) + + return (filename: string, logs: string[]) => { + openSaveFileDialog(filename, logs.join("/n"), "text/plain"); + } + }, +}); + +export default downloadLogsInjectable; \ No newline at end of file diff --git a/src/renderer/components/dock/logs/logs-view-model.injectable.ts b/src/renderer/components/dock/logs/logs-view-model.injectable.ts index a9c027acf9..9204c041aa 100644 --- a/src/renderer/components/dock/logs/logs-view-model.injectable.ts +++ b/src/renderer/components/dock/logs/logs-view-model.injectable.ts @@ -18,6 +18,7 @@ import areLogsPresentInjectable from "./are-logs-present.injectable"; import searchStoreInjectable from "../../../search-store/search-store.injectable"; import getPodsByOwnerIdInjectable from "../../+workloads-pods/get-pods-by-owner-id.injectable"; import getPodByIdInjectable from "../../+workloads-pods/get-pod-by-id.injectable"; +import downloadLogsInjectable from "./download-logs.injectable"; export interface InstantiateArgs { tabId: TabId; @@ -39,6 +40,7 @@ const logsViewModelInjectable = getInjectable({ areLogsPresent: di.inject(areLogsPresentInjectable), getPodById: di.inject(getPodByIdInjectable), getPodsByOwnerId: di.inject(getPodsByOwnerIdInjectable), + downloadLogs: di.inject(downloadLogsInjectable), searchStore: di.inject(searchStoreInjectable), }), lifecycle: lifecycleEnum.transient, diff --git a/src/renderer/components/dock/logs/logs-view-model.ts b/src/renderer/components/dock/logs/logs-view-model.ts index 021eb43a7a..50cf2dd04a 100644 --- a/src/renderer/components/dock/logs/logs-view-model.ts +++ b/src/renderer/components/dock/logs/logs-view-model.ts @@ -27,6 +27,7 @@ export interface LogTabViewModelDependencies { getPodById: GetPodById; getPodsByOwnerId: GetPodsByOwnerId; areLogsPresent: (tabId: TabId) => boolean; + downloadLogs: (filename: string, logs: string[]) => void; searchStore: SearchStore; } @@ -77,4 +78,18 @@ export class LogTabViewModel { reloadLogs = () => this.dependencies.reloadLogs(this.tabId, this.pod, this.logTabData); renameTab = (title: string) => this.dependencies.renameTab(this.tabId, title); stopLoadingLogs = () => this.dependencies.stopLoadingLogs(this.tabId); + + downloadLogs = () => { + const pod = this.pod.get(); + const tabData = this.logTabData.get(); + + if (pod && tabData) { + const fileName = pod.getName(); + const logsToDownload: string[] = tabData.showTimestamps + ? this.logs.get() + : this.logsWithoutTimestamps.get(); + + this.dependencies.downloadLogs(`${fileName}.log`, logsToDownload); + } + }; }