UNPKG

rn-single-multi-deletable-select

Version:

A react native reusable component with 3 options: single select, multi select and deletable items with option to show image and text or just text.

66 lines (57 loc) 1.99 kB
import {useEffect, useRef, useState} from "react"; import UseHorizontalSliderProps from "./interfaces"; import {ListItem} from "../interfaces"; const useHorizontalSlider = ({ list, isMultySelection, ...props }: UseHorizontalSliderProps) => { const [listOfData, setlistOfData] = useState<ListItem[]>([...list]); const [selectedItemsIndexs, setSelectedItemsIndexs] = useState([]); const [viewHeight, setViewHeight] = useState(0); const scrollRef = useRef(null); useEffect(() => { if (listOfData?.length > 0 && !isMultySelection) { onSelectItem(listOfData[0]); } }, [JSON.stringify(listOfData.length)]); const onDeleteItemFromList = (itemToDelete: ListItem) => { const listSelectedWithoutItemIndex = selectedItemsIndexs.filter( (index) => index !== itemToDelete.index ); const listDataWithoutItemIndex = listOfData.filter( (item) => item.index !== itemToDelete.index ); setSelectedItemsIndexs([...listSelectedWithoutItemIndex]); setlistOfData([...listDataWithoutItemIndex]); }; const onSelectItem = (item: ListItem) => { let indexInList = listOfData.findIndex( (itemData) => itemData.index === item.index ); if (isMultySelection) { if (!selectedItemsIndexs.includes(item.index)) { setSelectedItemsIndexs([...selectedItemsIndexs, item.index]); } else { const listWithoutItemIndex = selectedItemsIndexs.filter( (index) => index !== item.index ); setSelectedItemsIndexs([...listWithoutItemIndex]); } } else { setSelectedItemsIndexs([item.index]); } const x = indexInList * 100; scrollRef?.current?.scrollToIndex({index: indexInList, animated: true}); }; return { listOfData, onSelectItem, scrollRef, selectedItemsIndexs, onDeleteItemFromList, viewHeight, setViewHeight, }; }; export default useHorizontalSlider;