mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-19 21:31:46 +00:00
fix(offline): load trips from Dexie on dashboard when offline; fix offline tab i18n key
This commit is contained in:
@@ -149,6 +149,7 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'settings.tabs.notifications': 'الإشعارات',
|
||||
'settings.tabs.integrations': 'التكاملات',
|
||||
'settings.tabs.account': 'الحساب',
|
||||
'settings.tabs.offline': 'Offline',
|
||||
'settings.tabs.about': 'حول',
|
||||
'settings.map': 'الخريطة',
|
||||
'settings.mapTemplate': 'قالب الخريطة',
|
||||
|
||||
@@ -144,6 +144,7 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'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',
|
||||
|
||||
@@ -145,6 +145,7 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'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',
|
||||
|
||||
@@ -147,6 +147,7 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'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',
|
||||
|
||||
@@ -147,6 +147,7 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'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',
|
||||
|
||||
@@ -145,6 +145,7 @@ const es: Record<string, string> = {
|
||||
'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',
|
||||
|
||||
@@ -144,6 +144,7 @@ const fr: Record<string, string> = {
|
||||
'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',
|
||||
|
||||
@@ -144,6 +144,7 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'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',
|
||||
|
||||
@@ -144,6 +144,7 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'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',
|
||||
|
||||
@@ -144,6 +144,7 @@ const nl: Record<string, string> = {
|
||||
'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',
|
||||
|
||||
@@ -130,6 +130,7 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'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',
|
||||
|
||||
@@ -144,6 +144,7 @@ const ru: Record<string, string> = {
|
||||
'settings.tabs.notifications': 'Уведомления',
|
||||
'settings.tabs.integrations': 'Интеграции',
|
||||
'settings.tabs.account': 'Аккаунт',
|
||||
'settings.tabs.offline': 'Offline',
|
||||
'settings.tabs.about': 'О приложении',
|
||||
'settings.map': 'Карта',
|
||||
'settings.mapTemplate': 'Шаблон карты',
|
||||
|
||||
@@ -144,6 +144,7 @@ const zh: Record<string, string> = {
|
||||
'settings.tabs.notifications': '通知',
|
||||
'settings.tabs.integrations': '集成',
|
||||
'settings.tabs.account': '账户',
|
||||
'settings.tabs.offline': 'Offline',
|
||||
'settings.tabs.about': '关于',
|
||||
'settings.map': '地图',
|
||||
'settings.mapTemplate': '地图模板',
|
||||
|
||||
@@ -144,6 +144,7 @@ const zhTw: Record<string, string> = {
|
||||
'settings.tabs.notifications': '通知',
|
||||
'settings.tabs.integrations': '整合',
|
||||
'settings.tabs.account': '帳戶',
|
||||
'settings.tabs.offline': 'Offline',
|
||||
'settings.tabs.about': '關於',
|
||||
'settings.map': '地圖',
|
||||
'settings.mapTemplate': '地圖模板',
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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') }] : []),
|
||||
]
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user