Skip to content

Роутинг

Приложение использует Expo Router v6 — file-based routing для React Native.

Структура маршрутов

app/
├── _layout.tsx                 # Root layout — провайдеры + навигационные гарды
├── +not-found.tsx              # 404 экран

├── (auth)/                     # Группа: авторизация
│   ├── login.tsx               # Вход (email/password + Google OAuth)
│   └── verify-code.tsx         # Подтверждение email

└── (app)/                      # Группа: авторизованная часть
    ├── _layout.tsx             # Layout с проверкой компании

    ├── (tabs)/                 # Нижний таб-бар
    │   ├── _layout.tsx         # Конфигурация табов
    │   ├── index.tsx           # Dashboard (главная)
    │   ├── chats.tsx           # Список чатов
    │   ├── phones.tsx          # Телефоны
    │   ├── integrations.tsx    # Интеграции
    │   └── more.tsx            # Меню «Ещё»

    ├── chat/
    │   ├── [id].tsx            # Экран чата (динамический)
    │   └── info.tsx            # Информация о чате

    ├── assistants/
    │   ├── index.tsx           # Список ассистентов
    │   ├── [id].tsx            # Детали ассистента
    │   ├── create.tsx          # Создание ассистента
    │   ├── edit.tsx            # Редактирование
    │   ├── connect-phone.tsx   # Привязка телефона
    │   ├── connect-integration.tsx  # Привязка интеграции
    │   ├── folder-form.tsx     # Форма папки
    │   ├── tool-form.tsx       # Форма инструмента
    │   └── knowledge-form.tsx  # Форма базы знаний

    ├── phones/
    │   ├── index.tsx           # Список телефонов
    │   └── create.tsx          # Добавление номера

    ├── integrations/
    │   ├── index.tsx           # Список интеграций
    │   └── connect.tsx         # Подключение мессенджера

    ├── companies/
    │   └── index.tsx           # Управление компаниями

    ├── settings/
    │   ├── account.tsx         # Настройки аккаунта
    │   └── company.tsx         # Настройки компании

    └── billing.tsx             # Тарифы и подписки

Группы маршрутов

(auth) — Авторизация

Экраны доступны только неавторизованным пользователям. Если у пользователя есть сессия, происходит редирект в (app).

(app) — Основное приложение

Доступно только авторизованным пользователям. Если сессии нет — редирект на (auth)/login.

Дополнительная проверка: если у пользователя нет компаний, показывается экран создания компании.

Навигационные гарды

Root layout управляет редиректами на основе состояния сессии:

Пользователь открывает приложение

├── Нет сессии?
│   └── Редирект → (auth)/login

├── Не верифицирован?
│   └── Редирект → (auth)/verify-code

├── Нет компаний?
│   └── Показать экран создания компании

└── Всё ок → (app)/(tabs)

Гарды используют useSegments() для определения текущей группы маршрутов и router.replace() для перенаправления.

Нижний таб-бар

Конфигурация табов в (tabs)/_layout.tsx:

ТабИконкаЭкран
ГлавнаяHomeindex.tsx
ЧатыMessageCirclechats.tsx
ТелефоныPhonephones.tsx
ИнтеграцииPlugintegrations.tsx
ЕщёMoreHorizontalmore.tsx

Таб-бар использует glassmorphism эффект (blur) и кастомные иконки с badge-счётчиками.

Динамические маршруты

  • chat/[id].tsx — ID чата из URL-параметра
  • assistants/[id].tsx — ID ассистента

Доступ через useLocalSearchParams<{ id: string }>().