@@ -87,10 +87,11 @@ public enum MaterialDatePickerType {
8787 private Element pickatizedDateInput ;
8888 private MaterialLabel lblError = new MaterialLabel ();
8989 private DatePickerLanguage language ;
90+ private JsDatePickerOptions options ;
9091
9192 private MaterialDatePickerType selectionType = MaterialDatePickerType .DAY ;
9293
93- private boolean initialize = false ;
94+ private boolean initialized = false ;
9495 private MaterialIcon icon = new MaterialIcon ();
9596
9697 private ErrorMixin <AbstractValueWidget , MaterialLabel > errorMixin = new ErrorMixin <>(this , lblError , dateInput , lblPlaceholder );
@@ -126,10 +127,9 @@ public MaterialDatePicker(String placeholder, Date value, MaterialDatePickerType
126127 @ Override
127128 public void onLoad () {
128129 super .onLoad ();
129- if (!initialize ) {
130+
131+ if (!initialized ) {
130132 initialize ();
131- } else {
132- reinitialize ();
133133 }
134134 }
135135
@@ -138,12 +138,75 @@ public void onUnload() {
138138 super .onUnload ();
139139
140140 dateTemp = getValue ();
141- initialize = false ;
141+ }
142+
143+ protected void initialize () {
144+ if (options == null ) {
145+ options = new JsDatePickerOptions ();
146+ }
147+ options .container = "body" ;
148+ options .format = getFormat ();
149+ switch (getSelectionType ()) {
150+ case MONTH_DAY :
151+ options .selectMonths = true ;
152+ break ;
153+ case YEAR_MONTH_DAY :
154+ options .selectYears = true ;
155+ options .selectMonths = true ;
156+ break ;
157+ case YEAR :
158+ options .selectYears = true ;
159+ break ;
160+ }
161+ pickatizedDateInput = $ (dateInput .getElement ()).pickadate (options ).asElement ();
162+ label .getElement ().setAttribute ("for" , getPickerId ());
163+ setDate (date );
164+ setDateMin (dateMin );
165+ setDateMax (dateMax );
166+ setPlaceholder (placeholder );
167+
168+ if (options .open == null ) {
169+ options .open = this ::onOpen ;
170+ }
171+ if (options .close == null ) {
172+ options .close = () -> {
173+ onClose ();
174+ $ (pickatizedDateInput ).blur ();
175+ };
176+ }
177+ if (options .set == null ) {
178+ options .set = thing -> {
179+ if (thing .hasOwnProperty ("clear" )) {
180+ onClear ();
181+ } else if (thing .hasOwnProperty ("select" )) {
182+ onSelect ();
183+ }
184+ };
185+ }
186+
187+ $ (pickatizedDateInput ).pickadate ("picker" )
188+ .off (options )
189+ .on (options );
190+ initialized = true ;
191+ }
192+
193+ /**
194+ * Reinitialize the datepicker.
195+ */
196+ public void reinitialize () {
197+ Scheduler .get ().scheduleDeferred (() -> {
198+ initialize ();
199+ if (pickatizedDateInput != null && dateTemp != null ) {
200+ $ (pickatizedDateInput ).pickadate ("picker" ).set ("select" , dateTemp , () -> {
201+ DOM .createFieldSet ().setPropertyObject ("muted" , true );
202+ });
203+ }
204+ });
142205 }
143206
144207 @ Override
145208 public void clear () {
146- if (initialize ) {
209+ if (initialized ) {
147210 clearErrorOrSuccess ();
148211 label .removeStyleName (CssName .ACTIVE );
149212 dateInput .removeStyleName (CssName .VALID );
@@ -162,38 +225,16 @@ public void setDateSelectionType(MaterialDatePickerType type) {
162225 }
163226 }
164227
165- protected void initHandlers (Element picker ) {
166- JsDatePickerOptions events = new JsDatePickerOptions ();
167- events .open = this ::onOpen ;
168-
169- events .close = () -> {
170- onClose ();
171- $ (picker ).blur ();
172- };
173-
174- events .set = thing -> {
175- if (thing .hasOwnProperty ("clear" )) {
176- onClear ();
177- } else if (thing .hasOwnProperty ("select" )) {
178- onSelect ();
179- }
180- };
181-
182- $ (picker ).pickadate ("picker" ).on (events );
183- }
184-
185228 protected void onClose () {
186229 CloseEvent .fire (this , this );
187- fireEvent (new BlurEvent () {
188- });
230+ fireEvent (new BlurEvent (){});
189231 }
190232
191233 protected void onOpen () {
192234 label .addStyleName (CssName .ACTIVE );
193235 dateInput .setFocus (true );
194236 OpenEvent .fire (this , this );
195- fireEvent (new FocusEvent () {
196- });
237+ fireEvent (new FocusEvent (){});
197238 }
198239
199240 /**
@@ -231,32 +272,6 @@ public String getPickerId() {
231272 return $ (pickatizedDateInput ).pickadate ("picker" ).get ("id" ).toString ();
232273 }
233274
234- protected void initialize () {
235- JsDatePickerOptions options = new JsDatePickerOptions ();
236- options .container = "body" ;
237- options .format = getFormat ();
238- switch (getSelectionType ()) {
239- case MONTH_DAY :
240- options .selectMonths = true ;
241- break ;
242- case YEAR_MONTH_DAY :
243- options .selectYears = true ;
244- options .selectMonths = true ;
245- break ;
246- case YEAR :
247- options .selectYears = true ;
248- break ;
249- }
250- pickatizedDateInput = $ (dateInput .getElement ()).pickadate (options ).asElement ();
251- initialize = true ;
252- label .getElement ().setAttribute ("for" , getPickerId ());
253- setDate (this .date );
254- setDateMin (dateMin );
255- setDateMax (dateMax );
256- setPlaceholder (this .placeholder );
257- initHandlers (pickatizedDateInput );
258- }
259-
260275 /**
261276 * Sets the current date of the picker.
262277 *
@@ -278,7 +293,7 @@ public Date getDateMin() {
278293 */
279294 public void setDateMin (Date dateMin ) {
280295 this .dateMin = dateMin ;
281- if (initialize && dateMin != null ) {
296+ if (initialized && dateMin != null ) {
282297 $ (pickatizedDateInput ).pickadate ("picker" ).set ("min" , JsDate .create ((double ) dateMin .getTime ()));
283298 }
284299 }
@@ -295,7 +310,7 @@ public Date getDateMax() {
295310 */
296311 public void setDateMax (Date dateMax ) {
297312 this .dateMax = dateMax ;
298- if (initialize && dateMax != null ) {
313+ if (initialized && dateMax != null ) {
299314 $ (pickatizedDateInput ).pickadate ("picker" ).set ("max" , JsDate .create ((double ) dateMax .getTime ()));
300315 }
301316 }
@@ -349,7 +364,7 @@ public String getPlaceholder() {
349364 public void setPlaceholder (String placeholder ) {
350365 this .placeholder = placeholder ;
351366
352- if (initialize && placeholder != null ) {
367+ if (initialized && placeholder != null ) {
353368 lblPlaceholder .setText (placeholder );
354369 }
355370 }
@@ -427,7 +442,7 @@ public void setValue(Date value, boolean fireEvents) {
427442 return ;
428443 }
429444 this .date = value ;
430- if (initialize ) {
445+ if (initialized ) {
431446 setPickerDate (JsDate .create ((double ) value .getTime ()), pickatizedDateInput );
432447 label .addStyleName (CssName .ACTIVE );
433448 }
@@ -465,24 +480,7 @@ public void setLanguage(DatePickerLanguage language) {
465480 }
466481
467482 /**
468- * Re initialize the datepicker.
469- */
470- public void reinitialize () {
471- Scheduler .get ().scheduleDeferred (() -> {
472- initialize ();
473- if (pickatizedDateInput != null ) {
474- if (dateTemp != null ) {
475- $ (pickatizedDateInput ).pickadate ("picker" ).set ("select" , dateTemp , () -> {
476- DOM .createFieldSet ().setPropertyObject ("muted" , true );
477- });
478- }
479- }
480- });
481-
482- }
483-
484- /**
485- * Stop the datepicker instance
483+ * Stop the datepicker instance.
486484 */
487485 public void stop () {
488486 $ (pickatizedDateInput ).pickadate ("picker" ).stop ();
0 commit comments