refactor: page container (#25038)

This commit is contained in:
Jason Rasmussen 2026-01-05 10:44:29 -05:00 committed by GitHub
parent eb718145c0
commit 57fca378bc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 32 additions and 36 deletions

View file

@ -3,7 +3,7 @@
import { locale } from '$lib/stores/preferences.store'; import { locale } from '$lib/stores/preferences.store';
import { getByteUnitString, getBytesWithUnit } from '$lib/utils/byte-units'; import { getByteUnitString, getBytesWithUnit } from '$lib/utils/byte-units';
import type { ServerStatsResponseDto } from '@immich/sdk'; import type { ServerStatsResponseDto } from '@immich/sdk';
import { Icon } from '@immich/ui'; import { Heading, Icon } from '@immich/ui';
import { mdiCameraIris, mdiChartPie, mdiPlayCircle } from '@mdi/js'; import { mdiCameraIris, mdiChartPie, mdiPlayCircle } from '@mdi/js';
import { t } from 'svelte-i18n'; import { t } from 'svelte-i18n';
@ -25,15 +25,16 @@
let [statsUsage, statsUsageUnit] = $derived(getBytesWithUnit(stats.usage, stats.usage > TiB ? 2 : 0)); let [statsUsage, statsUsageUnit] = $derived(getBytesWithUnit(stats.usage, stats.usage > TiB ? 2 : 0));
</script> </script>
<div class="flex flex-col gap-5"> <div class="flex flex-col gap-5 my-4">
<div> <div>
<p class="text-sm dark:text-immich-dark-fg uppercase">{$t('total_usage')}</p> <Heading size="tiny" class="mb-2">{$t('total_usage')}</Heading>
<div class="mt-5 hidden justify-between lg:flex gap-4"> <div class="hidden justify-between lg:flex gap-4">
<StatsCard icon={mdiCameraIris} title={$t('photos')} value={stats.photos} /> <StatsCard icon={mdiCameraIris} title={$t('photos')} value={stats.photos} />
<StatsCard icon={mdiPlayCircle} title={$t('videos')} value={stats.videos} /> <StatsCard icon={mdiPlayCircle} title={$t('videos')} value={stats.videos} />
<StatsCard icon={mdiChartPie} title={$t('storage')} value={statsUsage} unit={statsUsageUnit} /> <StatsCard icon={mdiChartPie} title={$t('storage')} value={statsUsage} unit={statsUsageUnit} />
</div> </div>
<div class="mt-5 flex lg:hidden"> <div class="mt-5 flex lg:hidden">
<div class="flex flex-col justify-between rounded-3xl bg-subtle p-5 dark:bg-immich-dark-gray"> <div class="flex flex-col justify-between rounded-3xl bg-subtle p-5 dark:bg-immich-dark-gray">
<div class="flex flex-wrap gap-x-12"> <div class="flex flex-wrap gap-x-12">
@ -78,7 +79,7 @@
</div> </div>
<div> <div>
<p class="text-sm dark:text-immich-dark-fg uppercase">{$t('user_usage_detail')}</p> <Heading size="tiny" class="mb-2">{$t('user_usage_detail')}</Heading>
<table class="mt-5 w-full text-start"> <table class="mt-5 w-full text-start">
<thead <thead
class="mb-4 flex h-12 w-full rounded-md border bg-gray-50 text-primary dark:border-immich-dark-gray dark:bg-immich-dark-gray" class="mb-4 flex h-12 w-full rounded-md border bg-gray-50 text-primary dark:border-immich-dark-gray dark:bg-immich-dark-gray"

View file

@ -5,7 +5,7 @@
import { queueManager } from '$lib/managers/queue-manager.svelte'; import { queueManager } from '$lib/managers/queue-manager.svelte';
import { getQueuesActions } from '$lib/services/queue.service'; import { getQueuesActions } from '$lib/services/queue.service';
import { type QueueResponseDto } from '@immich/sdk'; import { type QueueResponseDto } from '@immich/sdk';
import { CommandPaletteContext, type ActionItem } from '@immich/ui'; import { CommandPaletteContext, Container, type ActionItem } from '@immich/ui';
import { onMount } from 'svelte'; import { onMount } from 'svelte';
import { t } from 'svelte-i18n'; import { t } from 'svelte-i18n';
import type { PageData } from './$types'; import type { PageData } from './$types';
@ -38,11 +38,9 @@
<OnEvents {onQueueUpdate} /> <OnEvents {onQueueUpdate} />
<AdminPageLayout breadcrumbs={[{ title: data.meta.title }]} actions={[ResumePaused, CreateJob, ManageConcurrency]}> <AdminPageLayout breadcrumbs={[{ title: data.meta.title }]} actions={[ResumePaused, CreateJob, ManageConcurrency]}>
<section id="setting-content" class="flex place-content-center sm:mx-4"> <Container size="medium" center>
<section class="w-full pb-28 sm:w-5/6 md:w-212.5"> {#if queues}
{#if queues} <JobsPanel {queues} />
<JobsPanel {queues} /> {/if}
{/if} </Container>
</section>
</section>
</AdminPageLayout> </AdminPageLayout>

View file

@ -2,6 +2,7 @@
import AdminPageLayout from '$lib/components/layouts/AdminPageLayout.svelte'; import AdminPageLayout from '$lib/components/layouts/AdminPageLayout.svelte';
import ServerStatisticsPanel from '$lib/components/server-statistics/ServerStatisticsPanel.svelte'; import ServerStatisticsPanel from '$lib/components/server-statistics/ServerStatisticsPanel.svelte';
import { getServerStatistics } from '@immich/sdk'; import { getServerStatistics } from '@immich/sdk';
import { Container } from '@immich/ui';
import { onMount } from 'svelte'; import { onMount } from 'svelte';
import type { PageData } from './$types'; import type { PageData } from './$types';
@ -25,9 +26,7 @@
</script> </script>
<AdminPageLayout breadcrumbs={[{ title: data.meta.title }]}> <AdminPageLayout breadcrumbs={[{ title: data.meta.title }]}>
<section id="setting-content" class="flex place-content-center sm:mx-4"> <Container size="large" center>
<section class="w-full pb-28 sm:w-5/6 md:w-212.5"> <ServerStatisticsPanel {stats} />
<ServerStatisticsPanel {stats} /> </Container>
</section>
</section>
</AdminPageLayout> </AdminPageLayout>

View file

@ -26,7 +26,7 @@
import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte';
import { systemConfigManager } from '$lib/managers/system-config-manager.svelte'; import { systemConfigManager } from '$lib/managers/system-config-manager.svelte';
import { getSystemConfigActions } from '$lib/services/system-config.service'; import { getSystemConfigActions } from '$lib/services/system-config.service';
import { Alert, CommandPaletteContext } from '@immich/ui'; import { Alert, CommandPaletteContext, Container } from '@immich/ui';
import { import {
mdiAccountOutline, mdiAccountOutline,
mdiBackupRestore, mdiBackupRestore,
@ -217,21 +217,19 @@
<CommandPaletteContext commands={[CopyToClipboard, Upload, Download]} /> <CommandPaletteContext commands={[CopyToClipboard, Upload, Download]} />
<AdminPageLayout breadcrumbs={[{ title: data.meta.title }]} actions={[CopyToClipboard, Download, Upload]}> <AdminPageLayout breadcrumbs={[{ title: data.meta.title }]} actions={[CopyToClipboard, Download, Upload]}>
<section id="setting-content" class="flex place-content-center sm:mx-4 mt-4"> <Container size="large" center>
<section class="w-full pb-28 sm:w-5/6 md:w-4xl"> {#if featureFlagsManager.value.configFile}
{#if featureFlagsManager.value.configFile} <Alert color="warning" class="text-dark my-4" title={$t('admin.config_set_by_file')} />
<Alert color="warning" class="text-dark my-4" title={$t('admin.config_set_by_file')} /> {/if}
{/if} <div>
<div> <SearchBar placeholder={$t('search_settings')} bind:name={searchQuery} showLoadingSpinner={false} />
<SearchBar placeholder={$t('search_settings')} bind:name={searchQuery} showLoadingSpinner={false} /> </div>
</div> <SettingAccordionState queryParam={QueryParameter.IS_OPEN}>
<SettingAccordionState queryParam={QueryParameter.IS_OPEN}> {#each filteredSettings as { component: Component, title, subtitle, key, icon } (key)}
{#each filteredSettings as { component: Component, title, subtitle, key, icon } (key)} <SettingAccordion {title} {subtitle} {key} {icon}>
<SettingAccordion {title} {subtitle} {key} {icon}> <Component />
<Component /> </SettingAccordion>
</SettingAccordion> {/each}
{/each} </SettingAccordionState>
</SettingAccordionState> </Container>
</section>
</section>
</AdminPageLayout> </AdminPageLayout>