mirror of
https://github.com/tulir/gomuks.git
synced 2025-04-20 10:33:41 -05:00
web/composer: add support for multiline input
This commit is contained in:
parent
c5aac00985
commit
31d4164e51
3 changed files with 30 additions and 12 deletions
18
web/src/ui/MessageComposer.css
Normal file
18
web/src/ui/MessageComposer.css
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
div.message-composer {
|
||||||
|
display: flex;
|
||||||
|
border-top: 1px solid #ccc;
|
||||||
|
> textarea {
|
||||||
|
flex: 1;
|
||||||
|
resize: none;
|
||||||
|
font-family: sans-serif;
|
||||||
|
height: auto;
|
||||||
|
padding: .5rem;
|
||||||
|
border: none;
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
> button {
|
||||||
|
padding: .5rem;
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,6 +16,7 @@
|
||||||
import React, { use, useCallback, useState } from "react"
|
import React, { use, useCallback, useState } from "react"
|
||||||
import { RoomStateStore } from "../api/statestore.ts"
|
import { RoomStateStore } from "../api/statestore.ts"
|
||||||
import { ClientContext } from "./ClientContext.ts"
|
import { ClientContext } from "./ClientContext.ts"
|
||||||
|
import "./MessageComposer.css"
|
||||||
|
|
||||||
interface MessageComposerProps {
|
interface MessageComposerProps {
|
||||||
room: RoomStateStore
|
room: RoomStateStore
|
||||||
|
@ -30,16 +31,21 @@ const MessageComposer = ({ room }: MessageComposerProps) => {
|
||||||
client.rpc.sendMessage(room.roomID, text)
|
client.rpc.sendMessage(room.roomID, text)
|
||||||
.catch(err => window.alert("Failed to send message: " + err))
|
.catch(err => window.alert("Failed to send message: " + err))
|
||||||
}, [text, room, client])
|
}, [text, room, client])
|
||||||
return <form className="message-composer" onSubmit={sendMessage}>
|
return <div className="message-composer" onSubmit={sendMessage}>
|
||||||
<input
|
<textarea
|
||||||
autoFocus
|
autoFocus
|
||||||
type="text"
|
rows={text.split("\n").length}
|
||||||
value={text}
|
value={text}
|
||||||
|
onKeyDown={evt => {
|
||||||
|
if (evt.key === "Enter" && !evt.shiftKey) {
|
||||||
|
sendMessage(evt)
|
||||||
|
}
|
||||||
|
}}
|
||||||
onChange={evt => setText(evt.target.value)}
|
onChange={evt => setText(evt.target.value)}
|
||||||
placeholder="Send a message"
|
placeholder="Send a message"
|
||||||
/>
|
/>
|
||||||
<button type="submit">Send</button>
|
<button type="submit">Send</button>
|
||||||
</form>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
export default MessageComposer
|
export default MessageComposer
|
||||||
|
|
|
@ -2,10 +2,11 @@ div.room-view {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
display: grid;
|
display: grid;
|
||||||
|
border-left: 2px solid #ccc;
|
||||||
grid-template:
|
grid-template:
|
||||||
"header" 3rem
|
"header" 3rem
|
||||||
"messageview" 1fr
|
"messageview" 1fr
|
||||||
"input" 2rem
|
"input" auto
|
||||||
/ 1fr;
|
/ 1fr;
|
||||||
|
|
||||||
> div.room-header {
|
> div.room-header {
|
||||||
|
@ -20,10 +21,3 @@ div.room-view {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
form.message-composer {
|
|
||||||
display: flex;
|
|
||||||
> input {
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue