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.title")}

{t("sync.garmin.notConnected")}

{t("sync.garmin.goConnect")}
); } return (

{t("sync.garmin.title")}

{t("sync.garmin.subtitle")}

{loaderData.status !== "active" && (
{t("sync.garmin.needsRelink")}
)}
{actionData && "ok" in actionData && actionData.ok && (

{t("sync.garmin.requested")}

)} {actionData && "ok" in actionData && !actionData.ok && (

{t(`sync.garmin.errors.${actionData.error}`)}

)}

{t("sync.garmin.asyncNote")}

{loaderData.batches.length > 0 && ( )}
); }