import { useContext, useEffect, useState } from "react"; import { AppContext, AppStyles, IsPlatformIos } from "../../utils"; import { KeyboardAvoidingView, Modal, ScrollView, Text, TextInput, TouchableOpacity, View, } from "react-native"; import { Divider } from "../Divider"; import MyIcon from "../Icon"; import { useTranslation } from "react-i18next"; /* transparent: set this to prevent modal reopening on iOS https://github.com/facebook/react-native/issues/34018 */ const modalContentStyle = { margin: 10, paddingTop: 10 }; export default function MyModal({ children, isOpen, closeModal, header, content, disableAnimationForIos, scrollView, }) { const appContext = useContext(AppContext); const getContent = () => { if (scrollView) { return ( {content} ); } return {content}; }; return ( closeModal()} transparent > {children} {header} {getContent()} ); } export function MyDefaultModalHeader({ title, closeModal }) { const appContext = useContext(AppContext); return ( closeModal()}> {title} ); } export function MyPickerModalListItem({ onPress, itemName, itemSelected }) { const appContext = useContext(AppContext); return ( <> {itemName} {itemSelected && ( )} ); } export function MyPickerModal({ isOpen, setIsOpen, items, searchFilter }) { const appContext = useContext(AppContext); const { t } = useTranslation(); const [providedItems, setProvidedItems] = useState([]); const [searchFilterInput, setSearchFilterInput] = useState(""); useEffect(() => setProvidedItems(items), [items]); const closeModal = () => { setIsOpen(false); setProvidedItems(items); setSearchFilterInput(""); }; return ( closeModal()} > closeModal()}> {searchFilter && ( { setSearchFilterInput(text); setProvidedItems(() => items.filter((provItem) => { return provItem.label .toLowerCase() .startsWith(text.toLowerCase()); }) ); }} /> {searchFilterInput !== "" && ( { setSearchFilterInput(""); setProvidedItems(items); }} > )} )} {providedItems.length === 0 && ( {t("common.pickerSearchFilterNoResults")} )} {providedItems.map((item, i) => { return item.selected ? ( closeModal()}> {item.label} ) : ( { closeModal(); item.onPress(); }} > {item.label} ); })} ); } export function MyTextInputModal({ isOpen, setIsOpen, onTextInputSave, modalTitle, inputTitle, inputDescription, }) { const appContext = useContext(AppContext); const closeModal = () => setIsOpen(false); return ( closeModal()} > closeModal()}> {modalTitle} { closeModal(); onTextInputSave(); }} > {inputTitle} {inputDescription} ); }