Skip to content

Commit c4facf7

Browse files
committed
commit updates #1895
1 parent faa2f1a commit c4facf7

File tree

3 files changed

+39
-21
lines changed

3 files changed

+39
-21
lines changed

grails-app/assets/javascripts/knockout-dates.js

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -78,16 +78,19 @@
7878
// a JS Date object - useful with datepicker; and
7979
// a simple formatted date of the form dd-mm-yyyy useful for display.
8080
// The formatted date will include hh:MM if the includeTime argument is true
81-
ko.extenders.simpleDate = function (target, options) {
82-
var includeTime = false;
83-
var isReadOnly = false;
84-
if (_.isObject(options)) {
85-
includeTime = options.includeTime || false;
86-
isReadOnly = options.readOnly || false;
87-
}
88-
else {
89-
includeTime = options || false;
90-
}
81+
ko.extenders.simpleDate = function (target, options) {
82+
var includeTime = false;
83+
var isReadOnly = false;
84+
var showInUserTimeZone = false;
85+
86+
if (_.isObject(options)) {
87+
includeTime = options.includeTime || false;
88+
isReadOnly = options.readOnly || false;
89+
showInUserTimeZone = options.showInUserTimeZone || false;
90+
}
91+
else {
92+
includeTime = options || false;
93+
}
9194

9295
target.date = ko.computed({
9396
read: function () {
@@ -106,20 +109,19 @@ ko.extenders.simpleDate = function (target, options) {
106109
target(valueToWrite);
107110
}
108111
} else {
109-
// date has been cleared
110112
target("");
111113
}
112114
}
113115
});
114116
target.formattedDate = ko.computed({
115117
read: function () {
116-
return convertToSimpleDate(target(), includeTime);
118+
return convertToSimpleDate(target(), includeTime, showInUserTimeZone);
117119
},
118120

119121
write: function (newValue) {
120-
if (isReadOnly) {
121-
return;
122-
}
122+
if (isReadOnly) {
123+
return;
124+
}
123125
if (newValue) {
124126
var current = target(),
125127
valueToWrite = convertToIsoDate(newValue);
@@ -130,6 +132,7 @@ ko.extenders.simpleDate = function (target, options) {
130132
}
131133
}
132134
});
135+
133136
target.date(target());
134137
target.formattedDate(target());
135138

grails-app/assets/javascripts/utils.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,17 +81,21 @@ function isValidDate(d) {
8181
return !isNaN(d.getTime());
8282
}
8383

84-
function convertToSimpleDate(isoDate, includeTime) {
84+
function convertToSimpleDate(isoDate, includeTime, showInUserTimeZone) {
8585
if (!isoDate) { return ''}
8686
if (typeof isoDate === 'object') {
8787
// assume a date object
8888
if (!isValidDate(isoDate)) {
8989
return '';
9090
}
9191
}
92-
// Format the stage labels using Melbourne/Sydney/Canberra time to avoid problems where the date starts
93-
// at midnight and displays as the previous day in other timezones.
94-
var date = moment.tz(isoDate, "Australia/Sydney");
92+
93+
var timezone = "Australia/Sydney";
94+
if (showInUserTimeZone === true) {
95+
timezone = Intl.DateTimeFormat().resolvedOptions().timeZone || timezone;
96+
}
97+
98+
var date = moment.tz(isoDate, timezone);
9599
var format = includeTime ? "DD-MM-YYYY HH:mm" : "DD-MM-YYYY";
96100
return date.format(format);
97101
}

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -626,9 +626,20 @@ class ModelJSTagLib {
626626
}
627627

628628
def dateViewModel(JSModelRenderContext ctx) {
629-
List extenders = ["{simpleDate: {includeTime:false}}"]
629+
def options = ["includeTime:false"]
630+
631+
if (ctx.dataModel.computed) {
632+
options << "readOnly:true"
633+
}
634+
635+
if (ctx.dataModel.showInUserTimeZone) {
636+
options << "showInUserTimeZone:true"
637+
}
638+
639+
def extender = "{simpleDate: {${options.join(', ')}}}"
640+
List extenders = [extender]
641+
630642
if (ctx.dataModel.computed) {
631-
extenders = ["{simpleDate: {includeTime:false, readOnly:true}}"]
632643
computedModel(ctx, extenders)
633644
}
634645
else {

0 commit comments

Comments
 (0)