import { data, Form, Link, useNavigation } from "react-router"; import { useTranslation } from "react-i18next"; import type { Route } from "./+types/sync.import.garmin"; import { ClientDate } from "~/components/ClientDate"; export function meta() { return [{ title: "Garmin import — trails.cool" }]; } export async function loader({ request }: Route.LoaderArgs) { const { loadGarminImportPage } = await import("./sync.import.garmin.server"); return data(await loadGarminImportPage(request)); } export async function action({ request }: Route.ActionArgs) { const { handleGarminBackfillAction } = await import("./sync.import.garmin.server"); return data(await handleGarminBackfillAction(request)); } export default function GarminImport({ loaderData, actionData }: Route.ComponentProps) { const { t } = useTranslation(["journal"]); const navigation = useNavigation(); const busy = navigation.state !== "idle"; if (!loaderData.connected) { return (
{t("sync.garmin.notConnected")}
{t("sync.garmin.goConnect")}{t("sync.garmin.subtitle")}
{loaderData.status !== "active" && ({t("sync.garmin.requested")}
)} {actionData && "ok" in actionData && !actionData.ok && ({t(`sync.garmin.errors.${actionData.error}`)}
)}{t("sync.garmin.asyncNote")}
{loaderData.batches.length > 0 && (