|
1 | 1 | <script lang="ts"> |
2 | | - import type { V1Pod } from '@kubernetes/client-node'; |
3 | | - import { getContext, onDestroy, onMount, tick } from 'svelte'; |
4 | | - import { Streams } from '/@/stream/streams'; |
5 | | - import type { IDisposable, PodLogsOptions } from '@kubernetes-dashboard/channels'; |
6 | | - import { EmptyScreen, Button, Input } from '@podman-desktop/ui-svelte'; |
7 | | - import NoLogIcon from '/@/component/icons/NoLogIcon.svelte'; |
8 | | - import type { Terminal } from '@xterm/xterm'; |
9 | | - import TerminalWindow from '/@/component/terminal/TerminalWindow.svelte'; |
10 | | - import { SvelteMap } from 'svelte/reactivity'; |
11 | | - import { ansi256Colours, colourizedANSIContainerName } from '/@/component/terminal/terminal-colors'; |
12 | | -
|
13 | | - interface Props { |
14 | | - object: V1Pod; |
15 | | - } |
16 | | - let { object }: Props = $props(); |
17 | | -
|
18 | | - // Logs has been initialized |
19 | | - let noLogs = $state(true); |
20 | | -
|
21 | | - let logsTerminal = $state<Terminal>(); |
| 2 | + import type { IDisposable, PodLogsOptions } from '@kubernetes-dashboard/channels'; |
| 3 | + import type { V1Pod } from '@kubernetes/client-node'; |
| 4 | + import { Button, EmptyScreen, Input } from '@podman-desktop/ui-svelte'; |
| 5 | + import type { Terminal } from '@xterm/xterm'; |
| 6 | + import { getContext, onDestroy, onMount, tick } from 'svelte'; |
| 7 | + import { SvelteMap } from 'svelte/reactivity'; |
| 8 | + import type { Unsubscriber } from 'svelte/store'; |
| 9 | + import NoLogIcon from '/@/component/icons/NoLogIcon.svelte'; |
| 10 | + import { ansi256Colours, colourizedANSIContainerName } from '/@/component/terminal/terminal-colors'; |
| 11 | + import TerminalWindow from '/@/component/terminal/TerminalWindow.svelte'; |
| 12 | + import { States } from '/@/state/states'; |
| 13 | + import { Streams } from '/@/stream/streams'; |
| 14 | +
|
| 15 | + interface Props { |
| 16 | + object: V1Pod; |
| 17 | + } |
| 18 | + let { object }: Props = $props(); |
| 19 | +
|
| 20 | + const states = getContext<States>(States); |
| 21 | + const editorSettingsState = states.stateEditorSettingsInfoUI; |
| 22 | +
|
| 23 | + // Logs has been initialized |
| 24 | + let noLogs = $state(true); |
| 25 | +
|
| 26 | + let logsTerminal = $state<Terminal>(); |
22 | 27 |
|
23 | 28 | // Log retrieval mode and options |
24 | 29 | let isStreaming = $state(true); |
25 | 30 | let previous = $state(false); |
26 | 31 | let tailLines = $state<number | undefined>(undefined); |
27 | 32 | let sinceSeconds = $state<number | undefined>(undefined); |
28 | 33 | let timestamps = $state(false); |
29 | | - let fontSize = $state(10); |
| 34 | + let fontSize = $state(editorSettingsState.data?.fontSize ?? 10); |
| 35 | +
|
| 36 | + // Update fontSize when editor settings change |
| 37 | + $effect(() => { |
| 38 | + if (editorSettingsState.data?.fontSize !== undefined) { |
| 39 | + fontSize = editorSettingsState.data.fontSize; |
| 40 | + } |
| 41 | + }); |
30 | 42 |
|
31 | 43 | let disposables: IDisposable[] = []; |
32 | 44 | const streams = getContext<Streams>(Streams); |
|
38 | 50 | async function loadLogs() { |
39 | 51 | logsTerminal?.clear(); |
40 | 52 | noLogs = true; |
41 | | - |
| 53 | +
|
42 | 54 | disposables.forEach(disposable => disposable.dispose()); |
43 | 55 | disposables = []; |
44 | 56 |
|
|
73 | 85 | } |
74 | 86 | : (_name: string, data: string, callback: (data: string) => void): void => { |
75 | 87 | callback(data); |
76 | | - }; |
77 | | - |
| 88 | + }; |
| 89 | +
|
78 | 90 | const options: PodLogsOptions = { |
79 | 91 | stream: isStreaming, |
80 | 92 | previous, |
81 | 93 | tailLines, |
82 | 94 | sinceSeconds, |
83 | 95 | timestamps, |
84 | 96 | }; |
85 | | - |
| 97 | +
|
86 | 98 | for (const containerName of object.spec?.containers.map(c => c.name) ?? []) { |
87 | 99 | disposables.push( |
88 | 100 | await streams.streamPodLogs.subscribe( |
|
105 | 117 | } |
106 | 118 | } |
107 | 119 |
|
| 120 | + let unsubscribers: Unsubscriber[] = []; |
| 121 | +
|
108 | 122 | onMount(async () => { |
| 123 | + unsubscribers.push(editorSettingsState.subscribe()); |
109 | 124 | await loadLogs(); |
110 | 125 | }); |
111 | 126 |
|
112 | 127 | onDestroy(() => { |
| 128 | + unsubscribers.forEach(unsubscriber => unsubscriber()); |
113 | 129 | disposables.forEach(disposable => disposable.dispose()); |
114 | 130 | disposables = []; |
115 | 131 | }); |
|
0 commit comments