450 lines
13 KiB
TypeScript
450 lines
13 KiB
TypeScript
import { NavigationDeclaration, ScrollContainerDeclaration } from './navigation.types';
|
|
|
|
const MAIN_SCROLL: ScrollContainerDeclaration[] = [
|
|
{ name: 'main', direction: 'vertical', description: '主内容区' },
|
|
];
|
|
|
|
export const NAVIGATION_DECLARATION = {
|
|
app: 'map',
|
|
|
|
routes: [
|
|
// =========================
|
|
// Main Tabs
|
|
// =========================
|
|
{
|
|
path: '/',
|
|
component: 'ExplorePage',
|
|
params: {},
|
|
entryPoint: 'home',
|
|
scrollContainers: [], // Map view itself usually isn't a standard scroll container in this context, but maybe bottom sheet is. keeping empty for now or maybe 'bottomSheet'
|
|
uiStates: [
|
|
{ id: 'explore.base', search: {}, description: '探索首页-地图视图' },
|
|
{
|
|
id: 'explore.category_search',
|
|
search: { category: 'string' },
|
|
description: '探索-分类搜索结果(如购物)',
|
|
actions: [
|
|
{ id: 'placeResults.sheet.close', label: '关闭搜索结果', behavior: 'submit' },
|
|
{
|
|
id: 'placeResults.result.select.item',
|
|
label: '点击搜索结果',
|
|
behavior: 'select',
|
|
scope: 'item',
|
|
paramsSchema: { itemId: 'string' },
|
|
},
|
|
],
|
|
},
|
|
],
|
|
queryParams: {},
|
|
description: '探索',
|
|
},
|
|
{
|
|
path: '/me',
|
|
component: 'MePage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [
|
|
{ id: 'me.base', search: {}, description: '我-个人页(列表/保存)' },
|
|
],
|
|
queryParams: {},
|
|
description: '我的',
|
|
},
|
|
{
|
|
path: '/contribute',
|
|
component: 'ContributePage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [
|
|
{ id: 'contribute.base', search: {}, description: '贡献首页' },
|
|
],
|
|
queryParams: {},
|
|
description: '贡献',
|
|
},
|
|
|
|
// =========================
|
|
// Sub Pages
|
|
// =========================
|
|
{
|
|
path: '/search',
|
|
component: 'SearchPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [
|
|
{
|
|
id: 'search.base',
|
|
search: {},
|
|
description: '搜索页-历史记录',
|
|
actions: [
|
|
{
|
|
id: 'search.bar.input',
|
|
label: '搜索地点',
|
|
behavior: 'input',
|
|
paramsSchema: { value: 'string' },
|
|
},
|
|
{
|
|
id: 'search.voice.tap',
|
|
label: '语音搜索',
|
|
behavior: 'other', // Or just a button that triggers a mock voice UI
|
|
}
|
|
]
|
|
},
|
|
],
|
|
queryParams: {},
|
|
description: '搜索页',
|
|
},
|
|
// =========================
|
|
// Profile & Settings
|
|
// =========================
|
|
{
|
|
path: '/profile',
|
|
component: 'ProfilePage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [{ id: 'profile.base', search: {}, description: '个人资料菜单' }],
|
|
queryParams: {},
|
|
description: '个人资料',
|
|
},
|
|
{
|
|
path: '/settings',
|
|
component: 'SettingsPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [{ id: 'settings.base', search: {}, description: '设置主页' }],
|
|
queryParams: {},
|
|
description: '设置',
|
|
},
|
|
{
|
|
path: '/settings/app-display',
|
|
component: 'AppDisplayPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [{ id: 'settings.app-display.base', search: {}, description: '应用和显示设置' }],
|
|
queryParams: {},
|
|
description: '应用和显示',
|
|
},
|
|
{
|
|
path: '/settings/app-display/language',
|
|
component: 'LanguagePage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [
|
|
{
|
|
id: 'settings.app-display.language.base',
|
|
search: {},
|
|
description: '应用语言',
|
|
actions: [
|
|
{ id: 'settings.appDisplay.language.select.system', label: '选择系统默认语言', behavior: 'select' },
|
|
{ id: 'settings.appDisplay.language.select.zhHans', label: '选择中文', behavior: 'select' },
|
|
{ id: 'settings.appDisplay.language.select.en', label: '选择英文', behavior: 'select' },
|
|
],
|
|
},
|
|
],
|
|
queryParams: {},
|
|
description: '应用语言',
|
|
},
|
|
{
|
|
path: '/settings/nav',
|
|
component: 'NavSettingsPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [{ id: 'settings.nav.base', search: {}, description: '导航设置' }],
|
|
queryParams: {},
|
|
description: '导航设置',
|
|
},
|
|
{
|
|
path: '/settings/getting-around',
|
|
component: 'GettingAroundPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [{ id: 'settings.getting-around.base', search: {}, description: '出行设置' }],
|
|
queryParams: {},
|
|
description: '出行',
|
|
},
|
|
{
|
|
path: '/settings/location-privacy',
|
|
component: 'LocationPrivacyPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [{ id: 'settings.location-privacy.base', search: {}, description: '位置信息和隐私' }],
|
|
queryParams: {},
|
|
description: '位置信息和隐私',
|
|
},
|
|
{
|
|
path: '/settings/offline-maps',
|
|
component: 'OfflineMapsSettingsPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [{ id: 'settings.offline-maps.base', search: {}, description: '离线地图设置' }],
|
|
queryParams: {},
|
|
description: '离线地图',
|
|
},
|
|
{
|
|
path: '/settings/notifications',
|
|
component: 'NotificationsPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [{ id: 'settings.notifications.base', search: {}, description: '通知设置' }],
|
|
queryParams: {},
|
|
description: '通知',
|
|
},
|
|
{
|
|
path: '/settings/notifications/traffic',
|
|
component: 'TrafficInfoPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [{ id: 'settings.notifications.traffic.base', search: {}, description: '交通信息通知' }],
|
|
queryParams: {},
|
|
description: '交通信息',
|
|
},
|
|
{
|
|
path: '/settings/notifications/traffic/:subId',
|
|
component: 'TrafficSubPage',
|
|
params: { subId: 'string' },
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [{ id: 'settings.notifications.traffic.sub.base', search: {}, description: '交通信息子页' }],
|
|
queryParams: {},
|
|
description: '交通信息详情',
|
|
},
|
|
{
|
|
path: '/settings/notifications/recommendations',
|
|
component: 'RecommendationsPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [{ id: 'settings.notifications.rec.base', search: {}, description: '个性化推荐通知' }],
|
|
queryParams: {},
|
|
description: '个性化推荐',
|
|
},
|
|
{
|
|
path: '/settings/notifications/recommendations/:subId',
|
|
component: 'RecommendationSubPage',
|
|
params: { subId: 'string' },
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [{ id: 'settings.notifications.rec.sub.base', search: {}, description: '推荐子页' }],
|
|
queryParams: {},
|
|
description: '推荐详情',
|
|
},
|
|
],
|
|
|
|
transitions: [
|
|
// =========================
|
|
// Tab Switching
|
|
// =========================
|
|
{
|
|
id: 'tab.explore',
|
|
from: ['/me', '/contribute'],
|
|
to: '/',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'replace',
|
|
params: {},
|
|
label: '切换到探索',
|
|
ui: { placement: 'tabbar', icon: 'tab_explore', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'tab.me',
|
|
from: ['/', '/contribute'],
|
|
to: '/me',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'replace',
|
|
params: {},
|
|
label: '切换到我',
|
|
ui: { placement: 'tabbar', icon: 'tab_me', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'tab.contribute',
|
|
from: ['/', '/me'],
|
|
to: '/contribute',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'replace',
|
|
params: {},
|
|
label: '切换到贡献',
|
|
ui: { placement: 'tabbar', icon: 'tab_contribute', gesture: 'tap' },
|
|
},
|
|
|
|
// =========================
|
|
// Search Flow
|
|
// =========================
|
|
{
|
|
id: 'search.open',
|
|
from: '/',
|
|
to: '/search',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开搜索页',
|
|
ui: { placement: 'topbar', icon: 'search_bar', gesture: 'tap' },
|
|
},
|
|
// =========================
|
|
// Profile & Settings Flow
|
|
// =========================
|
|
{
|
|
id: 'profile.open',
|
|
from: '/',
|
|
to: '/profile',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开个人资料',
|
|
ui: { placement: 'topbar', icon: 'avatar', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'settings.open',
|
|
from: '/profile',
|
|
to: '/settings',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开设置',
|
|
ui: { placement: 'content', icon: 'settings', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'settings.app-display.open',
|
|
from: '/settings',
|
|
to: '/settings/app-display',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开应用和显示',
|
|
ui: { placement: 'content', icon: 'settings_item', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'settings.app-display.language.open',
|
|
from: '/settings/app-display',
|
|
to: '/settings/app-display/language',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开应用语言',
|
|
ui: { placement: 'content', icon: 'language_item', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'settings.nav.open',
|
|
from: '/settings',
|
|
to: '/settings/nav',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开导航设置',
|
|
ui: { placement: 'content', icon: 'settings_item', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'settings.getting-around.open',
|
|
from: '/settings',
|
|
to: '/settings/getting-around',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开出行设置',
|
|
ui: { placement: 'content', icon: 'settings_item', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'settings.location-privacy.open',
|
|
from: '/settings',
|
|
to: '/settings/location-privacy',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开位置信息和隐私',
|
|
ui: { placement: 'content', icon: 'settings_item', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'settings.offline-maps.open',
|
|
from: '/settings',
|
|
to: '/settings/offline-maps',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开离线地图设置',
|
|
ui: { placement: 'content', icon: 'settings_item', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'settings.notifications.open',
|
|
from: '/settings',
|
|
to: '/settings/notifications',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开通知设置',
|
|
ui: { placement: 'content', icon: 'settings_item', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'settings.notifications.traffic.open',
|
|
from: '/settings/notifications',
|
|
to: '/settings/notifications/traffic',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开交通信息',
|
|
ui: { placement: 'content', icon: 'traffic_info', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'settings.notifications.traffic.sub.open',
|
|
from: '/settings/notifications/traffic',
|
|
to: '/settings/notifications/traffic/:subId',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: { subId: 'string' },
|
|
label: '打开交通信息子页',
|
|
ui: { placement: 'content', icon: 'traffic_sub_item', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'settings.notifications.recommendations.open',
|
|
from: '/settings/notifications',
|
|
to: '/settings/notifications/recommendations',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开个性化推荐',
|
|
ui: { placement: 'content', icon: 'recommendation', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'settings.notifications.rec.sub.open',
|
|
from: '/settings/notifications/recommendations',
|
|
to: '/settings/notifications/recommendations/:subId',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: { subId: 'string' },
|
|
label: '打开推荐子页',
|
|
ui: { placement: 'content', icon: 'rec_sub_item', gesture: 'tap' },
|
|
},
|
|
],
|
|
|
|
capabilities: {
|
|
historyBack: true,
|
|
},
|
|
} as const satisfies NavigationDeclaration;
|
|
|
|
export type TransitionId = typeof NAVIGATION_DECLARATION.transitions[number]['id'];
|