feat: primary notifications (#26988)

This commit is contained in:
Jason Rasmussen 2026-03-17 17:54:11 -04:00 committed by GitHub
parent 0519833d75
commit 48e6e17829
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
52 changed files with 98 additions and 98 deletions

View File

@ -112,7 +112,7 @@
switch (dto.command) {
case QueueCommand.Empty: {
toastManager.success($t('admin.cleared_jobs', { values: { job: item.title } }));
toastManager.primary($t('admin.cleared_jobs', { values: { job: item.title } }));
break;
}
}

View File

@ -55,7 +55,7 @@
try {
await unlinkAllOAuthAccountsAdmin();
toastManager.success();
toastManager.primary();
} catch (error) {
handleError(error, $t('errors.something_went_wrong'));
}

View File

@ -45,7 +45,7 @@
},
});
toastManager.success($t('admin.notification_email_test_email_sent', { values: { email: $user.email } }));
toastManager.primary($t('admin.notification_email_test_email_sent', { values: { email: $user.email } }));
if (!disabled) {
await handleSystemConfigSave({ notifications: configToEdit.notifications });

View File

@ -40,7 +40,7 @@
preAction({ type: AssetAction.DELETE, asset: timelineAsset });
await deleteAssets({ assetBulkDeleteDto: { ids: [asset.id], force: true } });
onAction({ type: AssetAction.DELETE, asset: timelineAsset });
toastManager.success($t('permanently_deleted_asset'));
toastManager.primary($t('permanently_deleted_asset'));
} catch (error) {
handleError(error, $t('errors.unable_to_delete_asset'));
}

View File

@ -21,7 +21,7 @@
await restoreAssets({ bulkIdsDto: { ids: [asset.id] } });
asset.isTrashed = false;
onAction({ type: AssetAction.RESTORE, asset: toTimelineAsset(asset) });
toastManager.success($t('restored_asset'));
toastManager.primary($t('restored_asset'));
} catch (error) {
handleError(error, $t('errors.unable_to_restore_assets'));
}

View File

@ -23,7 +23,7 @@
},
});
eventManager.emit('AlbumUpdate', response);
toastManager.success($t('album_cover_updated'));
toastManager.primary($t('album_cover_updated'));
} catch (error) {
handleError(error, $t('errors.unable_to_update_album_cover'));
}

View File

@ -31,7 +31,7 @@
person,
});
toastManager.success($t('feature_photo_updated'));
toastManager.primary($t('feature_photo_updated'));
} catch (error) {
handleError(error, $t('errors.unable_to_set_feature_photo'));
}

View File

@ -74,7 +74,7 @@
[ReactionType.Comment]: $t('comment_deleted'),
[ReactionType.Like]: $t('like_deleted'),
};
toastManager.success(deleteMessages[reaction.type]);
toastManager.primary(deleteMessages[reaction.type]);
} catch (error) {
handleError(error, $t('errors.unable_to_remove_reaction'));
}

View File

@ -22,7 +22,7 @@
}
try {
await updateAsset({ id: asset.id, updateAssetDto: { description } });
toastManager.success($t('asset_description_updated'));
toastManager.primary($t('asset_description_updated'));
} catch (error) {
handleError(error, $t('cannot_update_the_description'));
}

View File

@ -67,7 +67,7 @@
if (failCount > 0) {
toastManager.warning($t('errors.unable_to_change_visibility', { values: { count: failCount } }));
}
toastManager.success($t('visibility_changed', { values: { count: successCount } }));
toastManager.primary($t('visibility_changed', { values: { count: successCount } }));
}
for (const person of people) {

View File

@ -72,7 +72,7 @@
});
const mergedPerson = await getPerson({ id: person.id });
const count = results.filter(({ success }) => success).length;
toastManager.success($t('merged_people_count', { values: { count } }));
toastManager.primary($t('merged_people_count', { values: { count } }));
onMerge(mergedPerson);
} catch (error) {
handleError(error, $t('cannot_merge_people'));

View File

@ -1,6 +1,7 @@
<script lang="ts">
import OnEvents from '$lib/components/OnEvents.svelte';
import { timeBeforeShowLoadingSpinner } from '$lib/constants';
import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte';
import { eventManager } from '$lib/managers/event-manager.svelte';
import { assetViewingStore } from '$lib/stores/asset-viewing.store';
import { boundingBoxesArray } from '$lib/stores/people.store';
@ -25,7 +26,6 @@
import { fly } from 'svelte/transition';
import ImageThumbnail from '../assets/thumbnail/image-thumbnail.svelte';
import AssignFaceSidePanel from './assign-face-side-panel.svelte';
import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte';
interface Props {
assetId: string;
@ -126,7 +126,7 @@
}
}
toastManager.success($t('people_edits_count', { values: { count: numberOfChanges } }));
toastManager.primary($t('people_edits_count', { values: { count: numberOfChanges } }));
} catch (error) {
handleError(error, $t('errors.cant_apply_changes'));
}

View File

@ -71,7 +71,7 @@
disableButtons = true;
const data = await createPerson({ personCreateDto: {} });
await reassignFaces({ id: data.id, assetFaceUpdateDto: { data: selectedPeople } });
toastManager.success($t('reassigned_assets_to_new_person', { values: { count: assetIds.length } }));
toastManager.primary($t('reassigned_assets_to_new_person', { values: { count: assetIds.length } }));
} catch (error) {
handleError(error, $t('errors.unable_to_reassign_assets_new_person'));
} finally {
@ -88,7 +88,7 @@
disableButtons = true;
if (selectedPerson) {
await reassignFaces({ id: selectedPerson.id, assetFaceUpdateDto: { data: selectedPeople } });
toastManager.success(
toastManager.primary(
$t('reassigned_assets_to_existing_person', {
values: { count: assetIds.length, name: selectedPerson.name || null },
}),

View File

@ -206,7 +206,7 @@
}
await memoryStore.deleteMemory(current.memory.id);
toastManager.success($t('removed_memory'));
toastManager.primary($t('removed_memory'));
init(page);
};
@ -217,7 +217,7 @@
const newSavedState = !current.memory.isSaved;
await memoryStore.updateMemorySaved(current.memory.id, newSavedState);
toastManager.success(newSavedState ? $t('added_to_favorites') : $t('removed_from_favorites'));
toastManager.primary(newSavedState ? $t('added_to_favorites') : $t('removed_from_favorites'));
init(page);
};

View File

@ -52,7 +52,7 @@
? openFileUploadDialog()
: fileUploadHandler({ files }));
toastManager.success();
toastManager.primary();
} catch (error) {
handleError(error, $t('errors.unable_to_add_assets_to_shared_link'));
}

View File

