You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-desktop/ts/session/utils/Toast.tsx

273 lines
8.1 KiB
TypeScript

import { toast } from 'react-toastify';
import { SessionToast, SessionToastType } from '../../components/basic/SessionToast';
import { SectionType, showLeftPaneSection, showSettingsSection } from '../../state/ducks/section';
// if you push a toast manually with toast...() be sure to set the type attribute of the SessionToast component
export function pushToastError(id: string, description: string) {
toast.error(<SessionToast description={description} type={SessionToastType.Error} />, {
toastId: id,
updateId: id,
});
}
export function pushToastWarning(id: string, description: string, onToastClick?: () => void) {
toast.warning(
<SessionToast
description={description}
type={SessionToastType.Warning}
onToastClick={onToastClick}
/>,
{
toastId: id,
updateId: id,
}
);
}
export function pushToastInfo(
id: string,
description: string,
onToastClick?: () => void,
delay?: number
) {
toast.info(
<SessionToast
description={description}
type={SessionToastType.Info}
onToastClick={onToastClick}
/>,
{ toastId: id, updateId: id, delay }
);
}
export function pushToastSuccess(id: string, description: string) {
toast.success(<SessionToast description={description} type={SessionToastType.Success} />, {
toastId: id,
updateId: id,
});
}
export function pushLoadAttachmentFailure(message?: string) {
if (message) {
pushToastError(
'unableToLoadAttachment',
`${window.i18n.stripped('attachmentsErrorLoad')} ${message}`
);
} else {
pushToastError('unableToLoadAttachment', window.i18n.stripped('attachmentsErrorLoad'));
}
}
// TODOLATER pushToast functions should take I18nArgs and then run strip in the function itself.
export function pushFileSizeErrorAsByte() {
pushToastError('fileSizeWarning', window.i18n.stripped('attachmentsErrorSize'));
}
export function pushMultipleNonImageError() {
pushToastError('attachmentsErrorTypes', window.i18n.stripped('attachmentsErrorTypes'));
}
export function pushCannotMixError() {
pushToastError('attachmentsErrorTypes', window.i18n.stripped('attachmentsErrorTypes'));
}
export function pushMaximumAttachmentsError() {
pushToastError('attachmentsErrorNumber', window.i18n.stripped('attachmentsErrorNumber'));
}
export function pushCopiedToClipBoard() {
pushToastInfo('copiedToClipboard', window.i18n.stripped('copied'));
}
export function pushRestartNeeded() {
pushToastInfo('restartNeeded', window.i18n.stripped('settingsRestartDescription'));
}
export function pushAlreadyMemberOpenGroup() {
pushToastInfo('publicChatExists', window.i18n.stripped('communityJoinedAlready'));
}
export function pushUserBanSuccess() {
pushToastSuccess('userBanned', window.i18n.stripped('banUserBanned'));
}
export function pushUserBanFailure() {
pushToastError('userBanFailed', window.i18n.stripped('banErrorFailed'));
}
export function pushUserUnbanSuccess() {
pushToastSuccess('userUnbanned', window.i18n.stripped('banUnbanUserUnbanned'));
}
export function pushUserUnbanFailure() {
pushToastError('userUnbanFailed', window.i18n.stripped('banUnbanErrorFailed'));
}
export function pushMessageDeleteForbidden() {
pushToastError(
'messageDeletionForbidden',
window.i18n.stripped('deleteAfterMessageDeletionStandardisationMessageDeletionForbidden')
);
}
export function pushUnableToCall() {
pushToastError('unableToCall', window.i18n.stripped('callsCannotStart'));
}
export function pushedMissedCall(userName: string) {
pushToastInfo('missedCall', window.i18n.stripped('callsMissedCallFrom', { name: userName }));
}
const openPermissionsSettings = () => {
window.inboxStore?.dispatch(showLeftPaneSection(SectionType.Settings));
window.inboxStore?.dispatch(showSettingsSection('permissions'));
};
export function pushedMissedCallCauseOfPermission(conversationName: string) {
const id = 'missedCallPermission';
toast.info(
<SessionToast
description={window.i18n.stripped('callsYouMissedCallPermissions', {
name: conversationName,
})}
type={SessionToastType.Info}
onToastClick={openPermissionsSettings}
/>,
{ toastId: id, updateId: id, autoClose: 10000 }
);
}
export function pushVideoCallPermissionNeeded() {
pushToastInfo(
'videoCallPermissionNeeded',
window.i18n.stripped('callsPermissionsRequiredDescription'),
openPermissionsSettings
);
}
export function pushAudioPermissionNeeded() {
pushToastInfo(
'audioPermissionNeeded',
window.i18n.stripped('permissionsMicrophoneAccessRequiredDesktop'),
openPermissionsSettings
);
}
export function pushOriginalNotFound() {
pushToastError('messageErrorOriginal', window.i18n.stripped('messageErrorOriginal'));
}
export function pushTooManyMembers() {
pushToastError('groupAddMemberMaximum', window.i18n.stripped('groupAddMemberMaximum'));
}
export function pushMessageRequestPending() {
pushToastInfo('messageRequestPending', window.i18n.stripped('messageRequestPending'));
}
export function pushUnblockToSend() {
pushToastInfo('unblockToSend', window.i18n.stripped('blockBlockedDescription'));
}
export function pushYouLeftTheGroup() {
pushToastError('youLeftTheGroup', window.i18n.stripped('groupMemberYouLeft'));
}
export function someDeletionsFailed(count: number) {
pushToastWarning('deletionError', window.i18n.stripped('deleteMessageFailed', { count }));
}
export function pushDeleted(count: number) {
pushToastSuccess('deleted', window.i18n.stripped('deleteMessageDeleted', { count }));
}
export function pushCannotRemoveGroupAdmin() {
pushToastWarning('adminCannotBeRemoved', window.i18n.stripped('adminCannotBeRemoved'));
}
export function pushFailedToAddAsModerator() {
pushToastWarning('adminPromotionFailed', window.i18n.stripped('adminPromotionFailed'));
}
export function pushFailedToRemoveFromModerator(names: Array<string>) {
let localizedString: string = '';
switch (names.length) {
case 0:
throw new Error('pushFailedToRemoveFromModerator invalid case error');
case 1:
localizedString = window.i18n.stripped('adminRemoveFailed', {
name: names[0],
});
break;
case 2:
localizedString = window.i18n.stripped('adminRemoveFailedOther', {
name: names[0],
other_name: names[1],
});
break;
default:
localizedString = window.i18n.stripped('adminRemoveFailedMultiple', {
name: names[0],
count: names.length - 1,
});
break;
}
pushToastWarning('adminRemoveFailed', localizedString);
}
export function pushUserAddedToModerators(name: string) {
pushToastSuccess('adminPromotedToAdmin', window.i18n.stripped('adminPromotedToAdmin', { name }));
}
export function pushUserRemovedFromModerators(names: Array<string>) {
let localizedString: string = '';
switch (names.length) {
case 0:
throw new Error('pushUserRemovedFromModerators invalid case error');
case 1:
localizedString = window.i18n.stripped('adminRemovedUser', {
name: names[0],
});
break;
case 2:
localizedString = window.i18n.stripped('adminRemovedUserOther', {
name: names[0],
other_name: names[1],
});
break;
default:
localizedString = window.i18n.stripped('adminRemovedUserMultiple', {
name: names[0],
count: names.length - 1,
});
break;
}
pushToastSuccess('adminRemovedUser', localizedString);
}
export function pushInvalidPubKey() {
pushToastSuccess('accountIdErrorInvalid', window.i18n.stripped('accountIdErrorInvalid'));
}
export function pushNoCameraFound() {
pushToastWarning('noCameraFound', window.i18n.stripped('cameraErrorNotFound'));
}
export function pushNoAudioInputFound() {
pushToastWarning('noAudioInputFound', window.i18n.stripped('audioNoInput'));
}
export function pushNoAudioOutputFound() {
pushToastWarning('noAudioOutputFound', window.i18n.stripped('audioNoOutput'));
}
export function pushNoMediaUntilApproved() {
pushToastError('noMediaUntilApproved', window.i18n.stripped('messageRequestPendingDescription'));
}
export function pushRateLimitHitReactions() {
pushToastInfo('reactRateLimit', window?.i18n?.('emojiReactsCoolDown')); // because otherwise test fails
}