finishes feed

This commit is contained in:
Christian Beutel
2025-07-12 16:36:40 +02:00
parent e8c7e7721a
commit 03bf5aa5ad
33 changed files with 800 additions and 232 deletions

View File

@@ -21,14 +21,17 @@
import TrailExportModal from "./trail_export_modal.svelte";
import TrailShareModal from "./trail_share_modal.svelte";
import { handleFromRecordWithIRI } from "$lib/util/activitypub_util";
import type { Snippet } from "svelte";
interface Props {
trails?: Set<Trail> | undefined;
mode: "overview" | "map" | "list" | "multi-select";
onconfirm?: (resetSelection?: boolean) => void;
toggle?: Snippet<[any]>;
onDelete?: () => void;
onShare?: () => void;
}
let { trails, mode, onconfirm }: Props = $props();
let { trails, mode, toggle, onDelete, onShare }: Props = $props();
let confirmModal: ConfirmModal;
let listSelectModal: ListSelectModal;
@@ -302,7 +305,7 @@
await doDeleteTrail(dTrail);
}
onconfirm?.(true);
onDelete?.();
}
}
@@ -315,7 +318,7 @@
}
async function handleShareUpdate() {
onconfirm?.();
onShare?.();
}
async function handleListSelection(list: List) {
@@ -390,9 +393,14 @@
}
</script>
<Dropdown items={dropdownItems()} onchange={(item) => handleDropdownClick(item)}
>{#snippet children({ toggleMenu: openDropdown })}
{#if mode == "multi-select"}
<Dropdown
items={dropdownItems()}
onchange={(item) => handleDropdownClick(item)}
>
{#snippet children({ toggleMenu: openDropdown })}
{#if toggle}{@render toggle({
toggleMenu: openDropdown,
})}{:else if mode == "multi-select"}
<button
aria-label="Open dropdown"
class="btn-primary flex-shrink-0 !font-medium"
@@ -400,7 +408,8 @@
>
<span
>{trails?.size}
{$_("selected")} <i class="fa fa-caret-down ml-1"></i></span
{$_("selected")}
<i class="fa fa-caret-down ml-1"></i></span
>
</button>
{:else}

View File

@@ -403,6 +403,10 @@
<LikeButton {trail}></LikeButton>
<TrailDropdown
trails={new Set<Trail>([trail])}
onDelete={() =>
history.length
? history.back()
: goto("/trails")}
{mode}
></TrailDropdown>
</div>

View File

@@ -9,7 +9,7 @@
import TrailTable from "./trail_table.svelte";
import SkeletonCard from "../base/skeleton_card.svelte";
import SkeletonListItem from "../base/skeleton_list_item.svelte";
import { onMount } from "svelte";
import { onMount, tick } from "svelte";
import TrailDropdown from "$lib/components/trail/trail_dropdown.svelte";
interface Props {
@@ -191,15 +191,13 @@
else hoveredTrail = undefined;
}
function handleTrailsEditDone(resetSelection: boolean = false) {
async function handleTrailsEditDone(resetSelection: boolean = false) {
if (resetSelection) {
selection?.clear();
hoveredTrail = undefined;
}
setTimeout(() => {
onupdate?.(filter, selection);
}, 500);
await tick();
onupdate?.(filter, selection);
}
function handleMouseEnter(trail: Trail) {
@@ -224,7 +222,8 @@
<TrailDropdown
trails={selection}
mode={"multi-select"}
onconfirm={handleTrailsEditDone}
onDelete={() => handleTrailsEditDone(true)}
onShare={() => handleTrailsEditDone(false)}
/>
</div>
{/if}