UNPKG

@modern-kit/react

Version:
1 lines 2.9 kB
{"version":3,"file":"index.mjs","sources":["../../../src/hooks/useCycleList/index.ts"],"sourcesContent":["import { SetStateAction } from 'react';\nimport { StepAction, useStep } from '../useStep';\n\ninterface UseCycleListReturnType<T> {\n currentItem: T;\n nextIndex: (action?: StepAction) => void;\n prevIndex: (action?: StepAction) => void;\n setIndex: (index: SetStateAction<number>, action?: StepAction) => void;\n resetIndex: (action?: StepAction) => void;\n}\n/**\n * @description 배열을 요소를 `순환`하며 다음 인덱스, 이전 인덱스, 특정 인덱스, 초기 인덱스로 이동 할 수 있는 기능을 제공하는 훅입니다.\n *\n * 이동 함수 호출 시 `action` 함수를 인자로 넣어 원하는 action을 실행 시킬 수 있습니다.\n *\n * @template T - 배열 요소의 타입.\n * @param {[T[] | readonly T[]]} arr - 순환할 요소들을 포함한 배열입니다. 읽기 전용 배열일 수도 있습니다.\n * @param {number} [initialIndex=0] - 순환을 시작할 초기 인덱스입니다. 기본값은 0입니다.\n * @returns {UseCycleListReturnType<T>} 현재 배열의 요소와 인덱스를 조작할 수 있는 함수들을 반환합니다\n * - `currentItem`: 현재 인덱스에 해당하는 배열 요소입니다.\n * - `nextIndex`: 배열의 다음 요소로 인덱스를 이동하는 함수입니다.\n * - `prevIndex`: 배열의 이전 요소로 인덱스를 이동하는 함수입니다.\n * - `setIndex`: 인덱스를 지정된 값으로 설정하는 함수입니다. 함수형 업데이트도 지원합니다.\n * - `resetIndex`: 인덱스를 초기 값으로 설정하는 함수입니다.\n *\n * @example\n * const { currentItem, nextIndex, prevIndex, setIndex } = useCycleList(['a', 'b', 'c']);\n *\n * currentItem; // 'a'\n *\n * nextIndex();\n * currentItem; // 'b'\n *\n * prevIndex();\n * currentItem; // 'a'\n *\n * setIndex(2);\n * currentItem; // 'c'\n *\n * resetIndex();\n * currentItem; // 'a'\n */\nexport function useCycleList<T>(\n arr: T[] | readonly T[],\n initialIndex: number = 0\n): UseCycleListReturnType<T> {\n const { currentStep, goToNextStep, goToPrevStep, setStep, resetStep } =\n useStep({\n maxStep: arr.length - 1,\n initialStep: initialIndex,\n infinite: true,\n });\n\n return {\n currentItem: arr[currentStep],\n nextIndex: goToNextStep,\n prevIndex: goToPrevStep,\n setIndex: setStep,\n resetIndex: resetStep,\n };\n}\n"],"names":[],"mappings":";;;;AA0CO,SAAS,YAAA,CACd,GAAA,EACA,YAAA,GAAuB,CAAA,EACI;AAC3B,EAAA,MAAM,EAAE,WAAA,EAAa,YAAA,EAAc,cAAc,OAAA,EAAS,SAAA,KACxD,OAAA,CAAQ;AAAA,IACN,OAAA,EAAS,IAAI,MAAA,GAAS,CAAA;AAAA,IACtB,WAAA,EAAa,YAAA;AAAA,IACb,QAAA,EAAU;AAAA,GACX,CAAA;AAEH,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,IAAI,WAAW,CAAA;AAAA,IAC5B,SAAA,EAAW,YAAA;AAAA,IACX,SAAA,EAAW,YAAA;AAAA,IACX,QAAA,EAAU,OAAA;AAAA,IACV,UAAA,EAAY;AAAA,GACd;AACF;;;;"}