import * as DropdownMenu from "zeego/dropdown-menu"; import {TouchableOpacity, View, ViewProps} from "react-native"; import {Text} from "@/components/common/Text"; import React, {PropsWithChildren, useEffect, useState} from "react"; interface Props { data: T[] placeholderText?: string, keyExtractor: (item: T) => string titleExtractor: (item: T) => string title: string, label: string, onSelected: (...item: T[]) => void multi?: boolean } const Dropdown = ({ data, placeholderText, keyExtractor, titleExtractor, title, label, onSelected, multi = false, ...props }: PropsWithChildren & ViewProps>) => { const [selected, setSelected] = useState(); useEffect(() => { if (selected !== undefined) { onSelected(...selected) } }, [selected]); return ( {title} {selected?.length !== undefined ? selected.map(titleExtractor).join(",") : placeholderText} {label} {data.map((item, idx) => ( multi ? ( keyExtractor(s) == keyExtractor(item)) ? 'on' : 'off'} key={keyExtractor(item)} onValueChange={(next, previous) => setSelected((p) => { const prev = p || [] if (next == 'on') { return [...prev, item] } return [...prev.filter(p => keyExtractor(p) !== keyExtractor(item))] }) } > {titleExtractor(item)} ) : ( setSelected([item])} > {titleExtractor(item)} ) ))} ) }; export default Dropdown;