diff --git a/src/components/common/messaging/MessageBox.tsx b/src/components/common/messaging/MessageBox.tsx index abb2ecf1..3f0e1e89 100644 --- a/src/components/common/messaging/MessageBox.tsx +++ b/src/components/common/messaging/MessageBox.tsx @@ -106,6 +106,9 @@ const Action = styled.div` } `; +// For sed replacement +const SED_REGEX = new RegExp("^s/([^])+/([^])+$"); + // ! FIXME: add to app config and load from app config export const CAN_UPLOAD_AT_ONCE = 4; @@ -198,37 +201,63 @@ export default observer(({ channel }: Props) => { stopTyping(); setMessage(); setReplies([]); - playSound("outbound"); - const nonce = ulid(); - dispatch({ - type: "QUEUE_ADD", - nonce, - channel: channel._id, - message: { - _id: nonce, - channel: channel._id, - author: client.user!._id, - content, - replies, - }, - }); + // sed style message editing. + // If the user types for example `s/abc/def`, the string "abc" + // will be replaced with "def" in their last sent message. + if (SED_REGEX.test(content)) { + renderer.messages.reverse(); + const msg = renderer.messages.find( + (msg) => msg.author_id === client.user!._id, + ); + renderer.messages.reverse(); - defer(() => renderer.jumpToBottom(SMOOTH_SCROLL_ON_RECEIVE)); + if (msg) { + const [_, toReplace, newText, flags] = + content.split(/(? renderer.jumpToBottom(SMOOTH_SCROLL_ON_RECEIVE)); + + try { + await channel.sendMessage({ + content, + nonce, + replies, + }); + } catch (error) { + dispatch({ + type: "QUEUE_FAIL", + error: takeError(error), + nonce, + }); + } } }