add composer, update cannotSendMessage guard to block empty messages
This commit is contained in:
Vendored
+7
@@ -344,6 +344,13 @@ main {
|
|||||||
}
|
}
|
||||||
#message-page #composer {
|
#message-page #composer {
|
||||||
border-top: 1px solid var(--border);
|
border-top: 1px solid var(--border);
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
#message-page #composer input {
|
||||||
|
margin: 0px;
|
||||||
|
width: 100%;
|
||||||
|
max-width: unset;
|
||||||
|
flex: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* src/View/Components/chatEntry.css */
|
/* src/View/Components/chatEntry.css */
|
||||||
|
|||||||
Vendored
+27
-7
@@ -738,8 +738,8 @@
|
|||||||
() => this.encryptionKeyInput.value == this.chatModel.info.encryptionKey
|
() => this.encryptionKeyInput.value == this.chatModel.info.encryptionKey
|
||||||
);
|
);
|
||||||
this.cannotSendMessage = createProxyState(
|
this.cannotSendMessage = createProxyState(
|
||||||
[this.settingsViewModel.username],
|
[this.settingsViewModel.username, this.composingMessage],
|
||||||
() => this.settingsViewModel.username.value == ""
|
() => this.settingsViewModel.username.value == "" || this.composingMessage.value == ""
|
||||||
);
|
);
|
||||||
this.color.value = chatModel.color;
|
this.color.value = chatModel.color;
|
||||||
this.restoreSecondaryChannels();
|
this.restoreSecondaryChannels();
|
||||||
@@ -835,11 +835,6 @@
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// src/View/ChatPages/messagePage.tsx
|
|
||||||
function MessagePage(chatViewModel) {
|
|
||||||
return /* @__PURE__ */ createElement("div", { id: "message-page" }, /* @__PURE__ */ createElement("div", { class: "toolbar" }, /* @__PURE__ */ createElement("span", { "subscribe:innerText": chatViewModel.primaryChannel })), /* @__PURE__ */ createElement("div", { class: "content" }, /* @__PURE__ */ createElement("div", { id: "message-container" }), /* @__PURE__ */ createElement("div", { id: "composer" })));
|
|
||||||
}
|
|
||||||
|
|
||||||
// src/View/translations.ts
|
// src/View/translations.ts
|
||||||
var englishTranslations = {
|
var englishTranslations = {
|
||||||
general: {
|
general: {
|
||||||
@@ -914,6 +909,10 @@
|
|||||||
setEncryptionKeyButtonAudioLabel: "set encryption key",
|
setEncryptionKeyButtonAudioLabel: "set encryption key",
|
||||||
showEncryptionKey: "Show encryption key",
|
showEncryptionKey: "Show encryption key",
|
||||||
deleteChatButton: "Delete entire chat"
|
deleteChatButton: "Delete entire chat"
|
||||||
|
},
|
||||||
|
message: {
|
||||||
|
composerInputPlaceholder: "Type a message...",
|
||||||
|
sendMessageButtonAudioLabel: "send message"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -923,6 +922,27 @@
|
|||||||
var language = navigator.language.substring(0, 2);
|
var language = navigator.language.substring(0, 2);
|
||||||
var translations = allTranslations[language] || allTranslations.en;
|
var translations = allTranslations[language] || allTranslations.en;
|
||||||
|
|
||||||
|
// src/View/ChatPages/messagePage.tsx
|
||||||
|
function MessagePage(chatViewModel) {
|
||||||
|
return /* @__PURE__ */ createElement("div", { id: "message-page" }, /* @__PURE__ */ createElement("div", { class: "toolbar" }, /* @__PURE__ */ createElement("span", { "subscribe:innerText": chatViewModel.primaryChannel })), /* @__PURE__ */ createElement("div", { class: "content" }, /* @__PURE__ */ createElement("div", { id: "message-container" }), /* @__PURE__ */ createElement("div", { id: "composer" }, /* @__PURE__ */ createElement(
|
||||||
|
"input",
|
||||||
|
{
|
||||||
|
"bind:value": chatViewModel.composingMessage,
|
||||||
|
"on:enter": chatViewModel.sendMessage,
|
||||||
|
placeholder: translations.chatPage.message.composerInputPlaceholder
|
||||||
|
}
|
||||||
|
), /* @__PURE__ */ createElement(
|
||||||
|
"button",
|
||||||
|
{
|
||||||
|
class: "primary",
|
||||||
|
"aria-label": translations.chatPage.message.sendMessageButtonAudioLabel,
|
||||||
|
"on:click": chatViewModel.sendMessage,
|
||||||
|
"toggle:disabled": chatViewModel.cannotSendMessage
|
||||||
|
},
|
||||||
|
/* @__PURE__ */ createElement("span", { class: "icon" }, "send")
|
||||||
|
))));
|
||||||
|
}
|
||||||
|
|
||||||
// src/View/Components/deletableListItem.tsx
|
// src/View/Components/deletableListItem.tsx
|
||||||
function DeletableListItem(text, primaryButton, ondelete) {
|
function DeletableListItem(text, primaryButton, ondelete) {
|
||||||
return /* @__PURE__ */ createElement("div", { class: "tile flex-row justify-apart align-center padding-0" }, /* @__PURE__ */ createElement("span", { class: "padding-h" }, text), /* @__PURE__ */ createElement("div", { class: "flex-row justify-end" }, primaryButton, /* @__PURE__ */ createElement(
|
return /* @__PURE__ */ createElement("div", { class: "tile flex-row justify-apart align-center padding-0" }, /* @__PURE__ */ createElement("span", { class: "padding-h" }, text), /* @__PURE__ */ createElement("div", { class: "flex-row justify-end" }, primaryButton, /* @__PURE__ */ createElement(
|
||||||
|
|||||||
@@ -15,4 +15,15 @@
|
|||||||
/* composer */
|
/* composer */
|
||||||
#message-page #composer {
|
#message-page #composer {
|
||||||
border-top: 1px solid var(--border);
|
border-top: 1px solid var(--border);
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
#message-page #composer input {
|
||||||
|
margin: 0px;
|
||||||
|
|
||||||
|
width: 100%;
|
||||||
|
max-width: unset;
|
||||||
|
|
||||||
|
flex: 1;
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,7 @@ import "./messagePage.css";
|
|||||||
import * as React from "bloatless-react";
|
import * as React from "bloatless-react";
|
||||||
|
|
||||||
import ChatViewModel from "../../ViewModel/chatViewModel";
|
import ChatViewModel from "../../ViewModel/chatViewModel";
|
||||||
|
import { translations } from "../translations";
|
||||||
|
|
||||||
export function MessagePage(chatViewModel: ChatViewModel) {
|
export function MessagePage(chatViewModel: ChatViewModel) {
|
||||||
return (
|
return (
|
||||||
@@ -12,7 +13,23 @@ export function MessagePage(chatViewModel: ChatViewModel) {
|
|||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div id="message-container"></div>
|
<div id="message-container"></div>
|
||||||
<div id="composer"></div>
|
<div id="composer">
|
||||||
|
<input
|
||||||
|
bind:value={chatViewModel.composingMessage}
|
||||||
|
on:enter={chatViewModel.sendMessage}
|
||||||
|
placeholder={translations.chatPage.message.composerInputPlaceholder}
|
||||||
|
></input>
|
||||||
|
<button
|
||||||
|
class="primary"
|
||||||
|
aria-label={
|
||||||
|
translations.chatPage.message.sendMessageButtonAudioLabel
|
||||||
|
}
|
||||||
|
on:click={chatViewModel.sendMessage}
|
||||||
|
toggle:disabled={chatViewModel.cannotSendMessage}
|
||||||
|
>
|
||||||
|
<span class="icon">send</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -98,6 +98,11 @@ const englishTranslations = {
|
|||||||
|
|
||||||
deleteChatButton: "Delete entire chat",
|
deleteChatButton: "Delete entire chat",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
message: {
|
||||||
|
composerInputPlaceholder: "Type a message...",
|
||||||
|
sendMessageButtonAudioLabel: "send message",
|
||||||
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -155,8 +155,10 @@ export default class ChatViewModel {
|
|||||||
);
|
);
|
||||||
|
|
||||||
this.cannotSendMessage = React.createProxyState(
|
this.cannotSendMessage = React.createProxyState(
|
||||||
[this.settingsViewModel.username],
|
[this.settingsViewModel.username, this.composingMessage],
|
||||||
() => this.settingsViewModel.username.value == ""
|
() =>
|
||||||
|
this.settingsViewModel.username.value == "" ||
|
||||||
|
this.composingMessage.value == ""
|
||||||
);
|
);
|
||||||
|
|
||||||
this.color.value = chatModel.color;
|
this.color.value = chatModel.color;
|
||||||
|
|||||||
Reference in New Issue
Block a user