카테고리 없음

Til (2023.02.22)

prdg 2023. 2. 24. 09:39

유저 검색 로직 트러블 슈팅

 

유저 검색 로직중 하나이다. 원래 두번째 for문 안의 if 뒤에 return할 부분이 들어있었는데 원하는대로 필터링이 되지 않았다. 이유는 모르겠지만 return할 부분을 for문 밖으로 아예 빼주니까 정상적으로 작동됐다. 시도해봤던 것 중에 recoil에서 selector를 사용해 결과 값을 필터 해주려고 해봤다. 첫번째 selector는 잘 작동했는데 그 selector로 만든걸 다른 selector에서 다시 사용하려할때 생기는 오류도 있었다.

const alreadyFriend = friendAllRecoil?.filter((i: FriendSearchProps) => {
    for (let t = 0; t < getFriendAuth.length; t++) {
      if (frendSearchInput === "") {
        return false;
      } else if (
        getFriendAuth[t].friendId === i.id &&
        getFriendAuth[t].myId === myId
      ) {
        const lowercaseNickname = i?.nickname.toLowerCase();
        const lowercaseSearchInput = frendSearchInput?.toLowerCase();
        return lowercaseNickname?.includes(lowercaseSearchInput);
      }
    }
  });

const friendSearch = friendAllRecoil?.filter((i: FriendSearchProps) => {
    for (let item = 0; item < friendAdd.length; item++) {
      if (i.id === friendAdd[item].myId) {
        return false;
      }
    }
    // 현재 친구상태면 안보이게
    for (let t = 0; t < alreadyFriend.length; t++) {
      if (alreadyFriend[t].id === i.id) {
        return false;
      }
    }
		//여기부터 return할 부분(오류났었던 부분)
    //대문자 검색
    const lowercaseNickname = i.nickname?.toLowerCase();
    const lowercaseSearchInput = frendSearchInput?.toLowerCase();
    if (i.id === myId || frendSearchInput === "") {
      return false;
    } else if (lowercaseNickname.includes(lowercaseSearchInput)) {
      return true;
    }
  });

//recoil atom

export const getFriend = atom<any>({
  key: "friendAddState",
  default: [],
});

export const newFriendAdd = selector({
  key: "newFriendAdd",
  get: ({ get }) => {
    const friendAddAll = get(getFriend);
    const completed = friendAddAll.filter((i: any) => i.friendId === myId);
    return [completed];
  },
});

/* 오류 */
export const BothFriend = selector({
  key: "BothFriend",
  get: ({ get }) => {
    const getFriendAuth = get(getFriend);
    const friendAdd = get(newFriendAdd);

    const completed = getFriendAuth?.filter((i: any) => {
      for (let t = 0; t < friendAdd.length; t++) {
        if (
          friendAdd[t].friendId === i.myId &&
          friendAdd[t].myId === i.friendId
        ) {
          return i.myId === myId;
        } else if (
          friendAdd[t].friendId === i.myId &&
          friendAdd[t].myId === i.friendId
        ) {
          return i.myId === myId;
        }
        return false;
      }
    });
    return [completed];
  },
});