Carbon/src/js/chat-input.js

61 lines
1.3 KiB
JavaScript

import { q } from "./basic.js";
import { store } from "./store/store.js";
import * as lsm from "./lsm.js";
import { chat } from "./chat.js";
let sentIndex = 0;
const input = q("#c-chat-textarea");
store.activeRoom.subscribe("changeSelf", () => {
if (store.activeRoom.exists()) {
input.focus();
}
});
input.addEventListener("keydown", (event) => {
if (event.key === "Enter" && !event.shiftKey && !event.ctrlKey) {
event.preventDefault();
const body = input.value;
send(input.value);
input.value = "";
fixHeight();
}
});
input.addEventListener("input", () => {
fixHeight();
});
function fixHeight() {
input.style.height = "0px";
// console.log(input.clientHeight, input.scrollHeight)
input.style.height = input.scrollHeight + 1 + "px";
}
function getTxnId() {
return Date.now() + sentIndex++;
}
function send(body) {
if (!store.activeRoom.exists()) return;
const id = store.activeRoom.value().id;
return fetch(
`${lsm.get(
"domain"
)}/_matrix/client/r0/rooms/${id}/send/m.room.message/${getTxnId()}?access_token=${lsm.get(
"access_token"
)}`,
{
method: "PUT",
body: JSON.stringify({
msgtype: "m.text",
body,
}),
headers: {
"Content-Type": "application/json",
},
}
);
}