merge trails function added (#627)

* merge trails function added

* fix conflict resolve issues

* avoid incorrect authorship when merging trail comments

* require edit access for all selected trails before merge

* fix likes checkbox binding in trail merge modal

* improve error handling

* require editable target and deletable sources for merge

* avoid duplicate trail fetch during merge

* prevent duplicate likes when merging trails

* check photo download responses during trail merge

* add merge completion toast notifications

* cleanup

* small fixes

* move merge code to backend, option to merge single trail selection with similar one, automatic merge for integrations add as option, maintenance page to find and merge similar trails added

* fix build error

* fix

* docu, beautifying, refactoring

---------

Co-authored-by: Flomp <Flomp@users.noreply.github.com>
This commit is contained in:
slothful-vassal
2026-05-09 13:09:26 +02:00
committed by GitHub
parent d2268429c7
commit b5739cb72e
43 changed files with 5232 additions and 216 deletions

View File

@@ -3,6 +3,10 @@ export interface BaseIntegration {
active: boolean
}
export interface IntegrationMergeSettings {
enabled: boolean;
}
export interface StravaIntegration extends BaseIntegration {
clientId: string | number;
clientSecret?: string;
@@ -13,6 +17,7 @@ export interface StravaIntegration extends BaseIntegration {
expiresAt?: number;
after?: string
privacy: "original" | "settings"
merge: IntegrationMergeSettings;
}
export interface KomootIntegration extends BaseIntegration {
@@ -21,6 +26,7 @@ export interface KomootIntegration extends BaseIntegration {
completed: boolean,
planned: boolean
privacy: "original" | "settings"
merge: IntegrationMergeSettings;
}
export interface HammerheadIntegration extends BaseIntegration {
@@ -29,6 +35,7 @@ export interface HammerheadIntegration extends BaseIntegration {
completed: boolean,
planned: boolean,
after?: string
merge: IntegrationMergeSettings;
}
@@ -45,4 +52,4 @@ export class Integration {
this.komoot = komoot;
this.hammerhead = hammerhead;
}
}
}