From b28920898cf430019b14341d16d5cece19f53588 Mon Sep 17 00:00:00 2001 From: SauceyRed Date: Thu, 10 Jul 2025 23:58:00 +0200 Subject: [PATCH] feat: add utils to reply to and edit messages --- types/props.ts | 17 +++++++++++++++++ utils/editMessage.ts | 24 ++++++++++++++++++++++++ utils/replyToMessage.ts | 5 +++++ 3 files changed, 46 insertions(+) create mode 100644 types/props.ts create mode 100644 utils/editMessage.ts create mode 100644 utils/replyToMessage.ts diff --git a/types/props.ts b/types/props.ts new file mode 100644 index 0000000..f97405d --- /dev/null +++ b/types/props.ts @@ -0,0 +1,17 @@ +import type { UserResponse } from "./interfaces"; + +export interface MessageProps { + class?: string, + img?: string | null, + author?: UserResponse + text: string, + timestamp: number, + format: "12" | "24", + type: "normal" | "grouped", + marginBottom: boolean, + last: boolean, + messageId: string, + replyingTo?: boolean, + editing?: boolean, + me: UserResponse +} \ No newline at end of file diff --git a/utils/editMessage.ts b/utils/editMessage.ts new file mode 100644 index 0000000..5cc3ce8 --- /dev/null +++ b/utils/editMessage.ts @@ -0,0 +1,24 @@ +import type { MessageProps } from "~/types/props"; + +export default async (element: HTMLDivElement, props: MessageProps) => { + console.log("message:", element); + const me = await fetchWithApi("/me") as any; + if (props.author?.uuid == me.uuid) { + const text = element.getElementsByClassName("message-text")[0] as HTMLDivElement; + text.contentEditable = "true"; + text.focus(); + const range = document.createRange(); + range.selectNodeContents(text); + range.collapse(false); + const selection = window.getSelection(); + selection?.removeAllRanges(); + selection?.addRange(range); + element.addEventListener("keyup", (e) => { + console.log("key released:", e.key); + if (e.key == "Escape") { + text.contentEditable = "false"; + } + text.blur(); + }, { once: true }); + } +} diff --git a/utils/replyToMessage.ts b/utils/replyToMessage.ts new file mode 100644 index 0000000..03253d2 --- /dev/null +++ b/utils/replyToMessage.ts @@ -0,0 +1,5 @@ +import type { MessageProps } from "~/types/props"; + +export default (element: HTMLDivElement, props: MessageProps) => { + console.log("element:", element); +}