kintex/mobile/app/(visitor)/_layout.tsx
zio 0933dbea41 feat(mobile): B2C visitor tab, congestion pill, live notice feed, ticket wallet, brand logo (v0.2.2 prep)
- (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>
2026-07-24 00:41:57 +09:00

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>
);
}