import React, { useState } from 'react'; import styles from './AddonsList.module.css'; import { AddonDetail, Config } from '@aiostreams/types'; import CredentialInput from './CredentialInput'; import MultiSelect from './MutliSelect'; interface AddonsListProps { choosableAddons: string[]; addonDetails: AddonDetail[]; addons: Config['addons']; setAddons: (addons: Config['addons']) => void; } const AddonsList: React.FC = ({ choosableAddons, addonDetails, addons, setAddons, }) => { const [selectedAddon, setSelectedAddon] = useState(''); const addAddon = () => { if (selectedAddon) { setAddons([...addons, { id: selectedAddon, options: {} }]); setSelectedAddon(''); } }; const removeAddon = (index: number) => { const newAddons = [...addons]; newAddons.splice(index, 1); setAddons(newAddons); }; const updateOption = ( addonIndex: number, optionKey: string, value?: string ) => { const newAddons = [...addons]; newAddons[addonIndex].options[optionKey] = value; setAddons(newAddons); }; const moveAddon = (index: number, direction: 'up' | 'down') => { const newAddons = [...addons]; const [movedAddon] = newAddons.splice(index, 1); newAddons.splice(direction === 'up' ? index - 1 : index + 1, 0, movedAddon); setAddons(newAddons); }; return (
{addons.map((addon, index) => { const details = addonDetails.find((detail) => detail.id === addon.id); return (
{details?.name}
{index > 0 && ( )} {index < addons.length - 1 && ( )}
{details?.options ?.filter((option) => option.type !== 'deprecated') ?.map((option) => (
{option.description && {option.description}} {option.type === 'text' && (option.secret ? ( updateOption( index, option.id, value ? value : undefined ) } /> ) : ( updateOption( index, option.id, e.target.value ? e.target.value : undefined ) } className={styles.textInput} /> ))} {option.type === 'select' && ( )} {option.type === 'number' && ( updateOption( index, option.id, e.target.value ? e.target.value : undefined ) } className={styles.textInput} /> )} {option.type === 'multiSelect' && ( updateOption(index, option.id, values.join(',')) } values={addon.options[option.id]?.split(',') || []} /> )}
))}
); })}
); }; export default AddonsList;