mirror of
https://github.com/DocNR/POWR.git
synced 2025-04-19 19:01:18 +00:00
64 lines
1.7 KiB
TypeScript
64 lines
1.7 KiB
TypeScript
![]() |
// 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',
|
||
|
},
|
||
|
});
|