@ -30,7 +30,7 @@
if ($stats.errors > 0) {
toastManager.danger($t('upload_errors', { values: { count: $stats.errors } }));
} else if ($stats.success > 0) {
toastManager.success($t('upload_success'));
toastManager.primary($t('upload_success'));
}
if ($stats.duplicates > 0) {
toastManager.warning($t('upload_skipped_duplicates', { values: { count: $stats.duplicates } }));

View File

@ -42,7 +42,7 @@
onFavorite?.(ids, isFavorite);
toastManager.success(
toastManager.primary(
isFavorite
? $t('added_to_favorites_count', { values: { count: ids.length } })
: $t('removed_from_favorites_count', { values: { count: ids.length } }),

View File

@ -38,7 +38,7 @@
onRemove?.(ids);
const count = results.filter(({ success }) => success).length;
toastManager.success($t('assets_removed_count', { values: { count } }));
toastManager.primary($t('assets_removed_count', { values: { count } }));
clearSelect();
} catch (error) {

View File

@ -24,7 +24,7 @@
const ids = [...getAssets()].map((a) => a.id);
await restoreAssets({ bulkIdsDto: { ids } });
onRestore?.(ids);
toastManager.success($t('assets_restored_count', { values: { count: ids.length } }));
toastManager.primary($t('assets_restored_count', { values: { count: ids.length } }));
clearSelect();
} catch (error) {
handleError(error, $t('errors.unable_to_restore_assets'));

View File

@ -22,7 +22,7 @@
try {
await changePinCode({ pinCodeChangeDto: { pinCode: currentPinCode, newPinCode } });
resetForm();
toastManager.success($t('pin_code_changed_successfully'));
toastManager.primary($t('pin_code_changed_successfully'));
} catch (error) {
handleError(error, $t('unable_to_change_pin_code'));
} finally {

View File

@ -26,7 +26,7 @@
isLoading = true;
try {
await setupPinCode({ pinCodeSetupDto: { pinCode: newPinCode } });
toastManager.success($t('pin_code_setup_successfully'));
toastManager.primary($t('pin_code_setup_successfully'));
onCreated?.(newPinCode);
resetForm();
} catch (error) {

View File

@ -25,7 +25,7 @@
try {
await deleteSession({ id: device.id });
toastManager.success($t('logged_out_device'));
toastManager.primary($t('logged_out_device'));
} catch (error) {
handleError(error, $t('errors.unable_to_log_out_device'));
} finally {
@ -41,7 +41,7 @@
try {
await deleteAllSessions();
toastManager.success($t('logged_out_all_devices'));
toastManager.primary($t('logged_out_all_devices'));
} catch (error) {
handleError(error, $t('errors.unable_to_log_out_all_devices'));
} finally {

View File

@ -25,7 +25,7 @@
});
$preferences = newPreferences;
toastManager.success($t('saved_settings'));
toastManager.primary($t('saved_settings'));
} catch (error) {
handleError(error, $t('errors.unable_to_update_settings'));
}

View File

@ -53,7 +53,7 @@
$preferences = { ...data };
toastManager.success($t('saved_settings'));
toastManager.primary($t('saved_settings'));
} catch (error) {
handleError(error, $t('errors.unable_to_update_settings'));
}

View File

@ -26,7 +26,7 @@
$preferences.emailNotifications.albumInvite = data.emailNotifications.albumInvite;
$preferences.emailNotifications.albumUpdate = data.emailNotifications.albumUpdate;
toastManager.success($t('saved_settings'));
toastManager.primary($t('saved_settings'));
} catch (error) {
handleError(error, $t('errors.unable_to_update_settings'));
}

View File

@ -22,7 +22,7 @@
try {
loading = true;
user = await oauth.link(globalThis.location);
toastManager.success($t('linked_oauth_account'));
toastManager.primary($t('linked_oauth_account'));
} catch (error) {
handleError(error, $t('errors.unable_to_link_oauth_account'));
} finally {
@ -36,7 +36,7 @@
const handleUnlink = async () => {
try {
user = await oauth.unlink();
toastManager.success($t('unlinked_oauth_account'));
toastManager.primary($t('unlinked_oauth_account'));
} catch (error) {
handleError(error, $t('errors.unable_to_unlink_account'));
}

View File

@ -23,7 +23,7 @@
Object.assign(editedUser, data);
$user = data;
toastManager.success($t('saved_profile'));
toastManager.primary($t('saved_profile'));
} catch (error) {
handleError(error, $t('errors.unable_to_save_profile'));
}

View File

@ -142,7 +142,7 @@ export class EditManager {
eventManager.emit('AssetEditsApplied', assetId);
toastManager.success(t('editor_edits_applied_success'));
toastManager.primary(t('editor_edits_applied_success'));
this.hasAppliedEdits = true;
return true;

View File

@ -20,7 +20,7 @@
await deleteProfileImage();
}
toastManager.success($t('saved_profile'));
toastManager.primary($t('saved_profile'));
$user = await updateMyUser({ userUpdateMeDto: { avatarColor: color } });
onClose();

View File

@ -38,7 +38,7 @@
id: personToBeMergedInto.id,
mergePersonDto: { ids: [personToMerge.id] },
});
toastManager.success($t('merge_people_successfully'));
toastManager.primary($t('merge_people_successfully'));
onClose([personToMerge, personToBeMergedInto]);
} catch (error) {
handleError(error, $t('errors.unable_to_save_name'));

View File

@ -69,7 +69,7 @@
}
const file = new File([blob], 'profile-picture.png', { type: 'image/png' });
const { profileImagePath, profileChangedAt } = await createProfileImage({ createProfileImageDto: { file } });
toastManager.success($t('profile_picture_set'));
toastManager.primary($t('profile_picture_set'));
$user.profileImagePath = profileImagePath;
$user.profileChangedAt = profileChangedAt;

View File

