Skip to content

Commit d3df075

Browse files
author
wassx
committed
Fixed set date bug where wrong date was set due to wrong format. Added
functionality to set "select year, month" option
1 parent e5503f8 commit d3df075

File tree

1 file changed

+60
-16
lines changed

1 file changed

+60
-16
lines changed

src/main/java/gwt/material/design/client/ui/MaterialDatePicker.java

Lines changed: 60 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import java.util.Date;
2424

25+
import com.google.gwt.core.client.JavaScriptObject;
2526
import com.google.gwt.i18n.client.DateTimeFormat;
2627
import com.google.gwt.user.client.ui.FocusPanel;
2728
import com.google.gwt.user.client.ui.HTMLPanel;
@@ -45,7 +46,8 @@ public interface MaterialDatePickerDelegate {
4546
private String placeholder;
4647
private String id;
4748
private MaterialDatePickerDelegate delegate;
48-
49+
private MaterialDatePickerType selectionType = MaterialDatePickerType.DAY;
50+
JavaScriptObject input;
4951
public MaterialDatePicker() {
5052

5153
}
@@ -58,27 +60,58 @@ protected void onAttach() {
5860
this.clear();
5961
panel = new HTMLPanel("<input placeholder='"+placeholder+"' type='date' id='"+id+"' class='datepicker'>");
6062
this.add(panel);
61-
initDatePicker(id);
63+
initDatePicker(id, selectionType.name(), this);
6264
initClickHandler(id, this);
6365
}
66+
67+
public static native void initDatePicker(String id, String typeName, MaterialDatePicker parent)/*-{
68+
var input;
69+
if(typeName === "MONTH_DAY") {
70+
input = $wnd.jQuery('#' + id).pickadate({
71+
selectYears: false,
72+
selectMonths: true
73+
});
74+
} else if(typeName === "YEAR_MONTH_DAY") {
75+
input = $wnd.jQuery('#' + id).pickadate({
76+
selectYears: true,
77+
selectMonths: true
78+
});
79+
} else {
80+
input = $wnd.jQuery('#' + id).pickadate();
81+
}
82+
83+
[email protected]::input = input;
84+
85+
}-*/;
86+
87+
/**
88+
* Sets the type of selection options (date, month, year,...).
89+
* @param type if <code>null</code>, {@link MaterialDatePickerType#DAY} will be used as fallback.
90+
*/
91+
public void setDateSelectionType(MaterialDatePickerType type) {
92+
if(type == null) {
93+
type = MaterialDatePickerType.DAY;
94+
}
95+
this.selectionType = type;
96+
}
6497

6598
public static native String getDatePickerValue(String id)/*-{
66-
var color = $wnd.jQuery('#' + id).val();
99+
var color = $wnd.jQuery('#' + id).val();
67100
return color;
68101
}-*/;
69102

70103
private static native void setDatePickerValue(String value, String id)/*-{
71104
$wnd.jQuery('#' + id).val(value);
72105
}-*/;
73106

74-
public static native void initDatePicker(String id)/*-{
75-
$wnd.jQuery('#' + id).pickadate();
76-
}-*/;
77-
78-
native void initClickHandler(String id, MaterialDatePicker picker) /*-{
79-
$wnd.jQuery('.picker__wrap').bind('click',function(){
80-
[email protected]::notifyDelegate()();
81-
});
107+
native void initClickHandler(String id, MaterialDatePicker parent) /*-{
108+
var input = [email protected]::input;
109+
var picker = input.pickadate('picker');
110+
picker.on({
111+
close: function() {
112+
[email protected]::notifyDelegate()();
113+
}
114+
});
82115
}-*/;
83116

84117
/**
@@ -123,14 +156,15 @@ public void setDate(Date date) {
123156
this.date = date;
124157
DateTimeFormat sdf = DateTimeFormat.getFormat("d MMM, yyyy");
125158
setDatePickerValue(sdf.format(date), id);
126-
selectDate(sdf.format(date), id);
159+
DateTimeFormat sdfSetter = DateTimeFormat.getFormat("yyyy-MM-dd");
160+
selectDate(sdfSetter.format(date), id, this);
127161
}
128162

129-
private native void selectDate(String date, String id) /*-{
130-
var $input = $wnd.jQuery('#' + id).pickadate();
131-
var picker = $input.pickadate('picker');
163+
private native void selectDate(String date, String id, MaterialDatePicker parent) /*-{
164+
var input = [email protected]::input;
165+
var picker = input.pickadate('picker');
132166
if(picker) {
133-
picker.set('select', date);
167+
picker.set('select', date, { format: 'yyyy-mm-dd' });
134168
}
135169
}-*/;
136170

@@ -142,4 +176,14 @@ public void setPlaceholder(String placeholder) {
142176
this.placeholder = placeholder;
143177
}
144178

179+
/**
180+
* Enum for identifying various selection types for the picker.
181+
*
182+
*/
183+
public enum MaterialDatePickerType {
184+
DAY,
185+
MONTH_DAY,
186+
YEAR_MONTH_DAY
187+
}
188+
145189
}

0 commit comments

Comments
 (0)