From 0b2140ed2fafa8c0e9384074c2372256adac06de Mon Sep 17 00:00:00 2001 From: Sacha Weatherstone Date: Sun, 8 Jan 2023 08:55:43 +1000 Subject: [PATCH] Persist message draft --- .../PageComponents/Messages/MessageInput.tsx | 31 +++++++++---------- src/core/stores/deviceStore.ts | 15 +++++++++ 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/src/components/PageComponents/Messages/MessageInput.tsx b/src/components/PageComponents/Messages/MessageInput.tsx index f2864c27..a0d21dc6 100644 --- a/src/components/PageComponents/Messages/MessageInput.tsx +++ b/src/components/PageComponents/Messages/MessageInput.tsx @@ -1,7 +1,5 @@ import type React from "react"; -import { useForm } from "react-hook-form"; - import { IconButton } from "@app/components/form/IconButton.js"; import { Input } from "@app/components/form/Input.js"; import { useDevice } from "@core/providers/useDevice.js"; @@ -14,20 +12,13 @@ export interface MessageInputProps { } export const MessageInput = ({ channel }: MessageInputProps): JSX.Element => { - const { connection, setMessageState } = useDevice(); - - const { register, handleSubmit } = useForm<{ - message: string; - }>({ - defaultValues: { - message: "" - } - }); + const { connection, setMessageState, messageDraft, setMessageDraft } = + useDevice(); - const onSubmit = handleSubmit(async (data) => { + const sendText = async (message: string) => { await connection ?.sendText({ - text: data.message, + text: message, wantAck: true, channel: channel.config.index as Types.ChannelNumber }) @@ -35,11 +26,18 @@ export const MessageInput = ({ channel }: MessageInputProps): JSX.Element => { .catch((e: Types.PacketError) => setMessageState(channel.config.index, e.id, e.error) ); - }); + }; return (
-
+ { + e.preventDefault(); + sendText(messageDraft); + setMessageDraft(""); + }} + >
{ minLength={2} label="" placeholder="Enter Message" - {...register("message")} + value={messageDraft} + onChange={(e) => setMessageDraft(e.target.value)} /> void; @@ -101,6 +102,7 @@ export interface Device { setShutdownDialogOpen: (open: boolean) => void; setRebootDialogOpen: (open: boolean) => void; processPacket: (data: processPacketParams) => void; + setMessageDraft: (message: string) => void; } export interface DeviceState { @@ -141,6 +143,7 @@ export const useDeviceStore = create((set, get) => ({ shutdownDialogOpen: false, rebootDialogOpen: false, pendingSettingsChanges: false, + messageDraft: "", setReady: (ready: boolean) => { set( @@ -231,6 +234,8 @@ export const useDeviceStore = create((set, get) => ({ device.moduleConfig.cannedMessage = config.payloadVariant.cannedMessage; break; + case "audio": + device.moduleConfig.audio = config.payloadVariant.audio; } } }) @@ -548,6 +553,16 @@ export const useDeviceStore = create((set, get) => ({ } }) ); + }, + setMessageDraft: (message: string) => { + set( + produce((draft) => { + const device = draft.devices.get(id); + if (device) { + device.messageDraft = message; + } + }) + ); } }); })