Skip to content

Commit a183be4

Browse files
committed
Support readonly/computed for dates #207
1 parent 346bf02 commit a183be4

File tree

4 files changed

+46
-13
lines changed

4 files changed

+46
-13
lines changed

grails-app/taglib/au/org/ala/ecodata/forms/ModelJSTagLib.groovy

+19-11
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,13 @@ class ModelJSTagLib {
130130
*/
131131
void renderDataModelItem(JSModelRenderContext ctx) {
132132
Map mod = ctx.dataModel
133-
if (mod.computed) {
133+
if (mod.dataType == 'date') {
134+
dateViewModel(ctx)
135+
}
136+
else if (mod.dataType == 'time') {
137+
timeViewModel(ctx)
138+
}
139+
else if (mod.computed) {
134140
computedModel(ctx)
135141
}
136142
else if (mod.dataType == 'text') {
@@ -151,12 +157,6 @@ class ModelJSTagLib {
151157
else if (mod.dataType == 'species') {
152158
speciesModel(ctx)
153159
}
154-
else if (mod.dataType == 'date') {
155-
dateViewModel(ctx)
156-
}
157-
else if (mod.dataType == 'time') {
158-
timeViewModel(ctx)
159-
}
160160
else if (mod.dataType == 'document') {
161161
documentViewModel(ctx)
162162
}
@@ -624,7 +624,14 @@ class ModelJSTagLib {
624624
}
625625

626626
def dateViewModel(JSModelRenderContext ctx) {
627-
observable(ctx, ["{simpleDate: false}"])
627+
List extenders = ["{simpleDate: {includeTime:false}}"]
628+
if (ctx.dataModel.computed) {
629+
extenders = ["{simpleDate: {includeTime:false, readOnly:true}}"]
630+
computedModel(ctx, extenders)
631+
}
632+
else {
633+
observable(ctx, extenders)
634+
}
628635
}
629636

630637
def booleanViewModel(JSModelRenderContext ctx) {
@@ -670,7 +677,7 @@ class ModelJSTagLib {
670677
observable(ctx, ["{feature:config}"])
671678
}
672679

673-
def computedModel(JSModelRenderContext ctx) {
680+
def computedModel(JSModelRenderContext ctx, List extenders = []) {
674681

675682
// TODO computed values within tables are rendered differently to values outside tables for historical reasons
676683
// This should be tidied up.
@@ -681,10 +688,11 @@ class ModelJSTagLib {
681688
computedValueRenderer.computedViewModel(ctx.out, ctx.attrs, ctx.dataModel, ctx.propertyPath, ctx.propertyPath)
682689
}
683690

684-
if (requiresMetadataExtender(ctx.dataModel)) {
685-
ctx.out << INDENT*3 << "${ctx.propertyPath}.${ctx.dataModel.name} = ${ctx.propertyPath}.${ctx.dataModel.name}${extenderJS(ctx, [])};\n"
691+
if (extenders || requiresMetadataExtender(ctx.dataModel)) {
692+
ctx.out << INDENT*3 << "${ctx.propertyPath}.${ctx.dataModel.name} = ${ctx.propertyPath}.${ctx.dataModel.name}${extenderJS(ctx, extenders)};\n"
686693
}
687694

695+
688696
}
689697

690698
def audioModel(JSModelRenderContext ctx) {

grails-app/views/output/_dateDataTypeEditModelTemplate.gsp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<div id="${context.source}Date" class="input-group">
2-
<input class="form-control form-control-sm inputDatePicker" data-bind="${context.databindAttrs}" type="text" size="12" ${context.validationAttr}/>
2+
<input class="form-control form-control-sm inputDatePicker" ${context.attributes} data-bind="${context.databindAttrs}" type="text" size="12" ${context.validationAttr}/>
33
<div class="input-group-append">
44
<span class="add-on input-group-text open-datepicker"><i class="fa fa-th"></i></span>
55
</div>

package-lock.json

+15
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/groovy/au/org/ala/ecodata/forms/ComputedValueRenderer.groovy

+11-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,17 @@ class ComputedValueRenderer {
1717
String expression = computed.expression
1818
int decimalPlaces = getNumberOfDecimalPlaces(model, computed)
1919

20-
out << "return ecodata.forms.expressionEvaluator.evaluate('${expression}', ${dependantContext}, ${decimalPlaces});\n";
20+
String expressionType
21+
switch (model.dataType) {
22+
case 'text':
23+
case 'date':
24+
expressionType = 'evaluateString'
25+
break
26+
default:
27+
expressionType = "evaluate"
28+
}
29+
30+
out << "return ecodata.forms.expressionEvaluator.${expressionType}('${expression}', ${dependantContext}, ${decimalPlaces});\n";
2131
}
2232

2333
private int getNumberOfDecimalPlaces(Map model, Map computed) {

0 commit comments

Comments
 (0)