Improve save public list (#554)

* improve save public list

* remove obsolete code fragment

---------

Co-authored-by: Flomp <Flomp@users.noreply.github.com>
This commit is contained in:
slothful-vassal
2026-02-28 09:26:48 +01:00
committed by GitHub
parent 536276e0b3
commit 230f42d639
14 changed files with 56 additions and 13 deletions

View File

@@ -6,16 +6,20 @@
title?: string; title?: string;
text: string; text: string;
action?: string; action?: string;
deny?: string;
id?: string; id?: string;
onconfirm?: () => void onconfirm?: () => void
oncancel?: () => void
} }
let { let {
title = $_("confirm-deletion"), title = $_("confirm-deletion"),
text, text,
action = "delete", action = "delete",
deny ="cancel",
id = "confirm-modal", id = "confirm-modal",
onconfirm onconfirm,
oncancel
}: Props = $props(); }: Props = $props();
let modal: Modal; let modal: Modal;
@@ -24,6 +28,11 @@
modal.openModal(); modal.openModal();
} }
function cancel() {
oncancel?.();
modal.closeModal!();
}
function confirm() { function confirm() {
onconfirm?.() onconfirm?.()
modal.closeModal!(); modal.closeModal!();
@@ -36,8 +45,8 @@
{/snippet} {/snippet}
{#snippet footer()} {#snippet footer()}
<div class="flex items-center gap-4"> <div class="flex items-center gap-4">
<button class="btn-secondary" onclick={() => modal.closeModal()} <button class="btn-secondary" onclick={cancel}
>{$_("cancel")}</button >{$_(deny)}</button
> >
<button <button
id="confirm" id="confirm"

View File

@@ -215,6 +215,7 @@
"invalid-username": "Ungültiger Nutzername", "invalid-username": "Ungültiger Nutzername",
"italian": "Italienisch", "italian": "Italienisch",
"joined": "Beigetreten", "joined": "Beigetreten",
"keep-private": "Ohne Veröffentlichung fortfahren",
"keep-original": "", "keep-original": "",
"language": "Sprache", "language": "Sprache",
"latitude": "Breitengrad", "latitude": "Breitengrad",

View File

@@ -215,6 +215,7 @@
"invalid-username": "Invalid username", "invalid-username": "Invalid username",
"italian": "Italian", "italian": "Italian",
"joined": "Joined", "joined": "Joined",
"keep-private": "Keep private",
"keep-original": "Keep original", "keep-original": "Keep original",
"language": "Language", "language": "Language",
"latitude": "Latitude", "latitude": "Latitude",

View File

@@ -213,6 +213,7 @@
"invalid-date": "Fecha no válida", "invalid-date": "Fecha no válida",
"invalid-username": "Usuario no válido", "invalid-username": "Usuario no válido",
"italian": "Italiano", "italian": "Italiano",
"keep-private": "Keep private",
"joined": "Afiliado", "joined": "Afiliado",
"keep-original": "", "keep-original": "",
"language": "Idioma", "language": "Idioma",

View File

@@ -215,6 +215,7 @@
"invalid-username": "Erabiltzailea ez da zuzena", "invalid-username": "Erabiltzailea ez da zuzena",
"italian": "Italiera", "italian": "Italiera",
"joined": "Sartu da", "joined": "Sartu da",
"keep-private": "Keep private",
"keep-original": "", "keep-original": "",
"language": "Hizkuntza", "language": "Hizkuntza",
"latitude": "Latitudea", "latitude": "Latitudea",

View File

@@ -215,6 +215,7 @@
"invalid-username": "Nom d'utilisateur invalide", "invalid-username": "Nom d'utilisateur invalide",
"italian": "Italien", "italian": "Italien",
"joined": "Rejoint", "joined": "Rejoint",
"keep-private": "Keep private",
"keep-original": "", "keep-original": "",
"language": "Langue", "language": "Langue",
"latitude": "Latitude", "latitude": "Latitude",

View File

@@ -215,6 +215,7 @@
"invalid-username": "Érvénytelen felhasználó", "invalid-username": "Érvénytelen felhasználó",
"italian": "Olasz", "italian": "Olasz",
"joined": "Joined", "joined": "Joined",
"keep-private": "Keep private",
"keep-original": "", "keep-original": "",
"language": "Nyelf", "language": "Nyelf",
"latitude": "Szélesség", "latitude": "Szélesség",

View File

@@ -215,6 +215,7 @@
"invalid-username": "Nome utente non valido", "invalid-username": "Nome utente non valido",
"italian": "Italiano", "italian": "Italiano",
"joined": "Aggiunto", "joined": "Aggiunto",
"keep-private": "Keep private",
"keep-original": "", "keep-original": "",
"language": "Lingua", "language": "Lingua",
"latitude": "Latitudine", "latitude": "Latitudine",

View File

@@ -216,6 +216,7 @@
"invalid-username": "Ongeldige gebruikersnaam", "invalid-username": "Ongeldige gebruikersnaam",
"italian": "Italiaans", "italian": "Italiaans",
"joined": "Aangesloten", "joined": "Aangesloten",
"keep-private": "Keep private",
"keep-original": "", "keep-original": "",
"language": "Taal", "language": "Taal",
"latitude": "Breedtegraad", "latitude": "Breedtegraad",

View File

@@ -215,6 +215,7 @@
"invalid-username": "Błędna nazwa użytkownika", "invalid-username": "Błędna nazwa użytkownika",
"italian": "Włoski", "italian": "Włoski",
"joined": "Dołączono", "joined": "Dołączono",
"keep-private": "Keep private",
"keep-original": "", "keep-original": "",
"language": "Język", "language": "Język",
"latitude": "Szerokość", "latitude": "Szerokość",

View File

@@ -215,6 +215,7 @@
"invalid-username": "Nome de usuário inválido", "invalid-username": "Nome de usuário inválido",
"italian": "Italiano", "italian": "Italiano",
"joined": "Joined", "joined": "Joined",
"keep-private": "Keep private",
"keep-original": "", "keep-original": "",
"language": "Língua", "language": "Língua",
"latitude": "Latitude", "latitude": "Latitude",

View File

@@ -215,6 +215,7 @@
"invalid-username": "Некорректное имя пользователя", "invalid-username": "Некорректное имя пользователя",
"italian": "Итальянский", "italian": "Итальянский",
"joined": "Зарегистрирован", "joined": "Зарегистрирован",
"keep-private": "Keep private",
"keep-original": "", "keep-original": "",
"language": "Язык", "language": "Язык",
"latitude": "Широта", "latitude": "Широта",

View File

@@ -215,6 +215,7 @@
"invalid-username": "无效用户名", "invalid-username": "无效用户名",
"italian": "意大利语", "italian": "意大利语",
"joined": "已加入", "joined": "已加入",
"keep-private": "Keep private",
"keep-original": "", "keep-original": "",
"language": "语言", "language": "语言",
"latitude": "纬度", "latitude": "纬度",

View File

@@ -51,6 +51,7 @@
let loading: boolean = $state(false); let loading: boolean = $state(false);
let newShares: TrailShare[] = []; let newShares: TrailShare[] = [];
let publicList: boolean = $state(data.list?.public);
let shareConfirmModal: ConfirmModal; let shareConfirmModal: ConfirmModal;
let publishConfirmModal: ConfirmModal; let publishConfirmModal: ConfirmModal;
@@ -104,11 +105,8 @@
}); });
async function checkPrerequisites() { async function checkPrerequisites() {
if ( if ( $formData.public === true &&
(data.list?.public === false && $formData.public === true) || $formData.expand?.trails?.find(t => !t.public) !== undefined
($formData.public === true &&
(data.list?.expand?.trails?.length ?? 0) <
($formData.expand?.trails?.length ?? 0))
) { ) {
publishConfirmModal.openModal(); publishConfirmModal.openModal();
return false; return false;
@@ -139,6 +137,7 @@
icon: "check", icon: "check",
text: $_("list-saved-successfully"), text: $_("list-saved-successfully"),
}); });
publicList = $formData.public;
} catch (e) { } catch (e) {
show_toast({ show_toast({
type: "error", type: "error",
@@ -334,7 +333,11 @@
label={$_("description")} label={$_("description")}
error={$errors.description} error={$errors.description}
></Editor> ></Editor>
<Toggle name="public" label={$_("public")}></Toggle> <Toggle
name="public"
label={$formData.public ? $_("public") : $_("private")}
icon={$formData.public ? "globe" : "lock"}
></Toggle>
<h3 class="text-xl font-semibold"> <h3 class="text-xl font-semibold">
{$_("trail", { values: { n: 2 } })} {$_("trail", { values: { n: 2 } })}
</h3> </h3>
@@ -463,8 +466,13 @@
action="confirm" action="confirm"
bind:this={shareConfirmModal} bind:this={shareConfirmModal}
onconfirm={async () => { onconfirm={async () => {
await updateTrailShares(); loading = true;
await saveList(); try {
await updateTrailShares();
await saveList();
} finally {
loading = false;
}
}} }}
></ConfirmModal> ></ConfirmModal>
@@ -473,10 +481,24 @@
text={$_("list-public-warning")} text={$_("list-public-warning")}
title={$_("confirm-publish")} title={$_("confirm-publish")}
action="confirm" action="confirm"
deny="keep-private"
bind:this={publishConfirmModal} bind:this={publishConfirmModal}
onconfirm={async () => { onconfirm={async () => {
await publishTrails(); loading = true;
await saveList(); try {
await publishTrails();
await saveList();
} finally {
loading = false;
}
}}
oncancel={async () => {
loading = true;
try {
await saveList();
} finally {
loading = false;
}
}} }}
></ConfirmModal> ></ConfirmModal>