- (visitor) route group, visitor lib, tickets wallet - CongestionPill + LiveNoticeFeed components - login/tickets screens, i18n 4 locales, wordmark assets, splash Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
70 lines
2.3 KiB
TypeScript
70 lines
2.3 KiB
TypeScript
/*
|
|
* 관람객(B2C) 하단 탭 셸 — 운영(B2B) (tabs) 셸과 분리된 관람객 전용 트랙.
|
|
* 탭: 홈 · 행사 · 티켓 · 현장(혼잡/주차) · 마이. design.md §4 SCR-M5/M14/M15 관람객 톤.
|
|
* 진입: roleTrack visitor 랜딩(/(visitor)) 또는 게스트. 인증 가드는 (tabs)와 동일(로그인 필요).
|
|
*/
|
|
import { Ionicons } from '@expo/vector-icons';
|
|
import { Redirect, Tabs } from 'expo-router';
|
|
import React from 'react';
|
|
import { useTranslation } from 'react-i18next';
|
|
import { useAuth } from '../../context/AuthContext';
|
|
import { colors } from '../../theme';
|
|
|
|
export default function VisitorTabsLayout() {
|
|
const { t } = useTranslation();
|
|
const { ready, token } = useAuth();
|
|
if (ready && !token) return <Redirect href="/login" />;
|
|
|
|
return (
|
|
<Tabs
|
|
screenOptions={{
|
|
tabBarActiveTintColor: colors.primary600,
|
|
tabBarInactiveTintColor: colors.neutral500,
|
|
headerStyle: { backgroundColor: colors.white },
|
|
headerTitleStyle: { fontWeight: '600', color: colors.neutral900 },
|
|
tabBarStyle: { borderTopColor: colors.neutral200 },
|
|
}}
|
|
>
|
|
<Tabs.Screen
|
|
name="index"
|
|
options={{
|
|
title: t('vnav.tabHome'),
|
|
tabBarIcon: ({ color, size }) => <Ionicons name="home-outline" color={color} size={size} />,
|
|
}}
|
|
/>
|
|
<Tabs.Screen
|
|
name="events"
|
|
options={{
|
|
title: t('vnav.tabEvents'),
|
|
tabBarIcon: ({ color, size }) => (
|
|
<Ionicons name="calendar-outline" color={color} size={size} />
|
|
),
|
|
}}
|
|
/>
|
|
<Tabs.Screen
|
|
name="tickets"
|
|
options={{
|
|
title: t('vnav.tabTickets'),
|
|
tabBarIcon: ({ color, size }) => <Ionicons name="ticket-outline" color={color} size={size} />,
|
|
}}
|
|
/>
|
|
<Tabs.Screen
|
|
name="onsite"
|
|
options={{
|
|
title: t('vnav.tabOnsite'),
|
|
tabBarIcon: ({ color, size }) => (
|
|
<Ionicons name="navigate-outline" color={color} size={size} />
|
|
),
|
|
}}
|
|
/>
|
|
<Tabs.Screen
|
|
name="my"
|
|
options={{
|
|
title: t('vnav.tabMy'),
|
|
tabBarIcon: ({ color, size }) => <Ionicons name="person-outline" color={color} size={size} />,
|
|
}}
|
|
/>
|
|
</Tabs>
|
|
);
|
|
}
|