import React, { useState, useCallback } from "react"; import { Pressable, Icon, View, Box } from "native-base"; import { first } from "lodash"; import SelectBox from "./SelectBox"; const SwitchIcon = () => ( ); const SelectListItem = ({ chain, onPress, isListItem, isListOpen, isLeft }: { chain: string | undefined; onPress: ((isLeft: boolean) => void) | ((isLeft: boolean, chain: string) => void); isListItem: boolean; isListOpen: boolean; isLeft: boolean; }) => { const type = isListItem ? "list" : "button"; const onItemPress = useCallback(() => onPress(isLeft, chain ?? ""), [chain, onPress]); return ( ); }; //todo: add icon list (optional) export const CustomSwitch = ({ list, switchListCb }: { list: string[]; switchListCb: () => void }) => { const [showListLeft, setShowListLeft] = useState(false); const [showListRight, setShowListRight] = useState(false); const [sourceList, setSourceList] = useState(list); const [targetList, setTargetList] = useState(() => list.slice().reverse()); const toggleList = useCallback( (left: boolean) => { const side = { show: left ? showListLeft : showListRight, dispatch: left ? setShowListLeft : setShowListRight }; side.dispatch(!side.show); }, [showListLeft, showListRight] ); const switchSelect = () => { setSourceList(targetList); setTargetList(sourceList); switchListCb(); }; const selectFromList = (isLeft: boolean, chain: string) => { const sides = [sourceList, targetList]; const selectedSide = isLeft ? sides.splice(0, 1)[0] : sides.splice(1, 1)[0]; const altSide = sides[0]; const listNumber = selectedSide.indexOf(chain); const selected = selectedSide.splice(listNumber, listNumber)[0]; selectedSide.unshift(selected); if (altSide.indexOf(chain) === 0) { const altSelected = altSide.splice(listNumber, listNumber)[0]; altSide.unshift(altSelected); } toggleList(isLeft); switchListCb(); //Todo: refactor to handle list with more then 2 values }; const onUncheckList = useCallback((isLeft: boolean) => toggleList(isLeft), [toggleList]); const onUncheckItem = useCallback( (isLeft: boolean, chain: string) => selectFromList(isLeft, chain), [toggleList, selectFromList] ); return ( {sourceList.map((chain, listNumber) => ( ))} {targetList.map((chain, listNumber) => ( ))} ); };