You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

use-cache-chat-log.ts 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import {
  2. IEventList,
  3. INodeEvent,
  4. MessageEventType,
  5. } from '@/hooks/use-send-message';
  6. import { useCallback, useMemo, useState } from 'react';
  7. export const ExcludeTypes = [
  8. MessageEventType.Message,
  9. MessageEventType.MessageEnd,
  10. ];
  11. export function useCacheChatLog() {
  12. const [eventList, setEventList] = useState<IEventList>([]);
  13. const [currentMessageId, setCurrentMessageId] = useState('');
  14. const filterEventListByMessageId = useCallback(
  15. (messageId: string) => {
  16. return eventList.filter((x) => x.message_id === messageId);
  17. },
  18. [eventList],
  19. );
  20. const filterEventListByEventType = useCallback(
  21. (eventType: string) => {
  22. return eventList.filter((x) => x.event === eventType);
  23. },
  24. [eventList],
  25. );
  26. const clearEventList = useCallback(() => {
  27. setEventList([]);
  28. }, []);
  29. const addEventList = useCallback((events: IEventList) => {
  30. setEventList((list) => {
  31. const nextList = [...list];
  32. events.forEach((x) => {
  33. if (nextList.every((y) => y !== x)) {
  34. nextList.push(x);
  35. }
  36. });
  37. return nextList;
  38. });
  39. }, []);
  40. const currentEventListWithoutMessage = useMemo(() => {
  41. const list = eventList.filter(
  42. (x) =>
  43. x.message_id === currentMessageId &&
  44. ExcludeTypes.every((y) => y !== x.event),
  45. );
  46. return list as INodeEvent[];
  47. }, [currentMessageId, eventList]);
  48. return {
  49. eventList,
  50. currentEventListWithoutMessage,
  51. setEventList,
  52. clearEventList,
  53. addEventList,
  54. filterEventListByEventType,
  55. filterEventListByMessageId,
  56. setCurrentMessageId,
  57. currentMessageId,
  58. };
  59. }