diff --git a/src/renderer/components/dock/logs/__test__/__snapshots__/download-logs.test.tsx.snap b/src/renderer/components/dock/logs/__test__/__snapshots__/download-logs.test.tsx.snap index 2de2efa313..c354f37503 100644 --- a/src/renderer/components/dock/logs/__test__/__snapshots__/download-logs.test.tsx.snap +++ b/src/renderer/components/dock/logs/__test__/__snapshots__/download-logs.test.tsx.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`download logs when opening pod logs renders 1`] = ` +exports[`download logs options in pod logs dock tab when opening pod logs renders 1`] = `
+ { +describe("download logs options in pod logs dock tab", () => { let builder: ApplicationBuilder; beforeEach(() => { @@ -111,8 +111,11 @@ describe("download logs", () => { }); it("renders", () => { - // expect(rendered.getByText("Storage")).toBeInTheDocument(); expect(rendered.baseElement).toMatchSnapshot(); }); + + it("contains download dropdown button", () => { + expect(rendered.getByTestId("download-logs-dropdown")).toBeInTheDocument(); + }); }); }); \ No newline at end of file diff --git a/src/renderer/components/dock/logs/controls.tsx b/src/renderer/components/dock/logs/controls.tsx index 1906565532..f2a6e363aa 100644 --- a/src/renderer/components/dock/logs/controls.tsx +++ b/src/renderer/components/dock/logs/controls.tsx @@ -15,6 +15,7 @@ import type { LogTabViewModel } from "./logs-view-model"; import { withInjectables } from "@ogre-tools/injectable-react"; import openSaveFileDialogInjectable from "../../../utils/save-file.injectable"; import callForAllLogsInjectable from "./call-for-all-logs.injectable"; +import { DownloadLogsDropdown } from "./download-logs-dropdown"; export interface LogControlsProps { model: LogTabViewModel; @@ -53,18 +54,24 @@ const NonInjectedLogControls = observer(({ openSaveFileDialog, model, callForAll const logs = await callForAllLogs(pod.getName(), pod.getNs()); console.log(logs); + + return !!logs; } + + return false; // openSaveFileDialog("logs.txt", logs, "text/plain"); } - const downloadLogs = () => { + const downloadLogs = (): Promise => { const fileName = pod.getName(); const logsToDownload: string[] = showTimestamps ? model.logs.get() : model.logsWithoutTimestamps.get(); openSaveFileDialog(`${fileName}.log`, logsToDownload.join("\n"), "text/plain"); + + return new Promise(resolve => resolve(true)); }; return ( @@ -91,6 +98,12 @@ const NonInjectedLogControls = observer(({ openSaveFileDialog, model, callForAll onChange={togglePrevious} className="show-previous" /> + + + Promise + downloadAllLogs: () => Promise +} + +export function DownloadLogsDropdown({ downloadAllLogs, downloadVisibleLogs }: DownloadLogsDropdownProps) { + const [waiting, setWaiting] = useState(false); + const [opened, setOpened] = useState(false); + + const toggle = () => { + setOpened(!opened); + }; + + const downloadLogs = async (download: () => Promise) => { + setWaiting(true); + await download(); + setWaiting(false); + } + + return ( + <> + + + downloadLogs(downloadVisibleLogs)} + data-testid="download-visible-logs" + > + Visible logs + + downloadLogs(downloadAllLogs)} + data-testid="download-all-logs" + > + All logs + + + + ); +}