aboutsummaryrefslogtreecommitdiffstats
path: root/old-apps/projects/src/app/pages/views/entry-form/sections/labels.svelte
blob: a6f324b14091f98b6e5820efb0f9af7591e550ea (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<script>
	import LL from "$app/lib/i18n/i18n-svelte";
	import {generate_random_hex_color} from "$shared/lib/colors";
	import labels, {reload_labels, create_label_async} from "$app/lib/stores/labels";
	import Dropdown from "$shared/components/dropdown.svelte";

	let labelsError = "";
	let loading = false;
	let DropdownExports;

	function reset() {
		DropdownExports.reset();
		console.log($LL.views.entryForm.labels._logReset());
	}

	function get_selected() {
		return $labels.filter((c) => Object.hasOwn(c, "selected") && c.selected === true);
	}

	function select_label(id) {
		DropdownExports.select(id);
	}

	function select_labels(ids) {
		for (const id of ids) {
			DropdownExports.select(id);
		}
	}

	async function on_create({name}) {
		loading = true;
		const response = await create_label_async({
			name: name,
			color: generate_random_hex_color(),
		});
		loading = false;
		if (response.ok) {
			// Small pause to allow loading state to update everywhere.
			setTimeout(() => select_label(response.data.id), 50);
		}
	}

	export const functions = {
		get_selected,
		reset,
		load_labels: reload_labels,
		select_labels,
		select_label,
	};
</script>

<Dropdown
        entries={$labels}
        label="{$LL.views.entryForm.labels.labels()}"
        maxlength="50"
        createable={true}
        placeholder="{$LL.views.entryForm.labels.placeholder()}"
        multiple="{true}"
        id="labels-search"
        name="labels-search"
        on_create_async={on_create}
        noResultsText="{$LL.views.entryForm.labels.placeholder()}"
        errorText="{labelsError}"
        bind:this={DropdownExports}
        {loading}
/>