POWR/components/library/SearchBar.tsx

64 lines
1.7 KiB
TypeScript
Raw Permalink Normal View History

// components/library/SearchBar.tsx
import React from 'react';
import { View, TextInput, TouchableOpacity, StyleSheet } from 'react-native';
import { Feather } from '@expo/vector-icons';
import { useColorScheme } from '@/hooks/useColorScheme';
import { spacing } from '@/styles/sharedStyles';
interface SearchBarProps {
value: string;
onChangeText: (text: string) => void;
onFilterPress: () => void;
}
export default function SearchBar({ value, onChangeText, onFilterPress }: SearchBarProps) {
const { colors } = useColorScheme();
return (
<View style={styles.container}>
<View style={[styles.searchContainer, { backgroundColor: colors.cardBg }]}>
<Feather name="search" size={20} color={colors.textSecondary} />
<TextInput
style={[styles.input, { color: colors.text }]}
placeholder="Search library..."
placeholderTextColor={colors.textSecondary}
value={value}
onChangeText={onChangeText}
/>
</View>
<TouchableOpacity
style={[styles.filterButton, { backgroundColor: colors.cardBg }]}
onPress={onFilterPress}
>
<Feather name="sliders" size={20} color={colors.textSecondary} />
</TouchableOpacity>
</View>
);
}
const styles = StyleSheet.create({
container: {
flexDirection: 'row',
gap: spacing.small,
},
searchContainer: {
flex: 1,
flexDirection: 'row',
alignItems: 'center',
paddingHorizontal: spacing.medium,
height: 44,
borderRadius: 12,
},
input: {
flex: 1,
marginLeft: spacing.small,
fontSize: 16,
},
filterButton: {
width: 44,
height: 44,
borderRadius: 12,
justifyContent: 'center',
alignItems: 'center',
},
});