diff --git a/client/src/i18n/translations/ar.ts b/client/src/i18n/translations/ar.ts index 3a37d8f5..33cd8b6f 100644 --- a/client/src/i18n/translations/ar.ts +++ b/client/src/i18n/translations/ar.ts @@ -149,6 +149,7 @@ const ar: Record = { 'settings.tabs.notifications': 'الإشعارات', 'settings.tabs.integrations': 'التكاملات', 'settings.tabs.account': 'الحساب', + 'settings.tabs.offline': 'Offline', 'settings.tabs.about': 'حول', 'settings.map': 'الخريطة', 'settings.mapTemplate': 'قالب الخريطة', diff --git a/client/src/i18n/translations/br.ts b/client/src/i18n/translations/br.ts index ef89acd7..5a46ba45 100644 --- a/client/src/i18n/translations/br.ts +++ b/client/src/i18n/translations/br.ts @@ -144,6 +144,7 @@ const br: Record = { 'settings.tabs.notifications': 'Notificações', 'settings.tabs.integrations': 'Integrações', 'settings.tabs.account': 'Conta', + 'settings.tabs.offline': 'Offline', 'settings.tabs.about': 'Sobre', 'settings.map': 'Mapa', 'settings.mapTemplate': 'Modelo de mapa', diff --git a/client/src/i18n/translations/cs.ts b/client/src/i18n/translations/cs.ts index 3a0cf375..56c08001 100644 --- a/client/src/i18n/translations/cs.ts +++ b/client/src/i18n/translations/cs.ts @@ -145,6 +145,7 @@ const cs: Record = { 'settings.tabs.notifications': 'Oznámení', 'settings.tabs.integrations': 'Integrace', 'settings.tabs.account': 'Účet', + 'settings.tabs.offline': 'Offline', 'settings.tabs.about': 'O aplikaci', 'settings.map': 'Mapy', 'settings.mapTemplate': 'Šablona mapy', diff --git a/client/src/i18n/translations/de.ts b/client/src/i18n/translations/de.ts index 107b9903..3d8500c6 100644 --- a/client/src/i18n/translations/de.ts +++ b/client/src/i18n/translations/de.ts @@ -147,6 +147,7 @@ const de: Record = { 'settings.tabs.notifications': 'Benachrichtigungen', 'settings.tabs.integrations': 'Integrationen', 'settings.tabs.account': 'Konto', + 'settings.tabs.offline': 'Offline', 'settings.tabs.about': 'Über', 'settings.map': 'Karte', 'settings.mapTemplate': 'Karten-Vorlage', diff --git a/client/src/i18n/translations/en.ts b/client/src/i18n/translations/en.ts index 8acb2238..596b272c 100644 --- a/client/src/i18n/translations/en.ts +++ b/client/src/i18n/translations/en.ts @@ -147,6 +147,7 @@ const en: Record = { 'settings.tabs.notifications': 'Notifications', 'settings.tabs.integrations': 'Integrations', 'settings.tabs.account': 'Account', + 'settings.tabs.offline': 'Offline', 'settings.tabs.about': 'About', 'settings.map': 'Map', 'settings.mapTemplate': 'Map Template', diff --git a/client/src/i18n/translations/es.ts b/client/src/i18n/translations/es.ts index 518bac4e..efb64c3f 100644 --- a/client/src/i18n/translations/es.ts +++ b/client/src/i18n/translations/es.ts @@ -145,6 +145,7 @@ const es: Record = { 'settings.tabs.notifications': 'Notificaciones', 'settings.tabs.integrations': 'Integraciones', 'settings.tabs.account': 'Cuenta', + 'settings.tabs.offline': 'Offline', 'settings.tabs.about': 'Acerca de', 'settings.map': 'Mapa', 'settings.mapTemplate': 'Plantilla del mapa', diff --git a/client/src/i18n/translations/fr.ts b/client/src/i18n/translations/fr.ts index b5aaa41a..09dddc83 100644 --- a/client/src/i18n/translations/fr.ts +++ b/client/src/i18n/translations/fr.ts @@ -144,6 +144,7 @@ const fr: Record = { 'settings.tabs.notifications': 'Notifications', 'settings.tabs.integrations': 'Intégrations', 'settings.tabs.account': 'Compte', + 'settings.tabs.offline': 'Offline', 'settings.tabs.about': 'À propos', 'settings.map': 'Carte', 'settings.mapTemplate': 'Modèle de carte', diff --git a/client/src/i18n/translations/hu.ts b/client/src/i18n/translations/hu.ts index 816fe69d..00a29375 100644 --- a/client/src/i18n/translations/hu.ts +++ b/client/src/i18n/translations/hu.ts @@ -144,6 +144,7 @@ const hu: Record = { 'settings.tabs.notifications': 'Értesítések', 'settings.tabs.integrations': 'Integrációk', 'settings.tabs.account': 'Fiók', + 'settings.tabs.offline': 'Offline', 'settings.tabs.about': 'Névjegy', 'settings.map': 'Térkép', 'settings.mapTemplate': 'Térkép sablon', diff --git a/client/src/i18n/translations/it.ts b/client/src/i18n/translations/it.ts index 8c7d986e..6212d8ac 100644 --- a/client/src/i18n/translations/it.ts +++ b/client/src/i18n/translations/it.ts @@ -144,6 +144,7 @@ const it: Record = { 'settings.tabs.notifications': 'Notifiche', 'settings.tabs.integrations': 'Integrazioni', 'settings.tabs.account': 'Account', + 'settings.tabs.offline': 'Offline', 'settings.tabs.about': 'Informazioni', 'settings.map': 'Mappa', 'settings.mapTemplate': 'Modello Mappa', diff --git a/client/src/i18n/translations/nl.ts b/client/src/i18n/translations/nl.ts index ab7790bc..229ad70c 100644 --- a/client/src/i18n/translations/nl.ts +++ b/client/src/i18n/translations/nl.ts @@ -144,6 +144,7 @@ const nl: Record = { 'settings.tabs.notifications': 'Meldingen', 'settings.tabs.integrations': 'Integraties', 'settings.tabs.account': 'Account', + 'settings.tabs.offline': 'Offline', 'settings.tabs.about': 'Over', 'settings.map': 'Kaart', 'settings.mapTemplate': 'Kaartsjabloon', diff --git a/client/src/i18n/translations/pl.ts b/client/src/i18n/translations/pl.ts index a3a2953b..302801a7 100644 --- a/client/src/i18n/translations/pl.ts +++ b/client/src/i18n/translations/pl.ts @@ -130,6 +130,7 @@ const pl: Record = { 'settings.tabs.notifications': 'Powiadomienia', 'settings.tabs.integrations': 'Integracje', 'settings.tabs.account': 'Konto', + 'settings.tabs.offline': 'Offline', 'settings.tabs.about': 'O aplikacji', 'settings.map': 'Mapa', 'settings.mapTemplate': 'Szablon mapy', diff --git a/client/src/i18n/translations/ru.ts b/client/src/i18n/translations/ru.ts index 6842f015..40e093d4 100644 --- a/client/src/i18n/translations/ru.ts +++ b/client/src/i18n/translations/ru.ts @@ -144,6 +144,7 @@ const ru: Record = { 'settings.tabs.notifications': 'Уведомления', 'settings.tabs.integrations': 'Интеграции', 'settings.tabs.account': 'Аккаунт', + 'settings.tabs.offline': 'Offline', 'settings.tabs.about': 'О приложении', 'settings.map': 'Карта', 'settings.mapTemplate': 'Шаблон карты', diff --git a/client/src/i18n/translations/zh.ts b/client/src/i18n/translations/zh.ts index e78e4b94..d6aa8278 100644 --- a/client/src/i18n/translations/zh.ts +++ b/client/src/i18n/translations/zh.ts @@ -144,6 +144,7 @@ const zh: Record = { 'settings.tabs.notifications': '通知', 'settings.tabs.integrations': '集成', 'settings.tabs.account': '账户', + 'settings.tabs.offline': 'Offline', 'settings.tabs.about': '关于', 'settings.map': '地图', 'settings.mapTemplate': '地图模板', diff --git a/client/src/i18n/translations/zhTw.ts b/client/src/i18n/translations/zhTw.ts index e7393705..83d31c2e 100644 --- a/client/src/i18n/translations/zhTw.ts +++ b/client/src/i18n/translations/zhTw.ts @@ -144,6 +144,7 @@ const zhTw: Record = { 'settings.tabs.notifications': '通知', 'settings.tabs.integrations': '整合', 'settings.tabs.account': '帳戶', + 'settings.tabs.offline': 'Offline', 'settings.tabs.about': '關於', 'settings.map': '地圖', 'settings.mapTemplate': '地圖模板', diff --git a/client/src/pages/DashboardPage.tsx b/client/src/pages/DashboardPage.tsx index 9b02b285..fcc253a2 100644 --- a/client/src/pages/DashboardPage.tsx +++ b/client/src/pages/DashboardPage.tsx @@ -1,6 +1,7 @@ import React, { useEffect, useState, useRef } from 'react' import { useNavigate } from 'react-router-dom' import { tripsApi } from '../api/client' +import { tripRepo } from '../repo/tripRepo' import { useAuthStore } from '../store/authStore' import { useSettingsStore } from '../store/settingsStore' import { useTranslation } from '../i18n' @@ -713,12 +714,9 @@ export default function DashboardPage(): React.ReactElement { const loadTrips = async () => { setIsLoading(true) try { - const [active, archived] = await Promise.all([ - tripsApi.list(), - tripsApi.list({ archived: 1 }), - ]) - setTrips(sortTrips(active.trips)) - setArchivedTrips(sortTrips(archived.trips)) + const { trips, archivedTrips } = await tripRepo.list() + setTrips(sortTrips(trips)) + setArchivedTrips(sortTrips(archivedTrips)) } catch { toast.error(t('dashboard.toast.loadError')) } finally { diff --git a/client/src/pages/SettingsPage.tsx b/client/src/pages/SettingsPage.tsx index 1d740a25..fedcdb31 100644 --- a/client/src/pages/SettingsPage.tsx +++ b/client/src/pages/SettingsPage.tsx @@ -42,7 +42,7 @@ export default function SettingsPage(): React.ReactElement { { id: 'map', label: t('settings.tabs.map') }, { id: 'notifications', label: t('settings.tabs.notifications') }, ...(hasIntegrations ? [{ id: 'integrations', label: t('settings.tabs.integrations') }] : []), - { id: 'offline', label: t('settings.tabs.offline', 'Offline') }, + { id: 'offline', label: t('settings.tabs.offline') }, { id: 'account', label: t('settings.tabs.account') }, ...(appVersion ? [{ id: 'about', label: t('settings.tabs.about') }] : []), ] diff --git a/client/src/repo/tripRepo.ts b/client/src/repo/tripRepo.ts index 6b6c4696..082e346a 100644 --- a/client/src/repo/tripRepo.ts +++ b/client/src/repo/tripRepo.ts @@ -3,6 +3,23 @@ import { offlineDb, upsertTrip } from '../db/offlineDb' import type { Trip } from '../types' export const tripRepo = { + async list(): Promise<{ trips: Trip[]; archivedTrips: Trip[] }> { + if (!navigator.onLine) { + const all = await offlineDb.trips.toArray() + return { + trips: all.filter(t => !t.is_archived), + archivedTrips: all.filter(t => t.is_archived), + } + } + const [active, archived] = await Promise.all([ + tripsApi.list(), + tripsApi.list({ archived: 1 }), + ]) + active.trips.forEach(t => upsertTrip(t)) + archived.trips.forEach(t => upsertTrip(t)) + return { trips: active.trips, archivedTrips: archived.trips } + }, + async get(tripId: number | string): Promise<{ trip: Trip }> { if (!navigator.onLine) { const cached = await offlineDb.trips.get(Number(tripId))