Files
kandev/apps/web/hooks/use-message-navigation.ts
T
2026-02-06 23:53:58 +00:00

36 lines
1.1 KiB
TypeScript

import { useMemo } from 'react';
import type { Message } from '@/lib/types/http';
export function useMessageNavigation(
messages: Message[],
currentMessageId: string,
filterType: 'user' | 'agent'
) {
const currentIndex = useMemo(() => {
return messages.findIndex(msg => msg.id === currentMessageId);
}, [messages, currentMessageId]);
const filteredIndices = useMemo(() => {
return messages
.map((msg, idx) => (msg.author_type === filterType ? idx : -1))
.filter(idx => idx !== -1);
}, [messages, filterType]);
const previous = useMemo(() => {
const validPrev = filteredIndices.filter(idx => idx < currentIndex);
return validPrev.length > 0 ? messages[validPrev[validPrev.length - 1]] : null;
}, [filteredIndices, currentIndex, messages]);
const next = useMemo(() => {
const validNext = filteredIndices.filter(idx => idx > currentIndex);
return validNext.length > 0 ? messages[validNext[0]] : null;
}, [filteredIndices, currentIndex, messages]);
return {
hasPrevious: previous !== null,
hasNext: next !== null,
previous,
next,
};
}