개발 노트

정렬기능 보완 본문

React

정렬기능 보완

한츄 2024. 2. 27. 09:38

RMAN/WEB데이터를 제외한 나머지 데이터 업데이트 시에만 업데이트 순으로 정렬하게 변경

 

1. 특정토픽일 때 정렬하도록 정규식을 사용하여 와일드카드 문자를 사용할 수 있게 적용

export const extractTimeFromSpecificTopics = (topic: string, message: string): string => {
  const specificTopics = ['dawoon/Robot/#', 'dawoon/Feeder/#', 'dawoon/SMARTGATE/#'];

  // 토픽이 특정 토픽에 속하면 시간을 추출, 그렇지 않으면 빈 문자열을 반환
  if (specificTopics.some((specificTopic) => new RegExp(`^${specificTopic.replace('#', '.*')}`).test(topic))) {
    return extractTime(message);
  } else {
    return '';
  }
}

 

 

2. 정렬부분 코드 수정

각각의 시간값을 가져온 뒤 위에 함수를 적용시켜 내림차순으로 정렬

  if (activeSortButton === 'update') {
    sortedFarmCodes = farmCodes.sort((a, b) => {
      const messagesA = groupedMessages[a].messages.filter(message => ['dawoon/Robot/#', 'dawoon/Feeder/#', 'dawoon/SMARTGATE/#'].some(topic => new RegExp(`^${topic.replace('#', '.*')}`).test(message.topic)));
      const messagesB = groupedMessages[b].messages.filter(message => ['dawoon/Robot/#', 'dawoon/Feeder/#', 'dawoon/SMARTGATE/#'].some(topic => new RegExp(`^${topic.replace('#', '.*')}`).test(message.topic)));
      const lastMessageTimeA = messagesA.length > 0 ? extractTimeFromSpecificTopics(messagesA[messagesA.length - 1].topic, messagesA[messagesA.length - 1].message) : 0;
      const lastMessageTimeB = messagesB.length > 0 ? extractTimeFromSpecificTopics(messagesB[messagesB.length - 1].topic, messagesB[messagesB.length - 1].message) : 0;
      return new Date(lastMessageTimeB).getTime() - new Date(lastMessageTimeA).getTime(); // 내림차순 정렬
    });
  }