@ -163,7 +163,7 @@ const notifyAddToAlbums = (
} else if (results.error) {
toastManager.warning($t('assets_cannot_be_added_to_albums', { values: { count: assetIds.length } }));
} else {
toastManager.success(
toastManager.primary(
$t('assets_added_to_albums_count', {
values: { albumTotal: albumIds.length, assetTotal: assetIds.length },
}),
@ -269,7 +269,7 @@ export const handleDeleteAlbum = async (album: AlbumResponseDto, options?: { pro
await deleteAlbum({ id: album.id });
eventManager.emit('AlbumDelete', album);
if (notify) {
toastManager.success();
toastManager.primary();
}
return true;
} catch (error) {

View File

@ -80,7 +80,7 @@ export const handleUpdateApiKey = async (apiKey: { id: string }, dto: ApiKeyUpda
try {
const response = await updateApiKey({ id: apiKey.id, apiKeyUpdateDto: dto });
eventManager.emit('ApiKeyUpdate', response);
toastManager.success($t('saved_api_key'));
toastManager.primary($t('saved_api_key'));
return true;
} catch (error) {
handleError(error, $t('errors.unable_to_save_api_key'));
@ -98,7 +98,7 @@ export const handleDeleteApiKey = async (apiKey: ApiKeyResponseDto) => {
try {
await deleteApiKey({ id: apiKey.id });
eventManager.emit('ApiKeyDelete', apiKey);
toastManager.success($t('removed_api_key', { values: { name: apiKey.name } }));
toastManager.primary($t('removed_api_key', { values: { name: apiKey.name } }));
} catch (error) {
handleError(error, $t('errors.unable_to_remove_api_key'));
}

View File

@ -11,7 +11,7 @@ import { vitest } from 'vitest';
vitest.mock('@immich/ui', () => ({
toastManager: {
success: vitest.fn(),
primary: vitest.fn(),
},
}));
@ -67,7 +67,7 @@ describe('AssetService', () => {
const asset = assetFactory.build({ originalFileName: 'asset.heic' });
await handleDownloadAsset(asset, { edited: false });
expect($t).toHaveBeenNthCalledWith(1, 'downloading_asset_filename', { values: { filename: 'asset.heic' } });
expect(toastManager.success).toHaveBeenCalledWith('formatter');
expect(toastManager.primary).toHaveBeenCalledWith('formatter');
});
it('should use the motion asset originalFileName when showing toasts', async () => {
@ -79,7 +79,7 @@ describe('AssetService', () => {
await handleDownloadAsset(asset, { edited: false });
expect($t).toHaveBeenNthCalledWith(1, 'downloading_asset_filename', { values: { filename: 'asset.heic' } });
expect($t).toHaveBeenNthCalledWith(2, 'downloading_asset_filename', { values: { filename: 'asset.mov' } });
expect(toastManager.success).toHaveBeenCalledWith('formatter');
expect(toastManager.primary).toHaveBeenCalledWith('formatter');
});
});
});

View File

@ -334,7 +334,7 @@ export const handleDownloadAsset = async (asset: AssetResponseDto, { edited }: {
}
try {
toastManager.success($t('downloading_asset_filename', { values: { filename } }));
toastManager.primary($t('downloading_asset_filename', { values: { filename } }));
downloadUrl(
getBaseUrl() +
`/assets/${id}/original` +
@ -352,7 +352,7 @@ const handleFavorite = async (asset: AssetResponseDto) => {
try {
const response = await updateAsset({ id: asset.id, updateAssetDto: { isFavorite: true } });
toastManager.success($t('added_to_favorites'));
toastManager.primary($t('added_to_favorites'));
eventManager.emit('AssetUpdate', response);
} catch (error) {
handleError(error, $t('errors.unable_to_add_remove_favorites', { values: { favorite: asset.isFavorite } }));
@ -364,7 +364,7 @@ const handleUnfavorite = async (asset: AssetResponseDto) => {
try {
const response = await updateAsset({ id: asset.id, updateAssetDto: { isFavorite: false } });
toastManager.success($t('removed_from_favorites'));
toastManager.primary($t('removed_from_favorites'));
eventManager.emit('AssetUpdate', response);
} catch (error) {
handleError(error, $t('errors.unable_to_add_remove_favorites', { values: { favorite: asset.isFavorite } }));
@ -387,7 +387,7 @@ const handleRunAssetJob = async (dto: AssetJobsDto) => {
try {
await runAssetJobs({ assetJobsDto: dto });
toastManager.success(getAssetJobMessage($t, dto.name));
toastManager.primary(getAssetJobMessage($t, dto.name));
} catch (error) {
handleError(error, $t('errors.unable_to_submit_job'));
}

View File

@ -8,7 +8,7 @@ export const handleCreateJob = async (dto: JobCreateDto) => {
try {
await createJob({ jobCreateDto: dto });
toastManager.success($t('admin.job_created'));
toastManager.primary($t('admin.job_created'));
return true;
} catch (error) {
handleError(error, $t('errors.unable_to_submit_job'));

View File

@ -161,7 +161,7 @@ export const handleCreateLibrary = async (dto: CreateLibraryDto) => {
try {
const library = await createLibrary({ createLibraryDto: dto });
eventManager.emit('LibraryCreate', library);
toastManager.success($t('admin.library_created', { values: { library: library.name } }));
toastManager.primary($t('admin.library_created', { values: { library: library.name } }));
return library;
} catch (error) {
handleError(error, $t('errors.unable_to_create_library'));
@ -174,7 +174,7 @@ export const handleUpdateLibrary = async (library: LibraryResponseDto, dto: Upda
try {
const updatedLibrary = await updateLibrary({ id: library.id, updateLibraryDto: dto });
eventManager.emit('LibraryUpdate', updatedLibrary);
toastManager.success($t('admin.library_updated'));
toastManager.primary($t('admin.library_updated'));
return true;
} catch (error) {
handleError(error, $t('errors.unable_to_update_library'));
@ -205,7 +205,7 @@ const handleDeleteLibrary = async (library: LibraryResponseDto) => {
try {
await deleteLibrary({ id: library.id });
eventManager.emit('LibraryDelete', { id: library.id });
toastManager.success($t('admin.library_deleted'));
toastManager.primary($t('admin.library_deleted'));
} catch (error) {
handleError(error, $t('errors.unable_to_remove_library'));
}
@ -225,7 +225,7 @@ export const handleAddLibraryFolder = async (library: LibraryResponseDto, folder
updateLibraryDto: { importPaths: [...library.importPaths, folder] },
});
eventManager.emit('LibraryUpdate', updatedLibrary);
toastManager.success($t('admin.library_updated'));
toastManager.primary($t('admin.library_updated'));
} catch (error) {
handleError(error, $t('errors.unable_to_update_library'));
return false;
@ -246,7 +246,7 @@ export const handleEditLibraryFolder = async (library: LibraryResponseDto, oldVa
try {
const updatedLibrary = await updateLibrary({ id: library.id, updateLibraryDto: { importPaths } });
eventManager.emit('LibraryUpdate', updatedLibrary);
toastManager.success($t('admin.library_updated'));
toastManager.primary($t('admin.library_updated'));
} catch (error) {
handleError(error, $t('errors.unable_to_update_library'));
return false;
@ -273,7 +273,7 @@ const handleDeleteLibraryFolder = async (library: LibraryResponseDto, folder: st
updateLibraryDto: { importPaths: library.importPaths.filter((path) => path !== folder) },
});
eventManager.emit('LibraryUpdate', updatedLibrary);
toastManager.success($t('admin.library_updated'));
toastManager.primary($t('admin.library_updated'));
} catch (error) {
handleError(error, $t('errors.unable_to_update_library'));
}
@ -293,7 +293,7 @@ export const handleAddLibraryExclusionPattern = async (library: LibraryResponseD
updateLibraryDto: { exclusionPatterns: [...library.exclusionPatterns, exclusionPattern] },
});
eventManager.emit('LibraryUpdate', updatedLibrary);
toastManager.success($t('admin.library_updated'));
toastManager.primary($t('admin.library_updated'));
} catch (error) {
handleError(error, $t('errors.unable_to_update_library'));
return false;
@ -314,7 +314,7 @@ export const handleEditExclusionPattern = async (library: LibraryResponseDto, ol
try {
const updatedLibrary = await updateLibrary({ id: library.id, updateLibraryDto: { exclusionPatterns } });
eventManager.emit('LibraryUpdate', updatedLibrary);
toastManager.success($t('admin.library_updated'));
toastManager.primary($t('admin.library_updated'));
} catch (error) {
handleError(error, $t('errors.unable_to_update_library'));
return false;
@ -339,7 +339,7 @@ const handleDeleteExclusionPattern = async (library: LibraryResponseDto, exclusi
},
});
eventManager.emit('LibraryUpdate', updatedLibrary);
toastManager.success($t('admin.library_updated'));
toastManager.primary($t('admin.library_updated'));
} catch (error) {
handleError(error, $t('errors.unable_to_update_library'));
}

View File

@ -57,7 +57,7 @@ const handleFavoritePerson = async (person: { id: string }) => {
try {
const response = await updatePerson({ id: person.id, personUpdateDto: { isFavorite: true } });
eventManager.emit('PersonUpdate', response);
toastManager.success($t('added_to_favorites'));
toastManager.primary($t('added_to_favorites'));
} catch (error) {
handleError(error, $t('errors.unable_to_add_remove_favorites', { values: { favorite: false } }));
}
@ -69,7 +69,7 @@ const handleUnfavoritePerson = async (person: { id: string }) => {
try {
const response = await updatePerson({ id: person.id, personUpdateDto: { isFavorite: false } });
eventManager.emit('PersonUpdate', response);
toastManager.success($t('removed_from_favorites'));
toastManager.primary($t('removed_from_favorites'));
} catch (error) {
handleError(error, $t('errors.unable_to_add_remove_favorites', { values: { favorite: false } }));
}
@ -80,7 +80,7 @@ const handleHidePerson = async (person: { id: string }) => {
try {
const response = await updatePerson({ id: person.id, personUpdateDto: { isHidden: true } });
toastManager.success($t('changed_visibility_successfully'));
toastManager.primary($t('changed_visibility_successfully'));
eventManager.emit('PersonUpdate', response);
} catch (error) {
handleError(error, $t('errors.unable_to_hide_person'));
@ -92,7 +92,7 @@ const handleShowPerson = async (person: { id: string }) => {
try {
const response = await updatePerson({ id: person.id, personUpdateDto: { isHidden: false } });
toastManager.success($t('changed_visibility_successfully'));
toastManager.primary($t('changed_visibility_successfully'));
eventManager.emit('PersonUpdate', response);
} catch (error) {
handleError(error, $t('errors.something_went_wrong'));
@ -104,7 +104,7 @@ export const handleUpdatePersonBirthDate = async (person: PersonResponseDto, bir
try {
const response = await updatePerson({ id: person.id, personUpdateDto: { birthDate } });
toastManager.success($t('date_of_birth_saved'));
toastManager.primary($t('date_of_birth_saved'));
eventManager.emit('PersonUpdate', response);
return true;
} catch (error) {

View File

@ -129,7 +129,7 @@ export const handleEmptyQueue = async (queue: QueueResponseDto) => {
await emptyQueue({ name: queue.name, queueDeleteDto: { failed: false } });
const response = await getQueue({ name: queue.name });
eventManager.emit('QueueUpdate', response);
toastManager.success($t('admin.cleared_jobs', { values: { job: item.title } }));
toastManager.primary($t('admin.cleared_jobs', { values: { job: item.title } }));
} catch (error) {
handleError(error, $t('errors.something_went_wrong'));
}
@ -155,7 +155,7 @@ const handleRemoveFailedJobs = async (queue: QueueResponseDto) => {
await emptyQueue({ name: queue.name, queueDeleteDto: { failed: true } });
const response = await getQueue({ name: queue.name });
eventManager.emit('QueueUpdate', response);
toastManager.success();
toastManager.primary();
} catch (error) {
handleError(error, $t('errors.something_went_wrong'));
}

View File

@ -95,7 +95,7 @@ export const handleUpdateSharedLink = async (sharedLink: SharedLinkResponseDto,
const response = await updateSharedLink({ id: sharedLink.id, sharedLinkEditDto: dto });
eventManager.emit('SharedLinkUpdate', { album: sharedLink.album, ...response });
toastManager.success($t('saved'));
toastManager.primary($t('saved'));
return true;
} catch (error) {
@ -118,7 +118,7 @@ const handleDeleteSharedLink = async (sharedLink: SharedLinkResponseDto) => {
try {
await removeSharedLink({ id: sharedLink.id });
eventManager.emit('SharedLinkDelete', sharedLink);
toastManager.success($t('deleted_shared_link'));
toastManager.primary($t('deleted_shared_link'));
} catch (error) {
handleError(error, $t('errors.unable_to_delete_shared_link'));
}
@ -150,7 +150,7 @@ export const handleRemoveSharedLinkAssets = async (sharedLink: SharedLinkRespons
}
const count = results.filter((item) => item.success).length;
toastManager.success($t('assets_removed_count', { values: { count } }));
toastManager.primary($t('assets_removed_count', { values: { count } }));
return true;
} catch (error) {
handleError(error, $t('errors.unable_to_remove_assets_from_shared_link'));

View File

@ -62,7 +62,7 @@ export const handleSystemConfigSave = async (update: Partial<SystemConfigDto>) =
const newConfig = await updateConfig({ systemConfigDto });
eventManager.emit('SystemConfigUpdate', newConfig);
toastManager.success($t('settings_saved'));
toastManager.primary($t('settings_saved'));
} catch (error) {
handleError(error, $t('errors.unable_to_save_settings'));
}

View File

@ -42,7 +42,7 @@ export const handleCreateTag = async (tagValue: string) => {
return;
}
toastManager.success($t('tag_created', { values: { tag: tag.value } }));
toastManager.primary($t('tag_created', { values: { tag: tag.value } }));
eventManager.emit('TagCreate', tag);
return true;
@ -61,7 +61,7 @@ export const handleUpdateTag = async (tag: TreeNode, dto: TagUpdateDto) => {
try {
const response = await updateTag({ id: tag.id, tagUpdateDto: dto });
toastManager.success($t('tag_updated', { values: { tag: tag.value } }));
toastManager.primary($t('tag_updated', { values: { tag: tag.value } }));
eventManager.emit('TagUpdate', response);
return true;
@ -91,7 +91,7 @@ const handleDeleteTag = async (tag: TreeNode) => {
try {
await deleteTag({ id: tagId });
eventManager.emit('TagDelete', tag);
toastManager.success();
toastManager.primary();
} catch (error) {
handleError(error, $t('errors.something_went_wrong'));
}

View File

@ -31,7 +31,7 @@ export const handleEmptyTrash = async () => {
try {
const { count } = await emptyTrash();
toastManager.success($t('assets_permanently_deleted_count', { values: { count } }));
toastManager.primary($t('assets_permanently_deleted_count', { values: { count } }));
} catch (error) {
handleError(error, $t('errors.unable_to_empty_trash'));
}
@ -47,7 +47,7 @@ export const handleRestoreTrash = async () => {
try {
const { count } = await restoreTrash();
toastManager.success($t('assets_restored_count', { values: { count } }));
toastManager.primary($t('assets_restored_count', { values: { count } }));
} catch (error) {
handleError(error, $t('errors.unable_to_restore_trash'));
}

View File

@ -109,7 +109,7 @@ export const handleCreateUserAdmin = async (dto: UserAdminCreateDto) => {
try {
const response = await createUserAdmin({ userAdminCreateDto: dto });
eventManager.emit('UserAdminCreate', response);
toastManager.success();
toastManager.primary();
return response;
} catch (error) {
handleError(error, $t('errors.unable_to_create_user'));
@ -122,7 +122,7 @@ export const handleUpdateUserAdmin = async (user: UserAdminResponseDto, dto: Use
try {
const response = await updateUserAdmin({ id: user.id, userAdminUpdateDto: dto });
eventManager.emit('UserAdminUpdate', response);
toastManager.success();
toastManager.primary();
return true;
} catch (error) {
handleError(error, $t('errors.unable_to_update_user'));
@ -136,7 +136,7 @@ export const handleDeleteUserAdmin = async (user: UserAdminResponseDto, dto: Use
try {
const result = await deleteUserAdmin({ id: user.id, userAdminDeleteDto: dto });
eventManager.emit('UserAdminDelete', result);
toastManager.success();
toastManager.primary();
return true;
} catch (error) {
handleError(error, $t('errors.unable_to_delete_user'));
@ -149,7 +149,7 @@ export const handleRestoreUserAdmin = async (user: UserAdminResponseDto) => {
try {
const response = await restoreUserAdmin({ id: user.id });
eventManager.emit('UserAdminRestore', response);
toastManager.success();
toastManager.primary();
return true;
} catch (error) {
handleError(error, $t('errors.unable_to_restore_user'));
@ -190,7 +190,7 @@ const handleResetPasswordUserAdmin = async (user: UserAdminResponseDto) => {
const dto = { password: generatePassword(), shouldChangePassword: true };
const response = await updateUserAdmin({ id: user.id, userAdminUpdateDto: dto });
eventManager.emit('UserAdminUpdate', response);
toastManager.success();
toastManager.primary();
await modalManager.show(PasswordResetSuccessModal, { newPassword: dto.password });
} catch (error) {
handleError(error, $t('errors.unable_to_reset_password'));
@ -208,7 +208,7 @@ const handleResetPinCodeUserAdmin = async (user: UserAdminResponseDto) => {
try {
const response = await updateUserAdmin({ id: user.id, userAdminUpdateDto: { pinCode: null } });
eventManager.emit('UserAdminUpdate', response);
toastManager.success($t('pin_code_reset_successfully'));
toastManager.primary($t('pin_code_reset_successfully'));
} catch (error) {
handleError(error, $t('errors.unable_to_reset_pin_code'));
}

View File

@ -39,7 +39,7 @@ export const handleResetPinCode = async (dto: PinCodeResetDto) => {
try {
await resetPinCode({ pinCodeResetDto: dto });
toastManager.success($t('pin_code_reset_successfully'));
toastManager.primary($t('pin_code_reset_successfully'));
eventManager.emit('UserPinCodeReset');
return true;
} catch (error) {
@ -52,7 +52,7 @@ export const handleChangePassword = async (dto: ChangePasswordDto) => {
try {
await changePassword({ changePasswordDto: dto });
toastManager.success($t('updated_password'));
toastManager.primary($t('updated_password'));
return true;
} catch (error) {
handleError(error, $t('errors.unable_to_change_password'));

View File

@ -397,7 +397,7 @@ export const handleToggleWorkflowEnabled = async (
});
eventManager.emit('WorkflowUpdate', updated);
toastManager.success($t('workflow_updated'));
toastManager.primary($t('workflow_updated'));
return updated;
} catch (error) {
handleError(error, $t('errors.unable_to_update_workflow'));
@ -419,7 +419,7 @@ export const handleDeleteWorkflow = async (workflow: WorkflowResponseDto): Promi
try {
await deleteWorkflow({ id: workflow.id });
eventManager.emit('WorkflowDelete', workflow);
toastManager.success($t('workflow_deleted'));
toastManager.primary($t('workflow_deleted'));
return true;
} catch (error) {
handleError(error, $t('errors.unable_to_delete_workflow'));

View File

@ -49,7 +49,7 @@ export const tagAssets = async ({
if (showNotification) {
const $t = await getFormatter();
toastManager.success($t('tagged_assets', { values: { count: assetIds.length } }));
toastManager.primary($t('tagged_assets', { values: { count: assetIds.length } }));
}
return assetIds;
@ -70,7 +70,7 @@ export const removeTag = async ({
if (showNotification) {
const $t = await getFormatter();
toastManager.success($t('removed_tagged_assets', { values: { count: assetIds.length } }));
toastManager.primary($t('removed_tagged_assets', { values: { count: assetIds.length } }));
}
return assetIds;
@ -364,7 +364,7 @@ export const deleteStack = async (stackIds: string[]) => {
await deleteStacks({ bulkIdsDto: { ids: [...ids] } });
toastManager.success($t('unstacked_assets_count', { values: { count } }));
toastManager.primary($t('unstacked_assets_count', { values: { count } }));
const assets = stacks.flatMap((stack) => stack.assets);
for (const asset of assets) {
@ -385,7 +385,7 @@ export const keepThisDeleteOthers = async (keepAsset: AssetResponseDto, stack: S
await deleteAssets({ assetBulkDeleteDto: { ids: assetsToDeleteIds } });
await deleteStacks({ bulkIdsDto: { ids: [stack.id] } });
toastManager.success($t('kept_this_deleted_others', { values: { count: assetsToDeleteIds.length } }));
toastManager.primary($t('kept_this_deleted_others', { values: { count: assetsToDeleteIds.length } }));
keepAsset.stack = null;
return keepAsset;
@ -440,7 +440,7 @@ export const toggleArchive = async (asset: AssetResponseDto) => {
});
asset.isArchived = data.isArchived;
toastManager.success(asset.isArchived ? $t(`added_to_archive`) : $t(`removed_from_archive`));
toastManager.primary(asset.isArchived ? $t(`added_to_archive`) : $t(`removed_from_archive`));
} catch (error) {
handleError(error, $t('errors.unable_to_add_remove_archive', { values: { archived: asset.isArchived } }));
}
@ -459,7 +459,7 @@ export const archiveAssets = async (assets: { id: string }[], visibility: AssetV
});
}
toastManager.success(
toastManager.primary(
visibility === AssetVisibility.Archive
? $t('archived_count', { values: { count: ids.length } })
: $t('unarchived_count', { values: { count: ids.length } }),

View File

@ -200,7 +200,7 @@
},
});
eventManager.emit('AlbumUpdate', response);
toastManager.success($t('album_cover_updated'));
toastManager.primary($t('album_cover_updated'));
} catch (error) {
handleError(error, $t('errors.unable_to_update_album_cover'));
}

View File

@ -157,7 +157,7 @@
break;
}
}
toastManager.success($t('change_name_successfully'));
toastManager.primary($t('change_name_successfully'));
} catch (error) {
handleError(error, $t('errors.unable_to_save_name'));
}
@ -178,7 +178,7 @@
return person;
});
toastManager.success($t('changed_visibility_successfully'));
toastManager.primary($t('changed_visibility_successfully'));
} catch (error) {
handleError(error, $t('errors.unable_to_hide_person'));
}
@ -198,7 +198,7 @@
return person;
});
toastManager.success(updatedPerson.isFavorite ? $t('added_to_favorites') : $t('removed_from_favorites'));
toastManager.primary(updatedPerson.isFavorite ? $t('added_to_favorites') : $t('removed_from_favorites'));
} catch (error) {
handleError(error, $t('errors.unable_to_add_remove_favorites', { values: { favorite: detail.isFavorite } }));
}

View File

@ -149,7 +149,7 @@
}
try {
person = await updatePerson({ id: person.id, personUpdateDto: { featureFaceAssetId: asset.id } });
toastManager.success($t('feature_photo_updated'));
toastManager.primary($t('feature_photo_updated'));
} catch (error) {
handleError(error, $t('errors.unable_to_set_feature_photo'));
}
@ -210,7 +210,7 @@
try {
person = await updatePerson({ id: person.id, personUpdateDto: { name: personName } });
toastManager.success($t('change_name_successfully'));
toastManager.primary($t('change_name_successfully'));
} catch (error) {
handleError(error, $t('errors.unable_to_save_name'));
}

View File

@ -95,7 +95,7 @@
const message = featureFlagsManager.value.trash
? $t('assets_moved_to_trash_count', { values: { count: trashedCount } })
: $t('permanently_deleted_assets_count', { values: { count: trashedCount } });
toastManager.success(message);
toastManager.primary(message);
};
const handleResolve = async (duplicateId: string, duplicateAssetIds: string[], trashIds: string[]) => {
@ -167,7 +167,7 @@
duplicates = [];
toastManager.success($t('resolved_all_duplicates'));
toastManager.primary($t('resolved_all_duplicates'));
page.url.searchParams.delete('index');
await goto(Route.duplicatesUtility());
},

View File

@ -131,7 +131,7 @@
previousWorkflow = updated;
editWorkflow = updated;
toastManager.success($t('workflow_update_success'), {
toastManager.primary($t('workflow_update_success'), {
closable: true,
});
} catch (error) {