Mixed-language UI was confusing — onboarding said "Why DChain / How it
works / Your keys" in English headings but feature descriptions and
CTAs were in Russian; compose's confirm dialog was Russian; feed tabs
were Russian; error messages in humanizeTxError were Russian.
Everything user-facing is now English.
Files touched (only string literals, not comments):
app/index.tsx onboarding slides + CTA buttons
app/(app)/compose.tsx composer alerts, header button, placeholder,
attachment-size hint
app/(app)/feed/index.tsx tab labels (Following/For you/Trending),
empty-state hints, retry button
app/(app)/feed/[id].tsx post detail header + stats rows (Views,
Likes, Size, Paid to publish, Hosted on,
Hashtags)
app/(app)/feed/tag/[tag].tsx empty-state copy
app/(app)/profile/[address].tsx Profile header, Follow/Following,
Edit, Open chat, Address, Copied, Encryption,
Added, Members, unknown-contact hint
app/(app)/new-contact.tsx Search title, placeholder, Search button,
empty-state hint, E2E-ready indicator,
Intro label + placeholder, fee-tier labels
(Min / Standard / Priority), Send request,
Insufficient-balance alert, Request-sent
alert
app/(app)/requests.tsx Notifications title, empty-state, Accept /
Decline buttons, decline-confirm alert,
"wants to add you" line
components/SearchBar.tsx default placeholder
components/feed/PostCard.tsx long-press menu (Delete post, confirm,
Actions / Cancel)
components/feed/ShareSheet.tsx sheet title, contact-search placeholder,
empty state, Select contacts / Send button,
plural helper rewritten for English
components/chat/PostRefCard.tsx "POST" ribbon, "photo" indicator
lib/api.ts humanizeTxError (rate-limit, clock skew,
bad signature, 400/5xx/network-error
messages)
lib/dates.ts dateBucket now returns Today/Yesterday/
"Jun 17, 2025"; month array switched to
English short forms
Code comments left in Russian intentionally — they're developer
context, not user-facing. This commit is purely display-string.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
70 lines
1.9 KiB
TypeScript
70 lines
1.9 KiB
TypeScript
/**
|
||
* SearchBar — single-TextInput pill. Icon + input в одном ряду, без
|
||
* idle/focused двойного состояния (раньше был хак с невидимым
|
||
* TextInput поверх отцентрированного Text — ломал focus и выравнивание
|
||
* на Android).
|
||
*/
|
||
import React from 'react';
|
||
import { View, TextInput, Pressable } from 'react-native';
|
||
import { Ionicons } from '@expo/vector-icons';
|
||
|
||
export interface SearchBarProps {
|
||
value: string;
|
||
onChangeText: (v: string) => void;
|
||
placeholder?: string;
|
||
autoFocus?: boolean;
|
||
onSubmitEditing?: () => void;
|
||
onClear?: () => void;
|
||
}
|
||
|
||
export function SearchBar({
|
||
value, onChangeText, placeholder = 'Search', autoFocus, onSubmitEditing, onClear,
|
||
}: SearchBarProps) {
|
||
return (
|
||
<View
|
||
style={{
|
||
flexDirection: 'row',
|
||
alignItems: 'center',
|
||
backgroundColor: '#111111',
|
||
borderWidth: 1,
|
||
borderColor: '#1f1f1f',
|
||
borderRadius: 999,
|
||
paddingHorizontal: 14,
|
||
gap: 8,
|
||
}}
|
||
>
|
||
<Ionicons name="search" size={16} color="#6a6a6a" />
|
||
<TextInput
|
||
value={value}
|
||
onChangeText={onChangeText}
|
||
placeholder={placeholder}
|
||
placeholderTextColor="#5a5a5a"
|
||
autoCapitalize="none"
|
||
autoCorrect={false}
|
||
autoFocus={autoFocus}
|
||
onSubmitEditing={onSubmitEditing}
|
||
returnKeyType="search"
|
||
style={{
|
||
flex: 1,
|
||
color: '#ffffff',
|
||
fontSize: 14,
|
||
paddingVertical: 10,
|
||
padding: 0,
|
||
includeFontPadding: false,
|
||
}}
|
||
/>
|
||
{value.length > 0 && (
|
||
<Pressable
|
||
onPress={() => {
|
||
onChangeText('');
|
||
onClear?.();
|
||
}}
|
||
hitSlop={8}
|
||
>
|
||
<Ionicons name="close-circle" size={16} color="#6a6a6a" />
|
||
</Pressable>
|
||
)}
|
||
</View>
|
||
);
|
||
}
|