fix(web): album inconsistencies (#31857)
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
import AlbumsTable from '$lib/components/album-page/AlbumsTable.svelte';
|
import AlbumsTable from '$lib/components/album-page/AlbumsTable.svelte';
|
||||||
import OnEvents from '$lib/components/OnEvents.svelte';
|
import OnEvents from '$lib/components/OnEvents.svelte';
|
||||||
import { authManager } from '$lib/managers/auth-manager.svelte';
|
import { authManager } from '$lib/managers/auth-manager.svelte';
|
||||||
import { handleDeleteAlbum } from '$lib/services/album.service';
|
import { handleDeleteAlbum, isAlbumOwner } from '$lib/services/album.service';
|
||||||
import {
|
import {
|
||||||
AlbumFilter,
|
AlbumFilter,
|
||||||
AlbumGroupBy,
|
AlbumGroupBy,
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
} from '$lib/stores/preferences.store';
|
} from '$lib/stores/preferences.store';
|
||||||
import { getSelectedAlbumGroupOption, sortAlbums, stringToSortOrder, type AlbumGroup } from '$lib/utils/album-utils';
|
import { getSelectedAlbumGroupOption, sortAlbums, stringToSortOrder, type AlbumGroup } from '$lib/utils/album-utils';
|
||||||
import { normalizeSearchString } from '$lib/utils/string-utils';
|
import { normalizeSearchString } from '$lib/utils/string-utils';
|
||||||
import { AlbumUserRole, type AlbumResponseDto, type SharedLinkResponseDto } from '@immich/sdk';
|
import { type AlbumResponseDto, type SharedLinkResponseDto } from '@immich/sdk';
|
||||||
import { groupBy } from 'lodash-es';
|
import { groupBy } from 'lodash-es';
|
||||||
import { onMount, type Snippet } from 'svelte';
|
import { onMount, type Snippet } from 'svelte';
|
||||||
import { t } from 'svelte-i18n';
|
import { t } from 'svelte-i18n';
|
||||||
@@ -123,10 +123,7 @@
|
|||||||
return sharedAlbums;
|
return sharedAlbums;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
const nonOwnedAlbums = sharedAlbums.filter(
|
const nonOwnedAlbums = sharedAlbums.filter((album) => !isAlbumOwner(album));
|
||||||
(album) =>
|
|
||||||
album.albumUsers.find(({ user: { id } }) => id === authManager.user.id)?.role !== AlbumUserRole.Owner,
|
|
||||||
);
|
|
||||||
return nonOwnedAlbums.length > 0 ? ownedAlbums.concat(nonOwnedAlbums) : ownedAlbums;
|
return nonOwnedAlbums.length > 0 ? ownedAlbums.concat(nonOwnedAlbums) : ownedAlbums;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,6 +46,11 @@ import { openFileUploadDialog } from '$lib/utils/file-uploader';
|
|||||||
import { handleError } from '$lib/utils/handle-error';
|
import { handleError } from '$lib/utils/handle-error';
|
||||||
import { getFormatter } from '$lib/utils/i18n';
|
import { getFormatter } from '$lib/utils/i18n';
|
||||||
|
|
||||||
|
export const isAlbumOwner = (album: AlbumResponseDto) => album.albumUsers[0].user.id === authManager.user.id;
|
||||||
|
export const isAlbumEditor = (album: AlbumResponseDto) =>
|
||||||
|
isAlbumOwner(album) ||
|
||||||
|
album.albumUsers.find(({ user: { id } }) => id === authManager.user.id)?.role === AlbumUserRole.Editor;
|
||||||
|
|
||||||
export const getAlbumsActions = ($t: MessageFormatter) => {
|
export const getAlbumsActions = ($t: MessageFormatter) => {
|
||||||
const Create: ActionItem = {
|
const Create: ActionItem = {
|
||||||
title: $t('create_album'),
|
title: $t('create_album'),
|
||||||
@@ -57,7 +62,8 @@ export const getAlbumsActions = ($t: MessageFormatter) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const getAlbumActions = ($t: MessageFormatter, album: AlbumResponseDto) => {
|
export const getAlbumActions = ($t: MessageFormatter, album: AlbumResponseDto) => {
|
||||||
const isOwned = album.albumUsers[0].user.id === authManager.user.id;
|
const isOwned = isAlbumOwner(album);
|
||||||
|
const isEditor = isAlbumEditor(album);
|
||||||
|
|
||||||
const AddUsers: ActionItem = {
|
const AddUsers: ActionItem = {
|
||||||
title: $t('invite_people'),
|
title: $t('invite_people'),
|
||||||
@@ -90,7 +96,7 @@ export const getAlbumActions = ($t: MessageFormatter, album: AlbumResponseDto) =
|
|||||||
const Edit: ActionItem = {
|
const Edit: ActionItem = {
|
||||||
title: $t('edit_album'),
|
title: $t('edit_album'),
|
||||||
icon: mdiRenameOutline,
|
icon: mdiRenameOutline,
|
||||||
$if: () => isOwned,
|
$if: () => isEditor,
|
||||||
onAction: () => modalManager.show(AlbumEditModal, { album }),
|
onAction: () => modalManager.show(AlbumEditModal, { album }),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+9
-5
@@ -35,7 +35,13 @@
|
|||||||
import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte';
|
import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte';
|
||||||
import type { TimelineAsset } from '$lib/managers/timeline-manager/types';
|
import type { TimelineAsset } from '$lib/managers/timeline-manager/types';
|
||||||
import { Route } from '$lib/route';
|
import { Route } from '$lib/route';
|
||||||
import { getAlbumActions, getAlbumAssetsActions, handleDeleteAlbum } from '$lib/services/album.service';
|
import {
|
||||||
|
getAlbumActions,
|
||||||
|
getAlbumAssetsActions,
|
||||||
|
handleDeleteAlbum,
|
||||||
|
isAlbumEditor,
|
||||||
|
isAlbumOwner,
|
||||||
|
} from '$lib/services/album.service';
|
||||||
import { getGlobalActions } from '$lib/services/app.service';
|
import { getGlobalActions } from '$lib/services/app.service';
|
||||||
import { getAssetBulkActions } from '$lib/services/asset.service';
|
import { getAssetBulkActions } from '$lib/services/asset.service';
|
||||||
import { SlideshowNavigation, SlideshowState, slideshowStore } from '$lib/stores/slideshow.store';
|
import { SlideshowNavigation, SlideshowState, slideshowStore } from '$lib/stores/slideshow.store';
|
||||||
@@ -235,16 +241,14 @@
|
|||||||
|
|
||||||
onDestroy(() => activityManager.reset());
|
onDestroy(() => activityManager.reset());
|
||||||
|
|
||||||
const isOwned = $derived(album.albumUsers[0].user.id === authManager.user.id);
|
const isOwned = $derived(isAlbumOwner(album));
|
||||||
|
|
||||||
let showActivityStatus = $derived(
|
let showActivityStatus = $derived(
|
||||||
album.albumUsers.length > 1 &&
|
album.albumUsers.length > 1 &&
|
||||||
!assetViewerManager.isViewing &&
|
!assetViewerManager.isViewing &&
|
||||||
(album.isActivityEnabled || activityManager.commentCount > 0),
|
(album.isActivityEnabled || activityManager.commentCount > 0),
|
||||||
);
|
);
|
||||||
const isEditor = $derived(
|
const isEditor = $derived(isAlbumEditor(album));
|
||||||
album.albumUsers.find(({ user: { id } }) => id === authManager.user.id)?.role === AlbumUserRole.Editor || isOwned,
|
|
||||||
);
|
|
||||||
|
|
||||||
const isSelectionMode = $derived(
|
const isSelectionMode = $derived(
|
||||||
viewMode === AlbumPageViewMode.SELECT_ASSETS ? true : viewMode === AlbumPageViewMode.SELECT_THUMBNAIL,
|
viewMode === AlbumPageViewMode.SELECT_ASSETS ? true : viewMode === AlbumPageViewMode.SELECT_THUMBNAIL,
|
||||||
|
|||||||
Reference in New Issue
Block a user