2025-03-04 22:21:24 +01:00
|
|
|
<script lang="ts">
|
|
|
|
/**
|
|
|
|
* Statistics, based on the tagRendering, for a single layer
|
|
|
|
*/
|
|
|
|
import LayerConfig from "../../Models/ThemeConfig/LayerConfig"
|
|
|
|
import Tr from "../Base/Tr.svelte"
|
|
|
|
import Loading from "../Base/Loading.svelte"
|
|
|
|
import ToSvelte from "../Base/ToSvelte.svelte"
|
|
|
|
import TagRenderingChart from "../BigComponents/TagRenderingChart"
|
|
|
|
import type { Feature } from "geojson"
|
|
|
|
import { AccordionItem } from "flowbite-svelte"
|
|
|
|
import ThemeViewState from "../../Models/ThemeViewState"
|
|
|
|
import DefaultIcon from "../Map/DefaultIcon.svelte"
|
2025-04-07 03:29:27 +02:00
|
|
|
import { Store } from "../../Logic/UIEventSource"
|
2025-03-04 22:21:24 +01:00
|
|
|
|
|
|
|
export let layer: LayerConfig
|
|
|
|
export let state: ThemeViewState
|
|
|
|
let bbox = state.mapProperties.bounds
|
2025-04-15 18:18:44 +02:00
|
|
|
let elements: Store<Feature[]> = bbox.mapD((bbox) =>
|
|
|
|
state.perLayer.get(layer.id).GetFeaturesWithin(bbox)
|
|
|
|
)
|
2025-03-04 22:21:24 +01:00
|
|
|
|
2025-03-06 16:21:55 +01:00
|
|
|
let trs = layer.tagRenderings.filter((tr) => tr.question)
|
2025-03-04 22:21:24 +01:00
|
|
|
</script>
|
|
|
|
|
2025-03-06 16:21:55 +01:00
|
|
|
<AccordionItem
|
|
|
|
paddingDefault="p-2"
|
|
|
|
inactiveClass="text-black"
|
|
|
|
defaultClass="w-full flex-grow justify-start"
|
|
|
|
>
|
2025-03-04 22:21:24 +01:00
|
|
|
<div slot="header" class="flex items-center gap-x-2">
|
2025-03-06 16:21:55 +01:00
|
|
|
<div class="inline-block h-8 w-8">
|
2025-03-04 22:21:24 +01:00
|
|
|
<DefaultIcon {layer} />
|
|
|
|
</div>
|
|
|
|
<Tr t={layer.name} />
|
2025-04-07 03:29:27 +02:00
|
|
|
({$elements.length} elements in view)
|
2025-03-04 22:21:24 +01:00
|
|
|
</div>
|
|
|
|
|
2025-04-07 03:29:27 +02:00
|
|
|
{#if $elements === undefined}
|
2025-03-04 22:21:24 +01:00
|
|
|
<Loading />
|
2025-04-07 03:29:27 +02:00
|
|
|
{:else if $elements.length === 0}
|
2025-03-04 22:21:24 +01:00
|
|
|
No features in view
|
|
|
|
{:else}
|
2025-03-06 16:21:55 +01:00
|
|
|
<div class="flex w-full flex-wrap gap-x-4 gap-y-4">
|
2025-03-04 22:21:24 +01:00
|
|
|
{#each trs as tr}
|
2025-07-11 03:44:26 +02:00
|
|
|
<h3> {#if tr.question}<Tr t={tr.question}/>{:else} {tr.id}{/if}</h3>
|
2025-03-06 16:21:55 +01:00
|
|
|
<ToSvelte
|
|
|
|
construct={() =>
|
2025-04-07 03:29:27 +02:00
|
|
|
new TagRenderingChart($elements, tr, {
|
2025-07-11 03:44:26 +02:00
|
|
|
chartclasses: "w-full self-center"
|
2025-03-06 16:21:55 +01:00
|
|
|
}).SetClass(tr.multiAnswer ? "w-128" : "w-96")}
|
|
|
|
/>
|
2025-03-04 22:21:24 +01:00
|
|
|
{/each}
|
|
|
|
</div>
|
|
|
|
{/if}
|
|
|
|
</AccordionItem>
|