Files
immich/web/src/lib/components/shared-components/side-bar/server-status.svelte

73 lines
2.5 KiB
Svelte
Raw Normal View History

2024-07-18 10:56:27 -05:00
<script lang="ts">
import ServerAboutModal from '$lib/components/shared-components/server-about-modal.svelte';
import { websocketStore } from '$lib/stores/websocket';
import { requestServerInfo } from '$lib/utils/auth';
import { onMount } from 'svelte';
import { t } from 'svelte-i18n';
2024-10-01 13:33:58 -04:00
import {
getAboutInfo,
getVersionHistory,
type ServerAboutResponseDto,
type ServerVersionHistoryResponseDto,
} from '@immich/sdk';
import Icon from '$lib/components/elements/icon.svelte';
import { mdiAlert } from '@mdi/js';
import { userInteraction } from '$lib/stores/user.svelte';
2024-07-18 10:56:27 -05:00
const { serverVersion, connected } = websocketStore;
let isOpen = $state(false);
let info: ServerAboutResponseDto | undefined = $state();
let versions: ServerVersionHistoryResponseDto[] = $state([]);
2024-07-18 10:56:27 -05:00
onMount(async () => {
if (userInteraction.aboutInfo && userInteraction.versions && $serverVersion) {
info = userInteraction.aboutInfo;
versions = userInteraction.versions;
return;
}
2024-07-18 10:56:27 -05:00
await requestServerInfo();
2024-10-01 13:33:58 -04:00
[info, versions] = await Promise.all([getAboutInfo(), getVersionHistory()]);
userInteraction.aboutInfo = info;
userInteraction.versions = versions;
2024-07-18 10:56:27 -05:00
});
let isMain = $derived(info?.sourceRef === 'main' && info.repository === 'immich-app/immich');
let version = $derived(
$serverVersion ? `v${$serverVersion.major}.${$serverVersion.minor}.${$serverVersion.patch}` : null,
);
2024-07-18 10:56:27 -05:00
</script>
{#if isOpen && info}
2024-10-01 13:33:58 -04:00
<ServerAboutModal onClose={() => (isOpen = false)} {info} {versions} />
2024-07-18 10:56:27 -05:00
{/if}
<div
2025-04-28 09:53:53 -04:00
class="text-sm flex md:flex ps-5 pe-1 place-items-center place-content-center justify-between min-w-52 overflow-hidden"
2024-07-18 10:56:27 -05:00
>
{#if $connected}
<div class="flex gap-2 place-items-center place-content-center">
<div class="w-[7px] h-[7px] bg-green-500 rounded-full"></div>
2024-07-18 10:56:27 -05:00
<p class="dark:text-immich-gray">{$t('server_online')}</p>
</div>
{:else}
<div class="flex gap-2 place-items-center place-content-center">
<div class="w-[7px] h-[7px] bg-red-500 rounded-full"></div>
2024-07-18 10:56:27 -05:00
<p class="text-red-500">{$t('server_offline')}</p>
</div>
{/if}
<div class="flex justify-between justify-items-center">
{#if $connected && version}
<button type="button" onclick={() => (isOpen = true)} class="dark:text-immich-gray flex gap-1">
{#if isMain}
<Icon path={mdiAlert} size="1.5em" color="#ffcc4d" /> {info?.sourceRef}
{:else}
{version}
{/if}
</button>
2024-07-18 10:56:27 -05:00
{:else}
<p class="text-red-500">{$t('unknown')}</p>
{/if}
</div>
</div>