fixes strava integration

This commit is contained in:
Christian Beutel
2025-09-13 16:04:48 +02:00
parent 962fddc1e2
commit 72acac072c
17 changed files with 102 additions and 50 deletions

View File

@@ -1,4 +1,5 @@
<script lang="ts">
import Datepicker from "$lib/components/base/datepicker.svelte";
import Modal from "$lib/components/base/modal.svelte";
import TextField from "$lib/components/base/text_field.svelte";
import Toggle from "$lib/components/base/toggle.svelte";
@@ -25,23 +26,32 @@
modal.openModal();
}
const { form, errors } = createForm({
const {
form,
errors,
data: formData,
} = createForm({
initialValues: {
clientId: integration?.strava?.clientId ?? "",
clientSecret: integration?.strava?.clientSecret ?? "",
routes: integration?.strava?.routes ?? true,
activities: integration?.strava?.activities ?? true,
active: integration?.strava?.active ?? false,
after: integration?.strava?.after,
},
extend: validator({
schema: StravaSchema,
}),
onSubmit: async (form) => {
form.active = integration?.strava?.active ?? form.active
form.active = integration?.strava?.active ?? form.active;
onsave?.(form);
modal.closeModal();
},
});
function clearAfterDate() {
($formData as any).after = undefined;
}
</script>
<Modal
@@ -60,7 +70,9 @@
></TextField>
<TextField
label="Client Secret"
placeholder={integration?.strava ? `(${$_("unchanged")})` : "de8b3789bd7116d..."}
placeholder={integration?.strava
? `(${$_("unchanged")})`
: "de8b3789bd7116d..."}
name="clientSecret"
type="password"
error={$errors.clientSecret}
@@ -73,6 +85,25 @@
label={$_("activity", { values: { n: 2 } })}
></Toggle>
</div>
<p
class="text-xs text-gray-500 max-w-lg pt-4 pb-1 border-t border-input-border"
>
{$_("strava-integration-after-date-hint")}
</p>
<div class="flex items-end relative gap-x-2">
<Datepicker
error={$errors.after}
label={$_("after")}
bind:value={$formData.after}
></Datepicker>
<button
class="btn-icon mb-[10px]"
type="button"
onclick={clearAfterDate}
aria-label="Clear 'after' date"
><i class="fa fa-close"></i></button
>
</div>
</form>
{/snippet}
{#snippet footer()}

View File

@@ -32,6 +32,7 @@
"bakery": "Bäckerei",
"barrier": "Barriere",
"basic-info": "Basisinformation",
"basque": "Baskisch",
"before": "Vor",
"bicycle-parking": "Fahrrad Parkplatz",
"bicycle-rental": "Fahrradverleih",
@@ -56,7 +57,6 @@
"car": "Auto",
"car-motorcycle": "Auto/Motorrad",
"card": "{n, plural, =1 {Karte} other {Karten}}",
"basque": "Baskisch",
"categories": "Kategorien",
"category": "Kategorie",
"change": "Ändern",
@@ -390,6 +390,7 @@
"statistics": "Statistiken",
"stop-drawing": "Zeichnen beenden",
"stop-editing": "Bearbeiten beenden",
"strava-integration-after-date-hint": "",
"subway-stop": "U-Bahn Eingang",
"summit": "Gipfel",
"summit-book": "Gipfelbuch",

View File

@@ -32,6 +32,7 @@
"bakery": "Bakery",
"barrier": "Barrier",
"basic-info": "Basic Info",
"basque": "Basque",
"before": "Before",
"bicycle-parking": "Bicycle Parking",
"bicycle-rental": "Bicycle Rental",
@@ -56,7 +57,6 @@
"car": "Car",
"car-motorcycle": "Car/Motorcycle",
"card": "{n, plural, =1 {Card} other {Cards}}",
"basque": "Basque",
"categories": "Categories",
"category": "Category",
"change": "Change",
@@ -390,6 +390,7 @@
"statistics": "Statistics",
"stop-drawing": "Stop drawing",
"stop-editing": "Stop editing",
"strava-integration-after-date-hint": "If your account has a large amount of acitivities you may run into Strava's API rate limit preventing you from syncing all activities at once. To mitigate this issue you can set an \"After\" date below so that only activities that were recorded after this date are synced.",
"subway-stop": "Subway entrance",
"summit": "Summit",
"summit-book": "Summit Book",

View File

@@ -32,6 +32,7 @@
"bakery": "Bakery",
"barrier": "Barrier",
"basic-info": "Información básica",
"basque": "Basque",
"before": "Antes",
"bicycle-parking": "Bicycle Parking",
"bicycle-rental": "Bicycle Rental",
@@ -56,7 +57,6 @@
"car": "Coche",
"car-motorcycle": "Car/Motorcycle",
"card": "{n, plural, one {}=1 {Ficha} other {Fichas}}",
"basque": "Basque",
"categories": "Categorías",
"category": "Categoría",
"change": "Modificar",
@@ -390,6 +390,7 @@
"statistics": "Estadísticas",
"stop-drawing": "Parar de diseñar",
"stop-editing": "Parar de editar",
"strava-integration-after-date-hint": "",
"subway-stop": "Subway entrance",
"summit": "Summit",
"summit-book": "Libro de ascensos",

View File

@@ -32,6 +32,7 @@
"bakery": "Okindegia",
"barrier": "Oztopoa",
"basic-info": "Oinarrizko informazioa",
"basque": "Basque",
"before": "Aurretik",
"bicycle-parking": "Bizikleta-parkina",
"bicycle-rental": "Bizikleta-alokairua",
@@ -56,7 +57,6 @@
"car": "Kotxea",
"car-motorcycle": "Kotxea/Motozikleta",
"card": "{n, plural, one {}=1 {Txartea} other {Txartelak}}",
"basque": "Basque",
"categories": "Kategoriak",
"category": "Kategoria",
"change": "Aldatu",
@@ -338,7 +338,6 @@
"route-point": "Ibilbideko puntua",
"russian": "Russian",
"save": "Gorde",
"russian": "Russian",
"save-list": "Gorde zerrenda",
"save-trail": "Gorde ibilaldia",
"save-your-trail-first": "Gorde zure ibilaldia lehenengo",
@@ -391,6 +390,7 @@
"statistics": "Estatistikak",
"stop-drawing": "Utzi marrazteari",
"stop-editing": "Utzi editatzeari",
"strava-integration-after-date-hint": "",
"subway-stop": "Metro sarbidea",
"summit": "Gailurra",
"summit-book": "Igoeren liburua",

View File

@@ -32,6 +32,7 @@
"bakery": "Bakery",
"barrier": "Barrier",
"basic-info": "Informations de base",
"basque": "Basque",
"before": "Avant le",
"bicycle-parking": "Bicycle Parking",
"bicycle-rental": "Bicycle Rental",
@@ -56,7 +57,6 @@
"car": "Voiture",
"car-motorcycle": "Car/Motorcycle",
"card": "{n, plural, =1 {Tuile} other {Tuiles}}",
"basque": "Basque",
"categories": "Catégories",
"category": "Catégorie",
"change": "Changement",
@@ -390,6 +390,7 @@
"statistics": "Statistiques",
"stop-drawing": "Arrêter de tracer",
"stop-editing": "Arrêter la modification",
"strava-integration-after-date-hint": "",
"subway-stop": "Subway entrance",
"summit": "Summit",
"summit-book": "Liste des ascensions",

View File

@@ -32,6 +32,7 @@
"bakery": "Bakery",
"barrier": "Barrier",
"basic-info": "Alap információk",
"basque": "Basque",
"before": "Before",
"bicycle-parking": "Bicycle Parking",
"bicycle-rental": "Bicycle Rental",
@@ -56,7 +57,6 @@
"car": "Car",
"car-motorcycle": "Car/Motorcycle",
"card": "{n, plural, =1 {Kártya} other {Kártyák}}",
"basque": "Basque",
"categories": "Kategóriák",
"category": "Kategória",
"change": "Változás",
@@ -390,6 +390,7 @@
"statistics": "Statistics",
"stop-drawing": "Stop drawing",
"stop-editing": "Stop editing",
"strava-integration-after-date-hint": "",
"subway-stop": "Subway entrance",
"summit": "Summit",
"summit-book": "Csúcspont könyv",

View File

@@ -32,6 +32,7 @@
"bakery": "Bakery",
"barrier": "Barrier",
"basic-info": "Informazioni di base",
"basque": "Basque",
"before": "Prima",
"bicycle-parking": "Bicycle Parking",
"bicycle-rental": "Bicycle Rental",
@@ -56,7 +57,6 @@
"car": "Car",
"car-motorcycle": "Car/Motorcycle",
"card": "{n, plural, =1 {Carta} other {Carte}}",
"basque": "Basque",
"categories": "Categorie",
"category": "Categoria",
"change": "Modifica",
@@ -390,6 +390,7 @@
"statistics": "Statistiche",
"stop-drawing": "Smettere di disegnare",
"stop-editing": "Stop editing",
"strava-integration-after-date-hint": "",
"subway-stop": "Subway entrance",
"summit": "Summit",
"summit-book": "Libro di vetta",

View File

@@ -32,6 +32,7 @@
"bakery": "Bakery",
"barrier": "Barrier",
"basic-info": "Algemene informatie",
"basque": "Basque",
"before": "Voor",
"bicycle-parking": "Bicycle Parking",
"bicycle-rental": "Bicycle Rental",
@@ -56,7 +57,6 @@
"car": "Wagen",
"car-motorcycle": "Car/Motorcycle",
"card": "{n, plural, =1 {Kaart} other {Kaarten}}",
"basque": "Basque",
"categories": "Categorieën",
"category": "Categorie",
"change": "Wijzigen",
@@ -390,6 +390,7 @@
"statistics": "Statistieken",
"stop-drawing": "Stop met tekenen",
"stop-editing": "Stop met bewerken",
"strava-integration-after-date-hint": "",
"subway-stop": "Subway entrance",
"summit": "Summit",
"summit-book": "Bergtopboek",

View File

@@ -32,6 +32,7 @@
"bakery": "Bakery",
"barrier": "Barrier",
"basic-info": "Podstawowe informacje",
"basque": "Basque",
"before": "Przed",
"bicycle-parking": "Bicycle Parking",
"bicycle-rental": "Bicycle Rental",
@@ -56,7 +57,6 @@
"car": "Samochód",
"car-motorcycle": "Car/Motorcycle",
"card": "{n, plural, =1 {Karta} other {Karty}}",
"basque": "Basque",
"categories": "Kategorie",
"category": "Kategoria",
"change": "Zmień",
@@ -390,6 +390,7 @@
"statistics": "Statystyki",
"stop-drawing": "Przestań rysować",
"stop-editing": "Zakończ edycję",
"strava-integration-after-date-hint": "",
"subway-stop": "Subway entrance",
"summit": "Summit",
"summit-book": "Logbook",

View File

@@ -32,6 +32,7 @@
"bakery": "Bakery",
"barrier": "Barrier",
"basic-info": "Informações básicas",
"basque": "Basque",
"before": "Antes",
"bicycle-parking": "Bicycle Parking",
"bicycle-rental": "Bicycle Rental",
@@ -56,7 +57,6 @@
"car": "Car",
"car-motorcycle": "Car/Motorcycle",
"card": "{n, plural, =1 {Cartão} other {Cartões}}",
"basque": "Basque",
"categories": "Categorias",
"category": "Categoria",
"change": "Alterar",
@@ -390,6 +390,7 @@
"statistics": "Statistics",
"stop-drawing": "Parar desenho",
"stop-editing": "Stop editing",
"strava-integration-after-date-hint": "",
"subway-stop": "Subway entrance",
"summit": "Summit",
"summit-book": "Livro da cimeira",

View File

@@ -32,6 +32,7 @@
"bakery": "Bakery",
"barrier": "Barrier",
"basic-info": "Основная информация",
"basque": "Basque",
"before": "До",
"bicycle-parking": "Bicycle Parking",
"bicycle-rental": "Bicycle Rental",
@@ -56,7 +57,6 @@
"car": "Автомобиль:",
"car-motorcycle": "Car/Motorcycle",
"card": "{n, plural, =1 {Карточка} other {Карточки}}",
"basque": "Basque",
"categories": "Категории",
"category": "Категория",
"change": "Изменить",
@@ -339,7 +339,6 @@
"russian": "Russian",
"save": "Сохранить",
"save-list": "Сохранить список",
"russian": "Russian",
"save-trail": "Сохранить трек",
"save-your-trail-first": "Сначала сохраните трек",
"search-cities": "Поиск по городам",
@@ -391,6 +390,7 @@
"statistics": "Статистика",
"stop-drawing": "Закончить рисование",
"stop-editing": "Закончить редактирование",
"strava-integration-after-date-hint": "",
"subway-stop": "Subway entrance",
"summit": "Summit",
"summit-book": "История поездок",
@@ -426,4 +426,4 @@
"width": "Ширина",
"wrong-username-or-password": "Неверный логин или пароль",
"you-can": "Вы можете"
}
}

View File

@@ -32,6 +32,7 @@
"bakery": "面包店",
"barrier": "障碍",
"basic-info": "基本信息",
"basque": "Basque",
"before": "之前",
"bicycle-parking": "自行车停车场",
"bicycle-rental": "自行车租车",
@@ -56,7 +57,6 @@
"car": "汽车",
"car-motorcycle": "汽车/摩托车",
"card": "{n, plural, =1 {卡片} other {卡片}}",
"basque": "Basque",
"categories": "分类",
"category": "分类",
"change": "更换",
@@ -390,6 +390,7 @@
"statistics": "统计",
"stop-drawing": "停止绘制",
"stop-editing": "停止编辑",
"strava-integration-after-date-hint": "",
"subway-stop": "地铁入口",
"summit": "山峰",
"summit-book": "详细日程",

View File

@@ -6,7 +6,8 @@ const StravaSchema = z.object({
clientSecret: z.string().length(40).optional().or(z.literal('')),
routes: z.boolean(),
activities: z.boolean(),
active: z.boolean()
active: z.boolean(),
after: z.string().date().optional(),
})
const KomootSchema = z.object({

View File

@@ -11,6 +11,7 @@ export interface StravaIntegration extends BaseIntegration {
accessToken?: string;
refreshToken?: string;
expiresAt?: number;
after?: string
}
export interface KomootIntegration extends BaseIntegration {