aboutsummaryrefslogtreecommitdiffstats
path: root/old-apps/projects/src/app/pages/views/entry-form/sections/labels.svelte
diff options
context:
space:
mode:
Diffstat (limited to 'old-apps/projects/src/app/pages/views/entry-form/sections/labels.svelte')
-rw-r--r--old-apps/projects/src/app/pages/views/entry-form/sections/labels.svelte66
1 files changed, 66 insertions, 0 deletions
diff --git a/old-apps/projects/src/app/pages/views/entry-form/sections/labels.svelte b/old-apps/projects/src/app/pages/views/entry-form/sections/labels.svelte
new file mode 100644
index 0000000..a6f324b
--- /dev/null
+++ b/old-apps/projects/src/app/pages/views/entry-form/sections/labels.svelte
@@ -0,0 +1,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}
+/>