특정 사용자가 1분안에 50개의 채팅을 보내면

첫번째 채팅에만 프로필을 보여주어야한다.

Untitled

프로필을 보여주는 케이스

  1. 특정 유저의 채팅이 해당 시각에 첫 번째 채팅이면 보여준다.
시각 채팅 내용 프로필 표시 여부 userId
09:56 안녕 o 1
09:56 이 프로젝트 x 1
09:56 좋아 x 1
09:56 맞지 x 1
09:56 ? x 1
  1. 특정 유저의 채팅이 해당 시각에 첫 번째 채팅이 아니지만 앞 채팅과 유저 정보가 다르면 보여준다.
시각 채팅 내용 프로필 표시 여부 userId
09:56 안녕 o 1
09:56 안녕하세요! o 2
09:56 좋아 o 1
09:56 맞지 x 1
09:56 ? x 1
  1. 시간대가 다르면 보여준다.
시각 채팅 내용 프로필 표시 여부 userId
09:56 안녕 o 1
09:57 안녕하세요! o 1
09:57 좋아 o 2
09:57 맞지 x 2
09:57 ? x 2

위의 케이스를 고려하여 완성된 로직은 다음과 같다.

const checkIsFirstChatFromUser = (
  targetIndex: number,
  chatLogData: Array<[string, ChatLog]>
): boolean => {
  if (targetIndex === 0) {
    return true;
  }

  const prevData = chatLogData[targetIndex - 1][1];
  const targetData = chatLogData[targetIndex][1];

  const prevTime = getTimeByDate(new Date(prevData.time));
  const targetTime = getTimeByDate(new Date(targetData.time));

  return prevTime !== targetTime || prevData.userId !== targetData.userId;
};