Skip to content

Commit

Permalink
Support computed select2Many #216
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisala committed Nov 27, 2023
1 parent 56da7f1 commit 361be46
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 10 deletions.
5 changes: 4 additions & 1 deletion grails-app/assets/javascripts/forms-knockout-bindings.js
Original file line number Diff line number Diff line change
Expand Up @@ -679,7 +679,10 @@
var options = _.defaults(valueAccessor() || {}, defaults);

$(element).select2(options).change(function(e) {
model($(element).val());
if (ko.isWritableObservable(model)) { // Don't try and write the value to a computed.
model($(element).val());
}

});

if (options.preserveColumnWidth) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,10 +134,13 @@ public class EditModelWidgetRenderer implements ModelWidgetRenderer {
context.writer << "<div${context.attributes.toString()}><select class=\"select form-control form-control-sm\" data-bind='${context.databindAttrs.toString()}'${context.validationAttr}></select></div>"
}

private static boolean isReadOnly(WidgetRenderContext context) {
context.model.readonly || context.dataModel.computed
}
@Override
void renderSelectMany(WidgetRenderContext context) {

if (context.model.readonly) {
if (isReadOnly(context)) {
renderSelectManyAsString(context)
}
else {
Expand All @@ -147,16 +150,23 @@ public class EditModelWidgetRenderer implements ModelWidgetRenderer {

@Override
void renderSelect2Many(WidgetRenderContext context) {
context.databindAttrs.add 'options', context.source + '.constraints'
context.databindAttrs.add 'optionsValue', context.source + '.constraints.value'
context.databindAttrs.add 'optionsText', context.source + '.constraints.text'

String options = "{value: ${context.source}, tags:true, allowClear:false}"
if (context.model.displayOptions) {
options = "_.extend({value:${context.source}}, ${context.source}.displayOptions)"
if (isReadOnly(context)) {
renderSelectManyAsString(context)
}
else {
context.databindAttrs.add 'options', context.source + '.constraints'
context.databindAttrs.add 'optionsValue', context.source + '.constraints.value'
context.databindAttrs.add 'optionsText', context.source + '.constraints.text'

String options = "{value: ${context.source}, tags:true, allowClear:false}"
if (context.model.displayOptions) {
options = "_.extend({value:${context.source}}, ${context.source}.displayOptions)"
}
context.databindAttrs.add 'multiSelect2', options
context.writer << "<div${context.attributes.toString()}><select multiple=\"multiple\" class=\"select form-control form-control-sm\" data-bind='${context.databindAttrs.toString()}'${context.validationAttr}></select></div>"
}
context.databindAttrs.add 'multiSelect2', options
context.writer << "<div${context.attributes.toString()}><select multiple=\"multiple\" class=\"select form-control form-control-sm\" data-bind='${context.databindAttrs.toString()}'${context.validationAttr}></select></div>"

}

@Override
Expand Down

0 comments on commit 361be46

Please sign in to comment.