/** * 高级筛选底部弹层(spec §6):账户 / 日期范围 / 金额区间。 * 受控组件:值由父级持有,「完成」回调应用,「重置」清空。 */ import React from 'react'; import { StyleSheet, Text, TextInput, View } from 'react-native'; import { useTheme, createCommonStyles } from '../theme'; import { useT } from '../i18n'; import { BottomSheet } from './BottomSheet'; import { DatePickerField } from './DatePickerField'; import { Button } from './Button'; export interface AdvancedFilterValues { account: string; dateFrom: string; dateTo: string; amountMin: string; amountMax: string; } interface FilterSheetProps { visible: boolean; onClose: () => void; values: AdvancedFilterValues; onChange: (values: AdvancedFilterValues) => void; onReset: () => void; } export function FilterSheet({ visible, onClose, values, onChange, onReset }: FilterSheetProps) { const { theme } = useTheme(); const commonStyles = createCommonStyles(theme); const t = useT(); const set = (patch: Partial) => onChange({ ...values, ...patch }); return ( {t('transactions.accountFilterPlaceholder')} set({ account: v })} placeholder={t('transactions.accountFilterPlaceholder')} placeholderTextColor={theme.colors.fgSecondary} style={commonStyles.input} /> {t('transactions.dateFrom')} ~ {t('transactions.dateTo')} set({ dateFrom: v })} placeholder={t('transactions.dateFrom')} /> set({ dateTo: v })} placeholder={t('transactions.dateTo')} /> {t('transactions.amountMin')} ~ {t('transactions.amountMax')} set({ amountMin: v })} placeholder={t('transactions.amountMin')} placeholderTextColor={theme.colors.fgSecondary} keyboardType="decimal-pad" style={[commonStyles.input, styles.flex1]} /> set({ amountMax: v })} placeholder={t('transactions.amountMax')} placeholderTextColor={theme.colors.fgSecondary} keyboardType="decimal-pad" style={[commonStyles.input, styles.flex1]} />