import React from 'react'; import { useSelector } from 'react-redux'; import { getMonthYearFormat } from 'loot-core/src/shared/months'; import AccountAutocomplete from 'loot-design/src/components/AccountAutocomplete'; import Autocomplete from 'loot-design/src/components/Autocomplete'; import CategoryAutocomplete from 'loot-design/src/components/CategorySelect'; import { View, Input } from 'loot-design/src/components/common'; import DateSelect from 'loot-design/src/components/DateSelect'; import PayeeAutocomplete from 'loot-design/src/components/PayeeAutocomplete'; import RecurringSchedulePicker from 'loot-design/src/components/RecurringSchedulePicker'; export default function GenericInput({ field, subfield, type, multi, value, inputRef, style, onChange }) { let { payees, accounts, categoryGroups, dateFormat } = useSelector(state => { return { payees: state.queries.payees, accounts: state.queries.accounts, categoryGroups: state.queries.categories.grouped, dateFormat: state.prefs.local.dateFormat || 'MM/dd/yyyy' }; }); // This makes the UI more resilient in case of faulty data if (multi && !Array.isArray(value)) { value = []; } else if (!multi && Array.isArray(value)) { return null; } let showPlaceholder = multi ? value.length === 0 : true; let content; switch (type) { case 'id': switch (field) { case 'payee': if (payees.length > 0) { content = ( ); } break; case 'account': content = ( ); break; case 'category': content = ( ); break; default: } break; case 'date': switch (subfield) { case 'month': content = ( onChange(e.target.value)} onBlur={e => onChange(e.target.value)} /> ); break; case 'year': content = ( onChange(e.target.value)} onBlur={e => onChange(e.target.value)} /> ); break; default: if (value && value.frequency) { content = ( ); } else { content = ( ); } break; } break; default: if (multi) { content = ( ); } else { content = ( onChange(e.target.value)} onBlur={e => onChange(e.target.value)} /> ); } break; } return {content}; }