Clear errors on settings tab switch, streamline message mark-as-read, don't resort on render

This commit is contained in:
Jack Kingsman
2026-02-07 21:14:58 -08:00
parent 0abe2194b5
commit a9d9d7a7b4
4 changed files with 30 additions and 7 deletions
+13 -2
View File
@@ -1,4 +1,12 @@
import { useEffect, useLayoutEffect, useRef, useCallback, useState, type ReactNode } from 'react';
import {
useEffect,
useLayoutEffect,
useRef,
useCallback,
useMemo,
useState,
type ReactNode,
} from 'react';
import type { Contact, Message, MessagePath, RadioConfig } from '../types';
import { CONTACT_TYPE_REPEATER } from '../types';
import { formatTime, parseSenderFromText } from '../utils/messageParser';
@@ -296,7 +304,10 @@ export function MessageList({
// Sort messages by received_at ascending (oldest first)
// Note: Deduplication is handled by useConversationMessages.addMessageIfNew()
// and the database UNIQUE constraint on (type, conversation_key, text, sender_timestamp)
const sortedMessages = [...messages].sort((a, b) => a.received_at - b.received_at);
const sortedMessages = useMemo(
() => [...messages].sort((a, b) => a.received_at - b.received_at),
[messages]
);
// Helper to get a unique sender key for grouping messages
const getSenderKey = (msg: Message, sender: string | null): string => {
+4 -1
View File
@@ -485,7 +485,10 @@ export function SettingsModal({
) : (
<Tabs
value={activeTab}
onValueChange={(v) => setActiveTab(v as SettingsTab)}
onValueChange={(v) => {
setActiveTab(v as SettingsTab);
setError('');
}}
className="w-full"
>
<TabsList className="grid w-full grid-cols-5">