Skip to content

useCheckList #132

Description

@jin123457

어떤 훅인가요?

추가하려는 훅에 대해 간결하게 설명해주세요!

체크 가능한 리스트의 상태를 효율적으로 관리하는 훅입니다.
개별 항목의 선택/해제, 전체 선택, 선택된 아이템 목록 조회 등 체크박스 기반 UI에서 반복적으로 등장하는 로직을 간결하게 관리할 수 있습니다.

/** 체크 가능한 아이템의 최소 형태 */
export interface CheckableItem {
  id: string | number;
  checked: boolean;
}

/** T에서 id 타입만 뽑아내기 위한 유틸 */
export type IdType<T extends { id: string | number }> = T["id"];

/** useCheckList 훅 반환 타입 */
export interface UseCheckListResult<T extends CheckableItem> {
  list: T[];
  set: (items: T[]) => void;
  isChecked: (id: IdType<T>) => boolean | undefined;
  isAllChecked: () => boolean;
  check: (id: IdType<T>) => void;
  unCheck: (id: IdType<T>) => void;
  toggle: (id: IdType<T>) => void;
  updateItem: (id: IdType<T>, checked: boolean) => void;
  toggleAll: () => void;
  checkAll: () => void;
  unCheckAll: () => void;
  updateAll: (checked: boolean) => void;
  getCheckedList: () => T[];
  getCheckedIds: () => IdType<T>[];
  selectedCount?: number;
  totalCount?: number;
  isIndeterminate?: () => boolean;
}

/** 훅 시그니처 */
export type UseCheckListHook = <T extends CheckableItem>(
  initialItems: T[]
) => UseCheckListResult<T>;

이 훅을 선정한 이유? (선택)

이 훅을 선정한 이유에 대해 설명해주세요!

모아온 프로젝트를 할 때 다중선택하는 필터가 꽤 많은데 그럴 때 이 훅이 있으면 유용하게 사용할 수 있을 것 같고 상태관리 하기도 편할 것 같다고 생각했습니다~

참고할만한 자료(선택)

Slash 라이브러리 - useCheckList

Metadata

Metadata

Assignees

Labels

훅 개발New feature or request

Fields

No fields configured for Feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions