/** * SearchBar — серый блок, в состоянии idle текст с иконкой 🔍 отцентрированы. * * Когда пользователь тапает/фокусирует — поле становится input-friendly, но * визуально рестайл не нужен: при наличии текста placeholder скрыт и * пользовательский ввод выравнивается влево автоматически (multiline off). */ import React, { useState } from 'react'; import { View, TextInput, Text } from 'react-native'; import { Ionicons } from '@expo/vector-icons'; export interface SearchBarProps { value: string; onChangeText: (v: string) => void; placeholder?: string; autoFocus?: boolean; onSubmitEditing?: () => void; } export function SearchBar({ value, onChangeText, placeholder = 'Search', autoFocus, onSubmitEditing, }: SearchBarProps) { const [focused, setFocused] = useState(false); // Placeholder центрируется пока нет фокуса И нет значения. // Как только юзер фокусируется или начинает печатать — иконка+текст // прыгают к левому краю, чтобы не мешать вводу. const centered = !focused && !value; return ( {centered ? ( // ── Idle state — только текст+icon, отцентрированы. // Невидимый TextInput поверх ловит tap, чтобы не дергать focus вручную. {placeholder} setFocused(true)} onSubmitEditing={onSubmitEditing} returnKeyType="search" style={{ position: 'absolute', left: 0, right: 0, top: 0, bottom: 0, color: 'transparent', // Скрываем cursor в idle-режиме; при focus компонент перерисуется. }} /> ) : ( setFocused(true)} onBlur={() => setFocused(false)} onSubmitEditing={onSubmitEditing} returnKeyType="search" style={{ flex: 1, color: '#ffffff', fontSize: 14, padding: 0, includeFontPadding: false, }} /> )} ); }