36 lines
1.1 KiB
TypeScript
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,
|
|
};
|
|
}
|