3 changed files with 71 additions and 52 deletions
@ -0,0 +1,65 @@ |
|||||
|
import type React from "react"; |
||||
|
|
||||
|
import { useForm } from "react-hook-form"; |
||||
|
|
||||
|
import { Input } from "@app/components/form/Input.js"; |
||||
|
import { IconButton } from "@app/components/IconButton.js"; |
||||
|
import { useDevice } from "@core/providers/useDevice.js"; |
||||
|
import type { Channel } from "@core/stores/deviceStore.js"; |
||||
|
import { MapPinIcon, PaperAirplaneIcon } from "@heroicons/react/24/outline"; |
||||
|
import type { Types } from "@meshtastic/meshtasticjs"; |
||||
|
|
||||
|
export interface MessageInputProps { |
||||
|
channel: Channel; |
||||
|
} |
||||
|
|
||||
|
export const MessageInput = ({ channel }: MessageInputProps): JSX.Element => { |
||||
|
const { connection, ackMessage } = useDevice(); |
||||
|
|
||||
|
const { register, handleSubmit } = useForm<{ |
||||
|
message: string; |
||||
|
}>({ |
||||
|
defaultValues: { |
||||
|
message: "", |
||||
|
}, |
||||
|
}); |
||||
|
|
||||
|
const onSubmit = handleSubmit((data) => { |
||||
|
void connection?.sendText( |
||||
|
data.message, |
||||
|
undefined, |
||||
|
true, |
||||
|
channel.config.index as Types.ChannelNumber, |
||||
|
(id) => { |
||||
|
ackMessage(channel.config.index, id); |
||||
|
return Promise.resolve(); |
||||
|
} |
||||
|
); |
||||
|
}); |
||||
|
|
||||
|
return ( |
||||
|
<div className="flex gap-2"> |
||||
|
<form className="w-full" onSubmit={onSubmit}> |
||||
|
<div className="flex flex-grow gap-2"> |
||||
|
<span className="w-full"> |
||||
|
<Input |
||||
|
autoFocus |
||||
|
minLength={2} |
||||
|
label="" |
||||
|
placeholder="Enter Message" |
||||
|
{...register("message")} |
||||
|
/> |
||||
|
</span> |
||||
|
<IconButton |
||||
|
variant="secondary" |
||||
|
icon={<PaperAirplaneIcon className="h-4 text-slate-500" />} |
||||
|
/> |
||||
|
</div> |
||||
|
</form> |
||||
|
<IconButton |
||||
|
variant="secondary" |
||||
|
icon={<MapPinIcon className="h-4 text-slate-500" />} |
||||
|
/> |
||||
|
</div> |
||||
|
); |
||||
|
}; |
||||
Loading…
Reference in new issue