MM-60124-emit and read create scheduled post WS event (#28844)

* MM-60124-emit and read create scheduled post WS event

* fix unit test; reorder get team id logic; use userid for ws events

* MM-60145 - ws events on update scheduled posts (#28871)

* MM-60145 - ws events on update scheduled posts

* MM-60147 - ws events on delete scheduled posts (#28872)

* MM-60147 - ws events on delete scheduled posts

* remove unnecessary channelID

* remove unnecesary memoization
Этот коммит содержится в:
Pablo Vélez
2024-11-05 14:24:50 +01:00
коммит произвёл GitHub
родитель 87cc13c590
Коммит fbee99e870
9 изменённых файлов: 130 добавлений и 37 удалений

Просмотреть файл

@@ -21,6 +21,7 @@ import {
CloudTypes,
HostedCustomerTypes,
ChannelBookmarkTypes,
ScheduledPostTypes,
} from 'mattermost-redux/action_types';
import {getStandardAnalytics} from 'mattermost-redux/actions/admin';
import {fetchAppBindings, fetchRHSAppsBindings} from 'mattermost-redux/actions/apps';
@@ -83,6 +84,7 @@ import {getPost, getMostRecentPostIdInChannel, getTeamIdFromPost} from 'mattermo
import {isCollapsedThreadsEnabled} from 'mattermost-redux/selectors/entities/preferences';
import {haveISystemPermission, haveITeamPermission} from 'mattermost-redux/selectors/entities/roles';
import {
getTeamIdByChannelId,
getMyTeams,
getCurrentRelativeTeamUrl,
getCurrentTeamId,
@@ -609,6 +611,15 @@ export function handleEvent(msg) {
case SocketEvents.DRAFT_DELETED:
dispatch(handleDeleteDraftEvent(msg));
break;
case SocketEvents.SCHEDULED_POST_CREATED:
dispatch(handleCreateScheduledPostEvent(msg));
break;
case SocketEvents.SCHEDULED_POST_UPDATED:
dispatch(handleUpdateScheduledPostEvent(msg));
break;
case SocketEvents.SCHEDULED_POST_DELETED:
dispatch(handleDeleteScheduledPostEvent(msg));
break;
case SocketEvents.PERSISTENT_NOTIFICATION_TRIGGERED:
dispatch(handlePersistentNotification(msg));
break;
@@ -1748,6 +1759,48 @@ function handleUpsertDraftEvent(msg) {
};
}
function handleCreateScheduledPostEvent(msg) {
return async (doDispatch) => {
const scheduledPost = JSON.parse(msg.data.scheduledPost);
const state = getState();
const teamId = getTeamIdByChannelId(state, scheduledPost.channel_id);
doDispatch({
type: ScheduledPostTypes.SINGLE_SCHEDULED_POST_RECEIVED,
data: {
scheduledPost,
teamId,
},
});
};
}
function handleUpdateScheduledPostEvent(msg) {
return async (doDispatch) => {
const scheduledPost = JSON.parse(msg.data.scheduledPost);
doDispatch({
type: ScheduledPostTypes.SCHEDULED_POST_UPDATED,
data: {
scheduledPost,
},
});
};
}
function handleDeleteScheduledPostEvent(msg) {
return async (doDispatch) => {
const scheduledPost = JSON.parse(msg.data.scheduledPost);
doDispatch({
type: ScheduledPostTypes.SCHEDULED_POST_DELETED,
data: {
scheduledPost,
},
});
};
}
function handleDeleteDraftEvent(msg) {
return async (doDispatch) => {
const draft = JSON.parse(msg.data.draft);

Просмотреть файл

@@ -372,3 +372,12 @@ export function makeGetBadgeCountForTeamId(): (state: GlobalState, id: string) =
export function searchTeamsInPolicy(teams: Team[], term: string): Team[] {
return filterTeamsStartingWithTerm(teams, term);
}
export function getTeamIdByChannelId(state: GlobalState, channelId: string): string | undefined {
const channels = state.entities.channels.channels;
if (!channels) {
return undefined;
}
const channel = channels[channelId];
return channel ? channel.team_id : undefined;
}

Просмотреть файл

@@ -660,6 +660,9 @@ export const SocketEvents = {
DRAFT_CREATED: 'draft_created',
DRAFT_UPDATED: 'draft_updated',
DRAFT_DELETED: 'draft_deleted',
SCHEDULED_POST_CREATED: 'scheduled_post_created',
SCHEDULED_POST_UPDATED: 'scheduled_post_updated',
SCHEDULED_POST_DELETED: 'scheduled_post_deleted',
PERSISTENT_NOTIFICATION_TRIGGERED: 'persistent_notification_triggered',
HOSTED_CUSTOMER_SIGNUP_PROGRESS_UPDATED: 'hosted_customer_signup_progress_updated',
};