- Error boundary with Macedonian fallback screen and retry button wrapping all navigation - Pull-to-refresh on all list/detail screens (home, explore, posts, chat, profile, ad detail, post detail) - Accessibility: labels on all interactive elements, roles on Pressable/Button, selectable text for user data - Deep linking: mojmajstor:// scheme configured in app.json, ad/[id] and chat/[id] routes work via Expo Router auto-routing - Pagination: cursor-based paginated queries for ads, posts, messages, chats, reviews with Load More buttons on frontend - Profile: shows customer posts with PostCard, loading/error states, create-post navigation - Auth error messages in Macedonian (Невалидни акредитиви, итн.) All UI text in Macedonian. TypeScript clean, Convex functions deployed.
57 lines
1.4 KiB
TypeScript
57 lines
1.4 KiB
TypeScript
import { Tabs } from "expo-router";
|
|
import { useTheme } from "../../components/theme";
|
|
|
|
export default function TabLayout() {
|
|
const theme = useTheme();
|
|
|
|
return (
|
|
<Tabs
|
|
screenOptions={{
|
|
headerShown: false,
|
|
tabBarActiveTintColor: theme.colors.primary,
|
|
tabBarInactiveTintColor: theme.colors.textTertiary,
|
|
tabBarStyle: {
|
|
backgroundColor: theme.colors.card,
|
|
borderTopColor: theme.colors.border,
|
|
},
|
|
tabBarLabelStyle: { fontSize: 11 },
|
|
}}
|
|
>
|
|
<Tabs.Screen
|
|
name="(home)"
|
|
options={{
|
|
title: "Почетна",
|
|
tabBarAccessibilityLabel: "Почетна",
|
|
}}
|
|
/>
|
|
<Tabs.Screen
|
|
name="(explore)"
|
|
options={{
|
|
title: "Пребарување",
|
|
tabBarAccessibilityLabel: "Пребарување",
|
|
}}
|
|
/>
|
|
<Tabs.Screen
|
|
name="(posts)"
|
|
options={{
|
|
title: "Побарувања",
|
|
tabBarAccessibilityLabel: "Побарувања",
|
|
}}
|
|
/>
|
|
<Tabs.Screen
|
|
name="(chat)"
|
|
options={{
|
|
title: "Чат",
|
|
tabBarAccessibilityLabel: "Чат",
|
|
}}
|
|
/>
|
|
<Tabs.Screen
|
|
name="(profile)"
|
|
options={{
|
|
title: "Профил",
|
|
tabBarAccessibilityLabel: "Профил",
|
|
}}
|
|
/>
|
|
</Tabs>
|
|
);
|
|
} |