import * as DropdownMenu from "zeego/dropdown-menu"; import {TouchableOpacity, View, ViewProps} from "react-native"; import {Text} from "@/components/common/Text"; import React, {PropsWithChildren, ReactNode, useEffect, useState} from "react"; import DisabledSetting from "@/components/settings/DisabledSetting"; interface Props { data: T[] disabled?: boolean placeholderText?: string, keyExtractor: (item: T) => string titleExtractor: (item: T) => string | undefined title: string | ReactNode, label: string, onSelected: (...item: T[]) => void multi?: boolean } const Dropdown = ({ data, disabled, placeholderText, keyExtractor, titleExtractor, title, label, onSelected, multi = false, ...props }: PropsWithChildren & ViewProps>) => { const [selected, setSelected] = useState(); useEffect(() => { if (selected !== undefined) { onSelected(...selected) } }, [selected]); return ( {typeof title === 'string' ? ( {title} {selected?.length !== undefined ? selected.map(titleExtractor).join(",") : placeholderText} ) : ( <> {title} )} {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;