Skip to content

Commit

Permalink
Merge pull request meshtastic#405 from Hunter275/issue-402-message-le…
Browse files Browse the repository at this point in the history
…ngth-limit

Limit the length of messages to 200 bytes
  • Loading branch information
fifieldt authored Feb 6, 2025
2 parents 30158ca + 430e0cb commit d53acf2
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 3 deletions.
2 changes: 1 addition & 1 deletion src/components/PageComponents/Messages/ChannelChat.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ export const ChannelChat = ({
</div>
</div>
<div className="pl-3 pr-3 pt-3 pb-1">
<MessageInput to={to} channel={channel} />
<MessageInput to={to} channel={channel} maxBytes={200} />
</div>
</div>
);
Expand Down
14 changes: 12 additions & 2 deletions src/components/PageComponents/Messages/MessageInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@ import { useCallback, useMemo, useState } from "react";
export interface MessageInputProps {
to: Types.Destination;
channel: Types.ChannelNumber;
maxBytes: number;
}

export const MessageInput = ({
to,
channel,
maxBytes,
}: MessageInputProps): JSX.Element => {
const {
connection,
Expand All @@ -24,6 +26,7 @@ export const MessageInput = ({
} = useDevice();
const myNodeNum = hardware.myNodeNum;
const [localDraft, setLocalDraft] = useState(messageDraft);
const [messageBytes, setMessageBytes] = useState(maxBytes);

const debouncedSetMessageDraft = useMemo(
() => debounce(setMessageDraft, 300),
Expand Down Expand Up @@ -60,8 +63,12 @@ export const MessageInput = ({

const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {
const newValue = e.target.value;
setLocalDraft(newValue);
debouncedSetMessageDraft(newValue);
const byteLength = new Blob([newValue]).size;
if (byteLength <= maxBytes) {
setLocalDraft(newValue);
debouncedSetMessageDraft(newValue);
setMessageBytes(maxBytes - byteLength);
}
};

return (
Expand All @@ -85,6 +92,9 @@ export const MessageInput = ({
onChange={handleInputChange}
/>
</span>
<div className="flex items-center">
{messageBytes}/{maxBytes}
</div>
<Button type="submit">
<SendIcon size={16} />
</Button>
Expand Down

0 comments on commit d53acf2

Please sign in to comment.