[MM-55988]: alert message in DM of persistent notification changed (#7743)

* fix: alert message in DM of persistent notification changed

* fix: alert message of persistent notification

* fix: persistent notifications text

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
This commit is contained in:
Tanmay Thole 2024-03-04 14:36:20 +05:30 committed by GitHub
parent cb0ca72cc7
commit 7b6f00a828
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 57 additions and 18 deletions

View file

@ -28,6 +28,7 @@ type Props = {
testID?: string;
channelId: string;
channelType?: ChannelType;
channelName?: string;
rootId?: string;
currentUserId: string;
canShowPostPriority?: boolean;
@ -108,6 +109,7 @@ export default function DraftInput({
testID,
channelId,
channelType,
channelName,
currentUserId,
canShowPostPriority,
files,
@ -164,7 +166,7 @@ export default function DraftInput({
const handleSendMessage = useCallback(async () => {
if (persistentNotificationsEnabled) {
persistentNotificationsConfirmation(serverUrl, value, mentionsList, intl, sendMessage, persistentNotificationMaxRecipients, persistentNotificationInterval, channelType);
persistentNotificationsConfirmation(serverUrl, value, mentionsList, intl, sendMessage, persistentNotificationMaxRecipients, persistentNotificationInterval, currentUserId, channelName, channelType);
} else {
sendMessage();
}

View file

@ -55,7 +55,7 @@ const enhanced = withObservables([], (ownProps: WithDatabaseArgs & OwnProps) =>
const enableConfirmNotificationsToChannel = observeConfigBooleanValue(database, 'EnableConfirmNotificationsToChannel');
const maxMessageLength = observeConfigIntValue(database, 'MaxPostSize', MAX_MESSAGE_LENGTH_FALLBACK);
const persistentNotificationInterval = observeConfigIntValue(database, 'PersistentNotificationInterval');
const persistentNotificationInterval = observeConfigIntValue(database, 'PersistentNotificationIntervalMinutes');
const persistentNotificationMaxRecipients = observeConfigIntValue(database, 'PersistentNotificationMaxRecipients');
const useChannelMentions = combineLatest([channel, currentUser]).pipe(
@ -70,6 +70,7 @@ const enhanced = withObservables([], (ownProps: WithDatabaseArgs & OwnProps) =>
const channelInfo = channel.pipe(switchMap((c) => (c ? observeChannelInfo(database, c.id) : of$(undefined))));
const channelType = channel.pipe(switchMap((c) => of$(c?.type)));
const channelName = channel.pipe(switchMap((c) => of$(c?.name)));
const membersCount = channelInfo.pipe(
switchMap((i) => (i ? of$(i.memberCount) : of$(0))),
);
@ -78,6 +79,7 @@ const enhanced = withObservables([], (ownProps: WithDatabaseArgs & OwnProps) =>
return {
channelType,
channelName,
currentUserId,
enableConfirmNotificationsToChannel,
maxMessageLength,

View file

@ -31,6 +31,7 @@ type Props = {
testID?: string;
channelId: string;
channelType?: ChannelType;
channelName?: string;
rootId: string;
canShowPostPriority?: boolean;
setIsFocused: (isFocused: boolean) => void;
@ -69,6 +70,7 @@ export default function SendHandler({
testID,
channelId,
channelType,
channelName,
currentUserId,
enableConfirmNotificationsToChannel,
files,
@ -270,6 +272,7 @@ export default function SendHandler({
testID={testID}
channelId={channelId}
channelType={channelType}
channelName={channelName}
currentUserId={currentUserId}
rootId={rootId}
canShowPostPriority={canShowPostPriority}

View file

@ -7,9 +7,11 @@ import {getUsersCountFromMentions} from '@actions/local/post';
import {General, Post} from '@constants';
import {SPECIAL_MENTIONS_REGEX} from '@constants/autocomplete';
import {POST_TIME_TO_FAIL} from '@constants/post';
import DatabaseManager from '@database/manager';
import {DEFAULT_LOCALE} from '@i18n';
import {getUserById} from '@queries/servers/user';
import {toMilliseconds} from '@utils/datetime';
import {displayUsername} from '@utils/user';
import {displayUsername, getUserIdFromChannelName} from '@utils/user';
import type PostModel from '@typings/database/models/servers/post';
import type UserModel from '@typings/database/models/servers/user';
@ -104,7 +106,7 @@ export function hasSpecialMentions(message: string): boolean {
return result;
}
export async function persistentNotificationsConfirmation(serverUrl: string, value: string, mentionsList: string[], intl: IntlShape, sendMessage: () => void, persistentNotificationMaxRecipients: number, persistentNotificationInterval: number, channelType?: ChannelType) {
export async function persistentNotificationsConfirmation(serverUrl: string, value: string, mentionsList: string[], intl: IntlShape, sendMessage: () => void, persistentNotificationMaxRecipients: number, persistentNotificationInterval: number, currentUserId: string, channelName?: string, channelType?: ChannelType) {
let title = '';
let description = '';
let buttons: AlertButton[] = [{
@ -115,7 +117,37 @@ export async function persistentNotificationsConfirmation(serverUrl: string, val
style: 'cancel',
}];
if (hasSpecialMentions(value)) {
if (channelType === General.DM_CHANNEL) {
const {database} = DatabaseManager.getServerDatabaseAndOperator(serverUrl);
const teammateId = getUserIdFromChannelName(currentUserId, channelName!);
const user = await getUserById(database, teammateId);
title = intl.formatMessage({
id: 'persistent_notifications.confirm.title',
defaultMessage: 'Send persistent notifications',
});
description = intl.formatMessage({
id: 'persistent_notifications.dm_channel.description',
defaultMessage: '@{username} will be notified every {interval, plural, one {minute} other {{interval} minutes}} until theyve acknowledged or replied to the message.',
}, {
interval: persistentNotificationInterval,
username: user?.username,
});
buttons = [{
text: intl.formatMessage({
id: 'persistent_notifications.confirm.cancel',
defaultMessage: 'Cancel',
}),
style: 'cancel',
},
{
text: intl.formatMessage({
id: 'persistent_notifications.confirm.send',
defaultMessage: 'Send',
}),
onPress: sendMessage,
}];
} else if (hasSpecialMentions(value)) {
description = intl.formatMessage({
id: 'persistent_notifications.error.special_mentions',
defaultMessage: 'Cannot use @channel, @all or @here to mention recipients of persistent notifications.',
@ -124,7 +156,16 @@ export async function persistentNotificationsConfirmation(serverUrl: string, val
// removes the @ from the mention
const formattedMentionsList = mentionsList.map((mention) => mention.slice(1));
const usersCount = await getUsersCountFromMentions(serverUrl, formattedMentionsList);
if (usersCount > persistentNotificationMaxRecipients) {
if (usersCount === 0) {
title = intl.formatMessage({
id: 'persistent_notifications.error.no_mentions.title',
defaultMessage: 'Recipients must be @mentioned',
});
description = intl.formatMessage({
id: 'persistent_notifications.error.no_mentions.description',
defaultMessage: 'There are no recipients mentioned in your message. Youll need add mentions to be able to send persistent notifications.',
});
} else if (usersCount > persistentNotificationMaxRecipients) {
title = intl.formatMessage({
id: 'persistent_notifications.error.max_recipients.title',
defaultMessage: 'Too many recipients',
@ -136,15 +177,6 @@ export async function persistentNotificationsConfirmation(serverUrl: string, val
max: persistentNotificationMaxRecipients,
count: mentionsList.length,
});
} else if (usersCount === 0 && channelType !== General.DM_CHANNEL) {
title = intl.formatMessage({
id: 'persistent_notifications.error.no_mentions.title',
defaultMessage: 'Recipients must be @mentioned',
});
description = intl.formatMessage({
id: 'persistent_notifications.error.no_mentions.description',
defaultMessage: 'There are no recipients mentioned in your message. Youll need add mentions to be able to send persistent notifications.',
});
} else {
title = intl.formatMessage({
id: 'persistent_notifications.confirm.title',
@ -152,7 +184,7 @@ export async function persistentNotificationsConfirmation(serverUrl: string, val
});
description = intl.formatMessage({
id: 'persistent_notifications.confirm.description',
defaultMessage: '@mentioned recipients will be notified every {interval, plural, one {minute} other {{interval} minutes}} until theyve acknowledged or replied to the message.',
defaultMessage: 'Mentioned recipients will be notified every {interval, plural, one {minute} other {{interval} minutes}} until theyve acknowledged or replied to the message.',
}, {
interval: persistentNotificationInterval,
});

View file

@ -113,7 +113,6 @@
"channel_info.archive_failed": "An error occurred trying to archive the channel {displayName}",
"channel_info.archive_title": "Archive {term}",
"channel_info.channel_auto_follow_threads": "Follow all threads in this channel",
"channel_info.channel_auto_follow_threads_failed": "An error occurred trying to auto follow all threads in channel {displayName}",
"channel_info.channel_files": "Files",
"channel_info.close": "Close",
"channel_info.close_dm": "Close direct message",
@ -845,9 +844,10 @@
"permalink.show_dialog_warn.join": "Join",
"permalink.show_dialog_warn.title": "Join private channel",
"persistent_notifications.confirm.cancel": "Cancel",
"persistent_notifications.confirm.description": "@mentioned recipients will be notified every {interval, plural, one {minute} other {{interval} minutes}} until theyve acknowledged or replied to the message.",
"persistent_notifications.confirm.description": "Mentioned recipients will be notified every {interval, plural, one {minute} other {{interval} minutes}} until theyve acknowledged or replied to the message.",
"persistent_notifications.confirm.send": "Send",
"persistent_notifications.confirm.title": "Send persistent notifications",
"persistent_notifications.dm_channel.description": "{username} will be notified every {interval, plural, one {minute} other {{interval} minutes}} until theyve acknowledged or replied to the message.",
"persistent_notifications.error.max_recipients.description": "You can send persistent notifications to a maximum of {max} recipients. There are {count} recipients mentioned in your message. Youll need to change who youve mentioned before you can send.",
"persistent_notifications.error.max_recipients.title": "Too many recipients",
"persistent_notifications.error.no_mentions.description": "There are no recipients mentioned in your message. Youll need add mentions to be able to send persistent notifications.",