import React, { useMemo, useState } from "react"; import { StyleSheet, TouchableOpacity, View } from "react-native"; import { Item, ItemProps } from "./Item"; import { ItemIcon, ItemIconProps } from "./ItemIcon"; import { ItemLabel, ItemLabelProps } from "./ItemLabel"; import { defaultSelectedAsset } from "./assets"; type ButtonProps = { configuration: any; selectedItem?: any; item: any; // Adjust type as needed onPress: (item: any) => void; // Adjust type as needed iconBaseProps?: ItemIconProps; itemBaseProps?: ItemProps; labelBaseProps?: ItemLabelProps; disabled?: boolean; label?: string | Record; iconPlacement?: "left" | "right"; selectedItemIcon?: ItemIconProps["asset"]; defaultItemIcon?: ItemIconProps["asset"]; }; const styles = StyleSheet.create({ label_icon_container: { flexDirection: "row", alignItems: "center", }, }); export function Button({ selectedItem, item, onPress, configuration, iconBaseProps, itemBaseProps: itemProps, labelBaseProps, label, iconPlacement = "left", defaultItemIcon, selectedItemIcon, disabled = false, }: ButtonProps) { const [focused, setFocused] = useState(false); const selected = selectedItem && item?.value === selectedItem?.value; const itemIconPropsAssets = useMemo( () => (item ? (configuration[item.asset] ?? item.asset) : undefined) ?? defaultItemIcon, [item?.asset, defaultItemIcon] ); const selectedItemIconPropsAssets = useMemo( () => selectedItemIcon || defaultSelectedAsset, [selectedItemIcon] ); const renderItemIcon = itemIconPropsAssets && itemIconPropsAssets.length > 0 ? ( ) : null; if (disabled) return null; return ( onPress(item)} onPressIn={() => setFocused(true)} onPressOut={() => setFocused(false)} > {iconPlacement === "left" && renderItemIcon} {label ? ( ) : null} {selected ? ( ) : ( iconPlacement === "right" && renderItemIcon )} ); }