Repository navigation
feat(ScheduledMessages): manage scheduled messages from the list (REACT-1389) - #3371
Draft
NikolaGoranNaumovski wants to merge 12 commits into
Draft
NikolaGoranNaumovski wants to merge 12 commits into
NikolaGoranNaumovski wants to merge 12 commits into
Conversation
Extract the date and time form of ScheduleMessageDialog into ScheduleTimeDialog, which takes the channel, preview, title, error copy and submit function as props, so rescheduling can reuse it. useScheduleTimeForm takes the channel and an optional initial time, and useScheduleTimeSubmit runs any submit function; useScheduleMessageSubmit now wraps it. ScheduleMessageDialog renders the same as before. Refs: REACT-1389
Each list item gets an actions button that opens a row menu by status: scheduled messages offer Edit, Reschedule, Send now and Delete; failed ones offer Delete, plus Copy when the channel was deleted; the button is disabled while a message is being sent. Edit appears only when the list is given an onEdit handler. - Reschedule opens ScheduleTimeDialog pre-filled with the current time and saves through the manager's updateScheduledMessage - Delete asks for confirmation in DeleteScheduledMessageAlert - Send now confirms with a toast - failures are reported as typed notifications, and a conflict reloads the store Refs: REACT-1389
Edit from the scheduled message list puts the channel or thread composer in scheduled edit mode: - the composer shows EditedScheduledMessagePreview with a cancel button (overridable through ComponentContext) - Enter and Send save through updateScheduledMessage instead of sending - the send button shows the checkmark and the schedule button is hidden while editing The banner's list edits in the composer it belongs to, and the Channel Detail section in the channel's composer, closing its modal first. Refs: REACT-1389
Translate the row menu, the reschedule and delete dialogs, the edit preview and the action notifications in all 12 locales. Action failures are translated by reason: a 404 reads "Already sent", and sending, conflict, not editable and time bounds get their own copy, with a fallback per action. Refs: REACT-1389
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. CodeRabbit Verify
|
This was referenced Nov 2, 2026
MessageComposer ends a scheduled message edit (or scheduling a failed message again) when the message is sent, deleted or fails elsewhere, and reports it as validation:scheduled-message:composition:ended with the reason. translateScheduledMessageCompositionEnded turns it into "This scheduled message was already sent / was deleted / failed to send". Refs: REACT-1389
Translate why a scheduled message edit ended (already sent, deleted, failed to send, or no longer editable) in all 12 locales. Refs: REACT-1389
NikolaGoranNaumovski
force-pushed
the
feat/react-1388-scheduled-messages-list
branch
from
November 3, 2026 09:07
831f72f to
9d9b6c1
Compare
NikolaGoranNaumovski
force-pushed
the
feat/react-1389-scheduled-messages-manage
branch
from
November 3, 2026 09:07
bba632b to
05b03dc
Compare
…t-1389-scheduled-messages-manage # Conflicts: # src/components/ScheduledMessages/ScheduleMessageDialog.tsx # src/components/ScheduledMessages/ScheduledMessageItem.tsx # src/components/ScheduledMessages/ScheduledMessageListDialog.tsx # src/i18n/de.json # src/i18n/en.json # src/i18n/es.json # src/i18n/fr.json # src/i18n/hi.json # src/i18n/it.json # src/i18n/ja.json # src/i18n/ko.json # src/i18n/nl.json # src/i18n/pt.json # src/i18n/ru.json # src/i18n/tr.json
…e design Show the row actions like the channel list item actions: a floating group at the top end of the row, revealed on hover, focus or while its menu is open. A scheduled message gets an Edit button next to the menu, so the menu keeps Reschedule, Send now and Delete. The copy action is labelled "Copy text", and the separator only appears when more than one action precedes Delete.
…t-1389-scheduled-messages-manage
…sign The delete confirmation asks "Delete scheduled message?", names the channel and uses a solid destructive button. The reschedule dialog shows "Scheduled for Fri, Oct 23 at 09:00" above the message and saves with "Save". Sending now confirms with "Scheduled message sent", and an edit of a message that was sent elsewhere reports "This message was already sent".
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🎯 Goal
Let users manage their pending scheduled messages from the scheduled message list: edit, reschedule, send now, delete, and copy the text of a message whose channel was deleted. This follows the web designs for the row menu, the edit preview and the delete confirmation (Figma: Scheduled List and Edit, Reschedule and Delete sections).
Part of the scheduled messages feature (REACT-1389). Stacked on #3366 (list) and depends on GetStream/stream-chat-js#1915 (state layer) and GetStream/stream-chat-js#1956 (composer edit mode).
🛠 Implementation details
Row menu (
ScheduledMessageActions)ContextMenu. Which actions appear depends on the status:channel_deleted): Copy, DeleteonEdithandler. Both hosts do: the banner's list dialog and the Channel Detail section.getScheduledMessageActions.Actions
RescheduleMessageDialog, pre-filled with the current time, and saves throughclient.scheduledMessages.updateScheduledMessage(id, { scheduled_at }).sendScheduledMessageNowand confirms with a "Message sent" toast. The item leaves the list onscheduled_message.sent.DeleteScheduledMessageAlert), then callsdeleteScheduledMessage.translateScheduledMessageActionFailedtranslates them by reason:Shared date/time dialog
ScheduleMessageDialogis extracted intoScheduleTimeDialog. It takes the channel, preview, title, error text and submit function as props, so scheduling and rescheduling use the same dialog.useScheduleTimeFormnow takes{ channel, initialScheduledAt? }.useScheduleTimeSubmitruns any submit function, anduseScheduleMessageSubmitwraps it.ScheduleMessageDialogrenders the same as before.Edit mode in the composer
composer.editScheduledMessage(scheduledMessage):EditedScheduledMessagePreview, with cancel callingcancelEditScheduledMessage();useSubmitHandlersends Enter and Send toupdateScheduledMessage()instead ofsendMessage/editMessage;useCanScheduleMessagehides the schedule button.ComponentContextslot:EditedScheduledMessagePreview.MessageComposerends the edit (feat: schedule and edit scheduled messages from MessageComposer stream-chat-js#1956). The newtranslateScheduledMessageCompositionEndedexplains why: "This scheduled message was already sent / was deleted / failed to send".Not in this PR
message.id. The server rejects a PATCH on failed messages with 120, so this needs a new composer method and moves to REACT-1390 (feat(ScheduledMessages): handle failed scheduled messages (REACT-1390) #3372, usingMessageComposer.rescheduleFailedMessagefrom feat: schedule and edit scheduled messages from MessageComposer stream-chat-js#1956). Failed items offer Delete (and Copy for deleted channels) for now.Translations
21 new strings in all 12 locales.
Commits
Commits 1–3 each typecheck and pass the scheduled-message, composer, Channel Detail and i18n tests on their own. The full suite passes on the last commit (3460 tests).
Testing
updateScheduledMessagewith nosendMessage, cancel restores the earlier draft);examples/viteagainst the scheduled messages test app:🎨 UI Changes
Screenshots: row menu (scheduled), row menu (deleted channel), reschedule dialog, delete confirmation, edit preview in the composer.