From 687d378eb41092090ba79722e0c1830602a053b2 Mon Sep 17 00:00:00 2001 From: marlon-erler Date: Thu, 11 Jul 2024 02:29:00 +0200 Subject: [PATCH] add buttons to resend and clear all objects --- bun.lockb | Bin 11435 -> 11435 bytes dist/index.js | 50 +++++++++++++++++++++-------- package.json | 2 +- src/Model/chatModel.ts | 27 ++++++++++++---- src/Views/Chat/chatOptionModal.tsx | 24 ++++++++++++-- src/translations.ts | 7 ++-- 6 files changed, 85 insertions(+), 25 deletions(-) diff --git a/bun.lockb b/bun.lockb index 5c971e022ed9e0d26ebd8bfe95a602c9f4635f7a..e2a4fb722c6d55f1a2eb515caf2e65271c8a49a2 100755 GIT binary patch delta 137 zcmV;40CxYYS*ux)E+9tY)C4st7g9N|_|jp8xqdF_ip4d?C_44R3vY|u-RQAS+6Vy! zlTiXEvrq|b3qbQ$^3uvZwt_p;!G~s%0XFThCx9Se0TH&#rG9^LSX%$zsS_0uPvt#B r5SFAjVuYavwgGB1%s^b3BhW<%RS2{F6bcFfHM0mG$P58BlhG^M(4#vL delta 137 zcmV;40CxYYS*ux)E+C_ExWNhU%NzQgm_@n6#Zu-@uBHUwU_g}_<+h^|i(j!$+6Vyz zlTiXEvrq|b3qazTZ<0ZR2u{KnlOHwSt*0zj^eTZ#A2B$>|8mLXp1_oJrp~>TgP;@N rALQYCb3ag+qrfkNtlMKSkzI#t@*A`L6bcFfG_wdF$P58AlhG^MqsTxE diff --git a/dist/index.js b/dist/index.js index 3b44a238..0afc1a03 100644 --- a/dist/index.js +++ b/dist/index.js @@ -147,8 +147,7 @@ this.removalHandlers.delete(item); } clear() { - this.value.clear(); - this.callSubscriptions(); + [...this.value.keys()].forEach((key) => this.remove(key)); } // handlers handleAddition(handler) { @@ -435,6 +434,7 @@ cannotSetChannel; cannotUndoChannel; cannotClearMessages; + cannotClearObjects; // init constructor(id = UUID()) { this.id = id; @@ -488,6 +488,10 @@ [this.messages], () => this.messages.value.size == 0 ); + this.cannotClearObjects = createProxyState( + [this.objects], + () => this.objects.value.size == 0 + ); } // general deleteSelf = () => { @@ -599,18 +603,26 @@ this.objectOutbox.remove(chatMessage.messageObject.id); }; // objects - addObjectAndSend(object) { + addObjectAndSend = (object) => { this.objects.set(object.id, object); this.sendObject(object); - } - sendObject(object) { + }; + sendObject = (object) => { this.objectOutbox.set(object.id, object); this.sendMessagesInOutbox(); - } - deleteObject(object) { + }; + deleteObject = (object) => { this.objects.remove(object.id); this.objectOutbox.remove(object.id); - } + }; + resendObjects = () => { + this.objects.value.forEach((object) => { + this.sendObject(object); + }); + }; + clearObjects = () => { + this.objects.clear(); + }; // channel setChannel = () => { if (this.cannotSetChannel.value == true) return; @@ -905,7 +917,7 @@ primaryChannel: "Primary channel", primaryChannelPlaceholder: "my-channel", addChat: "Add", - // messages + // chat showChatOptions: "show chat options", configureChatTitle: "Configure Chat", secondaryChannel: "Secondary channel", @@ -915,12 +927,14 @@ encryptionKey: "Encryption key", encryptionKeyPlaceholder: "n10d2482dg283hg", showKey: "Show key", - removeChat: "Remove chat", + clearObjects: "Delete all objects", clearChatMessages: "Clear chat messages", + removeChat: "Remove chat", messageInOutbox: "Pending", noChatSelected: "No chat selected", composerPlaceholder: "Type a message...", sendMessage: "Send", + // messages resendMessage: "Resend message", decryptMessage: "Decrypt message", copyMessage: "Copy message", @@ -929,6 +943,7 @@ toggleChatTools: "toggle chat tools", objectTitle: "Object title", objectTitlePlaceholder: "My object", + resendObjects: "Resend all objects", deleteObject: "Delete object" }; var allTranslations = { @@ -1116,7 +1131,16 @@ "bind:value": chat.encryptionKey, "set:type": inputType } - ))), /* @__PURE__ */ createElement("label", { class: "inline margin-0" }, /* @__PURE__ */ createElement("input", { type: "checkbox", "bind:checked": shouldShowKey }), translation.showKey)), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("div", { class: "flex-column gap" }, /* @__PURE__ */ createElement( + ))), /* @__PURE__ */ createElement("label", { class: "inline margin-0" }, /* @__PURE__ */ createElement("input", { type: "checkbox", "bind:checked": shouldShowKey }), translation.showKey)), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("div", { class: "flex-column gap width-input" }, /* @__PURE__ */ createElement("button", { "on:click": chat.resendObjects }, translation.resendObjects, /* @__PURE__ */ createElement("span", { class: "icon" }, "replay"))), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("div", { class: "flex-column gap width-input" }, /* @__PURE__ */ createElement( + "button", + { + class: "danger", + "on:click": chat.clearObjects, + "toggle:disabled": chat.cannotClearObjects + }, + translation.clearObjects, + /* @__PURE__ */ createElement("span", { class: "icon" }, "delete_sweep") + ), /* @__PURE__ */ createElement( "button", { class: "danger", @@ -1124,8 +1148,8 @@ "toggle:disabled": chat.cannotClearMessages }, translation.clearChatMessages, - /* @__PURE__ */ createElement("span", { class: "icon" }, "delete_sweep") - ), /* @__PURE__ */ createElement("button", { class: "danger", "on:click": deleteChat }, translation.removeChat, /* @__PURE__ */ createElement("span", { class: "icon" }, "delete")))), /* @__PURE__ */ createElement("button", { "on:click": closeModal }, translation.close, /* @__PURE__ */ createElement("span", { class: "icon" }, "close")))); + /* @__PURE__ */ createElement("span", { class: "icon" }, "chat_error") + ), /* @__PURE__ */ createElement("button", { class: "danger", "on:click": deleteChat }, translation.removeChat, /* @__PURE__ */ createElement("span", { class: "icon" }, "delete_forever")))), /* @__PURE__ */ createElement("button", { "on:click": closeModal }, translation.close, /* @__PURE__ */ createElement("span", { class: "icon" }, "close")))); } // src/Views/Chat/itemDetailModal.tsx diff --git a/package.json b/package.json index aba530a7..0566e118 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "dependencies": { - "bloatless-react": "^1.3.4", + "bloatless-react": "^1.3.5", "esbuild": "latest", "udn-frontend": "^1.0.7-beta1" }, diff --git a/src/Model/chatModel.ts b/src/Model/chatModel.ts index 5b71ee8f..fa012f64 100644 --- a/src/Model/chatModel.ts +++ b/src/Model/chatModel.ts @@ -57,6 +57,7 @@ export class Chat { cannotSetChannel: React.State; cannotUndoChannel: React.State; cannotClearMessages: React.State; + cannotClearObjects: React.State; // init constructor(id: string = React.UUID()) { @@ -124,6 +125,10 @@ export class Chat { [this.messages], () => this.messages.value.size == 0 ); + this.cannotClearObjects = React.createProxyState( + [this.objects], + () => this.objects.value.size == 0 + ); } // general @@ -272,20 +277,30 @@ export class Chat { }; // objects - addObjectAndSend(object: MessageObject): void { + addObjectAndSend = (object: MessageObject): void => { this.objects.set(object.id, object); this.sendObject(object); - } + }; - sendObject(object: MessageObject): void { + sendObject = (object: MessageObject): void => { this.objectOutbox.set(object.id, object); this.sendMessagesInOutbox(); - } + }; - deleteObject(object: MessageObject): void { + deleteObject = (object: MessageObject): void => { this.objects.remove(object.id); this.objectOutbox.remove(object.id); - } + }; + + resendObjects = (): void => { + this.objects.value.forEach((object) => { + this.sendObject(object); + }); + }; + + clearObjects = (): void => { + this.objects.clear(); + }; // channel setChannel = (): void => { diff --git a/src/Views/Chat/chatOptionModal.tsx b/src/Views/Chat/chatOptionModal.tsx index cecaa584..6ab2fb44 100644 --- a/src/Views/Chat/chatOptionModal.tsx +++ b/src/Views/Chat/chatOptionModal.tsx @@ -131,19 +131,37 @@ export function ChatOptionModal(chat: Chat, isPresented: React.State) {
-
+
+ +
+ +
+ +
+ +
diff --git a/src/translations.ts b/src/translations.ts index 7eceabc9..408b7805 100644 --- a/src/translations.ts +++ b/src/translations.ts @@ -36,7 +36,7 @@ const englishTranslations = { primaryChannelPlaceholder: "my-channel", addChat: "Add", - // messages + // chat showChatOptions: "show chat options", configureChatTitle: "Configure Chat", @@ -49,8 +49,9 @@ const englishTranslations = { encryptionKeyPlaceholder: "n10d2482dg283hg", showKey: "Show key", - removeChat: "Remove chat", + clearObjects: "Delete all objects", clearChatMessages: "Clear chat messages", + removeChat: "Remove chat", messageInOutbox: "Pending", @@ -59,6 +60,7 @@ const englishTranslations = { composerPlaceholder: "Type a message...", sendMessage: "Send", + // messages resendMessage: "Resend message", decryptMessage: "Decrypt message", copyMessage: "Copy message", @@ -70,6 +72,7 @@ const englishTranslations = { objectTitle: "Object title", objectTitlePlaceholder: "My object", + resendObjects: "Resend all objects", deleteObject: "Delete object", };