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) => (
))}
);
};