Untitled

Untitled

현재는 수로 점수, 플래그 점수로만 관리자 페이지의 필터링이 가능한 상태인데 우리 길드 마스터의 요청으로 관리자 페이지에 길드원 이름으로 필터링 기능을 추가했다.

기존에 필터링 로직이 있었기 때문에 character_name만 추가하면 돼서 아주 간단한 작업이었다!

interface Filter {
  value: number;
  operator: string;
}

interface Filters {
  character_name: string;
  suro_score: Filter;
  flag_score: Filter;
  logical_operator: string;
}

// 초기 상태 정의
const initialFilters: Filters = {
  character_name: "",
  suro_score: { value: 0, operator: "min" },
  flag_score: { value: 0, operator: "min" },
  logical_operator: "and",
};

---

const getFilteredRowIds = () => {
    return tableData.filter((row) => {
      const characterName = filters.character_name.toLowerCase(); // 대소문자 구분 없애기 위해 소문자로 변경
      const suroScore = filters.suro_score.value;
      const flagScore = filters.flag_score.value;

      const characterNameCondition =
        characterName === "" || row.character_name.toLowerCase().includes(characterName);

      const suroCondition =
        suroScore === undefined ||
        (filters.suro_score.operator === "max"
          ? row.suro_score <= suroScore
          : row.suro_score >= suroScore);
      const flagCondition =
        flagScore === undefined ||
        (filters.flag_score.operator === "max"
          ? row.flag_score <= flagScore
          : row.flag_score >= flagScore);

      if (filters.logical_operator === "and") {
        return ( suroCondition && flagCondition ) && characterNameCondition;
      } else {
        return ( suroCondition || flagCondition ) && characterNameCondition;
      }
    });
  };

---

 <TextField
            label="닉네임"
            variant="outlined"
            style={{ marginRight: "5px" }}
            size="small"
            value={filters.character_name}
            onChange={(e) =>
              setFilters({
                ...filters,
                character_name: e.target.value
              })
            }
          />

작업 하는 김에 페이지에 길드 정보도 추가하고, 조금 더 보기 좋게 해봤다!

요구 사항에 맞춰 기능 추가하는 것도 너무너무 재미있고 뿌듯한 것 같다.

Untitled

Untitled

Untitled