refactor(web): routes (#25313)

This commit is contained in:
Jason Rasmussen
2026-01-16 16:11:09 -05:00
committed by GitHub
parent 07675a2de4
commit 8196bd9bbd
87 changed files with 425 additions and 383 deletions
+2 -4
View File
@@ -1,7 +1,5 @@
import { AppRoute } from '$lib/constants';
import { Route } from '$lib/route';
import { redirect } from '@sveltejs/kit';
import type { PageLoad } from './$types';
export const load = (() => {
redirect(307, AppRoute.ADMIN_SETTINGS);
}) satisfies PageLoad;
export const load = (() => redirect(307, Route.systemSettings())) satisfies PageLoad;
+2 -2
View File
@@ -1,5 +1,5 @@
import { AppRoute } from '$lib/constants';
import { Route } from '$lib/route';
import { redirect } from '@sveltejs/kit';
import type { PageLoad } from './$types';
export const load = (() => redirect(307, AppRoute.ADMIN_QUEUES)) satisfies PageLoad;
export const load = (() => redirect(307, Route.queues())) satisfies PageLoad;
@@ -3,8 +3,8 @@
import AdminPageLayout from '$lib/components/layouts/AdminPageLayout.svelte';
import OnEvents from '$lib/components/OnEvents.svelte';
import EmptyPlaceholder from '$lib/components/shared-components/empty-placeholder.svelte';
import { AppRoute } from '$lib/constants';
import { getLibrariesActions, handleViewLibrary } from '$lib/services/library.service';
import { Route } from '$lib/route';
import { getLibrariesActions } from '$lib/services/library.service';
import { locale } from '$lib/stores/preferences.store';
import { getBytesWithUnit } from '$lib/utils/byte-units';
import { getLibrary, getLibraryStatistics, type LibraryResponseDto } from '@immich/sdk';
@@ -36,7 +36,7 @@
let owners = $state(data.owners);
const onLibraryCreate = async (library: LibraryResponseDto) => {
await goto(`${AppRoute.ADMIN_LIBRARIES}/${library.id}`);
await goto(Route.viewLibrary(library));
};
const onLibraryUpdate = async (library: LibraryResponseDto) => {
@@ -96,7 +96,7 @@
<TableCell class={classes.column4}>{videos.toLocaleString($locale)}</TableCell>
<TableCell class={classes.column5}>{diskUsage} {diskUsageUnit}</TableCell>
<TableCell class={classes.column6}>
<Button size="small" onclick={() => handleViewLibrary(library)}>{$t('view')}</Button>
<Button size="small" href={Route.viewLibrary(library)}>{$t('view')}</Button>
</TableCell>
</TableRow>
{/each}
@@ -106,7 +106,7 @@
<EmptyPlaceholder
fullWidth
text={$t('no_libraries_message')}
onClick={() => goto(AppRoute.ADMIN_LIBRARIES_NEW)}
onClick={() => goto(Route.newLibrary())}
class="mt-10 mx-auto"
/>
{/if}
@@ -1,6 +1,6 @@
<script lang="ts">
import { goto } from '$app/navigation';
import { AppRoute } from '$lib/constants';
import { Route } from '$lib/route';
import { handleCreateLibrary } from '$lib/services/library.service';
import { user } from '$lib/stores/user.store';
import { Field, FormModal, HelperText, Select } from '@immich/ui';
@@ -18,13 +18,13 @@
const users = $state(data.allUsers);
const onClose = async () => {
await goto(AppRoute.ADMIN_LIBRARIES);
await goto(Route.libraries());
};
const onSubmit = async () => {
const library = await handleCreateLibrary({ ownerId });
if (library) {
await goto(`${AppRoute.ADMIN_LIBRARIES}/${library.id}`, { replaceState: true });
await goto(Route.viewLibrary(library), { replaceState: true });
}
};
</script>
@@ -7,8 +7,8 @@
import ServerStatisticsCard from '$lib/components/server-statistics/ServerStatisticsCard.svelte';
import EmptyPlaceholder from '$lib/components/shared-components/empty-placeholder.svelte';
import TableButton from '$lib/components/TableButton.svelte';
import { AppRoute } from '$lib/constants';
import LibraryFolderAddModal from '$lib/modals/LibraryFolderAddModal.svelte';
import { Route } from '$lib/route';
import {
getLibraryActions,
getLibraryExclusionPatternActions,
@@ -42,7 +42,7 @@
const onLibraryDelete = async ({ id }: { id: string }) => {
if (id === library.id) {
await goto(AppRoute.ADMIN_LIBRARIES);
await goto(Route.libraries());
}
};
@@ -54,7 +54,7 @@
<CommandPaletteDefaultProvider name={$t('library')} actions={[Edit, Delete, AddFolder, AddExclusionPattern, Scan]} />
<AdminPageLayout
breadcrumbs={[{ title: $t('external_libraries'), href: AppRoute.ADMIN_LIBRARIES }, { title: library.name }]}
breadcrumbs={[{ title: $t('external_libraries'), href: Route.libraries() }, { title: library.name }]}
actions={[Scan, Edit, Delete]}
>
<Container size="large" center>
@@ -1,4 +1,4 @@
import { AppRoute } from '$lib/constants';
import { Route } from '$lib/route';
import { authenticate } from '$lib/utils/auth';
import { getFormatter } from '$lib/utils/i18n';
import { getLibrary, getLibraryStatistics, type LibraryResponseDto } from '@immich/sdk';
@@ -13,7 +13,7 @@ export const load = (async ({ params: { id }, url }) => {
try {
library = await getLibrary({ id });
} catch {
redirect(307, AppRoute.ADMIN_LIBRARIES);
redirect(307, Route.libraries());
}
const statistics = await getLibraryStatistics({ id });
@@ -1,6 +1,6 @@
<script lang="ts">
import { goto } from '$app/navigation';
import { AppRoute } from '$lib/constants';
import { Route } from '$lib/route';
import { handleUpdateLibrary } from '$lib/services/library.service';
import { Field, FormModal, Input } from '@immich/ui';
import { mdiRenameOutline } from '@mdi/js';
@@ -17,7 +17,7 @@
let name = $state(library.name);
const onClose = async () => {
await goto(`${AppRoute.ADMIN_LIBRARIES}/${library.id}`);
await goto(Route.viewLibrary(library));
};
const onSubmit = async () => {
@@ -2,8 +2,8 @@
import AdminPageLayout from '$lib/components/layouts/AdminPageLayout.svelte';
import OnEvents from '$lib/components/OnEvents.svelte';
import QueueGraph from '$lib/components/QueueGraph.svelte';
import { AppRoute } from '$lib/constants';
import { queueManager } from '$lib/managers/queue-manager.svelte';
import { Route } from '$lib/route';
import { asQueueItem, getQueueActions } from '$lib/services/queue.service';
import { type QueueResponseDto } from '@immich/sdk';
import {
@@ -46,7 +46,7 @@
<OnEvents {onQueueUpdate} />
<AdminPageLayout
breadcrumbs={[{ title: $t('admin.queues'), href: AppRoute.ADMIN_QUEUES }, { title: item.title }]}
breadcrumbs={[{ title: $t('admin.queues'), href: Route.queues() }, { title: item.title }]}
actions={[Pause, Resume, Empty, MenuItemType.Divider, RemoveFailedJobs]}
>
<div>
+2 -3
View File
@@ -1,5 +1,4 @@
import { AppRoute } from '$lib/constants';
import { fromQueueSlug } from '$lib/services/queue.service';
import { fromQueueSlug, Route } from '$lib/route';
import { authenticate, requestServerInfo } from '$lib/utils/auth';
import { getFormatter } from '$lib/utils/i18n';
import { getQueue, getQueueJobs, QueueJobStatus } from '@immich/sdk';
@@ -12,7 +11,7 @@ export const load = (async ({ params, url }) => {
const name = fromQueueSlug(params.name);
if (!name) {
redirect(307, AppRoute.ADMIN_QUEUES);
redirect(307, Route.queues());
}
const [queue, failedJobs] = await Promise.all([
@@ -1,5 +1,5 @@
import { AppRoute } from '$lib/constants';
import { Route } from '$lib/route';
import { redirect } from '@sveltejs/kit';
import type { PageLoad } from './$types';
export const load = (() => redirect(307, AppRoute.ADMIN_USERS)) satisfies PageLoad;
export const load = (() => redirect(307, Route.users())) satisfies PageLoad;
@@ -1,7 +1,7 @@
<script lang="ts">
import { goto } from '$app/navigation';
import { AppRoute } from '$lib/constants';
import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte';
import { Route } from '$lib/route';
import { handleCreateUserAdmin } from '$lib/services/user-admin.service';
import { userInteraction } from '$lib/stores/user.svelte';
import { ByteUnit, convertToBytes } from '$lib/utils/byte-units';
@@ -31,7 +31,7 @@
const valid = $derived(!passwordMismatch && !isCreatingUser);
const onClose = async () => {
await goto(AppRoute.ADMIN_USERS);
await goto(Route.users());
};
const onSubmit = async (event: Event) => {
@@ -54,7 +54,7 @@
});
if (user) {
await goto(`${AppRoute.ADMIN_USERS}/${user.id}`, { replaceState: true });
await goto(Route.viewUser(user), { replaceState: true });
}
isCreatingUser = false;
@@ -7,7 +7,7 @@
import UserAvatar from '$lib/components/shared-components/user-avatar.svelte';
import DeviceCard from '$lib/components/user-settings-page/device-card.svelte';
import FeatureSetting from '$lib/components/users/FeatureSetting.svelte';
import { AppRoute } from '$lib/constants';
import { Route } from '$lib/route';
import { getUserAdminActions } from '$lib/services/user-admin.service';
import { locale } from '$lib/stores/preferences.store';
import { createDateFormatter, findLocale } from '$lib/utils';
@@ -87,7 +87,7 @@
const onUserAdminDeleted = async ({ id }: { id: string }) => {
if (id === user.id) {
await goto(AppRoute.ADMIN_USERS);
await goto(Route.users());
}
};
</script>
@@ -102,7 +102,7 @@
<CommandPaletteDefaultProvider name={$t('user')} actions={[ResetPassword, ResetPinCode, Update, Delete, Restore]} />
<AdminPageLayout
breadcrumbs={[{ title: $t('admin.user_management'), href: AppRoute.ADMIN_USERS }, { title: user.name }]}
breadcrumbs={[{ title: $t('admin.user_management'), href: Route.users() }, { title: user.name }]}
actions={[ResetPassword, ResetPinCode, Update, Restore, MenuItemType.Divider, Delete]}
>
<div>
+4 -3
View File
@@ -1,4 +1,5 @@
import { AppRoute, UUID_REGEX } from '$lib/constants';
import { UUID_REGEX } from '$lib/constants';
import { Route } from '$lib/route';
import { authenticate, requestServerInfo } from '$lib/utils/auth';
import { getFormatter } from '$lib/utils/i18n';
import { getUserPreferencesAdmin, getUserSessionsAdmin, getUserStatisticsAdmin, searchUsersAdmin } from '@immich/sdk';
@@ -10,12 +11,12 @@ export const load = (async ({ params, url }) => {
await requestServerInfo();
if (!UUID_REGEX.test(params.id)) {
redirect(307, AppRoute.ADMIN_USERS);
redirect(307, Route.users());
}
const [user] = await searchUsersAdmin({ id: params.id, withDeleted: true }).catch(() => []);
if (!user) {
redirect(307, AppRoute.ADMIN_USERS);
redirect(307, Route.users());
}
const [userPreferences, userStatistics, userSessions] = await Promise.all([
@@ -1,6 +1,6 @@
<script lang="ts">
import { goto } from '$app/navigation';
import { AppRoute } from '$lib/constants';
import { Route } from '$lib/route';
import { handleUpdateUserAdmin } from '$lib/services/user-admin.service';
import { user as authUser } from '$lib/stores/user.store';
import { userInteraction } from '$lib/stores/user.svelte';
@@ -37,7 +37,7 @@
);
const onClose = async () => {
await goto(`${AppRoute.ADMIN_USERS}/${user.id}`);
await goto(Route.viewUser(user));
};
const onSubmit = async (event: Event) => {
@@ -79,7 +79,7 @@
<Text size="small" class="mt-2" color="muted">
{$t('admin.note_apply_storage_label_previous_assets')}
<Link href={AppRoute.ADMIN_QUEUES}>
<Link href={Route.queues()}>
{$t('admin.storage_template_migration_job')}
</Link>
</Text>