From 3273b4c0b642a6a0f93844f9897f3800b31a1666 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9mence=20Totem?=
<90200689+CrosClemence@users.noreply.github.com>
Date: Fri, 10 Nov 2023 14:12:01 +0100
Subject: [PATCH 1/2] Update Multiselect.php
Add possibilities to have group of options with selected options
---
src/Multiselect.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Multiselect.php b/src/Multiselect.php
index 1844bff..ace9bd6 100644
--- a/src/Multiselect.php
+++ b/src/Multiselect.php
@@ -43,7 +43,7 @@ public function options($options = [])
})
->groupBy('group')
->map(function ($value, $key) {
- return ['label' => $key, 'values' => $value->map->only(['label', 'value'])->toArray()];
+ return ['label' => $key, 'values' => $value->map->only(['label', 'value', 'selected'])->toArray()];
})
->values()
->toArray();
From d7cfb43be17f6b98708db7df8cf604aedb65b324 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9mence=20Totem?=
<90200689+CrosClemence@users.noreply.github.com>
Date: Fri, 10 Nov 2023 16:53:58 +0100
Subject: [PATCH 2/2] Update FormField.vue
Add possibilities to have group of options with selected options
---
resources/js/components/FormField.vue | 91 ++++++++++++++-------------
1 file changed, 48 insertions(+), 43 deletions(-)
diff --git a/resources/js/components/FormField.vue b/resources/js/components/FormField.vue
index 0143598..943ef61 100644
--- a/resources/js/components/FormField.vue
+++ b/resources/js/components/FormField.vue
@@ -4,38 +4,38 @@
{{ __('novaMultiselect.maxElements', { max: String(currentField.max || '') }) }}
@@ -51,9 +51,9 @@
@@ -80,9 +80,9 @@
{{ __(reorderMode ? 'novaMultiselect.doneReordering' : 'novaMultiselect.reorder') }}
@@ -210,7 +210,12 @@ export default {
methods: {
setInitialValue() {
- if (this.isMultiselect) {
+ if (this.isOptionGroups) {
+ const valuesArray = this.options.map((option) => {
+ return option.values.filter((subOption) => { return subOption.selected }
+ )});
+ this.value = valuesArray.flat();
+ } else if (this.isMultiselect) {
const valuesArray = this.getInitialFieldValuesArray();
this.value = valuesArray && valuesArray.length ? valuesArray.map(this.getValueFromOptions).filter(Boolean) : [];
} else {
@@ -251,8 +256,8 @@ export default {
this.$nextTick(() => this.repositionDropdown());
Nova.$emit(`multiselect-${this.field.attribute}-input`, this.value);
this.emitFieldValueChange(
- this.field.attribute,
- !this.value ? '' : this.isMultiselect ? this.value.map(v => v.value) : this.value.value
+ this.field.attribute,
+ !this.value ? '' : this.isMultiselect ? this.value.map(v => v.value) : this.value.value
);
},
@@ -334,8 +339,8 @@ export default {
ms.$refs.list.style['border-radius'] = '5px 5px 0 0';
} else {
const adjustedTop = fixedModal
- ? top - (parseInt(window.getComputedStyle(fixedModal)['padding-top']) || 0)
- : top;
+ ? top - (parseInt(window.getComputedStyle(fixedModal)['padding-top']) || 0)
+ : top;
ms.$refs.list.style.bottom = 'auto';
ms.$refs.list.style.top = `${adjustedTop + height}px`;
ms.$refs.list.style['border-radius'] = '0 0 5px 5px';