From 00f01ef25243440d28567daec27e77bdb4b1b77b Mon Sep 17 00:00:00 2001 From: akkaradej Date: Wed, 5 Jul 2023 15:25:23 +0700 Subject: [PATCH 1/4] fix initial value of string array --- src/lib/Select.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Select.svelte b/src/lib/Select.svelte index b6acc822..ec8dc85c 100644 --- a/src/lib/Select.svelte +++ b/src/lib/Select.svelte @@ -91,7 +91,7 @@ label: value, }; } else if (multiple && Array.isArray(value) && value.length > 0) { - value = value.map((item) => (typeof item === 'string' ? { value: item, label: item } : item)); + value = value.map((item) => (typeof item === 'string' ? { [itemId]: item, label: item } : item)); } } From a4882d61eda94d5a9a9ba84655a042af8bde055e Mon Sep 17 00:00:00 2001 From: akkaradej Date: Wed, 5 Jul 2023 15:28:14 +0700 Subject: [PATCH 2/4] find from items --- src/lib/Select.svelte | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/lib/Select.svelte b/src/lib/Select.svelte index ec8dc85c..457abc6b 100644 --- a/src/lib/Select.svelte +++ b/src/lib/Select.svelte @@ -85,16 +85,20 @@ function setValue() { if (typeof value === 'string') { - let item = (items || []).find((item) => item[itemId] === value); - value = item || { - [itemId]: value, - label: value, - }; + value = findOrCreateObject(value); } else if (multiple && Array.isArray(value) && value.length > 0) { - value = value.map((item) => (typeof item === 'string' ? { [itemId]: item, label: item } : item)); + value = value.map((item) => (typeof item === 'string' ? findOrCreateObject(item) : item)); } } + function findOrCreateObject(value) { + let item = (items || []).find((item) => item[itemId] === value); + return item || { + [itemId]: value, + label: value, + }; + } + let _inputAttributes; function assignInputAttributes() { _inputAttributes = Object.assign( From c98801cda16cca0a1d71c2996961b4fecba2773f Mon Sep 17 00:00:00 2001 From: akkaradej Date: Wed, 5 Jul 2023 15:36:17 +0700 Subject: [PATCH 3/4] add support initial value of number and boolean --- src/lib/Select.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/Select.svelte b/src/lib/Select.svelte index 457abc6b..aff77dd1 100644 --- a/src/lib/Select.svelte +++ b/src/lib/Select.svelte @@ -84,10 +84,10 @@ let prev_multiple; function setValue() { - if (typeof value === 'string') { + if (value != null && typeof value !== 'object') { value = findOrCreateObject(value); } else if (multiple && Array.isArray(value) && value.length > 0) { - value = value.map((item) => (typeof item === 'string' ? findOrCreateObject(item) : item)); + value = value.map((item) => (value != null && typeof value !== 'object' ? findOrCreateObject(item) : item)); } } From 7257358e207cdd162dc2efe7ec3862636b3c36c9 Mon Sep 17 00:00:00 2001 From: akkaradej Date: Wed, 5 Jul 2023 15:59:13 +0700 Subject: [PATCH 4/4] checking type of item --- src/lib/Select.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Select.svelte b/src/lib/Select.svelte index aff77dd1..3f42ffc3 100644 --- a/src/lib/Select.svelte +++ b/src/lib/Select.svelte @@ -87,7 +87,7 @@ if (value != null && typeof value !== 'object') { value = findOrCreateObject(value); } else if (multiple && Array.isArray(value) && value.length > 0) { - value = value.map((item) => (value != null && typeof value !== 'object' ? findOrCreateObject(item) : item)); + value = value.map((item) => (item != null && typeof item !== 'object' ? findOrCreateObject(item) : item)); } }